dsh-profile-lab:DSH 临时 profile 实验台

前言

在 DeepSeek Harness(DSH)里改插件或试新配置,常见顾虑是:装错包、改坏 profile,日常用的 desktop 或 headless 起不来。官方 --from-default-profile 只能从少数内置模板初始化,不能从现有 profile 克隆,也不方便「只建目录、不启动」。探针要手拼 DSH_HOME、环境变量和 dsh --profile;验 HTTP 或 host 路由还要另起 web 进程;读 session.v4.jsonl.zstd 又要自己解多帧 zstd。下面介绍社区插件 dsh-profile-lab(维护者 wqzhellohhwy,SkillHub 分类:工作流):用一组 tmpprofile_* 模型工具,把「建隔离环境 → 装插件 → 跑会话 → 读摘要 → 回收」收成有护栏的标准动作。

这是什么

dsh-profile-lab 是挂在 DSH 宿主侧的 Cordis 插件:注册十个以 tmpprofile_ 开头的模型工具,不声明 dsh.client,没有浏览器半侧。inject 只写 ['tools'](不写 webServer),因此在 headless、tui 等没有 HTTP 服务的 profile 里不会整体 pending。运行时只依赖 Node 内置模块(node:fs、node:path、node:child_process、node:zlib、node:crypto),无第三方运行时依赖。

它存在的直接理由:改插件时怕把本体改暴毙——先在隔离 profile 里验工具面、会话行为和 HTTP 面,确认后再装进日常 profile。

和老做法的对比

痛点 本插件做法
不能从现有 profile 克隆,目标目录还不能已存在 tmpprofile_create:模板建或 clone: "desktop" 克隆(配置复制,node_modules 逐项链接)
只想建 profile、不想立刻启动 内部用 --dump-config 短路 boot
手拼探针命令、自己翻 sessions/ tmpprofile_run:装配 → 跑 headless → 返回 sessionId 与事件摘要
headless 验不了 HTTP / 渲染路由 tmpprofile_web_start / web_probe / web_stop:驻留 web 实例、探路由、按 pid 回收
会话 zstd 多帧解码重复写脚本 tmpprofile_session:内置逐帧解码,输出 preset、工具面、上下文、token 等
清理靠自觉 tmpprofile_clean:白名单 + junction 感知删除 + 默认 dry-run

核心功能:十个工具

工具名统一 tmpprofile_ 前缀,便于在 dsh-tool-manager 里整组开关。

工具 作用 关键参数
tmpprofile_create 建隔离 profile(模板或克隆),可选装包 name、template(默认 headless)、clone、packages、purpose、overwrite
tmpprofile_install 对已登记临时 profile 追加安装或移除 name、packages、remove
tmpprofile_run 同步跑 headless 探针(带超时) name、task、sessionId、env、timeoutMs、json
tmpprofile_web_start 起驻留 web 实例 name、port、probePath、waitMs、cwd、env
tmpprofile_web_probe 对驻留实例发 HTTP 探针 name、path、method、timeoutMs
tmpprofile_web_stop 停驻留实例 name、waitMs
tmpprofile_session 读会话日志结构化摘要 sessionId 或 name、sections、limit
tmpprofile_list 列出本插件管理的与未登记的 profile —
tmpprofile_clean 清理(默认演练,需 confirm: true) names、confirm、sessions、archiveTo
tmpprofile_fingerprint 采集 profiles/ 指纹,自查是否误碰其他 profile exclude

headless 探针 侧重 host 侧事实(装配、哪个 entry 未激活、卡在等哪个服务)。web 实例 侧重 HTTP/渲染面(端口在听、host 路由注册、页面 HTML 可取)。两者不是同一件事;验 web 时 profile 的 bundles 需含 @deepseek-ai/dsh-web-app(可用 template: "web" 或从带 web-app 的 profile 克隆)。

安装与启用

插件以当前 DSH 进程权限运行;安装前请自行查看 GitHub 源码与 MIT 许可证。package.json 要求 Node >=20、DSH >=0.2.0-rc.1、Cordis >=4.0.0-rc <5。

