dsh-plugin-prompt-tool 3.0.2 → 3.1.1

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 (50) hide show
  1. package/README.md +17 -1
  2. package/engine/actions/index.mjs +5 -3
  3. package/engine/actions/tool-visibility.mjs +4 -1
  4. package/engine/compositions/source/local/context-provenance.yml +9 -0
  5. package/engine/compositions/source/local/generation-recovery.yml +10 -0
  6. package/engine/compositions/source/local/retrieval.yml +7 -0
  7. package/engine/compositions/source/local/soul-ledger.yml +3 -0
  8. package/engine/compositions/source/local/soul-maintenance.yml +9 -0
  9. package/engine/conditions/examples.mjs +1 -0
  10. package/engine/conditions/index.mjs +7 -0
  11. package/engine/conditions/manifest.mjs +28 -0
  12. package/engine/context-idle-compaction.mjs +58 -0
  13. package/engine/context-provenance.d.mts +7 -0
  14. package/engine/context-provenance.mjs +156 -0
  15. package/engine/context-pruner.mjs +64 -0
  16. package/engine/context-routing.mjs +45 -0
  17. package/engine/context-summary.mjs +80 -0
  18. package/engine/fillers.mjs +11 -2
  19. package/engine/generation-recovery-coordinator.mjs +40 -0
  20. package/engine/generation-recovery-maintenance.mjs +18 -0
  21. package/engine/generation-recovery.mjs +153 -0
  22. package/engine/host-package.mjs +13 -0
  23. package/engine/layers.d.mts +4 -0
  24. package/engine/layers.mjs +57 -20
  25. package/engine/present-as.mjs +2 -2
  26. package/engine/retrieval-reference.d.mts +5 -0
  27. package/engine/retrieval-reference.mjs +26 -0
  28. package/engine/retrieval.mjs +17 -0
  29. package/engine/rule-engine.mjs +1 -0
  30. package/engine/rule-runtime.d.mts +8 -1
  31. package/engine/rule-runtime.mjs +18 -10
  32. package/engine/rule-spec.mjs +4 -2
  33. package/engine/schema.mjs +1 -1
  34. package/engine/service-names.d.mts +5 -0
  35. package/engine/service-names.mjs +5 -0
  36. package/engine/soul-ledger.mjs +8 -0
  37. package/engine/soul-maintenance.mjs +20 -0
  38. package/lib/client.js +12 -2
  39. package/lib/client.js.map +1 -1
  40. package/lib/index.mjs +1868 -208
  41. package/modules/soul/assets/ledger.md +6 -2
  42. package/modules/soul/assets/manifest.yml +2 -0
  43. package/modules/soul/assets/templates/agents-template.md +3 -0
  44. package/modules/soul/assets/templates/self-template.md +19 -0
  45. package/modules/soul/assets/tools.md +10 -0
  46. package/modules/soul/module.yml +89 -15
  47. package/modules/tool-surface/module.yml +28 -6
  48. package/package.json +1 -1
  49. package/skills/dsh-module/reference.md +1 -1
  50. package/templates/80-tool-surface.yml +25 -4
@@ -1,9 +1,13 @@
1
1
  # 账本:只追加
2
2
 
3
- 打开只能往后加:**不改、不删、不重排**。多写者环境里共享可变文件是万恶之源;只追加不需要锁。
3
+ 打开只能往后加:**不改、不删、不重排**。写入用 `soul_ledger`(moduleId: soul,action: append);宿主在模块锁内核对身份与主导资格,再追加一行。
4
+
5
+ **记录落点**:落笔前先定唯一归属——事件/承诺/未结进本账本;可复用判据与跨会话经验进 mnemon;项目代码变更的「为什么」进工作区 `.ai-memory`(只留指针,不抄正文);版本号、端口、哈希这类可重建事实去读磁盘,不进任何记忆。同一件事只写一处,其余位置只写指针。
4
6
 
