dsh-plugin-prompt-tool 0.8.1 → 2.0.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 (139) hide show
  1. package/README.md +84 -67
  2. package/engine/actions/append-context.mjs +49 -0
  3. package/engine/actions/assembly.mjs +150 -0
  4. package/engine/actions/catalog.mjs +92 -0
  5. package/engine/actions/content.mjs +205 -0
  6. package/engine/actions/decision.mjs +54 -0
  7. package/engine/actions/examples.mjs +11 -0
  8. package/engine/actions/guard.mjs +80 -0
  9. package/engine/actions/inbox-prepend.mjs +37 -0
  10. package/engine/actions/index.mjs +100 -0
  11. package/engine/actions/inject-text.mjs +22 -0
  12. package/engine/actions/pre-step-filter.mjs +55 -0
  13. package/engine/actions/registration.mjs +168 -0
  14. package/engine/actions/request-params.mjs +32 -0
  15. package/engine/actions/sdk-strip.mjs +30 -0
  16. package/engine/actions/shared.mjs +71 -0
  17. package/engine/actions.mjs +2 -931
  18. package/engine/branch.mjs +44 -0
  19. package/engine/character-tools.mjs +3 -6
  20. package/engine/compaction-epoch.mjs +31 -13
  21. package/engine/compositions/library/agent-instructions.yml +1 -1
  22. package/engine/compositions/library/command-goal.yml +1 -1
  23. package/engine/compositions/library/compaction.yml +1 -1
  24. package/engine/compositions/library/delegation-ptc.yml +1 -1
  25. package/engine/compositions/library/delegation.yml +1 -1
  26. package/engine/compositions/library/persistent-shell.yml +1 -1
  27. package/engine/compositions/library/planning.yml +1 -1
  28. package/engine/compositions/library/skill-filesystem-cordis.yml +1 -1
  29. package/engine/compositions/library/skill-filesystem.yml +1 -1
  30. package/engine/compositions/library/tool-ask-user.yml +1 -1
  31. package/engine/compositions/library/tool-bash.yml +1 -1
  32. package/engine/compositions/library/tool-cordis.yml +1 -1
  33. package/engine/compositions/library/tool-fs-search.yml +1 -1
  34. package/engine/compositions/library/tool-fs.yml +1 -1
  35. package/engine/compositions/library/tool-goal.yml +1 -1
  36. package/engine/compositions/library/tool-jobs.yml +1 -1
  37. package/engine/compositions/library/tool-plugin-manager-disabled.yml +1 -1
  38. package/engine/compositions/library/tool-plugin-manager.yml +1 -1
  39. package/engine/compositions/library/tool-present.yml +1 -1
  40. package/engine/compositions/library/tool-presentation.yml +1 -1
  41. package/engine/compositions/library/tool-pwsh.yml +1 -1
  42. package/engine/compositions/library/tool-skill.yml +1 -1
  43. package/engine/compositions/library/tool-todo.yml +1 -1
  44. package/engine/compositions/library/tool-web.yml +1 -1
  45. package/engine/compositions/source/local/dev-tool-search.yml +11 -0
  46. package/engine/compositions/source/local/instruction-hint.yml +22 -1
  47. package/engine/compositions/source/local/rule-engine.yml +6 -0
  48. package/engine/condition.mjs +16 -3
  49. package/engine/conditions/anchor.mjs +32 -0
  50. package/engine/conditions/availability.mjs +47 -0
  51. package/engine/conditions/composite.mjs +83 -0
  52. package/engine/conditions/count.mjs +140 -0
  53. package/engine/conditions/evaluation.mjs +41 -0
  54. package/engine/conditions/examples.mjs +11 -0
  55. package/engine/conditions/index.mjs +85 -0
  56. package/engine/conditions/names.mjs +21 -0
  57. package/engine/conditions/phase.mjs +54 -0
  58. package/engine/conditions/preset.mjs +94 -0
  59. package/engine/conditions/scope.mjs +18 -0
  60. package/engine/conditions/session.mjs +22 -0
  61. package/engine/conditions/source.mjs +63 -0
  62. package/engine/conditions/subject.mjs +121 -0
  63. package/engine/conditions/text.mjs +44 -0
  64. package/engine/conditions/values.mjs +32 -0
  65. package/engine/dev-tool-search.mjs +213 -0
  66. package/engine/executor.mjs +93 -31
  67. package/engine/fillers.mjs +23 -16
  68. package/engine/instruction-hint.mjs +39 -23
  69. package/engine/layers.mjs +171 -77
  70. package/engine/order.mjs +20 -0
  71. package/engine/predicates.mjs +2 -753
  72. package/engine/rule-engine.mjs +40 -0
  73. package/engine/rule-runtime.mjs +110 -0
  74. package/engine/rule-spec.mjs +187 -0
  75. package/engine/schema.mjs +32 -11
  76. package/engine/session-var-tools.mjs +3 -6
  77. package/engine/shared.mjs +1 -1
  78. package/engine/st-render.mjs +8 -4
  79. package/engine/strategies.mjs +2 -235
  80. package/engine/subagent-tool-policy-core.mjs +7 -7
  81. package/engine/subagent-tool-policy.mjs +45 -20
  82. package/engine/tool-config-engine.mjs +53 -32
  83. package/engine/trigger-editor-meta.mjs +2 -21
  84. package/engine/trigger-spec.mjs +49 -133
  85. package/engine/world-book-tools.mjs +3 -6
  86. package/lib/client.js +10444 -10886
  87. package/lib/client.js.map +1 -1
  88. package/lib/index.d.mts +265 -361
  89. package/lib/index.mjs +1559 -2026
  90. package/lib/migrate-rules.d.mts +1 -0
  91. package/lib/migrate-rules.mjs +39 -0
  92. package/lib/module-package-CHPFweqK.mjs +2 -0
  93. package/lib/module-package-Cnd1_mwx.mjs +2872 -0
  94. package/lib/{paths-CY5psBqE.d.mts → paths-CyP0IkaM.d.mts} +388 -231
  95. package/lib/preset-transfer.d.mts +2 -2
  96. package/lib/preset-transfer.mjs +3 -2
  97. package/lib/{preset-package-BnJqrU4R.mjs → rules-migration-DJ6vASB5.mjs} +13825 -15283
  98. package/modules/ponytail/module.yml +406 -0
  99. package/modules/skill-surface/module.yml +74 -0
  100. package/modules/tool-surface/module.yml +67 -0
  101. package/package.json +50 -80
  102. package/templates/10-pre-step.yml +26 -22
  103. package/templates/14-first-turn-anchor.yml +25 -21
  104. package/templates/15-guide-auto.yml +34 -19
  105. package/templates/16-custom-fallback.yml +27 -15
  106. package/templates/18-placeholder-env-facts.yml +23 -14
  107. package/templates/20-system-section.yml +20 -11
  108. package/templates/30-runtime-context.yml +13 -7
  109. package/templates/40-agent-request.yml +11 -8
  110. package/templates/50-llm-stream.yml +14 -6
  111. package/templates/60-tool-pipeline.yml +15 -9
  112. package/templates/65-turn-stop.yml +19 -12
  113. package/templates/66-subagent-start.yml +12 -7
  114. package/templates/70-subagent-maintenance.yml +35 -29
  115. package/templates/75-subagent-end.yml +10 -5
  116. package/templates/80-tool-surface.yml +66 -0
  117. package/templates/policies/legacy-defaults.yml +34 -0
  118. package/templates/tools/50-delegate-worldbook.yml +1 -1
  119. package/engine/compositions/source/local/prompt-config-engine.yml +0 -7
  120. package/engine/prompt-config-engine.mjs +0 -104
  121. package/preset/pt-cordis/preset.yml +0 -43
  122. package/preset/pt-cordis/skills/cordis-composition-reference/SKILL.md +0 -29
  123. package/preset/pt-cordis/skills/cordis-composition-reference/references/packages.md +0 -501
  124. package/preset/pt-cordis/skills/cordis-plugin-development/SKILL.md +0 -38
  125. package/preset/pt-cordis/skills/cordis-plugin-development/references/host-plugin.md +0 -60
  126. package/preset/pt-cordis/skills/cordis-plugin-development/references/mcp-bundle.md +0 -5
  127. package/preset/pt-cordis/skills/cordis-plugin-development/references/ui-plugin.md +0 -13
  128. package/preset/pt-cordis/skills/cordis-plugin-development/references/verification.md +0 -5
  129. package/preset/pt-cordis/skills/cordis-plugin-development/templates/decoration/client.js +0 -22
  130. package/preset/pt-cordis/skills/cordis-plugin-development/templates/decoration/cordis.patch.yml +0 -3
  131. package/preset/pt-cordis/skills/cordis-plugin-development/templates/decoration/index.js +0 -2
  132. package/preset/pt-cordis/skills/cordis-plugin-development/templates/decoration/package.json +0 -15
  133. package/preset/pt-cordis/skills/cordis-plugin-development/templates/mcp/cordis.patch.yml +0 -8
  134. package/preset/pt-cordis/skills/cordis-plugin-development/templates/mcp/package.json +0 -7
  135. package/preset/pt-cordis/skills/editing-cordis-compositions/SKILL.md +0 -84
  136. package/preset/pt-custom/preset.yml +0 -15
  137. package/preset/pt-minimal/preset.yml +0 -27
  138. package/preset/pt-ptc/preset.yml +0 -45
  139. package/preset/pt-standard/preset.yml +0 -43
