dsh-plugin-prompt-tool 3.0.1 → 3.1.0

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 +17 -1
  2. package/engine/actions/catalog.mjs +2 -1
  3. package/engine/actions/index.mjs +5 -3
  4. package/engine/actions/shared.mjs +26 -12
  5. package/engine/actions/tool-visibility.mjs +31 -14
  6. package/engine/compositions/source/local/context-provenance.yml +9 -0
  7. package/engine/compositions/source/local/generation-recovery.yml +10 -0
  8. package/engine/compositions/source/local/retrieval.yml +7 -0
  9. package/engine/compositions/source/local/soul-ledger.yml +3 -0
  10. package/engine/compositions/source/local/soul-maintenance.yml +9 -0
  11. package/engine/conditions/examples.mjs +1 -0
  12. package/engine/conditions/index.mjs +7 -0
  13. package/engine/conditions/manifest.mjs +28 -0
  14. package/engine/context-idle-compaction.mjs +58 -0
  15. package/engine/context-provenance.d.mts +7 -0
  16. package/engine/context-provenance.mjs +156 -0
  17. package/engine/context-pruner.mjs +64 -0
  18. package/engine/context-routing.mjs +45 -0
  19. package/engine/context-summary.mjs +80 -0
  20. package/engine/fillers.mjs +37 -4
  21. package/engine/generation-recovery-coordinator.mjs +40 -0
  22. package/engine/generation-recovery-maintenance.mjs +18 -0
  23. package/engine/generation-recovery.mjs +153 -0
  24. package/engine/host-package.mjs +13 -0
  25. package/engine/layers.d.mts +4 -0
  26. package/engine/layers.mjs +57 -20
  27. package/engine/present-as.mjs +2 -2
  28. package/engine/retrieval-reference.d.mts +5 -0
  29. package/engine/retrieval-reference.mjs +26 -0
  30. package/engine/retrieval.mjs +17 -0
  31. package/engine/rule-engine.mjs +1 -0
  32. package/engine/rule-runtime.d.mts +8 -1
  33. package/engine/rule-runtime.mjs +18 -10
  34. package/engine/rule-spec.mjs +4 -2
  35. package/engine/schema.mjs +1 -1
  36. package/engine/service-names.d.mts +5 -0
  37. package/engine/service-names.mjs +5 -0
  38. package/engine/soul-ledger.mjs +8 -0
  39. package/engine/soul-maintenance.mjs +20 -0
  40. package/lib/client.js +16 -6
  41. package/lib/client.js.map +1 -1
  42. package/lib/index.mjs +1953 -246
  43. package/modules/soul/assets/ledger.md +4 -2
  44. package/modules/soul/assets/manifest.yml +2 -0
  45. package/modules/soul/assets/reference/00-layers.md +27 -27
  46. package/modules/soul/assets/reference/02-echo.md +161 -161
  47. package/modules/soul/assets/reference/05-doctor.md +67 -67
  48. package/modules/soul/assets/reference/10-echo-anatomy.md +109 -109
  49. package/modules/soul/assets/reference/ECHO-/346/235/203/345/250/201/345/217/243/345/276/204.md +202 -202
  50. package/modules/soul/assets/reference/ECHO/345/205/255/345/261/202/344/270/216mnemon/345/215/217/345/220/214/350/257/264/346/230/216/344/271/246.md +229 -229
  51. package/modules/soul/assets/templates/agents-template.md +3 -0
  52. package/modules/soul/assets/templates/self-template.md +19 -0
  53. package/modules/soul/module.yml +71 -13
  54. package/modules/tool-surface/module.yml +8 -5
  55. package/package.json +1 -1
  56. package/skills/dsh-module/reference.md +2 -2
  57. package/templates/80-tool-surface.yml +8 -7
@@ -7,12 +7,15 @@
7
7
  # 常驻集只在这里写一次;首轮提示由普通注入动作组合。
8
8
  #