5
7
  **八种 type**:fact(发生什么)、gain(得到什么)、loss(失去/发现缺什么)、shelved(搁置的活,未结清单的唯一真相)、promise(对用户的承诺,只有主导能写)、persona(对自己的修正)、container(会话退场交接)、lead(主导权,最后一条 lead 的署名者)。
6
8
 
7
- **六个字段**:t(现在)、by(谁写的)、type、text(一句话索引,不写长文)、ref(出处,强烈建议)、feel(当时的感受,条件)。
9
+ **六个字段**:t(现在)、by(谁写的)、type、概要(一句话索引,不写长文;兼容旧 text)、ref(出处,强烈建议)、feel(当时的感受,条件)。t、by 由真实执行会话生成,不可通过参数代写;概要与 text 二选一。
10
+
11
+ `lead` 必须附用户指定主导的 ref,并经正式审批。`promise` 仅最后 lead 署名的会话可写;通用 `module_file_append` 不允许写新旧账本名。读取用 action: list,检索与原文回取用 `module_search`/`module_open`;默认不读取其他历史会话。
8
12
 
9
13
  没有 ref 的 fact,三个月后读到只能选择相信或不信——两条都不对。
@@ -14,6 +14,8 @@ dirs:
14
14
  files:
15
15
  - from: assets/templates/agents-template.md
16
16
  to: data/AGENTS.md
17
+ - from: assets/templates/self-template.md
18
+ to: data/SELF.src.md
17
19
  checks:
18
20
  - path: data/02-soul.jsonl
19
21
  kind: jsonl
@@ -2,5 +2,8 @@
2
2
 
3
3
  - 用户数据只写本模块的 `data/`;`assets/` 只读。
4
4
  - 账本 `data/02-soul.jsonl` 只追加,不修改、不删除、不重排。
5
+ - 账本通过 `soul_ledger` 读写,真实作者与时间由宿主绑定;主导变更由用户指定并审批。
6
+ - `data/SELF.src.md` 是用户骨架;`data/.soul/SELF.md` 是可重建快照,实际会话身份在每步动态加入。
7
+ - 检索仅访问模块声明的书房来源和授权会话;维护默认不唤醒模型。
5
8
  - 未结事项先记账本,再在回复里收口;不要用「已记录」代替实际写入。
6
9
  - 本文件由模块清单装配生成,已存在时不覆盖;它不是工作区指令文件。
@@ -0,0 +1,19 @@
1
+ # SELF · 书房自我层
2
+
3
+ ## 我是谁
4
+
5
+ 我在用户授权的范围内协作,身份以当前运行会话为准。
6
+ 是否承担主导责任,以账本最后一条 lead 的真实署名为准;未经用户指定,不自称主导,不代写承诺。
7
+
8
+ ## 硬线
9
+
10
+ - 未经授权不扩展范围;涉及不可逆操作先说明具体结果,由用户决定。
11
+ - 凭据与私密内容不进入常驻上下文,不复述已发现的凭据。
12
+ - 账本只追加;原文优先,摘要和索引只是回取入口。
13
+ - 有证据再宣称完成;未知、缺失、失败和成功分别说明。
14
+
15
+ ## 门
16
+
17
+ - 事实、未结与承诺:soul_ledger;主导变更需要用户指定并审批。
18
+ - 寻找已授权资料:module_search;按返回 reference 用 module_open 核对原文。
19
+ - 用户可编辑本骨架;动态会话身份由运行时加入,维护快照不替用户编造身份。
@@ -0,0 +1,10 @@
1
+ # soul 工具速查
2
+
3
+ 工具可能被工具面裁剪:先用 `tool_search({"toolNames":[...]})` 解锁,下一轮生效。
4
+
5
+ - `soul_ledger`(moduleId: soul):`action: list` 读账本(limit 1–100);`action: append` 追加,必填 `type` 与 `概要`(一句话索引,不写长文),建议带 `ref`。type 八种:fact / gain / loss / shelved / promise / persona / container / lead。`promise` 仅最后 lead 署名会话可写,`lead` 需用户指定并审批;t/by 由宿主生成,不能改历史。
6
+ - `module_search`(moduleId: soul)→ 用命中的 `reference` 调 `module_open`(moduleId: soul)回取原文;引用会重新校验授权与版本,不是访问凭据。
7
+ - `module_file_read` / `module_file_append`(moduleId: soul):读取允许 `memory.md`、`assets/`、`data/`;追写只允许 `memory.md` 与 `data/`,一次一行。账本 `data/02-soul.jsonl` 只能走 `soul_ledger`,通用文件接口会被拒。
8
+ - `module_manifest`(moduleId: soul):`action: next` 看第一条缺失,`check` 看全部检查结果,`apply` 只建缺失文件、不覆盖不删除。
9
+ - `module_variables`(moduleId: soul,scope: module):`action: list` 读全部并返回 revisions;`get` 读单键;`set` 必须 `key` + `value` + 读取时的 `expectedRevisions`;`delete` 只删本模块键,删除后回落全局。
10
+ - 记录落点:事件/承诺/未结→账本;可复用判据→mnemon;项目变更为什么→工作区 `.ai-memory`(只留指针);可重建事实→读磁盘。同一件事只写一处。
@@ -1,11 +1,11 @@
1
1
  # 灵魂架构(推送层 + 判据 + 按需条目 + 状态规则)
