@bitfun-vsl/plugin 0.0.0-stage → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +62 -3
  3. package/assets/bitfun/command/vsl/cr-health.md +5 -0
  4. package/assets/bitfun/command/vsl/review.md +5 -0
  5. package/assets/bitfun/command/vsl/trajectory.md +8 -0
  6. package/assets/build.json +4 -0
  7. package/assets/claude-code/.claude-plugin/plugin.json +5 -0
  8. package/assets/claude-code/.mcp.json +10 -0
  9. package/assets/claude-code/agents/vsl-trajectory.md +6 -0
  10. package/assets/claude-code/commands/cr-health.md +7 -0
  11. package/assets/claude-code/commands/review.md +7 -0
  12. package/assets/claude-code/commands/trajectory.md +10 -0
  13. package/assets/claude-code/scripts/mcp-server.js +741 -0
  14. package/assets/claude-code/skills/vsl-trajectory-analysis/SKILL.md +7 -0
  15. package/assets/deveco/skills/vsl-trajectory-analysis/SKILL.md +7 -0
  16. package/assets/install-manifest.json +58 -0
  17. package/assets/skills/vsl-trajectory-analysis/SKILL.md +7 -0
  18. package/dist/cli/index.d.ts +17 -0
  19. package/dist/cli/index.js +4576 -0
  20. package/dist/hosts/bitfun-kernel/commands.d.ts +26 -0
  21. package/dist/hosts/bitfun-kernel/plugin.d.ts +2 -0
  22. package/dist/hosts/bitfun-kernel/plugin.js +661 -0
  23. package/dist/hosts/claude-code/index.d.ts +1 -0
  24. package/dist/hosts/claude-code/index.js +680 -0
  25. package/dist/hosts/claude-code/mcp-server.d.ts +45 -0
  26. package/dist/hosts/deveco/plugin.d.ts +2 -0
  27. package/dist/hosts/deveco/plugin.js +659 -0
  28. package/dist/hosts/shared/opencode.d.ts +12 -0
  29. package/dist/hosts/shared/schema.d.ts +8 -0
  30. package/dist/index.d.ts +2 -0
  31. package/dist/index.js +663 -0
  32. package/dist/install/config.d.ts +50 -0
  33. package/dist/install/index.d.ts +182 -0
  34. package/dist/install/resources.d.ts +7 -0
  35. package/dist/install/resources.js +590 -0
  36. package/dist/plugin/contracts.d.ts +63 -0
  37. package/dist/plugin/index.d.ts +19 -0
  38. package/dist/plugin/index.js +539 -0
  39. package/dist/plugin/modules/code-review/index.d.ts +4 -0
  40. package/dist/plugin/modules/code-review/runtime.d.ts +42 -0
  41. package/dist/plugin/modules/trajectory-analysis.d.ts +2 -0
  42. package/dist/plugin/registry.d.ts +16 -0
  43. package/dist/plugin/schema.d.ts +2 -0
  44. package/dist/runtime.d.ts +22 -0
  45. package/docs/code-review-integration.md +182 -0
  46. package/docs/init-installation.md +97 -0
  47. package/docs/plugin-design.md +391 -0
  48. package/package.json +74 -6
