dsh-plugin-prompt-tool 0.8.1 → 1.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 (72) hide show
  1. package/README.md +58 -50
  2. package/engine/character-tools.mjs +3 -6
  3. package/engine/compositions/library/agent-instructions.yml +1 -1
  4. package/engine/compositions/library/command-goal.yml +1 -1
  5. package/engine/compositions/library/compaction.yml +1 -1
  6. package/engine/compositions/library/delegation-ptc.yml +1 -1
  7. package/engine/compositions/library/delegation.yml +1 -1
  8. package/engine/compositions/library/persistent-shell.yml +1 -1
  9. package/engine/compositions/library/planning.yml +1 -1
  10. package/engine/compositions/library/skill-filesystem-cordis.yml +1 -1
  11. package/engine/compositions/library/skill-filesystem.yml +1 -1
  12. package/engine/compositions/library/tool-ask-user.yml +1 -1
  13. package/engine/compositions/library/tool-bash.yml +1 -1
  14. package/engine/compositions/library/tool-cordis.yml +1 -1
  15. package/engine/compositions/library/tool-fs-search.yml +1 -1
  16. package/engine/compositions/library/tool-fs.yml +1 -1
  17. package/engine/compositions/library/tool-goal.yml +1 -1
  18. package/engine/compositions/library/tool-jobs.yml +1 -1
  19. package/engine/compositions/library/tool-plugin-manager-disabled.yml +1 -1
  20. package/engine/compositions/library/tool-plugin-manager.yml +1 -1
  21. package/engine/compositions/library/tool-present.yml +1 -1
  22. package/engine/compositions/library/tool-presentation.yml +1 -1
  23. package/engine/compositions/library/tool-pwsh.yml +1 -1
  24. package/engine/compositions/library/tool-skill.yml +1 -1
  25. package/engine/compositions/library/tool-todo.yml +1 -1
  26. package/engine/compositions/library/tool-web.yml +1 -1
  27. package/engine/compositions/source/local/prompt-config-engine.yml +1 -1
  28. package/engine/executor.mjs +39 -26
  29. package/engine/instruction-hint.mjs +6 -2
  30. package/engine/layers.mjs +38 -30
  31. package/engine/order.mjs +17 -0
  32. package/engine/schema.mjs +16 -6
  33. package/engine/session-var-tools.mjs +3 -6
  34. package/engine/st-render.mjs +8 -4
  35. package/engine/subagent-tool-policy.mjs +25 -10
  36. package/engine/world-book-tools.mjs +3 -6
  37. package/lib/client.js +3451 -3519
  38. package/lib/client.js.map +1 -1
  39. package/lib/index.d.mts +233 -272
  40. package/lib/index.mjs +1020 -1226
  41. package/lib/{preset-package-BnJqrU4R.mjs → module-package-Cm3fHHlp.mjs} +997 -594
  42. package/lib/{paths-CY5psBqE.d.mts → paths-BgL42sSM.d.mts} +191 -149
  43. package/lib/preset-transfer.d.mts +2 -2
  44. package/lib/preset-transfer.mjs +2 -2
  45. package/modules/ponytail/configs/0000-ponytail-rules.yml +102 -0
  46. package/modules/ponytail/configs/0010-ponytail-level-full.yml +19 -0
  47. package/modules/ponytail/configs/0020-ponytail-level-lite.yml +19 -0
  48. package/modules/ponytail/configs/0030-ponytail-level-ultra.yml +19 -0
  49. package/modules/ponytail/module.yml +172 -0
  50. package/package.json +46 -80
  51. package/templates/20-system-section.yml +4 -1
  52. package/templates/70-subagent-maintenance.yml +1 -1
  53. package/templates/tools/50-delegate-worldbook.yml +1 -1
  54. package/preset/pt-cordis/preset.yml +0 -43
  55. package/preset/pt-cordis/skills/cordis-composition-reference/SKILL.md +0 -29
  56. package/preset/pt-cordis/skills/cordis-composition-reference/references/packages.md +0 -501
  57. package/preset/pt-cordis/skills/cordis-plugin-development/SKILL.md +0 -38
  58. package/preset/pt-cordis/skills/cordis-plugin-development/references/host-plugin.md +0 -60
  59. package/preset/pt-cordis/skills/cordis-plugin-development/references/mcp-bundle.md +0 -5
  60. package/preset/pt-cordis/skills/cordis-plugin-development/references/ui-plugin.md +0 -13
  61. package/preset/pt-cordis/skills/cordis-plugin-development/references/verification.md +0 -5
  62. package/preset/pt-cordis/skills/cordis-plugin-development/templates/decoration/client.js +0 -22
  63. package/preset/pt-cordis/skills/cordis-plugin-development/templates/decoration/cordis.patch.yml +0 -3
  64. package/preset/pt-cordis/skills/cordis-plugin-development/templates/decoration/index.js +0 -2
  65. package/preset/pt-cordis/skills/cordis-plugin-development/templates/decoration/package.json +0 -15
  66. package/preset/pt-cordis/skills/cordis-plugin-development/templates/mcp/cordis.patch.yml +0 -8
  67. package/preset/pt-cordis/skills/cordis-plugin-development/templates/mcp/package.json +0 -7
  68. package/preset/pt-cordis/skills/editing-cordis-compositions/SKILL.md +0 -84
  69. package/preset/pt-custom/preset.yml +0 -15
  70. package/preset/pt-minimal/preset.yml +0 -27
  71. package/preset/pt-ptc/preset.yml +0 -45
  72. package/preset/pt-standard/preset.yml +0 -43
@@ -1,11 +1,80 @@
1
1
  import { parseDocument } from "yaml";
