|
|
74e2c654ed
|
feat(sdk): 22 个示例插件配齐 skill + 三态启动声明 + 打包期校验
## 用户的三条要求
1. 「所有插件都默认自启会占启动时间,还在 llms 上下文塞大量工具」
⇒ 纯工具型改为按需加载,靠 skill 让 agent 知道要先拉起。
2. 「会向 agent 注入输入的部分插件不能这样做」
⇒ 9 个必须常驻,其余 13 个按需。
3. 「sdk 是不是没有暴露插件声明自身行为的方案」
⇒ 对:auto_start 只在 internal/plugin/manifest.go 有,SDK 零命中。
## 定级依据(代码证据,不是猜描述)
注入 / 钩子 ⇒ 必须常驻(9 个):
qq HTTP 监听 NapCat 推送,消息到达要立刻注入
rss 轮询订阅源,新文章主动推送
calendar 30s ticker 检查提醒
memo 5min ticker 检查待办到期
a2a TCP 监听外部 Agent 请求
acp TCP 监听 ACP 客户端
browser ticker + 长命令完成回调
sanitizer 注册 stage 钩子(无工具,要每轮生效)
luademo 注册 stage 钩子做示范
纯工具型 ⇒ 按需(13 个):
weather ocr music bili ai_image files editdoc deepsearch
plugindev recoverydiag vanblog vikunja commondev
★ commondev 值得单独说:它虽然有 6 处 Inject 调用,但**注入源是自己的
sidecar 完成回投**,而 sidecar 只在 commondev_agent_up 时才拉起
(Start() 里不启 sidecar,通道也在 agent_up 时才注册)。所以没有 agent
调用它时,它不需要做任何事 —— 可以按需。44 个工具 ≈726 tokens 省下来可观。
## 改动
· 22 个插件各配一个 skill,写明:何时用、先 plugin_start、
工具清单、**用 plugin_stop 而不是 plugin_disable**
· 13 个 plg.json 加 `auto_start: false`
· `sdk/autostart.go`:把三态语义与"按需插件必须有 skill"的理由写进公开 SDK
· hmapdev 打包期校验:`auto_start=false` 但无 skill/ 目录 ⇒ 直接 exit 1
(理由:缺 skill 的按需插件**等价于没装**,比没装更糟 —— 占着磁盘让人以为可用)
· 修 Lua 打包路径:它**完全不走** rawfile/skill 收集,luademo 的 skill 永远打不进去
· 修 build-examples.sh:原来 `[ ! -x ]` 判"二进制在不在",改了 hmapdev 源码后
重新打包**仍用旧工具链**(实测:luademo 的 skill 一直是 0)
· 补 mocksdk.ToolDef.Timeout(上一轮加 ToolDef.Timeout 时漏了镜像)
## 判据
· TestHasSkillDirRequiresRealSkillMd(空目录/.gitkeep/无 SKILL.md 都不算)
· TestBuildRejectsOnDemandWithoutSkill(打包期必须真拦住 + exit 1)
· TestLuaPackagingCollectsSkillAndRawfiles(**验代码行**,不验注释 —— 第一版
只查符号存在,把 createHmapWithRaw 换回 createHmap 判据照样通过)
## 踩过的坑
· Lua 分支的结束边界原是 `// Resolve build config`,但那个注释在文件里
**出现多次**(Go 路径里也有),用它截取会把 Go 分支一起包进来 ⇒
变异测不出。改成截到 Lua 分支自己的 `return` + `}`。
|
2026-10-18 13:21:47 +08:00 |
|
|
|
d57c5eaf3e
|
fix(examples): 全插件安全审查修复(qq/a2a/memo/calendar/rss/browser/bili/recoverydiag)
审查发现并修复 7 项问题:
- P1 qq: downloadURL 裸 http.Get 无超时 → 120s client
- P2 a2a: inbound http.Server 零超时 → Read 30s/Write 120s/Idle 60s
- P3 bili: output_dir 配置项零校验 → 系统目录黑名单(/、/etc、/usr、/var 等)
- P4 recoverydiag: db_path LLM 可控任意 sqlite → 强制限制 data 目录内
- P5 memo/calendar/rss: os.WriteFile 直写 → atomicWriteJSON (temp+rename)
- P6 qq: 3 处后台 goroutine(已读/rcon转发/下载)加 panic recover
- P7 browser: dump-dom failback Kill 后补 wait 回收僵尸进程
recoverydiag 此前被 .gitignore 排除,但其 db_path 安全修复
属生产代码,故取消忽略并入库。
全部经 plugindev 重打包升版安装验证 config_kept=true。
|
2026-08-26 17:04:41 +08:00 |
|
|
|
cca9fdce9c
|
example: 新增 acp(ACP 代理通信)、vanblog(VanBlog 博客管理) 插件; 多插件工具调用检测与清理改进; weather 移除 onRemove/文本记忆; plugindev 精简
|
2026-08-15 09:03:05 +08:00 |
|
|
|
04837f237d
|
plugindev: 全面 plg.json 持久化 + --replace 支持 + 文档
|
2026-07-25 15:47:49 +08:00 |
|
|
|
2284d8897c
|
feat: restore bili plugin, merge only web+webfetch into browser plugin
|
2026-07-18 21:11:18 +08:00 |
|
|
|
0856a9b2c3
|
feat: merge web/webfetch/bili into single browser plugin (search/fetch/render/video)
|
2026-07-18 21:06:56 +08:00 |
|
|
|
1762f0c34b
|
docs: 修正全部文档使其与源码实现一致
- Plugin.Start(sdk *PluginSDK) 接口签名改为指针
- 方法表重写: 移除 CallLLM/QueryKnowledge/SetMemory 等不存在方法
- IOInjector 参数顺序修正为 (source, channel, text)
- 删除虚构 SDKConfig, 替换为实际 New() 构造函数签名
- .hmap 内容描述一致化 (plugin.so + plugin.dll + main.lua)
- 添加 meta/ 包元数据文件
|
2026-07-18 20:47:17 +08:00 |
|