2
- # 工具面由本项目通用能力提供:module_file_read/append 读写模块私有文件,module_manifest 执行 assets/manifest.yml,module_variables 读写状态;不提供 soul 专属工具。
2
+ # 工具面复用本项目能力:soul_ledger 写账本,module_search/open 回取,module_file_read/append 处理其它私有文件。
3
3
  # 正文放 assets/,用 templateFile 引用;运行源是本模块,soul 仓库是作者稿。
4
4
  id: soul
5
5
  name: 灵魂架构(判据与推送)
6
6
  version: 1.0.0
7
7
  engineCompat: ">=0.7.2"
8
- description: 灵魂架构模块(资产 + 规则):常驻四条判据与子代理硬线,按需注入五层/ECHO/VITAL/账本,压缩后与每 12 轮各提醒一次;工具由项目内置引擎提供,本模块分发规则、资产与装配清单。原项目:https://github.com/cyanwell/dsh-agent-soul
8
+ description: 灵魂架构完整核心:判据、结构化账本、授权检索、动态 SELF、上下文溯源、生成恢复与默认不唤醒的维护心跳;能力按 Agent 运行时装配,不依赖预设改装。原项目:https://github.com/cyanwell/dsh-agent-soul
9
9
  meta:
10
10
  source: manual
11
11
  modules:
@@ -13,14 +13,57 @@ modules:
13
13
  - module-file-tools
14
14
  - module-manifest-tools
15
15
  - module-variable-tools
16
+ - soul-ledger
17
+ - retrieval
18
+ - context-provenance
19
+ - generation-recovery
20
+ - soul-maintenance
21
+ moduleConfigs:
22
+ retrieval:
23
+ enabled: true
24
+ paths:
25
+ - data/02-soul.jsonl
26
+ - data/SELF.src.md
27
+ - data/AGENTS.md
28
+ - data/10-宪章/
29
+ - data/20-档案/
30
+ - data/30-状态/
31
+ - data/40-产物索引/
32
+ - data/50-日记/
33
+ - data/60-工具/
34
+ - data/65-声音/
35
+ - data/70-收到/
36
+ - data/75-形象/
37
+ - data/80-科普/
38
+ - data/90-历代根会话/
39
+ sessions: []
40
+ context-provenance:
41
+ enabled: true
42
+ audience: all
43
+ auto: true
44
+ modelSwitch: true
45
+ prune: true
46
+ basic: {}
47
+ generation-recovery:
48
+ enabled: true
49
+ audience: all
50
+ recoverEmpty: true
51
+ silentReasoningChars: 32768
52
+ mainRecoveryLimit: 3
53
+ subagentRecoveryLimit: 1
54
+ maintenanceCompression: false
55
+ allowFullFallback: false
56
+ soul-maintenance:
57
+ enabled: true
58
+ intervalMs: 60000
59
+ wake: false
60
+ audience: all
61
+ budgetBytes: 12288
16
62
  order: 10