2
+ //#region src/shared/engine-capabilities.d.ts
3
+ type ModuleSourceMode = 'explicit' | 'composition' | 'official' | 'unknown';
4
+ /** 官方九个注入层:与 engine/schema.mjs 的 LAYER_ORDER 同源,改一处必须同步另一处。 */
5
+ type EngineLayer = 'pre-step' | 'system-section' | 'runtime-context' | 'agent-request' | 'llm-stream' | 'tool-pipeline' | 'turn-stop' | 'subagent-start' | 'subagent-end';
6
+ interface ModuleFacts {
7
+ declaredModules: string[] | null;
8
+ effectiveModules: string[] | null;
9
+ rowIds: string[];
10
+ sourceMode: ModuleSourceMode;
11
+ editable: boolean;
12
+ effectiveConfigs?: Record<string, Record<string, unknown>>;
13
+ /** 策略段真实存在;能力声明仍在并不代表策略已开启。 */
14
+ subagentToolPolicyEnabled?: boolean;
15
+ }
16
+ interface EngineCapability {
17
+ id: string;
18
+ moduleKeys: readonly string[];
19
+ rowIds: readonly string[];
20
+ displayLayer: EngineLayer;
21
+ /** 真实跨层影响的相关层(只在确有第二通道时登记,避免把归属铺满九层)。 */
22
+ relatedLayers?: readonly EngineLayer[];
23
+ /**
24
+ * 该能力拥有的 preset 顶层数据段(不是行级 config)。
25
+ * 创建时若段缺失则写入 `skeleton`(保证"模块在 ⇒ 数据在");删除时一并移除该段。
26
+ */
27
+ ownSection?: {
28
+ /** preset.yml 顶层键名。 */
29
+ key: string;
30
+ /** 启用时写入的可用骨架(必须能通过该段的校验)。 */
31
+ skeleton: Readonly<Record<string, unknown>>;
32
+ };
33
+ }
34
+ /** 首期只登记已有 typed editor 的能力,避免万能 key/value 表单。 */
35
+ declare const ENGINE_CAPABILITIES: readonly EngineCapability[];
36
+ /**
37
+ * 编辑组 = 前端一张可编辑卡(能力卡或专用卡)的主归属层。
38
+ * id 必须是代码里真实存在的 card / 展开键名,不新增臆造 id。
39
+ */
40
+ interface EngineEditorGroup {
41
+ id: string;
42
+ displayLayer: EngineLayer;
43
+ /** 真实跨层影响的相关层(只有确有第二通道时才写)。 */
44
+ relatedLayers?: readonly EngineLayer[];
45
+ /** 真实生效通道的只读说明键(如 'agent-request' / 'system-section'):供 UI 显示「实际生效通道」,
46
+ * 只写代码里可核对的事实,不承诺未验证的通道。 */
47
+ hook: string;
48
+ }
49
+ interface EngineRecipe {
50
+ id: string;
51
+ capabilities: readonly string[];
52
+ initialParams?: Readonly<Record<string, unknown>>;
53
+ }
54
+ /**
55
+ * 只保留已有真实工作流的一键组合;recipe 本身不写入 preset.yml。
56
+ *
57
+ * B7 T3 清空:三条 recipe 的成员都是随本轮退场的专用能力(phase-control /
58
+ * phase-control-ptc / deliberation),没有任何一条还能组成合法能力集合。
59
+ * export 与 `engineRecipe()` 保留——调用点(创建菜单、bridge 校验)不必跟着改,
60
+ * 空表天然让组合项整个消失。
61
+ */
62
+ declare const ENGINE_RECIPES: readonly EngineRecipe[];
63
+ declare function engineCapability(id: string): EngineCapability | undefined;
64
+ declare function engineRecipe(id: string): EngineRecipe | undefined;
65
+ /** 显式模块声明中的实际能力;包含当前参数与顶层策略所需的装配。
66
+ * 创建补声明由 host 单独检查 declaredModules;官方组合行不伪装成可编辑能力。 */
67
+ declare function isEngineCapabilityPresent(id: string, facts: ModuleFacts | undefined): boolean;
68
+ /** custom tool 的运行时名称缺省回落 id;保存前拒绝会导致同层注册失败的重复项。 */
69
+ declare function validateCustomToolIdentities(tools: readonly unknown[]): string[];
70
+ //#endregion
2
71
  //#region src/shared/instructions.d.ts
3
72
  /**
4
73
  * 指令文件(AGENTS.md / CLAUDE.md 等)跨 host/client 的最小契约。
5
74
  * 只放两端都要理解的形状:读取快照、工作区上下文与写入结果;
6
75
  * 引擎侧的位置/晋升/受众算法不在这里复制。
7
76
  */
8
- /** 单个指令文件正文上限(与官方指令行的 maxBytes 基线对齐;读写限制一致)。 */
77
+ /** 文件卡正文读写上限;官方注入的读取与渲染预算由官方配置决定。 */
9
78
  declare const MAX_INSTRUCTION_FILE_BYTES: number;
10
79
  declare const INSTRUCTION_FILE_STATUSES: readonly ["ready", "missing", "unreadable", "too-large"];
11
80
  /**
@@ -53,8 +122,7 @@ interface InstructionsSnapshot {
53
122
  }
54
123
  /**
55
124
  * 指令负责人事实:本会话实际装配里是否仍挂着官方指令加载行。
56
- * `true` 时独立文件来源整体不参战(同一正文只由一方注入);`false` 表示由本插件
57
- * 的独立来源负责;`null` 表示本次请求还没有该会话的装配观察结果(不猜)。
125
+ * `true` 表示官方负责注入;`false` 表示模块未装配官方来源;`null` 表示尚未观察到。
58
126
  */