package/lib/index.d.mts CHANGED
@@ -1,10 +1,165 @@
1
- import { $ as ENGINE_RECIPES, A as resolvePresetParams, B as MAX_CHARACTER_CARD_STREAM_BYTES, C as loadPresetSpec, D as renderComposition, E as removeUserPreset, F as BridgeEndpoint, G as SkillPolicyChange, H as SkillCatalogEntry, I as BridgeErrorPayload, J as SkillsCatalogSnapshot, K as SkillPolicyScope, L as BridgeRequestMap, M as savePresetPersona, N as userPresetsDir, O as resolvePresetDir, P as BRIDGE_ENDPOINTS, Q as ENGINE_CAPABILITIES, R as BridgeValueMap, S as listPresets, T as removePresetModule, U as SkillContentSnapshot, V as SETTINGS_BRIDGE_PREFIX, W as SkillInvocation, X as invocationForScope, Y as SkillsState, Z as scopeOfInvocation, _ as buildModuleConfigsFromParams, a as installPresetPackage, at as isEngineCapabilityPresent, b as ensurePresetSeed, c as convertStToPreset, ct as ImportChoices, d as stPresetId, dt as InstructionFileSnapshot, et as EngineCapability, f as EngineCapabilityCreateRequest, ft as InstructionFileStatus, g as applyModuleConfigs, h as PresetSpec, i as exportPresetPackage, it as engineRecipe, j as savePresetParams, k as resolvePresetModuleFacts, l as mergeStPresets, lt as INSTRUCTION_FILE_STATUSES, m as EngineCapabilityRemoveResult, n as USER_SKILLS_DIR, nt as PresetModuleFacts, o as presetImportPreview, ot as validateCustomToolIdentities, p as EngineCapabilityCreateResult, pt as MAX_INSTRUCTION_FILE_BYTES, q as SkillSourceKind, r as expandPresetSource, rt as engineCapability, s as StConversionOptions, st as AssetFile, tt as ModuleSourceMode, u as processStText, ut as InstructionContextView, v as cloneBuiltinPreset, w as removeEngineCapabilityFromPreset, x as listBuiltinTemplates, y as createEngineCapabilityInPreset, z as MAX_BRIDGE_BODY_BYTES } from "./paths-CY5psBqE.mjs";
1
+ import { $ as SkillSourceKind, A as removeUserModule, B as BridgeEndpoint, C as ensureModuleSeed, Ct as moduleCapability, D as moduleDirExists, E as loadModuleSpec, F as saveModuleParams, G as MAX_CHARACTER_CARD_STREAM_BYTES, H as BridgeRequestMap, I as saveModulePersona, J as SkillCatalogEntry, K as ModuleSummary, L as userModulesDir, M as resolveModuleDir, N as resolveModuleFacts, O as removeModuleCapability, P as resolveModuleParams, Q as SkillPolicyScope, R as withModuleDefinition, S as createModuleCapability, St as isModuleCapabilityPresent, T as listModules, U as BridgeValueMap, V as BridgeErrorPayload, W as MAX_BRIDGE_BODY_BYTES, X as SkillInvocation, Y as SkillContentSnapshot, Z as SkillPolicyChange, _ as ModuleSpec, _t as MODULE_CAPABILITIES, a as installModulePackage, at as ImportChoices, b as buildModuleConfigsFromParams, bt as ModuleSourceMode, c as convertStToModule, ct as RuleDefinition, d as mergeStModulesWithReport, dt as InstructionFileSnapshot, et as SkillsCatalogSnapshot, f as processStText, ft as InstructionFileStatus, g as ModuleCapabilityRemoveResult, gt as InjectionPoint, h as ModuleCapabilityCreateResult, ht as INJECTION_POINT_ORDER, i as exportModulePackage, it as AssetFile, j as renderComposition, k as removeModuleCapabilityDeclaration, l as convertStToModuleWithReport, lt as INSTRUCTION_FILE_STATUSES, m as ModuleCapabilityCreateRequest, mt as ENGINE_RECIPES, n as USER_SKILLS_DIR, nt as invocationForScope, o as moduleImportPreview, ot as ModuleExportRequest, p as stModuleId, pt as MAX_INSTRUCTION_FILE_BYTES, q as SETTINGS_BRIDGE_PREFIX, r as expandModuleSource, rt as scopeOfInvocation, s as StConversionOptions, st as ModuleExportResult, tt as SkillsState, u as mergeStModules, ut as InstructionContextView, v as appendModuleCapabilities, vt as ModuleCapability, w as listBuiltinTemplates, wt as validateCustomToolIdentities, x as cloneBuiltinModule, xt as engineRecipe, y as applyModuleConfigs, yt as ModuleFacts, z as BRIDGE_ENDPOINTS } from "./paths-CyP0IkaM.mjs";
2
2
  import { parseDocument } from "yaml";
3
3
  import z from "@deepseek-ai/schemastery";
4
+ import { ToolExecution } from "@deepseek-ai/dsh-tools";
4
5
  import { Context, Volatile } from "@deepseek-ai/cordis";
5
6
  import { SkillViewOptions } from "@deepseek-ai/dsh-skill";
6
7
  import { AgentOptions } from "@deepseek-ai/dsh-agent";
7
8
  import { SubagentRuntime } from "@deepseek-ai/dsh-subagent";
