dsh-mutipleagent 0.0.0-stage → 0.2.1

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 (138) hide show
  1. package/CHANGELOG.md +149 -0
  2. package/CONTRIBUTING.md +49 -0
  3. package/LICENSE +21 -0
  4. package/README.en.md +95 -0
  5. package/README.md +273 -2
  6. package/SECURITY.md +27 -0
  7. package/THIRD_PARTY_NOTICES.md +29 -0
  8. package/assets/agents/MAGPIE-LICENSE +21 -0
  9. package/assets/agents/README.md +47 -0
  10. package/assets/agents/antigravity.png +0 -0
  11. package/assets/agents/claude.png +0 -0
  12. package/assets/agents/codex.png +0 -0
  13. package/assets/agents/copilot.svg +1 -0
  14. package/assets/agents/dsh.svg +1 -0
  15. package/assets/agents/gemini.png +0 -0
  16. package/assets/agents/grok.svg +1 -0
  17. package/assets/agents/hermes.svg +1 -0
  18. package/assets/agents/kimi.svg +1 -0
  19. package/assets/agents/omp.svg +7 -0
  20. package/assets/agents/opencode.svg +1 -0
  21. package/assets/agents/pi.svg +1 -0
  22. package/assets/kenney/LICENSE-furniture-kit.txt +23 -0
  23. package/assets/kenney/LICENSE-mini-characters.txt +28 -0
  24. package/assets/kenney/characters/Textures/colormap.png +0 -0
  25. package/assets/kenney/characters/character-female-a.glb +0 -0
  26. package/assets/kenney/characters/character-female-b.glb +0 -0
  27. package/assets/kenney/characters/character-female-c.glb +0 -0
  28. package/assets/kenney/characters/character-female-d.glb +0 -0
  29. package/assets/kenney/characters/character-female-e.glb +0 -0
  30. package/assets/kenney/characters/character-female-f.glb +0 -0
  31. package/assets/kenney/characters/character-male-a.glb +0 -0
  32. package/assets/kenney/characters/character-male-b.glb +0 -0
  33. package/assets/kenney/characters/character-male-c.glb +0 -0
  34. package/assets/kenney/characters/character-male-d.glb +0 -0
  35. package/assets/kenney/characters/character-male-e.glb +0 -0
  36. package/assets/kenney/characters/character-male-f.glb +0 -0
  37. package/assets/kenney/furniture/benchCushion.glb +0 -0
  38. package/assets/kenney/furniture/bookcaseOpen.glb +0 -0
  39. package/assets/kenney/furniture/books.glb +0 -0
  40. package/assets/kenney/furniture/cabinetTelevision.glb +0 -0
  41. package/assets/kenney/furniture/cardboardBoxClosed.glb +0 -0
  42. package/assets/kenney/furniture/chairCushion.glb +0 -0
  43. package/assets/kenney/furniture/chairDesk.glb +0 -0
  44. package/assets/kenney/furniture/chairModernCushion.glb +0 -0
  45. package/assets/kenney/furniture/coatRackStanding.glb +0 -0
  46. package/assets/kenney/furniture/computerKeyboard.glb +0 -0
  47. package/assets/kenney/furniture/computerMouse.glb +0 -0
  48. package/assets/kenney/furniture/computerScreen.glb +0 -0
  49. package/assets/kenney/furniture/desk.glb +0 -0
  50. package/assets/kenney/furniture/doorway.glb +0 -0
  51. package/assets/kenney/furniture/kitchenBar.glb +0 -0
  52. package/assets/kenney/furniture/kitchenCabinet.glb +0 -0
  53. package/assets/kenney/furniture/kitchenCoffeeMachine.glb +0 -0
  54. package/assets/kenney/furniture/kitchenFridgeLarge.glb +0 -0
  55. package/assets/kenney/furniture/kitchenMicrowave.glb +0 -0
  56. package/assets/kenney/furniture/kitchenSink.glb +0 -0
  57. package/assets/kenney/furniture/lampRoundFloor.glb +0 -0
  58. package/assets/kenney/furniture/lampSquareTable.glb +0 -0
  59. package/assets/kenney/furniture/laptop.glb +0 -0
  60. package/assets/kenney/furniture/loungeChairRelax.glb +0 -0
  61. package/assets/kenney/furniture/loungeSofa.glb +0 -0
  62. package/assets/kenney/furniture/plantSmall1.glb +0 -0
  63. package/assets/kenney/furniture/plantSmall2.glb +0 -0
  64. package/assets/kenney/furniture/plantSmall3.glb +0 -0
  65. package/assets/kenney/furniture/pottedPlant.glb +0 -0
  66. package/assets/kenney/furniture/radio.glb +0 -0
  67. package/assets/kenney/furniture/rugRectangle.glb +0 -0
  68. package/assets/kenney/furniture/rugRound.glb +0 -0
  69. package/assets/kenney/furniture/sideTable.glb +0 -0
  70. package/assets/kenney/furniture/speaker.glb +0 -0
  71. package/assets/kenney/furniture/stoolBar.glb +0 -0
  72. package/assets/kenney/furniture/table.glb +0 -0
  73. package/assets/kenney/furniture/tableCoffee.glb +0 -0
  74. package/assets/kenney/furniture/tableRound.glb +0 -0
  75. package/assets/kenney/furniture/televisionModern.glb +0 -0
  76. package/assets/kenney/furniture/toaster.glb +0 -0
  77. package/assets/kenney/furniture/trashcan.glb +0 -0
  78. package/assets/kenney/furniture/wallWindow.glb +0 -0
  79. package/assets/logo.svg +12 -0
  80. package/assets/scene-icons/arcade.png +0 -0
  81. package/assets/scene-icons/cafe.png +0 -0
  82. package/assets/scene-icons/castle.png +0 -0
  83. package/assets/scene-icons/christmas.png +0 -0
  84. package/assets/scene-icons/graveyard.png +0 -0
  85. package/assets/scene-icons/map.png +0 -0
  86. package/assets/scene-icons/office.png +0 -0
  87. package/assets/scene-icons/pirate.png +0 -0
  88. package/assets/scene-icons/station.png +0 -0
  89. package/assets/scenes/arcade.jpg +0 -0
  90. package/assets/scenes/cafe.jpg +0 -0
  91. package/assets/scenes/castle.jpg +0 -0
  92. package/assets/scenes/christmas.jpg +0 -0
  93. package/assets/scenes/graveyard.jpg +0 -0
  94. package/assets/scenes/office.jpg +0 -0
  95. package/assets/scenes/pirate.jpg +0 -0
  96. package/assets/scenes/station.jpg +0 -0
  97. package/client.js +90 -0
  98. package/cordis.patch.yml +3 -0
  99. package/harness.cjs +49 -0
  100. package/package.json +87 -4
  101. package/public/app.js +1 -0
  102. package/public/chunks/chunk-RQUUGNU7.js +4305 -0
  103. package/public/demo-icons/arrow-counterclockwise.svg +4 -0
  104. package/public/demo-icons/arrow-right.svg +3 -0
  105. package/public/demo-icons/bell.svg +3 -0
  106. package/public/demo-icons/box-seam-fill.svg +3 -0
  107. package/public/demo-icons/chat-left-text-fill.svg +3 -0
  108. package/public/demo-icons/check-lg.svg +3 -0
  109. package/public/demo-icons/chevron-down.svg +3 -0
  110. package/public/demo-icons/cpu-fill.svg +4 -0
  111. package/public/demo-icons/crosshair.svg +3 -0
  112. package/public/demo-icons/diagram-3-fill.svg +3 -0
  113. package/public/demo-icons/file-earmark-code-fill.svg +3 -0
  114. package/public/demo-icons/fullscreen.svg +3 -0
  115. package/public/demo-icons/pause-fill.svg +3 -0
  116. package/public/demo-icons/people-fill.svg +3 -0
  117. package/public/demo-icons/pie-chart-fill.svg +3 -0
  118. package/public/demo-icons/play-fill.svg +3 -0
  119. package/public/demo-icons/search.svg +3 -0
  120. package/public/demo-icons/shield-check.svg +4 -0
  121. package/public/demo-icons/stack.svg +4 -0
  122. package/public/demo-icons/x-lg.svg +3 -0
  123. package/public/demo.css +173 -0
  124. package/public/demo.html +64 -0
  125. package/public/demo.js +7 -0
  126. package/public/index.html +59 -0
  127. package/public/style.css +15 -0
  128. package/public/vendor/office.js +1631 -0
  129. package/src/codex.js +674 -0
  130. package/src/demo.js +103 -0
  131. package/src/harness-watcher.js +584 -0
  132. package/src/server.js +239 -0
  133. package/vendor/licenses/BOOTSTRAP-ICONS-LICENSE.txt +21 -0
  134. package/vendor/licenses/ESBUILD-LICENSE.txt +21 -0
  135. package/vendor/licenses/MESHOPTIMIZER-LICENSE.txt +22 -0
  136. package/vendor/licenses/PLAYWRIGHT-LICENSE.txt +202 -0
  137. package/vendor/licenses/PLAYWRIGHT-NOTICE.txt +5 -0
  138. package/vendor/licenses/THREE-LICENSE.txt +21 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,149 @@