@@ -0,0 +1,391 @@
1
+ # VSL 插件系统设计
2
+
3
+ ## 1. 目标与整体结构
4
+
5
+ `@bitfun-vsl/plugin` 是一个通过 npm 包分发的插件集合,供 DevEco Code 和 Claude Code 使用。一个模块可以提供 Command、Agent、Skill、Tool 中的一种或多种资源。
6
+
7
+ 实现分为三部分:
8
+
9
+ | 部分 | 位置 | 职责 |
10
+ | --- | --- | --- |
11
+ | 共享模块 | `src/plugin/` | 定义资源契约、聚合模块、校验命名和引用、实现 Tool |
12
+ | 宿主适配 | `src/hosts/` | 将共享资源接入 DevEco 与 BitFun kernel 的 OpenCode 插件 API、Skill 目录或 Claude MCP |
13
+ | Claude 原生资源 | `assets/claude-code/` | 提供 Claude 可直接发现的 Command、Agent、Skill 和 MCP 配置 |
14
+
15
+ 宿主负责模型调用、会话、权限控制、命令解析和 Agent 调度;插件负责资源内容及工具实现。接入使用两个宿主已有的扩展机制,无需修改宿主源码。
16
+
17
+ ```mermaid
18
+ flowchart TD
19
+ M[模块定义] --> R[Registry 聚合与校验]
20
+ R --> D[DevEco 插件适配器]
21
+ R --> I[静态 Skill 路径]
22
+ R --> B[BitFun kernel 插件适配器]
23
+ R --> J[BitFun 命令文件]
24
+ R --> C[Claude MCP Server]
25
+ D --> DH[DevEco Command / Agent / Tool]
26
+ B --> BH[BitFun Agent / Tool / Skill]
27
+ J --> BJ[BitFun Command]
28
+ I --> DS[DevEco skills 目录]
29
+ C --> CT[Claude MCP Tools]
30
+ A[Claude 原生资源目录] --> CH[Claude Command / Agent / Skill]
31
+ ```
32
+
33
+ 当前内置轨迹分析 mock 模块和 `code-review` 模块。轨迹模块验证四类资源;代码审查模块只注册 Command 和 Tool,直接封装 review 的完整 `cr review` 引擎。代码审查的结构、配置和验证说明见 `docs/code-review-integration.md`。
34
+
35
+ ## 2. 工程目录结构
36
+
37
+ 以下列出维护中的源码、资源、配置,以及构建产物。`dist/`、生成的 MCP 脚本、`node_modules/` 和本地 tgz 属于生成内容。
38
+
39
+ ```text
40
+ .
41
+ ├── src/
42
+ │ ├── index.ts # npm 默认入口,导出 DevEco 插件和共享模块 API
43
+ │ ├── plugin/
44
+ │ │ ├── contracts.ts # 四类资源、执行上下文、工具返回值的类型
45
+ │ │ ├── registry.ts # 模块过滤、资源聚合、冲突和引用校验
46
+ │ │ ├── index.ts # createRegistry 与默认内置模块列表
47
+ │ │ └── modules/
48
+ │ │ └── trajectory-analysis.ts # 轨迹分析模块及三个 mock Tool
49
+ │ └── hosts/
50
+ │ ├── shared/
51
+ │ │ ├── opencode.ts # OpenCode 插件宿主实现,DevEco 与 BitFun 共用
52
+ │ │ └── schema.ts # 共享 JSON Schema 到宿主参数定义的转换
53
+ │ ├── deveco/
54
+ │ │ └── plugin.ts # DevEco V1 Hooks 适配器(写 Command)
55
+ │ ├── bitfun-kernel/
56
+ │ │ ├── plugin.ts # BitFun kernel 插件入口(不写 Command)
57
+ │ │ └── commands.ts # 生成 BitFun 命令文件
58
+ │ └── claude-code/
59
+ │ ├── index.ts # 导出 MCP 协议处理器
60
+ │ └── mcp-server.ts # stdio MCP 服务,调用共享 Tool 实现
61
+ ├── assets/
62
+ │ ├── skills/ # 宿主中立的 Skill 静态目录
63
+ │ │ └── vsl-trajectory-analysis/
64
+ │ │ └── SKILL.md # 轨迹分析步骤和结果解释规则
65
+ │ └── claude-code/ # Claude 原生插件根目录
66
+ │ ├── .claude-plugin/
67
+ │ │ └── plugin.json # 插件名、说明和版本
68
+ │ ├── .mcp.json # MCP 服务启动配置
69
+ │ ├── commands/
70
+ │ │ └── trajectory.md # /vsl:trajectory 命令提示词
71
+ │ ├── agents/
72
+ │ │ └── vsl-trajectory.md # 轨迹分析 Agent 定义
73
+ │ ├── skills/
74
+ │ │ └── vsl-trajectory-analysis/
75
+ │ │ └── SKILL.md # 轨迹分析步骤和结果解释规则
76
+ │ └── scripts/
77
+ │ └── mcp-server.js # 构建生成,Claude 通过 Bun 启动
78
+ ├── test/
79
+ │ ├── plugin.test.ts # 模块注册、mock 调用、输入、冲突和静态 Skill 检查
80
+ │ └── bitfun-kernel.test.ts # BitFun 适配器与命令文件生成检查
81
+ ├── docs/
82
+ │ └── plugin-design.md # 本设计文档
83
+ ├── dist/ # 构建生成的 npm 运行文件
84
+ │ ├── index.js
85
+ │ └── hosts/
86
+ │ ├── deveco/
87
+ │ │ └── plugin.js
88
+ │ ├── bitfun-kernel/
89
+ │ │ └── plugin.js
90
+ │ └── claude-code/
91
+ │ └── index.js
92
+ ├── package.json # npm 元数据、入口、依赖和构建命令
93
+ ├── bun.lock # 开发依赖锁定
94
+ ├── bunfig.toml # Bun 配置
95
+ ├── tsconfig.json # TypeScript 类型检查配置
96
+ ├── tsconfig.build.json # TypeScript 构建配置文件;当前 JS 由 Bun 打包
97
+ ├── AGENTS.md # 仓库开发约定
98
+ ├── .gitignore # 生成文件与本地目录排除规则
99
+ └── README.md # 安装和开发说明
100
+ ```
101
+
102
+ 新增模块主要修改 `src/plugin/modules/` 和 `src/plugin/index.ts`。构建从 Registry 统一生成 Skill、Claude 原生资源和 BitFun 命令文件;通过 `vsl init` 安装或更新时,按选中模块同步实际宿主配置。手动安装仍可使用原生入口。
103
+
104
+ ## 3. 模块与资源契约
105
+
106
+ ### 3.1 PluginModule
107
+
108
+ 共享契约定义在 `src/plugin/contracts.ts`:
109
+
110
+ ```ts
111
+ export type PluginModule = {
112
+ id: string
113
+ version: string
114
+ description: string
115
+ commands?: ModuleCommand[]
116
+ agents?: ModuleAgent[]
117
+ skills?: ModuleSkill[]
118
+ tools?: ModuleTool[]
119
+ }
120
+ ```
121
+
122
+ `id` 标识模块;四个资源数组均可省略,因此模块可以只提供 Skill 或 Tool。模块版本描述模块自身,npm 包版本描述整个分发包;Claude 插件 manifest 和 MCP server 也有各自的版本字段,当前由开发者分别维护。
123
+
124
+ ### 3.2 四类资源的职责
125
+
126
+ | 资源 | 主要字段 | 执行含义 |
127
+ | --- | --- | --- |
128
+ | Command | `name`、`description`、`template`,可选 `agent`、`model`、`subtask`、`toolNames` | 用户的 slash 入口;宿主展开参数并将提示词交给 Agent |
129
+ | Agent | `name`、`mode`、`prompt`,可选模型、权限和可见性 | 定义模型角色和执行约束,由宿主调度 |
130
+ | Skill | `name`、`description`、`content`,可选 `files` | 按需加载的步骤、规则和参考资料 |
131
+ | Tool | `name`、`description`、`input`、`execute` | 接受结构化参数,执行代码并返回结果 |
132
+
133
+ Command 可以指向专用 Agent,也可以由主 Agent 处理。Agent 可以加载 Skill、调用 Tool,或依据已有上下文回答。Skill 本身是指令资源,只有其中要求的步骤涉及代码执行时才需要调用 Tool。因此,slash 命令的执行并不要求每次都落到 Tool 上。
134
+
135
+ `toolNames` 用于校验 Command 引用的工具是否存在;当前执行权限由宿主配置决定,这个字段不生成工具白名单。Skill 名称出现在提示词中时,Registry 也不会自动把它转换为强制加载关系。
136
+
137
+ ### 3.3 Tool 的宿主无关接口
138
+
139
+ Tool 通过 `execute(input, context)` 执行。`input` 是外部输入,模块需要校验其内容;`context` 提供工作目录、工作树目录、取消信号、可选会话 ID 和进度上报函数。
140
+
141
+ 统一返回值为:
142
+
143
+ ```ts
144
+ export type ToolOutput = {
145
+ title: string
146
+ output: string
147
+ metadata?: Record<string, unknown>
148
+ }
149
+ ```
150
+
151
+ DevEco 适配器将返回值交给原生工具机制;Claude MCP 适配器将 `output` 转换为 MCP 文本结果,并映射 `isError`。MCP 使用进程工作目录,支持请求取消、并发调用和错误隔离,进度上报仍为空实现。代码审查工具支持显式传入 `repo`。
152
+
153
+ ## 4. Registry 注册机制
154
+
155
+ `createRegistry()` 默认加载轨迹分析和代码审查模块;也可以通过 `modules` 传入明确的模块列表,通过 `enabled` 排除指定模块。例如:
156
+
157
+ ```ts
158
+ const registry = createRegistry({
159
+ modules: [createTrajectoryAnalysisModule()],
160
+ enabled: { "trajectory-analysis": true },
161
+ })
162
+
163
+ const resources = registry.enabled()
164
+ ```
165
+
166
+ 聚合过程依次执行:
167
+
168
+ 1. 过滤 `enabled[id] === false` 的模块,其余模块默认启用。
169
+ 2. 检查启用模块的 `id` 是否重复。
170
+ 3. 分别合并 Command、Agent、Skill、Tool 数组。
171
+ 4. 检查每类资源内部的名称冲突。
172
+ 5. 检查 Command 的 `agent` 和 `toolNames` 是否引用已注册资源。
173
+
174
+ 最终结果提供四类资源列表,并支持按名称查找 Command 和 Tool。模块目录在代码中组装。init 以模块为粒度选择,保存到安装包内的 `assets/runtime.json`(Claude 原生插件使用 `.vsl-runtime.json`);宿主通过 `createHostRegistry()` 加载选中模块,并附带 `vsl_runtime_info` 诊断工具。手动安装且没有运行时配置时默认加载全部模块。
175
+
176
+ ## 5. DevEco Code 适配
177
+
178
+ 推荐使用 `vsl init` 的宿主和模块复选向导;下文保留原生手工接入说明。安装与验证操作见 [init 安装](init-installation.md)。
179
+
180
+ ### 5.1 Command、Agent 和 Tool
181
+
182
+ 默认入口 `src/index.ts` 导出 `VslPlugin`。插件加载后,`config` Hook 将模块中的 Command 写入 `config.command`,将 Agent 写入 `config.agent`;如果宿主配置中已有同名资源,会报冲突,避免静默覆盖。
183
+
184
+ `tool` Hook 将共享 Tool 包装为 `@opencode-ai/plugin` 的原生工具,并把宿主的工作目录、会话 ID、取消信号和进度回调传入共享执行器。
185
+
186
+ DevEco Tool 包装器根据共享 JSON Schema 生成字符串、布尔值、数字、整数、对象、数组和枚举参数。两端适配器在执行工具前校验输入。
187
+
188
+ ### 5.2 Skill 静态注册
189
+
190
+ DevEco 通过 `config.skills.paths` 扫描 Skill 目录。npm 包将静态文件放在 `assets/skills/<name>/SKILL.md`,插件加载时把启用模块对应的目录加入 `config.skills.paths`。该流程不依赖 npm `postinstall`,也不写入宿主用户目录。BitFun kernel 适配器注册同一个目录,Skill 内容因此与宿主无关。
191
+
192
+ Skill 文件随插件版本分发和升级,不会复制到用户配置目录;卸载 npm 包也不会留下需要清理的副本。
193
+
194
+ 包内结构:
195
+
196
+ ```text
197
+ node_modules/@bitfun-vsl/plugin/
198
+ └── assets/
199
+ └── skills/
200
+ └── vsl-trajectory-analysis/
201
+ └── SKILL.md
202
+ ```
203
+
204
+ ### 5.3 本地包接入
205
+
206
+ 在本仓库执行 `npm pack` 后,在 DevEco 配置目录安装产物:
207
+
208
+ ```powershell
209
+ cd "$HOME/.config/deveco"
210
+ npm install "D:/path/to/bitfun-vsl-plugin-<version>.tgz"
211
+ ```
212
+
213
+ Skill 随插件入口一起注册。`deveco.jsonc` 中配置专用入口 `"plugin": ["@bitfun-vsl/plugin/server"]`。本地联调也可以直接指向已安装包的 JS 入口,例如:
214
+
215
+ ```json
216
+ {
217
+ "plugin": [
218
+ "file:///C:/Users/<user>/.config/deveco/node_modules/@bitfun-vsl/plugin/dist/hosts/deveco/plugin.js"
219
+ ]
220
+ }
221
+ ```
222
+
223
+ 使用自定义 `DEVECO_CONFIG_DIR` 时,安装和启动宿主需要使用相同配置。完成后重启 DevEco,重新加载插件并发现 Skill。
224
+
225
+ ## 6. BitFun Kernel 适配
226
+
227
+ BitFun(`bitfun_agent_kernel`)的扩展宿主 `src/apps/extension-host` 实现的是 OpenCode 插件契约(对齐 `@opencode-ai/plugin@1.17.18`),所以复用 `src/hosts/shared/opencode.ts`,与 DevEco 只差两处:入口不写 `config.command`,命令改由命令文件分发。
228
+
229
+ ### 6.1 入口与加载方式
230
+
231
+ `vsl init` 中选择 BitFun 后,安装器更新宿主实际配置目录下的依赖:Windows 为 `%APPDATA%/bitfun/config`,macOS 为 `~/Library/Application Support/bitfun/config`,Linux 为 `${XDG_CONFIG_HOME:-~/.config}/bitfun/config`。`BITFUN_USER_ROOT`、`BITFUN_E2E_USER_ROOT` 可覆盖用户根目录,`--config-dir` 可直接指定配置目录。安装器将 `app.json` 中的 VSL 注册归一为已安装包的 BitFun 专用入口 file URL,并同步 OpenCode 命令文件。它不依赖全局 npm 副本或按包名回退到 DevEco 入口。`--command-dir` 指定自定义 OpenCode 配置目录。
232
+
233
+ BitFun 从上述配置目录中 `app.json` 的 `plugin` 数组读取声明,入口解析顺序为 `exports["./server"]` → `main` → `index.*`。包内提供两个入口:
234
+
235
+ | 入口 | 解析结果 | 适用场景 |
236
+ | --- | --- | --- |
237
+ | `@bitfun-vsl/plugin`(包名声明) | `exports["./server"]` → `dist/hosts/deveco/plugin.js` | BitFun 按包名安装时唯一生效的入口 |
238
+ | `file://.../dist/hosts/bitfun-kernel/plugin.js` | 直接指向 BitFun 专用入口 | 本地联调、需要精简行为时 |
239
+
240
+ 两个入口都只导出一个服务函数:BitFun 把模块中任何非函数导出视为错误,当 `default` 不是 `{ server }` 对象时还会把每个函数导出都当作插件调用。因此 `default` 与具名导出必须指向同一个函数。
241
+
242
+ DevEco 入口也接受声明选项,供只能按包名安装的 BitFun 关闭命令写入:
243
+
244
+ ```jsonc
245
+ {
246
+ "plugin": [{ "spec": "@bitfun-vsl/plugin", "options": { "writeCommands": false } }]
247
+ }
248
+ ```
249
+
250
+ ### 6.2 四类资源映射
251
+
252
+ | 资源 | BitFun 机制 | 状态 |
253
+ | --- | --- | --- |
254
+ | Tool | 插件 `tool` Hook,工具按原始名称暴露,上下文提供 `directory`、`worktree`、`abort`、`sessionID`、`metadata` | 插件子 Agent 可见,主 Agent 需经 Task 委派 |
255
+ | Agent | `config.agent` 投影为外部子 Agent,`mode`(primary/subagent/all)语义一致 | 直接可用 |
256
+ | Skill | `config.skills.paths` 投影为插件 Skill 根,要求绝对路径、非软链目录、`SKILL.md` 不超过 256 KiB | 直接可用 |
257
+ | Command | `config.command` 没有投影;命令只来自外部命令源(OpenCode 生态扫描 `~/.config/opencode/command[s]/`、`<project>/.opencode/command[s]/`) | 需命令文件 |
258
+
259
+ BitFun 的插件激活只发生在本地工作区,远程工作区不加载插件。
260
+
261
+ ### 6.3 命令文件
262
+
263
+ 命令名由 `command/` 下的相对路径决定,`command/vsl/trajectory.md` 在 BitFun 中显示为 `/vsl/trajectory`。启用 OpenCode 外部兼容后,VSL 将命令文件安装到 BitFun 扫描的外部命令目录,进入会话后由宿主刷新并显示。当前 BitFun 启动页不读取外部命令,启动页直接显示需要修改 BitFun 宿主;VSL 插件入口无法替代宿主的启动发现逻辑。`src/hosts/bitfun-kernel/commands.ts` 从 Registry 生成这些文件:
264
+
265
+ ```bash
266
+ bun run install:bitfun # 写入 ~/.config/opencode/command/vsl/
267
+ bun run install:bitfun -- --root <dir> # 写入其它 OpenCode 配置根
268
+ bun run install:bitfun -- --agent # 额外写入 agent 前置字段
269
+ ```
270
+
271
+ 生成结果与宿主解析规则一致:前置元数据只使用 `description`、`agent`、`model`、`subtask`,正文保留 `$ARGUMENTS` 占位符。旧的 `install:bitfun` 脚本重复执行会先删除 `command/vsl/` 再重建。推荐改用 `vsl init --host bitfun`:它只更新有收据的受管文件、清理取消模块的旧命令并保留其它用户文件;不要对 init 托管目录重复执行旧脚本。
272
+
273
+ 默认不写 `agent`,命令由主 Agent 执行模板。插件工具对原生主 Agent 不可见:插件工具注册时带 `native_agent_visible=false`,主 Agent 直接调用会返回 `not an available deferred tool in the current context`。主 Agent 通过 `Task` 把工具调用委派给插件子 Agent(如 `vsl-trajectory`),命令因此仍能触达插件工具,代价是多一次子会话。原因在宿主侧:`command_source.rs` 把带 `agent` 且无 `model`/`variant` 的命令解析为 `FreshExternalSubagent{ecosystem_id: "opencode", logical_id: <agent>}`,再按 `external_sources.rs` 的 `active_subagents` 校验;该集合只来自外部子 Agent 的核对结果,而插件通过 `config.agent` 投影的 Agent 由 `plugin_capability_publication.rs` 写入 registry 路由覆盖层,不在这一集合内。因此指向插件自有 Agent(如 `vsl-trajectory`)的 `agent` 字段会让命令变成 `Restricted` 而无法执行。`--agent` 只适用于宿主已经把同名外部子 Agent 注册并且审批通过的场景。
274
+
275
+ ### 6.4 验证方式
276
+
277
+ `bun test` 覆盖适配器和命令文件生成。宿主契约按 `loader.ts` 与 `plugin_config_projection.rs` 的规则核对:入口在包内、单服务函数、`config.command` 未被写入、Agent 与 Skill 投影字段合法、命令文件可被命令源解析。
278
+
279
+ ## 7. Claude Code 适配
280
+
281
+ ### 7.1 原生插件资源
282
+
283
+ Claude 通过 `assets/claude-code/` 加载插件,目录中的资源分别对应:
284
+
285
+ | 文件或目录 | Claude 中的作用 |
286
+ | --- | --- |
287
+ | `.claude-plugin/plugin.json` | 声明插件名 `vsl` 和插件元数据 |
288
+ | `commands/trajectory.md` | 注册 `/vsl:trajectory` |
289
+ | `agents/vsl-trajectory.md` | 注册可由宿主调用的分析 Agent |
290
+ | `skills/vsl-trajectory-analysis/SKILL.md` | 注册可由主 Agent 或子 Agent 加载的 Skill |
291
+ | `.mcp.json` | 声明本地 MCP 服务的启动方式 |
292
+
293
+ Claude 按插件名添加命名空间。当前环境中 Agent 显示为 `vsl:vsl-trajectory`,Skill 显示为 `vsl:vsl-trajectory-analysis`;原生文件名和共享资源名保留模块中的定义。
294
+
295
+ 当前 Command 文件提供分析提示词,Agent 文件独立注册;该 Command 尚未配置显式的专用 Agent 路由。因此 Claude 中的 slash 调用可以由主 Agent 完成,专用 Agent 也可以独立被调用。DevEco 中则通过 Command 的 `agent` 字段绑定 `vsl-trajectory`,两端的调度行为由各自的原生机制决定。
296
+
297
+ Claude 的 Markdown、插件清单、MCP 配置与 Skill 均由 `src/install/resources.ts` 从共享 Registry 生成。构建时生成全部资源,init 安装时从待安装包按所选模块生成插件,MCP 也读取同一模块配置。
298
+
299
+ ### 7.2 MCP Tool
300
+
301
+ `.mcp.json` 使用以下命令启动包内服务:
302
+
303
+ ```text
304
+ bun ${CLAUDE_PLUGIN_ROOT}/scripts/mcp-server.js
305
+ ```
306
+
307
+ 因此当前 Claude MCP 运行环境需要安装 Bun。服务通过标准输入输出交换逐行 JSON 消息,实现 `initialize`、`ping`、`tools/list` 和 `tools/call`:工具列表来自 Registry,调用按名称找到共享 Tool 并执行。
308
+
309
+ Claude 中的工具实际名称带有 MCP 前缀,例如 `mcp__plugin_vsl_vsl__vsl_trajectory_analyze`。工具是否允许运行由 Claude 的权限策略控制;资源被发现后,仍需取得执行权限才能完成调用。
310
+
311
+ 本地验证可指向源码中的插件目录,或 npm 安装包内部的同名目录:
312
+
313
+ ```powershell
314
+ claude plugin validate ./assets/claude-code
315
+ claude --plugin-dir ./assets/claude-code -p "/vsl:trajectory sample.trace"
316
+ ```
317
+
318
+ ## 8. 轨迹分析模块调用示例
319
+
320
+ 模块定义位于 `src/plugin/modules/trajectory-analysis.ts`,提供以下资源:
321
+
322
+ | 类型 | 名称 | 当前行为 |
323
+ | --- | --- | --- |
324
+ | Command | `/vsl:trajectory` | 接收 `$ARGUMENTS`,要求加载 Skill 并执行分析 |
325
+ | Agent | `vsl-trajectory` | 组织分析过程,依据工具结果回答 |
326
+ | Skill | `vsl-trajectory-analysis` | 描述读取、分析、按需生成报告的步骤 |
327
+ | Tool | `vsl_trajectory_read` | 返回事件数量和持续时间的 mock 数据 |
328
+ | Tool | `vsl_trajectory_analyze` | 返回阶段、异常和评分的 mock 数据 |
329
+ | Tool | `vsl_trajectory_report` | 返回一段 mock 报告文本 |
330
+
331
+ 执行 `/vsl:trajectory sample.trace` 时,宿主展开参数并运行分析提示词。DevEco 调度专用子 Agent;Claude 按当前 Command 和 Agent 配置执行。Agent 加载 Skill 后,按指令调用 `read → analyze → report(按需)`,最后将工具结果组织为回答。
332
+
333
+ 上述顺序通过提示词和 Skill 指导模型执行,当前没有强制步骤状态机。需要保证固定步骤必定执行时,可以将这些步骤组合成一个确定性 Tool。
334
+
335
+ 分析工具的返回示例:
336
+
337
+ ```json
338
+ {
339
+ "source": "sample.trace",
340
+ "eventCount": 12,
341
+ "phases": 3,
342
+ "anomalies": 1,
343
+ "score": 0.92,
344
+ "mock": true
345
+ }
346
+ ```
347
+
348
+ 当前工具只校验 `source` 为字符串,返回固定结果,文件无需真实存在。该结果用于证明宿主能够找到资源并执行共享代码;真实轨迹解析和分析能力需要后续替换 mock 实现。
349
+
350
+ ## 9. 如何扩展模块
351
+
352
+ 1. 在 `src/plugin/modules/` 中新增模块文件,返回一个 `PluginModule`。
353
+ 2. 按需要填写四类资源;采用统一前缀避免命名冲突。当前 Skill 名称接受小写字母、数字和连字符组成的名称。
354
+ 3. 在 `src/plugin/index.ts` 的默认模块列表中注册模块。启用后的 DevEco Command、Agent、Tool 和静态 Skill 都来自该列表。
355
+ 4. 为 Claude 增加对应的 Command、Agent、Skill 原生文件。新增 Tool 会随 Registry 进入 MCP 工具列表。
356
+ 5. 为 Tool 声明共享 JSON Schema 并校验输入;DevEco 参数适配器和 Claude MCP 复用参数定义。
357
+ 6. 添加模块执行与资源注册测试;涉及 Skill 时,验证打包产物中的静态文件和 Skill 发现过程。
358
+
359
+ Tool 的可复用逻辑保留在共享模块中;宿主目录负责参数、上下文和结果的转换。这样一个模块的执行代码可以被两个宿主共同使用。
360
+
361
+ ## 10. 构建、打包与验证
362
+
363
+ ### 10.1 开发与产物
364
+
365
+ ```bash
366
+ bun install --ignore-scripts
367
+ bun test
368
+ bun run typecheck
369
+ bun run build
370
+ npm pack
371
+ ```
372
+
373
+ 源码依赖安装使用 `--ignore-scripts`,避免开发环境在构建前执行依赖 `dist/` 的安装入口。`typecheck` 使用 `tsgo --noEmit`;`build` 使用 Bun 生成运行文件;`npm pack` 通过 `prepack` 自动执行构建。
374
+
375
+ npm 包包含 `dist/`、`assets/`、本文档及 npm 默认包含的包元数据和 README。DevEco 插件、Claude 原生资源、MCP 服务和静态 Skill 随同一个 tgz 分发。
376
+
377
+ 当前构建实际生成 JavaScript;`package.json` 中声明的 `.d.ts` 路径和 `dist/plugin/index.js` 尚未由构建命令产出。宿主集成使用已生成的运行入口;对外直接消费共享模块子路径和类型声明的发布支持仍需补齐。
378
+
379
+ ### 10.2 验证内容
380
+
381
+ | 层次 | 内容 | 通过依据 |
382
+ | --- | --- | --- |
383
+ | 模块测试 | 四类资源聚合、mock 输出、无效输入、重复模块 | `test/plugin.test.ts` |
384
+ | 静态 Skill 测试 | 校验静态目录注入和 `SKILL.md` 存在 | `test/plugin.test.ts` |
385
+ | BitFun 适配器 | 不写 Command、入口与选项行为、命令文件生成与清理 | `test/bitfun-kernel.test.ts` |
386
+ | 打包安装 | 真实安装 tgz,检查运行时依赖和静态 Skill 文件 | 包内文件、入口加载和宿主发现结果 |
387
+ | DevEco 集成 | Command 触发、Agent 调度、Tool 结果、Skill 发现 | 宿主日志、会话记录和 `deveco debug skill` |
388
+ | BitFun 集成 | 工具列表、子 Agent、Skill 发现、命令文件注册 | 宿主插件日志与命令面板 |
389
+ | Claude 集成 | 插件校验、资源发现、MCP 连接与 Tool 执行 | Claude 初始化信息与调用结果 |
390
+
391
+ 本地已经验证轨迹 mock 调用、tgz 安装后的静态 Skill 路径注入,以及 DevEco 原生 Skill 发现。增加模块或改变安装路径后,应围绕受影响的资源重新验证;仅看到工具名称或插件安装成功,不能替代实际执行结果。
package/package.json CHANGED
@@ -1,6 +1,74 @@
1
- {
2
- "name": "@bitfun-vsl/plugin",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
1
+ {
2
+ "$schema": "https://json.schemastore.org/package.json",
3
+ "name": "@bitfun-vsl/plugin",
4
+ "version": "0.0.2",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "type": "module",
8
+ "license": "MIT",
9
+ "description": "Shared modules and native host adapters for DevEco Code, Claude Code and BitFun",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://gitcode.com/OpenBitFun/bitfun_horizon_verify.git"
13
+ },
14
+ "homepage": "https://gitcode.com/OpenBitFun/bitfun_horizon_verify#readme",
15
+ "scripts": {
16
+ "prepack": "bun run build",
17
+ "typecheck": "tsgo --noEmit",
18
+ "test": "bun test",
19
+ "install:bitfun": "bun src/hosts/bitfun-kernel/commands.ts",
20
+ "build": "bun run script/build.ts"
21
+ },
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.ts",
25
+ "import": "./dist/index.js"
26
+ },
27
+ "./plugin": {
28
+ "types": "./dist/plugin/index.d.ts",
29
+ "import": "./dist/plugin/index.js"
30
+ },
31
+ "./hosts/deveco": {
32
+ "types": "./dist/hosts/deveco/plugin.d.ts",
33
+ "import": "./dist/hosts/deveco/plugin.js"
34
+ },
35
+ "./server": {
36
+ "types": "./dist/hosts/deveco/plugin.d.ts",
37
+ "import": "./dist/hosts/deveco/plugin.js"
38
+ },
39
+ "./hosts/bitfun-kernel": {
40
+ "types": "./dist/hosts/bitfun-kernel/plugin.d.ts",
41
+ "import": "./dist/hosts/bitfun-kernel/plugin.js"
42
+ },
43
+ "./hosts/claude-code": {
44
+ "types": "./dist/hosts/claude-code/index.d.ts",
45
+ "import": "./dist/hosts/claude-code/index.js"
46
+ }
47
+ },
48
+ "files": [
49
+ "dist",
50
+ "assets",
51
+ "README.md",
52
+ "docs/plugin-design.md",
53
+ "docs/init-installation.md",
54
+ "docs/code-review-integration.md"
55
+ ],
56
+ "dependencies": {
57
+ "@inquirer/prompts": "^8.7.5",
58
+ "@opencode-ai/plugin": "1.17.9",
59
+ "jsonc-parser": "3.3.1"
60
+ },
61
+ "devDependencies": {
62
+ "@tsconfig/bun": "1.0.9",
63
+ "@types/bun": "1.3.13",
64
+ "@types/node": "24.12.2",
65
+ "typescript": "5.8.2",
66
+ "@typescript/native-preview": "7.0.0-dev.20251207.1"
67
+ },
68
+ "bin": {
69
+ "vsl": "dist/cli/index.js"
70
+ },
71
+ "publishConfig": {
72
+ "access": "public"
73
+ }
74
+ }