dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Agent人格:给 DSH 一份全局人格(名称、语言、人格提示词),每个新会话的系统提示都带着它;可以自行定义/另存人格;默认带三个大肥鱼人格提示词;装好后默认启用大肥鱼人格。
给 DeepSeek Harness 一份全局人格和一份长期记忆:名称、语言、人格提示词三段,装一次,之后每个新会话的系统提示最前面都从它开始;记忆紧跟在人格后面,聊天里点一下就能把选中的对话提炼进去。侧栏「新会话」上方会显示这份档案的助理名。
一个档案,四个模式通用(标准 / PTC / 极简 / 创造)。不需要复制预设,也不需要改模式选择器。
宿主半端只做一件事:每个对话 agent 创建时(以及空白会话换模式重新绑定预设时),在这个 agent 自己的作用域里注册一段 deployment:persona-prefix。作用域链上最近的同名段胜出,于是预设自带的身份句被档案替换,而工具、流程、模式语义一律不动。
这正是官方给子代理发独立人格用的那条路径(dsh-subagent 的 applyChildComposition),所以它对四种预设都成立。
注入文本长这样(空行分隔,缺哪段就少哪段):
Your name is 大肥鱼.
Reply in 简体中文 throughout.
<你写的人格提示词…>complete: true)。遮蔽段会镜像这个标记——极简模式下系统提示就只有你的档案,仍然没有工具说明,符合那个模式原本的设计。单档案所以单记忆:一份 markdown(一行一条 - [YYYY-MM-DD HH:mm] 内容),随档案存在 profile 的同一份配置里,所有会话共享。
注入位置:memory:assistant 段,order 500 —— 排在人格(0)之后、工具目录(1000)之前。记忆描述的是「用户和我是什么关系」,工具说明会引用这些前提。
三个入口:
提炼是 fail-closed 的:会话不在线、取不到这个会话的模型配置、模型没吐出一条可用条目,都不会写任何东西,只把原因回显在弹窗里。
Volatile 只暴露 get(),写入必须经设置服务(settings.update(ns, patch)),它才会落进 profile 的 patch 并由加载器提交回运行时引用。hmr.runExclusive 里,而写回结果又要经设置服务再开一个事务——直接调用会抛 HMR transactions cannot be nested。所以所有触发点都过一层 setTimeout(0)。因为插件目录里解析不到 @deepseek-ai/dsh-tools / dsh-llm / dsh-session(只有 cordis 由宿主提供),工具定义与提炼用的消息都按官方线上形状手搭,不 import 这几个包。
侧栏任意会话行的「…」菜单里多一行删除(红色,带分隔线,排在「复制 Session ID」之后)。确认后删的是这个会话本身:
/sessions/// 整个目录(日志、分代文件一起),api-session/removed,官方 session-controller 收到后把行从侧栏移除。正在运行的会话会被拒绝(先停止),空闲但还开着的会话会先被摘下再删。
remove() 就完事这一版 harness 的 sessionPersistence 没有删除方法,locate / listArtifacts 的第一个参数又是 options(里面装 signal)——把会话 id 传进去会走进 signal?.throwIfAborted(),直接把宿主带崩(实测 fatal load failure)。所以删除按目录布局自己做,只认 // 这一种形状;命中不到就返回「找不到」,宁可不动手。
DeepSeek 的上下文缓存是前缀缓存:系统提示在最前面,直接改写开头那条会让后面全部失效。
档案的文本是每次组装提示词时求值的,所以保存后下一个请求的提示词就变了,而历史一个字节都不动。剩下的交给宿主判定:模型路由声明了 systemPromptUpdate: 'in-history'(DSH 默认的 deepseek-flash 条目就声明了)时,变化的系统提示会被追加在已缓存的历史之后,历史那段前缀仍然命中,只有新增的这一小段按普通输入计费。
会话日志里的 request/context 会写明当前路由的模式:
{"provider":"deepseek-official","model":"deepseek-flash","systemPromptUpdate":"in-history"}路由不支持这个模式时(例如默认的 deepseek-v4-pro 条目),改人格会让下一次请求从开头失效一次——那是路由能力问题,不是插件的选择。介意的话,把改动留到新会话。
大肥鱼、语言默认 中文。四个字段就是本插件在 profile 里的配置,由官方设置通道读写,落进 profile 的 cordis.patch.yml:
- id: assistant-profile
name: '@istarry/dsh-assistant-profile'
config:
name: 小星
language: 简体中文
persona: 你是一个只讲证据的助理。不确定就说不确定。所以它跟着 profile 走:换 profile 就是另一份档案;备份 profile 就备份了人格。
dsh plugin --profile <profile> add @istarry/dsh-assistant-profile
# 本地包:
dsh plugin --profile <profile> add E:/Plugin/发布版/dsh-assistant-profile/dist/istarry-dsh-assistant-profile-0.2.1.tgz重启 DSH 后生效。卸载:
dsh plugin --profile <profile> remove @istarry/dsh-assistant-profileprofile 里残留的四行配置不会影响原生行为(插件不在了,没人读它),手工删掉更干净。
两者遮蔽的是同一个段(deployment:persona-prefix),不要同时启用:后加载的会赢,人格会互相覆盖。需要多个 agent 各自的人格请用 agent-suite;只要一个随身人格就用这个。
cd tooling && pnpm install # 首次:tsdown + lightningcss + typescript + js-yaml
cd .. && node build.mjs # src/ → dist/(含清单与静态文件)
node build.mjs --staging # 只构建到 .build/out
node build.mjs --check # 构建 + 依赖契约校验,不写 dist/宿主产物把 js-yaml 内联进去,运行时只依赖 @deepseek-ai/schemastery(声明在 dependencies,由 pnpm 装进插件自己的 node_modules)。浏览器半端只 require 模块表里的条目(react / ui-primitives)。
改代码只改 src/,产物由构建生成。
complete,也不报错。DSH 的插件安装器会用 pnpm 的 isolated 布局装包(包在 node_modules/.pnpm/, 顶层 node_modules/ 为空),而 loader 从顶层解析,于是「装了但界面里没有」。
遇到这种情况,在 profile 目录执行一次:
然后重启 DSH 即可。