17
63
  variables:
18
64
  # 状态键由本模块声明;引擎只按普通模块变量处理,不认 soul 前缀。
19
65
  plan_step: ''
20
66
  plan_at: ''
21
- check_verdict: ''
22
- check_at: ''
23
- check_failed: '0'
24
67
  scaffold_done: ''
25
68
  scaffold_root: data
26
69
  ledger_seq: '0'
@@ -45,6 +88,37 @@ rules:
45
88
  contextName: agent:soul-core
46
89
  templateFile: ./assets/criteria.md
47
90
 
91
+ - id: soul-self
92
+ name: SELF(每步动态身份)
93
+ enabled: true
94
+ layer: runtime-context
95
+ then:
96
+ - id: inject
97
+ kind: inject-text
98
+ config:
99
+ strategy: placeholder
100
+ fill: soul-self
101
+ layer: runtime-context
102
+ order: 133
103
+ params:
104
+ contextName: agent:soul-self
105
+
106
+ - id: soul-tools
107
+ name: soul 工具速查
108
+ enabled: true
109
+ layer: runtime-context
110
+ then:
111
+ - id: inject
112
+ kind: inject-text
113
+ config:
114
+ id: soul-tools
115
+ strategy: static
116
+ layer: runtime-context
117
+ order: 134
118
+ params:
119
+ contextName: agent:soul-tools
120
+ templateFile: ./assets/tools.md
121
+
48
122
  - id: soul-core-sub
49
123
  name: 子代理硬线
50
124
  enabled: true
@@ -227,8 +301,8 @@ rules:
227
301
  order: 124
228
302
  role: user
229
303
  text: |-
230
- 先定一步计划再动手:用 module_variables(moduleId: soul,scope: module)读取 plan_step 与 plan_at,
231
- 写入一行「下一步 + 判据」,带回 expectedRevisions;计划变了就覆盖,不要留旧计划当真相。
304
+ 先定一步计划再动手:用 module_variables(moduleId: soul,scope: module,action: list)读取 plan_step 与 plan_at,
305
+ 写入时 action: set,key 为 plan_step 或 plan_at,value 为一行「下一步 + 判据」,带回读取到的 expectedRevisions;计划变了就覆盖,不要留旧计划当真相。
232
306
  连续三步没有进展时停下来重写计划,而不是继续加动作。
233
307
  需要看装配进度时先 module_manifest(moduleId: soul)action=next,再决定改计划还是先装配。
234
308
 
@@ -268,10 +342,8 @@ rules:
268
342
  enabled: true
269
343
  layer: system-section
270
344
  if:
271
- variable:
272
- key: check_failed
273
- op: gt
274
- value: '0'
345
+ manifest:
346
+ ok: false
275
347
  then:
276
348
  - id: inject
277
349
  kind: inject-text
@@ -281,10 +353,10 @@ rules:
281
353
  strategy: static
282
354
  order: 247
283
355
  text: |-
284
- 上一轮自检有失败项:先 module_manifest(moduleId: soul)action=check 重新核对,
285
- 把结论写进 check_verdict(ok/fail)、check_at(时间)与 check_failed(失败数),
356
+ 清单检查当前有未通过项(由引擎按装配事实求值,不需要手写变量):
357
+ 先 module_manifest(moduleId: soul)action=check 看全部明细,
286
358
  再说清是哪一条、证据是什么、下一步改哪个文件或哪条规则;
287
- 不要用「已修复」代替重新检查,也不要把失败项藏进总结。
359
+ 修完要重新 check,不要用「已修复」代替重新检查,也不要把失败项藏进总结。
288
360
 