9
+ //#region src/shared/param-keys.d.ts
10
+ declare const PARAM_KEYS: ReadonlySet<string>;
11
+ //#endregion
12
+ //#region src/config.d.ts
13
+ interface Config {
14
+ modulesEnabled: Volatile<boolean | undefined>;
15
+ /** 已部署配置的输入兼容;只在读取与显式保存边界归一。 */
16
+ writePreset?: Volatile<boolean | undefined>;
17
+ }
18
+ declare const Config: z<Schemastery.ObjectS<NoInfer<{
19
+ modulesEnabled: z<boolean, boolean, "volatile">;
20
+ writePreset: z<boolean, boolean, "volatile">;
21
+ }>>, Schemastery.ObjectT<NoInfer<{
22
+ modulesEnabled: z<boolean, boolean, "volatile">;
23
+ writePreset: z<boolean, boolean, "volatile">;
24
+ }>>, "plain">;
25
+ interface PromptSettings {
26
+ /** 运行时检测:是否检测到任何模型服务商(不写入 settings)。 */
27
+ modelsAvailable: boolean;
28
+ modulesEnabled: boolean;
29
+ }
30
+ //#endregion
31
+ //#region src/shared/legacy-prompt-params.d.ts
32
+ /** 旧规则快捷参数只用于读取与旧 API 兼容;新编辑器直接保存规则实例。 */
33
+ declare const LEGACY_PROMPT_PARAM_DEFINITIONS: {
34
+ readonly firstTurnAnchor: {
35
+ readonly kind: "boolean";
36
+ readonly targets: readonly ["near-anchor"];
37
+ };
38
+ readonly firstTurnText: {
39
+ readonly kind: "string";
40
+ readonly targets: readonly ["near-anchor", "prompt-injector"];
41
+ };
42
+ readonly firstTurnCustom: {
43
+ readonly kind: "boolean";
44
+ readonly targets: readonly ["near-anchor"];
45
+ };
46
+ readonly guideText: {
47
+ readonly kind: "string";
48
+ readonly targets: readonly ["router-guide"];
49
+ };
50
+ readonly guideCustom: {
51
+ readonly kind: "boolean";
52
+ readonly targets: readonly ["router-guide"];
53
+ };
54
+ readonly guideEnabled: {
55
+ readonly kind: "boolean";
56
+ readonly targets: readonly ["router-guide"];
57
+ };
58
+ readonly injectPrompt: {
59
+ readonly kind: "boolean";
60
+ readonly targets: readonly ["prompt-injector"];
61
+ };
62
+ readonly firstTurnWord: {
63
+ readonly kind: "string";
64
+ readonly targets: readonly ["prompt-injector"];
65
+ };
66
+ readonly buildPattern: {
67
+ readonly kind: "pattern";
68
+ readonly targets: readonly ["near-anchor"];
69
+ };
70
+ readonly complexPattern: {
71
+ readonly kind: "pattern";
72
+ readonly targets: readonly ["near-anchor", "router-guide"];
73
+ };
74
+ readonly firstTurnBuild: {
75
+ readonly kind: "string";
76
+ readonly targets: readonly ["near-anchor", "prompt-injector"];
77
+ };
78
+ readonly firstTurnInspect: {
79
+ readonly kind: "string";
80
+ readonly targets: readonly ["near-anchor", "prompt-injector"];
81
+ };
82
+ readonly firstTurnDeep: {
83
+ readonly kind: "string";
84
+ readonly targets: readonly ["near-anchor", "prompt-injector"];
85
+ };
86
+ readonly guideWeak: {
87
+ readonly kind: "string";
88
+ readonly targets: readonly ["router-guide"];
89
+ };
90
+ readonly guideDeep: {
91
+ readonly kind: "string";
92
+ readonly targets: readonly ["router-guide"];
93
+ };
94
+ };
95
+ type LegacyPromptParamKey = keyof typeof LEGACY_PROMPT_PARAM_DEFINITIONS;
96
+ type LegacyPromptParams = { [K in LegacyPromptParamKey]?: typeof LEGACY_PROMPT_PARAM_DEFINITIONS[K]['kind'] extends 'boolean' ? boolean : string; };
97
+ //#endregion
98
+ //#region src/shared/engine-params.d.ts
99
+ interface EngineParams {
100
+ /** 主会话请求路由 provider;与模型名同时非空时生效。 */
101
+ modelProvider?: string;
102
+ /** 模型名;与 provider 同时非空时生效。 */
103
+ modelName?: string;
104
+ /** 本地子代理请求路由 provider;不改写普通官方委派的创建参数。 */
105
+ subagentModelProvider?: string;
106
+ /** 子代理固定模型名。 */
107
+ subagentModelName?: string;
108
+ /** 主对话思维程度(agent-request patch reasoningEffort;''=不设置,官方档位 off/low/high/max)。 */
109
+ modelReasoningEffort?: string;
110
+ /** 主对话采样温度(agent-request patch temperature;''=不设置)。 */
111
+ modelTemperature?: string;
112
+ /** 主对话输出上限(agent-request patch maxTokens;''=不设置)。 */
113
+ modelMaxTokens?: string;
114
+ /** 子代理思维程度(agent-request patch,audience=subagent;''=不设置)。 */
115
+ subagentReasoningEffort?: string;
116
+ /** 子代理采样温度(agent-request patch,audience=subagent;''=不设置)。 */
117
+ subagentTemperature?: string;
118
+ /** 子代理输出上限(agent-request patch,audience=subagent;''=不设置)。 */
119
+ subagentMaxTokens?: string;
120
+ /** 已启用子代理工具策略的递归深度上限;普通官方委派由宿主管理。 */
121
+ maxDepth?: number | 'provider-managed' | string;
122
+ /** 晋升后 agent-instructions 全文 → 一次性 hint。 */
123
+ instructionHint?: boolean;
124
+ /** tool-git-bash 行的能力开关(B2 T3 补;此前该行只能靠「在不在组合里」决定启停)。 */
125
+ toolGitBashEnabled?: boolean;
126
+ /** 自定义模型工具在执行前需用户批准的执行器种类。 */
127
+ customToolRequireApproval?: string[] | string;
128
+ }
129
+ type EngineParamKey = keyof EngineParams;
130
+ /**
131
+ * writeModule 实际透传进运行时 params 的引擎参数子集。
132
+ * RuntimeOptions(装配态)与 WriteModuleOptions(写入态)都从这里派生,
133
+ * 防止「加参数只改一处、模块写者忘透传」的静默漂移(如 stageAdvanceDescription 历史事故)。
134
+ */
135
+ type ModuleWriterParams = Partial<EngineParams & LegacyPromptParams>;
136
+ /**
137
+ * 数值型引擎参数保存前校验(与 write-preset.modelRequestConfigs 消费规则同源)。
138
+ * 保存层响亮失败(400 逐字段错误),渲染层保持宽容(never-brick):
139
+ * - 布尔键:必须是 boolean;
140
+ * - 数值键(temperature / maxTokens / 字符数):'' = 合法(删键回落默认);
141
+ * 非空必须可解析为数字并满足各自约束(有限数 / 正整数);
142
+ * - 字符串键:必须是 string('' = 删键回落默认);
143
+ * - 列表键(执行器种类等):必须是 string 或 string[];
144
+ * - maxDepth:'' / 'provider-managed' / 非负安全整数及其数字字符串。
145
+ * 未知键(旧内容别名等不兼容键)在保存期响亮失败,不做运行时自动兼容。
146
+ * 注意:内容占位变量(variables)的空字符串是合理设计(世界书动态引用),
147
+ * 本函数只校验引擎行为参数,绝不碰 variables 通道。
148
+ */
149
+ interface EngineParamValueError {
150
+ key: string;
151
+ message: string;
152
+ }
153
+ declare const ENGINE_PARAM_KEYS: EngineParamKey[];
154
+ /** writeModule 实际透传键:全部引擎参数可直接进入 writer。 */
155
+ declare const WRITER_PARAM_KEYS: (keyof EngineParams | "firstTurnAnchor" | "firstTurnText" | "firstTurnCustom" | "guideText" | "guideCustom" | "guideEnabled" | "injectPrompt" | "firstTurnWord" | "buildPattern" | "complexPattern" | "firstTurnBuild" | "firstTurnInspect" | "firstTurnDeep" | "guideWeak" | "guideDeep")[];
156
+ /**
157
+ * 校验参数键值(键集合合法性由调用方白名单先行校验,本函数同样拒绝未知键)。
158
+ * 返回逐字段错误;空数组 = 通过。类型收窄:布尔/字符串/数值/列表各按 canonical
159
+ * 规则校验;'' 是合法删键值,其余非法类型与越界值在保存层响亮失败。
160
+ */
161
+ declare function validateEngineParamValues(overrides: Record<string, unknown>): EngineParamValueError[];
162
+ //#endregion
8
163
  //#region src/host/prompt-configs.d.ts
9
164
  /**
10
165
  * `PromptConfigSpec` 各枚举字段的**运行期值清单**。
@@ -77,12 +232,6 @@ interface PromptConfigSpec {
77
232
  declare function assertSafeConfigId(id: string): void;
78
233
  /** 生成文件名统一 4 位零填充前缀(0000-…),超过 10 条后字典序仍稳定。 */
79
234
  declare function configFileName(index: number, id: string): string;
