@siming-org/opencode-plugin 0.1.13 → 0.1.16

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 (57) hide show
  1. package/README.md +37 -3
  2. package/dist/assets-store.d.ts +2 -1
  3. package/dist/assets-store.d.ts.map +1 -1
  4. package/dist/assets-store.js +2 -1
  5. package/dist/assets-store.js.map +1 -1
  6. package/dist/fetch-assets.d.ts +44 -1
  7. package/dist/fetch-assets.d.ts.map +1 -1
  8. package/dist/fetch-assets.js +141 -13
  9. package/dist/fetch-assets.js.map +1 -1
  10. package/dist/guide-skill.d.ts +2 -2
  11. package/dist/guide-skill.d.ts.map +1 -1
  12. package/dist/guide-skill.js +2 -2
  13. package/dist/guide-skill.js.map +1 -1
  14. package/dist/host-api.d.ts +35 -4
  15. package/dist/host-api.d.ts.map +1 -1
  16. package/dist/host-api.js +5 -24
  17. package/dist/host-api.js.map +1 -1
  18. package/dist/register/skills.d.ts +7 -4
  19. package/dist/register/skills.d.ts.map +1 -1
  20. package/dist/register/skills.js +11 -5
  21. package/dist/register/skills.js.map +1 -1
  22. package/dist/register/todo-suite.d.ts +28 -0
  23. package/dist/register/todo-suite.d.ts.map +1 -0
  24. package/dist/register/todo-suite.js +133 -0
  25. package/dist/register/todo-suite.js.map +1 -0
  26. package/dist/revalidate.d.ts +3 -1
  27. package/dist/revalidate.d.ts.map +1 -1
  28. package/dist/revalidate.js +5 -3
  29. package/dist/revalidate.js.map +1 -1
  30. package/dist/server/index.d.ts.map +1 -1
  31. package/dist/server/index.js +50 -4
  32. package/dist/server/index.js.map +1 -1
  33. package/dist/todo/config.d.ts +21 -0
  34. package/dist/todo/config.d.ts.map +1 -0
  35. package/dist/todo/config.js +272 -0
  36. package/dist/todo/config.js.map +1 -0
  37. package/dist/todo/counter.d.ts +14 -0
  38. package/dist/todo/counter.d.ts.map +1 -0
  39. package/dist/todo/counter.js +19 -0
  40. package/dist/todo/counter.js.map +1 -0
  41. package/dist/todo/nudge-log.d.ts +5 -0
  42. package/dist/todo/nudge-log.d.ts.map +1 -0
  43. package/dist/todo/nudge-log.js +45 -0
  44. package/dist/todo/nudge-log.js.map +1 -0
  45. package/dist/todo/prompt.d.ts +9 -0
  46. package/dist/todo/prompt.d.ts.map +1 -0
  47. package/dist/todo/prompt.js +18 -0
  48. package/dist/todo/prompt.js.map +1 -0
  49. package/dist/todo/rate-limit.d.ts +7 -0
  50. package/dist/todo/rate-limit.d.ts.map +1 -0
  51. package/dist/todo/rate-limit.js +20 -0
  52. package/dist/todo/rate-limit.js.map +1 -0
  53. package/dist/todo/task-planning-skill.d.ts +9 -0
  54. package/dist/todo/task-planning-skill.d.ts.map +1 -0
  55. package/dist/todo/task-planning-skill.js +58 -0
  56. package/dist/todo/task-planning-skill.js.map +1 -0
  57. package/package.json +2 -2
package/README.md CHANGED
@@ -11,16 +11,50 @@ opencode plugin update # 升级
11
11
 
12
12
  要求:opencode ≥ 2.0.26(过低仅提示不阻断);Node.js ≥ 22(随 @siming-org/cli 依赖自检,不满足时 MCP 与 siming_cli 降级不注册,其余四样不受影响)。
13
13
 
14
- ## 注册的六样
14
+ ## 注册的七样
15
15
 
16
16
  | 资产 | 说明 |
17
17
  |---|---|
18
18
  | MCP server `siming` | 本地 stdio 拉起 `siming mcp-serve`,暴露 `siming_task` / `siming_template` / `siming_auth` 三件工具 |
19
19
  | 工具 `siming_refresh` | 手动强制刷新资产(server 地址与绑定项目就绪度随摘要返回) |
20
20
  | 工具 `siming_cli` | 以子进程执行任意 siming CLI 命令(仅限接入与诊断;任务生命周期操作一律走 MCP 三件套 siming_task / siming_template / siming_auth;日常运维请走终端) |
21
- | 技能 | `siming-guide` 接入引导(固定常驻)+ server 侧全局/项目技能自动同步 |
21
+ | 技能 | `siming-guide` 接入引导 + `task-planning` 任务清单规划(固定常驻)+ server 侧全局/项目技能自动同步 |
22
22
  | 子代理 | server 侧 agent 自动同步为 subagent(模型置空继承主会话当前模型;任务依据限于项目代码,过程产物读取与命令执行由主会话完成) |
23
23
  | 任务纪律注入 | 已接入 siming 的工作区(`.siming/config.json` 含 `defaultProject`)的**主会话**,向系统指令追加任务纪律提示词(插件内常量,无网络拉取;**默认只约束开发流程与调研流程**,其他工作默认不走 siming,业务特定流程需在该业务自己的项目提示词中声明;子代理/辅助请求/未接入工作区不注入;判定复用 worktree 桥语义,T202610150001;旧宿主缺 session 域自动跳过并由激活自检上报) |