9
9
  # 解锁的生效时机:声明在每个 model step 前重算,解锁在下一步的模型请求里已经可见。
10
- # `requireMatch: true` 是刻意的:任一常驻工具缺失(或模型解锁了不存在的名字)就放弃裁剪、
11
- # 暴露完整目录——收窄错了会让当前工作流调不到工具,比多花上下文严重。
10
+ # `requireMatch: true` 是刻意的,但判据是「名单与装配面整体错位」:常驻名单里的名字
11
+ # **一个都不在**当前装配面时才放弃裁剪、暴露完整目录;只缺一两个(提供方被替换或关闭)
12
+ # 仍照常收窄,缺项只留一条诊断。解锁名不参与这个判定。
12
13
  #
13
14
  # 工具名必须与**实际装配名**一致:本项目 harness 是 `pwsh`、`edit` + `write`;
14
15
  # `bash` 由平台各自提供——Windows 是本模块声明的 `tool-git-bash` 行(Git Bash,`bash -c`),
15
- # POSIX 是官方持久 bash。写错名字会触发 requireMatch 的 fail-open,表现为「收窄没生效」。
16
+ # POSIX 是官方持久 bash。替换提供方(如 dsh-ops 的 `ops_bash`)属于部署事实,不写进随包名单:
17
+ # 加在部署层模块副本(`$DSH_HOME/.prompt-tool/modules/tool-surface/module.yml`)的 allow 即可;
18
+ # 没装该插件的部署里这个名字不存在,不产生任何影响。
16
19
  #
17
20
  # 停用即回滚:本模块在 config.yml 的 enabled 里删掉即可,重启后工具面完全恢复。
18
21
 
@@ -49,7 +52,7 @@ rules:
49
52
  - skill_search
50
53
  - skill_load
51
54
  - tool_search
52
- # 平台各自的 bash 名:装配里没有提供方时这里就是缺失名,收窄整体失效。
55
+ # 平台各自的 bash 名;替换提供方(如 ops_bash)由部署层名单登记,随包名单只写官方名。
53
56
  - bash
54
57
  discovery: { kind: tools }
55
58
  requireMatch: true
@@ -66,6 +69,6 @@ rules:
66
69
  fill: tool-catalog
67
70
  position: after-all
68
71
  dedupe: session
69
- text: 常驻工具:{{RESIDENT_TOOLS}}。缺少所需工具时,先用 {{DISCOVERY_TOOL}} 搜索并解锁。
72
+ text: 常驻工具:{{RESIDENT_TOOLS}}。缺少所需工具时,先用 {{DISCOVERY_TOOL}} 搜索;要用某个工具,先以 {"toolNames":["<工具名>"]} 解锁——解锁从下一次请求起生效,之后才可调用。
70
73
  params:
71
74
  action: narrow-tools
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-prompt-tool",
3
- "version": "3.0.1",
3
+ "version": "3.1.0",
4
4
  "description": "DSH 插件:提示词工具,规范模型的思维链与回答内容,提供 Web UI 编辑 module.yml 与 AGENTS.md,并按 skills 目录注册可开关技能。",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -42,7 +42,7 @@
42
42
  |---|---|---|---|
43
43
  | `inject-text` | 由 config.layer 决定(**六层可注入**,agent-request/llm-stream/tool-pipeline 只作展示归属) | layer、strategy(static/placeholder/context-activation)、position、dedupe、mergeMode、role、order、text/texts、params、templateFile、configKind | 空正文不生成投递;变量赋值模板另按显式求值事务处理 |
44
44
  | `assembly` | `system-prompt/assemble` 下游 | `target.sections`(`add`/`remove` **或** `keep`)、`target.contexts`(`add`/`remove` **或** `clear`,二者互斥——并存编译期拒绝);`target.tools` 已移除 | 返回未改动的装配 |
