mirror of
https://gitcode.com/JianFeeeee/homeagent-sdk.git
synced 2026-10-31 06:17:25 +00:00
## 背景 主仓按「只有必须使用内部 SDK 能力的插件才内置」的判定标准(见主仓 ARCHITECTURE「内置插件的判定标准」)把纯公开 SDK 插件移出编译期内置清单。 本仓为它们提供外部插件工程(example/ 下,hmapdev 可直接构建)。 ★ 终审翻案:kbtree 与 multimodal **不**在本次外置之列 —— 逐方法对照 公开 SDK 后发现它们依赖内部专有能力(kbtree 要 KnowledgeAPI 的 Subtree/CategoryCounts/SearchIn/Categories 与树视图类型;multimodal 要 LLMAPI.Chat 与多模态消息类型),公开面没有,已加回主仓内置清单。 ## 新增工程(全部对齐当前模板 + 随用随起契约) | 工程 | 工具 | auto_start | 说明 | |---|---|---|---| | cmd | cmd_run | false(按需) | 沙箱执行 shell 命令 | | localuse | screensee/screensue/camerasue/speakeruse/clipboardsee/clipboardsue/computeruse | false(按需) | 本机外设 | | mcp | mcp_add/list/remove/restart_server | false(按需) | MCP 服务器接入(stdio/SSE) | 每工程:plg.json(含 sdk 字段声明)+ skill/<name>-tools/SKILL.md + README。按 auto_start 契约(sdk/autostart.go 的 OnDemandNeedsSkill), **auto_start=false 必须配 skill**,否则工具不出现在初始清单 ⇒ 模型不知道 它存在 ⇒ 永远不会被拉起,等于没装还占地方。 ## 移植要点 - 注册:内置版 init()+RegisterFactory → 外部版导出 NewPluginFactory; RegisterPluginMeta 的显示名进 plg.json/plugin.json。 - mcp:本地 rpcRequest/rpcResponse/rpcError 与 hmapdev 生成的 z_proc_gen.go 同名冲突(构建期生成物与本目录源码同包编译), 本地类型改名 mcpRPC*;internal/safeclose 内联为 safeCloseChan (外部插件不能引 internal 包,close-of-closed-channel 纪律随之带过来)。 - module 名:cmd 的 go.mod 用 homeagent-cmd(避免与标准库 cmd 混淆); name_en 对齐插件名,hmapdev 以 toSnake(name_en) 命名产物 (此前误写 Command/Local,产物成了 command_/local_)。 ## files:新增 files_edit_line(按行号精确编辑) files_edit 要求 old 文本全文件唯一,改「第三个 case 的 break」这类 非唯一文本时只能退化为整文件重写(有损)。files_edit_line 按行号 定位,op=replace/insert/delete,支持: - 多条 edit 从后往前应用(前面行号不漂移) - expect 安全闸:行内容与预期不符则整体拒绝(防行号过期改错位置) - CRLF/末尾换行保真 skill 同步补 edit_line 行。测试 5 条(含 expect 拒绝路径)。 ## 验证 hmapdev build 四工程全过:cmd/localuse/mcp/files 产物齐; go test files 全绿。
56 lines
1.8 KiB
Markdown
56 lines
1.8 KiB
Markdown
---
|
||
name: file-tools
|
||
description: 沙箱内文件读写(read/write/edit/ls)。按需工具:先 plugin_start files,用完可 plugin_stop。
|
||
---
|
||
|
||
# 文件操作
|
||
|
||
## 什么时候用
|
||
|
||
需要在**插件配置的工作目录**内读写文件时。
|
||
|
||
★ 如果你已经有 run_shell / bash 之类的能力,优先用那个 —— 它更直接。
|
||
本插件适合**没有 shell 权限**或需要走沙箱路径限制的场景。
|
||
|
||
## 先拉起插件
|
||
|
||
```
|
||
plugin_start name=files
|
||
```
|
||
|
||
| 工具 | 用途 |
|
||
|---|---|
|
||
| `files_read` | 读文件内容 |
|
||
| `files_write` | 写文件(覆盖) |
|
||
| `files_edit` | 局部替换编辑(old 文本须全文件唯一) |
|
||
| `files_edit_line` | **按行号**精确替换/插入/删除(目标文本不唯一时用它,如改第 N 个 `}`) |
|
||
| `files_ls` | 列目录 |
|
||
|
||
## 用完可释放
|
||
|
||
```
|
||
plugin_stop name=files
|
||
```
|
||
|
||
## 注意
|
||
|
||
- 只能访问**配置的工作目录**内。走出沙箱会明确报错,不要试图绕。
|
||
- 写/改之前先读一遍,确认不是要保留的内容。
|
||
|
||
## ★ 用 plugin_stop / plugin_start,不要用 plugin_disable / plugin_enable
|
||
|
||
四个工具看着像同义词,语义差别很大:
|
||
|
||
| 工具 | 作用 | 跨重启 |
|
||
|---|---|---|
|
||
| `plugin_stop` | **运行态**关闭,现在停掉 | **不影响**,重启照常加载 |
|
||
| `plugin_start` | **运行态**拉起,现在开回来 | 不影响 |
|
||
| `plugin_disable` | **持久**禁用 | **会记下来**,开机也不自启 |
|
||
| `plugin_enable` | 解除持久禁用 | 会记下来 |
|
||
|
||
**释放上下文用 `plugin_stop`。** 用 `plugin_disable` 会顺手把"开机自启"
|
||
永久关掉 —— 用户下次开机发现插件没了,得再手动开回来。
|
||
|
||
(本插件声明 `auto_start: false`,所以它本来就不自启;但 `plugin_disable`
|
||
仍会写进持久禁用清单,让 `plugin_start` 拒绝拉起,只能再用 `plugin_enable` 解。)
|