24
+ | todo 维护提醒 | 所有工作区**主会话**生效(不要求接入 siming):todo 系统提示词 + `task-planning` 技能 + 每 N 次 LLM 请求尾部一行「自动提醒」注入,推动及时维护 todos(详见下节;宿主需开启 `experimental.todo`,未开启则三件套整体不生效) |
25
+
26
+ ## todo 维护提醒(todoNudge)
27
+
28
+ 三件套 = todo 系统提示词(主会话系统指令幂等追加)+ `task-planning` 技能 + 每 N 次请求的消息尾部注入一行:
29
+
30
+ ```
31
+ [todo-nudge 自动提醒,非用户输入] 复杂任务建议用 todos 跟踪;子项完成后顺手更新状态。
32
+ ```
33
+
34
+ - **激活门槛**:宿主 opencode 需开启 `experimental.todo`(注册 `todowrite` 工具)——未开启时三件套整体不生效(激活日志有指引,开启并重启宿主即恢复;插件不会代改宿主配置)
35
+ - **生效范围**:所有工作区的主会话;子代理与辅助请求(压缩/标题生成等)不注入不计数
36
+ - **注入性质**:仅存在于当次 LLM 请求,不落会话历史、不破坏前缀缓存、不影响 billion-context 等代理
37
+ - **配置**(`todoNudge` 键,可选):
38
+
39
+ ```jsonc
40
+ // 工作区 <ws>/.siming/config.json(严格 JSON,无注释)或全局 ~/.siming/config.json(容忍注释)
41
+ {
42
+ "todoNudge": { "enabled": true, "every": 6, "text": "自定义提醒文案" }
43
+ }
44
+ ```
45
+
46
+ - 层级:工作区就近文件(按文件存在判定,与是否接入 siming 无关)> 全局 > 内置默认(`enabled: true` / `every: 6` / 默认文案);**字段级合并**——未设置的项逐字段继承
47
+ - 取值:`enabled` 布尔;`every` ≥1 整数;`text` 非空字符串(空/纯白回退默认)。某字段非法 → 该字段回退内置默认并告警(不跨层继承错误值)
48
+ - 整文件损坏(不可读/解析失败)→ 提醒按关闭处理,不回退其他层;修复保存后自动恢复
49
+ - 自定义 `text` 请保留「自动提醒,非用户输入」标识语义,防止被模型当成用户指令
50
+ - **热生效**:配置保存后约 150ms 内重读生效(含就近位置新建工作区配置文件);`关闭→开启` 跃迁时计数从 0 重新起算;watch 不可用的环境自动降级为重启生效(激活日志可见);watcher(重)建后另有一次性补读兜底(覆盖文件系统事件激活窗口内的变更)。已知边界:在定位路径的**中间层级**(既非现有 `.siming` 所在层、也非紧邻工作区的那一层)新建 `.siming/config.json` 无法热感知,需重启宿主生效
51
+ - **开关语义**:`enabled: false` 只停「提醒注入」;todo 系统提示词与 `task-planning` 技能不受影响
52
+ - **命中日志**:仅命中注入时写一行(时间/会话/计数/消息数),落 `<工作区>/.siming/temp/siming-opencode-plugin/todo-nudge.log`(无工作区或目录不可写时回退系统临时目录 `siming-opencode-plugin/loc-<hash>/`),超 1MB 轮转保留一代;这是运行日志非资产,可随时手工删除
53
+ - **从旧方案迁移**(两者共存会双重注入/文件版技能遮蔽插件版,务必退役):
54
+ 1. 删除或停用 `~/.config/opencode/plugins/todo-nudge.ts`(参考实现)
55
+ 2. 退役 `~/.config/opencode/skills/task-planning/SKILL.md`(本地技能文件会遮蔽插件注册的同名技能)
56
+ 3. 重启 opencode,激活日志确认「todo 提醒:开(每 6 次)」
57
+ 4. 冲突裁决:项目 AGENTS.md 的 todo 协议保留为通用规则;与插件 todo 规则冲突时(两类文本共存于任何工作区)一律以插件为准
24
58
 
25
59
  ## server 连接与凭证
26
60
 
@@ -54,7 +88,7 @@ opencode plugin update # 升级
54
88
 
55
89
  | 形态 | 处置 |
56
90
  |---|---|
57
- | 长会话中技能引用文件 not-found | 系统清理了 tmpdir 引用缓存 → 触发 `siming_refresh` 重新物化(重启会话亦可自愈) |
91
+ | 长会话中技能引用文件 not-found | 缓存目录被外部清理(回退桶的系统临时目录清理,或手工删除 `.siming/temp`)→ 触发 `siming_refresh` 重新物化(重启会话亦可自愈) |
58
92
  | 无 MCP 工具 / 无 `siming_cli` | Node ≥ 22 解释器缺失降级注册 → 安装 Node 22+ 或设 `SIMING_NODE_BIN` 指向合法解释器后重启 |
59
93
  | 激活日志「初始化拉取超时」 | server 不可达/鉴权失败 → 确认地址与 token(上方解析链),任意建任务或 `siming_refresh` 触发补齐 |
60
94
  | 诊断 | 激活/变更/失败日志统一 `[siming-plugin]` 前缀,位置为 opencode 日志输出 |
@@ -3,7 +3,8 @@
3
3
  *
4
4
  * 插件是 siming server 实例状态的零副本消费者:本 store 持有「最近一次成功拉取」
5
5
  * 的快照,transform 重放时消费。刷新 = 新数组原子替换引用(重放期间读者要么全旧
6
- * 要么全新,无中间态);零磁盘状态(references 物化缓存走 os.tmpdir,见 fetch-assets)。
6
+ * 要么全新,无中间态);store 本身不落盘(references 物化缓存在工作区 `.siming/temp`,
7
+ * 无工作区/不可写回退 os.tmpdir,见 fetch-assets)。
7
8
  *
8
9
  * 指纹(revalidate 差异检测用)仅在对应域重拉成功后写入(失败不前移)。
9
10
  * registeredNames 记录上一轮 transform 实际注册过的名字——重放为「全量对账」语义:
@@ -1 +1 @@
1
- {"version":3,"file":"assets-store.d.ts","sourceRoot":"","sources":["../src/assets-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC;IAClC,0BAA0B;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB;AAID;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,IAAI,cAAc,CAAC;IAC9B,gDAAgD;IAChD,aAAa,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI,CAAC;IACnD,aAAa,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI,CAAC;IACnD,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAAC;IACrC,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAAC;IACrC,uCAAuC;IACvC,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC,uBAAuB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,uBAAuB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,oCAAoC;IACpC,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACvD,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACvD,iBAAiB;IACjB,eAAe,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CAwC/C"}
1
+ {"version":3,"file":"assets-store.d.ts","sourceRoot":"","sources":["../src/assets-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC;IAClC,0BAA0B;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB;AAID;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,IAAI,cAAc,CAAC;IAC9B,gDAAgD;IAChD,aAAa,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI,CAAC;IACnD,aAAa,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI,CAAC;IACnD,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAAC;IACrC,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAAC;IACrC,uCAAuC;IACvC,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC,uBAAuB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,uBAAuB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,oCAAoC;IACpC,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACvD,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACvD,iBAAiB;IACjB,eAAe,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CAwC/C"}
@@ -3,7 +3,8 @@
3
3
  *
4
4
  * 插件是 siming server 实例状态的零副本消费者:本 store 持有「最近一次成功拉取」
5
5
  * 的快照,transform 重放时消费。刷新 = 新数组原子替换引用(重放期间读者要么全旧
6
- * 要么全新,无中间态);零磁盘状态(references 物化缓存走 os.tmpdir,见 fetch-assets)。
6
+ * 要么全新,无中间态);store 本身不落盘(references 物化缓存在工作区 `.siming/temp`,
7
+ * 无工作区/不可写回退 os.tmpdir,见 fetch-assets)。
7
8
  *
8
9
  * 指纹(revalidate 差异检测用)仅在对应域重拉成功后写入(失败不前移)。
9
10
  * registeredNames 记录上一轮 transform 实际注册过的名字——重放为「全量对账」语义:
@@ -1 +1 @@
1
- {"version":3,"file":"assets-store.js","sourceRoot":"","sources":["../src/assets-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAmCH,MAAM,cAAc,GAAmB,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;AA0BhF;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,KAAK,GAAG;QACZ,QAAQ,EAAE,cAAc;QACxB,gBAAgB,EAAE,IAAqB;QACvC,gBAAgB,EAAE,IAAqB;QACvC,oBAAoB,EAAE,IAAI,GAAG,EAAU;QACvC,oBAAoB,EAAE,IAAI,GAAG,EAAU;KACxC,CAAC;IAEF,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ;QACjC,sCAAsC;QACtC,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;YACxB,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACxE,CAAC;QACD,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;YACxB,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACxE,CAAC;QACD,mBAAmB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB;QACjD,mBAAmB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB;QACjD,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;YAC1B,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;YAC1B,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,uBAAuB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,oBAAoB;QACzD,uBAAuB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,oBAAoB;QACzD,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE;YACjC,KAAK,CAAC,oBAAoB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;QACD,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE;YACjC,KAAK,CAAC,oBAAoB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;QACD,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;YACtB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM;YACpC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM;YACpC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;SACpC,CAAC;KACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"assets-store.js","sourceRoot":"","sources":["../src/assets-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAmCH,MAAM,cAAc,GAAmB,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;AA0BhF;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,KAAK,GAAG;QACZ,QAAQ,EAAE,cAAc;QACxB,gBAAgB,EAAE,IAAqB;QACvC,gBAAgB,EAAE,IAAqB;QACvC,oBAAoB,EAAE,IAAI,GAAG,EAAU;QACvC,oBAAoB,EAAE,IAAI,GAAG,EAAU;KACxC,CAAC;IAEF,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ;QACjC,sCAAsC;QACtC,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;YACxB,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACxE,CAAC;QACD,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;YACxB,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACxE,CAAC;QACD,mBAAmB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB;QACjD,mBAAmB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB;QACjD,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;YAC1B,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;YAC1B,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,uBAAuB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,oBAAoB;QACzD,uBAAuB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,oBAAoB;QACzD,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE;YACjC,KAAK,CAAC,oBAAoB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;QACD,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE;YACjC,KAAK,CAAC,oBAAoB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;QACD,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;YACtB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM;YACpC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM;YACpC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;SACpC,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -5,6 +5,32 @@ import type { AgentAsset, SkillAsset } from './assets-store.js';
5
5
  * ~/.local/... 下,不桥接永远碰不到主仓,反而会误命中祖先链上的全局层目录(T202610150001)。
6
6
  */
7
7
  export declare function findWorkspaceDir(start: string): string | null;
8
+ export interface TodoConfigWalk {
9
+ /** 生效的工作区配置文件(就近向上第一个 .siming/config.json 存在文件者;无 = null) */
10
+ hit: {
11
+ path: string;
12
+ workspaceDir: string;
13
+ } | null;
14
+ /** 集合①:定位路径上遇到的全部 .siming 目录(含生效层所在、含无 config.json 的更近层) */
15
+ simingDirs: string[];
16
+ /** 集合②:离 start 最近且尚无 .siming 的一级目录(捕获更近层 .siming 新建;全路径均有 .siming 时 = null) */
17
+ gapDir: string | null;
18
+ }
19
+ /**
20
+ * todo 配置定位路径单次遍历(findWorkspaceDir 同族但命中语义不同:`.siming` 目录存在而无
21
+ * config.json 不算命中继续向上——「存在即覆盖」按文件而非目录判定,PRD 规则 4)。
22
+ * $HOME 边界:查找遇 $HOME 即止($HOME/.siming/config.json 归全局层,不重复计工作区层);
23
+ * worktree 根经 mainRepoRootOf 桥跳主仓根继续(worktree 视为主仓一部分——自身无 config.json
24
+ * 时用主仓的,自身有时就近优先)。
25
+ * hit 命中即停——更上层对当前生效层无影响(就近优先);生效文件被删的事件由集合①监听承接,
26
+ * 重读重新遍历后监听集合随之重建(路径不定格于 setup)。
27
+ */
28
+ export declare function walkTodoConfigPath(start: string): TodoConfigWalk;
29
+ /** todo 生效工作区配置文件定位(walkTodoConfigPath 的命中投影,技术方案 §4.1) */
30
+ export declare function findTodoConfigFile(start: string): {
31
+ path: string;
32
+ workspaceDir: string;
33
+ } | null;
8
34
  export type FetchFailureKind = 'network' | 'auth' | 'http' | 'parse';
9
35
  export declare class AssetFetchError extends Error {
10
36
  readonly kind: FetchFailureKind;
@@ -16,9 +42,21 @@ export interface FetchTarget {
16
42
  token: string | null;
17
43
  /** 工作区绑定项目 key(.siming/config.json defaultProject;无绑定=null) */
18
44
  projectKey: string | null;
45
+ /** 工作区根(findWorkspaceDir 结果;无工作区=null)——缓存根推导复用,免二次祖先链发现 */
46
+ workspaceDir: string | null;
19
47
  }
20
48
  /** 四层 serverUrl 解析 + 三层 token 解析 + 工作区项目绑定发现(纯本地,无网络请求) */
21
49
  export declare function resolveFetchTarget(startDir: string): FetchTarget;
50
+ /**
51
+ * 本 location 的技能附件缓存根(物化路径与宿主展示路径共用同一根,方案决策 B):
52
+ * - 已存在且可写的工作区 → <workspaceDir>/.siming/temp/siming-opencode-plugin——生命周期由
53
+ * 项目目录决定,不依赖系统临时目录清理时机;不自行创建 .siming(会改变工作区发现与项目
54
+ * 绑定语义,方案决策 A);
55
+ * - 无工作区 / 工作区不可写 / 命中用户级配置层 → tmpdir()/siming-opencode-plugin/loc-<目录哈希
56
+ * 前 16 hex>(回退场景仍按 location 分桶)。首次创建缓存子目录即失败(只读挂载、ENOSPC)
57
+ * 按技能域失败上报,不切换根——展示路径已在 setup 定格,运行期换根会让注册路径失效。
58
+ */
59
+ export declare function referencesRootOf(directory: string): string;
22
60
  interface FingerprintItem {
23
61
  name: string;
24
62
  scope: 'global' | 'project';
@@ -40,6 +78,11 @@ export interface FetchPlan {
40
78
  target: FetchTarget;
41
79
  /** 项目解析成功(工作区绑定或实例默认兜底)为 hex id 时非 null;无解析结果=null(按仅全局继续) */
42
80
  projectId: string | null;
81
+ /**
82
+ * 本 location 的附件缓存根(referencesRootOf(startDir)):物化路径与宿主展示路径共用,
83
+ * 由计划单点计算,消费方(fetchSkillsDomain / 注册路径)不再各自推导。
84
+ */
85
+ referencesRoot: string;
43
86
  }
44
87
  /**
45
88
  * 实例默认项目兜底 key(对齐 CLI resolveScopedProject 第④层寻址链):
@@ -56,7 +99,7 @@ export declare const INSTANCE_DEFAULT_PROJECT_KEY = "default";
56
99
  export declare function resolveFetchPlan(startDir: string, projectIdOverride?: {
57
100
  key: string;
58
101
  id: string;
59
- } | null): Promise<FetchPlan>;
102
+ } | null, referencesRootOverride?: string): Promise<FetchPlan>;
60
103
  export interface DomainFetchResult<T> {
61
104
  assets: T[];
62
105
  /** 从本次原始列表行(分作用域形,与检查的并集形枚举一致)构造的域指纹 */
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-assets.d.ts","sourceRoot":"","sources":["../src/fetch-assets.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA8BhE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW7D;AAoGD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAErE,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBACb,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAMrE;AAkCD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,+DAA+D;IAC/D,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAuBhE;AA2GD,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,MAAM,CAK9E;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAGjF;AAED,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAGjF;AAQD,4CAA4C;AAC5C,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,4BAA4B,YAAY,CAAC;AAEtD;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,CAAC,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACrD,OAAO,CAAC,SAAS,CAAC,CAoCpB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAmC/F;AAED,mDAAmD;AACnD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CA6B/F"}
1
+ {"version":3,"file":"fetch-assets.d.ts","sourceRoot":"","sources":["../src/fetch-assets.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,8 @@
15
15
  * 拉取数据路径与 install 命令一致:列表概要投影(content 随列表下发、references 剥离出
16
16
  * referenceCount)+ referenceCount>0 时 by-name 详情取全量 references。
17
17
  */
18
- import { existsSync, mkdirSync, readFileSync, rmSync, statSync, writeFileSync } from 'node:fs';
18
+ import { createHash } from 'node:crypto';
19
+ import { accessSync, constants, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from 'node:fs';
19
20
  import { homedir, tmpdir } from 'node:os';
20
21
  import { dirname, isAbsolute, join, resolve } from 'node:path';
21
22
  import { parse } from 'jsonc-parser';
@@ -69,6 +70,60 @@ export function findWorkspaceDir(start) {
69
70
  dir = parent;
70
71
  }
71
72
  }
73
+ /**
74
+ * todo 配置定位路径单次遍历(findWorkspaceDir 同族但命中语义不同:`.siming` 目录存在而无
75
+ * config.json 不算命中继续向上——「存在即覆盖」按文件而非目录判定,PRD 规则 4)。
76
+ * $HOME 边界:查找遇 $HOME 即止($HOME/.siming/config.json 归全局层,不重复计工作区层);
77
+ * worktree 根经 mainRepoRootOf 桥跳主仓根继续(worktree 视为主仓一部分——自身无 config.json
78
+ * 时用主仓的,自身有时就近优先)。
79
+ * hit 命中即停——更上层对当前生效层无影响(就近优先);生效文件被删的事件由集合①监听承接,
80
+ * 重读重新遍历后监听集合随之重建(路径不定格于 setup)。
81
+ */
82
+ export function walkTodoConfigPath(start) {
83
+ const simingDirs = [];
84
+ let gapDir = null;
85
+ let hit = null;
86
+ let dir = resolve(start);
87
+ for (;;) {
88
+ if (isHomeDir(dir))
89
+ break; // 全局层边界,工作区查找到此为止
90
+ const marker = join(dir, '.siming');
91
+ if (existsSync(marker)) {
92
+ simingDirs.push(marker);
93
+ const file = join(marker, 'config.json');
94
+ if (isRegularFile(file)) {
95
+ hit = { path: file, workspaceDir: dir };
96
+ break;
97
+ }
98
+ }
99
+ else if (gapDir === null) {
100
+ gapDir = dir; // 仅记首个无 .siming 的层级(中间层级新建为已声明的非热生效边界)
101
+ }
102
+ const mainRoot = mainRepoRootOf(dir);
103
+ if (mainRoot !== null) {
104
+ dir = mainRoot;
105
+ continue;
106
+ }
107
+ const parent = dirname(dir);
108
+ if (parent === dir)
109
+ break;
110
+ dir = parent;
111
+ }
112
+ return { hit, simingDirs, gapDir };
113
+ }
114
+ /** todo 生效工作区配置文件定位(walkTodoConfigPath 的命中投影,技术方案 §4.1) */
115
+ export function findTodoConfigFile(start) {
116
+ return walkTodoConfigPath(start).hit;
117
+ }
118
+ /** 存在且为普通文件(config.json 提供层判定) */
119
+ function isRegularFile(path) {
120
+ try {
121
+ return statSync(path).isFile();
122
+ }
123
+ catch {
124
+ return false;
125
+ }
126
+ }
72
127
  /** 读工作区 .siming/config.json(损坏=console.error + null,不中断) */
73
128
  function readWorkspaceConfig(workspaceDir) {
74
129
  const file = join(workspaceDir, '.siming', 'config.json');
@@ -224,6 +279,7 @@ export function resolveFetchTarget(startDir) {
224
279
  serverUrl,
225
280
  token: resolveToken(workspaceDir),
226
281
  projectKey: typeof defaultProject === 'string' && defaultProject !== '' ? defaultProject : null,
282
+ workspaceDir,
227
283
  };
228
284
  }
229
285
  /** project key → hex id(GET /api/projects 找 key===input;24-hex 直接作 id)——镜像 CLI resolveProjectId */
@@ -258,20 +314,62 @@ async function fetchSkillDetail(target, name, scope, projectId) {
258
314
  throw new AssetFetchError('parse', `skill ${name} 详情响应不是对象`);
259
315
  return raw;
260
316
  }
261
- // ── references 物化(架构评审 H2:正文相对引用改绝对路径;幂等重写) ──
262
- function referencesRoot() {
263
- return join(tmpdir(), 'siming-opencode-plugin', 'skills');
317
+ // ── references 物化与缓存根(T202610220004:按工作区隔离 + 缓存内对账) ──
318
+ /** 无工作区 / 工作区不可写时的回退根(系统临时目录);工作区缓存根不复用它 */
319
+ const FALLBACK_TMP_ROOT = join(tmpdir(), 'siming-opencode-plugin');
320
+ /** 回退桶键:location 目录稳定哈希(同一目录跨进程重启复用同一桶) */
321
+ function locationBucketKey(directory) {
322
+ return createHash('sha256').update(resolve(directory)).digest('hex').slice(0, 16);
323
+ }
324
+ function isWritableDir(dir) {
325
+ try {
326
+ accessSync(dir, constants.W_OK);
327
+ return true;
328
+ }
329
+ catch {
330
+ return false;
331
+ }
332
+ }
333
+ /** `.siming` 及已存在的 temp 子树均可写才可用——探测面与实际写入面一致,否则写到 temp 时才失败 */
334
+ function isCacheWritable(workspaceDir) {
335
+ const simingDir = join(workspaceDir, '.siming');
336
+ if (!isWritableDir(simingDir))
337
+ return false;
338
+ const tempDir = join(simingDir, 'temp');
339
+ return !existsSync(tempDir) || isWritableDir(tempDir);
340
+ }
341
+ /** $HOME 下的 `.siming` 是 siming 全局配置层而非项目工作区:不作为缓存根,否则所有位于 home 下游且无自有 `.siming` 的 location 共用用户级目录 */
342
+ function isHomeDir(dir) {
343
+ return resolve(dir) === resolve(homedir());
344
+ }
345
+ function referencesRootFor(workspaceDir, directory) {
346
+ if (workspaceDir !== null && !isHomeDir(workspaceDir) && isCacheWritable(workspaceDir)) {
347
+ return join(workspaceDir, '.siming', 'temp', 'siming-opencode-plugin');
348
+ }
349
+ return join(FALLBACK_TMP_ROOT, `loc-${locationBucketKey(directory)}`);
350
+ }
351
+ /**
352
+ * 本 location 的技能附件缓存根(物化路径与宿主展示路径共用同一根,方案决策 B):
353
+ * - 已存在且可写的工作区 → <workspaceDir>/.siming/temp/siming-opencode-plugin——生命周期由
354
+ * 项目目录决定,不依赖系统临时目录清理时机;不自行创建 .siming(会改变工作区发现与项目
355
+ * 绑定语义,方案决策 A);
356
+ * - 无工作区 / 工作区不可写 / 命中用户级配置层 → tmpdir()/siming-opencode-plugin/loc-<目录哈希
357
+ * 前 16 hex>(回退场景仍按 location 分桶)。首次创建缓存子目录即失败(只读挂载、ENOSPC)
358
+ * 按技能域失败上报,不切换根——展示路径已在 setup 定格,运行期换根会让注册路径失效。
359
+ */
360
+ export function referencesRootOf(directory) {
361
+ return referencesRootFor(findWorkspaceDir(directory), directory);
264
362
  }
265
363
  /**
266
- * 物化某技能的引用文档到 os.tmpdir()/siming-opencode-plugin/skills/<name>/references/<path>,
364
+ * 物化某技能的引用文档到 <referencesRoot>/skills/<name>/references/<path>,
267
365
  * 并把正文中出现的相对 path 文本改写为物化后的绝对路径(主文档以文本引用 path,
268
366
  * 引用侧同源可证:server 侧 assertReferencesDeletable 即按「path 文本出现在正文」判定)。
269
367
  * 幂等:每次重拉整目录重建(rmSync+重写),同一动作再验证复用。
270
368
  */
271
- function materializeReferences(skillName, content, references) {
369
+ function materializeReferences(referencesRoot, skillName, content, references) {
272
370
  if (references.length === 0)
273
371
  return content;
274
- const assetRoot = join(referencesRoot(), skillName, 'references');
372
+ const assetRoot = join(referencesRoot, 'skills', skillName, 'references');
275
373
  rmSync(assetRoot, { recursive: true, force: true });
276
374
  let rewritten = content;
277
375
  for (const doc of references) {
@@ -283,6 +381,31 @@ function materializeReferences(skillName, content, references) {
283
381
  }
284
382
  return rewritten;
285
383
  }
384
+ /**
385
+ * 缓存内对账(方案决策 C):技能域成功拉取后删除本轮未物化的 skills/<name>/ 目录
386
+ * (技能删除/停用/附件清零)。只在成功路径调用,失败路径保留原缓存;单个目录清理失败
387
+ * 只留痕、不阻断本轮注册。
388
+ */
389
+ function reconcileSkillCache(referencesRoot, materialized) {
390
+ const skillsRoot = join(referencesRoot, 'skills');
391
+ let entries;
392
+ try {
393
+ entries = readdirSync(skillsRoot);
394
+ }
395
+ catch {
396
+ return; // 缓存尚未创建:无陈旧目录可清
397
+ }
398
+ for (const name of entries) {
399
+ if (materialized.has(name))
400
+ continue;
401
+ try {
402
+ rmSync(join(skillsRoot, name), { recursive: true, force: true });
403
+ }
404
+ catch (error) {
405
+ console.error(`[siming-plugin] 陈旧附件缓存清理失败(${join(skillsRoot, name)}):${String(error)}`);
406
+ }
407
+ }
408
+ }
286
409
  /** 每条 name@scope|version|updatedAt|enabled 排序拼接(§4.C3 第 6 条契约形状) */
287
410
  export function buildFingerprint(items) {
288
411
  return items
@@ -318,12 +441,14 @@ export const INSTANCE_DEFAULT_PROJECT_KEY = 'default';
318
441
  * 工作区未显式绑定的场景插件与 CLI 行为一致,不再「插件仅全局、CLI 却有项目域」割裂)。
319
442
  * projectIdOverride:调用方(revalidate)缓存的 key→id 命中时跳过网络解析,稳态检查保持 2 次列表请求。
320
443
  */
321
- export async function resolveFetchPlan(startDir, projectIdOverride) {
444
+ export async function resolveFetchPlan(startDir, projectIdOverride, referencesRootOverride) {
322
445
  const target = resolveFetchTarget(startDir);
446
+ // 缓存根默认按目录推导;revalidator 传入 setup 时定格的根,保证物化与注册展示路径在会话内始终同源
447
+ const referencesRoot = referencesRootOverride ?? referencesRootFor(target.workspaceDir, startDir);
323
448
  // 两层寻址统一为 key:工作区绑定优先,无绑定兜底实例默认项目
324
449
  const key = target.projectKey ?? INSTANCE_DEFAULT_PROJECT_KEY;
325
450
  if (projectIdOverride !== undefined && projectIdOverride !== null && projectIdOverride.key === key) {
326
- return { target, projectId: projectIdOverride.id };
451
+ return { target, projectId: projectIdOverride.id, referencesRoot };
327
452
  }
328
453
  // 兜底路径(无工作区绑定 → 实例默认项目):解析失败(网络/未命中)不得拖垮资产链路——
329
454
  // 无绑定场景在兜底引入前不发任何 /api/projects 请求,兜底单点异常不能把 global 拉取一起打挂(方案 §2 D7:失败维持仅全局)
@@ -335,12 +460,12 @@ export async function resolveFetchPlan(startDir, projectIdOverride) {
335
460
  catch (error) {
336
461
  const reason = error instanceof Error ? error.message : String(error);
337
462
  console.error(`[siming-plugin] 实例默认项目(key=${INSTANCE_DEFAULT_PROJECT_KEY})解析失败(${reason})——本次按仅全局拉取`);
338
- return { target, projectId: null };
463
+ return { target, projectId: null, referencesRoot };
339
464
  }
340
465
  if (fallbackId === null) {
341
466
  console.error(`[siming-plugin] 实例默认项目(key=${INSTANCE_DEFAULT_PROJECT_KEY})未命中——工作区未绑定 defaultProject 且 server 无默认项目,本次按仅全局拉取`);
342
467
  }
343
- return { target, projectId: fallbackId };
468
+ return { target, projectId: fallbackId, referencesRoot };
344
469
  }
345
470
  // 绑定路径:网络/HTTP 异常上抛由调用方(revalidate)按域失败处理(保留现有注册,刷新报告可见——不静默降级);
346
471
  // key 无命中(配置指向不存在的项目)按仅全局继续
@@ -348,7 +473,7 @@ export async function resolveFetchPlan(startDir, projectIdOverride) {
348
473
  if (id === null) {
349
474
  console.error(`[siming-plugin] 工作区绑定项目 "${target.projectKey}" 解析失败(GET /api/projects 无此 key)——本次按仅全局拉取`);
350
475
  }
351
- return { target, projectId: id };
476
+ return { target, projectId: id, referencesRoot };
352
477
  }
353
478
  /**
354
479
  * 技能域全链拉取:global 列表 +(有绑定时)project 列表 → 同名 project 胜 →
@@ -366,12 +491,14 @@ export async function fetchSkillsDomain(plan) {
366
491
  for (const item of projectItems)
367
492
  merged.set(item.name, item);
368
493
  const skills = [];
494
+ const materialized = new Set();
369
495
  for (const item of merged.values()) {
370
496
  let content = item.content;
371
497
  if (item.referenceCount > 0) {
372
498
  const detail = await fetchSkillDetail(plan.target, item.name, item.scope, plan.projectId);
373
499
  if (detail.references !== undefined && detail.references.length > 0) {
374
- content = materializeReferences(item.name, content, detail.references);
500
+ content = materializeReferences(plan.referencesRoot, item.name, content, detail.references);
501
+ materialized.add(item.name);
375
502
  }
376
503
  }
377
504
  skills.push({
@@ -384,6 +511,7 @@ export async function fetchSkillsDomain(plan) {
384
511
  referenceCount: item.referenceCount,
385
512
  });
386
513
  }
514
+ reconcileSkillCache(plan.referencesRoot, materialized);
387
515
  return {
388
516
  assets: skills,
389
517
  fingerprint: buildFingerprint([...globalItems, ...projectItems]),
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-assets.js","sourceRoot":"","sources":["../src/fetch-assets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-assets.js","sourceRoot":"","sources":["../src/fetch-assets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnI,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAGrC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,uBAAuB;AAEvB;;;;GAIG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,OAAO,IAAI,CAAC,CAAC,4BAA4B;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,SAAS;IACxB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACzE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,SAAS,CAAC;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACpC,IAAI,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,GAAG,CAAC;QACnC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,QAAQ,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAC;QAChF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAaD;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,GAAG,GAA0B,IAAI,CAAC;IACtC,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,SAAS,CAAC;QACR,IAAI,SAAS,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,kBAAkB;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACpC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YACzC,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;gBACxC,MAAM;YACR,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,uCAAuC;QACvD,CAAC;QACD,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,GAAG,GAAG,QAAQ,CAAC;YACf,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACrC,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;AACvC,CAAC;AAED,kCAAkC;AAClC,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAOD,4DAA4D;AAC5D,SAAS,mBAAmB,CAAC,YAAoB;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAC1D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAoB,CAAC;IACnE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,yBAAyB,IAAI,eAAe,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzE,OAAO,KAAgC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,SAAS,gBAAgB;IACvB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM;YAAE,OAAO,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,8BAA8B,CAAC,CAAC;IACrF,CAAC;IACD,KAAK,MAAM,IAAI,IAAI;QACjB,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC;QACpD,0BAA0B;KAC3B,EAAE,CAAC;QACF,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,GAAG,KAAK,SAAS;YAAE,SAAS;QAChC,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM;YAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qDAAqD;AACrD,SAAS,mBAAmB;IAC1B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACvE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC;IAClC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,+FAA+F;AAC/F,SAAS,YAAY,CAAC,YAA2B;IAC/C,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACvD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAA4B,CAAC;gBAChF,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,KAAK,EAAE;oBAAE,OAAO,KAAK,CAAC,SAAS,CAAC;YAC5F,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACjD,kFAAkF;IAClF,wDAAwD;IACxD,MAAM,UAAU,GACd,QAAQ,KAAK,SAAS;QACpB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC;QACzC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;YACpB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI,CAAC;IACb,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,4CAA4C,QAAQ,uBAAuB,CAAC,CAAC;IAC7F,CAAC;SAAM,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,yEAAyE;YACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAA4B,CAAC;YACtF,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,KAAK,EAAE;gBAAE,OAAO,KAAK,CAAC,SAAS,CAAC;QAC5F,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC7C,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AACrE,CAAC;AAMD,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAAmB;IACvB,MAAM,CAAU;IACzB,YAAY,IAAsB,EAAE,OAAe,EAAE,MAAe;QAClE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACjD,CAAC;CACF;AAED,KAAK,UAAU,MAAM,CAAC,SAAiB,EAAE,KAAoB,EAAE,IAAY;IACzE,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,IAAI,EAAE,EAAE;YAC5C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAC7C,OAAO,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;SACpE,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,eAAe,CACvB,SAAS,EACT,cAAc,SAAS,KAAK,MAAM,CAAC,GAAG,CAAC,8HAA8H,CACtK,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,eAAe,CACvB,MAAM,EACN,QAAQ,SAAS,+DAA+D,EAChF,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,eAAe,CAAC,MAAM,EAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,GAAG,IAAI,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7G,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,eAAe,SAAS,GAAG,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAaD,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEzF,IAAI,SAAiB,CAAC;IACtB,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1C,SAAS,GAAG,MAAM,CAAC;IACrB,CAAC;SAAM,IAAI,OAAO,eAAe,EAAE,SAAS,KAAK,QAAQ,IAAI,eAAe,CAAC,SAAS,KAAK,EAAE,EAAE,CAAC;QAC9F,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACrC,SAAS,GAAG,MAAM,IAAI,oBAAoB,MAAM,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC;IACzE,CAAC;IACD,8EAA8E;IAC9E,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE1C,MAAM,cAAc,GAAG,eAAe,EAAE,cAAc,CAAC;IACvD,OAAO;QACL,SAAS;QACT,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC;QACjC,UAAU,EAAE,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;QAC/F,YAAY;KACb,CAAC;AACJ,CAAC;AAED,mGAAmG;AACnG,KAAK,UAAU,gBAAgB,CAAC,MAAmB,EAAE,GAAW;IAC9D,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAK3C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,GAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IAChD,OAAO,OAAO,GAAG,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AA8BD,SAAS,YAAY,CAAC,GAAY,EAAE,IAAY;IAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;IAC9E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAmB,EAAE,KAAa;IAC9D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,cAAc,KAAK,EAAE,CAAC,CAAC;IAChF,OAAO,YAAY,CAAC,GAAG,EAAE,iBAAiB,CAAoB,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAmB,EAAE,KAAa;IAC9D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,cAAc,KAAK,EAAE,CAAC,CAAC;IAChF,OAAO,YAAY,CAAC,GAAG,EAAE,iBAAiB,CAAoB,CAAC;AACjE,CAAC;AAED,0FAA0F;AAC1F,KAAK,UAAU,gBAAgB,CAC7B,MAAmB,EACnB,IAAY,EACZ,KAA2B,EAC3B,SAAwB;IAExB,MAAM,KAAK,GACT,KAAK,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI;QACvC,CAAC,CAAC,4BAA4B,SAAS,EAAE;QACzC,CAAC,CAAC,eAAe,CAAC;IACtB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,eAAe,kBAAkB,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;IAC5G,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,SAAS,IAAI,WAAW,CAAC,CAAC;IAC1G,OAAO,GAAgE,CAAC;AAC1E,CAAC;AAED,wDAAwD;AAExD,4CAA4C;AAC5C,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC;AAEnE,2CAA2C;AAC3C,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,SAAS,eAAe,CAAC,YAAoB;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,sGAAsG;AACtG,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,iBAAiB,CAAC,YAA2B,EAAE,SAAiB;IACvE,IAAI,YAAY,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;QACvF,OAAO,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,IAAI,CAAC,iBAAiB,EAAE,OAAO,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;AACnE,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAC5B,cAAsB,EACtB,SAAiB,EACjB,OAAe,EACf,UAA4D;IAE5D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC1E,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,IAAI,SAAS,GAAG,OAAO,CAAC;IACxB,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxC,+CAA+C;QAC/C,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,cAAsB,EAAE,YAAiC;IACpF,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,iBAAiB;IAC3B,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QACrC,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;AACH,CAAC;AAYD,oEAAoE;AACpE,MAAM,UAAU,gBAAgB,CAAC,KAAqC;IACpE,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC;SACnH,IAAI,EAAE;SACN,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,IAAe;IAC9D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACnF,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,IAAe;IAC9D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACnF,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAwB;IAChD,OAAO,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;AAC1E,CAAC;AAgBD;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,SAAS,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,iBAAsD,EACtD,sBAA+B;IAE/B,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC5C,4DAA4D;IAC5D,MAAM,cAAc,GAAG,sBAAsB,IAAI,iBAAiB,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAClG,kCAAkC;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,IAAI,4BAA4B,CAAC;IAC9D,IAAI,iBAAiB,KAAK,SAAS,IAAI,iBAAiB,KAAK,IAAI,IAAI,iBAAiB,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;QACnG,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,CAAC;IACrE,CAAC;IACD,+CAA+C;IAC/C,6EAA6E;IAC7E,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC/B,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,OAAO,CAAC,KAAK,CACX,8BAA8B,4BAA4B,SAAS,MAAM,aAAa,CACvF,CAAC;YACF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;QACrD,CAAC;QACD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CACX,8BAA8B,4BAA4B,qDAAqD,CAChH,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;IAC3D,CAAC;IACD,iEAAiE;IACjE,4BAA4B;IAC5B,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7D,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CACX,4BAA4B,MAAM,CAAC,UAAU,4CAA4C,CAC1F,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC;AACnD,CAAC;AAUD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAe;IACrD,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACvE,MAAM,YAAY,GAChB,IAAI,CAAC,SAAS,KAAK,IAAI;QACrB,CAAC,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,4BAA4B,IAAI,CAAC,SAAS,EAAE,CAAC;QACjF,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,WAAW;QAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5D,KAAK,MAAM,IAAI,IAAI,YAAY;QAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACnC,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3B,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1F,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpE,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC5F,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC,CAAC;IACL,CAAC;IACD,mBAAmB,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IACvD,OAAO;QACL,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,gBAAgB,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC;QAChE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;QAChC,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC;AACJ,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAe;IACrD,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACvE,MAAM,YAAY,GAChB,IAAI,CAAC,SAAS,KAAK,IAAI;QACrB,CAAC,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,4BAA4B,IAAI,CAAC,SAAS,EAAE,CAAC;QACjF,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,WAAW;QAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5D,KAAK,MAAM,IAAI,IAAI,YAAY;QAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,UAAU;YACrC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IACD,OAAO;QACL,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,gBAAgB,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC;QAChE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;QAChC,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC;AACJ,CAAC"}
@@ -3,10 +3,10 @@
3
3
  *
4
4
  * 正文 = 六步主链路插件版(v10 裁定 A):链上无 scaffold 步,引导全程不落任何本地产物文件——
5
5
  * 仅两类本地写入均经 CLI 既有路径(工作区 .siming/config.json(init 绑定)与 ~/.siming/auth.json(token));
6
- * references 物化缓存走 os.tmpdir 不在此限。
6
+ * references 物化缓存走工作区 `.siming/temp`(无工作区/不可写回退 os.tmpdir),不在此限。
7
7
  * 内容构建期定稿(随插件版本走,不运行时拉取);语义源 = cli onboarding-text.ts 链路 + 本方案 §4.F 逐轮裁定。
8
8
  */
9
9
  import type { HostSkillInfo } from './host-api.js';
10
10
  export declare const GUIDE_SKILL_NAME = "siming-guide";
11
- export declare function guideSkillInfo(): HostSkillInfo;
11
+ export declare function guideSkillInfo(referencesRoot: string): HostSkillInfo;
12
12
  //# sourceMappingURL=guide-skill.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"guide-skill.d.ts","sourceRoot":"","sources":["../src/guide-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAE/C,wBAAgB,cAAc,IAAI,aAAa,CAQ9C"}
1
+ {"version":3,"file":"guide-skill.d.ts","sourceRoot":"","sources":["../src/guide-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAE/C,wBAAgB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,aAAa,CAQpE"}
@@ -1,11 +1,11 @@
1
1
  import { skillDisplayPath } from './host-api.js';
2
2
  export const GUIDE_SKILL_NAME = 'siming-guide';
3
- export function guideSkillInfo() {
3
+ export function guideSkillInfo(referencesRoot) {
4
4
  return {
5
5
  id: GUIDE_SKILL_NAME,
6
6
  name: GUIDE_SKILL_NAME,
7
7
  description: 'siming 新项目接入引导:当用户要求接入/初始化 siming 时使用',
8
- path: skillDisplayPath(GUIDE_SKILL_NAME),
8
+ path: skillDisplayPath(referencesRoot, GUIDE_SKILL_NAME),
9
9
  content: GUIDE_CONTENT,
10
10
  };
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"guide-skill.js","sourceRoot":"","sources":["../src/guide-skill.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAE/C,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,uCAAuC;QACpD,IAAI,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;QACxC,OAAO,EAAE,aAAa;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CrB,CAAC"}
1
+ {"version":3,"file":"guide-skill.js","sourceRoot":"","sources":["../src/guide-skill.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAE/C,MAAM,UAAU,cAAc,CAAC,cAAsB;IACnD,OAAO;QACL,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,uCAAuC;QACpD,IAAI,EAAE,gBAAgB,CAAC,cAAc,EAAE,gBAAgB,CAAC;QACxD,OAAO,EAAE,aAAa;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CrB,CAAC"}
@@ -1,3 +1,22 @@
1
+ /**
2
+ * opencode v2 宿主插件 API 最小契约(自维护)。
3
+ *
4
+ * 为什么不用 @opencode-ai/plugin 的类型:SDK .d.ts 滞后于宿主运行时
5
+ * (v2.0.26 宿主有 mcp/tool 等域的运行时能力,SDK 声明缺失/漂移,见技术方案 §2)。
6
+ * 本文件按 v2.0.26 宿主源码锚点(packages/plugin/src/promise/*.ts,隔离 HOME 实测核实):
7
+ * - skill 域:SkillEditor = list/get/add/update/remove(无 set;Skill.Info 必填 path=合成展示路径,
8
+ * content 内嵌消费——内置技能先例 /builtin/opencode.md + core/src/skill.ts toModelOutput);
9
+ * - agent 域:AgentEditor = list/get/default/update/remove(无 set 无 add;update=upsert-create,
10
+ * 回调条目字段是 system 非 systemPrompt,种子 Agent.default(id) mode=primary);
11
+ * - mcp 域:MCPEditor = set/remove(LocalConfig 无 enabled 字段,语义取 disabled?);
12
+ * - tool 域:Tool.Info 必填 input(zod 实现 StandardSchemaV1 可行);ToolContext 无 directory
13
+ * ——cwd 基准由 setup 捕获 ctx.location.directory 经闭包传入;
14
+ * - session 域:SessionDomain 的 hook/get 消费子集(context hook 事件 system 可变数组 + sessionID;
15
+ * session.get 回查 Session.Info——parentID 缺省=主会话,子代理跑 child session 带 parentID,
16
+ * v2.0.26/v2.0.30/dev 三版本核验一致,T202610160002);
17
+ * - setup ctx.location.directory 存在(Location.Info):插件按活跃 location 各跑一份 setup。
18
+ * 只声明插件实际消费的最小面;SDK 仅作 devDep 参考对齐,不进入运行时依赖。
19
+ */
1
20
  import type { ZodType } from 'zod';
2
21
  /**
3
22
  * 工具执行上下文(v2.0.26 promise ToolContext 实测形态)。
@@ -81,10 +100,11 @@ export interface HostAgentItem {
81
100
  system?: string;
82
101
  }
83
102
  /**
84
- * 技能合成展示路径(内置技能 /builtin/*.md 先例):以 tmpdir 为基避免与真实项目文件混淆;
85
- * references 已在拉取时物化为绝对路径,不依赖此 path 做相对解析。
103
+ * 技能合成展示路径(内置技能 /builtin/*.md 先例):以附件缓存根为基避免与真实项目文件混淆。
104
+ * 宿主对 basename==='SKILL.md' 的 path 执行 scan(dirname(path)) 生成 <skill_files>,故展示
105
+ * 路径必须与 references 物化路径同源(T202610220004 决策 B)。
86
106
  */
87
- export declare function skillDisplayPath(name: string): string;
107
+ export declare function skillDisplayPath(referencesRoot: string, name: string): string;
88
108
  /**
89
109
  * 域公共面:list=回查注册表,reload=触发重放。
90
110
  * transform 不放基接口——各域编辑器形状不同,交集声明会把回调参数收缩成 never(实测);
@@ -116,10 +136,21 @@ export interface HostSystemPart {
116
136
  type: 'text';
117
137
  text: string;
118
138
  }
119
- /** context hook 事件消费面(SessionContext:system 可变数组 + sessionID) */
139
+ /** 宿主消息 part 消费面(UserMessage.content 元素:当前只消费 text part) */
140
+ export interface HostMessagePart {
141
+ type: 'text' | 'image' | 'audio' | 'file' | (string & {});
142
+ text?: string;
143
+ }
144
+ /** 宿主消息消费面(UserMessage/AssistantMessage 最小面:尾部注入与判重只碰 content) */
145
+ export interface HostMessage {
146
+ role: string;
147
+ content: HostMessagePart[];
148
+ }
149
+ /** context hook 事件消费面(SessionContext:system/messages 可变数组 + sessionID,T202610260002 扩 messages) */
120
150
  export interface HostSessionContextEvent {
121
151
  readonly sessionID: string;
122
152
  system: HostSystemPart[];
153
+ messages: HostMessage[];
123
154
  }
124
155
  /** Session.Info 消费面(packages/schema/src/session.ts:parentID 缺省 = 主会话) */
125
156
  export interface HostSessionInfo {