把工作组织成目标看板的 DeepSeek Harness(DSH)插件——基于图的目标管理(Graph-based Goal Management)。
- 声明宿主兼容范围
engines.dsh:包清单新增"dsh": ">=0.1.5-rc.2 <0.1.8-0"(上界-0表示排除0.1.8的一切预发布与正式版),供 dsh-market 等宿主感知型市场在卡片展示与安装/更新预检中读取;该声明自包含它的版本发布后才在市场上生效(市场读的是 registry 上已发布版本的清单且有缓存),判定口径为engines.dsh与各 peer 范围的合取。- 侧边栏窄档搜索改为单列「搜索结果」聚合泳道:窄档(<480px)下激活搜索时,看板不再退出单泳道收窄、退回横向多泳道「全宽」网格;命中卡(含跨分区命中)聚合进单列「搜索结果」泳道,既保住 g-233「搜索命中不得被视图过滤藏掉」,又保持窄档纵向单列、零横向溢出。宽档(≥480px)搜索行为与视觉零变化(不新增状态真源、不新增持久化键)。
- macOS / Linux 门禁合并为一份跨平台执行件:
scripts/platform-smoke-test.mjs成为唯一一份 macOS/Linux 门禁实现——转发既有win-smoke-test.mjs的 T1–T5(在原生 macOS/Linux 上取得平台效力:T3–T5 真跑)+ 六项平台无关探针 P1–P6 + 平台无关审计 M4;旧路径scripts/macos-smoke-test.mjs降为一行转发 shim、原实现归档在scripts/archived/,命令序列、逐项判读与回填表见docs/platform-gate.md。(v0.16.0 小节原写「v0.17.0起」,本版按实际归入校正为v0.16.1。)
⚠️ Windows / macOS 原生门禁:本版未执行,不得视为 PASS:v0.16.1未在原生 Windows/macOS 上执行门禁——负责人裁定省略,理由为本版无跨平台敏感内容(g-365= 元数据与文档、g-366= 纯客户端渲染逻辑、g-362= 门禁执行件重构,均未触碰文件锁与平台判定路径);Linux/WSL2 侧已实跑全绿。最近一次真机结论出自 v0.16.0 周期:Windows 原生win32/x64PASS 通过 10/失败 0/告警 0,macOSdarwin/arm64专检 通过 2/失败 0/告警 3(转发 T1–T5 = 10/0/0)——出处docs/release-checklist-v0.16.0.md§3 / §3.4。本版 Linux 门禁逐项结论见docs/release-checklist-v0.16.1.md。
- 适配 DeepSeek Harness
0.1.7宿主 settings 服务换代:旧settings.register(namespace, schema)API 已被移除(实测告警sctx.settings.register is not a function)。插件改为能力探测分流——服务提供register走旧 namespace 注册,否则回落describe表单投影(profile 条目Config);两条路径均在隔离实例上双宿主实机验证,且零版本号比较。- 适配
0.1.7子代理目录换代(两层):容器由subagentsByParent改为projectionsBySession[sid].values.subagentCatalog,entry 形状同时去掉kind(新形状{id, createdAt, mode, label?},新增mode:'unknown')。目录谓词改为形状探测(有kind走旧判定、无kind按id),避免点「↗ 转到对话」静默打开父会话。- (以下为此前版本的累积亮点)适配
0.1.6宿主 API 变更:会话导航/focus 职责从sessions服务迁移到uiWorkspace,统一走openSessionTarget;子代理聚焦、点击「转到对话」、「交给产品经理」与用户反馈派发链路在新宿主下全部恢复可用。- 看板实时会话区在
0.1.6下恢复显示:按新宿主的 retain 生命周期先保留会话引用再借取 binding,不再出现「⚠️ 会话未接入(不在会话列表)」与「模型目录不可用」,真实 tokens / ctx / 模型可正常渲染;0.1.5无 retain 时自动回退被动 binding,双向兼容。- 批量接受的主管通知在
0.1.6下恢复:通知派发改为能力探测分流,单卡接受与批量接受同形路径一并修复。- 并发槽位耗尽给出可操作提示:
0.1.6引入子代理激活上限(默认 8 个活跃 continuable 子代理),容量耗尽或冷恢复被拒时不再只透出英文错误码。- 看板刷新按钮重置自动刷新倒计时:点击刷新后倒计时立即回到完整周期,不再沿旧终点继续递减。
- 「定义/润色」复制模板改写为自述式主管指令:标题标明由主管处理,明确接收者角色、下一步动作与本次边界(仅处理定义/润色,不执行代码、不推进状态或版本)。
✅ DSH 版本兼容性(重点):声明的宿主兼容范围(自 v0.16.1 起,
engines.dsh):>=0.1.5-rc.2 <0.1.8-0;实测通过的宿主:0.1.6-alpha.2~0.1.7-rc.2。本周期(g-351)实测的双宿主对照:0.1.7-rc.1上验证宿主 settings 服务换代后的能力探测分流——新 API 存在则走「profile 条目 Config → 设置表单」,实测sctx.settings.register is not a function降级告警消失、profile 全局默认(如subagentMode)经 profile patch 真正生效(mode_source=global),graph_*工具计数仍为 44、/api/dsh-graph*端点注册齐全;0.1.6-alpha.2上重跑旧路径,确认 namespace 注册($DSH_HOME/settings.yaml)与 profile 全局默认照常生效,零退化。更早的0.1.2-alpha.x~0.1.4系列按工具与提示词契约向后兼容,但未在本周期复跑,且自 v0.16.1 起不在声明范围内(市场安装预检会保守挡住)。✅ 跨平台(v0.11.0 起):Windows 原生不可用问题已修复,并在原生 Windows(win32/x64)与 macOS(darwin/arm64)真机复验通过;v0.16.0 周期的 Windows 真机门禁已在原生 Windows 全绿(
win32/x64/ node v24.13.0,2026-09-25,T1–T5 通过 10 项 / 失败 0 项 / 告警 0 项,产物fe852e23…;上一版本v0.15.0周期亦全绿);本版本v0.16.0的 Windows 真机门禁由负责人在本次发布前于原生 Windows 执行(发布红线 1),结论见docs/release-checklist-v0.16.0.md§3(本周期 Linux/WSL2 侧已实测);不予预先声明 PASS——若发布时该门禁未执行,则以「Windows 未验证」如实标注。macOS 门禁已于 v0.16.0 在 Mac 上执行(darwin/arm64,专检 通过 2/失败 0/告警 3):scripts/macos-smoke-test.mjs(M1–M4 专检 + 转发既有 T1–T5)已随 v0.16.0 落地;v0.16.1 起 macOS 与 Linux 门禁已合并为一份跨平台执行件scripts/platform-smoke-test.mjs(原计划v0.17.0,实际随v0.16.1发布;六项平台探针 P1–P6 + 平台无关审计 M4 + 转发 T1–T5),旧路径降为转发 shim、原实现归档在scripts/archived/,运行手册见docs/platform-gate.md,macOS 结论:专检 通过 2/失败 0/告警 3(M2 实测该卷大小写不敏感,仅大小写不同的 slug/id 会互相别名;M1/M3 因检出未构建而未执行,脚本按设计给 WARN 而非 FAIL),转发 T1–T5 为 10/0/0 —— 详见docs/release-checklist-v0.16.0.md§3.4;上一处完整 macOS 真机复验仍为v0.11.0。已知限制:macOS 上若工作区路径经显式传入且含符号链接(例如位于
/tmp、/var之下),会被拒绝并报graph root symlink is not allowed;由process.cwd()推导的路径不受影响。
单包发布:npm 包名 dsh-graph(当前版本 v0.16.1,与 package.json / PLUGIN_VERSION 一致)。一个包同时提供:
- 面向 agent 的 44 个
graph_*工具(覆盖目标全生命周期)+/api/dsh-graph*REST 端点; - 浏览器二维泳道看板(
lib/client.js),渲染进conversation.view槽。
数据以文件 + 事件流形式落在工作区 .dsh-graph 目录,git 友好、可审计。
- 基于图的目标管理:目标是自足实体——自然语言任务 + 动态生成的取证计划与质量判据;任务类型不预先模板化,结构化的是生命周期与求值语义。
- 四阶段生命周期:
描述 → 收集 → 执行 → 确认,由引擎强制的状态机:draft → planning → collecting → ready → in_progress → review → delivered(任意阶段可进入blocked)。 - 判据先于执行:进入执行前先登记质量判据,评审按逐条判据核验产出物。
- 上下文卡片:目标 Runner 的种子上下文,生命周期
empty → collecting → filled → reviewed;形态分文本 / 文件 / 图片 / 数据。 - 排期:Backlog(暂存池)↔ Version(批量质量管理)↔ 独立目标(standalone);看板泳道顺序是展示态,可拖拽调整。
- 换会话交接:
graph_handoff生成交接文档(board 投影 + 长期记忆 + 环境事实),graph_claim_supervisor由新会话接管。
- 全链路 i18n(v0.9.2):看板 UI、工具描述与全部 LLM 提示词中英双语;整篇提示词文档按语言后缀文件区分(
supervisor-guide.zh.md/.en.md),跟随 DSH 界面语言(locale.preference)或可在看板设置中显式指定。 - 结构化执行状态(v0.9.2):
graph_report_status支持state枚举(working/blocked/done/error),看板活跃判断以结构化状态优先、关键词匹配仅作遗留回退。 - 目标描述就地编辑(v0.9.2):目标弹窗中描述可直接进入 Markdown 编辑态保存(
graph_set_description)。 - 更新强调:目标被外部编辑后,看板卡片播放更新强调动画;弹窗打开期间的变化在关闭弹窗时补播;系统开启 reduced-motion 时降级为静态高光。
- 浅色主题:看板、弹窗与抽屉完整适配浅色 / 深色两套主题(跟随 DSH 主题变量)。
- 信息收集:目标详情弹窗的上下文卡片区显示「🔎 信息收集」。
- 卡片标题:直接显示目标标题,无 🎯 前缀。
- 弹窗交互:从弹窗内容开始框选文本并拖到弹窗外松开,不会误关闭弹窗。
dsh plugin --profile <name> add dsh-graph需要 Node ≥ 22(包内 core 为编译后
.js)。已发布版本经 npm 与 dsh-market 生态(dsh-market / DshMarketPlace / DSH Get,见docs/release-handbook.md)分发。依赖说明:宿主提供的核心包(
@deepseek-ai/cordis^4.0.2、@deepseek-ai/schemastery^3.18.2、@deepseek-ai/dsh-settings^0.1.5-rc.2)以peerDependencies+peerDependenciesMeta.optional(DSH 生态惯例)声明,由 DSH 宿主环境提供,安装不产生 peer 告警;yaml为插件自带运行依赖(声明在dependencies中),避免产生重复的核心包实例。宿主兼容声明:
engines.dsh声明 DSH 兼容范围>=0.1.5-rc.2 <0.1.8-0(与@deepseek-ai/dsh-settingspeer^0.1.5-rc.2取交集后自洽;上界-0表示排除0.1.8的一切预发布与正式版——下代宿主须重新验证后再放宽),供 dsh-market 等宿主感知型市场在卡片展示与安装/更新预检中读取(市场读到的是 registry 上已发布版本的清单且有缓存 ⇒ 本声明自包含它的版本发布后才生效);市场的判定是engines.dsh与各 peer 范围的合取,且发现阶段不读peerDependenciesMeta.optional。✅ DSH 版本兼容性(重点):声明的宿主兼容范围(自 v0.16.1 起,
engines.dsh):>=0.1.5-rc.2 <0.1.8-0(最新的0.1.7-rc.2已适配并实测通过 —— 2026-09-25 用 v0.16.0 发布物 tarball 在 Linux/WSL2 上跑 T1–T5 全绿 10/0/0,并逐包比对0.1.7-rc.1→rc.2:子代理目录层(dsh-session-projection)零代码变化、listProviders/listModels/resolveModelInfo签名逐字未变、客户端只用到的MarkdownText仍在;0.1.7-rc.1为 g-351 双宿主对照实测;0.1.6-alpha.2在本周期同批复跑确认零退化)。宿主 settings 服务在0.1.7线换成「profile 条目 Config → 设置表单」形态(旧settings.register已移除),插件改为能力探测分流:新 API 存在走新路径,否则回落旧 namespace 注册;两条路径均在隔离实例上实机验证。更早的0.1.2-alpha.x~0.1.4系列按工具与提示词契约向后兼容,但未在本周期复跑,且自 v0.16.1 起不在声明范围内(市场安装预检会保守挡住)。平台范围:Linux(WSL2)、原生 Windows、macOS(三平台使用同一安装包;macOS 最近一次真机复验为
v0.11.0,自v0.11.0以来core/platform.ts与文件锁相关代码零改动)。本版本v0.16.0已在 Linux(WSL2)实测;macOS 门禁已于 v0.16.0 在 Mac 上执行(darwin/arm64,专检 通过 2/失败 0/告警 3) —— v0.16.1 起 macOS 与 Linux 门禁已合并为一份跨平台执行件scripts/platform-smoke-test.mjs(原计划v0.17.0,实际随v0.16.1发布;单文件 Node 实现,六项平台探针 P1–P6:大小写敏感性 / 软链 root 边界 / 挂载类型识别 / 并发 CAS 与原子写 / 跨 FS rename(EXDEV) / locale 编码逐字节往返,另有平台无关的 Linux-only 假设审计 M4)并转发既有win-smoke-test.mjs的 T1–T5;旧路径scripts/macos-smoke-test.mjs已降为转发 shim(原实现归档在scripts/archived/),macOS/Linux 的命令序列、逐项判读与结论回填表见docs/platform-gate.md(docs/macos-gate.md为 v0.16.0 历史记录),本版本不预先声明 macOS 已验证;Windows 真机门禁(T1–T5)由负责人在本次发布前于原生 Windows 执行node win-smoke-test.mjs --tarball dsh-graph-0.16.0.tgz,结论见docs/release-checklist-v0.16.0.md§3——本次不预先声明 PASS(红线 1);若发布时未执行该门禁,则以「Windows 未验证」如实标注。此前 Windows 不可用的两类问题——①core/ops.ts使用 POSIX 专用文件锁常量(目录当 fd 打开、O_DIRECTORY、O_NOFOLLOW);② 宿主提供的核心包被同时写进dependencies与peerDependencies——已在 v0.11.0 修复,并在原生 Windows 与 macOS 真机复验通过。已知限制:macOS 上经显式传入且含符号链接的工作区路径(如位于/tmp、/var之下)会被拒绝并报graph root symlink is not allowed;由process.cwd()推导的路径不受影响(Node 返回物理路径),但建议一律使用真实路径(后续版本继续跟进)。
44 个 graph_* 工具,按功能分组:
| 分组 | 工具 |
|---|---|
| 目标生命周期 | graph_create_goal · graph_rename_goal · graph_set_description · graph_set_goal_type · graph_set_goal_tags · graph_amend_goal · graph_transition · graph_postpone_goal · graph_archive_goal · graph_unarchive_goal · graph_delete_goal · graph_clean_worktree · graph_list_worktrees |
| 质量判据 | graph_set_criteria |
| 上下文卡片 | graph_add_card · graph_fill_card · graph_review_card · graph_bind_collect_card · graph_delete_card · graph_convert_card_to_shared · graph_convert_card_to_owned |
| 附件 | graph_store_attachment · graph_delete_attachment |
| 排期 | graph_move_goal |
| 执行派发 | graph_start_attempt · graph_set_directive · graph_record_attempt_handoff · graph_unbind_goal_child · graph_abandon_attempt |
| 记忆 | graph_memory_add · graph_memory_recall · graph_memory_remove · graph_memory_replace |
| 配置管理 | graph_get_settings · graph_update_settings |
| 校验 / 对账 | graph_validate · graph_rebuild |
| 状态汇报 | graph_report_status · graph_report_supervisor_status |
| 评审裁决 | graph_resolve_accept |
| 历史讨论 | graph_add_comment |
| 换会话 | graph_handoff · graph_claim_supervisor |
| 帮助 | graph_help |
各工具具体含义见 dsh-graph-host/README.md 或 graph_help。
浏览器二维泳道看板:横向为生命周期阶段列(描述 / 收集 / 执行 / 确认 / 交付 / 阻塞),每个版本一条泳道,另有 Backlog 与独立目标区;支持拖拽排期、判据 / 上下文卡片抽屉、graph_report_status 与 graph_report_supervisor_status 的实时状态显示、阻塞折叠等。以下为虚构演示数据(nebula-notes)截图:
右侧栏的「看板」与会话页的「看板」页签是同一份实现——同一个看板组件、同一套头部与窄档逻辑,两侧完全一致(零 host 门控),任选其一即可。
- 入口:在会话里打开右侧栏 → 点「看板」磁贴;打开的看板面板会成为右侧栏顶部的一个页签常驻,随时切回。
⋯ 工具:刷新 / 标签筛选 / 记忆 / 项目知识库(共享条目)/ 看板设置 / 已归档。工具条按头部实测宽度装不下自动折叠为这一项(不是写死的窗口断点)。[🏷️]版本管理:角落的方形图标按钮(可访问名称为「🏷️ 版本管理」),点开版本管理抽屉;紧邻其右是同一行等高的创建版本。- 版本选择器:位于泳道行
[+](新建目标)左侧,切换当前显示的泳道(具体版本 / Backlog / 独立目标)。 - 窄档行为(分档依据是看板根容器实测宽度——即看板组件自身元素的
clientWidth,不是窗口宽度、也不是浏览器视口宽度):≥ 480px(宽档):多泳道横向并排,各版本 / Backlog / 独立目标可同时查看;< 480px(单泳道档):阶段列由横向并排改为纵向堆叠,泳道内容由版本选择器决定(具体版本 / Backlog / 独立目标三选一;工作区一个版本都没有时,默认落点就是「独立目标」,选择器当前项显示「独立目标」);该档没有版本折叠开关(收起来等于空板),并同时把工具条强制折叠为「⋯ 工具」、隐藏 DEBUG 行。- 怎么把看板放进
< 480px:宿主页签的宽度由页签布局模式决定,不是拖出来的——实测(1600px 视口)单页签 719px、页签上的分栏之后每页签 359px(该档随窗口宽度变化)、全屏799px。所以默认单页签宽度(719px)落在宽档,此时不会出现单泳道;需要单泳道档时用页签上的分栏,或把窗口收窄到看板面板实测宽度 <480px。进入后一眼可验:六个阶段块纵向堆叠,且泳道标题右侧出现版本选择器(当前项为具体版本 / Backlog / 独立目标)。 - 宽档残留(实测):宽档网格的最小宽度实测约 956px,所以看板面板实测宽度在这之下时(例如默认单页签 719px),宽档网格仍会横向滚动、把「确认 / 批量接受」列推到可视区外;真正消除横向滚动的是单泳道档(<480px)。
- 版本选择器只在单泳道档渲染:宽档下整个看板没有版本选择器(该元素不渲染)。因此宽档里能看到的「全部版本」只可能来自打开的下拉选项列表,而不是当前选中项;单泳道档未显式选过任何视图时,当前项是「独立目标」而不是「全部版本」。
下图为右侧栏「看板」面板(虚构演示数据 nebula-notes,宽度落在 < 480px 单泳道档:阶段列纵向堆叠、工具条折叠为「⋯ 工具」、DEBUG 行按规则隐藏;「确认」列头右侧即 ✅ 批量接受 入口):
<workspace>/.dsh-graph:跟随调用会话的 workspace(session.header.cwd),数据落在每个项目自己的 .dsh-graph,git 友好。包含 backlog/、goals/、versions/、events.jsonl(事件流,唯一事实源)等。首次触达某 workspace 自动生成骨架,幂等、不建 demo 数据;.dsh-graph 也可配置为独立 Git 仓库(见 docs/ 与 scripts/archived/migrate-dsh-graph-repo.sh)。
core/——核心层源码(唯一事实源),经scripts/sync-core.sh编译成dsh-graph-host/core/*.js进发布包。可基于core开发各类UI / CLI / REST / agent 工具,核心层不依赖 DSH。dsh-graph-host/——单包发布物:index.js(工具 + REST 端点)、lib/client.js(看板)、cordis.patch.yml(dsh.bundle)、supervisor-guide.zh.md、supervisor-guide.en.md、README.md、LICENSE。schema/、docs/、scripts/——数据 / 设计文档 / 构建脚本。
bash scripts/sync-core.sh # 修改 core 后同步进包
node --test core/tests/*.test.ts # 全量测试
# 复现 README 截图(虚构演示数据,写仓库外 /tmp,不提交 mock .dsh-graph):
node scripts/dsh-graph-mock-seed.mjs --validate # 生成 nebula-notes mock 数据
CWD=/tmp/dsh-graph-mock-demo bash scripts/archived/dev-dsh-instance.sh run --port 3082 # 测试实例(开「看板」tab)
# 截图:同一次 seed、同一实例、固定视口——看板全景 → screenshot/screenshot-1.png;
# 点击看板上的目标卡片打开详情弹窗 → screenshot/screenshot-2.png
# 侧边栏看板 → screenshot/sidebar-kanban.png:同一实例里打开右侧栏 → 点「看板」磁贴,
# 再把看板面板弄到实测宽度 <480px(用页签上的 `分栏`,或收窄窗口;单泳道档:工具条折叠、
# DEBUG 行自动隐藏)后截「看板」面板MIT(Copyright © 2026 miuzel)