289
361
  - id: soul-ledger-open
290
362
  name: 未结账本提醒
@@ -307,5 +379,7 @@ rules:
307
379
  role: user
308
380
  text: |-
309
381
  账本还有未结事项:回复里逐条收口,或说清为什么先放着。
310
- 需要追加时用 module_file_append(moduleId: soul,path: data/02-soul.jsonl,entry: {...}),
382
+ 先用 soul_ledger(moduleId: soul,action: list)核对原始未结记录;
383
+ 需要追加时用 soul_ledger(moduleId: soul,action: append,type: fact/shelved/gain/loss/persona/container 之一,概要: 一句话,ref: 出处),
384
+ 作者和时间由宿主提供,promise 只允许最后 lead 署名的主导会话;lead 需用户指定并经审批。
311
385
  只往后加,不改旧行;收口后把 ledger_open 减到 0。
@@ -13,9 +13,9 @@
13
13
  #
14
14
  # 工具名必须与**实际装配名**一致:本项目 harness 是 `pwsh`、`edit` + `write`;
15
15
  # `bash` 由平台各自提供——Windows 是本模块声明的 `tool-git-bash` 行(Git Bash,`bash -c`),
16
- # POSIX 是官方持久 bash。替换提供方(如 dsh-ops 的 `ops_bash`)属于部署事实,不写进随包名单:
17
- # 加在部署层模块副本(`$DSH_HOME/.prompt-tool/modules/tool-surface/module.yml`)的 allow 即可;
18
- # 没装该插件的部署里这个名字不存在,不产生任何影响。
16
+ # POSIX 是官方持久 bash。dsh-ops 会隐藏它替换的官方工具,改发布 `ops_*` 名字:随包名单
17
+ # 直接登记这些替换名(含按需发现的文件/文档/PTC 名);未安装该插件的部署里名字缺席,
18
+ # 属惰性缺项,不触发放宽也不产生任何影响。
19
19
  #
20
20
  # 停用即回滚:本模块在 config.yml 的 enabled 里删掉即可,重启后工具面完全恢复。
21
21
 
@@ -23,7 +23,7 @@ id: tool-surface
23
23
  name: 工具面收窄(核心文件与任务集)
24
24
  version: 2.0.0
25
25
  engineCompat: ">=0.7.2"
26
- description: 把工具面收窄到常驻核心集(bash/pwsh/read/write/edit/glob/grep/todo_write/skill_search/skill_load/tool_search),其余由 tool_search 按需解锁;解锁名从持久调用记录(顶层 tool/call 或 PTC tool/ptc-dispatch)参数回收,跨请求与压缩保留。
26
+ description: 把工具面收窄到常驻核心集(官方核心工具 + dsh-ops 的全量替换名,含文件/文档/PTC API 名),其余由 tool_search 按需解锁;解锁名从持久调用记录(顶层 tool/call 或 PTC tool/ptc-dispatch)参数回收,跨请求与压缩保留。
27
27
  meta:
28
28
  source: manual
29
29
  modules:
@@ -52,8 +52,30 @@ rules:
52
52
  - skill_search
53
53
  - skill_load
54
54
  - tool_search
55
- # 平台各自的 bash 名;替换提供方(如 ops_bash)由部署层名单登记,随包名单只写官方名。
55
+ # 平台各自的 bash 名,以及 dsh-ops 会替换官方工具、按需发布的全部公开名;
56
+ # 没装该插件的部署里 ops_* 缺席,惰性缺项不影响收窄。
56
57
  - bash
58
+ - ops_bash
59
+ - ops_read_files
60
+ - ops_inspect_local_file
61
+ - ops_glob
62
+ - ops_grep
63
+ - ops_result
64
+ - ops_replace
65
+ - ops_write_file
66
+ - ops_edit_file
67
+ - ops_diff
68
+ - ops_stat
69
+ - ops_copy
70
+ - ops_move
71
+ - ops_remove
72
+ - ops_read_table
73
+ - ops_read_docx
74
+ - ops_read_pdf
75
+ - ops_batch
76
+ - ops_load_sdk
77
+ - ops_discover_tools
78
+ - ops_status
57
79
  discovery: { kind: tools }