80
- interface PromptConfigFile {
81
- /** 模块文件夹内文件名(数字前缀决定引擎执行顺序)。 */
82
- file: string;
83
- /** yml 文件内容。 */
84
- content: string;
85
- }
86
235
  /**
87
236
  * 条件判定的键集合:与 `engine/anchor-match.mjs` 的匹配语义同构。
88
237
  * 键按字面文本匹配(正则元字符会被转义);要写正则须用 `/pattern/flags` 形态或 `useRegex: true`。
@@ -96,185 +245,39 @@ interface PromptConfigMatch {
96
245
  useRegex?: boolean;
97
246
  }
98
247
  //#endregion
99
- //#region src/shared/engine-params.d.ts
100
- /**
101
- * 引擎行为参数契约(单一来源)。
102
- *
103
- * 这是「可配置引擎参数」的类型唯一权威:所有消费引擎参数的接口(RuntimeOptions /
104
- * WritePresetOptions)从这里派生,不再各自手写一遍字段
105
- * (此前多处重复声明导致同字段签名漂移,如 maxDepth / modelTemperature)。
106
- *
107
- * 分层约定:
108
- * - 本文件 = 引擎参数「契约层」(类型):参数桥/模板/UI 可配置的键与类型;
109
- * - ENGINE_PARAM_DEFINITIONS 统一键、校验、卡片、默认草稿与组合映射;
110
- * Record<keyof EngineParams, ...> 强制完整覆盖,ENGINE_PARAM_KEYS 与 PARAM_KEYS 从其派生;
111
- * - layerSettings ↔ 运行时平铺键:loadPresetSpec 展平 / savePresetParams 按层写入。
112
- *
113
- * 全部字段可选:缺省 = 模板 preset.yml layerSettings / 引擎默认,符合「一切皆可自定义」。
114
- */
115
- interface EngineParams {
116
- /** 首轮近距离锚定:首条真实用户消息后追加一次性首句锚点。 */
117
- firstTurnAnchor?: boolean;
118
- /** 自定义锚点文本;firstTurnCustom=true 时固定使用。 */
119
- firstTurnText?: string;
120
- /** 自定义锚点开关:true 固定使用 firstTurnText;false 按任务自动选择。 */
121
- firstTurnCustom?: boolean;
122
- /** 自定义每轮引导文本;guideCustom=true 时固定使用。 */
123
- guideText?: string;
124
- /** 自定义每轮引导开关:true 固定使用 guideText;false 按任务自动选择。 */
125
- guideCustom?: boolean;
126
- /** 每轮引导独立开关;缺省关闭。 */
127
- guideEnabled?: boolean;
128
- /** 锚定确认后注入 preset.md;关闭时仍保留工具引导,但不生成 prompt-injector 提示词配置内容。 */
129
- injectPrompt?: boolean;
130
- /** 模型路由 provider;与模型名同时非空时给 subagent/subagent_fork 行加 agentOptions(主对话直派子代理与委派子代理通用)。 */
131
- modelProvider?: string;
132
- /** 模型名;与 provider 同时非空时生效。 */
133
- modelName?: string;
134
- /** 子代理固定模型路由 provider(agentOptions 注入 tool-subagent)。 */
135
- subagentModelProvider?: string;
136
- /** 子代理固定模型名。 */
137
- subagentModelName?: string;
138
- /** 主对话思维程度(agent-request patch reasoningEffort;''=不设置,官方档位 off/low/high/max)。 */
139
- modelReasoningEffort?: string;
140
- /** 主对话采样温度(agent-request patch temperature;''=不设置)。 */
141
- modelTemperature?: string;
142
- /** 主对话输出上限(agent-request patch maxTokens;''=不设置)。 */
143
- modelMaxTokens?: string;
144
- /** 子代理思维程度(agent-request patch,audience=subagent;''=不设置)。 */
145
- subagentReasoningEffort?: string;
146
- /** 子代理采样温度(agent-request patch,audience=subagent;''=不设置)。 */
147
- subagentTemperature?: string;
148
- /** 子代理输出上限(agent-request patch,audience=subagent;''=不设置)。 */
149
- subagentMaxTokens?: string;
150
- /** 委派递归深度上限(0 禁止委派 / provider-managed / 正整数;数字字符串同义)。 */
151
- maxDepth?: number | 'provider-managed' | string;
152
- /** custom-fallback 锚定词(prompt-injector params.firstTurnWord)。 */
153
- firstTurnWord?: string;
154
- /**
155
- * 锚定/引导内容键:writePreset 把它们映射进 near-anchor / router-guide 的
156
- * promptConfig params(由对应策略消费)。此前只在 PARAM_KEYS 旁路白名单里,
157
- * 保存链接受键名却被值校验拒绝,形成「白名单通过、写盘前报未知键」的断层。
158
- */
159
- /** 构建任务正则(锚定三档分类的 build 档;编译规则与 engine/classify-task.mjs 同源,flags=i)。 */
160
- buildPattern?: string;
161
- /** 复杂任务正则(锚定 complex 档与引导深度判定共用)。 */
162
- complexPattern?: string;
163
- /** 构建档锚句。 */
164
- firstTurnBuild?: string;
165
- /** 排查档锚句。 */
166
- firstTurnInspect?: string;
167
- /** 深度档锚句。 */
168
- firstTurnDeep?: string;
169
- /** 引导-简短档正文。 */
170
- guideWeak?: string;
171
- /** 引导-深度档正文。 */
172
- guideDeep?: string;
173
- /** 晋升后 agent-instructions 全文 → 一次性 hint。 */
174
- instructionHint?: boolean;
175
- /** str-replace-editor 最大输出字符数(参数桥默认官方值 16000;由引擎能力卡编辑)。 */
176
- strReplaceEditorMaxOutputChars?: number;
177
- /** tool-git-bash 行的能力开关(B2 T3 补;此前该行只能靠「在不在组合里」决定启停)。 */
178
- toolGitBashEnabled?: boolean;
179
- /** 自定义模型工具在执行前需用户批准的执行器种类。 */
180
- customToolRequireApproval?: string[] | string;
181
- }
182
- type EngineParamKey = keyof EngineParams;
183
- /**
184
- * writePreset.runtimeOf 实际透传进运行时 params 的引擎参数子集。
185
- * RuntimeOptions(装配态)与 WritePresetOptions(写入态)都从这里派生,
186
- * 防止「加参数只改一处、writePreset 忘透传」的静默漂移(如 stageAdvanceDescription 历史事故)。
187
- */
188
- type PresetWriterParams = Partial<EngineParams>;
189
- /**
190
- * 数值型引擎参数保存前校验(与 write-preset.modelRequestConfigs 消费规则同源)。
191
- * 保存层响亮失败(400 逐字段错误),渲染层保持宽容(never-brick):
192
- * - 布尔键:必须是 boolean;
193
- * - 数值键(temperature / maxTokens / 字符数):'' = 合法(删键回落默认);
194
- * 非空必须可解析为数字并满足各自约束(有限数 / 正整数);
195
- * - 字符串键:必须是 string('' = 删键回落默认);
196
- * - 列表键(执行器种类等):必须是 string 或 string[];
197
- * - maxDepth:'' / 'provider-managed' / 非负安全整数及其数字字符串。
198
- * 未知键(旧内容别名等不兼容键)在保存期响亮失败,不做运行时自动兼容。
199
- * 注意:内容占位变量(variables)的空字符串是合理设计(世界书动态引用),
200
- * 本函数只校验引擎行为参数,绝不碰 variables 通道。
201
- */
202
- interface EngineParamValueError {
203
- key: string;
204
- message: string;
205
- }
206
- declare const ENGINE_PARAM_KEYS: EngineParamKey[];
207
- /** writePreset.runtimeOf 实际透传键:全部引擎参数可直接进入 writer。 */
208
- declare const WRITER_PARAM_KEYS: (keyof EngineParams)[];
209
- /**
210
- * 校验参数键值(键集合合法性由调用方白名单先行校验,本函数同样拒绝未知键)。
211
- * 返回逐字段错误;空数组 = 通过。类型收窄:布尔/字符串/数值/列表各按 canonical
212
- * 规则校验;'' 是合法删键值,其余非法类型与越界值在保存层响亮失败。
213
- */
214
- declare function validateEngineParamValues(overrides: Record<string, unknown>): EngineParamValueError[];
215
- //#endregion
216
- //#region src/shared/param-keys.d.ts
217
- declare const PARAM_KEYS: ReadonlySet<string>;
218
- //#endregion
219
- //#region src/config.d.ts
220
- interface Config {
221
- /** 是否生成注入预设(默认 true)。 */
222
- writePreset: Volatile<boolean>;
223
- /** 预设模板名(默认 pt-standard:与宿主内置 standard 同名的用户目录会被遮蔽)。 */
224
- presetTemplate: Volatile<string>;
225
- /** 生成 preset 的显示顺序。 */
226
- presetOrder: Volatile<number>;
227
- /** preset.md 缺失或不可读时使用的文本。 */
228
- fallbackText: Volatile<string>;
229
- }
230
- declare const Config: z<Schemastery.ObjectS<NoInfer<{
231
- writePreset: z<boolean, boolean, "volatile-defined">;
232
- presetTemplate: z<string, string, "volatile-defined">;
233
- presetOrder: z<number, number, "volatile-defined">;
234
- fallbackText: z<string, string, "volatile-defined">;
235
- }>>, Schemastery.ObjectT<NoInfer<{
236
- writePreset: z<boolean, boolean, "volatile-defined">;
237
- presetTemplate: z<string, string, "volatile-defined">;
238
- presetOrder: z<number, number, "volatile-defined">;
239
- fallbackText: z<string, string, "volatile-defined">;
240
- }>>, "plain">;
241
- interface PromptSettings {
242
- /** 运行时检测:是否检测到任何模型服务商(不写入 settings)。 */
243
- modelsAvailable: boolean;
244
- /** 生成 preset 的显示顺序。 */
245
- presetOrder: number;
246
- /** preset.md 缺失或不可读时使用的文本。 */
247
- fallbackText: string;
248
- writePreset: boolean;
249
- presetTemplate: string;
250
- }
251
- declare const PromptSettingsSchema: z<PromptSettings>;
252
- //#endregion
253
248
  //#region src/host/write-preset.d.ts
