dsh-agent-board 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +27 -24
  2. package/index.mjs +1 -1
  3. package/package.json +3 -2
package/README.md CHANGED
@@ -1,16 +1,33 @@
1
1
  # dsh-agent-board
2
2
 
3
- DeepSeek Harness 智能看板 — 会话级任务管理 + 一次性 Worker/Verifier 派发。
3
+ DeepSeek Harness 智能看板 — 让主窗口把编码工作变成可追踪、可验收、可审计的任务,而不是一段做完就散的对话。
4
4
 
5
- ## 功能
5
+ ## 背景与动机
6
6
 
7
- - **看板 UI**:会话标题栏「智能看板」按钮(Lucide 线性 SVG 图标,主题色自适应),顶部抽屉面板(看板 / 团队 / 仪表盘三视图),拖拽流转,多选批量操作(带一步撤销),筛选(文本/优先级/标签)
7
+ 直接在会话里让 agent 干活,随着任务变多变复杂,会遇到四个典型问题:
8
+
9
+ 1. **长任务挤占对话** —— 一个改半小时的任务会让主窗口在这期间既不能干别的,也无法并行处理其他请求;多个任务只能排队串行。
10
+ 2. **干完没有验收** —— agent 说"完成了"就是完成了,改动是否真的可跑、是否满足要求,没有第二双眼睛独立复核过。
11
+ 3. **上下文反复调研** —— 每个新任务都从零读代码、查约定,主窗口调研过的结论和读过的文件无法带给执行者,时间都花在重复调研上。
12
+ 4. **过程不可见、结果不可审计** —— 任务散落在对话流里:谁做的、卡在哪、被驳回过几次、为什么这么做,事后无从回溯。
13
+
14
+ 看板针对这四点给出机制化的解法:
15
+
16
+ | 问题 | 解法 |
17
+ | --- | --- |
18
+ | 挤占对话 | 每个任务派发给**一次性 Worker 子代理**独立执行,主窗口保持可交互;任务之间依赖调度、可并行 |
19
+ | 没有验收 | **独立 Verifier 子代理**复核:Worker 必须实跑自测,Verifier 独立复跑验收脚本后给出结论;驳回自动重派,三次驳回升级人工 |
20
+ | 重复调研 | 主窗口调研过的**结论/思路(contextNotes)和读过的文件(contextFiles)**随任务注入子代理的上下文注入区,子代理不必从零开始 |
21
+ | 不可见不可审计 | 任务卡全程留痕:状态流转历史、每次验收结论、歧义上报与裁决、干预记录都在任务详情里;Worker/Verifier 会话可从详情页直达回看 |
22
+
23
+ ## 核心机制
24
+
25
+ - **看板 UI**:会话标题栏「智能看板」按钮打开顶部抽屉(看板 / 团队 / 仪表盘三视图),拖拽流转,多选批量操作(带一步撤销),筛选(文本/优先级/标签)
8
26
  - **任务模型**:draft → pending → in-progress → verifying → resolved → archived,含 blocked/cancelled;优先级、标签、依赖(DFS 环检测)、流水线分档(full 执行+验证 / work 只做不验 / direct 主窗口直办)
9
- - **一次性派发**:每个任务 spawn 一个一次性子代理,上下文全量注入 prompt,做完即销毁——无常驻池、无状态残留;孤儿回收 + 看门狗卡死标记(不自动杀,裁决权在主窗口/用户)
10
- - **Team 模式**:开启后向主窗口注入提示词引导(实质性改动建议走看板派发,不硬拦截),Worker 歧义上报主窗口裁决(任何模式都通知);任务完成/阻塞时主窗口收到批量聚合回执(等空闲再发,不打断对话)
11
- - **验收**:可选 acceptance 硬性验收脚本,Worker 必须实跑、Verifier 独立复跑
12
- - **异构模型**:⚙️ 弹出层 Worker/Verifier 均可下拉配置不同模型(避免同源盲点)。**默认空 = 继承父级模型**;模型故障自动熔断回退父级
13
- - **手动/自动模式**:自动模式 poolCycle 调度;手动模式主窗口自行 claim(full 档仍自动派 Verifier 验收),详情页可「派发 / 派发验收」手动触发
27
+ - **一次性派发**:每个任务 spawn 一个一次性子代理,做完即销毁——无常驻池、无状态残留;孤儿回收 + 看门狗卡死标记(不自动杀,裁决权在主窗口/用户)
28
+ - **Team 模式**:开启后向主窗口注入提示词引导(实质性改动建议走看板派发,不硬拦截);Worker 遇到歧义上报主窗口裁决(任何模式都通知);任务完成/阻塞时主窗口收到批量聚合回执(等空闲再发,不打断对话)
29
+ - **异构模型**:Worker/Verifier 均可下拉配置不同模型(避免同源盲点),默认空 = 继承父级模型;模型故障自动熔断回退父级
30
+ - **手动/自动模式**:自动模式看板自动调度派发;手动模式主窗口自行 claim,详情页可「派发 / 派发验收」手动触发
14
31
 