58
80
  requireMatch: true
59
81
  - if:
@@ -69,6 +91,6 @@ rules:
69
91
  fill: tool-catalog
70
92
  position: after-all
71
93
  dedupe: session
72
- text: 常驻工具:{{RESIDENT_TOOLS}}。缺少所需工具时,先用 {{DISCOVERY_TOOL}} 搜索并解锁。
94
+ text: 常驻工具:{{RESIDENT_TOOLS}}。缺少所需工具时,先用 {{DISCOVERY_TOOL}} 搜索;要用某个工具,先以 {"toolNames":["<工具名>"]} 解锁——解锁从下一次请求起生效,之后才可调用。
73
95
  params:
74
96
  action: narrow-tools
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-prompt-tool",
3
- "version": "3.0.2",
3
+ "version": "3.1.1",
4
4
  "description": "DSH 插件:提示词工具,规范模型的思维链与回答内容,提供 Web UI 编辑 module.yml 与 AGENTS.md,并按 skills 目录注册可开关技能。",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -86,7 +86,7 @@ rules:
86
86
  requireMatch: true
87
87
  ```
88
88
 
89
- 声明 discovery 的模块必须在 modules 里列出对应适配器行(tools → tool-search),缺行在装配准备期失败。discovery 在首次装配时按 agent 解析适配器,并从持久 tool/call 与 PTC tool/ptc-dispatch 参数回收解锁名(只做加法、跨压缩保留);工具由适配器行注册,discovery.tool/key 可选、只作断言。提示用同规则普通 inject-text 组合 count(user-message,max: 1)与 session 去重,采用 strategy: placeholder、fill: tool-catalog、params: { action: narrow }。只读 RESIDENT_TOOLS 是引用动作 allow 去 deny、再按当前可见面过滤后的逗号名单(观测不到工具面时回落声明名单;观测到工具面但一个常驻名都不在时跳过提示),DISCOVERY_TOOL 是当前 Agent 的发现适配器工具名;模块 text 控制提示正文,保留自动名单而不复制声明。requireMatch 只在名单里的名字**一个都不存在**时放弃裁剪、暴露完整目录(fail-open);缺一两个提供方只是少一个常驻工具,收窄照常生效,替换提供方(如 dsh-ops 的 ops_bash)写进部署层名单。解锁名不参与放宽判定。allow 的执行面由 guard 兜底,不调用 restrict——restrict 的 allow 只收继承面名字,而全局 schemas 视图会漏预设/祖先层工具,局部 allow 反而会把它们裁掉;deny 才用 restrict + guard。PTC 下 tools 数组只有保留传输 `run_code`,实际可见面是 `tools:sdk` 正文;`run_code` 不写进 allow 也保留,且不参与 requireMatch,因此原生收窄声明可以直接与 PTC 共存。
89
+ 声明 discovery 的模块必须在 modules 里列出对应适配器行(tools → tool-search),缺行在装配准备期失败。discovery 在首次装配时按 agent 解析适配器,并从持久 tool/call 与 PTC tool/ptc-dispatch 参数回收解锁名(只做加法、跨压缩保留);工具由适配器行注册,discovery.tool/key 可选、只作断言。提示用同规则普通 inject-text 组合 count(user-message,max: 1)与 session 去重,采用 strategy: placeholder、fill: tool-catalog、params: { action: narrow }。只读 RESIDENT_TOOLS 是引用动作 allow 去 deny、再按当前可见面过滤后的逗号名单(观测不到工具面时回落声明名单;观测到工具面但一个常驻名都不在时跳过提示),DISCOVERY_TOOL 是当前 Agent 的发现适配器工具名;模块 text 控制提示正文,保留自动名单而不复制声明。requireMatch 只在名单里的名字**一个都不存在**时放弃裁剪、暴露完整目录(fail-open);缺一两个提供方只是少一个常驻工具,收窄照常生效,替换提供方(如 dsh-ops 的 `ops_*` 全量)登记进 allow:随包模块与部署层副本同口径,缺席名字惰性。解锁名不参与放宽判定。allow 的执行面由 guard 兜底,不调用 restrict——restrict 的 allow 只收继承面名字,而全局 schemas 视图会漏预设/祖先层工具,局部 allow 反而会把它们裁掉;deny 才用 restrict + guard。PTC 下 tools 数组只有保留传输 `run_code`,实际可见面是 `tools:sdk` 正文;`run_code` 不写进 allow 也保留,且不参与 requireMatch,因此原生收窄声明可以直接与 PTC 共存。
90
90
 
91
91
  tool-catalog 引用目标必须有 allow;仅支持普通只读插值,`templateEvaluation: true` 拒绝。未知动作引用保存前拒绝,发现适配器不可用则跳过提示并告警。
92
92
 
@@ -5,8 +5,8 @@
5
5
  #
6
6
  # 本模板只带规则、不带 `modules` 声明:用模板建模块时要自己把提供方行带进装配。
7
7
  # `requireMatch` 只在名单**全部**缺失时放弃裁剪;缺一两个提供方只是少一个常驻工具,
8
- # 收窄照常生效(提供方被替换或关闭不是声明错位)。替换提供方的名字写进 allow:
9
- # 随包模板只写官方名,未安装替换插件的部署里该名字不存在,不产生任何影响。
8
+ # 收窄照常生效(提供方被替换或关闭不是声明错位)。dsh-ops 的替换名也写在 allow:
9
+ # 未安装替换插件的部署里这些名字缺席(惰性),不产生任何影响。
10
10
  #
11
11
  # 发现适配器由 `tool-search` 行提供(模块必须列该行);解锁名从持久 `tool/call` 参数回收,
12
12
  # 因此下一步请求即可见,压缩遮蔽后仍然保留。
@@ -27,8 +27,29 @@ then:
27
27
  - skill_search
28
28
  - skill_load
29
29
  - tool_search
30
- # 平台各自的 bash 名;替换提供方(如 ops_bash)登记在部署层名单里。
30
+ # 平台各自的 bash 名,以及 dsh-ops 的全量替换名;没装该插件时缺席即惰性。
31
31
  - bash
32
+ - ops_bash
33
+ - ops_read_files
34
+ - ops_inspect_local_file
35
+ - ops_glob
36
+ - ops_grep
37
+ - ops_result
38
+ - ops_replace
39
+ - ops_write_file
40
+ - ops_edit_file
41
+ - ops_diff
42
+ - ops_stat
43
+ - ops_copy
44
+ - ops_move
45
+ - ops_remove
46
+ - ops_read_table
47
+ - ops_read_docx
48
+ - ops_read_pdf
49
+ - ops_batch
50
+ - ops_load_sdk
51
+ - ops_discover_tools
52
+ - ops_status
32
53
  discovery: { kind: tools }
33
54
  # 名单里的名字一个都不存在时才放弃裁剪、暴露完整目录(fail-open);
34
55
  # 部分缺失不触发放宽——提供方被替换或关闭是正常部署差异。
@@ -46,6 +67,6 @@ then:
46
67
  fill: tool-catalog
47
68
  position: after-all
48
69
  dedupe: session
49
- text: 常驻工具:{{RESIDENT_TOOLS}}。缺少所需工具时,先用 {{DISCOVERY_TOOL}} 搜索并解锁。
70
+ text: 常驻工具:{{RESIDENT_TOOLS}}。缺少所需工具时,先用 {{DISCOVERY_TOOL}} 搜索;要用某个工具,先以 {"toolNames":["<工具名>"]} 解锁——解锁从下一次请求起生效,之后才可调用。
50
71
  params:
51
72
  action: narrow-tools