koishi-plugin-aka-chatluna-lark-message-bridge
v0.0.1
Published
Draft ChatLuna bridge plugin for preserving selected Lark message resources as model-consumable multimodal content.
Maintainers
Readme
koishi-plugin-aka-chatluna-lark-message-bridge
用于 ChatLuna 的附挂式消息资源桥接草案插件,目标是优先拦截入站消息里的受保护资源元素,避免默认读取流程把这些资源落地为本地临时文件并再改写成 127.0.0.1 一类仅本机可访问的 URL。
当前草案主要面向这条链路:
aka-adapter-lark已把飞书图片转成data:image/...- ChatLuna 已经可以读取这张图
- 但默认
img转换器后续又把图片改写成 localhost URL
这个插件的第一版策略是:
- 在
ctx.chatluna.messageTransformer上对img/image注册高优先级拦截 - 对命中的图片 URL 直接写入 ChatLuna 多模态消息内容:
[{ type: 'image_url', image_url: { url } }] - 返回已处理,尽量不再走默认图片转换器
Current Status
这是一个源码草案,不是已验证完成的正式修复。它优先尝试在 ChatLuna 的“消息读取层”解决问题。
当前实现仍然只拦截图片元素,但插件命名改成了 message-bridge,因为后续很可能会继续扩到文件等其他消息资源类型。
如果实际运行后发现:
- 命中了这个插件的拦截逻辑
- 但最终发往模型前依然被改写成
127.0.0.1
那就说明问题进一步落在 adapter-openai-like 的请求组装层,下一步应优先 fork ChatLuna 的 adapter-openai-like,而不是继续改这个外围插件。
Config
preserveDataUrl: 是否保留data:image/...,默认truepreserveHttpUrl: 是否保留http://图片 URL,默认falsepreserveHttpsUrl: 是否保留https://图片 URL,默认falseskipLocalhostLikeUrls: 是否跳过localhost / 127.0.0.1 / 0.0.0.0 / ::1这类 URL,默认trueinterceptPriority: ChatLuna 消息转换拦截优先级,默认-100debug: 是否输出命中日志,默认false
建议你的飞书场景先只开默认配置,也就是只保留 data:image/...。
Runtime Assumptions
- 运行环境中已经安装并启用了
koishi-plugin-chatluna - ChatLuna 暴露了
ctx.chatluna.messageTransformer - 默认图片元素类型为
img,若运行时还存在image类型也会一起拦截 - ChatLuna 当前多模态消息内容仍接受:
{ type: 'image_url', image_url: { url } }
Scripts
pnpm build
pnpm typecheckPublish
pnpm run prepublishOnly
npm publish