1
+ # 更新日志
2
+
3
+ 本文件记录 `dsh-mutipleagent` 每个版本的变化。npm 版本号与 Git 标签一一对应(`0.1.x` ↔ `v0.1.x`),同一份说明也会发布在 [GitHub Releases](https://github.com/lkuliuying/dsh-mutipleagent/releases) 页面,插件市场里的版本说明同样读取这些 release 正文。
4
+
5
+ ## v0.2.1 — 2026-11-10
6
+
7
+ 只读真正变化的会话:功能与 v0.2.0 相同,读取路径更省。
8
+
9
+ ### 改进
10
+
11
+ - 会话读取改用 `sessionQuery.observeSession()` 的观察租约:租约只给出 header 与日志游标,事件在被读取时才物化。游标未变化的会话不再克隆整份日志,也不再重新折叠;本轮复用数通过 `/api/health` 的 `reused` 字段暴露。
12
+ - 冷会话(宿主没有运行中的实例)走持久化的修订号,日志文件没变时直接复用已恢复的会话,不重读 zstd 日志。
13
+ - 观察不可用(宿主未提供该接口、租约创建失败或会话已被清理)时自动回退整份 `readSession()`,行为与 v0.2.0 一致。
14
+
15
+ ### 验证
16
+
17
+ - 84 个测试全绿,新增两条覆盖增量路径:游标未变时不物化事件、租约每次都释放且观察失败时回退整份读取。
18
+
19
+ ## v0.2.0 — 2026-11-10
20
+
21
+ 更快、更省,双语界面与可复现的工程流程;功能与 v0.1.3 一致。
22
+
23
+ ### 新增
24
+
25
+ - 中英双语界面:默认跟随系统语言,顶栏可切换,选择保存在本地。
26
+ - `/api/health` 返回版本、运行时长、客户端数、会话/成员数、revision、上次读取耗时与轮询状态,便于排查"数据没动"。
27
+ - 静态资源支持 `ETag` / `304` 与 gzip,首次加载后可复用缓存。
28
+ - `npm run screenshots`:用演示数据自动生成 README 与插件市场截图,并写 `screenshots.json`。
29
+ - 安全与协作文件:`SECURITY.md`、`CONTRIBUTING.md`、issue / PR 模板、英文 `README.en.md`。
30
+
31
+ ### 改进
32
+
33
+ - 轮询按需:没有页面连接也没有 SSE 订阅时不再定时读会话;页面打开或客户端接入时立即刷新。
34
+ - 折叠结果按日志指纹复用:会话事件没有新增时不再每秒重新折叠全部团队。
35
+ - 构建改用 esbuild 代码分割,`three.js` 只打一份共享 chunk:`public/app.js` 从 731.6 KB 降到 10.5 KB(gzip 4.1 KB),`public/demo.js` 从 814 KB 降到 73.4 KB(gzip 23.2 KB);共享 chunk 790.1 KB(gzip 206 KB),两个页面共用且在切页时命中缓存。
36
+ - 3D 首屏只等家具与前 3 个角色,其余模型后台补齐,单个模型失败也不再阻塞场景。
37
+ - 响应头补充 `referrer-policy`、`permissions-policy`、`cross-origin-resource-policy`,CSP 追加 `object-src 'none'` 与 `form-action 'none'`;面板 iframe 改用 `no-referrer`,并写明同源沙箱的取舍。
38
+ - 仓库工程化:`.gitattributes`、ESLint、Prettier、`npm run check:compat`、GitHub Actions(Node 22.19 与 24 矩阵、浏览器验收、构建产物一致性、发布包清单)与 `npm run release` 一键发布。
39
+ - `engines.dsh` 由 `0.2.2-rc.1` 放宽为 `^0.2.2-rc.1`,同一 minor 内的新预发布不再被判为不兼容。
40
+ - 文档:`design-qa.md` 移入 `docs/`;README 增加截图、FAQ 与贡献入口。
41
+
42
+ ### 修复
43
+
44
+ - 修复演示模式下 `/api/health` 抛错的问题(`status()` 与基类的 Agent 状态写入方法重名)。
45
+ - 修复 `src/codex.js` 中报告调用的无用赋值(ESLint `no-unused-vars`)。
46
+ - 修复模型未加载完成时 `actorFor()` 取到空角色导致的潜在空引用。
47
+ - 修正 `vendor/office3d.js` 里过时的打包注释。
48
+ - 修复默认语言误跟 Node 的 `navigator.language` 走的问题:CI(英文环境)上界面默认变英文、中文用例集体失败;现在只有浏览器才按浏览器语言判断,Node 下固定中文,并把 UI 用例的浏览器语言钉在 `zh-CN`。
49
+ - 修复"搜索结果显示中点击没反应":快照刷新时列表会被整体重建,正在点的按钮被摘掉;现在命中集合不变时只更新高亮,不重建 DOM(搜索列表与"模式/会话"下拉同理)。
50
+
51
+ ### 验证
52
+
53
+ 82 项单元测试(行覆盖 92.7%)、lint / 格式 / 兼容自检通过;CI 在 Node 22.19 与 24 上运行单元测试与覆盖率门槛,并在浏览器里跑 WebGL 与插件面板验收。
54
+
55
+ ## 未发布
56
+
57
+ - 无。
58
+
59
+ ## v0.1.3 — 2026-11-09
60
+
61
+ 屏幕详情、通知中心与 3D 细节。
62
+
63
+ ### 新增
64
+
65
+ - 点击任意工位显示器可打开屏幕详情:真实 Agent、状态、任务、模型 / 工具与最近事件;支持 Esc、遮罩和关闭按钮,移动端改为可读文本布局。
66
+ - 通知中心新增「全部已读」与分类图标,窄屏也保留入口。
67
+
68
+ ### 改进
69
+
70
+ - 3D 办公室:角色入座、面向显示器并敲键盘 / 动鼠标;屏幕显示当前状态与最近事件;主 / 子 Agent 之间的任务和汇报以「屏幕到屏幕」的光点流线呈现。
71
+ - 顶部「模式」改为下拉选择真实会话 / 演示会话,与目录、会话下拉同一交互,但不需要搜索。
72
+ - 通知中心重做:红点按已读锚点消除,三行摘要更清晰。
73
+ - 墙面标识改为「DSH 控制」「Agent 协作」,中文字体自适应,不再裁切。
74
+ - 根会话上限从 60 提升到 500,按创建时间倒序;超过上限会提示总数。
75
+ - 搜索支持跨目录会话标题,选中后自动切换目录并清理查询。
76
+
77
+ ### 修复
78
+
79
+ - 修复跨目录打开时的假错误提示。
80
+ - 修复 390px 宽度下搜索结果被遮挡的问题。
81
+
82
+ ### 验证
83
+
84
+ 76 项单元测试、25 项浏览器验收,以及 Harness `0.2.2-rc.1` 实际 SDK 的隔离加载检查通过。
85
+
86
+ ## v0.1.2 — 2026-11-09
87
+
88
+ 可搜索下拉与输入交互改造。
89
+
90
+ ### 新增
91
+
92
+ - 工作目录与会话下拉支持直接搜索,长路径和同名会话更容易区分。
93
+ - 下拉支持方向键、Home / End、Enter、Escape 和 Tab 交互,避免中文输入法组合期间提前选择。
94
+
95
+ ### 改进
96
+
97
+ - 搜索框和会话选择控件统一为蓝白风格。
98
+ - 实时更新保留筛选、焦点和高亮;搜索收起后重新打开时使用最新团队数据。
99
+ - 适配团队弹窗、手机触屏、空会话状态与减少动画设置。
100
+ - 保留目录联动、地址与选择记忆、仅跟随当前目录等规则。
101
+
102
+ ### 验证
103
+
104
+ 75 项测试通过,浏览器交互验收通过,Harness `0.2.2-rc.1` 实际 SDK 的隔离加载检查通过;未新增依赖或后端接口。
105
+
106
+ ## v0.1.1 — 2026-11-09
107
+
108
+ 工作目录与会话两级选择。
109
+
110
+ ### 新增
111
+
112
+ - 先选择工作目录,再选择该目录内的会话;完整路径区分同名目录。
113
+ - 会话显示真实标题、创建时间和短 ID;未记录目录的会话单独归组。
114
+ - 记住上次选择,明确指定的会话地址优先;仅跟随当前目录的新会话。
115
+ - 窄窗口通过「会话 / 团队」使用同样的目录筛选。
116
+
117
+ ### 修复
118
+
119
+ - 修复会话列表大量显示同名目录、难以辨认具体任务的问题。
120
+
121
+ ### 验证
122
+
123
+ 41 项相关回归、Chrome 桌面与紧凑窗口检查、原有页面兼容检查,以及真实 Harness SDK 的隔离冒烟检查通过;检查未调用模型、未读取真实用户会话。
124
+
125
+ ## v0.1 — 2026-11-09
126
+
127
+ 首个公开版本。
128
+
129
+ ### 新增
130
+
131
+ - 在 Harness 侧栏提供「多 Agent 办公室」入口,页面位于宿主的 `/dsh-mutipleagent/` 路由,Web 与 Desktop 共用同源入口。
132
+ - 以 3D 办公室呈现真实主会话、子 Agent、任务与汇报;没有百分比时显示「未记录」,子 Agent 结束不代表主任务完成。
133
+ - 支持切换主会话、选择成员、搜索任务、查看任务与汇报全文,以及切换到明确标记的模拟演示。
134
+ - 只读观察:不启动任务、不调用模型、不审批、不修改会话;停用或卸载时释放路由、轮询、事件连接与页面资源。
135
+ - 构建产物与模型随包提供,不使用 CDN,也不需要 API Key。
136
+
137
+ ### 兼容
138
+
139
+ - DeepSeek Harness `0.2.2-rc.1`
140
+ - Node.js `^22.19.0 || >=24.0.0`
141
+
142
+ ## 版本兼容说明
143
+
144
+ | 插件版本 | Harness 目标版本 | Node.js |
145
+ | --- | --- | --- |
146
+ | v0.1.3 | `0.2.2-rc.1` | `^22.19.0 \|\| >=24.0.0` |
147
+ | v0.1.2 | `0.2.2-rc.1` | `^22.19.0 \|\| >=24.0.0` |
148
+ | v0.1.1 | `0.2.2-rc.1` | `^22.19.0 \|\| >=24.0.0` |
149
+ | v0.1 | `0.2.2-rc.1` | `^22.19.0 \|\| >=24.0.0` |
@@ -0,0 +1,49 @@
1
+ # 参与开发
2
+
3
+ 欢迎 issue、截图和 PR。改动前请先看这一页,能省掉来回。
4
+
5
+ ## 环境
6
+
7
+ - Node.js `^22.19.0 || >=24.0.0`(与 `package.json` 的 `engines` 一致)
8
+ - 支持 WebGL 的浏览器;浏览器测试使用 Playwright Chromium(`npx playwright install chromium`)
9
+ - Windows、macOS、Linux 都可以开发;本地服务只监听 `127.0.0.1`
10
+
11
+ npm ci
12
+ npm run build
13
+ npm test
14
+
15
+ ## 常用命令
16
+
17
+ | 命令 | 作用 |
18
+ | --- | --- |
19
+ | `npm run build` | esbuild 打包 `web/` 到 `public/`(含共享 chunk) |
20
+ | `npm test` | 单元测试(Node 内置 test runner) |
21
+ | `npm run test:ui` | Playwright 浏览器验收(WebGL、交互、响应式) |
22
+ | `npm run test:plugin:ui` | 以插件面板形态验收 |
23
+ | `npm run smoke:host` | 在隔离进程用本机 Desktop 的真实 SDK 加载插件 |
24
+ | `npm run lint` / `npm run format` | ESLint / Prettier |
25
+ | `npm run check:compat` | 校验 `engines`、入口、`dsh.bundle.patch` 与版本一致性 |
26
+ | `npm run screenshots` | 启动演示服务并生成 `assets/screenshots/*.jpg` 与 `screenshots.json` |
27
+
28
+ ## 改动约定
29
+
30
+ - **不要手改构建产物**:`public/app.js`、`public/demo.js`、`public/chunks/**` 由 `npm run build` 生成,CI 会检查它们与源码一致。
31
+ - 源码位置:`src/` 是只读服务与 Harness 会话解析;`web/` 是页面交互与 3D 场景;`vendor/` 是固定版本的上游渲染代码(尽量少改,改了要写清原因)。
32
+ - 新增用户可见文案时同时补齐 `web/i18n.mjs` 的中英文条目,不要只写中文。
33
+ - 提交前跑 `npm run lint && npm run format:check && npm test`。CI 会在 Node 22.19 与 24 上重复这些检查。
34
+ - 提交信息用 `type(scope): 说明` 的形式(`feat`、`fix`、`docs`、`chore`、`refactor`、`test`、`perf`、`build`、`ci`)。
35
+ - 一次 PR 只做一件事;涉及界面的改动请附截图(`npm run screenshots` 生成的图可直接引用)。
36
+
37
+ ## 发布
38
+
39
+ 维护者执行:
40
+
41
+ npm run release -- 0.2.0
42
+
43
+ 脚本会校验版本递增、要求 CHANGELOG 已有 `## v0.2.0` 段落、跑全部闸门,然后提交、打 tag 并推送。推 tag 后 `.github/workflows/release.yml` 会创建 GitHub Release,并在配置了 `NPM_TOKEN` 时发布到 npm。
44
+
45
+ ## 不要做的事
46
+
47
+ - 不要新增对会话文件的直接路径读取——只走 `sessionQuery` 公开接口。
48
+ - 不要引入 CDN、外部字体、遥测或任何外发请求。
49
+ - 不要把只读观察扩成"能启动/审批任务"的写操作,这是插件的核心边界。
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 cheoyu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.en.md ADDED
@@ -0,0 +1,95 @@
1
+ # dsh-mutipleagent
2
+
3
+ [![ci](https://github.com/lkuliuying/dsh-mutipleagent/actions/workflows/ci.yml/badge.svg)](https://github.com/lkuliuying/dsh-mutipleagent/actions/workflows/ci.yml)
4
+ [![license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
5
+
6
+ English · [简体中文](README.md)
7
+
8
+ A 3D office for DeepSeek Harness multi-agent work. Open it from the Harness sidebar and watch the real root session, its sub-agents, tool activity and final reports as characters at desks.
9
+
10
+ **Read-only.** It never starts, pauses or approves tasks, never calls a model, never writes to a session, and never sends anything off the machine.
11
+
12
+ ![The 3D office](https://raw.githubusercontent.com/lkuliuying/dsh-mutipleagent/main/assets/screenshots/demo-office-en.jpg)
13
+
14
+ | Task detail | Activity feed |
15
+ | --- | --- |
16
+ | ![Task detail](https://raw.githubusercontent.com/lkuliuying/dsh-mutipleagent/main/assets/screenshots/demo-task-detail-en.jpg) | ![Activity feed](https://raw.githubusercontent.com/lkuliuying/dsh-mutipleagent/main/assets/screenshots/demo-notifications-en.jpg) |
17
+
18
+ Generated from demo data with `npm run screenshots`. The interface ships in Chinese and English — switch with the 中 / EN control in the top bar. In live mode, task text, agent names and event previews stay exactly as they appear in your session logs, so they are not translated.
19
+
20
+ Current version `v0.2.1`, package `dsh-mutipleagent`. Compatible with DeepSeek Harness `^0.2.2-rc.1` and Node.js `^22.19.0 || >=24.0.0`. See [CHANGELOG.md](CHANGELOG.md) for per-version notes and [Releases](https://github.com/lkuliuying/dsh-mutipleagent/releases) for the published notes.
21
+
22
+ ## What's new in v0.2.1
23
+
24
+ - Reads only expand what actually changed: `sessionQuery.observeSession()` leases hand back the header and the log cursor, and events materialize on demand. A session whose cursor did not move is neither cloned nor re-folded; `/api/health` reports the reuse count as `reused`.
25
+ - Sessions without a live instance are gated by the persistence revision, so an unchanged log is not re-read; when observation is unavailable the reader falls back to the full `readSession()`.
26
+
27
+ ## What's new in v0.2.0
28
+
29
+ - Chinese and English UI, following the system language by default, switchable in the header.
30
+ - Faster first paint and lighter reads: furniture plus three characters load first, `app.js` drops from 731.6 KB to 10.5 KB and `demo.js` from 814 KB to 73.4 KB (one shared `three.js` chunk, gzip on), and unchanged sessions are no longer re-folded every second.
31
+ - Static files serve `ETag` / `304` and gzip; polling stops when no page is connected and refreshes on open.
32
+ - `/api/health` reports version, uptime, client count, read cost and polling state.
33
+ - Tooling: ESLint, Prettier, `.gitattributes`, CI (Node 22.19 / 24, browser acceptance, build freshness) and `npm run release`.
34
+
35
+ ## Install
36
+
37
+ Quit Harness Desktop completely, then:
38
+
39
+ dsh plugin --profile desktop add 'dsh-mutipleagent@https://codeload.github.com/lkuliuying/dsh-mutipleagent/legacy.tar.gz/refs/tags/v0.2.1' --ignore-scripts
40
+
41
+ If `dsh` is not on `PATH`, use the bundled CLI:
42
+
43
+ & 'C:\ProgramSoftware\Deepseek\resources\runtime\cli\bin\dsh.cmd' plugin --profile desktop add 'dsh-mutipleagent@https://codeload.github.com/lkuliuying/dsh-mutipleagent/legacy.tar.gz/refs/tags/v0.2.1' --ignore-scripts
44
+
45
+ Restart Harness and pick **Multi-Agent Office** in the sidebar. No API key, no separate server, nothing else to configure.
46
+
47
+ To build from source instead:
48
+
49
+ npm ci
50
+ npm run build
51
+ npm pack --ignore-scripts
52
+ dsh plugin --profile desktop add "F:\path\to\dsh-mutipleagent-0.1.3.tgz"
53
+
54
+ ## What you get
55
+
56
+ - **Desks, not dashboards.** Agents sit down, face their monitor and type; screens show current status and the latest event. Task hand-offs and reports travel as light trails from screen to screen.
57
+ - **Screen detail.** Click any monitor for the real agent, status, task, model/tool and recent events. Esc, overlay and a close button all work; narrow screens switch to a readable text layout.
58
+ - **Session picker.** Choose a workspace directory, then a session inside it. Search by path, title, time or short ID; identical titles stay distinguishable. Your last choice is remembered.
59
+ - **Notification centre.** Unread dot clears against a read anchor, with "mark all read", category icons and a compact three-line summary.
60
+ - **Graceful degradation.** Without WebGL the team tree, activity log and reports still work, and "reduce motion" is one checkbox away.
61
+ - **Bilingual UI.** Chinese and English, switchable in the header and remembered locally.
62
+
63
+ ## Boundaries
64
+
65
+ - Data comes only from Harness's public `sessionQuery` interface. No session files, no credentials, no private reasoning or system messages.
66
+ - The server binds `127.0.0.1`, serves `GET` only, rejects cross-origin requests and non-loopback hosts, and reuses Harness's owner check when mounted.
67
+ - No telemetry, no external fonts, no CDN, no third-party scripts.
68
+ - Numbers follow recorded events. Some Desktop builds store `spawn_agent` payloads encrypted, so a hand-off may show "not recorded" rather than an invented description.
69
+
70
+ Read [SECURITY.md](SECURITY.md) for the full threat model and how to report a vulnerability privately.
71
+
72
+ ## FAQ
73
+
74
+ **Only the root agent shows up.** The plugin only renders sub-agents that actually existed. Ask for parallel work in the session (for example "spawn two read-only sub-agents, one for the API contract and one for test gaps") and let it run.
75
+
76
+ **Numbers differ from what I saw in the session.** Logs are written per message block, not per token; known sessions are checked roughly once a second and new ones every five seconds. Missing data is shown as "not recorded" instead of a guess.
77
+
78
+ **Does it upload my sessions?** No. See the boundaries above and [SECURITY.md](SECURITY.md).
79
+
80
+ **Port 4317 is taken.** `node src/server.js --port 4320 --open`, or use the plugin panel which has no fixed port.
81
+
82
+ ## Develop
83
+
84
+ npm ci
85
+ npm run build
86
+ npm test
87
+ npm run lint && npm run format:check && npm run check:compat
88
+
89
+ `npm run test:ui` drives the real WebGL page with Playwright. `npm run screenshots` regenerates the images above. `npm run release -- 0.2.0` bumps versions, runs every gate, commits and tags; GitHub Actions then publishes the release.
90
+
91
+ Source layout: `src/` is the read-only server and session parsing, `web/` is the UI and 3D scene, `vendor/` is pinned upstream rendering code, `assets/` holds models and images. See [CONTRIBUTING.md](CONTRIBUTING.md) before sending a PR.
92
+
93
+ ## Licence
94
+
95
+ Based on [Charonyuu/whatsmyagentdoing](https://github.com/Charonyuu/whatsmyagentdoing) (commit `c69bf2bc98cf96a63d146070e9bbc83b507bf0bf`, v0.8.1); upstream MIT licence kept in [LICENSE](LICENSE). Character and furniture models are Kenney Mini Characters and Furniture Kit (CC0), original licences under `assets/kenney`. Full attribution in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
package/README.md CHANGED
@@ -1,3 +1,274 @@
1
- # Temporary Holding Version
1
+ # dsh-mutipleagent
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [![ci](https://github.com/lkuliuying/dsh-mutipleagent/actions/workflows/ci.yml/badge.svg)](https://github.com/lkuliuying/dsh-mutipleagent/actions/workflows/ci.yml)
4
+ [![license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
5
+
6
+ [English](README.en.md) · 简体中文
7
+
8
+ DeepSeek Harness 多 Agent 3D 协作办公室插件。安装后从 Harness 侧栏的「多 Agent 办公室」打开,观察真实主会话、子 Agent、工具活动和完整汇报,沿用本项目已有的 3D 场景与交互。
9
+
10
+ **只读**:不启动任务、不调用模型、不审批、不修改会话,也不把任何内容发到本机以外。
11
+
12
+ ![3D 办公室全景](https://raw.githubusercontent.com/lkuliuying/dsh-mutipleagent/main/assets/screenshots/demo-office.jpg)
13
+
14
+ | 任务详情 | 协作动态 |
15
+ | --- | --- |
16
+ | ![任务详情](https://raw.githubusercontent.com/lkuliuying/dsh-mutipleagent/main/assets/screenshots/demo-task-detail.jpg) | ![协作动态](https://raw.githubusercontent.com/lkuliuying/dsh-mutipleagent/main/assets/screenshots/demo-notifications.jpg) |
17
+
18
+ 以上为 `npm run screenshots` 生成的演示画面(演示数据,非真实会话)。
19
+
20
+ 当前版本为 `v0.2.1`,包名为 `dsh-mutipleagent`,仓库地址为 [lkuliuying/dsh-mutipleagent](https://github.com/lkuliuying/dsh-mutipleagent)。兼容 DeepSeek Harness `^0.2.2-rc.1`,需要 Node.js `^22.19.0 || >=24.0.0`。
21
+
22
+ 各版本变化见 [CHANGELOG.md](CHANGELOG.md),发布说明见 [GitHub Releases](https://github.com/lkuliuying/dsh-mutipleagent/releases)。
23
+
24
+ ## v0.2.1 更新
25
+
26
+ - 读取只展开真正变化的会话:`sessionQuery.observeSession()` 的观察租约只取 header 与日志游标,事件按需物化;游标未变的会话不再克隆整份日志、也不再重新折叠,复用数见 `/api/health` 的 `reused`。
27
+ - 未运行的会话按持久化修订号判断,日志没变就直接复用,不重读 zstd 日志;观察不可用时自动回退整份读取。
28
+
29
+ ## v0.2.0 更新
30
+
31
+ - 中英双语界面,默认跟随系统语言,顶栏可切换。
32
+ - 渲染与读取都提速:首屏只等家具和 3 个角色;`app.js` 从 731.6 KB 降到 10.5 KB、`demo.js` 从 814 KB 降到 73.4 KB,three.js 只打一份共享 chunk 并启用 gzip;会话没有新事件时不再重复折叠。
33
+ - 静态资源支持 `ETag` / `304` 与 gzip;没有页面连接时停止轮询,打开即刷新。
34
+ - `/api/health` 增加版本、运行时长、客户端数、读取耗时与轮询状态。
35
+ - 工程化:ESLint、Prettier、`.gitattributes`、CI(Node 22.19 / 24 + 浏览器验收 + 构建产物一致性)、`npm run release` 一键发布。
36
+ - 修正演示模式下 `/api/health` 报错、模型未加载完成时的空引用等问题。
37
+
38
+ 完整变更(含 v0.1~v0.1.3)见 [CHANGELOG.md](CHANGELOG.md),发布说明见 [Releases](https://github.com/lkuliuying/dsh-mutipleagent/releases)。
39
+
40
+ ## 安装到 Harness
41
+
42
+ ### 线上安装与更新
43
+
44
+ 完全退出 Harness Desktop,在 PowerShell 运行以下命令,再重新启动 Harness:
45
+
46
+ dsh plugin --profile desktop add 'dsh-mutipleagent@https://codeload.github.com/lkuliuying/dsh-mutipleagent/legacy.tar.gz/refs/tags/v0.2.1' --ignore-scripts
47
+
48
+ 如果终端没有 `dsh` 命令,可使用 Desktop 随附的 CLI:
49
+
50
+ & 'C:\ProgramSoftware\Deepseek\resources\runtime\cli\bin\dsh.cmd' plugin --profile desktop add 'dsh-mutipleagent@https://codeload.github.com/lkuliuying/dsh-mutipleagent/legacy.tar.gz/refs/tags/v0.2.1' --ignore-scripts
51
+
52
+ 上述命令既可首次安装,也可把原来固定在 `v0.1`~`v0.1.3` 的安装切换到 `v0.2.1`。安装源固定到具体标签,后续升级需改为目标版本的标签;仅重启不会切换版本。
53
+
54
+ ### 从本地源码打包
55
+
56
+ 在项目目录完成构建与本地打包:
57
+
58
+ npm ci
59
+ npm run build
60
+ node -e "require('node:fs').mkdirSync('.artifacts', { recursive: true })"
61
+ npm pack --pack-destination .artifacts --ignore-scripts
62
+
63
+ 退出 Harness Desktop 后,安装本地包;路径按实际位置调整:
64
+
65
+ dsh plugin --profile desktop add "F:\Program\Multiple-Agent\.artifacts\dsh-mutipleagent-0.2.1.tgz"
66
+
67
+ 如果终端没有 `dsh` 命令,可使用 Desktop 随附的 CLI,例如 PowerShell:
68
+
69
+ & 'C:\ProgramSoftware\Deepseek\resources\runtime\cli\bin\dsh.cmd' plugin --profile desktop add 'F:\Program\Multiple-Agent\.artifacts\dsh-mutipleagent-0.2.1.tgz'
70
+
71
+ 重启 Harness,在侧栏选择「多 Agent 办公室」。不需要单独运行办公室服务,也不需要设置 API Key。插件从 `sessionQuery` 公开接口读取会话,不读取 `.codex`、凭据或私有推理。
72
+
73
+ 也可以从 Git 地址安装最新主分支:
74
+
75
+ dsh plugin --profile desktop add https://github.com/lkuliuying/dsh-mutipleagent.git
76
+
77
+ ### 插件行为与边界
78
+
79
+ - 页面位于宿主的 `/dsh-mutipleagent/` 路由,Web 和 Desktop 共用同源入口;会话接口沿用 Harness 登录校验,仅允许 owner 访问。
80
+ - 主会话与真实子 Agent 的关系、状态和正文来自已记录事件。没有百分比时显示「未记录」;子 Agent 结束不代表主任务完成。
81
+ - 先选择工作目录,再从该目录选择具体会话。展开下拉后可按完整路径或会话标题、时间、ID 筛选;目录显示完整路径和会话数量,会话分行显示标题、创建时间与短 ID,同名会话也能区分。未记录目录的会话单独归组。
82
+ - 记住上次选择的目录和会话;地址中明确指定的会话优先。「跟随新会话」仅跟随当前目录,其他项目的新任务不会抢走显示。窄窗口通过「会话 / 团队」打开同样的目录筛选。
83
+ - 可以选择成员、搜索任务、查看任务与汇报全文,或切换到明确标记的模拟演示。后台会话标题最多每 30 秒刷新一次,正在观察的团队随原有轮询更新。
84
+ - 搜索与下拉支持方向键、Home / End 和 Enter;下拉中 Escape 取消筛选并返回触发器,Tab 继续切换焦点。任务搜索按 `/` 聚焦,Escape 先收起结果,再按一次清空;清空按钮保留输入框焦点。中文输入法组合期间 Enter 不会提前选择。演示模式使用同样的控件。
85
+ - 插件只读观察,不启动任务、不调用模型、不审批、不修改会话。需要在 Harness 会话中实际创建子 Agent 才会出现真实协作。
86
+ - 停用或卸载时释放路由、轮询、事件连接和页面资源。构建产物与模型随包提供,不使用 CDN。
87
+
88
+ 插件源码入口为 `harness.cjs` 和 `client.js`;`src/harness-watcher.js` 将公开会话事件转换为办公室快照,`cordis.patch.yml` 负责宿主插件注册。不会安装第二份 Harness 运行时,也未新增 npm 依赖。
89
+
90
+ 插件验证命令:
91
+
92
+ npm test
93
+ npm run test:plugin:ui
94
+ npm run smoke:host
95
+
96
+ `smoke:host` 在隔离进程中使用本机 Desktop 的实际 SDK 和合成会话验证插件加载,不调用模型、不安装插件、不写入用户 profile。可通过 `DSH_DESKTOP_EXE` 指定其他安装路径。
97
+
98
+ ## 独立 Codex 观察器
99
+
100
+ 继续在 Codex Desktop 或 CLI 中执行任务,在本地浏览器观察主 Agent 分配任务、子 Agent 并行执行、提交汇报,以及主 Agent 的最终总结。
101
+
102
+ 这是只读观察器。它不会启动 Codex 任务、修改 Codex 配置、处理审批、调用模型或上传会话内容。
103
+
104
+ ## 开始使用
105
+
106
+ 需要 Node.js 20 或更新版本,以及支持 WebGL 的浏览器。交付目录已包含构建好的页面和全部模型,日常使用不需要安装 npm 依赖,也不需要填写 API Key。
107
+
108
+ Windows 双击 **启动办公室.cmd**,服务就绪后会打开浏览器:
109
+
110
+ http://127.0.0.1:4317
111
+
112
+ 也可以在此目录运行:
113
+
114
+ node src/server.js --open
115
+
116
+ 保持启动窗口运行;关闭窗口或按 Ctrl+C 停止服务。端口被占用时可以运行:
117
+
118
+ node src/server.js --port 4320 --open
119
+
120
+ 默认读取当前用户的 .codex/sessions。自定义数据目录时,在 PowerShell 中设置:
121
+
122
+ $env:CODEX_HOME = 'D:\your-codex-home'
123
+ node src/server.js --open
124
+
125
+ 这里填写 Codex 数据目录,不是 sessions 子目录。应用只读该目录中的会话文件,不读取 auth.json 或其他凭据文件。
126
+
127
+ ## 怎么看
128
+
129
+ - 左侧选择一个主任务,团队树包含它的子 Agent 和后代;完成的成员仍留在团队中。
130
+ - 拖动旋转办公室,滚轮缩放;点击人物或团队成员查看详情,点击显示器查看该工位的屏幕详情,点击复位按钮恢复全景。
131
+ - 顶部「模式」下拉切换真实会话与演示会话;铃铛查看协作动态,打开面板后红点自动消除,也可点「全部已读」。
132
+ - 右侧查看任务原文、实际工具活动、可见进展消息和汇报全文;汇报可展开和复制。
133
+ - 底部时间线展示分配、追加指令、等待、汇报、完成和失败。分配用消息流表达;子 Agent 汇报时走向协调区,界面状态立即更新。
134
+ - 上次选择的任务与减少动画偏好保存在当前浏览器。首次读取、刷新、切换任务或重连时不播放历史动画。
135
+ - 无 WebGL 时仍可使用团队树、活动记录与报告;在原 Codex 中回答审批或追问。
136
+
137
+ 要实际出现子 Agent,请在 Codex 中明确要求并行分工,例如:
138
+
139
+ > 请启动两个只读子 Agent:一个检查接口契约,另一个检查测试缺口。等待它们完成,再汇总发现和建议。
140
+
141
+ ## 演示
142
+
143
+ ### 参考图风格的独立 Demo
144
+
145
+ 打开 http://127.0.0.1:4317/demo.html ,使用全屏等距 3D 场景、蓝白悬浮卡片、右侧任务详情和底部协作流程。原监控页仍位于根路径。
146
+
147
+ 该页面使用纯前端模拟数据,不请求真实会话接口。默认停在第 16 秒的并行执行阶段;点击“播放演示”继续,完整流程共 48 秒。可暂停、重新开始,或点击底部阶段预览对应状态。进度百分比表示脚本进度。
148
+
149
+ 点击场景标签、人物、工位或任务列表选择 Agent;搜索框可按角色、任务或文件名过滤。任务完成后可阅读完整模拟汇报,最后由主 Agent 汇总。顶部还可切换第二组只读审阅示例。
150
+
151
+ 窄屏默认收起详情,使用“Agent 详情”打开;底部“协作流程与任务”可展开。减少动画和镜头复位位于左下方。
152
+
153
+ 新增页面源码为 web/demo.js、web/demo-scene.js 和 web/demo-state.mjs;样式为 public/demo.css。运行 npm run build 同时构建原监控页和新 Demo,未增加框架或后端接口。
154
+
155
+ ### 用参考图界面观察真实任务
156
+
157
+ 保持普通模式服务运行,打开 http://127.0.0.1:4317/demo.html?mode=live 。也可以点击 Demo 顶部“演示数据”切换到真实模式。真实模式沿用同一套 3D 场景、卡片与流程布局,数据通过已有只读 API 和 SSE 接入,不新增后端接口。
158
+
159
+ - 顶部选择主会话,页面恢复上次选择。URL 的 rootId 参数可固定观察指定会话;“跟随新会话”会在发现新建主会话时切换,“固定当前会话”持续观察当前团队。这两个选项不暂停 Codex。
160
+ - 点击人物标签、工位或任务列表查看实际成员;“团队”按钮在窄屏或 WebGL 不可用时也能选择成员和主会话。支持超过四人及嵌套团队。已结束的上一轮成员可通过“查看历史成员”展开,保留结果但不计入本轮指标。
161
+ - 分配、追加消息和汇报出现时播放蓝色消息流;子 Agent 收到真实汇报记录后走向父 Agent。状态先更新,动画独立播放;首次加载、切换和重连不重播历史。
162
+ - “查看汇报全文”和“查看任务原文”按实际记录读取。未知进度显示“未记录”,没有主任务完成事件时不会因为子任务结束而显示全部完成。
163
+ - 左下刷新图标仅重新连接日志流;页面不能启动、暂停、重启或审批 Codex 任务。
164
+
165
+ 真实模式源码为 web/live-source.mjs、web/live-state.mjs 和 web/live-office.js,模拟模式仍独立保留。
166
+
167
+ 如希望新 Codex 项目任务默认并行协作,可以自行在用户级 ~/.codex/AGENTS.md 中规定“主 Agent 统筹,独立工作交给 2~3 个子 Agent,收集真实汇报后汇总”。实际执行仍受会话权限、更高优先级指令和任务是否可拆分约束。观察页面本身不会修改规则或强制 Codex 生成子 Agent。
168
+
169
+ 视觉核对与交互验收见 [docs/design-qa.md](docs/design-qa.md)。
170
+
171
+ ### 原版办公室演示
172
+
173
+ 双击 **演示办公室.cmd**,或者运行:
174
+
175
+ node src/server.js --demo --port 4318 --open
176
+
177
+ 演示服务使用内存中的模拟团队,不读取本机 Codex 日志,不执行任务。页面始终有醒目的演示标记;刷新页面不会重新启动演示序列,重启服务可从头演示。
178
+
179
+ ## 数据与接口
180
+
181
+ 渲染、寻路、人物动作及模型复用自 whatsmyagentdoing;读取流程沿用其轮询与增量尾读思路,针对 Codex 团队关系、完整报告和 Desktop 继承历史增加了专用实现。
182
+
183
+ 服务只监听 127.0.0.1。所有浏览器接口均为 GET,拒绝跨源请求及非本机 Host;没有更新、安装场景、执行任务等远程写入接口。应用不使用遥测、外部字体或 CDN。
184
+
185
+ | 接口 | 用途 |
186
+ | --- | --- |
187
+ | GET /api/sessions?rootId=会话ID | 主任务列表和选中团队快照;省略 rootId 时选择最近任务 |
188
+ | GET /events?rootId=会话ID | SSE 团队快照流,重连后直接重建当前状态 |
189
+ | GET /api/report?sessionId=会话ID&eventId=事件ID | 从原始记录读取完整可见正文 |
190
+ | GET /api/health | 本机存活检查 |
191
+
192
+ Agent 包含 id、parentId、rootId、状态、任务记录和汇报记录;CollaborationEvent 包含事件 ID、会话 ID、目标 ID、时间、类型及短预览。字节偏移和内部文件引用只保留在服务进程中,不向浏览器提供任意路径读取接口。报告正文不做 1500 字符截断,按需读取,不保存副本。
193
+
194
+ ## 接入限制
195
+
196
+ - 已在本机 Codex Desktop 0.167.0-alpha.3.2 的真实会话上验证:任务路径创建结果、父子关系、两份真实子 Agent 最终汇报和完整正文读取。完成当前主任务后的最终回复,会在 Codex 写入日志后同步。
197
+ - 兼容创建结果返回 Agent ID 的形式,以及原生 collab_* 事件。Desktop 子 Agent 继承的历史根据 subagent_history_start_ordinal 排除;内部审批/整理线程不作为协作成员展示。
198
+ - 日志通常按消息块落盘,不逐字同步。已知文件约每秒检查一次,新文件约每五秒发现一次;没有新日志不会自动判定任务失败。
199
+ - 日志不是稳定的公开 API。升级 Codex 后如字段变化,未知状态/缺失正文会明确显示,无法读取的成员不会阻断其他成员。
200
+ - 本机当前 Desktop 的部分 spawn_agent、followup_task 和 send_message 参数以加密载荷落盘,无法从日志恢复分配正文。此时只展示真实关系、事件及“未记录可见明文”,不展示密文、不解密、不用生成文本补全;已记录为明文的最终回复仍可读取全文。纯 AGENTS.md 指令与环境注入不作为用户任务。
201
+ - 默认发现最近 24 小时活跃的日志,最多列出最近 60 个主任务;日期很早但最近续聊的会话也能发现。已选中任务按已知 ID 补齐子日志。
202
+ - 时间线显示最近 40 条协作事件,Agent 活动显示最近 16 条,汇报页显示最近 8 份完整汇报。界面不是完整日志归档;原始记录仍由 Codex 保管。
203
+ - 不读取私有推理、系统消息、开发者消息或凭据;任务与汇报中用户自己提供的内容按原文展示。
204
+ - 本轮主 Agent 的最终结束状态需等本轮交付回复落盘后才能观察;结束与总结路径另由解析测试和浏览器演示验证。
205
+
206
+ ## 常见问题
207
+
208
+ **打开后团队里只有一个主 Agent?**
209
+ 插件只显示真实存在过的子 Agent。需要在 Harness 会话里明确要求并行分工(例如"起两个只读子 Agent 分别检查接口和测试"),并且该会话确实产生了 `spawn_agent` 及后续事件。演示模式(顶部「模式」→「演示会话」)不含真实数据,仅用于看交互。
210
+
211
+ **界面上的数字和我在会话里看到的不一致?**
212
+ 日志按消息块落盘,不是逐字同步;服务约每秒检查一次已知会话、约每五秒发现新会话。百分比与完成数只认已记录事件,缺记录时显示「未记录」,子 Agent 结束也不会把主任务标成完成。
213
+
214
+ **会把我的会话内容上传吗?**
215
+ 不会。服务只监听 `127.0.0.1`,所有接口都是 `GET`,没有遥测、外部字体或 CDN;详细边界见 [SECURITY.md](SECURITY.md)。
216
+
217
+ **Web 版 Harness 能用吗?**
218
+ 可以。面板走宿主的 `/dsh-mutipleagent/` 同源路由,会话接口沿用 Harness 登录校验,仅 owner 可访问。
219
+
220
+ **没有 WebGL 或显卡较弱?**
221
+ 页面会自动降级为团队树、活动记录与汇报列表,功能不丢;也可勾选「减少动画」。
222
+
223
+ **端口 4317 被占用?**
224
+ `node src/server.js --port 4320 --open`,或者直接改用插件面板(走宿主编排,不占用固定端口)。
225
+
226
+ **怎么更新到新版本?**
227
+ 在插件市场更新,或按下方「线上安装与更新」把命令里的 tag 换成目标版本;只重启不会切换版本。
228
+
229
+ ## 参与贡献
230
+
231
+ - 开发与测试约定见 [CONTRIBUTING.md](CONTRIBUTING.md)
232
+ - 安全问题请走私密通道,见 [SECURITY.md](SECURITY.md)
233
+ - 版本变化见 [CHANGELOG.md](CHANGELOG.md)
234
+
235
+ ## 开发与验证
236
+
237
+ 依赖与上游锁定版本一致;锁文件中的下载地址已统一为 npm 官方 registry。
238
+
239
+ npm ci
240
+ npm run build
241
+ npm test
242
+
243
+ 提交前建议跑完整闸门(CI 同样执行):
244
+
245
+ npm run lint
246
+ npm run format:check
247
+ npm run check:compat
248
+ npm test
249
+
250
+ 构建使用 esbuild(代码分割,three.js 打进共享 chunk)和 Three.js。测试使用 Node 内置测试框架;浏览器测试使用已安装的 Google Chrome 和 Playwright,在隔离模拟数据上检查实际 WebGL、交互、响应式布局及无 WebGL 降级。测试不会读取你的真实历史。
251
+
252
+ README 里的截图由演示数据生成,可随时重跑:
253
+
254
+ npm run screenshots
255
+
256
+ 发布新版本(维护者):
257
+
258
+ npm run release -- 0.2.0
259
+
260
+ 脚本会要求 `CHANGELOG.md` 先有对应段落,然后依次跑 lint、格式检查、构建、兼容自检和测试,最后提交并打 tag;推 tag 后由 GitHub Actions 创建 Release。
261
+
262
+ 真实接入检查需要显式给出一个主会话 ID:
263
+
264
+ node tests/live.cjs 主会话ID
265
+
266
+ 该检查只读所选任务及其团队,输出计数和验证结果,不复制任务或汇报原文。验证证据保存在 .verification 中。
267
+
268
+ 源码组织:src 是本地只读服务与 Codex 解析,web 是页面交互和团队场景,vendor 与 public/vendor 是固定版本上游渲染代码,assets 是本地模型和素材。
269
+
270
+ ## 开源许可
271
+
272
+ 基于 [Charonyuu/whatsmyagentdoing](https://github.com/Charonyuu/whatsmyagentdoing),固定提交 c69bf2bc98cf96a63d146070e9bbc83b507bf0bf,版本 0.8.1。上游 MIT 许可证保留在 LICENSE。模型来自 Kenney Mini Characters 与 Furniture Kit(CC0),原始许可证保留在 assets/kenney。其余素材的来源说明保留在 assets/agents/README.md。
273
+
274
+ 详见 THIRD_PARTY_NOTICES.md。观察器和插件不会修改上游仓库、安装全局技能,或更改模型、权限、并发配置及用户级 AGENTS.md 规则。
package/SECURITY.md ADDED
@@ -0,0 +1,27 @@
1
+ # 安全策略
2
+
3
+ ## 支持范围
4
+
5
+ 安全修复只进入最新发布版本。请先确认 `dsh-mutipleagent` 是当前版本(见 [CHANGELOG.md](CHANGELOG.md))再报告问题。
6
+
7
+ ## 报告漏洞
8
+
9
+ 请**不要**在公开 issue 中披露可被利用的细节。使用 GitHub 的私密报告通道:
10
+
11
+ <https://github.com/lkuliuying/dsh-mutipleagent/security/advisories/new>
12
+
13
+ 报告中请尽量包含:受影响版本、复现步骤、期望与实际结果,以及你认为的影响面。48 小时内会收到初步答复;修复发布后会在 Release 说明中致谢(除非你要求匿名)。
14
+
15
+ ## 设计上的安全边界
16
+
17
+ 这个插件是只读观察器,边界写进了代码,也写在这里,便于审计:
18
+
19
+ - **只读**:不启动、暂停或审批任何 Harness 任务,不调用模型,不写入会话文件,不修改配置。
20
+ - **数据来源**:只通过 Harness 公开的 `sessionQuery` 接口读取当前 profile 的会话事件;不读取 `auth.json`、凭据、私有推理、系统消息或开发者消息。
21
+ - **网络**:服务只监听 `127.0.0.1`;所有浏览器接口都是 `GET`;拒绝跨源请求、非本机 Host 和非 owner 访问(沿用宿主登录校验)。没有遥测、外部字体、CDN 或第三方脚本。
22
+ - **渲染**:页面中的任务、汇报等文本一律用 `textContent` 写入,不拼接 HTML。
23
+ - **响应头**:CSP(`default-src 'self'`、`object-src 'none'`、`form-action 'none'`)、`x-content-type-options: nosniff`、`referrer-policy: no-referrer`、`permissions-policy` 关闭摄像头/麦克风/定位/支付/USB、`cross-origin-resource-policy: same-origin`。
24
+ - **面板 iframe**:`sandbox="allow-scripts allow-same-origin"`。同源是必需的(面板要读同源 API 与本地偏好),页面内容全部来自插件自身的静态文件,不接受用户 HTML;弹窗、顶层跳转、表单提交、下载、插件和指针锁定仍被沙箱拒绝。
25
+ - **本地服务**:静态资源带 ETag 与 `must-revalidate`,不会被中间层长期缓存;gzip 缓存上限 32 MB。
26
+
27
+ 如果你发现以上任一边界可以被绕过(例如通过会话内容注入脚本、越权读取其他会话、绕过 owner 校验),那就是安全问题,请按上面的通道报告。