45
- | `tool-visibility` | system-prompt/assemble 下游 | allow 与/或 deny(先保留再剔除)、requireMatch(仅 allow)、discovery({ kind };tool/key 可选,只作断言);受众归 scope,提示归普通注入动作 | 呈现面失败保留原装配;执行闸失败留痕,不静默放行 |
45
+ | `tool-visibility` | system-prompt/assemble 下游 | allow 与/或 deny(先保留再剔除)、requireMatch(仅 allow;名单全缺才放宽)、discovery({ kind };tool/key 可选,只作断言);受众归 scope,提示归普通注入动作 | 呈现面失败保留原装配;执行闸失败留痕,不静默放行 |
46
46
  | `tool-gate` | tools/pre-execute | decision(allow/deny/ask)、reason;工具名归 names 条件 | 一律放行——裁决 bug 不卡死调用 |
47
47
  | `tool-result` | tools/post-execute | action(accept/replace/block)、text(仅 replace/block);工具名归 names 条件 | 一律接受——结果处理 bug 不把调用变成失败 |
48
48
  | `append-context` | tools/post-execute | text;续跑用 inject-text 的 turn-stop 层 | 保持原结果 |
@@ -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),声明名单不等同实时工具面。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_bash)写进部署层名单。解锁名不参与放宽判定。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
 
@@ -3,10 +3,10 @@
3
3
  # `tool-visibility` 声明常驻集、目录与 SDK 正文的呈现、执行闸和发现来源。
4
4
  # 首轮提示由同规则的普通注入动作组合;常驻名单只写一次。
5
5
  #
6
- # 本模板只带规则、不带 `modules` 声明:装配里没有提供方时 `bash` 就是缺失名,
7
- # `requireMatch` 反过来把整条收窄废掉——用模板建模块时要自己把提供方行带进装配。
8
- # 写错名字的后果很隐蔽:allow 里的名字不存在会触发 requireMatch 的 fail-open,
9
- # 表现为「收窄没生效」而不是报错。
6
+ # 本模板只带规则、不带 `modules` 声明:用模板建模块时要自己把提供方行带进装配。
7
+ # `requireMatch` 只在名单**全部**缺失时放弃裁剪;缺一两个提供方只是少一个常驻工具,
8
+ # 收窄照常生效(提供方被替换或关闭不是声明错位)。替换提供方的名字写进 allow:
9
+ # 随包模板只写官方名,未安装替换插件的部署里该名字不存在,不产生任何影响。
10
10
  #
11
11
  # 发现适配器由 `tool-search` 行提供(模块必须列该行);解锁名从持久 `tool/call` 参数回收,
12
12
  # 因此下一步请求即可见,压缩遮蔽后仍然保留。
@@ -27,10 +27,11 @@ then:
27
27
  - skill_search
28
28
  - skill_load
29
29
  - tool_search
30
- # 平台各自的 bash 名:装配里没有提供方时这里就是缺失名,收窄整体失效。
30
+ # 平台各自的 bash 名;替换提供方(如 ops_bash)登记在部署层名单里。
31
31
  - bash
32
32
  discovery: { kind: tools }
33
- # 任一常驻工具缺失就放弃裁剪、暴露完整目录(fail-open),避免静默裁成空目录。
33
+ # 名单里的名字一个都不存在时才放弃裁剪、暴露完整目录(fail-open);
34
+ # 部分缺失不触发放宽——提供方被替换或关闭是正常部署差异。
34
35
  requireMatch: true
35
36
  - if:
36
37
  count:
@@ -45,6 +46,6 @@ then:
45
46
  fill: tool-catalog
46
47
  position: after-all
47
48
  dedupe: session
48
- text: 常驻工具:{{RESIDENT_TOOLS}}。缺少所需工具时,先用 {{DISCOVERY_TOOL}} 搜索并解锁。
49
+ text: 常驻工具:{{RESIDENT_TOOLS}}。缺少所需工具时,先用 {{DISCOVERY_TOOL}} 搜索;要用某个工具,先以 {"toolNames":["<工具名>"]} 解锁——解锁从下一次请求起生效,之后才可调用。
49
50
  params:
50
51
  action: narrow-tools