从 README 给出的安装方式:

# 从本地目录装(开发态)
dsh plugin --profile desktop add link:C:/repository/dsh-profile-lab

# 或从 GitHub 装
dsh plugin --profile desktop add github:<你的账号>/dsh-profile-lab

装完后重启 DSH(插件在启动时装配)。桌面版 profile 由 Electron 独占管理,命令行直连可能被拒——可用桌面版插件页安装,或走应用内通道。

可选 Cordis 配置(cordis.patch.yml 行内 config,均可省略):

- insert:
    - id: dsh-profile-lab
      name: 'dsh-profile-lab'
      config:
        home: 'C:/Users/you/.dsh'      # 缺省 $DSH_HOME 或 ~/.dsh
        dshBin: ''                      # 显式指定 dsh 的 lib/bin.js
        nodePath: ''                    # 显式指定子进程 node
        tools:
          disabled: ['tmpprofile_fingerprint']   # 按名字关闭工具

典型用法

模型侧常见闭环如下(参数为 JSON 工具调用示意):

# A. host 面:装配 + 工具面 + 会话行为
tmpprofile_create  { name: "probeA", template: "headless", purpose: "验证 dsh-xxx 的工具面", packages: ["link:C:/plugins/dsh-xxx"] }
tmpprofile_run     { name: "probeA", task: "只回复两个字:OK" }
tmpprofile_session { name: "probeA", sections: ["preset","tools","contexts"] }

# B. 渲染 / HTTP 面:起真实例,探插件 host 路由
tmpprofile_create    { name: "webA", template: "web", packages: ["link:C:/plugins/dsh-xxx"] }
tmpprofile_web_start { name: "webA", probePath: "/api/dsh-xxx/status" }
tmpprofile_web_stop  { name: "webA" }

tmpprofile_clean   { names: ["probeA", "webA"], confirm: true }

tmpprofile_run 返回的 session.tools 来自磁盘完整会话日志;headless 的 --json 只是投影,不能替代日志里的 tool/call 面。更多配方见仓库 docs/RECIPES.md。

装好后可在仓库根目录跑自检(会真建临时 profile、装本插件、跑一次 headless 并清理):

node scripts/selfcheck.mjs

退出码 0 表示在真实 DSH 里能加载且工具可调用。

安全护栏与文件位置

以下为刻意设计的安全护栏:只读写登记在 $DSH_HOME/profile-lab.json 的临时 profile,内置名如 desktop、headless、rescue 等硬拒;删目录前先 lstat 解 junction/symlink,不跟随链接删源;tmpprofile_clean 默认 dry-run;overwrite: true 才把旧目录挪到 profile-lab-trash/;跨进程锁 $DSH_HOME/profile-lab.lock;操作追加 $DSH_HOME/profile-lab-log.jsonl。

内容 路径
清单 $DSH_HOME/profile-lab.json
审计日志 $DSH_HOME/profile-lab-log.jsonl
临时 profile $DSH_HOME/profiles/<name>/

适用场景与限制

适合:开发 DSH 插件或改 Cordis 注入时,需要在隔离 profile 里装 link/GitHub 包、跑短任务、读会话摘要,必要时起 web 验路由,再一次性清理。

不适合或需注意:

  • 主力 profile 已无法启动时,本插件也依赖宿主加载,不能替代 rescue / reserve。
  • 探针会话仍写在同一 DSH_HOME 的 sessions/ / storages/ 下;要进程级数据隔离需独立 DSH_HOME(插件尚未实现)。
  • web 探针验到服务端与静态 HTML;页面内 JS 是否真正执行需自行用浏览器打开对应端口查看。
  • profiles/ 里历史手工目录会出现在 unmanaged,不会自动删除,需显式纳管后再操作。

DSH 社区采用「一切皆插件」思路;SkillHub(skillhub.cn)是社区目录站点,与 DeepSeek / 幻方无官方从属关系。

链接

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