前言¶
DeepSeek Harness(DSH)把 AI 代理的对话和工具调用放在一个本地环境中运行,产出物(报告、网页、文档、表格、图片、数据集)通常散落在几十个目录里。几天后,很难回忆哪条是最终定稿、来自哪个会话、放在哪个路径。这个问题对自动化流水线尤其明显:脚本跑了半天,产出散了,检索和复用都变得困难。
dsh-outcomes 为这些“最终成果”提供一个清单:把路径与元数据登记成一条 JSON,配合 DSH 内的管理页和一组 agent 工具,让模型自己登记、人可以浏览、脚本可以查询。
是什么¶
dsh-outcomes 是 DeepSeek Harness 的一个插件(分类:记忆),由维护者 xinming-chenniang 开发。它的核心是“成果注册表”:不搬动、不复制、不上传任何文件,只记录路径、标题、类型、来源、备注、关联会话等信息,并据此提供检索、预览和恢复能力。
核心功能¶
1. 登记:记录路径与元数据¶
插件提供三种登记入口:
- agent 工具:在任何会话里,模型通过
outcome_add工具登记刚产出的成果。一条成果可以包含多个文件,用分号分隔路径。 - 管理页:在 DSH 的 Web 界面中打开
http://127.0.0.1:<DSH 端口>/__dsh-outcomes/,手动录入或更新成果。 - CLI:
dsh-outcomes命令行工具,可以在终端或 CI 环境中批量登记、检索和清理。
登记的数据保存在 index.jsonl 中,每行一条 JSON:
{"id":"20261016-013045-a1b2","title":"季度报告","kind":"html","paths":["D:/reports/q3.html"],
"by":"财务","note":"口径:含税","sessionId":"session-…","cwd":"D:/reports","at":"2026-10-16T01:30:45.123Z"}
字段说明:
id:YYYYMMDD-HHMMSS-<4 hex>,本地时间加随机后缀。title:人类可读标题,默认取第一个文件名。kind:按扩展名推断的类型(html/pdf/img/doc/data/text/other)。paths:绝对路径数组。by/note:来源与备注。sessionId/cwd:产出会话与工作目录。at:登记时间(ISO)。
2. 检索与预览¶
CLI 提供检索命令:
dsh-outcomes list --q 关键词 --kind html --state active --limit 20 --json
管理页支持按关键词、类型、状态筛选,并按类型提供预览:网页 / PDF 内嵌、图片缩略图。预览是沙箱的,HTML 会以 Content-Security-Policy: sandbox allow-scripts … 出现,脚本可以跑但拿不到 DSH 的同源身份。
3. 恢复与清理¶
取消登记不会删除文件,而是将整条记录追加进 deleted.jsonl,并保留恢复入口:
dsh-outcomes remove <id> --why "换版本了"
dsh-outcomes restore <id>
插件会自动做自愈:重写清单时,如果发现“上次在、这次不在、删除日志里也没有”的条目,会补一条 why=auto-archived,防止登记无声消失。
4. 健壮性与并发¶
- 只记路径:不读文件内容,只做存在性检查。
- 不删文件:
remove只动清单与删除日志,文件永远原地不动。 - 并发保护:
update/remove/restore在提交前会复核文件是否被其他进程改过;如果被改过则拒绝并返回concurrent-modification,不会静默覆盖。 - 写操作守卫:所有 POST 请求必须带
x-dsh-outcomes: 1头,否则返回 403。
5. CLI 工具集¶
除了 add / list / check / remove / restore,CLI 还提供:
dsh-outcomes deleted # 查看删除日志
dsh-outcomes stats # 查看统计信息
dsh-outcomes dir # 打印当前生效的数据目录
6. HTTP API(管理页与集成用)¶
管理页与外部集成可以通过一组 HTTP 路由访问:
- GET
/__dsh-outcomes/:管理页(?lang=zh中文)。 - GET
/__dsh-outcomes/api/list?q=&kind=&state=&limit=:清单。 - GET
/__dsh-outcomes/api/status:规模与数据目录。 - GET
/__dsh-outcomes/api/check:文件缺失情况。 - GET
/__dsh-outcomes/api/deleted:删除日志。 - POST
/__dsh-outcomes/api/add:登记。 - POST
/__dsh-outcomes/api/update:更新元数据。 - POST
/__dsh-outcomes/api/remove:取消登记。 - POST
/__dsh-outcomes/api/restore:恢复。 - GET
/__dsh-outcomes/file/<id>/<序号>:取第 n 个文件(预览/下载)。
安装与启用¶
插件已发布到 npm,版本 0.1.2。
方式一:npm / 插件管理器(推荐)¶
桌面端:在 DSH 的 设置 → 插件 → 添加插件 中输入 dsh-outcomes。
CLI:
dsh plugin --profile <profile> add dsh-outcomes
安装后需要重启 DSH,插件 bundle 只在启动时装载。
方式二:GitHub 源¶
dsh plugin --profile <profile> add github:xinming-chenniang/dsh-outcomes
也可以把 Release 资产 dsh-outcomes-0.1.2.tgz 交给插件管理器安装。
方式三:只当 CLI 用¶
npm i -g dsh-outcomes
dsh-outcomes add --title "季度报告" --paths "D:/reports/q3.html;D:/reports/q3.csv"
dsh-outcomes list
CLI 与插件共用同一份清单格式与默认目录,两种用法可以混着来。
配置¶
配置解析顺序(高 → 低):插件 config → 环境变量 → 用户设置文件 → 默认值。修改配置后需要重启 DSH。
常用配置项:
| key | 默认 | 说明 |
|---|---|---|
dir |
$DSH_HOME/plugin-data/dsh-outcomes |
数据目录(清单与删除日志都在这儿) |
registry |
<dir>/index.jsonl |
清单文件 |
deleted |
<dir>/deleted.jsonl |
删除日志 |
maxTitleLength |
120 |
标题超长会被截断 |
pageSize |
200 |
管理页的默认窗口 |
allowOutsideCwd |
true |
是否允许登记会话 cwd 以外的路径 |
treatSystemTempAsWarning |
true |
路径落在系统临时目录时给警告 |
环境变量:
DSH_HOME:DSH 家目录,默认~/.dsh。DSH_OUTCOMES_DIR:覆盖dir。
用户设置文件:$DSH_HOME/.dsh-outcomes.json(允许 "//" 注释键)。
样例配置见仓库中的 config.example.json。
典型用法¶
在会话中自动登记¶
在 DSH 会话中,让模型调用 outcome_add 工具登记成果:
# 模型会话内
outcome_add --title "季度报告" --paths "D:/reports/q3.html;D:/reports/q3.csv" --by 财务 --note "口径:含税"
检索与校验¶
dsh-outcomes list --q 报告 --kind html --state active --limit 10 --json
dsh-outcomes check # 登记的文件是否还在(有缺失 → 退出码 1,方便挂进 CI)
恢复误删的条目¶
dsh-outcomes restore <id>
适用场景与注意¶
- 适合需要长期保留 AI 代理产出物、并希望集中检索与预览的场景。
- 插件以当前 DSH 进程的权限运行,安装前建议查看源码与许可证(MIT)。
- 注意插件只记录路径,不读取文件内容,因此搜索不覆盖正文,适合对隐私敏感的场景。
- 在 headless / 自动化环境中,
outcome_remove可能因为缺少审批通道而失败,建议使用 CLI 或管理页进行清理。
结尾¶
dsh-outcomes 让“最终成果”在 DSH 生态中成为一等公民:agent 可以登记、人可以浏览、脚本可以查询。对于需要长期沉淀 AI 产出、并希望有清晰清单与恢复能力的项目,它提供了一个轻量、安全、可扩展的解决方案。
- 插件目录:https://www.skillhub.cn/plugins/xinming-chenniang/dsh-outcomes
- GitHub:https://github.com/xinming-chenniang/dsh-outcomes