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.
- package/README.md +58 -50
- package/engine/character-tools.mjs +3 -6
- package/engine/compositions/library/agent-instructions.yml +1 -1
- package/engine/compositions/library/command-goal.yml +1 -1
- package/engine/compositions/library/compaction.yml +1 -1
- package/engine/compositions/library/delegation-ptc.yml +1 -1
- package/engine/compositions/library/delegation.yml +1 -1
- package/engine/compositions/library/persistent-shell.yml +1 -1
- package/engine/compositions/library/planning.yml +1 -1
- package/engine/compositions/library/skill-filesystem-cordis.yml +1 -1
- package/engine/compositions/library/skill-filesystem.yml +1 -1
- package/engine/compositions/library/tool-ask-user.yml +1 -1
- package/engine/compositions/library/tool-bash.yml +1 -1
- package/engine/compositions/library/tool-cordis.yml +1 -1
- package/engine/compositions/library/tool-fs-search.yml +1 -1
- package/engine/compositions/library/tool-fs.yml +1 -1
- package/engine/compositions/library/tool-goal.yml +1 -1
- package/engine/compositions/library/tool-jobs.yml +1 -1
- package/engine/compositions/library/tool-plugin-manager-disabled.yml +1 -1
- package/engine/compositions/library/tool-plugin-manager.yml +1 -1
- package/engine/compositions/library/tool-present.yml +1 -1
- package/engine/compositions/library/tool-presentation.yml +1 -1
- package/engine/compositions/library/tool-pwsh.yml +1 -1
- package/engine/compositions/library/tool-skill.yml +1 -1
- package/engine/compositions/library/tool-todo.yml +1 -1
- package/engine/compositions/library/tool-web.yml +1 -1
- package/engine/compositions/source/local/prompt-config-engine.yml +1 -1
- package/engine/executor.mjs +39 -26
- package/engine/instruction-hint.mjs +6 -2
- package/engine/layers.mjs +38 -30
- package/engine/order.mjs +17 -0
- package/engine/schema.mjs +16 -6
- package/engine/session-var-tools.mjs +3 -6
- package/engine/st-render.mjs +8 -4
- package/engine/subagent-tool-policy.mjs +25 -10
- package/engine/world-book-tools.mjs +3 -6
- package/lib/client.js +3451 -3519
- package/lib/client.js.map +1 -1
- package/lib/index.d.mts +233 -272
- package/lib/index.mjs +1020 -1226
- package/lib/{preset-package-BnJqrU4R.mjs → module-package-Cm3fHHlp.mjs} +997 -594
- package/lib/{paths-CY5psBqE.d.mts → paths-BgL42sSM.d.mts} +191 -149
- package/lib/preset-transfer.d.mts +2 -2
- package/lib/preset-transfer.mjs +2 -2
- package/modules/ponytail/configs/0000-ponytail-rules.yml +102 -0
- package/modules/ponytail/configs/0010-ponytail-level-full.yml +19 -0
- package/modules/ponytail/configs/0020-ponytail-level-lite.yml +19 -0
- package/modules/ponytail/configs/0030-ponytail-level-ultra.yml +19 -0
- package/modules/ponytail/module.yml +172 -0
- package/package.json +46 -80
- package/templates/20-system-section.yml +4 -1
- package/templates/70-subagent-maintenance.yml +1 -1
- package/templates/tools/50-delegate-worldbook.yml +1 -1
- package/preset/pt-cordis/preset.yml +0 -43
- package/preset/pt-cordis/skills/cordis-composition-reference/SKILL.md +0 -29
- package/preset/pt-cordis/skills/cordis-composition-reference/references/packages.md +0 -501
- package/preset/pt-cordis/skills/cordis-plugin-development/SKILL.md +0 -38
- package/preset/pt-cordis/skills/cordis-plugin-development/references/host-plugin.md +0 -60
- package/preset/pt-cordis/skills/cordis-plugin-development/references/mcp-bundle.md +0 -5
- package/preset/pt-cordis/skills/cordis-plugin-development/references/ui-plugin.md +0 -13
- package/preset/pt-cordis/skills/cordis-plugin-development/references/verification.md +0 -5
- package/preset/pt-cordis/skills/cordis-plugin-development/templates/decoration/client.js +0 -22
- package/preset/pt-cordis/skills/cordis-plugin-development/templates/decoration/cordis.patch.yml +0 -3
- package/preset/pt-cordis/skills/cordis-plugin-development/templates/decoration/index.js +0 -2
- package/preset/pt-cordis/skills/cordis-plugin-development/templates/decoration/package.json +0 -15
- package/preset/pt-cordis/skills/cordis-plugin-development/templates/mcp/cordis.patch.yml +0 -8
- package/preset/pt-cordis/skills/cordis-plugin-development/templates/mcp/package.json +0 -7
- package/preset/pt-cordis/skills/editing-cordis-compositions/SKILL.md +0 -84
- package/preset/pt-custom/preset.yml +0 -15
- package/preset/pt-minimal/preset.yml +0 -27
- package/preset/pt-ptc/preset.yml +0 -45
- package/preset/pt-standard/preset.yml +0 -43
package/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
> 一切皆可注入:把 DSH 官方开放的全部注入层级收敛为一个可配置提示词注入引擎——注入什么、注入到哪一层、何时注入,全由提示词配置决定。
|
|
4
4
|
|
|
5
|
-
DSH
|
|
5
|
+
DSH 生态的提示词注入层:`prompt-config-engine.mjs` 对接九个官方插入点,把可叠加的注入方案保存在各自模块中。包内模块库提供复制起点;模块不注册为官方会话预设。
|
|
6
6
|
|
|
7
|
-
> 能力来源:工具目录锚定与晋升门控移植自 [dsh-anchored-standard](https://github.com/xiaobright/dsh-anchored-standard)(MIT,上游已于 2026-09-10 冻结),近距离引导参考 [dsh-router-standard](https://github.com/yjh051108/dsh-router-standard),缓存铁律参考 [dsh-super-injector](https://github.com/yjh051108/dsh-super-injector)
|
|
7
|
+
> 能力来源:工具目录锚定与晋升门控移植自 [dsh-anchored-standard](https://github.com/xiaobright/dsh-anchored-standard)(MIT,上游已于 2026-09-10 冻结),近距离引导参考 [dsh-router-standard](https://github.com/yjh051108/dsh-router-standard),缓存铁律参考 [dsh-super-injector](https://github.com/yjh051108/dsh-super-injector)。**本项目只移植引擎能力,不再分发上游预设**:锚定/深思链路由模块与规则按需声明。
|
|
8
8
|
|
|
9
9
|
## 安装
|
|
10
10
|
|
|
@@ -28,38 +28,40 @@ dsh --profile prompt-tool
|
|
|
28
28
|
|
|
29
29
|
### 当前格式与宿主要求
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
模块行为存于 `module.yml`。当前公开共享参数与旧规则快捷参数分开管理:旧快捷参数只经统一适配器投影到规则,保存规则时清理已有承接的旧键;无承接的值保留并告警。
|
|
32
32
|
|
|
33
33
|
技能调用策略只接受官方 frontmatter 键,状态文件只接受 v4;不提供旧布局迁移、回滚或备份脚本。
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
只有 `dsh-base` 的 profile 缺少 Web 能力时,插件仅报告诊断;所需 bundle 由官方插件管理流程装配,插件不改写 profile 或重启服务。
|
|
36
36
|
|
|
37
|
-
需要 DSH `0.
|
|
37
|
+
需要 DSH `0.2.0-rc.1+`(Cordis `4.0.4`):设置接入 ConfigForms,模块定义与物化文件保存在插件自己的存储根 `$DSH_HOME/.prompt-tool/`(宿主从不扫描该目录),运行时装配由插件的配装通道在每个 Agent 的 scope 里完成,**按存储根 `config.yml` 的启用表逐模块装配**。官方组合模块快照随包分发(`engine/compositions/library/`),不再从官方预设同步——那套生成器已随内置预设目录退场。Node 需要 `^22.19.0 || >=24.0.0`,与官方宿主一致。升级后需要用户重启 DSH 服务。
|
|
38
|
+
|
|
39
|
+
`peerDependencies` 里的 `@deepseek-ai/dsh-*` 声明为 `>=0.2.0-rc.1`(无上界):宿主在加载插件时会逐条校验这些 peer,范围写死到某个次版本会让每次宿主升版都判为不兼容;这个范围覆盖 0.2.0 及以上,同时把已知不兼容的更早版本挡在外面。实际锁定的版本以 `pnpm-lock.yaml` 为准。`minimumReleaseAgeExclude` 由 pnpm 维护——安装时 pnpm 会把 lockfile 拿去比对供应链策略,因此升级 DSH 后跑一次 `pnpm install` 即可,不要手工逐条增删。
|
|
38
40
|
|
|
39
41
|
## 特性
|
|
40
42
|
|
|
41
|
-
- 🔌
|
|
43
|
+
- 🔌 **九个官方插入点按需接线**:一个引擎接入声明所需的插入点,共享同一套过滤与降级语义
|
|
42
44
|
- ✍️ **一切皆可配置**:`layer / strategy / position / promotion / audience / modelScope / mergeMode / order / text / texts / fill / variables / params` 全开放
|
|
43
45
|
- 🧑🤝🧑 **消息受众三态**:`audience: main / subagent`,省略 `audience` 表示公用;身份类提示词可只注入子代理
|
|
44
|
-
- 🗂️
|
|
46
|
+
- 🗂️ **内容与执行分离**:每条提示词配置物化为 `~/.dsh/.prompt-tool/modules/<模块>/configs/` 下的 yml;`module.yml.configOrder` 保存轻量序号,文件名前缀由它生成
|
|
45
47
|
- 🧩 **三层合并**:引擎默认(按 params 生成)< 模板默认 promptConfigs < 预设 promptConfigs,同名 `id` 覆盖
|
|
46
|
-
- 🖥️ **可拖动悬浮工作台入口**:工作台经官方 `shell.overlay` 渲染悬浮触发器与 body portal 抽屉;按钮可拖动、位置存插件自己的 localStorage、窗口变化自动夹回可见区(不读宿主布局树,已移除 `sidebar.footer.action`
|
|
48
|
+
- 🖥️ **可拖动悬浮工作台入口**:工作台经官方 `shell.overlay` 渲染悬浮触发器与 body portal 抽屉;按钮可拖动、位置存插件自己的 localStorage、窗口变化自动夹回可见区(不读宿主布局树,已移除 `sidebar.footer.action` 几何探针);五页(主会话/子代理/工具预览/技能设置/模块)在抽屉内渲染,抽屉用 fixed + z-index 置顶,不被宿主导航栏遮挡
|
|
47
49
|
- 🧪 **六种内容策略**:`static / first-turn-anchor / guide-auto / custom-fallback / placeholder / world-book`(world-book 支持 ST selectiveLogic 选择性触发:任一/副键全中/排除)
|
|
48
50
|
- 🛡️ **失败不伤会话**:单条失败跳过 + `warnOnce`;配置错误挂载时 fail loud;`dedupe: session` 持久幂等
|
|
49
|
-
- 🧭 **通用 instruction-hint
|
|
51
|
+
- 🧭 **通用 instruction-hint 引擎**:模块可通过 `strategy: placeholder` 与 `fill: instruction-hint` 提示指令文件存在;实现位于 `engine/instruction-hint.mjs`。`layerSettings.pre-step.instructionHint` 可启用该能力,按模型可见 surface 去重,重挂不重复,被压缩遮蔽后才再次提示
|
|
50
52
|
- 📦 **Bridge 载荷**:JSON 请求统一 32 MiB 硬上限并明确返回 413;角色卡原始图片走 64 MiB 流式通道,按 PNG 魔数识别。
|
|
51
53
|
- 📂 **技能管理**:官方发现与会话快照统一技能来源、生效和遮蔽状态;单端开关写回技能文件。支持目录包与直属 Markdown 技能、创建、两种复制导入,以及用户根和引用根的可恢复删除;技能局部刷新保留其他页面草稿。
|
|
52
54
|
- 🎭 **SillyTavern 导入**:JSON 预设、角色卡和独立世界书转换为本地预设——按官方顺序表保留启停,赋值模板运行时求值;不等价能力明确报告,采样参数由宿主管理
|
|
53
55
|
- 🎴 **角色卡库**:PNG/JSON/YAML 角色卡与原生角色片段经统一预览后逐张入库;PNG 保留原图,更新保留角色记忆,按需应用到当前预设。
|
|
54
56
|
- 📦 **预设交换**:文件夹、ZIP、原生 JSON/YAML 与 ST 来源共用识别、预览和完整候选安装;导出可选完整 ZIP 或仅定义 YAML。资源、覆盖及分享边界见 [资产交换文档](docs/asset-transfer.md)。
|
|
55
57
|
- 📚 **世界书**:`character_book` 转 world-book 策略配置(`keys` 命中触发 / `constant` 常驻 / 正则键自动检测 / `selectiveLogic` 组合逻辑),与模块卡片同一存储与编辑(模块列表「世界书」过滤 + 批量启用/禁用)
|
|
56
|
-
- 🛠️ **自定义工具**:
|
|
57
|
-
- 🛡️ **子代理工具策略**:
|
|
58
|
+
- 🛠️ **自定义工具**:module.yml `customTools` 段声明式定义模型工具(执行器 shell/http/delegate/fs/ask-user,`{{args.x}}` 参数插值);参数与输出经官方 `dsh-tools` 转换器物化为标准 JSON Schema,非法参数产生标准工具错误,delegate 经 `ctx.tools.execute` 嵌套调度走完整官方工具管线;`customTools.scope` 暂不支持(显式拒绝)
|
|
59
|
+
- 🛡️ **子代理工具策略**:module.yml 顶层 `subagentToolPolicy` 段(opt-in)声明 ceiling、profiles、角色卡绑定、有序任务规则与受控模型扩权;`subagent` 固定走 spawn、`subagent_fork` 固定走 fork,按官方 `SubagentRun`/continuable 契约创建并在窗口内冻结 toolFilter;模型选择器和扩权参数在工具 body 前校验,模型路由经过 LLM preflight;UI 从官方 sessions snapshot 读取当前会话,并可编辑、停用、预览策略及查询存活 Agent 工具面
|
|
58
60
|
- ♻️ **Session 日志读取**:引擎冷启动与幂等扫描统一走官方 `session.snapshotEvents()`(DSH `0.1.2-alpha.4+`),不再读取已移除的 `session.events` 数组。
|
|
59
61
|
- 🧩 **模板变量**:仅从预设顶层 `variables` 段提供 `{{key}}` 插值默认值,单条提示词配置的 `variables` 可局部覆盖——模块列表顶部「模板变量」卡片统一编辑(可折叠/清空/停用/失焦自动保存)。`params` 中的旧内容变量及 `params.variables` 不再读取,也不自动迁移;旧预设需自行整理到顶层后重新物化。锚定匹配引擎(anchor-match)统一 custom-fallback 与 world-book 的匹配语义
|
|
60
62
|
- 💬 **会话变量工具**:`session_var`(list/get/set/clear)——模型维护角色状态(`{{心情}}` 等),会话级覆盖预设默认;ST 运行时宏(`{{lastusermessage}}` / `{{lastcharmessage}}`)从会话事件提取
|
|
61
63
|
- 🧩 **工具按模块装配**:角色卡、世界书、会话变量、自定义工具分别由 `character-tools` / `world-book-tools` / `session-var-tools` / `tool-config-engine` 模块提供;不再维护重复的顶层工具开关
|
|
62
|
-
- 📐
|
|
64
|
+
- 📐 **显式按需装配**:空模块不自动附加增强能力;模块人设来自顶层 `persona`,官方工具与普通委派仍由会话原有预设提供。首轮门控、来源过滤、工具名单、深思门与进度节拍可由模块顶层 `triggers` 按需声明,物化为 `triggers.yml` 后由 `declared-triggers` 读入;声明错误在保存或挂载期明确报告。
|
|
63
65
|
|
|
64
66
|
## Web 客户端结构
|
|
65
67
|
|
|
@@ -71,25 +73,27 @@ Web 客户端按四层组织:
|
|
|
71
73
|
|
|
72
74
|
```text
|
|
73
75
|
src/client/
|
|
74
|
-
├─ app/ # SlotRegistry owner
|
|
76
|
+
├─ app/ # SlotRegistry owner、工作台壳与五页组合
|
|
75
77
|
├─ data/ # typed bridge、Fields、状态 facade、保存与脏检测纯逻辑
|
|
76
78
|
├─ features/ # prompts / tools / subagents / skills / presets / characters
|
|
77
79
|
└─ ui/ # 仅 props/callback 的共享交互与 CSS Modules
|
|
78
80
|
```
|
|
79
81
|
|
|
80
|
-
依赖方向固定为 `app → features → data/ui → shared contract`:跨领域组合只在 `app/workspace/pages/`,feature 不导入其他 feature
|
|
82
|
+
依赖方向固定为 `app → features → data/ui → shared contract`:跨领域组合只在 `app/workspace/pages/`,feature 不导入其他 feature 内部实现。控件由插件持有,不运行时加载 Harness Client 包;官方能力通过 Cordis 服务与 slot 接入,类型依赖保留。Client bridge 使用 `src/shared/bridge-contract.ts` 的 endpoint key 与 request/value map。样式按 owner 拆分,只共享 `--dsw-alias-*` 主题颜色,安装和释放随插件生命周期。
|
|
83
|
+
|
|
84
|
+
角色卡与世界书模型工具写入**该执行 Agent 实际配装的提示词层**(启用表 ∩ 磁盘,多个时取启用表第一个),不查询会话绑定的官方预设。保存等待物化完成;已保存但未生效会明确返回失败。失败定义保留诊断,方便修复。
|
|
81
85
|
完整的当前目录、slot 生命周期、状态边界、可访问性和维护约束见 [Web 客户端 UI 结构框架](docs/ui-architecture.md)。
|
|
82
86
|
|
|
83
87
|
### 配置卡与工具预览
|
|
84
88
|
|
|
85
|
-
-
|
|
89
|
+
- 五页工作台保留搜索、展开和滚动位置;工具、人设、策略以及非法 JSON/数字输入可跨页继续编辑。存在未保存草稿时,模块切换会提示先处理,不会无声覆盖。
|
|
86
90
|
- 配置保存与校验位于长列表操作区,失败就近显示;低频卡片操作收进菜单,删除和丢弃文件草稿需明确确认。窄容器自动换行,键盘操作、明暗主题和减弱动效均沿用宿主规范。
|
|
87
91
|
|
|
88
92
|
- 参数在模块列表的配置卡内编辑。引擎能力按实际 `modules` 装配显示,一项已装配能力一张卡,直接编辑自身参数;删除只移除该能力的模块声明。共享参数定义继续拥有字段、校验、默认草稿、保存快照和组合行映射。主/子代理模型保留专用配置卡。
|
|
89
93
|
- 「指令提示」统一通过「前置步骤 → 内容策略:动态填充 → 填充来源:指令提示」编辑,不再作为独立策略入口。指令文件正文和授权保存仍归独立文件通道,不复制进预设。
|
|
90
|
-
- AGENTS.md / CLAUDE.md
|
|
94
|
+
- AGENTS.md / CLAUDE.md 这类指令文件复用普通配置卡组件,保留名称、路径、正文和后续官方注入的启停;位置、顺序、晋升、受众与模型范围由官方负责,不提供文件卡控制项。名称和启停落独立指令策略,正文就地编辑、**焦点离开卡片时自动写回原文件**(版本冲突保留草稿并提供「重新读取」,没有单独的保存按钮)。
|
|
91
95
|
- 创建菜单始终提供全部层级模板、工具和可添加能力,不受当前列表筛选限制。创建后只展开目标卡片(当它落在当前筛选视野内),不改动层级筛选与搜索词;同一提示词模板可重复创建,自动分配不重复标识。空内容不等于删除,保存和后台刷新保留未完成草稿;工具草稿在层级/世界书筛选往返时不丢失。
|
|
92
|
-
-
|
|
96
|
+
- 插件装配自身工具能力,官方文件系统与编辑工具仍由宿主预设提供。自定义模型工具经「添加能力 / 工具模块 → 添加工具模板 / 新建空白工具」配置名称、描述、参数、输出与执行器,保存前完整校验;不安装、连接或管理外部 MCP/DSH 插件。
|
|
93
97
|
- 「工具预览」是独立顶层页,参照官方插件目录:顶部统一搜索、可折叠分组、右侧预设选择、双列展开详情卡,窄屏单列。卡片显示「模型可见」,不伪造插件运行状态。当前会话与所选预设分别读取:既有会话仍使用冻结 generation,修改预设只影响后续 generation;不会隐藏同名自定义工具或自动恢复会话。
|
|
94
98
|
- 在工具链的 `tool-config-engine` 能力卡中配置哪些自定义执行器需要用户批准;缺少批准服务时拒绝执行。生成目录保持只读,仍由预设重建产生。
|
|
95
99
|
|
|
@@ -104,40 +108,45 @@ src/client/
|
|
|
104
108
|
`v2` 已按当前 `app / data / features / ui` 客户端结构更新,并通过 showcase 9/9 校验;无 `v2` 后缀的文件保留为首轮构图记录。本轮已使用 Microsoft Edge 完成 visual-check:containment/captures 均通过,保留 1440×900 与 2048×1320 的明暗截图及联系页;自动收据的 `visualReview` 仍为 `pending`,仅表示需要人工查看截图,不代表渲染失败。
|
|
105
109
|
|
|
106
110
|
|
|
107
|
-
##
|
|
111
|
+
## 模块参数体系
|
|
108
112
|
|
|
109
|
-
|
|
110
|
-
初始化直接按同名复制:缺哪个目录只补哪个,已有目录不覆盖,也不运行时探测官方名称或重命名。
|
|
111
|
-
用户保存时以当前预设自身的 `preset.yml` 生成运行产物;现有用户预设不自动改名。
|
|
113
|
+
初始化从包内 `modules/` 补建缺失的同名模块,已有目录不覆盖。保存与重建统一通过 `materializeModule` 读取目标模块自己的定义和正文,不借用工作台另一个模块的运行时副本。
|
|
112
114
|
|
|
113
|
-
|
|
115
|
+
部署 Config 只保留 `writePreset`,含义是模块运行总闸:关闭仅撤回运行贡献,不清空文件。`presetOrder`、`fallbackText` 和 `presetTemplate` 不再是部署设置;编辑目标通过请求头 `x-module-id` 传递,不切换或跟随官方会话预设。
|
|
116
|
+
|
|
117
|
+
模块行为由一份 `module.yml` 下发,参数所有者各自独立:
|
|
114
118
|
|
|
115
119
|
| 层 | 职责 |
|
|
116
120
|
|---|---|
|
|
117
|
-
| `layerSettings.<层名>` |
|
|
121
|
+
| `layerSettings.<层名>` | 模块共享参数;磁盘归属由参数目录的 `storageLayer` 固定,不随 UI 分组改变 |
|
|
118
122
|
| `moduleConfigs` | 行级 config 直写通道(参数桥未覆盖的键:超时/环境白名单/ST 导入等),不锁定覆盖 UI 可管理参数 |
|
|
119
123
|
| `promptConfigs` | 独立命名的注入规则,`params` 仅属于该规则;与预设默认及生成配置按 id 合并 |
|
|
124
|
+
| `configOrder` | 配置 ID 到序号的轻量映射;正文仍属于各自配置,文件名前缀由此物化 |
|
|
120
125
|
|
|
121
126
|
### 共享参数一览(全部可选,缺省按对应模块解释)
|
|
122
127
|
|
|
123
128
|
| 分类 | 键 |
|
|
124
129
|
|---|---|
|
|
125
|
-
|
|
|
126
|
-
|
|
|
127
|
-
|
|
|
128
|
-
|
|
|
129
|
-
|
|
|
130
|
+
| 主模型 | `modelProvider` `modelName` `modelReasoningEffort` `modelTemperature` `modelMaxTokens` |
|
|
131
|
+
| 子模型 | `subagentModelProvider` `subagentModelName` `subagentReasoningEffort` `subagentTemperature` `subagentMaxTokens` |
|
|
132
|
+
| 策略深度 | `maxDepth`,只约束已启用的插件子代理工具策略;普通官方委派由宿主管理 |
|
|
133
|
+
| 指令提示 | `instructionHint`,默认关闭 |
|
|
134
|
+
| 工具 | `toolGitBashEnabled` `customToolRequireApproval` |
|
|
135
|
+
|
|
136
|
+
以上共 14 个公开共享参数。锚定、引导及正文注入的 15 个旧快捷键由 `host/legacy-prompt-params.ts` 读取兼容,投影到 `near-anchor`、`router-guide`、`prompt-injector` 规则;新编辑器直接编辑规则。成功保存规则时清理已有承接的旧键,无承接的旧值保留并告警,旧 `fieldSources` 不再锁住这些规则字段。编辑器输出上限 `strReplaceEditorMaxOutputChars` 已退出插件参数面,由宿主工具配置负责。
|
|
130
137
|
|
|
131
138
|
> 首轮工具面与输出封顶、`stages` 式阶段窄化、pre-step 来源名单、常驻工具白/黑名单、锚句、深思门与进度节拍都没有共享参数键:它们改由预设顶层 `triggers` 段声明(示例见 [engine 复用指南](docs/engine-reuse.md))。其中 `stages` 阶段窄化与「晋升后才切 PTC 呈现」是本轮的两项净损失;子代理工具面只能由 `subagentToolPolicy` 实例策略授权。
|
|
132
139
|
|
|
133
|
-
|
|
140
|
+
AGENTS.md 走「文件即真相」:文件集合、正文与版本不物化进生成目录,而是由宿主按本会话工作区现场解析(`$DSH_HOME/AGENTS.md` + 工作区 cwd→项目根链的 AGENTS.md/CLAUDE.md/AGENTS.local.md/CLAUDE.local.md);工作台中的文件卡指向原文件,卡片定义与正文都不进 `module.yml`。插件不写常驻受管块。
|
|
134
141
|
|
|
135
|
-
|
|
142
|
+
官方指令注入与逐文件开关:
|
|
136
143
|
|
|
137
|
-
-
|
|
138
|
-
-
|
|
139
|
-
-
|
|
140
|
-
-
|
|
144
|
+
- 官方 `@deepseek-ai/dsh-agent-instructions` 负责发现、读取、预算、更新与压缩恢复,预设须保留官方指令行;插件只在消息进入会话前过滤,不再自行注入文件正文。文件可读不代表已经注入。
|
|
145
|
+
- 指令文件卡保留名称、正文编辑和启停;关闭只拦截该文件**后续**的官方注入,历史正文不撤回,重新开启不强制重放。首次请求前关闭即可阻止可识别文件进入新历史;开关不阻止官方读取文件。
|
|
146
|
+
- `$DSH_HOME/.prompt-tool/instructions.yml` 只保存 `files[fileId].enabled` 与 `name`,跨预设共享,**默认放行**。不再提供「独立指令文件来源」总开关或文件级位置、顺序、晋升、受众、模型范围;自定义消息仍用普通前置步骤配置。
|
|
147
|
+
- 旧策略顶层 `enabled` / `defaults` 及文件级注入参数读取时忽略、下一次成功保存时清理;旧顶层关闭不会转换为逐文件关闭。`module.yml#agentsHints` 仍不生效,策略缺失不因读取自动创建。
|
|
148
|
+
- 过滤覆盖官方基线、附加、更新和移除消息,并同步对应 `source.changes`。无法可靠分段的官方内容原样放行并诊断;不识别的文件身份也保持官方内容,不新增远程来源管理。已被官方预算省略的内容不由插件补回。
|
|
149
|
+
- 预设级 `instructionHint` 保持可选、默认关闭;启用后先过滤,再把剩余符合条件的官方全文转换为路径提示。它不替换已经进入历史的全文。决策边界见 [ADR-0004](docs/adr/0004-official-instruction-filter.md)。
|
|
141
150
|
|
|
142
151
|
指令文件正文属于用户自己的文件,不受预设生命周期管辖。工作台按**打开时解析出的会话工作区**读取文件快照(正文 + 文件身份 + 字节版本 + 读取状态一次取回),正文在**焦点离开卡片**(或列表「保存」)时写回原文件:
|
|
143
152
|
|
|
@@ -146,14 +155,14 @@ src/client/
|
|
|
146
155
|
- 读取失败(不可读/超限/文件消失)与「读取成功的空文件」严格区分:前者不可编辑、不可保存,不用空正文掩盖错误。
|
|
147
156
|
- 原子写入(tmp + rename,保留原权限),失败保留原文件并清理临时文件;正文不受预设变量插值影响。
|
|
148
157
|
|
|
149
|
-
|
|
158
|
+
模型参数按模块独立保存,不自动回写宿主全局默认。主模型参数作用于主会话请求;子模型 provider/name 与采样参数作用于本地子代理的实际请求,不改写普通官方委派的 spawn 预检。
|
|
150
159
|
|
|
151
160
|
| 段 | 键 |
|
|
152
161
|
|---|---|
|
|
153
162
|
| `layerSettings.agent-request`(主对话) | `modelProvider` `modelName` `modelReasoningEffort` `modelTemperature` `modelMaxTokens` |
|
|
154
163
|
| `layerSettings.subagent-start`(子代理) | `subagentModelProvider` `subagentModelName` `subagentReasoningEffort` `subagentTemperature` `subagentMaxTokens` `maxDepth` |
|
|
155
164
|
|
|
156
|
-
读取当前结构后展平到内部 EngineParams
|
|
165
|
+
读取当前结构后展平到内部 EngineParams,保存只更新 `storageLayer` 指定的层。旧顶层 `params` / 模型段不参与运行参数,规则快捷键的兼容范围见[参数框架](docs/architecture-params.md)。人设独立写在顶层 `persona` 段,由模块配装通道在 Agent scope 注册。示例:
|
|
157
166
|
|
|
158
167
|
```yaml
|
|
159
168
|
persona:
|
|
@@ -165,9 +174,9 @@ persona:
|
|
|
165
174
|
|
|
166
175
|
工作台「模型路由」卡顶部另有**当前会话**区(仅主对话作用域):显示活动会话的模型/思维程度(会话 `modelSelection` 投影,缺省回退宿主默认),模型下拉展示全部可用模型并按服务商分组,选择模型时自动回写对应服务商;切换走官方 `session.selectModel`——对当前会话立即生效并被宿主持久化为新会话默认,与官方模型选择器双向同源;子代理会话与宿主默认场景不支持会话级切换。预设参数非空时按请求覆盖会话选择(参数桥优先级不变)。
|
|
167
176
|
|
|
168
|
-
|
|
177
|
+
模块编辑选择与官方会话预设独立。切换编辑模块只改变请求目标;未指定目标时由服务端解析默认目录,bootstrap 的模块身份、参数、变量与配置卡来自同一目录。启用哪些模块由 `config.yml.enabled` 决定。
|
|
169
178
|
|
|
170
|
-
> 根目录 [
|
|
179
|
+
> 根目录 [module.yml](module.yml) 覆盖 14 个公开共享参数与九层规则。`pnpm rebuild:preset-template` 从权威契约重建;规则默认关闭,共享参数按需取消注释。
|
|
171
180
|
|
|
172
181
|
## 提示词配置(九个官方插入点)
|
|
173
182
|
|
|
@@ -183,20 +192,20 @@ persona:
|
|
|
183
192
|
| `subagent-start` | `subagent/start` + `Agent.inject` | 子代理事件匹配与注入文本;模型/深度在卡内共享设置 |
|
|
184
193
|
| `subagent-end` | `subagent/end` + 可选 `Agent.inject` | `params.action=observe\|inject-main`,后者投递到所属主会话 |
|
|
185
194
|
|
|
186
|
-
|
|
195
|
+
九个插入点彼此独立,没有跨层全局运行顺序。模块配置在同一插入点、位置内按 `configOrder` 序号排列;`system-section` 与 `runtime-context` 的 `order` 保留官方定位语义。
|
|
187
196
|
UI / 写盘按上表分组;这是展示顺序,不是模型提示词优先级。详细支持字段、限制与官方依据见[九层对照](docs/injection-point-contracts.md)。
|
|
188
197
|
模型实际收到的提示词文本顺序更接近 `system-section → runtime-context → pre-step`;`agent-request` / `llm-stream` / `tool-pipeline` 是控制通道。
|
|
189
198
|
|
|
190
|
-
|
|
199
|
+
主会话与子代理的配置列表沿用原模块页的拖拽按钮样式,也可聚焦按钮后用上下方向键移动。“当前模块”范围保留配置编辑与本模块排序;点击“跨模块排序”后,同一列表显示已启用模块中符合当前受众和筛选的配置摘要,支持跨模块拖拽和上下移,隐藏配置保留原有槽位。进入前保存当前模块配置草稿,字段等草稿未完成时拒绝切换;返回当前模块时重新读取。模块页不再另设排序区。服务端按模块 ID+配置 ID 写回轻量序号,拒绝未知、重复身份和过期版本,不接收正文或任意序号。新启用模块的未编号或冲突配置接在尾部,重复启用保序,详见 [排序决策](docs/adr/0006-module-config-order.md)。
|
|
191
200
|
|
|
192
201
|
- `mergeMode`:`separate`(默认)同位置多条为独立消息;`merged` 同位置拼接为一条
|
|
193
|
-
- `order
|
|
202
|
+
- `order`:官方 system/context 位置、无模块来源的独立引擎与触发器、ST 世界书预算仍保留各自语义,不由排序界面改写
|
|
194
203
|
- 文本插值:`{{key}}` 全层支持——配置/预设 `variables` 优先,ST 运行时宏(lastusermessage 等)次之,内置 `{{DSH_HOME}}/{{WORKSPACE}}/{{CWD}}` 兜底,未注册保留字面(system-section 注册期无会话时运行时宏替换为空,不残留)
|
|
195
204
|
|
|
196
205
|
|
|
197
206
|
## SillyTavern 导入
|
|
198
207
|
|
|
199
|
-
|
|
208
|
+
工作台「模块」页按内容识别原生模块与 SillyTavern 来源;ST JSON/YAML 预设卡片经预览确认后,按注入层级映射为本地模块:
|
|
200
209
|
|
|
201
210
|
- `prompts[]` → `promptConfigs`:system 角色进入 `system-section`,其余进入 `pre-step`;官方 `prompt_order[].order[]` 决定启停与相对顺序,深度位置保留来源并报告降级
|
|
202
211
|
- 采样参数(`temperature` / `openai_max_tokens` / `reasoning_effort`)**剥离**——模型参数统一由「模型设置」UI / 宿主默认管理
|
|
@@ -209,11 +218,11 @@ UI / 写盘按上表分组;这是展示顺序,不是模型提示词优先级
|
|
|
209
218
|
- 角色卡 `extensions.depth_prompt` 保留为一条**默认禁用**的 pre-step 配置(ST 只在群聊自动注入),可在工作台手动启用
|
|
210
219
|
- `modules` 按需装配:`prompt-config-engine` 与上述 ST 管理工具始终存在;含 system-section 时补 `persona`(`complete: false` 允许 system 段生效);含有效世界书条目时补 `world-book-tools`
|
|
211
220
|
|
|
212
|
-
|
|
221
|
+
转换结果是一个普通模块(id 由文件名生成),可在工作台「模块」页的模块列表中直接启用。字段级参数对照与完整示例见 [SillyTavern.md](docs/SillyTavern.md)。
|
|
213
222
|
|
|
214
223
|
### 角色卡(PNG / JSON)与角色卡库
|
|
215
224
|
|
|
216
|
-
|
|
225
|
+
工作台「模块」页的角色卡素材区把角色卡导入**角色卡库**(`~/.dsh/.prompt-tool/.characters/<id>/`):
|
|
217
226
|
|
|
218
227
|
- **PNG**:`ccv3` 优先 / `chara` 兜底;按魔数识别并受限解码,原始文件先暂存、预览确认后入库,保留原图。
|
|
219
228
|
- **JSON/YAML**:支持 ST 角色数据和自包含原生角色片段。批次逐张预览,不把多份来源合并成一张角色卡;所有大小的文件都先预览再提交。
|
|
@@ -243,20 +252,19 @@ UI / 写盘按上表分组;这是展示顺序,不是模型提示词优先级
|
|
|
243
252
|
pnpm install && pnpm build
|
|
244
253
|
pnpm test # 全量契约与行为测试(隔离 cwd 运行):参数契约/注入装配/六插入点/生成链路/引擎语义/组合重建/模型路由/UI 契约/安全边界
|
|
245
254
|
pnpm typecheck && pnpm lint
|
|
246
|
-
pnpm verify:host #
|
|
255
|
+
pnpm verify:host # 官方包范围、安装版本、解析目标、类型/运行时依赖与 Client 模块边界
|
|
247
256
|
pnpm sync:yaml # 刷新 engine/vendor/yaml(生成目录运行时 YAML 解析器)
|
|
248
|
-
pnpm rebuild:composition # 只生成官方切块/变体;source/local 本地源不复制(失败安全)
|
|
249
257
|
```
|
|
250
258
|
|
|
251
259
|
测试由 `scripts/run-tests.mjs` 启动:先跑 build,再以独立临时 cwd 与 TEMP/TMP 启动 Node 内置 test runner,用例路径为绝对路径,避免相对 cwd 的测试污染仓库。
|
|
252
260
|
|
|
253
261
|
依赖升级后的验证顺序:`pnpm install` → `pnpm verify:host` → `pnpm typecheck && pnpm lint` → `pnpm test`。官方源码联调请使用不入库的显式本地 override,不要恢复 `pnpm-workspace.yaml` 里的 `link:` 默认配置。
|
|
254
262
|
|
|
255
|
-
发布类型声明通过 `deps.dts.neverBundle` 引用官方 SDK,不内联其品牌类型与相对模块扩充;公开类型引用的包须声明为生产或 peer 依赖,不能仅存在于 devDependencies。`deps.onlyBundle` 显式约束内联依赖(服务端为空,客户端仅 `clsx
|
|
263
|
+
发布类型声明通过 `deps.dts.neverBundle` 引用官方 SDK,不内联其品牌类型与相对模块扩充;公开类型引用的包须声明为生产或 peer 依赖,不能仅存在于 devDependencies。`deps.onlyBundle` 显式约束内联依赖(服务端为空,客户端仅 `clsx`),新增依赖需重新核对打包边界。客户端仍保留宿主 loader 要求的 CJS 协议,不为消除通用 ESM 建议而切换格式。
|
|
256
264
|
|
|
257
265
|
## 排障:插件未加载时
|
|
258
266
|
|
|
259
|
-
启动日志出现 `dsh: skipping profile bundle "dsh-plugin-prompt-tool"`
|
|
267
|
+
启动日志出现 `dsh: skipping profile bundle "dsh-plugin-prompt-tool"` 时,插件整体未加载,预设种子补建也不会运行。插件启动只诊断缺失 Web 能力,不写 profile manifest 或修复包链接。按顺序检查:
|
|
260
268
|
|
|
261
269
|
1. **看 bundles 列表**:`<DSH_HOME>/profiles/<name>/package.json` 的 `dsh.profile.bundles` 是否含 `dsh-plugin-prompt-tool`。
|
|
262
270
|
2. **体检依赖链接**(只读、零写入):
|
|
@@ -266,13 +274,13 @@ pnpm rebuild:composition # 只生成官方切块/变体;source/local 本地源
|
|
|
266
274
|
```
|
|
267
275
|
|
|
268
276
|
它按 dsh 同一口径(`createRequire(<profile>/package.json).resolve.paths`)逐项判定,并额外报出**链接目标是否存在**——「链接在、目标不在」的悬空链接正是最常见的失败形态(例如相对深度算错一层)。
|
|
269
|
-
3.
|
|
277
|
+
3. **修复**:体检命令始终只读。缺失依赖或链接交给官方插件管理器;在 Harness 中使用 `plugin_manager` 安装或管理 bundle,CLI 的依赖修复入口为:
|
|
270
278
|
|
|
271
279
|
```powershell
|
|
272
280
|
dsh plugin --profile web install
|
|
273
281
|
```
|
|
274
282
|
|
|
275
|
-
|
|
283
|
+
替换已安装包后需要用户重启 DSH;插件不自动重启服务。
|
|
276
284
|
|
|
277
285
|
## 许可
|
|
278
286
|
|
|
@@ -2,10 +2,7 @@
|
|
|
2
2
|
export const name = "character-tools"
|
|
3
3
|
|
|
4
4
|
export function apply(ctx) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return
|
|
9
|
-
}
|
|
10
|
-
ctx.effect(() => service.mount(ctx), name + ": mount")
|
|
5
|
+
ctx.inject(["pt-character-tools"], (scopeCtx) => {
|
|
6
|
+
scopeCtx.effect(() => scopeCtx.get("pt-character-tools").mount(scopeCtx), name + ": mount")
|
|
7
|
+
})
|
|
11
8
|
}
|