dsh-plugin-prompt-tool 2.1.0 → 3.0.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.
- package/README.md +100 -233
- package/engine/actions/append-context.mjs +3 -24
- package/engine/actions/assembly.mjs +70 -94
- package/engine/actions/catalog.mjs +65 -28
- package/engine/actions/content.mjs +8 -152
- package/engine/actions/examples.mjs +8 -4
- package/engine/actions/inbox-prepend.mjs +4 -5
- package/engine/actions/index.mjs +17 -9
- package/engine/actions/inject-text.mjs +24 -4
- package/engine/actions/pre-step-filter.mjs +3 -4
- package/engine/actions/registration.mjs +20 -28
- package/engine/actions/request-params.mjs +21 -1
- package/engine/actions/shared.mjs +22 -13
- package/engine/actions/stream-output.mjs +26 -0
- package/engine/actions/tool-gate.mjs +31 -0
- package/engine/actions/tool-result.mjs +36 -0
- package/engine/actions/tool-visibility.mjs +248 -0
- package/engine/agent-capability.mjs +67 -0
- package/engine/anchor-match.mjs +14 -21
- package/engine/audience.d.mts +2 -0
- package/engine/audience.mjs +102 -0
- package/engine/branch.d.mts +4 -0
- package/engine/branch.mjs +61 -18
- package/engine/compaction-epoch.d.mts +25 -0
- package/engine/compaction-epoch.mjs +27 -4
- package/engine/compositions/source/local/filesystem-editor.yml +3 -3
- package/engine/compositions/source/local/instruction-hint.yml +2 -4
- package/engine/compositions/source/local/module-file-tools.yml +2 -0
- package/engine/compositions/source/local/module-import-tools.yml +4 -0
- package/engine/compositions/source/local/module-manifest-tools.yml +2 -0
- package/engine/compositions/source/local/module-rule-tools.yml +5 -0
- package/engine/compositions/source/local/module-variable-tools.yml +5 -0
- package/engine/compositions/source/local/present-as.yml +26 -0
- package/engine/compositions/source/local/tool-config-engine.yml +2 -3
- package/engine/compositions/source/local/tool-search.yml +11 -0
- package/engine/condition-facts.mjs +84 -0
- package/engine/conditions/anchor.mjs +63 -23
- package/engine/conditions/availability.mjs +1 -1
- package/engine/conditions/composite.mjs +3 -3
- package/engine/conditions/count.mjs +42 -11
- package/engine/conditions/evaluation.mjs +74 -19
- package/engine/conditions/examples.mjs +2 -1
- package/engine/conditions/index.d.mts +15 -0
- package/engine/conditions/index.mjs +23 -9
- package/engine/conditions/operators.mjs +4 -0
- package/engine/conditions/phase.mjs +9 -3
- package/engine/conditions/preset.mjs +1 -1
- package/engine/conditions/session.mjs +8 -2
- package/engine/conditions/subject.mjs +144 -65
- package/engine/conditions/text.mjs +26 -8
- package/engine/conditions/variable.mjs +83 -0
- package/engine/context-activation.d.mts +11 -0
- package/engine/{st-world-book.mjs → context-activation.mjs} +104 -64
- package/engine/delivery.d.mts +2 -0
- package/engine/delivery.mjs +93 -0
- package/engine/discovery.d.mts +38 -0
- package/engine/discovery.mjs +146 -0
- package/engine/env-safety.mjs +14 -0
- package/engine/executor.d.mts +28 -0
- package/engine/executor.mjs +290 -205
- package/engine/fillers.mjs +39 -8
- package/engine/fixed-registration.mjs +12 -0
- package/engine/history.mjs +71 -0
- package/engine/instruction-blocks.d.mts +13 -0
- package/engine/instruction-blocks.mjs +21 -0
- package/engine/instruction-files.d.mts +5 -0
- package/engine/instruction-files.mjs +97 -0
- package/engine/instruction-hint.mjs +69 -103
- package/engine/interpolate.d.mts +7 -0
- package/engine/interpolate.mjs +44 -13
- package/engine/layers.mjs +163 -227
- package/engine/machine-paths.mjs +40 -0
- package/engine/module-file-tools.mjs +8 -0
- package/engine/module-import-tools.mjs +10 -0
- package/engine/module-manifest-tools.mjs +8 -0
- package/engine/module-rule-tools.mjs +10 -0
- package/engine/module-variable-tools.mjs +10 -0
- package/engine/order.d.mts +14 -0
- package/engine/order.mjs +0 -3
- package/engine/path-safety.d.mts +2 -0
- package/engine/path-safety.mjs +58 -0
- package/engine/pre-step-source.d.mts +69 -0
- package/engine/pre-step-source.mjs +103 -0
- package/engine/present-as.mjs +77 -0
- package/engine/promotion-pool.d.mts +9 -0
- package/engine/promotion-pool.mjs +69 -0
- package/engine/record.mjs +2 -0
- package/engine/rule-engine.mjs +3 -2
- package/engine/rule-facts.d.mts +11 -0
- package/engine/rule-facts.mjs +60 -0
- package/engine/rule-runtime.d.mts +46 -0
- package/engine/rule-runtime.mjs +98 -13
- package/engine/rule-spec.d.mts +106 -0
- package/engine/rule-spec.mjs +301 -27
- package/engine/run-code-env.mjs +73 -19
- package/engine/schema.mjs +165 -243
- package/engine/sdk-strip.mjs +2 -2
- package/engine/service-names.d.mts +10 -0
- package/engine/service-names.mjs +10 -0
- package/engine/shared.d.mts +21 -0
- package/engine/shared.mjs +46 -13
- package/engine/skill-search.mjs +125 -53
- package/engine/source-kind.d.mts +9 -0
- package/engine/source-kind.mjs +16 -0
- package/engine/strategy-ids.mjs +5 -0
- package/engine/template-evaluation.d.mts +16 -0
- package/engine/template-evaluation.mjs +178 -0
- package/engine/template-frame.d.mts +16 -0
- package/engine/template-frame.mjs +69 -0
- package/engine/tool-config-engine.mjs +38 -34
- package/engine/tool-definition.d.mts +4 -0
- package/engine/tool-definition.mjs +5 -1
- package/engine/tool-git-bash.mjs +5 -1
- package/engine/tool-scope.mjs +22 -0
- package/engine/{dev-tool-search.mjs → tool-search.mjs} +63 -65
- package/engine/trigger.mjs +15 -270
- package/engine/vendor/yaml/dist/compose/resolve-flow-scalar.js +19 -18
- package/engine/vendor/yaml/dist/nodes/Alias.js +25 -23
- package/engine/vendor/yaml/package.json +1 -1
- package/lib/client.js +8312 -6724
- package/lib/client.js.map +1 -1
- package/lib/index.d.mts +16 -2120
- package/lib/index.mjs +26914 -5816
- package/modules/ponytail/module.yml +83 -203
- package/modules/ptc-mode/module.yml +45 -0
- package/modules/soul/assets/core-hard.md +6 -0
- package/modules/soul/assets/criteria.md +12 -0
- package/modules/soul/assets/echo.md +12 -0
- package/modules/soul/assets/layers.md +11 -0
- package/modules/soul/assets/ledger.md +9 -0
- package/modules/soul/assets/manifest.yml +20 -0
- package/modules/soul/assets/reference/00-layers.md +27 -0
- package/modules/soul/assets/reference/01-criteria.md +32 -0
- package/modules/soul/assets/reference/02-echo.md +161 -0
- package/modules/soul/assets/reference/03-vital.md +183 -0
- package/modules/soul/assets/reference/04-manifest.json +106 -0
- package/modules/soul/assets/reference/05-doctor.md +67 -0
- package/modules/soul/assets/reference/06-reference.md +189 -0
- package/modules/soul/assets/reference/07-bundle.json +431 -0
- package/modules/soul/assets/reference/08-/350/270/251/345/235/221/345/256/236/345/275/225.md +59 -0
- package/modules/soul/assets/reference/09-dev-workflow.md +109 -0
- package/modules/soul/assets/reference/10-echo-anatomy.md +109 -0
- package/modules/soul/assets/reference/11-self.md +80 -0
- package/modules/soul/assets/reference/12-ledger.md +159 -0
- package/modules/soul/assets/reference/ECHO-/346/235/203/345/250/201/345/217/243/345/276/204.md +202 -0
- 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 -0
- package/modules/soul/assets/reference/README.md +12 -0
- package/modules/soul/assets/templates/agents-template.md +6 -0
- package/modules/soul/assets/vital.md +9 -0
- package/modules/soul/module.yml +311 -0
- package/modules/superpowers/module.yml +122 -0
- package/modules/tool-surface/module.yml +51 -47
- package/package.json +37 -40
- package/skills/dsh-module/SKILL.md +67 -147
- package/skills/dsh-module/reference.md +113 -86
- package/templates/10-pre-step.yml +2 -3
- package/templates/14-first-turn-anchor.yml +10 -14
- package/templates/15-guide-auto.yml +32 -28
- package/templates/16-custom-fallback.yml +33 -21
- package/templates/20-system-section.yml +1 -4
- package/templates/50-llm-stream.yml +4 -10
- package/templates/60-tool-pipeline.yml +12 -10
- package/templates/63-append-context.yml +4 -6
- package/templates/65-turn-stop.yml +2 -2
- package/templates/67-inbox-prepend.yml +2 -2
- package/templates/70-subagent-maintenance.yml +9 -10
- package/templates/75-subagent-end.yml +2 -2
- package/templates/80-tool-surface.yml +41 -57
- package/templates/tools/40-delegate-module-import.yml +22 -0
- package/templates/tools/50-delegate-module-rules.yml +14 -0
- package/templates/tools/60-delegate-module-variables.yml +17 -0
- package/templates/tools/70-delegate-module-rules-edit.yml +31 -0
- package/engine/actions/decision.mjs +0 -54
- package/engine/actions/guard.mjs +0 -80
- package/engine/actions/sdk-strip.mjs +0 -30
- package/engine/character-tools.mjs +0 -8
- package/engine/classify-task.mjs +0 -53
- package/engine/compositions/source/local/character-tools.yml +0 -5
- package/engine/compositions/source/local/dev-tool-search.yml +0 -11
- package/engine/compositions/source/local/session-var-tools.yml +0 -5
- package/engine/compositions/source/local/subagent-tool-policy.yml +0 -21
- package/engine/compositions/source/local/world-book-tools.yml +0 -5
- package/engine/condition.mjs +0 -96
- package/engine/declared-triggers.mjs +0 -93
- package/engine/session-var-tools.mjs +0 -8
- package/engine/session-vars.mjs +0 -54
- package/engine/st-macros.d.mts +0 -22
- package/engine/st-macros.mjs +0 -208
- package/engine/st-render.mjs +0 -109
- package/engine/st-world-book.d.mts +0 -10
- package/engine/subagent-tool-policy-core.mjs +0 -400
- package/engine/subagent-tool-policy.mjs +0 -352
- package/engine/trigger-spec.mjs +0 -173
- package/engine/world-book-tools.mjs +0 -8
- package/lib/migrate-rules.d.mts +0 -1
- package/lib/migrate-rules.mjs +0 -610
- package/lib/module-package-DqJZaE71.mjs +0 -2
- package/lib/module-package-q2gDRu9H.mjs +0 -2869
- package/lib/rule-builder-DMrJten6.mjs +0 -14767
- package/templates/61-deny-tools-presentation.yml +0 -27
- package/templates/62-guard-deny-tools.yml +0 -20
- package/templates/policies/legacy-defaults.yml +0 -34
- package/templates/tools/40-delegate-character.yml +0 -15
- package/templates/tools/50-delegate-worldbook.yml +0 -15
- package/templates/tools/60-delegate-session-var.yml +0 -15
- package/templates/tools/70-delegate-worldbook-upsert.yml +0 -36
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-plugin-prompt-tool",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "DSH 插件:提示词工具,规范模型的思维链与回答内容,提供 Web UI 编辑
|
|
3
|
+
"version": "3.0.1",
|
|
4
|
+
"description": "DSH 插件:提示词工具,规范模型的思维链与回答内容,提供 Web UI 编辑 module.yml 与 AGENTS.md,并按 skills 目录注册可开关技能。",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -10,9 +10,6 @@
|
|
|
10
10
|
"type": "module",
|
|
11
11
|
"main": "lib/index.mjs",
|
|
12
12
|
"types": "lib/index.d.mts",
|
|
13
|
-
"bin": {
|
|
14
|
-
"prompt-tool-migrate-rules": "lib/migrate-rules.mjs"
|
|
15
|
-
},
|
|
16
13
|
"exports": {
|
|
17
14
|
".": {
|
|
18
15
|
"types": "./lib/index.d.mts",
|
|
@@ -23,9 +20,11 @@
|
|
|
23
20
|
"./package.json": "./package.json"
|
|
24
21
|
},
|
|
25
22
|
"engines": {
|
|
26
|
-
"node": "^22.19.0 || >=24.0.0"
|
|
23
|
+
"node": "^22.19.0 || >=24.0.0",
|
|
24
|
+
"dsh": ">=0.2.0-rc.1"
|
|
27
25
|
},
|
|
28
26
|
"dsh": {
|
|
27
|
+
"manifestVersion": 1,
|
|
29
28
|
"bundle": {
|
|
30
29
|
"patch": "./cordis.patch.yml"
|
|
31
30
|
},
|
|
@@ -62,35 +61,32 @@
|
|
|
62
61
|
"react": "^18.2.0"
|
|
63
62
|
},
|
|
64
63
|
"devDependencies": {
|
|
65
|
-
"@deepseek-ai/cordis": "4.0.
|
|
66
|
-
"@deepseek-ai/dsh-agent": "
|
|
67
|
-
"@deepseek-ai/dsh-agent-preset-registry": "
|
|
68
|
-
"@deepseek-ai/dsh-api-remotes": "
|
|
69
|
-
"@deepseek-ai/dsh-api-session-controller": "
|
|
70
|
-
"@deepseek-ai/dsh-client-connection": "
|
|
71
|
-
"@deepseek-ai/dsh-client-locale": "
|
|
72
|
-
"@deepseek-ai/dsh-client-
|
|
73
|
-
"@deepseek-ai/dsh-client-ui-
|
|
74
|
-
"@deepseek-ai/dsh-client-ui-
|
|
75
|
-
"@deepseek-ai/dsh-client-ui-settings
|
|
76
|
-
"@deepseek-ai/dsh-client-ui-
|
|
77
|
-
"@deepseek-ai/dsh-client-ui-
|
|
78
|
-
"@deepseek-ai/dsh-client-ui-
|
|
79
|
-
"@deepseek-ai/dsh-client-ui-
|
|
80
|
-
"@deepseek-ai/dsh-commands": "
|
|
81
|
-
"@deepseek-ai/dsh-fs": "
|
|
82
|
-
"@deepseek-ai/dsh-host-webserver": "
|
|
83
|
-
"@deepseek-ai/dsh-llm": "
|
|
84
|
-
"@deepseek-ai/dsh-
|
|
85
|
-
"@deepseek-ai/dsh-
|
|
86
|
-
"@deepseek-ai/dsh-
|
|
87
|
-
"@deepseek-ai/dsh-
|
|
88
|
-
"@deepseek-ai/dsh-
|
|
89
|
-
"@deepseek-ai/dsh-
|
|
90
|
-
"@deepseek-ai/dsh-
|
|
91
|
-
"@deepseek-ai/dsh-system-prompt": ">=0.2.0-rc.1",
|
|
92
|
-
"@deepseek-ai/dsh-tool-subagent": ">=0.2.0-rc.1",
|
|
93
|
-
"@deepseek-ai/dsh-tools": ">=0.2.0-rc.1",
|
|
64
|
+
"@deepseek-ai/cordis": "4.0.5-alpha.1",
|
|
65
|
+
"@deepseek-ai/dsh-agent": "0.2.1-alpha.2",
|
|
66
|
+
"@deepseek-ai/dsh-agent-preset-registry": "0.2.1-alpha.2",
|
|
67
|
+
"@deepseek-ai/dsh-api-remotes": "0.2.1-alpha.2",
|
|
68
|
+
"@deepseek-ai/dsh-api-session-controller": "0.2.1-alpha.2",
|
|
69
|
+
"@deepseek-ai/dsh-client-connection": "0.2.1-alpha.2",
|
|
70
|
+
"@deepseek-ai/dsh-client-locale": "0.2.1-alpha.2",
|
|
71
|
+
"@deepseek-ai/dsh-client-ui-layout": "0.2.1-alpha.2",
|
|
72
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.2.1-alpha.2",
|
|
73
|
+
"@deepseek-ai/dsh-client-ui-session": "0.2.1-alpha.2",
|
|
74
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.2.1-alpha.2",
|
|
75
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins": "0.2.1-alpha.2",
|
|
76
|
+
"@deepseek-ai/dsh-client-ui-sidebar": "0.2.1-alpha.2",
|
|
77
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.1-alpha.2",
|
|
78
|
+
"@deepseek-ai/dsh-client-ui-workspace": "0.2.1-alpha.2",
|
|
79
|
+
"@deepseek-ai/dsh-commands": "0.2.1-alpha.2",
|
|
80
|
+
"@deepseek-ai/dsh-fs": "0.2.1-alpha.2",
|
|
81
|
+
"@deepseek-ai/dsh-host-webserver": "0.2.1-alpha.2",
|
|
82
|
+
"@deepseek-ai/dsh-llm": "0.2.1-alpha.2",
|
|
83
|
+
"@deepseek-ai/dsh-scope": "0.2.1-alpha.2",
|
|
84
|
+
"@deepseek-ai/dsh-settings": "0.2.1-alpha.2",
|
|
85
|
+
"@deepseek-ai/dsh-skill": "0.2.1-alpha.2",
|
|
86
|
+
"@deepseek-ai/dsh-skill-filesystem": "0.2.1-alpha.2",
|
|
87
|
+
"@deepseek-ai/dsh-subagent": "0.2.1-alpha.2",
|
|
88
|
+
"@deepseek-ai/dsh-system-prompt": "0.2.1-alpha.2",
|
|
89
|
+
"@deepseek-ai/dsh-tools": "0.2.1-alpha.2",
|
|
94
90
|
"@types/node": "^26.2.0",
|
|
95
91
|
"@types/react": "~18.3.1",
|
|
96
92
|
"@types/react-dom": "^18.3.0",
|
|
@@ -116,20 +112,21 @@
|
|
|
116
112
|
"scripts": {
|
|
117
113
|
"build": "tsdown",
|
|
118
114
|
"prepare": "tsdown",
|
|
119
|
-
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.client.json --noEmit",
|
|
115
|
+
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.client.json --noEmit && tsc -p tsconfig.test.json --noEmit",
|
|
120
116
|
"lint": "oxlint src test tsdown.config.ts",
|
|
121
117
|
"test": "node scripts/run-tests.mjs",
|
|
122
118
|
"sync:yaml": "node scripts/sync-yaml-vendor.mjs",
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"
|
|
119
|
+
"sync:harness": "node scripts/sync-harness-deps.mjs",
|
|
120
|
+
"rebuild:module-template": "node scripts/rebuild-module-template.mjs",
|
|
121
|
+
"rematerialize:modules": "node scripts/rematerialize-modules.mjs",
|
|
126
122
|
"repair:profile": "node scripts/repair-profile.mjs",
|
|
123
|
+
"verify:harness": "node scripts/sync-harness-deps.mjs --check",
|
|
127
124
|
"verify:host": "node scripts/verify-host-contracts.mjs",
|
|
128
125
|
"verify:pack": "node scripts/verify-package.mjs"
|
|
129
126
|
},
|
|
130
127
|
"dependencies": {
|
|
131
128
|
"@deepseek-ai/schemastery": "^3.18.4",
|
|
132
129
|
"@zip.js/zip.js": "2.15.0",
|
|
133
|
-
"yaml": "^2.9.
|
|
130
|
+
"yaml": "^2.9.1"
|
|
134
131
|
}
|
|
135
132
|
}
|
|
@@ -1,199 +1,119 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dsh-module
|
|
3
|
-
description:
|
|
3
|
+
description: 新建、修改、审查 DSH Prompt Tool 模块,或把规则、人设、工具和 SillyTavern 来源转成原生 module.yml;也用于排查启用后未注入、将旧内部上下文/会话变量格式显式转换为原生规则。模块由插件在各 Agent scope 装配,与官方会话预设分开。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# DSH 模块
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
先确定任务是创建、编辑、审查、导入还是旧格式转换。只读审查不授予修复;用户已经授权的修改直接完成,不额外请求确认。涉及安装、启用新能力、覆盖用户文件或重启服务,遵守会话已有授权和项目边界。
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
路径基于实际 `$DSH_HOME`。模块定义为 `.prompt-tool/modules/<id>/module.yml`,启用集合在 `.prompt-tool/config.yml`。包内 `engine/`、`templates/`、`modules/` 相对插件包根,不相对本技能目录;可通过已加载插件位置或实际安装信息定位,不猜默认 profile。
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## 1. 读取目标与所有者
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
读取完整 module.yml 与有关资产,确认目录名和 id 一致,保留用户已有修改。不要编辑 `rules/`:它是完整定义的校验投影,手改会被恢复。
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
先判这次做哪一种,再往下走:
|
|
19
|
-
|
|
20
|
-
| 你要的效果 | 落点 |
|
|
16
|
+
| 内容 | 写入位置 |
|
|
21
17
|
|---|---|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
24
|
-
|
|
|
25
|
-
|
|
|
18
|
+
| 条件、动作、正文、规则启停 | rules |
|
|
19
|
+
| 共享模型/能力参数 | layerSettings 的登记层 |
|
|
20
|
+
| 持久模块变量 | 顶层 variables |
|
|
21
|
+
| 全局变量 | 同一 DSH_HOME 的插件 variables.yml,经变量 owner 读写 |
|
|
22
|
+
| 人设正文/选项 | 各模块 persona.main / persona.subagent;rules/_settings.yml 仅作投影 |
|
|
23
|
+
| 主/子人设来源 | config.yml.personaSources 只存单选模块 ID,默认官方 |
|
|
24
|
+
| 自定义工具/子代理授权 | customTools / subagentToolPolicy |
|
|
25
|
+
| 模块私有文件 | memory.md、assets/(只读)、data/(只追加),经 module_file_read/append 显式读写;装配清单走 module_manifest |
|
|
26
|
+
| 用户指令文件 | 原文件与独立指令策略,独立授权通道 |
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
完成判据:每处改动都有单一 owner,工具操作目标与 UI 编辑模块不混淆。
|
|
28
29
|
|
|
29
|
-
##
|
|
30
|
+
## 2. 创建最小规则
|
|
30
31
|
|
|
31
32
|
```yaml
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
name: 我的规则
|
|
33
|
+
id: my-module
|
|
34
|
+
name: 我的模块
|
|
35
35
|
version: 1.0.0
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
modules: # 这个模块启用哪些引擎能力行
|
|
39
|
-
- rule-engine # 声明了 rules 就要它
|
|
40
|
-
rules: [] # 规则在这里;空模块不自动生成正文或规则
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
- 先解析 `$DSH_HOME` 再动手:PowerShell 读 `$env:DSH_HOME`,bash 读 `$DSH_HOME`;它未设置时插件回落到 `~/.dsh`。别假设默认路径就是现场在用的那个,也别把模块写到别的根。
|
|
44
|
-
- 目录建在存储根 `modules/` 下;包内 `modules/` 是启动时的补建来源(随包分发三个:`ponytail`、`tool-surface`、`skill-surface`),同名用户目录保持原样。
|
|
45
|
-
- 顶层字段:`id` `name` `version` `engineCompat` `description` `modules` `rules` `layerSettings` `persona` `variables` `customTools` `subagentToolPolicy` `configOrder` `moduleConfigs` `meta` `order`。
|
|
46
|
-
|
|
47
|
-
**完成判据**:目录名与 `id` 一致、`module.yml` 能被解析——工作台模块页能列出它(列表就是 `/meta` 的 `modules`),或只读读取接口能看到。
|
|
48
|
-
|
|
49
|
-
## 第 2 步 写规则:`if` → `then`
|
|
50
|
-
|
|
51
|
-
规则字段:`id` `name` `enabled` `layer` `group` `exclusive` `if` `then` `else`。
|
|
52
|
-
|
|
53
|
-
```yaml
|
|
36
|
+
modules: [rule-engine]
|
|
37
|
+
variables: {}
|
|
54
38
|
rules:
|
|
55
|
-
- id:
|
|
56
|
-
|
|
57
|
-
enabled: true
|
|
58
|
-
layer: system-section
|
|
39
|
+
- id: project-rules
|
|
40
|
+
enabled: false
|
|
59
41
|
then:
|
|
60
|
-
- id: inject
|
|
42
|
+
- id: inject
|
|
61
43
|
kind: inject-text
|
|
62
44
|
config:
|
|
63
45
|
layer: system-section
|
|
64
46
|
strategy: static
|
|
65
|
-
order: 190
|
|
66
47
|
text: |-
|
|
67
|
-
|
|
48
|
+
按用户确认的项目约束执行。
|
|
68
49
|
```
|
|
69
50
|
|
|
70
|
-
|
|
71
|
-
- `then` 非空数组;动作按数组顺序在同一执行点执行,条件只求值一次。
|
|
72
|
-
- 分支写 `else`(承接规则级 `if` 的反面);一个动作要自己有分支,就把它写成 `{ if, then, else }` 节点嵌在 `then` / `else` 里,可继续嵌套。一个 `else` 结构上保证必有一支命中,适合「两档互斥、总得给一档」。
|
|
73
|
-
- 互斥档位:同模块内同名非空 `group` 里任一规则写 `exclusive: true`,整组最多一条启用。切换要**先关旧档再开新档**,或由工作台显式激活目标卡(它会在一次事务里关掉同组其他卡)。
|
|
74
|
-
- 条件拿不到必要事实时返回 `UNAVAILABLE`:只有严格 `true` 才执行。
|
|
51
|
+
一条规则有独立总开关;动作 id 在整条规则的 then/else/嵌套树内唯一。if 缺省为无条件,else 必须有对应 if。条件未知时不能以“否定”为由放行。规则级 layer 是动作缺省层与展示归属,不是全局执行阶段。
|
|
75
52
|
|
|
76
|
-
|
|
53
|
+
条件、动作和字段选择查 [reference.md](reference.md)。工具或请求类动作有自身执行点;tool-pipeline 没有 inject-text 通道。普通文本空白保持空,不补未经请求的默认正文。
|
|
77
54
|
|
|
78
|
-
|
|
79
|
-
node --input-type=module -e "import {compileRules} from './engine/rule-spec.mjs'; import {parse} from 'yaml'; import {readFileSync} from 'node:fs'; const d=parse(readFileSync(process.argv[1],'utf8')); compileRules(d.rules ?? [])" '<module.yml 绝对路径>'
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
(在仓库根执行;只做校验,不写盘。)
|
|
83
|
-
|
|
84
|
-
## 第 3 步 选层与动作
|
|
55
|
+
完成判据:完整候选通过唯一 compileRules 校验,规则启停、受众、层、位置和次数符合请求。静态可解析不等于模型实际收到。
|
|
85
56
|
|
|
86
|
-
|
|
57
|
+
## 3. 变量、人设和上下文激活
|
|
87
58
|
|
|
88
|
-
|
|
89
|
-
|---|---|---|
|
|
90
|
-
| `pre-step` | `agent/pre-step` 消息批 | 每轮/首轮注入、来源过滤、按任务给子代理分档 |
|
|
91
|
-
| `system-section` | `ctx.systemPrompt.section` | 常驻系统段;`params.complete` 可独占整个 system prompt |
|
|
92
|
-
| `runtime-context` | `ctx.systemPrompt.context` | 动态快照(沙箱、审批、委派事实) |
|
|
93
|
-
| `agent-request` | `agent/request` | 改模型请求参数(provider/model/temperature/maxTokens/stop) |
|
|
94
|
-
| `llm-stream` | `llm/stream` | 包装或替代模型输出流 |
|
|
95
|
-
| `tool-pipeline` | `tools/*` | 工具放行/拦截/改写结果 |
|
|
96
|
-
| `turn-stop` | `agent/turn-stopping` | 命中后强制续跑一步(引擎内每轮 1 次、每会话 3 次上限) |
|
|
97
|
-
| `subagent-start` | `subagent/start` | 向新子代理注入上下文 |
|
|
98
|
-
| `subagent-end` | `subagent/end` | 记录或向主会话投递子代理结果 |
|
|
59
|
+
普通规则引用的变量需手动在模块变量卡建立;不要扫描正文偷偷登记。空字符串是有效占位,会遮住同名全局值;删除模块键才回落全局。动作 config.variables 已退役。
|
|
99
60
|
|
|
100
|
-
|
|
61
|
+
需要赋值才声明 `params.templateEvaluation: true`,使用 `{{module.set::key::value}}` 或 module/global 的 get/add/inc/dec。一张模板只能写一个域,扫描与预览只读;禁止用 session 表或执行重挂伪装持久事务。
|
|
101
62
|
|
|
102
|
-
|
|
103
|
-
2. **注册制层的条件写在规则级 `if`**:`system-section` 与 `runtime-context` 用 `if` 表达条件(走条件文本贡献通道,每次 assembly 求值;`system-section` 配 `if.scope.audience` 是常见写法);动作级 `{ if, then, else }` 分支用在带逐轮时机的层(`pre-step` 等)。
|
|
104
|
-
3. **通用门写在规则级 `if`**:`audience` / `modelScope` / `promotion` / `subject` / `match` 都在规则 `if` 里;`system-section` 的静态注册 `audience` 是写在动作 `config` 里的唯一例外。
|
|
63
|
+
人设正文使用模块内 persona.main/subagent;主会话和子代理各自单选来源,默认官方。来源由独立人设卡下拉选择,config.yml.personaSources 只存模块 ID,不能放正文;选择不自动启用来源模块 rules。仅取所选模块对应受众的字段,不跨模块逐字段合并。省略字段继承、空文本清空、complete:false 解除人设独占;有效官方人设与启用规则的 complete 冲突仍需配装预检。人设不进入规则数组或排序,rules/_settings.yml 的校验投影保持只读。
|
|
105
64
|
|
|
106
|
-
|
|
65
|
+
上下文激活使用 `strategy: context-activation`、`params.activation.scan: batch|history`。关键词、候选组和副键约束的语义查 reference;启停与受众仍归规则。记忆不自动生成常驻规则。
|
|
107
66
|
|
|
108
|
-
|
|
109
|
-
- 把解锁做到跨请求,靠 `allowFrom: { tool, key }`:从本会话已持久化的 `tool/call` 参数里回收名单。**只能做加法**,永远解不开黑名单;它必须与发现工具成对出现,否则解锁是一次性的。
|
|
110
|
-
- `guard` 是最终拒绝层(`assembly` 只管呈现):被它点名的工具,即使经 `run_code` 子调用也会在实际执行点被拒。它按**工具名**裁决,`run_code` 作为 PTC 的唯一入口始终可用。
|
|
111
|
-
- 禁用或收窄某个工具要三层同做:呈现裁目录(`assembly.target.tools.deny`)、文本裁声明(`sdk-strip.mask.deny`)、执行层拒绝(`guard.mask.deny`)。`guard` 注册在 agent scope,**会话原有预设装的行也归它裁决**——这是模块禁用官方工具的硬手段;完整写法与最小 YAML 见 `reference.md` 第二节。
|
|
112
|
-
- `pre-step-filter` 的 `sources` 是严格白名单,且同时作用于被领取的消息批:名单要**枚举全部真实 kind**——没写进去的 kind 会连同它的消息一起消失。`modules/skill-surface/module.yml` 里的 14 种 kind 就是一次实测枚举。
|
|
67
|
+
完成判据:变量来源和空值语义明确,人设继承可表达,激活字段无需依赖“来自 ST”才生效。
|
|
113
68
|
|
|
114
|
-
|
|
69
|
+
## 4. 能力与模型工具
|
|
115
70
|
|
|
116
|
-
|
|
71
|
+
只声明任务需要的能力。模型工具目录与能力映射如下:
|
|
117
72
|
|
|
118
|
-
|
|
73
|
+
| 能力 | 工具 |
|
|
74
|
+
|---|---|
|
|
75
|
+
| module-rule-tools | module_rules_read / module_rules_edit |
|
|
76
|
+
| module-variable-tools | module_variables |
|
|
77
|
+
| module-file-tools | module_file_read / module_file_append |
|
|
78
|
+
| module-manifest-tools | module_manifest |
|
|
79
|
+
| module-import-tools | module_import |
|
|
80
|
+
| tool-config-engine | customTools 声明的工具 |
|
|
119
81
|
|
|
120
|
-
|
|
121
|
-
|---|---|---|
|
|
122
|
-
| `instructionHint` | `pre-step` | 晋升后把官方指令全文换成一次路径提示(默认关) |
|
|
123
|
-
| `maxDepth` | `subagent-start` | 已启用的插件子代理策略的递归深度 |
|
|
124
|
-
| `toolGitBashEnabled` | `tool-pipeline` | Windows Git Bash 适配行开关 |
|
|
125
|
-
| `customToolRequireApproval` | `tool-pipeline` | 需要用户批准的自定义执行器:shell / http / delegate / fs / ask-user |
|
|
82
|
+
规则先读完整树与 revisions,再携带 expectedModuleId/expectedRevisions 编辑完整合法规则;关闭标记 settingsChanged,显式启用用 activateRuleId,删除整规则用 rule:null。正文保存不覆盖并发状态,版本冲突先重读。
|
|
126
83
|
|
|
127
|
-
|
|
84
|
+
变量先 list/get 取版本,再 set/delete;set 必须显式字符串,空串不是删除。global 写影响同一安装的所有模块。文件 append 带当前目标身份与显式 path,与规则事务分开;module_manifest 按清单只写 data/、不覆盖。module_import 先预览并完成选择,提交原始 files 与两份预览凭据,默认另存且不自动启用。
|
|
128
85
|
|
|
129
|
-
|
|
86
|
+
共享模型/能力参数以 `ENGINE_PARAM_DEFINITIONS` 为唯一目录,使用登记的 layerSettings 路径:主/子模型路由与采样、PTC 呈现、run_code 环境、Git Bash、指令提示和工具批准都在其中;数量与 options 以源码为准,不抄旧文档的固定键数。也可通过 request-params 动作按受众改请求。官方工具、规划、压缩和普通委派来自官方预设,模块不重声明它们。
|
|
130
87
|
|
|
131
|
-
|
|
132
|
-
- `variables: { 名字: 值 }` —— `{{名字}}` 插值源;空字符串是**有意义的占位**,不按「空值删键」处理。局部覆盖写在动作的 `config.variables`。
|
|
133
|
-
- `customTools: [...]` —— 自定义模型工具,五种执行器 `shell` / `http` / `delegate` / `fs` / `ask-user`;结构照 `templates/tools/*.yml` 抄。`shell` 只继承白名单环境变量(`PATH` `HOME` `USERPROFILE` `DSH_*` 等),要透传别的(token、代理)得在工具定义的 `execute.env` 里显式写。
|
|
134
|
-
- `subagentToolPolicy: {...}` —— 子代理工具授权(`ceiling` / `profiles` / `taskRules` / `modelExpansion`);缺省时子代理按官方委派行为,不受本模块约束。
|
|
88
|
+
完成判据:声明与实际工具注册一致,目标、版本、批准和取消保护没有绕过。
|
|
135
89
|
|
|
136
|
-
|
|
90
|
+
## 5. 导入和显式转换
|
|
137
91
|
|
|
138
|
-
|
|
92
|
+
ST 预设、角色卡、世界书优先经工作台或 module_import 转换。**ST 导入自动登记缺失裸变量为空占位;普通规则不自动登记。** 导入只转换文本和声明,不执行 STscript 或任意来源代码;报告与生成后的 enabled 状态必须一起检查。
|
|
139
93
|
|
|
140
|
-
|
|
141
|
-
2. 注入类改动逐条确认到模型真的收到:
|
|
142
|
-
- 模块被列出且定义有效(工作台模块页 / 只读接口);
|
|
143
|
-
- 规则编译通过(保存时的编译就是同一个 `compileRules`);
|
|
144
|
-
- 开一个新会话,在系统消息或对话流里核对正文**真的到了模型**——「已启用」不等于「模型收到」;
|
|
145
|
-
- 工具类改动看工具预览:自定义工具与被放行的工具确实可见,被挡的工具在 `run_code` 子调用里也被拒;
|
|
146
|
-
- 停用一次并重启,确认贡献干净撤回(已落进会话历史的消息保留)。
|
|
147
|
-
3. 报告时如实区分「跑了哪些验证」与「只是静态检查」:没有真机现场证据的,就说未验证。
|
|
94
|
+
用户要求转换旧内部模块时:
|
|
148
95
|
|
|
149
|
-
|
|
96
|
+
1. 读取完整定义并保存用户同意范围内的备份;保留未知资产、记忆与来源证明。
|
|
97
|
+
2. 将旧上下文策略转换为 context-activation,明确 scan;ST 数字副键映射为具名真值逻辑,不能照抄旧 any/not 注释。
|
|
98
|
+
3. 将 stWorldBook 执行字段拆为 activation,把角色/位置/不支持控制项移至 source.original;模块递归声明 contextActivationRecursive。
|
|
99
|
+
4. 将 set/get/add/inc/decvar 经 parser 转为 module/global 操作,启用 templateEvaluation。局部变量无冲突提升到顶层 variables,同名不同值先报告并解决;不建立第三层变量。
|
|
100
|
+
5. 将旧工具与能力改为上表名称;完整规则替换保留分支与未改字段,记忆从 note 副作用分离。
|
|
101
|
+
6. 将扁平 persona 明确分配到 main/subagent,保留省略/空串/false;由用户为两类受众各选择官方或一个模块来源,不因转换自动启用规则或切换来源。
|
|
102
|
+
7. 旧私有记忆标记先核实并把私有内容归回 memory.md;不能单删标记后导出。
|
|
103
|
+
8. 在隔离候选校验与读回,再按授权提交;失败保留原定义。
|
|
150
104
|
|
|
151
|
-
|
|
105
|
+
插件不提供自动迁移器。未知宏、不等价控制或无法证明的行为要明确报告,不能把成功解析当成转换完成。
|
|
152
106
|
|
|
153
|
-
|
|
107
|
+
## 6. 生效与交付
|
|
154
108
|
|
|
155
|
-
|
|
156
|
-
|---|---|---|
|
|
157
|
-
| 规范/方法论 | 规则文本 | `inject-text`(`system-section` 或 `pre-step`) |
|
|
158
|
-
| CLI 工具 | 命令用法与约定 | 注入 + `customTools` 的 `shell` 执行器 |
|
|
159
|
-
| HTTP 服务/API | 接口调用 | `customTools` 的 `http` 执行器 + 规则门控 |
|
|
160
|
-
| 文档/手册 | 操作流程 | 技能(放进技能来源根,模型按需加载,不常驻上下文) |
|
|
161
|
-
| 库/SDK | 只有它的命令行入口 | `shell` 执行器;安装需用户批准 |
|
|
162
|
-
| 数据/模型 | 只能被上面几种引用 | 世界书与模块记忆 `memory.md` |
|
|
163
|
-
| 别的 agent 平台插件/MCP | 不能直接搬 | 宿主平面,不是模块能表达的 |
|
|
109
|
+
工作台保存和开关走官方插件运行更新;变量内容更新不重挂 Agent。直接手改 module.yml 的实际加载结果需通过重新读取/重建链确认。代码、bundle、patch 更新需要用户重启 DSH;不自行停止正在运行的服务。
|
|
164
110
|
|
|
165
|
-
|
|
111
|
+
验证以实际公共出口为准:层、位置、次数、受众、规则条件、epoch、变量写入与 disposer。读取失败、过期版本、解析拒绝不应改盘;发布失败区分已保存与尚未生效,refreshOnly 不重放写入。
|
|
166
112
|
|
|
167
|
-
|
|
113
|
+
在本仓库开发时遵守 AGENTS.md 的隔离 cwd 和完整 package gates。一次性探针放临时目录,永久测试须满足项目的 seam/独立真值/公共接口准入,不为退役符号写墓碑测试。
|
|
168
114
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
| 要求 | 怎么回 |
|
|
172
|
-
|---|---|
|
|
173
|
-
| 「把这个仓库跑起来/复刻它的运行时」 | 模块不执行第三方代码;能做的是 shell 调它已装的 CLI,或 http 调它的服务 |
|
|
174
|
-
| 「把依赖装上」 | 属于宿主与插件通道,需要用户批准 |
|
|
175
|
-
| 「加一种全新工具类型/新执行器」 | 要写插件(创造模式预设 + `plugin_manager`),模块只能从既有能力里选 |
|
|
176
|
-
| 「加一个新的引擎模块/改门控行为」 | 属于插件开发,模块只能从既有模块库选 |
|
|
177
|
-
| 「改宿主默认行为/全局设置」 | 宿主平面;模块只作用于装了它的 Agent |
|
|
178
|
-
| 「接一个 MCP 服务器」 | 走宿主的配置型 bundle patch |
|
|
179
|
-
| 「把整仓塞进上下文」 | 只提炼规范与接口;整仓进上下文是 token 与权限双重失控 |
|
|
115
|
+
完成判据:用户要求的改动、生效验证和失败路径已覆盖,交付明确实际运行过的检查与未验证限制。
|
|
180
116
|
|
|
181
117
|
## 审查已有模块
|
|
182
118
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
1. `id` 与目录名一致、符合 `^[a-z0-9][a-z0-9-]*$`;顶层键都在第 1 步那份字段表里。
|
|
186
|
-
2. 规则字段是那九个;动作 id 在整条规则内唯一。
|
|
187
|
-
3. 每个动作的字段都在该层白名单内(回第 3 步)。
|
|
188
|
-
4. 条件与通用门都写在规则级 `if`。
|
|
189
|
-
5. 互斥组同组只有一条启用;换档说明写在 `description`(给人看),正文留给模型。
|
|
190
|
-
6. `layerSettings` 只用了那四个公开键。
|
|
191
|
-
7. 能力声明既存在又必要:`modules` 里的名字都在 `source/local/` 下;用到的 `customTools` / `subagentToolPolicy` / `persona` 都有对应声明。
|
|
192
|
-
8. 手改后重载过(模块在启动时读盘)。
|
|
193
|
-
9. `rules/` 下的切片保持原样——编辑入口是 `module.yml`。
|
|
194
|
-
|
|
195
|
-
## 相关技能
|
|
196
|
-
|
|
197
|
-
- 组合行与插件行层面的细节:`editing-cordis-compositions`
|
|
198
|
-
- 需要写新插件或新能力:`cordis-plugin-development`
|
|
199
|
-
- 指令文件(AGENTS.md / CLAUDE.md)正文与开关:那不属于模块,见仓库的指令文件文档
|
|
119
|
+
按身份、完整规则树、执行点、受众、变量 owner、共享参数归属、能力授权、人设单选来源与 complete 冲突、排序、保存版本逐项核对。纯审查只给事实与改法,不自动把发现转成修复授权。
|