15
32
  ## 安装
16
33
 
@@ -33,19 +50,5 @@ dsh plugin --profile web add dsh-agent-board@latest
33
50
 
34
51
  - 仓库:<https://github.com/PPawnsir/task-board-plugin>
35
52
  - 本包即源码,直接维护(v68 起拆除了动态→静态转换层,v74 起去池化)
36
- - 单元测试:`npm test`(node --test,30+ 例纯逻辑用例,无需重启 dsh)
37
-
38
- ## 开发热循环(免重启 E2E)
39
-
40
- host 代码(`index.mjs` / `lib/*.mjs`)改动必须进程重启才能加载,但不必动你正在用的主实例——
41
- 仓库提供一个独立 dev 实例 + 文件监听自动重启方案:
42
-
43
- ```sh
44
- npm run dev # = node scripts/dev-watch.cjs
45
- # 浏览器打开 http://127.0.0.1:3081(独立 dev profile,不影响主实例)
46
- ```
47
-
48
- - 改 host 代码 → 监听器自动重启 dev 实例(约 3-5s)→ 刷新 3081 页面即可验证
49
- - 改 `lib/client.js` → **不用重启**,浏览器刷新即生效(client 包按请求从磁盘读)
50
- - dev profile 在 `~/.dsh/profiles/dev`,只挂 base + web-app + 本插件;会话/看板数据与主实例共享 `~/.dsh`,两边互不干扰
51
- - 官方 `cordis-plugin-hmr` 行在 web 部署里被 `disabled: true`(reload 生命周期未测完),实测对 link: 插件静默无效,故用 watcher 重启替代
53
+ - 单元测试:`npm test`(node --test,38 例纯逻辑用例,无需重启 dsh)
54
+ - 开发热循环:`npm run dev`(独立 dev 实例 + 文件监听自动重启,详见 scripts/dev-watch.cjs 头部说明)
package/index.mjs CHANGED
@@ -263,7 +263,7 @@ export function apply(ctx) {
263
263
  function notifyMainWindow(sid, t, question) {
264
264
  var root = rootForSession(sid)
265
265
  if (!root) return
266
- try { root.followup(makeMsg('⚠️ [任务看板] Worker 上报歧义,等待裁决:\n\n任务: ' + t.title + ' (' + t.id + ')\n\n疑问:\n' + question.slice(0, 1500) + '\n\n请在看板详情页裁决,或直接回复指示。裁决后会有新 Worker 带着裁决答案接手。', 'notice', '任务待裁决: ' + t.title)) } catch (e) { console.error('[task-board] escalate notify failed:', String(e)) }
266
+ try { root.followup(makeMsg('⚠️ [任务看板] Worker 上报歧义,等待裁决:\n\n任务: ' + t.title + ' (' + t.id + ')\n\n疑问:\n' + question.slice(0, 1500) + '\n\n请在看板详情页裁决,或直接回复指示。裁决后会有新 Worker 带着裁决答案接手。\n\n(若收到时任务已被裁决或归档,说明本通知投递晚于处理——先用 task_list/get-tasks 核对状态,勿重复裁决。)', 'notice', '任务待裁决: ' + t.title)) } catch (e) { console.error('[task-board] escalate notify failed:', String(e)) }
267
267
  }
268
268
  function maybeNotify(sid, task) { if (task && task.escalation) { notifyMainWindow(sid, task, task.escalation.question) } }
269
269
 
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "dsh-agent-board",
3
3
  "description": "DeepSeek Harness 智能看板:任务卡片 + 一次性 Worker/Verifier 派发 + 依赖调度 + 管线分档 + Team 模式(歧义上报主窗口裁决)",
4
- "version": "1.1.2",
4
+ "version": "1.1.3",
5
5
  "type": "module",
6
6
  "main": "./index.mjs",
7
7
  "scripts": {
8
8
  "test": "node --test test/core.test.mjs",
9
9
  "prepublishOnly": "node --check index.mjs && node --check lib/client.js && node --check lib/core.mjs && npm test",
10
- "dev": "node scripts/dev-watch.cjs"
10
+ "dev": "node scripts/dev-watch.cjs",
11
+ "e2e": "node scripts/e2e.cjs"
11
12
  },
12
13
  "exports": {
13
14
  ".": "./index.mjs",