dsh-custom-conversation-prefix
Identified★ 1DeepSeek Harness Plugin: dsh-custom-conversation-prefix – Manage your context with finer granularity. Now supports setting system prompt templates and conversation prefix templates, which are applied when starting a new session. Conversation prefixes support three preset message types: User, Assistant, and Tool. Also supports enabling or disabling context injection and tool definitions for the currently selected Agent preset.
dsh-custom-conversation-prefix
为 DeepSeek Harness 提供自定义系统提示词与多轮对话前缀的插件:在一个会话真正开始之前,先放好该会话要用的 system prompt 和若干轮 user / assistant / tool 历史,发送首条真实消息后配置锁定,上下文按快照重建。

适用于:让模型以一个已完成的示范会话起步、为特定任务固定人格与指令、回放带工具调用的历史,或按会话切换不同的系统提示词。
特性
- 系统提示词:整段替换宿主 system prompt,
{{变量}}原样保留,不被宿主插值。 - 对话前缀:多轮 user / assistant 历史,支持 assistant 工具调用与 tool 结果;结构、调用 ID、并行结果时序都会校验,未知字段直接报错而不是静默丢弃。
- 独立选择:系统模板与前缀分开选择,新建会话默认沿用宿主提示词且不使用前缀。
- 发送即锁定:首条真实输入被接纳后配置只读,会话日志保留快照;续聊、重启、模式重建、分叉与历史替换都不会重复注入。
- 自动上下文开关:可逐项禁用工作目录、沙箱策略、技能目录、时间、工作区指令等自动贡献,含 required 上下文;用户输入、附件引用、显式技能调用保持原样。
- 工具开关:按当前 Agent 预设列出实际可用工具,可搜索、多选禁用;模型声明与实际执行同时受限,覆盖 PTC 的
run_code与嵌套调用。 - 轨迹与聊天隔离:预设消息在轨迹中以独立角色显示并标注「预设历史,未执行」;聊天页不会把它们当成真实回复、过程计数或工具状态。
- 原生观感:使用宿主 Button / Input、CSS Modules 与主题变量,支持深浅色与窄窗口。
兼容性
| 插件版本 | DeepSeek Harness | 构建提交 |
|---|---|---|
| 0.0.10 | 0.2.2-rc.1 | c59d10af |
| 0.0.1 – 0.0.9 | 0.2.1-rc.3 | be72761e |
插件通过 Host、Client 两个入口加载,不修改宿主源码或安装包。宿主升级后需重新验证:npm run check 会比对安装包与依赖的字节一致性,并检查本插件依赖的公开契约;不匹配时直接失败而不是带病运行。0.0.10 的适配说明见 0.2.2-rc.1 兼容性报告。
运行环境:Node.js 22.19+、pnpm。宿主侧依赖 @deepseek-ai/* 0.2.2-rc.1、cordis 4.1.0、schemastery 3.19.0。
安装
插件尚未发布到 npm 源(package.json 仍为 private: true),按本地包安装。
pnpm install --frozen-lockfile
npm run build
mkdir -p releases
npm --cache .cache/npm pack --pack-destination releases
产物为 releases/dsh-custom-conversation-prefix-0.0.10.tgz。安装前完全退出 DeepSeek Harness,再执行:
node scripts/install-profile.mjs \
--profile "$HOME/.dsh/profiles/desktop" \
--package ./releases/dsh-custom-conversation-prefix-0.0.10.tgz \
--pnpm "$HOME/.dsh/dsh-runtimes/dsh-primary-runtime/dependencies/pnpm/bin/pnpm.cjs"
设置了 DSH_HOME 时,把 --profile 换成该目录下的 profiles/desktop。脚本会:
- 核对宿主版本与构建提交,未验证的宿主拒绝修改配置;
- 备份 profile 的
package.json与 lockfile 到prefix-backup-<timestamp>/; - 按 SHA-256 把安装包存入 profile 的
.prefix-packages/,再安装并加入 bundle; - 沿用既有 profile 的 pnpm 主版本与 store,版本不符时停止(可用
--pnpm指定宿主包管理器)。
重启后在侧栏打开「提示词与前缀」。
回滚:退出 DSH,从脚本打印的备份目录恢复 package.json 与 lockfile,再运行 profile 依赖安装。会话内的原生消息仍保留;禁用插件后不再强制使用自定义 system。
使用
- 在「系统提示词」页新建完整提示词模板,或在「对话前缀」页建立消息数组。带工具历史的前缀必须包含完整的调用与结果配对。
- 回到尚未发送的新会话,在输入框下方分别选择系统模板与前缀。右侧「自动上下文」「工具」可全部启用、全部禁用或部分禁用;部分禁用时搜索并勾选目标后点「应用」。
- 发送第一条真实消息。配置转为只读,输入区上方可展开快照;要换配置请新建会话。
- 模板有新版本时会话仍用原快照;未发送前可重新选择以更新,删除模板不改变已有快照。
前缀示例(lookup_stock 不必是当前可执行工具,插件只存历史、不执行):
[
{ "role": "user", "content": "查询示例库存。" },
{ "role": "assistant", "content": null, "tool_calls": [
{ "id": "example_1", "type": "function", "function": { "name": "lookup_stock", "arguments": "{\"sku\":\"demo\"}" } }
] },
{ "role": "tool", "tool_call_id": "example_1", "content": "{\"stock\":12}" },
{ "role": "assistant", "content": "示例库存为 12。" }
]
前缀不允许 system / developer 消息、图片与音频。DeepSeek 推理配置可能要求工具历史携带 reasoning / replay 字段,插件明确拒绝这类组合而不伪造内容。
配置
插件配置项(Host 侧):
| 配置 | 默认 | 上限 | 说明 |
|---|---|---|---|
maxMessages | 200 | 2000 | 单个前缀的消息条数 |
maxCharacters | 1,000,000 | 1,000,000 | UTF-16 代码单元数;配置调小后,超限的旧快照会在应用前被拒绝 |
工作原理
- 存储:模板保存在宿主 storage domain
custom_conversation_prefix,经其既有 backend 持久化。选择、修订快照、应用 ID、摘要与初始化进度保存在会话的 ignorable plugin record 中,原生历史消息在插件缺席时仍可读取。 - 注入时机:初始化在公开的
agent/request钩子中执行——step 已打开、真实 user 尚未追加。恢复未完成的前缀时保留 system 首节点,用公开 surface replacement 隐去半段历史,再从快照重建,完成后 flush 才允许模型请求。 - 预设消息身份:安装版只接受
kind=model的 assistant,预设 assistant 使用provider=dsh-prefix/model=user-authored,stream 为空数组,不声称发生过真实模型请求;预设工具 ID 带 application ID 命名空间,结果 meta 与快照记录合成来源。 - 展示:独立消息通过公开的 Conversation Definition 与 trajectory / chat target 独占事件处理。0.2.2-rc.1 的轨迹标签类型尚未开放扩展,插件使用版本限定的 DOM 适配呈现角色标签、详情与时间轴颜色,不改写 Session 日志或模型请求。
开发
所有命令在本项目目录执行。
pnpm install --frozen-lockfile
npm run typecheck # 仅类型检查
npm run build # tsc + esbuild 打包 lib/
npm test # 构建后运行 67 项独立测试
npm run test:installed # 校验安装包后运行 32 项安装版复验
npm run check # typecheck + test + test:installed
npm run dev:installed # 用本机安装版 DSH 启动隔离 web profile
dev:installed 使用安装包中的真实后端与 UI,配置、模板、会话与请求捕获全部位于 .cache/,不读取正式 DSH 的账号和历史。打开终端打印的本机地址,在模型选择器选择「插件验收模型(离线)」即可验证发送流程,无需 API Key,退出用 Ctrl+C。该模式不是 Electron 窗口壳测试。
可用的环境变量:DSH_CLI(CLI 路径)、DSH_ASAR(安装包路径)、DSH_TEST_PORT(本机端口,默认 58173)。
已知限制
- 安装版只接受
kind=model的 assistant;其他来源会被宿主拒绝。 - 多个有效 complete section 同时存在时,宿主会明确报冲突,插件不代为裁决。
- 挂载 PTC 执行器时,
run_code由执行器自行声明、无法从声明列表中移除:禁用后其tools:sdk/tools:ptc-only段落会被移除,调用被guard拒绝,但模型仍会看到这一项。 - 自动上下文与工具禁用依赖宿主的公开方法适配(
SystemPrompt.refreshContext、ToolsService.resolve),宿主升级必须重新验证;禁用后台环境信息不改变实际文件权限与审批规则。 - 未执行过真实提供方请求的回归覆盖:静态格式通过不等于远端服务器必然接纳。
许可
Comments
Loading…