59
127
  interface InstructionsOwnerView {
60
128
  officialInstructions: boolean | null;
@@ -65,37 +133,23 @@ interface InstructionFileWriteResult {
65
133
  revision: string;
66
134
  }
67
135
  /**
68
- * 指令文件卡策略(独立于预设与 settings 的本插件自有状态)。
136
+ * 指令文件卡策略(独立于模块与 settings 的本插件自有状态)。
69
137
  *
70
- * 只承载行为开关与展示名:正文永远在用户的原文件里,策略不存正文、读取版本、
71
- * 会话 ID 或任意客户端路径。缺省 `enabled: false`——独立来源必须先完成负责人
72
- * 切换验收,再由用户显式开启。
138
+ * 只承载逐文件开关与展示名;正文、读取版本、会话 ID 和路径不进入策略。
139
+ * 默认放行官方注入,关闭只过滤后续消息,不撤回已持久历史。
73
140
  */
74
- interface InstructionPolicyValues {
75
- order: number;
76
- position: string;
77
- promotion: string;
78
- audience: string | null;
79
- modelScope: string;
80
- }
81
- interface InstructionPolicyFileOverride extends Partial<InstructionPolicyValues> {
82
- /** 每文件可关闭注入(默认开启);部署级 enabled 为 false 时整体不注入。 */
141
+ interface InstructionPolicyFileOverride {
142
+ /** 缺省开启;false 拦截该文件后续的官方注入。 */
83
143
  enabled?: boolean;
84
144
  /** 可选显示名(只影响 UI 标题)。 */
85
145
  name?: string;
86
146
  }
87
147
  interface InstructionPolicy {
88
- /** 部署级开关:文件来源是否参与注入。 */
89
- enabled: boolean;
90
- /** 未单独覆盖的文件使用这些值。 */
91
- defaults: InstructionPolicyValues;
92
- /** 按 fileId 的覆盖;缺省即用 defaults,删除覆盖恢复默认。 */
148
+ /** 按 fileId 的覆盖;删除覆盖恢复默认放行。 */
93
149
  files: Record<string, InstructionPolicyFileOverride>;
94
150
  }
95
151
  /** 局部更新:只写传入的键;files[fileId] = null 表示删除该覆盖。 */
96
152
  interface InstructionPolicyPatch {
97
- enabled?: boolean;
98
- defaults?: Partial<InstructionPolicyValues>;
99
153
  files?: Record<string, InstructionPolicyFileOverride | null>;
100
154
  }
101
155
  //#endregion
@@ -122,6 +176,28 @@ interface PersonaSpec {
122
176
  includeRuntimeContext?: boolean;
123
177
  }
124
178
  //#endregion
179
+ //#region src/shared/module-config-order.d.ts
180
+ /** 配置卡身份与排序快照;序号归模块定义,正文不进入排序载荷。 */
181
+ interface ModuleConfigIdentity {
182
+ moduleId: string;
183
+ configId: string;
184
+ }
185
+ interface ModuleConfigOrderEntry extends ModuleConfigIdentity {
186
+ name: string;
187
+ layer: string;
188
+ position: string;
189
+ sequence: number;
190
+ enabled: boolean;
191
+ audience?: 'main' | 'subagent' | null;
192
+ strategy?: string;
193
+ /** 官方文本层的定位档位;其他层不使用。 */
194
+ order?: number;
195
+ }
196
+ interface ModuleConfigOrderSnapshot {
197
+ revision: string;
198
+ entries: ModuleConfigOrderEntry[];
199
+ }
200
+ //#endregion
125
201
  //#region src/shared/asset-transfer.d.ts
126
202
  /** 资产传输使用显式编码;省略编码仅兼容旧文本请求。 */
127
203
  interface AssetFile {
@@ -184,73 +260,6 @@ interface PresetExportResult {
184
260
  excludedMemoryCount?: number;
185
261
  }
186
262
  //#endregion
187
- //#region src/shared/engine-capabilities.d.ts
188
- type ModuleSourceMode = 'explicit' | 'composition' | 'official' | 'unknown';
189
- /** 官方九个注入层:与 engine/schema.mjs 的 LAYER_ORDER 同源,改一处必须同步另一处。 */
190
- type EngineLayer = 'pre-step' | 'system-section' | 'runtime-context' | 'agent-request' | 'llm-stream' | 'tool-pipeline' | 'turn-stop' | 'subagent-start' | 'subagent-end';
191
- interface PresetModuleFacts {
192
- declaredModules: string[] | null;
193
- effectiveModules: string[] | null;
194
- rowIds: string[];
195
- sourceMode: ModuleSourceMode;
196
- editable: boolean;
197
- effectiveConfigs?: Record<string, Record<string, unknown>>;
198
- }
199
- interface EngineCapability {
200
- id: string;
201
- moduleKeys: readonly string[];
202
- rowIds: readonly string[];
203
- displayLayer: EngineLayer;
204
- /** 真实跨层影响的相关层(只在确有第二通道时登记,避免把归属铺满九层)。 */
205
- relatedLayers?: readonly EngineLayer[];
206
- /**
207
- * 该能力拥有的 preset 顶层数据段(不是行级 config)。
208
- * 创建时若段缺失则写入 `skeleton`(保证"模块在 ⇒ 数据在");删除时一并移除该段。
209
- */
210
- ownSection?: {
211
- /** preset.yml 顶层键名。 */
212
- key: string;
213
- /** 启用时写入的可用骨架(必须能通过该段的校验)。 */
214
- skeleton: Readonly<Record<string, unknown>>;
215
- };
216
- }
217
- /** 首期只登记已有 typed editor 的能力,避免万能 key/value 表单。 */
218
- declare const ENGINE_CAPABILITIES: readonly EngineCapability[];
219
- /**
220
- * 编辑组 = 前端一张可编辑卡(能力卡或专用卡)的主归属层。
221
- * id 必须是代码里真实存在的 card / 展开键名,不新增臆造 id。
222
- */
223
- interface EngineEditorGroup {
224
- id: string;
225
- displayLayer: EngineLayer;
226
- /** 真实跨层影响的相关层(只有确有第二通道时才写)。 */
227
- relatedLayers?: readonly EngineLayer[];
228
- /** 真实生效通道的只读说明键(如 'agent-request' / 'system-section'):供 UI 显示「实际生效通道」,
229
- * 只写代码里可核对的事实,不承诺未验证的通道。 */
230
- hook: string;
231
- }
232
- interface EngineRecipe {
233
- id: string;
234
- capabilities: readonly string[];
235
- initialParams?: Readonly<Record<string, unknown>>;
236
- }
237
- /**
238
- * 只保留已有真实工作流的一键组合;recipe 本身不写入 preset.yml。
239
- *
240
- * B7 T3 清空:三条 recipe 的成员都是随本轮退场的专用能力(phase-control /
241
- * phase-control-ptc / deliberation),没有任何一条还能组成合法能力集合。
242
- * export 与 `engineRecipe()` 保留——调用点(创建菜单、bridge 校验)不必跟着改,
243
- * 空表天然让组合项整个消失。
244
- */
245
- declare const ENGINE_RECIPES: readonly EngineRecipe[];
246
- declare function engineCapability(id: string): EngineCapability | undefined;
247
- declare function engineRecipe(id: string): EngineRecipe | undefined;
248
- /** 显式模块预设中的实际能力;包含当前参数与顶层策略所需的装配。
249
- * 创建补声明由 host 单独检查 declaredModules;官方组合行不伪装成可编辑能力。 */
250
- declare function isEngineCapabilityPresent(id: string, facts: PresetModuleFacts | undefined): boolean;
251
- /** custom tool 的运行时名称缺省回落 id;保存前拒绝会导致同层注册失败的重复项。 */
252
- declare function validateCustomToolIdentities(tools: readonly unknown[]): string[];
253
- //#endregion
254
263
  //#region src/shared/managed-config-fields.d.ts
255
264
  interface ConfigFieldSources {
256
265
  configId: string;
@@ -388,10 +397,12 @@ declare const BRIDGE_ENDPOINTS: {
388
397
  readonly assetUpload: "/asset-upload";
389
398
  readonly assetRelease: "/asset-release";
390
399
  readonly exportPreset: "/export-preset";
391
- readonly presetDelete: "/preset-delete";
392
- readonly presetClone: "/preset-clone";
393
- readonly presetDuplicate: "/preset-duplicate";
394
- readonly presetOpen: "/preset-open";
400
+ readonly moduleDelete: "/module-delete";
401
+ readonly moduleClone: "/module-clone";
402
+ readonly moduleDuplicate: "/module-duplicate";
403
+ readonly moduleOpen: "/module-open";
404
+ readonly moduleEnable: "/module-enable";
405
+ readonly moduleConfigOrder: "/module-config-order";
395
406
  readonly charactersImport: "/characters-import";
396
407
  readonly charactersImportStream: "/characters-import-stream";
397
408
  readonly charactersList: "/characters-list";
@@ -513,6 +524,7 @@ interface BridgeRequestMap {
513
524
  * 指令文件卡策略(独立存储,默认禁用):省略 `policy` = 读取;
514
525
  * 写入必须带读取时的 `expectedRevision`(文件缺失为 null)。
515
526
  */
527
+ /** 逐文件启停/名称;无 policy 时读取,写入仍校验原始字节版本。 */
516
528
  instructionsPolicy: {
517
529
  policy?: InstructionPolicyPatch;
518
530
  expectedRevision?: string | null;
@@ -552,7 +564,7 @@ interface BridgeRequestMap {
552
564
  expectedPresetId?: string;
553
565
  } | undefined;
554
566
  /**
555
- * 预设包导入(原生/ST/PNG/ZIP)。`preview: true` 只转换并返回报告,不写目标;
567
+ * 模块包导入(原生/ST/PNG/ZIP)。`preview: true` 只转换并返回报告,不写目标;
556
568
  * 提交必须携带 expectedSourceDigest 和 expectedPreviewRevision,服务端重算并拒绝过期预览。
557
569
  * `expectedPreviewRevision` 是预览返回的版本凭据:绑定文件、实际选组、转换器版本与
558
570
  * 目标身份(含目标当前内容),服务端提交时重算,不符返回 409 且零写盘。
@@ -566,19 +578,30 @@ interface BridgeRequestMap {
566
578
  sourceId: string;
567
579
  };
568
580
  exportPreset: PresetExportRequest;
569
- presetDelete: {
581
+ moduleDelete: {
570
582
  id: string;
571
583
  };
572
- presetClone: {
584
+ moduleClone: {
573
585
  id: string;
574
586
  autoSuffix?: boolean;
575
587
  };
576
- presetDuplicate: {
588
+ moduleDuplicate: {
577
589
  id: string;
578
590
  };
579
- presetOpen: {
591
+ moduleOpen: {
580
592
  id: string;
581
593
  };
594
+ moduleEnable: {
595
+ id: string;
596
+ enabled: boolean;
597
+ };
598
+ moduleConfigOrder: {
599
+ moduleId: string;
600
+ } | {
601
+ moduleId?: string;
602
+ entries: ModuleConfigIdentity[];
603
+ expectedRevision: string;
604
+ } | undefined;
582
605
  /** 角色卡 PNG/JSON/YAML 导入;预览不写角色库,提交必验版本,目标和选组均绑定预览。 */
583
606
  charactersImport: AssetImportRequest;
584
607
  charactersImportStream: undefined;
@@ -780,6 +803,8 @@ interface EngineMetaLayerContract {
780
803
  /** 物化配置的只读来源;与配置一同读回,不能作为写入字段或授权。 */
781
804
  interface PromptConfigSourceView {
782
805
  fieldSources?: ConfigFieldSources;
806
+ /** 只读排序投影;不能作为客户端提供的写盘序号。 */
807
+ sequence?: number;
783
808
  }
784
809
  /** 端点级响应 value 契约(value 字段形状;扩展字段仍以 value 旁可选字段出现)。 */
785
810
  interface BridgeValueMap {
@@ -861,7 +886,7 @@ interface BridgeValueMap {
861
886
  importPreset: {
862
887
  scopes: Array<'preset' | 'agents'>;
863
888
  };
864
- /** 参数/提示词配置只保存当前预设,不同步宿主全局默认模型。 */
889
+ /** 参数/提示词配置只保存当前模块,不同步宿主全局默认模型。 */
865
890
  paramOverrides: {
866
891
  overrides?: Record<string, unknown>;
867
892
  promptConfigs?: unknown[];
@@ -894,7 +919,6 @@ interface BridgeValueMap {
894
919
  report?: StConversionReport;
895
920
  summary?: AssetSummary;
896
921
  kinds?: ImportKind[];
897
- refreshWarning?: string;
898
922
  };
899
923
  assetUpload: {
900
924
  sourceId: string;
@@ -905,18 +929,22 @@ interface BridgeValueMap {
905
929
  released: boolean;
906
930
  };
907
931
  exportPreset: PresetExportResult;
908
- presetDelete: {
932
+ moduleDelete: {
909
933
  id: string;
910
934
  };
911
- presetClone: {
935
+ moduleClone: {
912
936
  id: string;
913
937
  };
914
- presetDuplicate: {
938
+ moduleDuplicate: {
915
939
  id: string;
916
940
  };
917
- presetOpen: {
941
+ moduleOpen: {
918
942
  path: string;
919
943
  };
944
+ moduleEnable: {
945
+ enabled: string[];
946
+ };
947
+ moduleConfigOrder: ModuleConfigOrderSnapshot;
920
948
  charactersImport: {
921
949
  id?: string;
922
950
  name?: string;
@@ -987,7 +1015,14 @@ interface BridgeValueMap {
987
1015
  }
988
1016
  //#endregion
989
1017
  //#region src/host/manifest.d.ts
990
- interface PresetSpec {
1018
+ /**
1019
+ * 模块目录确实存在于本插件存储根(身份判定与官方登记状态无关)。
1020
+ *
1021
+ * 启用表过滤、工具写入目标、TUI 目标共用这一条判据:本插件管理的模块 = 存储根里含
1022
+ * `module.yml` 的目录,与「宿主有没有把它登记成官方预设」是两回事。
1023
+ */
1024
+ declare function moduleDirExists(root: string, id: string): boolean;
1025
+ interface ModuleSpec {
991
1026
  id: string;
992
1027
  name: string;
993
1028
  /** 官方预设列表顺序;省略时由宿主排序。 */
@@ -1009,9 +1044,11 @@ interface PresetSpec {
1009
1044
  params?: Record<string, unknown>;
1010
1045
  /** 共享引擎参数按编辑组的主归属插入点存储;规则实例仍拥有各自 params。 */
1011
1046
  layerSettings?: Record<string, Record<string, unknown>>;
1047
+ /** 兼容读取诊断,不写回模块定义。 */
1048
+ legacyParamWarnings?: string[];
1012
1049
  /** 顶层人设段(官方 @deepseek-ai/dsh-persona 行同构):prefix/suffix/complete/includeRuntimeContext。 */
1013
1050
  persona?: PersonaSpec;
1014
- /** 预设级模板变量({{key}} 插值源;与 layerSettings 分离,顶层 variables 段)。 */
1051
+ /** 模块级模板变量({{key}} 插值源;与 layerSettings 分离,顶层 variables 段)。 */
1015
1052
  variables?: Record<string, string>;
1016
1053
  /** 自定义工具定义(tool-config-engine 渲染进 custom-tools/ 后运行时注册)。 */
1017
1054
  customTools?: unknown[];
@@ -1019,7 +1056,7 @@ interface PresetSpec {
1019
1056
  subagentToolPolicy?: Record<string, unknown>;
1020
1057
  /**
1021
1058
  * 触发器声明(`triggers` 顶层段):`{ id, channel, when?, do, … }` 的数组。
1022
- * 声明**由预设提供**(引擎不带默认),物化为 `triggers.yml` 后由 `declared-triggers`
1059
+ * 声明**由模块提供**(引擎不带默认),物化为 `triggers.yml` 后由 `declared-triggers`
1023
1060
  * 运行时模块读入并注册;形状与校验归 `engine/trigger-spec.mjs` 的声明编译器。
1024
1061
  */
1025
1062
  triggers?: unknown[];
@@ -1027,26 +1064,30 @@ interface PresetSpec {
1027
1064
  variablesEnabled?: boolean;
1028
1065
  /** 可选:模板自定义提示词配置覆盖(纯数据,不使用模板语法)。 */
1029
1066
  promptConfigs?: unknown[];
1067
+ /** 配置卡的持久文件序号;跨模块UI排序只改此轻量元数据。 */
1068
+ configOrder?: Record<string, number>;
1030
1069
  /** 可选:引擎组合模块行参数直写(行级 map config 浅合并;参数桥未覆盖的键生效,参数桥优先)。 */
1031
1070
  moduleConfigs?: Record<string, Record<string, unknown>>;
1032
1071
  upstream?: Record<string, unknown>;
1033
1072
  }
1034
1073
  /**
1035
- * 从预设 preset.yml 的 modules 清单移除一个模块 id(YAML Document 保留注释
1074
+ * 从模块 module.yml 的 modules 清单移除一个模块 id(YAML Document 保留注释
1036
1075
  * 与其余字段)。返回是否发生修改;文件缺失或没有该模块时返回 false。
1037
1076
  */
1038
1077
  declare function removePresetModule(dir: string, moduleId: string): boolean;
1039
- /** 加载某个预设模板的单一参数文件 preset/<name>/preset.yml。 */
1040
- declare function loadPresetSpec(dir: string): PresetSpec;
1041
- /** 预设根:官方 USER_PRESET_DIR(~/.dsh/.agent-presets),导入/新建/种子化的预设都放这里。 */
1042
- declare function userPresetsDir(): string;
1078
+ /** 加载某个模块模板的单一参数文件 modules/<name>/module.yml。 */
1079
+ declare function loadModuleSpec(dir: string, options?: {
1080
+ legacyParams?: boolean;
1081
+ }): ModuleSpec;
1082
+ /** 模块根:本插件的存储根(~/.dsh/.prompt-tool),导入/新建/种子化的模块都放这里。 */
1083
+ declare function userModulesDir(): string;
1043
1084
  /**
1044
- * 解析预设模板目录:当前预设根优先,包内模板回退;不读取其他部署根的同名预设。
1085
+ * 解析模块模板目录:当前模块根优先,包内模板回退;不读取其他部署根的同名模块。
1045
1086
  * 目录名与声明的 preset.yml id 一致;不扫描其他目录的 id 别名。
1046
1087
  */
1047
- declare function resolvePresetDir(template: string, presetRoot?: string): string;
1048
- /** 本插件预设清单;所有目录按同一身份与组合源规则列举。 */
1049
- declare function listPresets(presetRoot?: string): Array<{
1088
+ declare function resolveModuleDir(template: string, moduleRoot?: string): string;
1089
+ /** 本插件模块清单;所有目录按同一身份与组合源规则列举。 */
1090
+ declare function listModules(moduleRoot?: string): Array<{
1050
1091
  id: string;
1051
1092
  name: string;
1052
1093
  user: boolean;
@@ -1054,17 +1095,17 @@ declare function listPresets(presetRoot?: string): Array<{
1054
1095
  description?: string;
1055
1096
  meta?: Record<string, unknown>;
1056
1097
  }>;
1057
- /** 插件目录模板清单(「新建」选择器与首次种子化数据源;不直接出现在预设列表)。 */
1098
+ /** 插件目录模板清单(「新建」选择器与首次种子化数据源;不直接出现在模块列表)。 */
1058
1099
  declare function listBuiltinTemplates(): Array<{
1059
1100
  id: string;
1060
1101
  name: string;
1061
1102
  }>;
1062
- /** 按包内同名目录补建缺失预设;已有目录的定义、生成物和资源保持原样。 */
1103
+ /** 按包内同名目录补建缺失的内置模块;已有目录的定义、生成物和资源保持原样。 */
1063
1104
  declare function ensurePresetSeed(root?: string): {
1064
1105
  created: string[];
1065
1106
  };
1066
- /** 从包内同名目录复制预设;autoSuffix=true 时递增目录名并同步定义身份。 */
1067
- declare function cloneBuiltinPreset(id: string, autoSuffix?: boolean, presetRoot?: string): {
1107
+ /** 从包内同名目录复制模块;autoSuffix=true 时递增目录名并同步定义身份。 */
1108
+ declare function cloneBuiltinPreset(id: string, autoSuffix?: boolean, moduleRoot?: string): {
1068
1109
  ok: true;
1069
1110
  id: string;
1070
1111
  } | {
@@ -1072,27 +1113,27 @@ declare function cloneBuiltinPreset(id: string, autoSuffix?: boolean, presetRoot
1072
1113
  message: string;
1073
1114
  };
1074
1115
  /**
1075
- * 保存预设参数:写 layerSettings(merge)/ promptConfigs(整体替换)。
1116
+ * 保存模块参数:写 layerSettings(merge)/ promptConfigs(整体替换)。
1076
1117
  * parseDocument 保留注释与未知键(preset.yml 模板含大量注释);空值键删除('' / [],
1077
1118
  * 回落模板/引擎默认;0 与 false 照常写入——语义与函数内注释、docs §3 一致)。
1078
1119
  */
1079
- declare function savePresetParams(presetRoot: string, templateName: string, params: Record<string, unknown> | undefined, promptConfigs: unknown[] | undefined, variables?: Record<string, string>, variablesEnabled?: boolean): void;
1120
+ declare function saveModuleParams(moduleRoot: string, templateName: string, params: Record<string, unknown> | undefined, promptConfigs: unknown[] | undefined, variables?: Record<string, string>, variablesEnabled?: boolean): void;
1080
1121
  /**
1081
- * 保存激活预设的顶层 persona 段(官方 `@deepseek-ai/dsh-persona` 行 config 同构)。
1122
+ * 保存激活模块的顶层 persona 段(官方 `@deepseek-ai/dsh-persona` 行 config 同构)。
1082
1123
  * null = 删除该段(回落宿主部署人设);默认值不落键(见 personaRowConfig)。
1083
1124
  */
1084
- declare function savePresetPersona(presetRoot: string, templateName: string, persona: PersonaSpec | null): void;
1085
- /** 删除具有合法身份的预设目录(预设根/<id>);隐藏备份不经公共接口删除。
1086
- * 仅作用于预设根(官方 USER_PRESET_DIR),包内置模板天然不受影响;路径越界与非法 id 拒绝。
1087
- * 删除后宿主 agent-presets 目录列表自然不再出现该预设(官方 roster 即目录列表)。 */
1088
- declare function removeUserPreset(id: string, presetRoot?: string): {
1125
+ declare function savePresetPersona(moduleRoot: string, templateName: string, persona: PersonaSpec | null): void;
1126
+ /** 删除具有合法身份的模块目录(模块根/<id>);隐藏备份不经公共接口删除。
1127
+ * 仅作用于插件自有模块根,包内置模板不受影响;路径越界与非法 id 拒绝。
1128
+ * 模块不在宿主预设注册表里,删除后无需撤销官方登记;调用方按需重建当前模块。 */
1129
+ declare function removeUserPreset(id: string, moduleRoot?: string): {
1089
1130
  ok: true;
1090
1131
  } | {
1091
1132
  ok: false;
1092
1133
  message: string;
1093
1134
  };
1094
1135
  /** 当前 layerSettings 与显式运行参数合并;不从旧磁盘 params 段回退取值。 */
1095
- declare function resolvePresetParams(spec: PresetSpec, runtime: Record<string, unknown>): Record<string, unknown>;
1136
+ declare function resolvePresetParams(spec: ModuleSpec, runtime: Record<string, unknown>): Record<string, unknown>;
1096
1137
  /**
1097
1138
  * 参数桥:params 扁平键 → 引擎模块行 config 对象(取代旧 __TOKEN__ 文本渲染)。
1098
1139
  *
@@ -1110,14 +1151,14 @@ declare function buildModuleConfigsFromParams(params: Record<string, unknown>, o
1110
1151
  * 行级 config 合并:仅支持 map 型 config 浅合并;
1111
1152
  * 数组型 config(如 delegation 组)按子行 id 嵌套合并;未声明模块原样保留。
1112
1153
  * 未声明 configs 时返回原文(零开销);parseDocument 往返保留注释。
1113
- * 本函数是参数桥产物落位组合行的唯一机制(含 delegation 组子行嵌套),不是预设覆盖通道。
1154
+ * 本函数是参数桥产物落位组合行的唯一机制(含 delegation 组子行嵌套),不是模块覆盖通道。
1114
1155
  */
1115
1156
  declare function applyModuleConfigs(raw: string, configs: Record<string, Record<string, unknown>> | undefined): string;
1116
1157
  /**
1117
- * 解析预设的模块事实,供 UI 卡片存在性和受控创建共用。
1158
+ * 解析模块的模块事实,供 UI 卡片存在性和受控创建共用。
1118
1159
  * 显式模块及当前参数/策略所需的装配是可编辑插件能力;官方组合 row 仅保留为运行事实。
1119
1160
  */
1120
- declare function resolvePresetModuleFacts(spec: PresetSpec, templateDir?: string, editable?: boolean): PresetModuleFacts;
1161
+ declare function resolveModuleFacts(spec: ModuleSpec, templateDir?: string, editable?: boolean): ModuleFacts;
1121
1162
  type EngineCapabilityCreateRequest = {
1122
1163
  action: 'create';
1123
1164
  capabilityId: string;
@@ -1135,19 +1176,19 @@ interface EngineCapabilityRemoveResult {
1135
1176
  removedModules: string[];
1136
1177
  capabilityIds: string[];
1137
1178
  }
1138
- /** 在内存候选文档中展开能力/recipe,校验成功后一次原子替换 preset.yml。 */
1139
- declare function createEngineCapabilityInPreset(presetDir: string, request: EngineCapabilityCreateRequest): EngineCapabilityCreateResult;
1179
+ /** 在内存候选文档中展开能力/recipe,校验成功后一次原子替换 module.yml。 */
1180
+ declare function createEngineCapabilityInPreset(moduleDir: string, request: EngineCapabilityCreateRequest): EngineCapabilityCreateResult;
1140
1181
  /** 删除能力:模块声明、顶层数据段,以及该能力的**显式参数与行配置**一起移除。
1141
1182
  * 参数在 ⇒ 装配在(见 impliedModulesFromParams):留下参数会让移除立刻被隐含装配拉回来,
1142
1183
  * 所以"移除能力"必须是完整移除。未登记参数、其他能力的数据与未知字段一律不动。 */
1143
- declare function removeEngineCapabilityFromPreset(presetDir: string, capabilityId: string): EngineCapabilityRemoveResult;
1184
+ declare function removeEngineCapabilityFromPreset(moduleDir: string, capabilityId: string): EngineCapabilityRemoveResult;
1144
1185
  /**
1145
- * 预设组合渲染完整链路:模块装配 → 参数桥(moduleConfigs + params)行级合并。
1186
+ * 模块组合渲染完整链路:模块装配 → 参数桥(moduleConfigs + params)行级合并。
1146
1187
  * 合并优先级:参数桥(params/UI 基础层) > moduleConfigs(模板/ST 行级直写) > 行默认。
1147
1188
  * moduleConfigs 仅补充参数桥未覆盖的行级 config(如 ST 导入的 tool-web.fetch),
1148
1189
  * 不再锁定覆盖 UI 可管理参数(旧作者锁定语义已移除)。
1149
1190
  */
1150
- declare function renderComposition(spec: PresetSpec, runtime: Record<string, unknown>, templateDir?: string): string;
1191
+ declare function renderComposition(spec: ModuleSpec, runtime: Record<string, unknown>, templateDir?: string): string;
1151
1192
  //#endregion
1152
1193
  //#region src/host/sillytavern.d.ts
1153
1194
  /** ST marker prompts(marker: true):content 不发送给模型(仅标记注入位置,ST
@@ -1157,7 +1198,7 @@ declare function renderComposition(spec: PresetSpec, runtime: Record<string, unk
1157
1198
  /** 显式文本求值工具;导入本身仅 prepare,避免执行禁用卡的副作用。 */
1158
1199
  declare function processStText(text: string, cardName: string, variables: Record<string, string | number>): string;
1159
1200
  /** 合并多个转换结果为一个预设(角色卡 × 响应预设 → 单预设)。 */
1160
- declare function mergeStPresets(specs: PresetSpec[]): PresetSpec;
1201
+ declare function mergeStPresets(specs: ModuleSpec[]): ModuleSpec;
1161
1202
  /** 转换选项:多 prompt_order 分组时显式选择来源角色,避免照搬「默认任取首组」。 */
1162
1203
  interface StConversionOptions {
1163
1204
  characterId?: string;
@@ -1167,8 +1208,8 @@ interface StOrderGroupSummary {
1167
1208
  characterId: string;
1168
1209
  entries: number;
1169
1210
  }
1170
- /** SillyTavern JSON 预设卡片 → 本项目 PresetSpec(导入端点直接消费)。 */
1171
- declare function convertStToPreset(card: unknown, baseName: string, options?: StConversionOptions): PresetSpec;
1211
+ /** SillyTavern JSON 预设卡片 → 本项目 ModuleSpec(导入端点直接消费)。 */
1212
+ declare function convertStToPreset(card: unknown, baseName: string, options?: StConversionOptions): ModuleSpec;
1172
1213
  /** ST 导入预设 id:必须是官方 agent-presets 可发现的目录名(PRESET_ID =
1173
1214
  * /^[a-z0-9][a-z0-9-]*$/——含中文的目录会被宿主 discovery 静默跳过,会话
1174
1215
  * resume 报 preset not found)。文件名 slug 化(去中文);纯中文名退化为
@@ -1179,7 +1220,7 @@ declare function stPresetId(baseName: string): string;
1179
1220
  type PreparedImport = {
1180
1221
  state: 'ready';
1181
1222
  kind: ImportKind;
1182
- spec: PresetSpec;
1223
+ spec: ModuleSpec;
1183
1224
  yaml: string;
1184
1225
  files: AssetFile[];
1185
1226
  sourceName: string;
@@ -1199,7 +1240,7 @@ type PreparedImport = {
1199
1240
  /** 字节集合 → 同一规范化候选;没有目标写入和静默的未知 JSON 回退。 */
1200
1241
  declare function prepareImport(input: AssetFile[], target: 'preset' | 'character', choices?: ImportChoices): PreparedImport;
1201
1242
  //#endregion
1202
- //#region src/host/preset-package.d.ts
1243
+ //#region src/host/module-package.d.ts
1203
1244
  declare function expandPresetSource(input: AssetFile[]): Promise<AssetFile[]>;
1204
1245
  type ReadyImport = Extract<ReturnType<typeof prepareImport>, {
1205
1246
  state: 'ready';
@@ -1223,11 +1264,12 @@ declare function exportPresetPackage(root: string, request: PresetExportRequest)
1223
1264
  * 插件不再内置任何技能:包内没有 skills 目录,也不再有安装副本与内容账本。 */
1224
1265
  declare const USER_SKILLS_DIR: string;
1225
1266
  /**
1226
- * 预设根:官方 USER_PRESET_DIR(DSH_HOME/.agent-presets)。
1227
- * 每个预设一个官方预设目录(agent.cordis.yml 组合本体 + preset.yml 参数),
1228
- * 宿主 agent-presets 直接可挂载;共享引擎自阶段 2 起由**插件包**提供(组合行写包名说明符),
1229
- * 不再物化到预设根下。
1267
+ * 存储根下的**模块根**:一个模块一个目录(`modules/<id>/`),定义与物化产物都在其内。
1268
+ *
1269
+ * 这是 `resolveModuleDir` / `assertModuleDirectory` / `listModules` 的扫描根,
1270
+ * 也是「本插件管理的模块」身份判定的基准。模块目录必须是它的**直接子目录**
1271
+ * (`assertModuleDirectory` 的一层深度契约由此成立)。
1230
1272
  */
1231
- declare const DEFAULT_PRESET_DIR: string;
1273
+ declare const MODULES_DIR: string;
1232
1274
  //#endregion
1233
- export { ENGINE_RECIPES as $, resolvePresetParams as A, MAX_CHARACTER_CARD_STREAM_BYTES as B, loadPresetSpec as C, renderComposition as D, removeUserPreset as E, BridgeEndpoint as F, SkillPolicyChange as G, SkillCatalogEntry as H, BridgeErrorPayload as I, SkillsCatalogSnapshot as J, SkillPolicyScope as K, BridgeRequestMap as L, savePresetPersona as M, userPresetsDir as N, resolvePresetDir as O, BRIDGE_ENDPOINTS as P, ENGINE_CAPABILITIES as Q, BridgeValueMap as R, listPresets as S, removePresetModule as T, SkillContentSnapshot as U, SETTINGS_BRIDGE_PREFIX as V, SkillInvocation as W, invocationForScope as X, SkillsState as Y, scopeOfInvocation as Z, buildModuleConfigsFromParams as _, installPresetPackage as a, isEngineCapabilityPresent as at, ensurePresetSeed as b, convertStToPreset as c, ImportChoices as ct, stPresetId as d, InstructionFileSnapshot as dt, EngineCapability as et, EngineCapabilityCreateRequest as f, InstructionFileStatus as ft, applyModuleConfigs as g, PresetSpec as h, exportPresetPackage as i, engineRecipe as it, savePresetParams as j, resolvePresetModuleFacts as k, mergeStPresets as l, INSTRUCTION_FILE_STATUSES as lt, EngineCapabilityRemoveResult as m, USER_SKILLS_DIR as n, PresetModuleFacts as nt, presetImportPreview as o, validateCustomToolIdentities as ot, EngineCapabilityCreateResult as p, MAX_INSTRUCTION_FILE_BYTES as pt, SkillSourceKind as q, expandPresetSource as r, engineCapability as rt, StConversionOptions as s, AssetFile as st, DEFAULT_PRESET_DIR as t, ModuleSourceMode as tt, processStText as u, InstructionContextView as ut, cloneBuiltinPreset as v, removeEngineCapabilityFromPreset as w, listBuiltinTemplates as x, createEngineCapabilityInPreset as y, MAX_BRIDGE_BODY_BYTES as z };
1275
+ export { AssetFile as $, resolveModuleFacts as A, MAX_BRIDGE_BODY_BYTES as B, loadModuleSpec as C, removeUserPreset as D, removePresetModule as E, BRIDGE_ENDPOINTS as F, SkillInvocation as G, SETTINGS_BRIDGE_PREFIX as H, BridgeEndpoint as I, SkillSourceKind as J, SkillPolicyChange as K, BridgeErrorPayload as L, saveModuleParams as M, savePresetPersona as N, renderComposition as O, userModulesDir as P, scopeOfInvocation as Q, BridgeRequestMap as R, listModules as S, removeEngineCapabilityFromPreset as T, SkillCatalogEntry as U, MAX_CHARACTER_CARD_STREAM_BYTES as V, SkillContentSnapshot as W, SkillsState as X, SkillsCatalogSnapshot as Y, invocationForScope as Z, buildModuleConfigsFromParams as _, installPresetPackage as a, MAX_INSTRUCTION_FILE_BYTES as at, ensurePresetSeed as b, convertStToPreset as c, EngineCapability as ct, stPresetId as d, engineCapability as dt, ImportChoices as et, EngineCapabilityCreateRequest as f, engineRecipe as ft, applyModuleConfigs as g, ModuleSpec as h, exportPresetPackage as i, InstructionFileStatus as it, resolvePresetParams as j, resolveModuleDir as k, mergeStPresets as l, ModuleFacts as lt, EngineCapabilityRemoveResult as m, validateCustomToolIdentities as mt, USER_SKILLS_DIR as n, InstructionContextView as nt, presetImportPreview as o, ENGINE_CAPABILITIES as ot, EngineCapabilityCreateResult as p, isEngineCapabilityPresent as pt, SkillPolicyScope as q, expandPresetSource as r, InstructionFileSnapshot as rt, StConversionOptions as s, ENGINE_RECIPES as st, MODULES_DIR as t, INSTRUCTION_FILE_STATUSES as tt, processStText as u, ModuleSourceMode as ut, cloneBuiltinPreset as v, moduleDirExists as w, listBuiltinTemplates as x, createEngineCapabilityInPreset as y, BridgeValueMap as z };
@@ -1,2 +1,2 @@
1
- import { i as exportPresetPackage, r as expandPresetSource, t as DEFAULT_PRESET_DIR } from "./paths-CY5psBqE.mjs";
2
- export { DEFAULT_PRESET_DIR, expandPresetSource, exportPresetPackage };
1
+ import { i as exportPresetPackage, r as expandPresetSource, t as MODULES_DIR } from "./paths-BgL42sSM.mjs";
2
+ export { MODULES_DIR, expandPresetSource, exportPresetPackage };
@@ -1,2 +1,2 @@
1
- import { Zt as DEFAULT_PRESET_DIR, n as exportPresetPackage, t as expandPresetSource } from "./preset-package-BnJqrU4R.mjs";
2
- export { DEFAULT_PRESET_DIR, expandPresetSource, exportPresetPackage };
1
+ import { n as exportPresetPackage, rn as MODULES_DIR, t as expandPresetSource } from "./module-package-Cm3fHHlp.mjs";
2
+ export { MODULES_DIR, expandPresetSource, exportPresetPackage };