254
- /**
255
- * 把任意单一参数预设模板物化到生成目录(writePreset)的写入态选项。
256
- * 引擎参数契约来自 shared/engine-params.ts(PresetWriterParams:runtimeOf 透传子集),
257
- * 此处只保留 writePreset 专属字段——加引擎参数只需改一处契约,漏透传变成编译错误。
258
- */
259
- interface WritePresetOptions extends PresetWriterParams {
260
- /** AGENTS.md 内容资产(写生成目录 agents.md):常驻层写盘的唯一来源,不再注入提示词。 */
249
+ interface WriteModuleOptions {
250
+ modulesRoot: string;
251
+ moduleId: string;
252
+ targetModuleId?: string;
253
+ sourceDir?: string;
254
+ /** 返回独立暂存根下的合法模块目录;安装方负责交换与清理暂存根。 */
255
+ stageOnly?: boolean;
261
256
  agentsInstructionText?: string;
262
- presetDir: string;
263
- presetOrder: number;
264
- /** settings 层用户自定义提示词配置(优先级最高)。 */
265
- promptConfigs: PromptConfigSpec[];
266
- /** 当前预设目录名;默认 pt-standard。 */
257
+ warn?: (message: string) => void;
258
+ }
259
+ /** 旧入口只做名称适配;行为规则和参数必须已写入完整定义。 */
260
+ interface WritePresetOptions extends ModuleWriterParams {
261
+ moduleDir: string;
267
262
  presetTemplate?: string;
268
- /** 输出目录/预设 id 覆盖;缺省 = presetTemplate 同名输出。 */
269
263
  outputId?: string;
270
- /** 隔离的定义/资源来源;与最终 outputId 分离,不回退同名已安装预设。 */
271
264
  sourceDir?: string;
272
- /** 只生成并返回暂存目录;调用方负责安装或清理,不更新共享引擎及目标目录。 */
273
265
  materializeOnly?: boolean;
274
- /** 目录加载失败等非致命告警回调。 */
266
+ agentsInstructionText?: string;
267
+ presetOrder?: number;
268
+ promptConfigs?: PromptConfigSpec[];
275
269
  warn?: (message: string) => void;
276
270
  }
277
- /** 把任意单一参数预设模板物化到生成目录;全部失败 fail loud。 */
271
+ /** 按模块身份原地恢复切片;用户资产、正文与完整定义均不重写。 */
272
+ declare function ensureModuleReady(id: string, options: {
273
+ modulesRoot?: string;
274
+ moduleDir?: string;
275
+ presetOrder?: number;
276
+ warn?: (message: string) => void;
277
+ }): string;
278
+ /** 已有同一模块只恢复切片;导入/复制先完整生成合法身份候选,再交换目标。 */
279
+ declare function writeModule(prompt: string, options: WriteModuleOptions): string;
280
+ /** @deprecated 使用 writeModule;旧字段仅在此边界适配。 */
278
281
  declare function writePreset(prompt: string, options: WritePresetOptions): string;
279
282
  //#endregion
280
283
  //#region src/host/agents-cards.d.ts
@@ -344,16 +347,15 @@ declare function writeAgentsFileChecked(options: {
344
347
  }): Promise<AgentsFileWriteOutcome>;
345
348
  //#endregion
346
349
  //#region src/runtime/pre-step-coordinator.d.ts
347
- /** 协调服务名:引擎行通过 ctx.get 解析本服务决定走管理路径还是独立路径。 */
348
350
  declare const PRE_STEP_COORDINATOR_SERVICE = "promptToolPreStep";
349
- /** 服务契约版本:引擎与协调器不同步时按「不认识就不接管」处理。 */
350
351
  declare const PRE_STEP_COORDINATOR_VERSION = 1;
351
- /** 批执行算法消费的提示词配置(与 engine/schema.mjs 产出的形状同源)。 */
352
352
  interface PreStepPromptConfig {
353
353
  id: string;
354
354
  layer: string;
355
355
  enabled?: boolean;
356
356
  order: number;
357
+ sequence?: number;
358
+ sourceModuleId?: string;
357
359
  position: string;
358
360
  promotion: string;
359
361
  audience: string | null;
@@ -372,58 +374,23 @@ interface PreStepPromptConfig {
372
374
  };
373
375
  resolve: (input: Record<string, unknown>) => unknown;
374
376
  }
375
- /** 一个预设 mount 注册进来的来源:提示词配置 + 装配事实(晋升/去重由协调器统一持有)。 */
376
377
  interface PreStepSource {
377
378
  configs: readonly PreStepPromptConfig[];
379
+ /** 已编译的本地点规则动作;执行与配置叶子共享同一批次资格帧。 */
380
+ ruleActions?: readonly unknown[];
378
381
  officialInstructions?: boolean;
379
382
  }
380
- /**
381
- * 文件来源每次 pre-step 编译出的最小候选。
382
- * `available: false` 表示读取失败/超限/空内容:只在「该文件曾经注入过」时转成
383
- * 一次性失效通知,不冒充空正文。
384
- */
385
- interface PreStepFileContribution {
386
- fileId: string;
387
- displayPath: string;
388
- revision: string;
389
- text: string;
390
- available: boolean;
391
- reason?: string;
392
- order: number;
393
- position: string;
394
- promotion: string;
395
- audience: string | null;
396
- modelScope: string;
397
- }
398
383
  interface PreStepCoordinatorOptions {
399
- /** 每次 pre-step 现读指令文件;缺省实现走 host 探测 + 独立策略。测试可注入。 */
400
- collectFiles?: (agent: unknown, session: unknown) => PreStepFileContribution[];
401
- /** 策略文件位置覆盖(测试隔离用)。 */
402
384
  policyFile?: string;
403
- /** 用户级指令文件根(DSH_HOME)覆盖(测试隔离用)。 */
404
385
  home?: string;
405
386
  }
406
387
  interface PreStepCoordinatorService {
407
388
  readonly version: number;
408
- /**
409
- * 把 preset mount 的 pre-step 配置登记进协调器。
410
- * 同一 scope 内同一个 `sourceId` 再次登记时后来者接管:先撤销旧登记再插入新登记。
411
- * 宿主重挂同一个 preset(或其引擎行的旧 fiber 尚未释放)时这是正常路径,不是配置错误,
412
- * 因此不抛错——抛错会让整行未激活,进而让 preset 挂载整体失败(无法切换预设)。
413
- * @param sourceCtx 注册 ctx:同时决定来源作用域与释放时机(挂在这个 fiber 上)。
414
- * @param sourceId 来源 id(同一 scope 内唯一:同名登记以最新一次为准)。
415
- * @returns 幂等的撤销函数;登记已被后来者顶替时调用它是空操作。
416
- */
417
389
  registerPreset(sourceCtx: Context, sourceId: string, source: PreStepSource): () => void;
418
- /** 该会话最近一次 pre-step 观察到的负责人事实;未知返回 undefined。 */
419
390
  officialOwnerOf(sessionId: string): boolean | undefined;
391
+ /** hint 转换前也调用同一过滤器,保证监听器重挂顺序不让已关闭正文变成 hint。 */
392
+ filterInstructions(agent: unknown, messages: unknown[]): unknown[];
420
393
  }
421
- /**
422
- * 安装协调器:发布 `promptToolPreStep` 服务并注册唯一的 pre-step 监听器。
423
- * 普通监听器留在 prepend 门控内侧;来源监听器只登记后交出执行权。
424
- * 即使服务迟到或重挂,下游的 pre-step 过滤(声明式触发器的 `pre-step-filter` 动作)
425
- * 仍能在本监听器交出执行权之后过滤最终消息批。
426
- */
427
394
  declare function installPreStepCoordinator(ctx: Context, options?: PreStepCoordinatorOptions): PreStepCoordinatorService;
428
395
  //#endregion
429
396
  //#region src/runtime/models.d.ts
@@ -544,28 +511,42 @@ interface SkillsBridgeState {
544
511
  patchSkillFolders: (folders: string[]) => SkillsStateRead | Promise<SkillsStateRead>;
545
512
  }
546
513
  /**
547
- * 两类卡合并:预设卡原样保留,文件卡换成本次工作区的文件快照。
514
+ * 两类卡合并:模块卡原样保留,文件卡换成本次工作区的文件快照。
548
515
  * 生成目录里属于其他工作区的文件卡不再展示(写盘白名单也不含它们);
549
516
  * 当前工作区里没有对应生成卡的文件按默认文件卡补齐。
550
517
  */
551
- declare function mergeInstructionCards(presetCards: readonly unknown[], files: readonly InstructionFileSnapshot[]): unknown[];
518
+ declare function mergeInstructionCards(moduleCards: readonly unknown[], files: readonly InstructionFileSnapshot[]): unknown[];
552
519
  /** 自建 loopback settings bridge:替代 registerConfigurableProviders,避免模型设置区出现插件条目。 */
553
- declare function registerSettingsBridge(ctx: Context, ns: string, getModelsState: () => ModelDetection, getSkillsState: () => SkillsBridgeState, getEngineStrategyDir: () => string, afterSkillsChange?: () => void,
554
- /** 生成目录(presetDir):读取实际生效的提示词配置(引擎加载源)。 */
555
- getPresetConfigsDir?: () => string,
556
- /** 内容导入完成回调:批量 scope 只触发一次重建(更新运行时文本并重建预设)。 */
557
- afterPresetImport?: (scopes: Array<'preset' | 'agents'>) => void,
558
- /** 参数覆盖写入后重建当前预设。 */
559
- afterOverridesChange?: () => void | Promise<void>,
560
- /** 预设已完整安装后的刷新回调;失败只返回 refreshWarning,不再物化或撤销安装。 */
561
- afterPresetPackageImport?: (id: string) => void | Promise<void>,
562
- /** 能力/recipe 原子创建后重建回调;抛错时调用方恢复 preset.yml。 */
563
- afterCapabilityChange?: () => void,
564
- /** 新建、复制或删除预设后刷新官方注册。 */
565
- afterPresetListChange?: () => void | Promise<void>): {
520
+ declare function registerSettingsBridge(ctx: Context, ns: string, getModelsState: () => ModelDetection, getSkillsState: () => SkillsBridgeState, _getEngineStrategyDir: () => string, afterSkillsChange?: () => void,
521
+ /**
522
+ * 生成目录(模块目录):读取/写入哪一份提示词配置。
523
+ *
524
+ * 参数是**请求声明的编辑目标**(`x-module-id` 头解析而来):给了就定位那个模块,
525
+ * 没给则由 host 回退启用表首项。编辑器因此不必依赖某个全局单选——配置卡自己的
526
+ * 模块身份决定写哪里。
527
+ */
528
+ getModuleDirectory?: (moduleId?: string) => string,
529
+ /** 内容导入完成回调:批量 scope 只触发一次重建(更新运行时文本并重建模块)。 */
530
+ afterModuleContentImport?: (scopes: Array<'preset' | 'agents'>, moduleId?: string) => void | Promise<void>,
531
+ /** 参数写入后重建指定模块;省略身份表示启用表变化,刷新全部运行实例。 */
532
+ afterOverridesChange?: (moduleId?: string) => void | Promise<void>,
533
+ /** 模块已完整安装后的刷新回调;失败返回未生效诊断,不再物化或撤销安装。 */
534
+ afterModulePackageImport?: (id: string) => void | Promise<void>,
535
+ /** 能力/recipe 提交后刷新回调;失败保留已提交定义并明确报告。 */
536
+ afterCapabilityChange?: (moduleId?: string) => void | Promise<void>,
537
+ /** 新建、复制或删除模块后重建当前模块。 */
538
+ afterModuleListChange?: (id: string) => void | Promise<void>): {
566
539
  invalidateDescriptor: () => void;
567
540
  };
568
541
  //#endregion
542
+ //#region src/host/module-layer-settings.d.ts
543
+ declare class ModuleLayerSettingsError extends Error {
544
+ readonly code = "module-layer-settings-invalid";
545
+ constructor(message: string);
546
+ }
547
+ /** 仅消费当前 layerSettings;其余段作为未知字段留存,不投影为运行时参数。 */
548
+ declare function readModuleLayerSettings(source: unknown): Record<string, unknown>;
549
+ //#endregion
569
550
  //#region src/host/worldbook.d.ts
570
551
  type WorldBookEntry = Record<string, unknown>;
571
552
  /** buildWorldBookEntry 输入(两通道共用:ST 导入转换与模型 world_book_upsert 工具)。 */
@@ -593,25 +574,20 @@ interface WorldBookEntryInput {
593
574
  * 与模型工具(world_book_upsert)共用,不再各自手写条目结构。
594
575
  */
595
576
  declare function buildWorldBookEntry(input: WorldBookEntryInput): WorldBookEntry;
596
- /** 当前预设全部世界书条目(保持文件顺序)。 */
597
- declare function listWorldBookEntries(presetDir: string): WorldBookEntry[];
577
+ /** 当前模块全部世界书条目(保持文件顺序)。 */
578
+ declare function listWorldBookEntries(moduleDir: string): WorldBookEntry[];
598
579
  /** 新增或更新一条世界书条目(按 id 定位;不存在则追加)。返回写入后条目总数。 */
599
- declare function upsertWorldBookEntry(presetDir: string, entry: WorldBookEntry): number;
580
+ declare function upsertWorldBookEntry(moduleDir: string, entry: WorldBookEntry): number;
600
581
  /** 删除一条世界书条目;不存在抛错。返回删除后条目总数。 */
601
- declare function deleteWorldBookEntry(presetDir: string, id: string): number;
582
+ declare function deleteWorldBookEntry(moduleDir: string, id: string): number;
602
583
  //#endregion
603
584
  //#region src/web-surface.d.ts
604
585
  /** 从 loader 根 Include 的 baseUrl 推导 profile 目录。 */
605
586
  declare function resolveProfileDir(ctx: Context): string | undefined;
606
- /**
607
- * 每次启动:
608
- * 1. 只处理当前 profile:缺 webServer 时补 web-app 并提示重启;
609
- * 2. 不修改同级 profile,不主动退出进程。
610
- */
587
+ /** 只读诊断;安装与 profile 变更交给官方 plugin_manager。 */
611
588
  declare function ensureWebSurface(ctx: Context, warn: (message: string) => void): void;
612
589
  /**
613
- * 把首次启动自愈挂到插件生命周期上:延迟到本轮装配结束后执行,
614
- * 插件卸载会取消计时器,卸载后不再异步补写 profile。
590
+ * 延迟到本轮装配结束后诊断;插件卸载取消尚未执行的任务。
615
591
  */
616
592
  declare function scheduleWebSurfaceRepair(ctx: Context, warn: (message: string) => void): void;
617
593
  //#endregion
@@ -635,96 +611,29 @@ type SkillsImportResult = {
635
611
  /** 浏览器上传:base64 文件列表;单技能包(无顶层目录)按 frontmatter.name 归类。 */
636
612
  declare function importSkillsPackage(root: string, files: SkillsImportFile[], overwrite?: readonly string[]): SkillsImportResult;
637
613
  //#endregion
638
- //#region src/runtime/configs-validate.d.ts
639
- interface PromptConfigValidationError {
640
- /** 数组下标;结构层整组错误为 -1。 */
641
- index: number;
642
- /** 该条配置的 id(缺失或非字符串时为空串)。 */
614
+ //#region src/host/module-tool-target.d.ts
615
+ interface ModuleToolTarget {
643
616
  id: string;
644
- /** 引擎或结构层错误消息(保留 configs[i] 前缀)。 */
645
- message: string;
617
+ root: string;
618
+ dir: string;
646
619
  }
647
- interface PromptConfigValidationResult {
648
- valid: boolean;
649
- errors: PromptConfigValidationError[];
650
- /** valid=true 时回显归一化前的输入数组(调用方预览用)。 */
651
- configs?: PromptConfigSpec[];
652
- /** valid=true 时逐条渲染的 yml 模块预览(与生成目录同构)。 */
653
- files?: PromptConfigFile[];
620
+ interface ModuleToolHost {
621
+ target: (exec: ToolExecution) => ModuleToolTarget;
622
+ rebuild: (id: string) => Promise<void>;
654
623
  }
655
- /**
656
- * 逐条调用引擎权威校验并渲染预览文件。
657
- * 逐条(而非整组一次)校验保证一条坏配置不吞掉其余错误,且 index 可直接映射。
658
- */
659
- declare function validatePromptConfigs(value: unknown, options?: {
660
- strategyDir?: string;
661
- presetDir?: string;
662
- }): Promise<PromptConfigValidationResult>;
663
624
  //#endregion
664
625
  //#region src/runtime/character-tools.d.ts
665
- /** 工具执行所需的运行时宿主能力(index.ts 闭包提供)。 */
666
- interface CharacterToolHost {
667
- /** 预设根目录(presetDir)。 */
668
- presetRoot: () => string;
669
- /** 当前激活预设模板名。 */
670
- templateName: () => string;
671
- /** 应用/移除后重建生成目录(写 preset.yml 后使参数生效)。 */
672
- rebuild: () => void;
673
- }
674
- /** 注册角色卡库模型工具;返回 disposer,随 character-tools 预设模块生命周期清理。 */
675
- declare function registerCharacterTools(ctx: Context, host: CharacterToolHost): () => void;
626
+ declare function registerCharacterTools(ctx: Context, host: ModuleToolHost): () => void;
676
627
  //#endregion
677
628
  //#region src/runtime/world-book-tools.d.ts
678
- interface WorldBookToolHost {
679
- /** 当前激活预设目录(preset.yml 所在目录)。 */
680
- activeDir: () => string;
681
- /** 预设根目录(角色卡库 .characters/<id> 所在根)。 */
682
- presetRoot: () => string;
683
- /** 写盘后重建生成目录。 */
684
- rebuild: () => void;
685
- }
686
- /** 注册世界书条目级模型工具;返回 disposer,随 world-book-tools 预设模块生命周期清理。 */
687
- declare function registerWorldBookTools(ctx: Context, host: WorldBookToolHost): () => void;
629
+ /** 注册世界书条目级模型工具;返回 disposer,随 world-book-tools 模块生命周期清理。 */
630
+ declare function registerWorldBookTools(ctx: Context, host: ModuleToolHost): () => void;
688
631
  //#endregion
689
632
  //#region src/host/characters.d.ts
690
- /** meta 下记录「每张卡引入了哪些模块」的键;来源保留到模块不再被消费并完成回退。 */
691
- declare const CHARACTER_MODULES_KEY = "characterModules";
692
- /** 读取 preset.yml `meta.modules` 之外的模块来源记录;非法形状一律视为无记录(老卡与手改文件不报错)。 */
693
- declare function recordedCharacterModules(meta: unknown): Record<string, string[]>;
694
- /** 卡自身声明的模块(声明优先:ST 转换产物自带六件套声明,行为因此不变)。
695
- * 只丢弃非字符串与空串;模块名合法性仍由 appendPresetModules 校验(非法名 fail loud)。 */
696
- declare function declaredCharacterModules(spec: PresetSpec): string[];
697
- /** 必需模块:`prompt-config-engine` 缺失会让 promptConfigs 静默失效,因此始终补齐;
698
- * 卡内含 world-book 策略配置时另需 `world-book-tools`(与旧实现同判据)。 */
699
- declare function requiredCharacterModules(configs: readonly unknown[]): string[];
700
- /** 移除一张卡之后,某个模块是否仍被预设内容或其他卡需要(需要则不回退)。 */
701
- interface CharacterModuleContext {
702
- /** 移除本卡前缀配置之后的提示词配置。 */
703
- configs: readonly Record<string, unknown>[];
704
- /** 移除本卡声明的 params 键之后的预设参数。 */
705
- params: Record<string, unknown>;
706
- /** 预设顶层是否仍有自定义工具。 */
707
- customTools: boolean;
708
- /** 移除本卡之后仍标记为已导入的角色卡 id。 */
709
- importedCharacters: readonly string[];
710
- }
711
- /** 模块的消费者判据。未知模块保守保留:宁可留一个无消费者的模块,也不误删用户或引擎要用的装配。 */
712
- declare function characterModuleStillNeeded(module: string, context: CharacterModuleContext): boolean;
713
- /** 角色卡记忆变更后同步已导入预设的 chara-<id>-memory 注入条目
714
- * (world_book note 写入卡记忆后调用;未导入当前预设的卡返回 synced=false)。 */
715
- declare function syncImportedCharacterMemory(presetRoot: string, templateName: string, cardId: string): {
716
- ok: true;
717
- synced: boolean;
718
- } | {
719
- ok: false;
720
- message: string;
721
- };
722
- /** 追加角色卡本地记忆(.characters/<id>/memory.md,跟随角色卡跨预设)。 */
723
- declare function appendCharacterMemory(presetRoot: string, cardId: string, note: string): void;
724
- /** 追加记忆文件(时间戳列表格式;header 标注文件类型)。世界书工具与角色卡共用。 */
725
- declare function appendMemoryFile(file: string, note: string, header?: string): void;
726
- /** 读角色卡本地记忆文本(无记忆返回空串)。 */
727
- declare function readCharacterMemory(presetRoot: string, cardId: string): string;
633
+ /** 模块记忆与条目同归当前模块;来源和 id 前缀不改变位置。 */
634
+ declare function appendModuleMemory(moduleDir: string, note: string): void;
635
+ /** 每次显式读取最新字节;缺失为空,链接与读取失败原样报错。 */
636
+ declare function readModuleMemory(moduleDir: string): string;
728
637
  type CharacterImportOptions = StConversionOptions & ImportChoices;
729
638
  type CharacterImportResult = {
730
639
  ok: true;
@@ -735,30 +644,11 @@ type CharacterImportResult = {
735
644
  ok: false;
736
645
  message: string;
737
646
  };
738
- /** 角色卡入库:PNG 原图(可选)+ 角色卡 JSON → 转换参数存 converted.yml。 */
739
- declare function importCharacterCard(presetRoot: string, files: AssetFile[], options?: CharacterImportOptions): CharacterImportResult;
740
- /** 原始文件流导入:识别 PNG 魔数后在 host 侧提取角色卡,避免客户端 base64 膨胀 JSON。 */
741
- declare function importCharacterCardFile(presetRoot: string, filePath: string, fileName?: string, options?: CharacterImportOptions): CharacterImportResult;
742
- interface CharacterCardListItem {
743
- id: string;
744
- name: string;
745
- description?: string;
746
- hasAvatar: boolean;
747
- /** 是否已导入当前预设(激活预设 meta.importedCharacters 含该 id)。 */
748
- imported: boolean;
749
- }
750
- /** 角色卡库清单 + 各卡在当前预设的导入状态。 */
751
- declare function listCharacterCards(presetRoot: string, activeTemplate: string | undefined): CharacterCardListItem[];
752
- /** 删除角色卡库条目。 */
753
- declare function deleteCharacterCard(presetRoot: string, id: string): {
754
- ok: true;
755
- } | {
756
- ok: false;
757
- message: string;
758
- };
759
- /** 角色卡参数导入当前预设:promptConfigs 合并(chara-<id>- 前缀防冲突)、
760
- * params 合并(角色卡覆盖同键)、meta.importedCharacters 记录来源。 */
761
- declare function applyCharacterToPreset(presetRoot: string, templateName: string, cardId: string): {
647
+ /** 复用普通模块候选校验、版本保护和目录交换,不生成角色专属存储。 */
648
+ declare function importCharacterCard(root: string, files: AssetFile[], options?: CharacterImportOptions): Promise<CharacterImportResult>;
649
+ declare function importCharacterCardFile(root: string, filePath: string, fileName?: string, options?: CharacterImportOptions): Promise<CharacterImportResult>;
650
+ /** 通用并入保留既有带前缀往返行为,不复制本地记忆。 */
651
+ declare function mergeModuleIntoModule(root: string, targetId: string, sourceId: string): {
762
652
  ok: true;
763
653
  count: number;
764
654
  personaOpened?: boolean;
@@ -766,9 +656,8 @@ declare function applyCharacterToPreset(presetRoot: string, templateName: string
766
656
  ok: false;
767
657
  message: string;
768
658
  };
769
- /** 从当前预设移除角色卡参数:删前缀 promptConfigs、删该卡声明的 params 键、
770
- * meta.importedCharacters 除名。 */
771
- declare function removeCharacterFromPreset(presetRoot: string, templateName: string, cardId: string): {
659
+ /** 撤销并入内容;旧 chara 前缀可撤销,能力归属只写一份登记。 */
660
+ declare function removeMergedModule(root: string, targetId: string, sourceId: string): {
772
661
  ok: true;
773
662
  count: number;
774
663
  } | {
@@ -783,7 +672,7 @@ interface PromptConfigTemplate {
783
672
  /** 模板原文(编辑器源码模式可直接展示)。 */
784
673
  content: string;
785
674
  /** 解析后的单条提示词配置。 */
786
- spec: PromptConfigSpec;
675
+ spec: RuleDefinition;
787
676
  }
788
677
  /** 自定义工具模板(templates/tools/*.yml;tool-config-engine 定义形态)。 */
789
678
  interface ToolTemplate {
@@ -802,15 +691,15 @@ type TuiSource = PromptSettings & {
802
691
  skillCatalog: SkillCatalogEntry[];
803
692
  activeSkillsDirs: string[];
804
693
  };
805
- /** 参数保存回调:写激活预设 preset.yml;失败必须抛给命令层渲染为错误。 */
806
- type SavePresetParam = (key: string, value: unknown) => void | Promise<void>;
694
+ /** 参数保存回调:写激活模块 module.yml;失败必须抛给命令层渲染为错误。 */
695
+ type SaveModuleParam = (key: string, value: unknown) => void | Promise<void>;
807
696
  /** 技能启停回调:切换受管实体的根链接。 */
808
697
  type ToggleSkillState = (folder: string, enabled: boolean) => {
809
698
  ok: boolean;
810
699
  message?: string;
811
700
  };
812
701
  /** 通过 DSH 命令注册表暴露 /prompt-tool,Web 与 dsh-tui 都能执行。 */
813
- declare function registerTuiCommand(ctx: Context, ns: 'prompt-tool', getSource: () => TuiSource, getModelsState: () => ModelDetection, getModelCatalog: () => Promise<Record<string, string[]>>, getPresetConfigsDir?: () => string, savePresetParam?: SavePresetParam, toggleSkillState?: ToggleSkillState): void;
702
+ declare function registerTuiCommand(ctx: Context, ns: 'prompt-tool', getSource: () => TuiSource, getModelsState: () => ModelDetection, getModelCatalog: () => Promise<Record<string, string[]>>, getModuleDirectory?: () => string, saveModuleParam?: SaveModuleParam, toggleSkillState?: ToggleSkillState, refreshModule?: (id: string) => Promise<void>): void;
814
703
  //#endregion
815
704
  //#region src/host/skills-refresh.d.ts
816
705
  interface SkillsReloaderDeps {
@@ -873,6 +762,16 @@ declare function scanRoot(root: ScanRoot): ScannedSkill[];
873
762
  declare function scanRoots(roots: readonly ScanRoot[]): ScannedSkill[];
874
763
  declare function catalogFromScan(skills: readonly ScannedSkill[]): SkillCatalogEntry[];
875
764
  //#endregion
765
+ //#region src/host/module-install.d.ts
766
+ declare function assertModuleId(id: unknown): asserts id is string;
767
+ /** ENOENT 才表示不存在;权限、占用与读取失败继续传播。 */
768
+ declare function modulePathExists(path: string): boolean;
769
+ declare function canonicalModulesRoot(root: string, allowMissing?: boolean): string;
770
+ /** 根与目标先解析真实路径,拒绝链接目录及定义身份不一致。 */
771
+ declare function assertModuleDirectory(root: string, id: string, allowMissing?: boolean): string;
772
+ /** 复制和物化只接受自有普通文件;不跟随任意层级链接读取根外数据。 */
773
+ declare function assertModuleTree(dir: string): void;
774
+ //#endregion
876
775
  //#region src/runtime/skills-parse.d.ts
877
776
  interface SkillFrontmatter {
878
777
  name?: string;
@@ -891,12 +790,17 @@ declare function parseFrontmatter(text: string): {
891
790
  };
892
791
  //#endregion
893
792
  //#region src/shared/preset-ids.d.ts
894
- /** 包内模板、用户副本与当前预设共用同名 ID;避免与宿主官方预设重名。 */
895
- declare const DEFAULT_PRESET_ID = "pt-standard";
793
+ /**
794
+ * 包内模块与用户副本共用同名 ID;避免与宿主官方预设重名。
795
+ *
796
+ * 内置模块随包分发在仓库根的 `modules/`。旧的内置预设 `pt-*` 已整体退场——它们是官方
797
+ * 预设形态的遗留,重构后不再读取也不再维护;这里指向当前随包分发的内置模块作为兜底。
798
+ */
799
+ declare const DEFAULT_MODULE_ID = "ponytail";
896
800
  //#endregion
897
801
  //#region src/index.d.ts
898
802
  declare const name = "prompt-tool";
899
803
  declare const inject: string[];
900
804
  declare function apply(ctx: Context, configIn: Config): void;
901
805
  //#endregion
902
- export { BRIDGE_ENDPOINTS, type BridgeEndpoint, type BridgeErrorPayload, type BridgeRequestMap, type BridgeValueMap, CHARACTER_MODULES_KEY, type CharacterModuleContext, Config, DEFAULT_PRESET_ID, ENGINE_CAPABILITIES, ENGINE_PARAM_KEYS, ENGINE_RECIPES, type EngineCapability, type EngineCapabilityCreateRequest, type EngineCapabilityCreateResult, type EngineCapabilityRemoveResult, INSTRUCTION_FILE_STATUSES, type InstructionContextView, type InstructionFileSnapshot, type InstructionFileStatus, MAX_BRIDGE_BODY_BYTES, MAX_CHARACTER_CARD_STREAM_BYTES, MAX_INSTRUCTION_FILE_BYTES, type ModuleSourceMode, PARAM_KEYS, PRE_STEP_COORDINATOR_SERVICE, PRE_STEP_COORDINATOR_VERSION, type PluginSubagentSeam, type PreStepCoordinatorOptions, type PreStepCoordinatorService, type PreStepFileContribution, type PreStepPromptConfig, type PreStepSource, type PresetModuleFacts, type PresetSpec, type PromptConfigTemplate, type PromptConfigValidationError, type PromptConfigValidationResult, PromptSettingsSchema, SETTINGS_BRIDGE_PREFIX, SKILL_NAME_PATTERN, type SkillCatalogEntry, type SkillFrontmatter, type SkillPolicyChange, type SkillPolicyRead, type SkillPolicyScope, type SkillPolicyWrite, type SkillsCatalogSnapshot, type SkillsRuntime, type SkillsState, type ToolTemplate, USER_SKILLS_DIR, WRITER_PARAM_KEYS, type WritePresetOptions, agentsFileCardSpecs, agentsFileId, appendCharacterMemory, appendMemoryFile, apply, applyCharacterToPreset, applyModuleConfigs, assertSafeConfigId, buildModuleConfigsFromParams, buildWorldBookEntry, catalogFromScan, characterModuleStillNeeded, cloneBuiltinPreset, configFileName, convertStToPreset, createEngineCapabilityInPreset, createSkillsReloader, createSkillsRuntime, declaredCharacterModules, deleteCharacterCard, deleteWorldBookEntry, detectAgentsFileSnapshots, detectAgentsFiles, detectModels, engineCapability, engineRecipe, ensurePresetSeed, ensureWebSurface, expandPresetSource, exportPresetPackage, importCharacterCard, importCharacterCardFile, importSkillsPackage, inject, installPreStepCoordinator, installPresetPackage, invalidateModelCatalog, invocationForScope, isEngineCapabilityPresent, listAdvertisedModels, listBuiltinTemplates, listCharacterCards, listPresets, listWorldBookEntries, loadPresetSpec, loadPromptTemplates, loadToolTemplates, mergeInstructionCards, mergeStPresets, name, parseFrontmatter, peekModelCatalog, presetImportPreview, processStText, readAgentsFileSnapshot, readCharacterMemory, readSkillInvocation, readSkillsState, recordedCharacterModules, registerCharacterTools, registerSettingsBridge, registerTuiCommand, registerWorldBookTools, removeCharacterFromPreset, removeEngineCapabilityFromPreset, removePresetModule, removeUserPreset, renderComposition, requiredCharacterModules, resolvePresetDir, resolvePresetModuleFacts, resolvePresetParams, resolveProfileDir, resolveProjectRoot, resolveSubagentStartOptions, savePresetParams, savePresetPersona, scanRoot, scanRoots, scheduleWebSurfaceRepair, scopeOfInvocation, setSkillInvocation, skillRoots, skillsStatePath, stPresetId, syncImportedCharacterMemory, upsertWorldBookEntry, userPresetsDir, validateCustomToolIdentities, validateEngineParamValues, validatePromptConfigs, writeAgentsFile, writeAgentsFileChecked, writePreset, writeSkillsState };
806
+ export { BRIDGE_ENDPOINTS, type BridgeEndpoint, type BridgeErrorPayload, type BridgeRequestMap, type BridgeValueMap, Config, DEFAULT_MODULE_ID, MODULE_CAPABILITIES as ENGINE_CAPABILITIES, MODULE_CAPABILITIES, ENGINE_PARAM_KEYS, ENGINE_RECIPES, type ModuleCapability as EngineCapability, type ModuleCapability, type ModuleCapabilityCreateRequest as EngineCapabilityCreateRequest, type ModuleCapabilityCreateRequest, type ModuleCapabilityCreateResult as EngineCapabilityCreateResult, type ModuleCapabilityCreateResult, type ModuleCapabilityRemoveResult as EngineCapabilityRemoveResult, type ModuleCapabilityRemoveResult, INJECTION_POINT_ORDER, INSTRUCTION_FILE_STATUSES, type InjectionPoint, type InstructionContextView, type InstructionFileSnapshot, type InstructionFileStatus, MAX_BRIDGE_BODY_BYTES, MAX_CHARACTER_CARD_STREAM_BYTES, MAX_INSTRUCTION_FILE_BYTES, type ModuleExportRequest, type ModuleExportResult, type ModuleFacts, ModuleLayerSettingsError, type ModuleSourceMode, type ModuleSpec, type ModuleSummary, type ModuleWriterParams, PARAM_KEYS, PRE_STEP_COORDINATOR_SERVICE, PRE_STEP_COORDINATOR_VERSION, type PluginSubagentSeam, type PreStepCoordinatorOptions, type PreStepCoordinatorService, type PreStepPromptConfig, type PreStepSource, type PromptConfigTemplate, SETTINGS_BRIDGE_PREFIX, SKILL_NAME_PATTERN, type SkillCatalogEntry, type SkillFrontmatter, type SkillPolicyChange, type SkillPolicyRead, type SkillPolicyScope, type SkillPolicyWrite, type SkillsCatalogSnapshot, type SkillsRuntime, type SkillsState, type ToolTemplate, USER_SKILLS_DIR, WRITER_PARAM_KEYS, type WriteModuleOptions, type WritePresetOptions, agentsFileCardSpecs, agentsFileId, appendModuleCapabilities, appendModuleMemory, apply, applyModuleConfigs, assertModuleDirectory, assertModuleId, assertModuleTree, assertSafeConfigId, buildModuleConfigsFromParams, buildWorldBookEntry, canonicalModulesRoot, catalogFromScan, cloneBuiltinModule, cloneBuiltinModule as cloneBuiltinPreset, configFileName, convertStToModule, convertStToModule as convertStToPreset, convertStToModuleWithReport, createModuleCapability as createEngineCapabilityInPreset, createModuleCapability, createSkillsReloader, createSkillsRuntime, deleteWorldBookEntry, detectAgentsFileSnapshots, detectAgentsFiles, detectModels, moduleCapability as engineCapability, moduleCapability, engineRecipe, ensureModuleReady, ensureModuleSeed, ensureModuleSeed as ensurePresetSeed, ensureWebSurface, expandModuleSource, expandModuleSource as expandPresetSource, exportModulePackage, exportModulePackage as exportPresetPackage, importCharacterCard, importCharacterCardFile, importSkillsPackage, inject, installModulePackage, installModulePackage as installPresetPackage, installPreStepCoordinator, invalidateModelCatalog, invocationForScope, isModuleCapabilityPresent as isEngineCapabilityPresent, isModuleCapabilityPresent, listAdvertisedModels, listBuiltinTemplates, listModules, listWorldBookEntries, loadModuleSpec, loadPromptTemplates, loadToolTemplates, mergeInstructionCards, mergeModuleIntoModule, mergeStModules, mergeStModules as mergeStPresets, mergeStModulesWithReport, moduleDirExists, moduleImportPreview, moduleImportPreview as presetImportPreview, modulePathExists, name, parseFrontmatter, peekModelCatalog, processStText, readAgentsFileSnapshot, readModuleLayerSettings, readModuleMemory, readSkillInvocation, readSkillsState, registerCharacterTools, registerSettingsBridge, registerTuiCommand, registerWorldBookTools, removeModuleCapability as removeEngineCapabilityFromPreset, removeModuleCapability, removeMergedModule, removeModuleCapabilityDeclaration, removeModuleCapabilityDeclaration as removePresetModule, removeUserModule, removeUserModule as removeUserPreset, renderComposition, resolveModuleDir, resolveModuleFacts, resolveModuleParams, resolveModuleParams as resolvePresetParams, resolveProfileDir, resolveProjectRoot, resolveSubagentStartOptions, saveModuleParams, saveModulePersona, saveModulePersona as savePresetPersona, scanRoot, scanRoots, scheduleWebSurfaceRepair, scopeOfInvocation, setSkillInvocation, skillRoots, skillsStatePath, stModuleId, stModuleId as stPresetId, upsertWorldBookEntry, userModulesDir, validateCustomToolIdentities, validateEngineParamValues, withModuleDefinition, writeAgentsFile, writeAgentsFileChecked, writeModule, writePreset, writeSkillsState };