@joekytc/dsh-swarm 0.1.2 → 0.3.0

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 (603) hide show
  1. package/README.md +177 -140
  2. package/README.zh-CN.md +173 -126
  3. package/client/BoardCard.tsx +24 -2
  4. package/client/ConfigSection.tsx +162 -0
  5. package/client/ConfigSelect.tsx +71 -0
  6. package/client/KanbanBoard.tsx +3 -0
  7. package/client/KanbanTab.tsx +4 -3
  8. package/client/TaskDrawer.tsx +4 -26
  9. package/client/WorkflowRail.tsx +3 -1
  10. package/client/config-store.ts +92 -0
  11. package/client/config.css +110 -0
  12. package/client/index.ts +39 -4
  13. package/client/kanban.css +88 -2
  14. package/client/session-bridge.ts +39 -0
  15. package/client/timeline-model.ts +12 -1
  16. package/client/workflow-model.ts +3 -1
  17. package/lib/client.js +519 -56
  18. package/lib/config.d.ts +26 -2
  19. package/lib/config.js +20 -1
  20. package/lib/dispatcher/agent-runner.d.ts +37 -7
  21. package/lib/dispatcher/agent-runner.js +239 -86
  22. package/lib/dispatcher/chain-auditor.d.ts +4 -4
  23. package/lib/dispatcher/chain-auditor.js +14 -9
  24. package/lib/dispatcher/dispatcher.d.ts +69 -10
  25. package/lib/dispatcher/dispatcher.js +281 -42
  26. package/lib/dispatcher/event-waker.d.ts +1 -1
  27. package/lib/dispatcher/event-waker.js +2 -2
  28. package/lib/dispatcher/git-credentials.d.ts +2 -2
  29. package/lib/dispatcher/git-credentials.js +2 -2
  30. package/lib/dispatcher/model-candidates.d.ts +1 -1
  31. package/lib/dispatcher/model-candidates.js +1 -1
  32. package/lib/dispatcher/session-events.d.ts +12 -16
  33. package/lib/dispatcher/session-events.js +18 -6
  34. package/lib/dispatcher/target-repo.d.ts +2 -2
  35. package/lib/dispatcher/target-repo.js +3 -3
  36. package/lib/dispatcher/v-orchestrator.d.ts +44 -11
  37. package/lib/dispatcher/v-orchestrator.js +257 -49
  38. package/lib/dispatcher/watchdog.d.ts +1 -1
  39. package/lib/dispatcher/watchdog.js +2 -2
  40. package/lib/domain/config-override.d.ts +52 -0
  41. package/lib/domain/config-override.js +138 -0
  42. package/lib/domain/delivery-contract.d.ts +4 -3
  43. package/lib/domain/delivery-contract.js +30 -18
  44. package/lib/domain/delivery-evidence.d.ts +1 -1
  45. package/lib/domain/delivery-evidence.js +1 -1
  46. package/lib/domain/event-store.js +1 -1
  47. package/lib/domain/gate-policy.d.ts +26 -0
  48. package/lib/domain/gate-policy.js +44 -0
  49. package/lib/domain/im-message.d.ts +15 -0
  50. package/lib/domain/im-message.js +149 -0
  51. package/lib/domain/kanban-service.d.ts +28 -12
  52. package/lib/domain/kanban-service.js +73 -30
  53. package/lib/domain/memory.js +1 -1
  54. package/lib/domain/ocr-review.d.ts +47 -0
  55. package/lib/domain/ocr-review.js +105 -0
  56. package/lib/domain/permissions.js +6 -6
  57. package/lib/domain/planning-checklist.d.ts +5 -0
  58. package/lib/domain/planning-checklist.js +80 -6
  59. package/lib/domain/projection.js +8 -7
  60. package/lib/domain/review-evidence.js +1 -1
  61. package/lib/domain/state-machine.js +3 -2
  62. package/lib/domain/task-parents.js +1 -1
  63. package/lib/domain/types.d.ts +5 -5
  64. package/lib/index.js +28 -25
  65. package/lib/roles/clean-fs-tools.d.ts +22 -0
  66. package/lib/roles/clean-fs-tools.js +117 -0
  67. package/lib/roles/preset-installer.js +3 -3
  68. package/lib/roles/skill-installer.d.ts +6 -0
  69. package/lib/roles/skill-installer.js +32 -0
  70. package/lib/roles/toolsets.d.ts +71 -15
  71. package/lib/roles/toolsets.js +418 -68
  72. package/lib/roles/wiki-worker.d.ts +1 -0
  73. package/lib/roles/wiki-worker.js +12 -4
  74. package/lib/routes/kanban-http.d.ts +28 -2
  75. package/lib/routes/kanban-http.js +199 -6
  76. package/lib/routes/kanban-sse.d.ts +1 -1
  77. package/lib/routes/kanban-sse.js +1 -1
  78. package/lib/routes/planning-driver.d.ts +6 -2
  79. package/lib/routes/planning-driver.js +15 -7
  80. package/lib/routes/prefix-router.d.ts +19 -3
  81. package/lib/routes/prefix-router.js +40 -3
  82. package/lib/services/config-provider.d.ts +38 -0
  83. package/lib/services/config-provider.js +92 -0
  84. package/lib/services/gate-runner.d.ts +24 -0
  85. package/lib/services/gate-runner.js +87 -0
  86. package/lib/services/im-delivery.d.ts +94 -0
  87. package/lib/services/im-delivery.js +263 -0
  88. package/lib/services/kanban-provider.d.ts +6 -2
  89. package/lib/services/kanban-provider.js +41 -3
  90. package/lib/services/llm-catalog.d.ts +35 -0
  91. package/lib/services/llm-catalog.js +19 -0
  92. package/lib/services/ocr-cli.d.ts +35 -0
  93. package/lib/services/ocr-cli.js +128 -0
  94. package/lib/tools/kanban-tools.d.ts +2 -2
  95. package/lib/tools/kanban-tools.js +2 -1
  96. package/lib/tools/main-session-tools.d.ts +22 -3
  97. package/lib/tools/main-session-tools.js +135 -30
  98. package/lib/tools/ocr-review-tools.d.ts +11 -0
  99. package/lib/tools/ocr-review-tools.js +63 -0
  100. package/lib/tools/planning-tools.d.ts +8 -1
  101. package/lib/tools/planning-tools.js +44 -15
  102. package/lib/tools/prefetch-tools.js +1 -0
  103. package/lib/tools/spec-card-tools.js +1 -0
  104. package/lib/tools/wiki-tools.js +6 -5
  105. package/lib/wiki/kb-linkage.d.ts +9 -2
  106. package/lib/wiki/kb-linkage.js +3 -3
  107. package/lib/wiki/local-kb-client.d.ts +14 -0
  108. package/lib/wiki/local-kb-client.js +101 -0
  109. package/lib/wiki/local-kb.d.ts +6 -0
  110. package/lib/wiki/local-kb.js +25 -0
  111. package/lib/wiki/memory-recall.d.ts +14 -6
  112. package/lib/wiki/memory-recall.js +17 -13
  113. package/lib/wiki/page-path.d.ts +9 -3
  114. package/lib/wiki/page-path.js +33 -12
  115. package/lib/wiki/wiki-vault-client.d.ts +3 -3
  116. package/lib/wiki/wiki-vault-client.js +6 -6
  117. package/package.json +16 -11
  118. package/personas/kanban-d/agent.cordis.yml +5 -5
  119. package/personas/kanban-d/preset.yml +1 -1
  120. package/personas/kanban-dt/agent.cordis.yml +25 -7
  121. package/personas/kanban-dt/preset.yml +1 -1
  122. package/personas/kanban-p/agent.cordis.yml +19 -3
  123. package/personas/kanban-p/preset.yml +1 -1
  124. package/personas/kanban-pt/agent.cordis.yml +39 -9
  125. package/personas/kanban-pt/preset.yml +1 -1
  126. package/personas/kanban-v/agent.cordis.yml +3 -3
  127. package/personas/kanban-w/agent.cordis.yml +37 -18
  128. package/personas/kanban-w/preset.yml +1 -1
  129. package/personas/persona-d.md +1 -1
  130. package/personas/persona-dt.md +13 -5
  131. package/personas/persona-p.md +5 -2
  132. package/personas/persona-pt.md +13 -6
  133. package/personas/persona-v.md +2 -2
  134. package/personas/persona-w.md +11 -9
  135. package/personas/swarm/agent.cordis.yml +43 -0
  136. package/personas/swarm/preset.yml +5 -0
  137. package/skills/grill-me/SKILL.md +71 -0
  138. package/skills/llm-wiki-skill/.mise.toml +2 -0
  139. package/skills/llm-wiki-skill/.nvmrc +1 -0
  140. package/skills/llm-wiki-skill/AGENTS.md +173 -0
  141. package/skills/llm-wiki-skill/CHANGELOG.md +548 -0
  142. package/skills/llm-wiki-skill/CLAUDE.md +152 -0
  143. package/skills/llm-wiki-skill/HERMES.md +44 -0
  144. package/skills/llm-wiki-skill/README.en.md +261 -0
  145. package/skills/llm-wiki-skill/README.md +291 -0
  146. package/skills/llm-wiki-skill/SKILL.md +1133 -0
  147. package/skills/llm-wiki-skill/assets/graph-demo.gif +0 -0
  148. package/skills/llm-wiki-skill/assets/graph-preview.png +0 -0
  149. package/skills/llm-wiki-skill/deps/LICENSE-d3.txt +13 -0
  150. package/skills/llm-wiki-skill/deps/LICENSE-marked.txt +44 -0
  151. package/skills/llm-wiki-skill/deps/LICENSE-purify.txt +568 -0
  152. package/skills/llm-wiki-skill/deps/LICENSE-roughjs.txt +21 -0
  153. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/SKILL.md +261 -0
  154. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/references/config/first-time-setup.md +106 -0
  155. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/cdp.ts +179 -0
  156. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/constants.ts +13 -0
  157. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/defuddle-converter.ts +58 -0
  158. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/html-to-markdown.ts +135 -0
  159. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/legacy-converter.ts +629 -0
  160. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/main.ts +314 -0
  161. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/markdown-conversion-shared.ts +305 -0
  162. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/media-localizer.ts +317 -0
  163. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/package.json +14 -0
  164. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/paths.ts +29 -0
  165. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/vendor/baoyu-chrome-cdp/package.json +9 -0
  166. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/vendor/baoyu-chrome-cdp/src/index.test.ts +307 -0
  167. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/vendor/baoyu-chrome-cdp/src/index.ts +523 -0
  168. package/skills/llm-wiki-skill/deps/d3.min.js +2 -0
  169. package/skills/llm-wiki-skill/deps/marked.min.js +6 -0
  170. package/skills/llm-wiki-skill/deps/purify.min.js +3 -0
  171. package/skills/llm-wiki-skill/deps/rough.min.js +7 -0
  172. package/skills/llm-wiki-skill/deps/youtube-transcript/SKILL.md +47 -0
  173. package/skills/llm-wiki-skill/deps/youtube-transcript/scripts/get_transcript.py +72 -0
  174. package/skills/llm-wiki-skill/designs/graph-edge-legibility/graph-edge-treatments.html +480 -0
  175. package/skills/llm-wiki-skill/docs/design/oriental-atlas/DESIGN.md +183 -0
  176. package/skills/llm-wiki-skill/docs/design/oriental-atlas/README.md +10 -0
  177. package/skills/llm-wiki-skill/docs/design/oriental-atlas/design-brief.md +170 -0
  178. package/skills/llm-wiki-skill/docs/design/oriental-atlas/oriental-editorial-atlas.html +1908 -0
  179. package/skills/llm-wiki-skill/docs/design/oriental-atlas/reviews/result-review.md +68 -0
  180. package/skills/llm-wiki-skill/docs/graph/2026-06-16-interaction-risk-audit.md +88 -0
  181. package/skills/llm-wiki-skill/docs/graph/2026-06-16-interaction-test-coverage-map.md +212 -0
  182. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-18-phase-0-2-baseline.md +86 -0
  183. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-18-phase-1-3-dom-svg-large-baseline.md +85 -0
  184. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-18-phase-1-4-disposable-validation-gate.md +97 -0
  185. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-18-phase-2-4-global-renderer-trial-matrix.md +168 -0
  186. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-19-phase-6-1-sigma-graphology-trial.md +71 -0
  187. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-19-phase-6-2-vis-network-trial.md +78 -0
  188. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-19-phase-6-3-aggregation-fallback-trial.md +72 -0
  189. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-19-phase-6-4-global-renderer-route-decision.md +94 -0
  190. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-19-sigma-global-production-integration-result.md +102 -0
  191. package/skills/llm-wiki-skill/docs/graph/performance/artifacts/2026-06-18-phase-0-2/stage-4.5-offline-dense-wheel.json +9 -0
  192. package/skills/llm-wiki-skill/docs/graph/performance/artifacts/2026-06-18-phase-0-2/stage-4.5-offline-dense-wheel.png +0 -0
  193. package/skills/llm-wiki-skill/docs/graph/performance/artifacts/2026-06-18-phase-0-2/stage-4.5-offline-navigation.png +0 -0
  194. package/skills/llm-wiki-skill/docs/spark/2026-06-15-omp-tool-status-events-design.md +174 -0
  195. package/skills/llm-wiki-skill/docs/spark/2026-06-16-graph-interaction-geometry-design.md +832 -0
  196. package/skills/llm-wiki-skill/docs/spark/2026-06-16-graph-six-layer-architecture-design.md +577 -0
  197. package/skills/llm-wiki-skill/docs/spark/2026-06-17-static-renderer-coordination-split-design.md +172 -0
  198. package/skills/llm-wiki-skill/docs/spark/2026-06-18-large-graph-global-community-design.md +909 -0
  199. package/skills/llm-wiki-skill/docs/spark/2026-06-19-sigma-global-graph-renderer-design.md +360 -0
  200. package/skills/llm-wiki-skill/docs/spark/2026-06-20-paper-ui-port-design.md +162 -0
  201. package/skills/llm-wiki-skill/docs/spark/2026-06-20-paper-ui-v2-shell-alignment-design.md +384 -0
  202. package/skills/llm-wiki-skill/docs/spark/2026-06-21-graph-experience-completion-design.md +534 -0
  203. package/skills/llm-wiki-skill/docs/spark/2026-06-22-chat-auto-scroll-design.md +185 -0
  204. package/skills/llm-wiki-skill/docs/spark/2026-06-22-graph-community-node-visual-design.md +266 -0
  205. package/skills/llm-wiki-skill/docs/spark/2026-06-25-sigma-overlay-refactor-perf-design.md +170 -0
  206. package/skills/llm-wiki-skill/docs/spark/2026-06-26-global-sigma-community-spotlight-design.md +393 -0
  207. package/skills/llm-wiki-skill/docs/spark/mockups/2026-06-18-large-graph-global-community-flow.html +746 -0
  208. package/skills/llm-wiki-skill/install.ps1 +87 -0
  209. package/skills/llm-wiki-skill/install.sh +722 -0
  210. package/skills/llm-wiki-skill/package-lock.json +11171 -0
  211. package/skills/llm-wiki-skill/package.json +24 -0
  212. package/skills/llm-wiki-skill/packages/graph-engine/package.json +37 -0
  213. package/skills/llm-wiki-skill/packages/graph-engine/src/anim/.gitkeep +1 -0
  214. package/skills/llm-wiki-skill/packages/graph-engine/src/anim/index.ts +179 -0
  215. package/skills/llm-wiki-skill/packages/graph-engine/src/architecture.ts +79 -0
  216. package/skills/llm-wiki-skill/packages/graph-engine/src/diff.ts +121 -0
  217. package/skills/llm-wiki-skill/packages/graph-engine/src/facade.ts +1406 -0
  218. package/skills/llm-wiki-skill/packages/graph-engine/src/graph-node.ts +37 -0
  219. package/skills/llm-wiki-skill/packages/graph-engine/src/index.ts +25 -0
  220. package/skills/llm-wiki-skill/packages/graph-engine/src/layout/edge-geometry.ts +17 -0
  221. package/skills/llm-wiki-skill/packages/graph-engine/src/layout/index.ts +16 -0
  222. package/skills/llm-wiki-skill/packages/graph-engine/src/layout/spatial-index.ts +509 -0
  223. package/skills/llm-wiki-skill/packages/graph-engine/src/model/atlas.ts +18 -0
  224. package/skills/llm-wiki-skill/packages/graph-engine/src/model/index.ts +10 -0
  225. package/skills/llm-wiki-skill/packages/graph-engine/src/model/labels.ts +11 -0
  226. package/skills/llm-wiki-skill/packages/graph-engine/src/model/layout.ts +81 -0
  227. package/skills/llm-wiki-skill/packages/graph-engine/src/model/learning.ts +8 -0
  228. package/skills/llm-wiki-skill/packages/graph-engine/src/model/legacy-helpers.ts +1379 -0
  229. package/skills/llm-wiki-skill/packages/graph-engine/src/model/queue.ts +7 -0
  230. package/skills/llm-wiki-skill/packages/graph-engine/src/model/storage.ts +4 -0
  231. package/skills/llm-wiki-skill/packages/graph-engine/src/model/visibility.ts +9 -0
  232. package/skills/llm-wiki-skill/packages/graph-engine/src/render/.gitkeep +1 -0
  233. package/skills/llm-wiki-skill/packages/graph-engine/src/render/adapter.ts +443 -0
  234. package/skills/llm-wiki-skill/packages/graph-engine/src/render/aggregation-containers.ts +64 -0
  235. package/skills/llm-wiki-skill/packages/graph-engine/src/render/community-cloud-geometry.ts +178 -0
  236. package/skills/llm-wiki-skill/packages/graph-engine/src/render/community-wash.ts +238 -0
  237. package/skills/llm-wiki-skill/packages/graph-engine/src/render/community-washes.ts +19 -0
  238. package/skills/llm-wiki-skill/packages/graph-engine/src/render/compat-contract.ts +14 -0
  239. package/skills/llm-wiki-skill/packages/graph-engine/src/render/controller.ts +705 -0
  240. package/skills/llm-wiki-skill/packages/graph-engine/src/render/controls.ts +288 -0
  241. package/skills/llm-wiki-skill/packages/graph-engine/src/render/dom-svg-renderer.ts +180 -0
  242. package/skills/llm-wiki-skill/packages/graph-engine/src/render/edges.ts +51 -0
  243. package/skills/llm-wiki-skill/packages/graph-engine/src/render/geometry.ts +380 -0
  244. package/skills/llm-wiki-skill/packages/graph-engine/src/render/gestures.ts +673 -0
  245. package/skills/llm-wiki-skill/packages/graph-engine/src/render/graph-renderer-root.ts +387 -0
  246. package/skills/llm-wiki-skill/packages/graph-engine/src/render/hit-testing.ts +56 -0
  247. package/skills/llm-wiki-skill/packages/graph-engine/src/render/host-dom.ts +14 -0
  248. package/skills/llm-wiki-skill/packages/graph-engine/src/render/hover-card.ts +37 -0
  249. package/skills/llm-wiki-skill/packages/graph-engine/src/render/index.ts +213 -0
  250. package/skills/llm-wiki-skill/packages/graph-engine/src/render/keyboard.ts +48 -0
  251. package/skills/llm-wiki-skill/packages/graph-engine/src/render/legend.ts +25 -0
  252. package/skills/llm-wiki-skill/packages/graph-engine/src/render/minimap.ts +45 -0
  253. package/skills/llm-wiki-skill/packages/graph-engine/src/render/model.ts +1339 -0
  254. package/skills/llm-wiki-skill/packages/graph-engine/src/render/node-drag-lifecycle.ts +94 -0
  255. package/skills/llm-wiki-skill/packages/graph-engine/src/render/nodes.ts +103 -0
  256. package/skills/llm-wiki-skill/packages/graph-engine/src/render/offline-reader.ts +209 -0
  257. package/skills/llm-wiki-skill/packages/graph-engine/src/render/overlays-presenter.ts +192 -0
  258. package/skills/llm-wiki-skill/packages/graph-engine/src/render/overlays.ts +73 -0
  259. package/skills/llm-wiki-skill/packages/graph-engine/src/render/pin-position.ts +51 -0
  260. package/skills/llm-wiki-skill/packages/graph-engine/src/render/preview.ts +65 -0
  261. package/skills/llm-wiki-skill/packages/graph-engine/src/render/relation-focus.ts +91 -0
  262. package/skills/llm-wiki-skill/packages/graph-engine/src/render/render-context.ts +85 -0
  263. package/skills/llm-wiki-skill/packages/graph-engine/src/render/render-pipeline.ts +871 -0
  264. package/skills/llm-wiki-skill/packages/graph-engine/src/render/render-styles.ts +1405 -0
  265. package/skills/llm-wiki-skill/packages/graph-engine/src/render/renderer-surface.ts +75 -0
  266. package/skills/llm-wiki-skill/packages/graph-engine/src/render/search.ts +57 -0
  267. package/skills/llm-wiki-skill/packages/graph-engine/src/render/sigma-coordinates.ts +44 -0
  268. package/skills/llm-wiki-skill/packages/graph-engine/src/render/sigma-global-drag.ts +246 -0
  269. package/skills/llm-wiki-skill/packages/graph-engine/src/render/sigma-global-renderer.ts +1425 -0
  270. package/skills/llm-wiki-skill/packages/graph-engine/src/render/sigma-overlay-svg.ts +121 -0
  271. package/skills/llm-wiki-skill/packages/graph-engine/src/render/simulation-bridge.ts +59 -0
  272. package/skills/llm-wiki-skill/packages/graph-engine/src/render/state.ts +262 -0
  273. package/skills/llm-wiki-skill/packages/graph-engine/src/render/toolbar.ts +40 -0
  274. package/skills/llm-wiki-skill/packages/graph-engine/src/render/viewport.ts +336 -0
  275. package/skills/llm-wiki-skill/packages/graph-engine/src/select/.gitkeep +1 -0
  276. package/skills/llm-wiki-skill/packages/graph-engine/src/select/index.ts +189 -0
  277. package/skills/llm-wiki-skill/packages/graph-engine/src/sim/index.ts +372 -0
  278. package/skills/llm-wiki-skill/packages/graph-engine/src/sim/pins.ts +84 -0
  279. package/skills/llm-wiki-skill/packages/graph-engine/src/summary/index.ts +447 -0
  280. package/skills/llm-wiki-skill/packages/graph-engine/src/themes/.gitkeep +1 -0
  281. package/skills/llm-wiki-skill/packages/graph-engine/src/themes/index.ts +8 -0
  282. package/skills/llm-wiki-skill/packages/graph-engine/src/themes/tokens.ts +117 -0
  283. package/skills/llm-wiki-skill/packages/graph-engine/src/types/d3-quadtree.d.ts +22 -0
  284. package/skills/llm-wiki-skill/packages/graph-engine/src/types.ts +531 -0
  285. package/skills/llm-wiki-skill/packages/graph-engine/test/aggregation-fallback-trial-adapter.test.ts +115 -0
  286. package/skills/llm-wiki-skill/packages/graph-engine/test/aggregation-fallback-trial-adapter.ts +222 -0
  287. package/skills/llm-wiki-skill/packages/graph-engine/test/anim.test.ts +121 -0
  288. package/skills/llm-wiki-skill/packages/graph-engine/test/architecture.test.ts +63 -0
  289. package/skills/llm-wiki-skill/packages/graph-engine/test/community-cloud-geometry.test.ts +86 -0
  290. package/skills/llm-wiki-skill/packages/graph-engine/test/community-wash.test.ts +97 -0
  291. package/skills/llm-wiki-skill/packages/graph-engine/test/diff.test.ts +133 -0
  292. package/skills/llm-wiki-skill/packages/graph-engine/test/facade.test.ts +1369 -0
  293. package/skills/llm-wiki-skill/packages/graph-engine/test/geometry.test.ts +147 -0
  294. package/skills/llm-wiki-skill/packages/graph-engine/test/gestures.test.ts +768 -0
  295. package/skills/llm-wiki-skill/packages/graph-engine/test/graph-layout.test.ts +110 -0
  296. package/skills/llm-wiki-skill/packages/graph-engine/test/helpers.test.ts +287 -0
  297. package/skills/llm-wiki-skill/packages/graph-engine/test/interaction-contract.test.ts +106 -0
  298. package/skills/llm-wiki-skill/packages/graph-engine/test/keyboard.test.ts +59 -0
  299. package/skills/llm-wiki-skill/packages/graph-engine/test/large-fixtures.test.ts +47 -0
  300. package/skills/llm-wiki-skill/packages/graph-engine/test/large-graph-fixtures.ts +420 -0
  301. package/skills/llm-wiki-skill/packages/graph-engine/test/learning.test.ts +259 -0
  302. package/skills/llm-wiki-skill/packages/graph-engine/test/node-drag-lifecycle.test.ts +166 -0
  303. package/skills/llm-wiki-skill/packages/graph-engine/test/overlays.test.ts +115 -0
  304. package/skills/llm-wiki-skill/packages/graph-engine/test/preview.test.ts +56 -0
  305. package/skills/llm-wiki-skill/packages/graph-engine/test/queue.test.ts +114 -0
  306. package/skills/llm-wiki-skill/packages/graph-engine/test/relation-focus.test.ts +115 -0
  307. package/skills/llm-wiki-skill/packages/graph-engine/test/render-model.test.ts +1030 -0
  308. package/skills/llm-wiki-skill/packages/graph-engine/test/renderer-adapter-contract.test.ts +271 -0
  309. package/skills/llm-wiki-skill/packages/graph-engine/test/renderer-boundary.test.ts +618 -0
  310. package/skills/llm-wiki-skill/packages/graph-engine/test/renderer-lifecycle.test.ts +1711 -0
  311. package/skills/llm-wiki-skill/packages/graph-engine/test/route-continuity.test.ts +284 -0
  312. package/skills/llm-wiki-skill/packages/graph-engine/test/runtime-state.test.ts +281 -0
  313. package/skills/llm-wiki-skill/packages/graph-engine/test/search-and-legend.test.ts +124 -0
  314. package/skills/llm-wiki-skill/packages/graph-engine/test/select.test.ts +168 -0
  315. package/skills/llm-wiki-skill/packages/graph-engine/test/sigma-coordinates.test.ts +50 -0
  316. package/skills/llm-wiki-skill/packages/graph-engine/test/sigma-global-renderer.test.ts +2210 -0
  317. package/skills/llm-wiki-skill/packages/graph-engine/test/sigma-trial-adapter.test.ts +82 -0
  318. package/skills/llm-wiki-skill/packages/graph-engine/test/sigma-trial-adapter.ts +271 -0
  319. package/skills/llm-wiki-skill/packages/graph-engine/test/sim.test.ts +207 -0
  320. package/skills/llm-wiki-skill/packages/graph-engine/test/simulation-bridge.test.ts +96 -0
  321. package/skills/llm-wiki-skill/packages/graph-engine/test/spatial-index.test.ts +222 -0
  322. package/skills/llm-wiki-skill/packages/graph-engine/test/state.test.ts +189 -0
  323. package/skills/llm-wiki-skill/packages/graph-engine/test/summary-contract.test.ts +422 -0
  324. package/skills/llm-wiki-skill/packages/graph-engine/test/themes.test.ts +62 -0
  325. package/skills/llm-wiki-skill/packages/graph-engine/test/toolbar.test.ts +64 -0
  326. package/skills/llm-wiki-skill/packages/graph-engine/test/viewport.test.ts +213 -0
  327. package/skills/llm-wiki-skill/packages/graph-engine/test/vis-network-trial-adapter.test.ts +82 -0
  328. package/skills/llm-wiki-skill/packages/graph-engine/test/vis-network-trial-adapter.ts +186 -0
  329. package/skills/llm-wiki-skill/packages/graph-engine/tsconfig.json +17 -0
  330. package/skills/llm-wiki-skill/packages/graph-engine/vite.config.ts +15 -0
  331. package/skills/llm-wiki-skill/platforms/claude/CLAUDE.md +37 -0
  332. package/skills/llm-wiki-skill/platforms/claude/companions/llm-wiki-upgrade/SKILL.md +95 -0
  333. package/skills/llm-wiki-skill/platforms/codex/AGENTS.md +23 -0
  334. package/skills/llm-wiki-skill/platforms/hermes/README.md +31 -0
  335. package/skills/llm-wiki-skill/platforms/openclaw/README.md +31 -0
  336. package/skills/llm-wiki-skill/scripts/adapter-state.sh +424 -0
  337. package/skills/llm-wiki-skill/scripts/build-graph-data.sh +395 -0
  338. package/skills/llm-wiki-skill/scripts/build-graph-html.sh +459 -0
  339. package/skills/llm-wiki-skill/scripts/cache.sh +352 -0
  340. package/skills/llm-wiki-skill/scripts/create-source-page.sh +100 -0
  341. package/skills/llm-wiki-skill/scripts/delete-helper.sh +68 -0
  342. package/skills/llm-wiki-skill/scripts/graph-analysis.js +732 -0
  343. package/skills/llm-wiki-skill/scripts/hook-session-start.sh +46 -0
  344. package/skills/llm-wiki-skill/scripts/init-wiki.sh +95 -0
  345. package/skills/llm-wiki-skill/scripts/lib/source-signal-eligibility.js +158 -0
  346. package/skills/llm-wiki-skill/scripts/lint-fix.sh +114 -0
  347. package/skills/llm-wiki-skill/scripts/lint-runner.sh +217 -0
  348. package/skills/llm-wiki-skill/scripts/runtime-context.sh +77 -0
  349. package/skills/llm-wiki-skill/scripts/shared-config.sh +83 -0
  350. package/skills/llm-wiki-skill/scripts/source-record-contract.tsv +10 -0
  351. package/skills/llm-wiki-skill/scripts/source-registry.sh +349 -0
  352. package/skills/llm-wiki-skill/scripts/source-registry.tsv +10 -0
  353. package/skills/llm-wiki-skill/scripts/source-signal-coverage.js +83 -0
  354. package/skills/llm-wiki-skill/scripts/validate-step1.sh +144 -0
  355. package/skills/llm-wiki-skill/scripts/wiki-compat.sh +267 -0
  356. package/skills/llm-wiki-skill/setup.sh +8 -0
  357. package/skills/llm-wiki-skill/templates/entity-template.md +30 -0
  358. package/skills/llm-wiki-skill/templates/graph-styles/wash/footer.html +27 -0
  359. package/skills/llm-wiki-skill/templates/graph-styles/wash/graph-wash-helpers.js +1326 -0
  360. package/skills/llm-wiki-skill/templates/graph-styles/wash/graph-wash.js +1009 -0
  361. package/skills/llm-wiki-skill/templates/graph-styles/wash/header.html +2002 -0
  362. package/skills/llm-wiki-skill/templates/index-en-template.md +51 -0
  363. package/skills/llm-wiki-skill/templates/index-template.md +51 -0
  364. package/skills/llm-wiki-skill/templates/log-en-template.md +11 -0
  365. package/skills/llm-wiki-skill/templates/log-template.md +11 -0
  366. package/skills/llm-wiki-skill/templates/overview-en-template.md +41 -0
  367. package/skills/llm-wiki-skill/templates/overview-template.md +41 -0
  368. package/skills/llm-wiki-skill/templates/purpose-en-template.md +16 -0
  369. package/skills/llm-wiki-skill/templates/purpose-template.md +16 -0
  370. package/skills/llm-wiki-skill/templates/query-template.md +19 -0
  371. package/skills/llm-wiki-skill/templates/schema-template.md +185 -0
  372. package/skills/llm-wiki-skill/templates/source-template.md +51 -0
  373. package/skills/llm-wiki-skill/templates/synthesis-template.md +25 -0
  374. package/skills/llm-wiki-skill/templates/topic-template.md +35 -0
  375. package/skills/llm-wiki-skill/tests/adapter-state.sh +338 -0
  376. package/skills/llm-wiki-skill/tests/browser/graph-aggregation-fallback-trial.ts +737 -0
  377. package/skills/llm-wiki-skill/tests/browser/graph-community-node-map.mjs +255 -0
  378. package/skills/llm-wiki-skill/tests/browser/graph-community-wash-interactions.mjs +170 -0
  379. package/skills/llm-wiki-skill/tests/browser/graph-default-behavior.mjs +630 -0
  380. package/skills/llm-wiki-skill/tests/browser/graph-density-preview.mjs +53 -0
  381. package/skills/llm-wiki-skill/tests/browser/graph-html-insights.mjs +41 -0
  382. package/skills/llm-wiki-skill/tests/browser/graph-large-performance.ts +689 -0
  383. package/skills/llm-wiki-skill/tests/browser/graph-node-slim.mjs +75 -0
  384. package/skills/llm-wiki-skill/tests/browser/graph-offline-phase-6.mjs +660 -0
  385. package/skills/llm-wiki-skill/tests/browser/graph-renderer-trial-shared.ts +291 -0
  386. package/skills/llm-wiki-skill/tests/browser/graph-sigma-global-production.ts +1437 -0
  387. package/skills/llm-wiki-skill/tests/browser/graph-sigma-graphology-trial.ts +949 -0
  388. package/skills/llm-wiki-skill/tests/browser/graph-stage-4-5.mjs +815 -0
  389. package/skills/llm-wiki-skill/tests/browser/graph-vis-network-trial.ts +762 -0
  390. package/skills/llm-wiki-skill/tests/browser/graph-workbench-interactions.mjs +730 -0
  391. package/skills/llm-wiki-skill/tests/browser/validate-graph-trial-result.mjs +149 -0
  392. package/skills/llm-wiki-skill/tests/expected/graph-data-empty.json +60 -0
  393. package/skills/llm-wiki-skill/tests/expected/graph-data-sample.json +396 -0
  394. package/skills/llm-wiki-skill/tests/expected/graph-interactive-basic.html +1736 -0
  395. package/skills/llm-wiki-skill/tests/expected/lint-output.txt +44 -0
  396. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/index.md +1 -0
  397. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/wiki/entities/Alpha.md +10 -0
  398. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/wiki/entities/Beta.md +7 -0
  399. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/wiki/entities/Delta.md +8 -0
  400. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/wiki/entities/Gamma.md +8 -0
  401. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/wiki/queries/20260422-abc.md +10 -0
  402. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/wiki/synthesis/Crystal.md +8 -0
  403. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/wiki/topics/Overview.md +9 -0
  404. package/skills/llm-wiki-skill/tests/fixtures/graph-data-empty-wiki/wiki/entities/.gitkeep +0 -0
  405. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/purpose.md +3 -0
  406. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/entities/Attention.md +7 -0
  407. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/entities/Decoder.md +7 -0
  408. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/entities/Encoder.md +7 -0
  409. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/entities/GPT.md +7 -0
  410. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/entities/Transformer.md +13 -0
  411. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/sources/paper.md +9 -0
  412. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/topics/arch.md +12 -0
  413. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/topics/finetune.md +9 -0
  414. package/skills/llm-wiki-skill/tests/fixtures/graph-interactive-basic/wiki/graph-data.json +40 -0
  415. package/skills/llm-wiki-skill/tests/fixtures/graph-interactive-dense/wiki/graph-data.json +3965 -0
  416. package/skills/llm-wiki-skill/tests/fixtures/graph-interactive-multicomm/wiki/graph-data.json +212 -0
  417. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/index.md +14 -0
  418. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/wiki/entities/C++.md +6 -0
  419. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/wiki/entities/Lonely.md +4 -0
  420. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/wiki/entities/Other.md +8 -0
  421. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/wiki/entities/Real.md +7 -0
  422. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/wiki/sources/2026-01-01-test-source.md +15 -0
  423. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/wiki/sources/2026-02-01-inline-img.md +12 -0
  424. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/wiki/topics/AIbasic.md +3 -0
  425. package/skills/llm-wiki-skill/tests/graph-aggregation-fallback-trial.regression-1.sh +46 -0
  426. package/skills/llm-wiki-skill/tests/graph-analysis-helper.regression-1.sh +237 -0
  427. package/skills/llm-wiki-skill/tests/graph-browser-large-performance.regression-1.sh +39 -0
  428. package/skills/llm-wiki-skill/tests/graph-browser-stage-4-5.regression-1.sh +163 -0
  429. package/skills/llm-wiki-skill/tests/graph-build-failures.regression-1.sh +91 -0
  430. package/skills/llm-wiki-skill/tests/graph-community-node-map.regression-1.sh +107 -0
  431. package/skills/llm-wiki-skill/tests/graph-community-wash-interactions.regression-1.sh +35 -0
  432. package/skills/llm-wiki-skill/tests/graph-data-confidence-merge.regression-1.sh +309 -0
  433. package/skills/llm-wiki-skill/tests/graph-data-source-paths.regression-1.sh +49 -0
  434. package/skills/llm-wiki-skill/tests/graph-default-behavior.regression-1.sh +35 -0
  435. package/skills/llm-wiki-skill/tests/graph-html-a11y.regression-1.sh +50 -0
  436. package/skills/llm-wiki-skill/tests/graph-html-brand-link.regression-1.sh +47 -0
  437. package/skills/llm-wiki-skill/tests/graph-html-density.regression-1.sh +228 -0
  438. package/skills/llm-wiki-skill/tests/graph-html-drawer-neighbors.regression-1.sh +47 -0
  439. package/skills/llm-wiki-skill/tests/graph-html-insights.regression-1.sh +80 -0
  440. package/skills/llm-wiki-skill/tests/graph-html-long-label.regression-1.sh +92 -0
  441. package/skills/llm-wiki-skill/tests/graph-html-minimap.regression-1.sh +51 -0
  442. package/skills/llm-wiki-skill/tests/graph-html-mobile.regression-1.sh +48 -0
  443. package/skills/llm-wiki-skill/tests/graph-html-oriental-atlas-contract.regression-1.sh +94 -0
  444. package/skills/llm-wiki-skill/tests/graph-html-oriental-design-contract.regression-1.sh +82 -0
  445. package/skills/llm-wiki-skill/tests/graph-html-search.regression-1.sh +52 -0
  446. package/skills/llm-wiki-skill/tests/graph-html-styles.regression-1.sh +66 -0
  447. package/skills/llm-wiki-skill/tests/graph-html-toolbar.regression-1.sh +62 -0
  448. package/skills/llm-wiki-skill/tests/graph-offline-phase-6.regression-1.sh +51 -0
  449. package/skills/llm-wiki-skill/tests/graph-sigma-global-production.regression-1.sh +64 -0
  450. package/skills/llm-wiki-skill/tests/graph-sigma-graphology-trial.regression-1.sh +46 -0
  451. package/skills/llm-wiki-skill/tests/graph-vis-network-trial.regression-1.sh +46 -0
  452. package/skills/llm-wiki-skill/tests/graph-workbench-interactions.regression-1.sh +151 -0
  453. package/skills/llm-wiki-skill/tests/js/graph-wash-bootstrap.test.js +110 -0
  454. package/skills/llm-wiki-skill/tests/js/graph-wash-helpers.test.js +296 -0
  455. package/skills/llm-wiki-skill/tests/js/graph-wash-learning.test.js +260 -0
  456. package/skills/llm-wiki-skill/tests/js/graph-wash-queue.test.js +115 -0
  457. package/skills/llm-wiki-skill/tests/js/graph-wash-runtime-state.test.js +282 -0
  458. package/skills/llm-wiki-skill/tests/js/source-signal-coverage.test.js +48 -0
  459. package/skills/llm-wiki-skill/tests/js/source-signal-eligibility.test.js +202 -0
  460. package/skills/llm-wiki-skill/tests/lib/graph-html-engine-helpers.sh +110 -0
  461. package/skills/llm-wiki-skill/tests/lint-output.regression-1.sh +32 -0
  462. package/skills/llm-wiki-skill/tests/regression.sh +1754 -0
  463. package/skills/llm-wiki-skill/workbench/AGENTS.md +110 -0
  464. package/skills/llm-wiki-skill/workbench/CLAUDE.md +55 -0
  465. package/skills/llm-wiki-skill/workbench/LICENSE +21 -0
  466. package/skills/llm-wiki-skill/workbench/PRODUCT.md +1353 -0
  467. package/skills/llm-wiki-skill/workbench/README.md +30 -0
  468. package/skills/llm-wiki-skill/workbench/docs/current-kb-retrieval-design.md +587 -0
  469. package/skills/llm-wiki-skill/workbench/docs/graph-evolution-1-design.md +210 -0
  470. package/skills/llm-wiki-skill/workbench/docs/stage-2-design.md +1139 -0
  471. package/skills/llm-wiki-skill/workbench/docs/stage-3-design.md +1269 -0
  472. package/skills/llm-wiki-skill/workbench/docs/stage-3.5-design.md +1164 -0
  473. package/skills/llm-wiki-skill/workbench/docs/stage-4-design.md +504 -0
  474. package/skills/llm-wiki-skill/workbench/docs/stage-4.5-design.md +195 -0
  475. package/skills/llm-wiki-skill/workbench/docs/superpowers/specs/2026-05-28-resizable-preview-layout-design.md +165 -0
  476. package/skills/llm-wiki-skill/workbench/docs/superpowers/specs/2026-05-28-settings-panel-scroll-fix.md +50 -0
  477. package/skills/llm-wiki-skill/workbench/server/package.json +31 -0
  478. package/skills/llm-wiki-skill/workbench/server/src/agent.ts +457 -0
  479. package/skills/llm-wiki-skill/workbench/server/src/artifacts.ts +248 -0
  480. package/skills/llm-wiki-skill/workbench/server/src/auth.ts +164 -0
  481. package/skills/llm-wiki-skill/workbench/server/src/config.ts +130 -0
  482. package/skills/llm-wiki-skill/workbench/server/src/conversations.test.ts +159 -0
  483. package/skills/llm-wiki-skill/workbench/server/src/conversations.ts +270 -0
  484. package/skills/llm-wiki-skill/workbench/server/src/digest/batch.ts +189 -0
  485. package/skills/llm-wiki-skill/workbench/server/src/digest/concurrency.test.ts +36 -0
  486. package/skills/llm-wiki-skill/workbench/server/src/digest/concurrency.ts +31 -0
  487. package/skills/llm-wiki-skill/workbench/server/src/digest/subagent.ts +91 -0
  488. package/skills/llm-wiki-skill/workbench/server/src/extensions/artifacts.ts +81 -0
  489. package/skills/llm-wiki-skill/workbench/server/src/extensions/knowledge-base.ts +263 -0
  490. package/skills/llm-wiki-skill/workbench/server/src/extensions/new-wiki.ts +42 -0
  491. package/skills/llm-wiki-skill/workbench/server/src/extensions/synthesis.ts +172 -0
  492. package/skills/llm-wiki-skill/workbench/server/src/graph-watcher.test.ts +196 -0
  493. package/skills/llm-wiki-skill/workbench/server/src/graph.test.ts +113 -0
  494. package/skills/llm-wiki-skill/workbench/server/src/graph.ts +351 -0
  495. package/skills/llm-wiki-skill/workbench/server/src/index.ts +1148 -0
  496. package/skills/llm-wiki-skill/workbench/server/src/knowledge-bases.test.ts +30 -0
  497. package/skills/llm-wiki-skill/workbench/server/src/knowledge-bases.ts +321 -0
  498. package/skills/llm-wiki-skill/workbench/server/src/pages.test.ts +41 -0
  499. package/skills/llm-wiki-skill/workbench/server/src/pages.ts +160 -0
  500. package/skills/llm-wiki-skill/workbench/server/src/retrieval.test.ts +151 -0
  501. package/skills/llm-wiki-skill/workbench/server/src/retrieval.ts +427 -0
  502. package/skills/llm-wiki-skill/workbench/server/src/tool-status-events.test.ts +363 -0
  503. package/skills/llm-wiki-skill/workbench/server/src/tool-status-events.ts +616 -0
  504. package/skills/llm-wiki-skill/workbench/server/src/wiki-init.test.ts +19 -0
  505. package/skills/llm-wiki-skill/workbench/server/src/wiki-init.ts +188 -0
  506. package/skills/llm-wiki-skill/workbench/server/tsconfig.json +10 -0
  507. package/skills/llm-wiki-skill/workbench/tsconfig.json +20 -0
  508. package/skills/llm-wiki-skill/workbench/web/README.md +73 -0
  509. package/skills/llm-wiki-skill/workbench/web/components.json +21 -0
  510. package/skills/llm-wiki-skill/workbench/web/eslint.config.js +22 -0
  511. package/skills/llm-wiki-skill/workbench/web/index.html +16 -0
  512. package/skills/llm-wiki-skill/workbench/web/package.json +54 -0
  513. package/skills/llm-wiki-skill/workbench/web/src/App.tsx +1195 -0
  514. package/skills/llm-wiki-skill/workbench/web/src/components/AddExternalDialog.tsx +375 -0
  515. package/skills/llm-wiki-skill/workbench/web/src/components/AppearancePanel.tsx +158 -0
  516. package/skills/llm-wiki-skill/workbench/web/src/components/ArtifactView.tsx +15 -0
  517. package/skills/llm-wiki-skill/workbench/web/src/components/BatchDigestPanel.tsx +117 -0
  518. package/skills/llm-wiki-skill/workbench/web/src/components/ChatPanel.tsx +890 -0
  519. package/skills/llm-wiki-skill/workbench/web/src/components/CommandMenu.tsx +75 -0
  520. package/skills/llm-wiki-skill/workbench/web/src/components/ExportButtons.tsx +58 -0
  521. package/skills/llm-wiki-skill/workbench/web/src/components/GraphPanel.tsx +800 -0
  522. package/skills/llm-wiki-skill/workbench/web/src/components/GraphReader.tsx +52 -0
  523. package/skills/llm-wiki-skill/workbench/web/src/components/GraphSelection.tsx +100 -0
  524. package/skills/llm-wiki-skill/workbench/web/src/components/GraphSummaryDrawer.tsx +269 -0
  525. package/skills/llm-wiki-skill/workbench/web/src/components/MainViewTabs.tsx +69 -0
  526. package/skills/llm-wiki-skill/workbench/web/src/components/MarkdownView.tsx +106 -0
  527. package/skills/llm-wiki-skill/workbench/web/src/components/NewWikiDialog.tsx +103 -0
  528. package/skills/llm-wiki-skill/workbench/web/src/components/RefMenu.tsx +44 -0
  529. package/skills/llm-wiki-skill/workbench/web/src/components/RightDrawer.tsx +298 -0
  530. package/skills/llm-wiki-skill/workbench/web/src/components/SearchPanel.tsx +165 -0
  531. package/skills/llm-wiki-skill/workbench/web/src/components/SettingsPanel.tsx +320 -0
  532. package/skills/llm-wiki-skill/workbench/web/src/components/Sidebar.tsx +354 -0
  533. package/skills/llm-wiki-skill/workbench/web/src/components/ToolHistorySummary.tsx +111 -0
  534. package/skills/llm-wiki-skill/workbench/web/src/components/ToolStatusRunway.tsx +70 -0
  535. package/skills/llm-wiki-skill/workbench/web/src/components/TopBar.tsx +348 -0
  536. package/skills/llm-wiki-skill/workbench/web/src/components/renderers/DownloadOnlyRenderer.tsx +88 -0
  537. package/skills/llm-wiki-skill/workbench/web/src/components/renderers/HtmlRenderer.tsx +92 -0
  538. package/skills/llm-wiki-skill/workbench/web/src/components/ui/button.tsx +52 -0
  539. package/skills/llm-wiki-skill/workbench/web/src/components/ui/command.tsx +50 -0
  540. package/skills/llm-wiki-skill/workbench/web/src/components/ui/dialog.tsx +156 -0
  541. package/skills/llm-wiki-skill/workbench/web/src/components/ui/input.tsx +21 -0
  542. package/skills/llm-wiki-skill/workbench/web/src/components/ui/tooltip.tsx +57 -0
  543. package/skills/llm-wiki-skill/workbench/web/src/index.css +4204 -0
  544. package/skills/llm-wiki-skill/workbench/web/src/lib/api.ts +648 -0
  545. package/skills/llm-wiki-skill/workbench/web/src/lib/appearance.ts +114 -0
  546. package/skills/llm-wiki-skill/workbench/web/src/lib/drawer-layout.ts +41 -0
  547. package/skills/llm-wiki-skill/workbench/web/src/lib/drawer-state.ts +168 -0
  548. package/skills/llm-wiki-skill/workbench/web/src/lib/graph-reader.ts +25 -0
  549. package/skills/llm-wiki-skill/workbench/web/src/lib/graph-selection-drawer.ts +35 -0
  550. package/skills/llm-wiki-skill/workbench/web/src/lib/graph-selection.ts +96 -0
  551. package/skills/llm-wiki-skill/workbench/web/src/lib/graph-summary-actions.ts +184 -0
  552. package/skills/llm-wiki-skill/workbench/web/src/lib/legacy-tool-status.ts +113 -0
  553. package/skills/llm-wiki-skill/workbench/web/src/lib/model-roles.ts +20 -0
  554. package/skills/llm-wiki-skill/workbench/web/src/lib/search-filter.ts +104 -0
  555. package/skills/llm-wiki-skill/workbench/web/src/lib/sse.ts +72 -0
  556. package/skills/llm-wiki-skill/workbench/web/src/lib/tool-status-format.ts +170 -0
  557. package/skills/llm-wiki-skill/workbench/web/src/lib/tool-status-model.ts +392 -0
  558. package/skills/llm-wiki-skill/workbench/web/src/lib/utils.ts +10 -0
  559. package/skills/llm-wiki-skill/workbench/web/src/lib/view-status.ts +16 -0
  560. package/skills/llm-wiki-skill/workbench/web/src/lib/wiki-links.ts +32 -0
  561. package/skills/llm-wiki-skill/workbench/web/src/main.tsx +10 -0
  562. package/skills/llm-wiki-skill/workbench/web/test/api.test.ts +61 -0
  563. package/skills/llm-wiki-skill/workbench/web/test/app-shell-drawer-layout.test.tsx +48 -0
  564. package/skills/llm-wiki-skill/workbench/web/test/appearance-panel.test.tsx +121 -0
  565. package/skills/llm-wiki-skill/workbench/web/test/appearance.test.ts +262 -0
  566. package/skills/llm-wiki-skill/workbench/web/test/chat-host-source.test.tsx +22 -0
  567. package/skills/llm-wiki-skill/workbench/web/test/chat-panel-auto-scroll.test.tsx +311 -0
  568. package/skills/llm-wiki-skill/workbench/web/test/chat-panel-bubbles.test.tsx +48 -0
  569. package/skills/llm-wiki-skill/workbench/web/test/chat-panel-composer.test.tsx +86 -0
  570. package/skills/llm-wiki-skill/workbench/web/test/chat-panel-tool-status.test.tsx +26 -0
  571. package/skills/llm-wiki-skill/workbench/web/test/export-batch-paper.test.tsx +101 -0
  572. package/skills/llm-wiki-skill/workbench/web/test/graph-drawer-state.test.ts +257 -0
  573. package/skills/llm-wiki-skill/workbench/web/test/graph-panel-paper.test.tsx +200 -0
  574. package/skills/llm-wiki-skill/workbench/web/test/graph-reader-request.test.ts +32 -0
  575. package/skills/llm-wiki-skill/workbench/web/test/graph-reader.test.ts +62 -0
  576. package/skills/llm-wiki-skill/workbench/web/test/graph-selection-drawer.test.ts +56 -0
  577. package/skills/llm-wiki-skill/workbench/web/test/graph-selection.test.ts +83 -0
  578. package/skills/llm-wiki-skill/workbench/web/test/graph-summary-actions.test.ts +188 -0
  579. package/skills/llm-wiki-skill/workbench/web/test/main-view-tabs.test.tsx +34 -0
  580. package/skills/llm-wiki-skill/workbench/web/test/markdown-view.test.tsx +34 -0
  581. package/skills/llm-wiki-skill/workbench/web/test/popup-menus.test.tsx +85 -0
  582. package/skills/llm-wiki-skill/workbench/web/test/render.test.tsx +30 -0
  583. package/skills/llm-wiki-skill/workbench/web/test/render.tsx +38 -0
  584. package/skills/llm-wiki-skill/workbench/web/test/right-drawer-graph-summary.test.tsx +287 -0
  585. package/skills/llm-wiki-skill/workbench/web/test/right-drawer-interactions.test.tsx +182 -0
  586. package/skills/llm-wiki-skill/workbench/web/test/search-filter.test.ts +65 -0
  587. package/skills/llm-wiki-skill/workbench/web/test/search-panel.test.tsx +155 -0
  588. package/skills/llm-wiki-skill/workbench/web/test/setup-dom.ts +66 -0
  589. package/skills/llm-wiki-skill/workbench/web/test/sidebar-v2-source.test.ts +17 -0
  590. package/skills/llm-wiki-skill/workbench/web/test/sidebar.test.tsx +110 -0
  591. package/skills/llm-wiki-skill/workbench/web/test/tool-history-summary.test.tsx +150 -0
  592. package/skills/llm-wiki-skill/workbench/web/test/tool-status-format.test.ts +107 -0
  593. package/skills/llm-wiki-skill/workbench/web/test/tool-status-model.test.ts +324 -0
  594. package/skills/llm-wiki-skill/workbench/web/test/tool-status-runway.test.ts +159 -0
  595. package/skills/llm-wiki-skill/workbench/web/test/topbar.test.tsx +248 -0
  596. package/skills/llm-wiki-skill/workbench/web/test/visual/paper-ui.ts +898 -0
  597. package/skills/llm-wiki-skill/workbench/web/test/wiki-links.test.ts +23 -0
  598. package/skills/llm-wiki-skill/workbench/web/test-results/paper-ui/actual/.gitkeep +1 -0
  599. package/skills/llm-wiki-skill/workbench/web/test-results/paper-ui/baseline/.gitkeep +1 -0
  600. package/skills/llm-wiki-skill/workbench/web/tsconfig.app.json +30 -0
  601. package/skills/llm-wiki-skill/workbench/web/tsconfig.json +7 -0
  602. package/skills/llm-wiki-skill/workbench/web/tsconfig.node.json +24 -0
  603. package/skills/llm-wiki-skill/workbench/web/vite.config.ts +28 -0
@@ -24,7 +24,7 @@ export function validateReviewEvidence(role, handoff) {
24
24
  // 计划结构字段:评审须给出被评审计划产物引用(如 artifacts_path/page 结构)——缺则视为证据不足
25
25
  const planRef = ev.reviewPage ?? (handoff.metadata ?? {})['artifacts_path'];
26
26
  if (!planRef)
27
- missing.push('review_evidence.plan (artifacts_path/reviewPage)');
27
+ missing.push('metadata.artifacts_path (被评审计划的 openspec 目录绝对路径,继承被评审 P 卡) 或 review_evidence.reviewPage');
28
28
  }
29
29
  else {
30
30
  // DT:实证校验证据(fail 评审同样必须已实证——test 字段必须存在;仅 pass 要求 exit 0)
@@ -10,11 +10,12 @@ const TASK_TRANSITIONS = {
10
10
  };
11
11
  const CHAIN_TRANSITIONS = {
12
12
  planning: { 'chain/executing': 'executing' },
13
- executing: { 'chain/completed': 'completed', 'chain/aborted': 'aborted' },
13
+ executing: { 'chain/completed': 'completed', 'chain/aborted': 'aborted', 'chain/blocked': 'blocked' },
14
+ blocked: {},
14
15
  completed: {},
15
16
  aborted: {},
16
17
  };
17
- // D23:'chain/audit-warning' / 'chain/audit-confirmed' 不是状态转换——
18
+ // 'chain/audit-warning' / 'chain/audit-confirmed' 不是状态转换——
18
19
  // Chain 保持 completed,只向投影写入验收核对视图(auditWarnings)。
19
20
  // projection.ts 对这两类事件专门处理、不调用 transitionChain,故此处不注册。
20
21
  const SPEC_TRANSITIONS = {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * 每阶段任务卡的语义输入来源(R20 依赖):第 1 项为主来源。
2
+ * 每阶段任务卡的语义输入来源:第 1 项为主来源。
3
3
  * key = `${assignee}:${mode}`;w:kb 特判(w2→P、w3→D)见 semanticParentDeps。
4
4
  * 未列出的 mode(如旧兼容 align)不设语义 parents(返回空)。
5
5
  */
@@ -1,7 +1,7 @@
1
1
  export type Role = 'v' | 'p' | 'w' | 'd' | 'pt' | 'dt';
2
2
  export type TaskMode = 'file' | 'external' | 'kb' | 'openspec' | 'mattpocock' | 'align' | 'execute' | 'review-plan' | 'review-impl';
3
3
  export type TaskStatus = 'triage' | 'todo' | 'ready' | 'running' | 'blocked' | 'done' | 'failed' | 'archived';
4
- export type ChainStatus = 'planning' | 'executing' | 'completed' | 'aborted';
4
+ export type ChainStatus = 'planning' | 'executing' | 'blocked' | 'completed' | 'aborted';
5
5
  export type SpecCardStatus = 'draft' | 'approved';
6
6
  /** 评审状态(交付质量链):not-required 普通卡 / pending 等待评审 / passed 通过 / failed 失败待返工 / gave-up 超限放弃。 */
7
7
  export type ReviewStatus = 'not-required' | 'pending' | 'passed' | 'failed' | 'gave-up';
@@ -40,7 +40,7 @@ export interface ReviewEvidence {
40
40
  kbUrl: string;
41
41
  };
42
42
  }
43
- export type EventKind = 'chain/created' | 'chain/executing' | 'chain/completed' | 'chain/aborted' | 'chain/root-task-set' | 'chain/audit-warning' | 'chain/audit-confirmed' | 'chain/title-updated' | 'spec-card/created' | 'spec-card/edited' | 'spec-card/approved' | 'task/created' | 'task/claimed' | 'task/heartbeat' | 'task/commented' | 'task/completed' | 'task/blocked' | 'task/unblocked' | 'task/archived' | 'task/failed' | 'task/renamed' | 'review/passed' | 'review/failed' | 'review/gave-up';
43
+ export type EventKind = 'chain/created' | 'chain/executing' | 'chain/completed' | 'chain/aborted' | 'chain/blocked' | 'chain/root-task-set' | 'chain/audit-warning' | 'chain/audit-confirmed' | 'chain/title-updated' | 'chain/im-delivery-failed' | 'spec-card/created' | 'spec-card/edited' | 'spec-card/approved' | 'task/created' | 'task/claimed' | 'task/heartbeat' | 'task/commented' | 'task/completed' | 'task/blocked' | 'task/unblocked' | 'task/archived' | 'task/gate-passed' | 'task/gate-failed' | 'task/failed' | 'task/renamed' | 'review/passed' | 'review/failed' | 'review/gave-up';
44
44
  export interface SpecCardSections {
45
45
  problem: string;
46
46
  solution: string;
@@ -61,7 +61,7 @@ export interface Chain {
61
61
  rootTaskId: string | null;
62
62
  specCardId: string | null;
63
63
  ownerSessionId: string;
64
- /** 发起 /plan: 的主 agent 会话工作目录(Q5:角色会话统一创建于此,便于管理 profile 会话)。null=未捕获(GUI 建链),回退 kanban 存储。 */
64
+ /** 发起 /plan: 的主 agent 会话工作目录(角色会话统一创建于此,便于管理 profile 会话)。null=未捕获(GUI 建链),回退 kanban 存储。 */
65
65
  workspaceDir: string | null;
66
66
  createdAt: number;
67
67
  }
@@ -105,14 +105,14 @@ export interface Handoff {
105
105
  metadata: Record<string, unknown>;
106
106
  completedAt: number;
107
107
  }
108
- /** D23 链完成验收核对证据:主会话越权写工作区产物的单个线索。 */
108
+ /** 链完成验收核对证据:主会话越权写工作区产物的单个线索。 */
109
109
  export interface AuditEvidence {
110
110
  source: 'main-session-scan' | 'artifact-reconciliation' | string;
111
111
  detail: string;
112
112
  paths: string[];
113
113
  at?: number;
114
114
  }
115
- /** D23 链完成验收核对投影视图:warning 事件 + (可选)用户确认。 */
115
+ /** 链完成验收核对投影视图:warning 事件 + (可选)用户确认。 */
116
116
  export interface ChainAudit {
117
117
  evidence: AuditEvidence[];
118
118
  warnedAt: number;
package/lib/index.js CHANGED
@@ -1,28 +1,16 @@
1
+ import { homedir } from 'node:os';
1
2
  import { KanbanProvider } from './services/kanban-provider.js';
2
3
  import { Config } from './config.js';
3
4
  import { registerMainSessionTools } from './tools/main-session-tools.js';
4
5
  import { installRolePresets } from './roles/preset-installer.js';
6
+ import { installLlWikiSkill } from './roles/skill-installer.js';
5
7
  import { registerKanbanHttp } from './routes/kanban-http.js';
6
8
  import { startDispatcher } from './dispatcher/dispatcher.js';
9
+ import { ConfigProvider } from './services/config-provider.js';
10
+ import { wireImDelivery } from './services/im-delivery.js';
7
11
  export const name = 'dsh-swarm';
8
12
  export { Config };
9
- // P1-9:无 inject——KanbanProvider 只用文件系统(FileEventStore),不依赖 ctx.storage 等任何服务。
10
- /** 可选服务延迟装配:插件 apply 时各服务可能尚未提供(cordis 注入顺序),轮询 ctx.get 直至可用再接线。 */
11
- function wireWhenAvailable(ctx, name, fn, timeoutMs = 60000) {
12
- if (ctx.get(name)) {
13
- fn();
14
- return () => { };
15
- }
16
- const timer = setInterval(() => {
17
- if (ctx.get(name)) {
18
- clearInterval(timer);
19
- clearTimeout(to);
20
- fn();
21
- }
22
- }, 500);
23
- const to = setTimeout(() => clearInterval(timer), timeoutMs);
24
- return () => { clearInterval(timer); clearTimeout(to); };
25
- }
13
+ // inject——KanbanProvider 只用文件系统(FileEventStore),不依赖 ctx.storage 等任何服务。
26
14
  /** 等待多个服务同时可用后再接线(如 tools 先于 kanban 出现时,单服务轮询会过早执行)。 */
27
15
  function wireAllAvailable(ctx, names, fn, timeoutMs = 60000) {
28
16
  const ready = () => names.every((name) => Boolean(ctx.get(name)));
@@ -42,15 +30,30 @@ function wireAllAvailable(ctx, names, fn, timeoutMs = 60000) {
42
30
  }
43
31
  export function apply(ctx, config) {
44
32
  // cordis 4:Service 构造即注册(super(ctx,'kanban') 调 ctx.reflect.provide),无需手动 provide。
45
- const provider = new KanbanProvider(ctx, config);
46
- // D22:把包内角色裁剪 preset 组合安装到 $DSH_HOME/.agent-presets/(真实 API 下唯一可发现的自定义根)。
33
+ // ConfigProvider apply 中创建一次(override 存放于 storageDir,$DSH_HOME 占位符在此解析),
34
+ // 全链路(KanbanProvider/HTTP 桥/主会话工具/调度器)共享同一实例实现配置面板热生效。
35
+ const storageDir = config.storageDir.replace('$DSH_HOME', process.env.DSH_HOME ?? homedir());
36
+ const configProvider = new ConfigProvider(ctx, config, storageDir);
37
+ // KanbanProvider 持 ConfigProvider 引用,kb_url base 经 getter 热读取(配置面板改后无需重建)。
38
+ const provider = new KanbanProvider(ctx, config, configProvider);
39
+ // 把包内角色裁剪 preset 组合安装到 $DSH_HOME/.agent-presets/(真实 API 下唯一可发现的自定义根)。
47
40
  const installed = installRolePresets();
41
+ installLlWikiSkill(); // 尽力而为:失败仅告警不阻断
48
42
  console.info('[dsh-swarm] role presets installed: ' + (installed.length ? installed.join(',') : 'none'));
43
+ // IM 投递(企微,2026-09-07 评审决议):W3 收尾/链阻塞时经 dsh-im 投群。
44
+ // imDelivery.enabled=false(默认)时事件处理器零开销早退;dshIm 服务缺失显式降级留痕。
45
+ const disposeImDelivery = wireImDelivery(ctx, provider.service, configProvider);
46
+ ctx.on('dispose', disposeImDelivery);
47
+ // LLM 运行时延迟取用:registerKanbanHttp 内部消费(llm-catalog 枚举),接线时 llm 服务已就绪。
48
+ const llm = () => ctx.get('llm');
49
49
  // 可选服务接线均延迟到服务可用后:
50
- // - Web GUI 数据桥(GET /kanban/board + POST /kanban/action,仅 webServer 存在时挂载)
51
- wireWhenAvailable(ctx, 'webServer', () => registerKanbanHttp(ctx, provider, config));
52
- // - P1-3 主会话工具面(spec_card_view/edit/approve + kanban 只读子集 + 前缀路由工具)
53
- wireAllAvailable(ctx, ['tools', 'kanban'], () => registerMainSessionTools(ctx, config));
54
- // - 调度层:事件唤醒 V(R20)+ 每任务 agent runner + 看门狗(仅 agents 可用时启动)
55
- wireAllAvailable(ctx, ['agents', 'kanban'], () => startDispatcher(ctx, config));
50
+ // - Web GUI 数据桥(GET /kanban/board + POST /kanban/action + 配置读写 + llm-catalog,仅 webServer 存在时挂载)
51
+ // llm 需在 webServer 就绪且 llm 就绪后取,wireAllAvailable 双服务轮询比单服务更稳。
52
+ wireAllAvailable(ctx, ['webServer', 'llm'], () => registerKanbanHttp(ctx, provider, configProvider, llm(), config));
53
+ // - 主会话工具面(spec_card_view/edit/approve + kanban 只读子集 + 前缀路由工具)
54
+ // ConfigProvider,wiki 客户端与全部配置读点经 getEffective() 调用时热读取。
55
+ wireAllAvailable(ctx, ['tools', 'kanban'], () => registerMainSessionTools(ctx, configProvider));
56
+ // - 调度层:事件唤醒 V + 每任务 agent runner + 看门狗(仅 agents 可用时启动)
57
+ // startDispatcher 收 ConfigProvider(模型链/wiki 热生效)。
58
+ wireAllAvailable(ctx, ['agents', 'kanban'], () => startDispatcher(ctx, configProvider));
56
59
  }
@@ -0,0 +1,22 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ /** 需剥离的带毒参数(dsh-sandbox escalation 配对参数;写死避免依赖宿主内部导出)。 */
3
+ export declare const ESCALATION_PARAM_KEYS: readonly ["sandbox_permissions", "justification"];
4
+ /** 剥离 escalation 参数:净化后新对象返回;本就干净则原对象透传(零拷贝零改写)。 */
5
+ export declare function stripEscalationArgs(args: unknown): unknown;
6
+ /**
7
+ * 给 danger-full-access 会话 shadow 注册去毒版 write/edit/bash。
8
+ *
9
+ * 行为契约:
10
+ * - 干净版 = 宿主定义浅拷贝 + parameters 去掉两带毒字段(JSON 深拷贝后删除,注册表保证 lossless JSON)
11
+ * + execute 换成「剥参 → 转发宿主原工具 execute」。写逻辑零自实现,行为 100% 官方。
12
+ * - 宿主 schema 本就无带毒参数(无沙箱后端的组合,escalationModes 为空)→ 无需 shadow,跳过
13
+ * (最小触碰面:不去盖一个本来就干净的版本)。
14
+ * - 转发失败面(宿主定义不可达 / 缺 execute / 同层注册冲突)→ 该工具不挂 + console.error 显形,
15
+ * 宿主带毒版本保持可见(fail-safe:绝不注册一个自实现写文件的半成品)。
16
+ * - 幂等:setup 重入(live 会话修复路径 resumeOrReuse 会重跑 setup)先以品牌标记识别已挂
17
+ * shadow → 跳过;同层冲突抛错也被捕获显形,不炸 setup(宿主版本继续可见,plan-guard 兜底网仍在)。
18
+ *
19
+ * @param agentCtx agent setup 收到的 scoped ctx(agentCtx.tools 即该 scope 的注册表)
20
+ * @param agent Agent 实例(= dsh-tools scope key,exec.agent 同源;get 的 scope 视角参数)
21
+ */
22
+ export declare function installCleanFsTools(agentCtx: Context, agent: unknown): void;
@@ -0,0 +1,117 @@
1
+ // src/roles/clean-fs-tools.ts
2
+ // danger-full-access 会话(P、D(execute))的 write/edit/bash 工具菜单去毒。
3
+ //
4
+ // 为什么:宿主 dsh-tool-fs / dsh-tool-bash 在组合层把可选参数 sandbox_permissions / justification
5
+ // 合入 write/edit/bash schema(dsh-tool-fs lib/index.js:617/771 schemaFields()、dsh-tool-bash
6
+ // lib/index.js:285-289;广播与否只看组合默认沙箱模式 :1111,会话层 sandbox/mode 改不掉)。
7
+ // 在 danger-full-access(权限天花板)会话里,escalation「必须严格更宽」无更宽可升——任何值
8
+ // 都被 approveEscalation 拒绝,模型却仍从菜单看到这两个按钮,触发拒绝-重试循环
9
+ // (2026-09-02 P 会话 30 连败事故根因)。plan-guard 的带参拦截保留为兜底网(toolsets.ts 不动),
10
+ // 本文件是根治面:agent scope shadow 注册「无带毒参数的干净版」盖住宿主版本 + execute 剥参转发。
11
+ //
12
+ // 宿主探明结论:
13
+ // - 遮蔽语义(dsh-tools lib/index.js view/get + dsh-scope ScopedLayers):scope 自身层注册在
14
+ // inherited(global + preset standing 祖先层)之后覆盖 visible map → agent scope 同名注册
15
+ // 真实盖住宿主版本;「重复注册 fail」仅指同一层内(NamedEntries.insert),跨层 shadow 合法。
16
+ // agentPresets.mount 是 bindScopeParent(agent scope 挂为 preset standing scope 的 child),
17
+ // preset 里 tool-fs/tool-bash 的注册落在 standing 祖先层而非 agent own 层 → 本模块经
18
+ // agentCtx.tools.register 落 own 层,无同层冲突(kanban_comment 遮蔽已实证该通道)。
19
+ // - 转发通道:agentCtx.tools.get(name, agent) 返回该 scope 可见定义(shadow 注册前即宿主原定义,
20
+ // kanban-p/d 的 fs/bash 在 preset standing 祖先层,全局视角 get(name) 反而可能取不到);
21
+ // 直接调用 hostDef.execute(cleanArgs, exec) 与注册表 dispatchToolBody 的调用形态逐字一致
22
+ // (lib/index.js:3174 tool.execute(exec.arguments, exec))。绕开 approval/escalation 前置管线
23
+ // 安全:resolvePolicy 在两参皆缺时走 standingPolicy 路径(dsh-sandbox validateEscalationArgs
24
+ // 对 (undefined, undefined) 放行)——即官方默认行为,escalation 管线本就不触发。
25
+ // - guard 管线在 dispatch 前运行且 deny-only(registry pre-execute → guardReason → dispatch),
26
+ // 转发是对宿主 execute 的普通函数调用,不存在 guard 二次绕过问题。
27
+ // - justification 仅为 escalation 配套参数(dsh-sandbox:「justification is only valid together
28
+ // with sandbox_permissions」),与两参一并剥离 = 官方 standing 行为,无害。
29
+ /** 需剥离的带毒参数(dsh-sandbox escalation 配对参数;写死避免依赖宿主内部导出)。 */
30
+ export const ESCALATION_PARAM_KEYS = ['sandbox_permissions', 'justification'];
31
+ /** 需去毒的宿主工具名单:write/edit(dsh-tool-fs)+ bash(dsh-tool-bash,schema 同样带毒)。 */
32
+ const CLEAN_FS_TOOL_NAMES = ['write', 'edit', 'bash'];
33
+ /** 本模块 shadow 的品牌标记(幂等判定:setup 重入/live 修复重跑 setup 时识别已挂 shadow)。
34
+ * Symbol.for 跨模块实例一致;对象展开会复制自有可枚举 symbol 属性,标记随干净版定义存活。 */
35
+ const CLEAN_FS_BRAND = Symbol.for('dsh-swarm.clean-fs-shadow');
36
+ /** 从 agentCtx 解出工具注册表(缺 service = 测试桩/异常宿主 → undefined)。 */
37
+ function toolsRuntimeOf(agentCtx) {
38
+ const tools = agentCtx.tools;
39
+ if (!tools || typeof tools.get !== 'function' || typeof tools.register !== 'function')
40
+ return undefined;
41
+ return tools;
42
+ }
43
+ /** 剥离 escalation 参数:净化后新对象返回;本就干净则原对象透传(零拷贝零改写)。 */
44
+ export function stripEscalationArgs(args) {
45
+ if (!args || typeof args !== 'object' || Array.isArray(args))
46
+ return args;
47
+ const a = args;
48
+ const poisoned = ESCALATION_PARAM_KEYS.some((k) => a[k] !== undefined);
49
+ if (!poisoned)
50
+ return args;
51
+ const { sandbox_permissions: _sp, justification: _j, ...rest } = a;
52
+ return rest;
53
+ }
54
+ /**
55
+ * 给 danger-full-access 会话 shadow 注册去毒版 write/edit/bash。
56
+ *
57
+ * 行为契约:
58
+ * - 干净版 = 宿主定义浅拷贝 + parameters 去掉两带毒字段(JSON 深拷贝后删除,注册表保证 lossless JSON)
59
+ * + execute 换成「剥参 → 转发宿主原工具 execute」。写逻辑零自实现,行为 100% 官方。
60
+ * - 宿主 schema 本就无带毒参数(无沙箱后端的组合,escalationModes 为空)→ 无需 shadow,跳过
61
+ * (最小触碰面:不去盖一个本来就干净的版本)。
62
+ * - 转发失败面(宿主定义不可达 / 缺 execute / 同层注册冲突)→ 该工具不挂 + console.error 显形,
63
+ * 宿主带毒版本保持可见(fail-safe:绝不注册一个自实现写文件的半成品)。
64
+ * - 幂等:setup 重入(live 会话修复路径 resumeOrReuse 会重跑 setup)先以品牌标记识别已挂
65
+ * shadow → 跳过;同层冲突抛错也被捕获显形,不炸 setup(宿主版本继续可见,plan-guard 兜底网仍在)。
66
+ *
67
+ * @param agentCtx agent setup 收到的 scoped ctx(agentCtx.tools 即该 scope 的注册表)
68
+ * @param agent Agent 实例(= dsh-tools scope key,exec.agent 同源;get 的 scope 视角参数)
69
+ */
70
+ export function installCleanFsTools(agentCtx, agent) {
71
+ const tools = toolsRuntimeOf(agentCtx);
72
+ if (!tools)
73
+ return; // 无工具服务(测试桩)跳过;宿主版本自然保持可见
74
+ for (const name of CLEAN_FS_TOOL_NAMES) {
75
+ try {
76
+ // shadow 注册前取样:get(name, agent) 走该 agent scope 视角——own 层尚无同名时返回
77
+ // inherited(global + preset standing 祖先层)里的宿主原定义
78
+ const visible = tools.get(name, agent);
79
+ if (!visible || typeof visible !== 'object' || !visible.parameters || typeof visible.execute !== 'function') {
80
+ console.error('[dsh-swarm][clean-fs] host "' + name + '" not reachable via agent-scope registry — shadow skipped, host version stays visible');
81
+ continue;
82
+ }
83
+ if (visible[CLEAN_FS_BRAND])
84
+ continue; // 幂等:上次 setup 已挂 shadow
85
+ const props = visible.parameters.properties;
86
+ const poisoned = !!props && ESCALATION_PARAM_KEYS.some((k) => props[k] !== undefined);
87
+ if (!poisoned)
88
+ continue; // 宿主 schema 本就干净(无沙箱组合)→ 无需 shadow
89
+ // parameters 深拷贝去毒(注册表已保证 lossless JSON,JSON 往返安全);
90
+ // 宿主编译态无 additionalProperties:false(parameterSchemaSpecToJsonSchema 开根),
91
+ // 模型惯性硬塞的带毒参数由 execute 剥参兜住,不会在宿主 execute 的 args 校验处炸出。
92
+ const parameters = JSON.parse(JSON.stringify(visible.parameters));
93
+ if (parameters['properties'] && typeof parameters['properties'] === 'object') {
94
+ for (const key of ESCALATION_PARAM_KEYS)
95
+ delete parameters['properties'][key];
96
+ }
97
+ // 防御:宿主未来若把两参数标成必填,required 一并过滤(当前为可选,此过滤为空操作)
98
+ if (Array.isArray(parameters['required'])) {
99
+ parameters['required'] = parameters['required'].filter((k) => !ESCALATION_PARAM_KEYS.includes(k));
100
+ }
101
+ tools.register({
102
+ ...visible,
103
+ parameters,
104
+ [CLEAN_FS_BRAND]: true,
105
+ // 剥参后转发宿主原 execute:调用形态与注册表 dispatchToolBody 逐字一致(args, exec)。
106
+ // 禁止在此自实现任何写逻辑——行为漂移风险,宿主升级即失效。
107
+ execute(args, exec) {
108
+ return visible.execute(stripEscalationArgs(args), exec);
109
+ },
110
+ });
111
+ }
112
+ catch (err) {
113
+ // fail-safe:单工具失败只降级该工具(宿主版本保持可见),不阻断其余工具与 setup
114
+ console.error('[dsh-swarm][clean-fs] shadow register failed for "' + name + '" — host version stays visible: ' + String(err));
115
+ }
116
+ }
117
+ }
@@ -4,9 +4,9 @@ import { homedir } from 'node:os';
4
4
  import { join } from 'node:path';
5
5
  import { fileURLToPath } from 'node:url';
6
6
  /**
7
- * D22 角色裁剪 preset 的运行时安装(2026-08-15 取舍记录):
7
+ * 角色裁剪 preset 的运行时安装(2026-08-15 取舍记录):
8
8
  * - 组合文件随包分发(personas/kanban-{v,p,w,d}/agent.cordis.yml,随 npm 包分发)。
9
- * kanban-v 于 2026-08-17 补充(R21 对齐):V=butler·orchestrator 零执行能力,组合仅 persona+instructions。
9
+ * kanban-v 于 2026-08-17 补充:V=butler·orchestrator 零执行能力,组合仅 persona+instructions。
10
10
  * - 官方 dsh-agent-presets 的 roots 在 web 启动的 composeProfile 中被强制覆盖为
11
11
  * 官方 shipped root 单一路径(profile-boot 内 SHIPPED_PRESET_ROOT 硬编码),
12
12
  * 因此 cordis.patch.yml 追加 roots 指向包内目录在真实 API 下无效;
@@ -15,7 +15,7 @@ import { fileURLToPath } from 'node:url';
15
15
  * agentPresets.mount(agentCtx, 'kanban-v'|'kanban-p'|'kanban-w'|'kanban-d') 即可解析。
16
16
  * - 幂等:重复安装覆盖同名文件;缺组合文件(未随包)则跳过并让 runner 降级日志。
17
17
  */
18
- const PRESET_IDS = ['kanban-v', 'kanban-p', 'kanban-w', 'kanban-d', 'kanban-pt', 'kanban-dt'];
18
+ const PRESET_IDS = ['kanban-v', 'kanban-p', 'kanban-w', 'kanban-d', 'kanban-pt', 'kanban-dt', 'swarm'];
19
19
  /** 包内组合目录(随包分发)。src/roles/ 与 lib/roles/ 深度一致,均经 ../../ 回到包根。 */
20
20
  export function packagePresetsDir() {
21
21
  return fileURLToPath(new URL('../../personas/', import.meta.url));
@@ -0,0 +1,6 @@
1
+ export declare function packageSkillDir(): string;
2
+ export declare function userSkillsRoot(): string;
3
+ export declare function installLlWikiSkill(opts?: {
4
+ src?: string;
5
+ dstRoot?: string;
6
+ }): 'installed' | 'exists' | 'skipped';
@@ -0,0 +1,32 @@
1
+ // src/roles/skill-installer.ts
2
+ // llm-wiki skill 自动安装:DSH 的 dsh-tool-skill 只从 ~/.agents/skills/ 发现 skill,
3
+ // 不扫插件包内 skills 目录(同 agent-presets 只认 $DSH_HOME/.agent-presets 的先例)。
4
+ // 完整复制(含 deps/assets/tests 全部子目录);幂等(SKILL.md 已存在跳过);尽力而为(失败仅告警)。
5
+ import { cpSync, existsSync, mkdirSync } from 'node:fs';
6
+ import { homedir } from 'node:os';
7
+ import { join } from 'node:path';
8
+ import { fileURLToPath } from 'node:url';
9
+ export function packageSkillDir() {
10
+ return fileURLToPath(new URL('../../skills/llm-wiki-skill/', import.meta.url));
11
+ }
12
+ export function userSkillsRoot() {
13
+ return join(homedir(), '.agents', 'skills');
14
+ }
15
+ export function installLlWikiSkill(opts) {
16
+ const src = opts?.src ?? packageSkillDir();
17
+ const dst = join(opts?.dstRoot ?? userSkillsRoot(), 'llm-wiki-skill');
18
+ if (!existsSync(src))
19
+ return 'skipped';
20
+ if (existsSync(join(dst, 'SKILL.md')))
21
+ return 'exists';
22
+ try {
23
+ mkdirSync(dst, { recursive: true });
24
+ cpSync(src, dst, { recursive: true });
25
+ console.info('[dsh-swarm] llm-wiki-skill installed -> ' + dst);
26
+ return 'installed';
27
+ }
28
+ catch (err) {
29
+ console.warn('[dsh-swarm] llm-wiki-skill install skipped -> ' + dst + ': ' + String(err));
30
+ return 'skipped';
31
+ }
32
+ }
@@ -1,18 +1,13 @@
1
1
  import type { Context } from '@deepseek-ai/cordis';
2
2
  import { KanbanService } from '../domain/kanban-service.js';
3
- import type { WikiVaultClient } from '../wiki/wiki-vault-client.js';
3
+ import { WikiVaultClient } from '../wiki/wiki-vault-client.js';
4
4
  import type { Role } from '../domain/types.js';
5
- /** 判定 wiki 路径是否位于 DT 评审命名空间 projects/<chain>/review/(拒绝 ../、绝对路径、非 review 前缀)。 */
5
+ import type { ConfigProvider } from '../services/config-provider.js';
6
+ import { isRoleComposed } from '../dispatcher/agent-runner.js';
7
+ export { isRoleComposed };
8
+ /** 判定 wiki 路径是否位于 DT 评审命名空间 projects/<repoSlug>/<chainId>/review/
9
+ * (repoSlug=[a-z0-9-]+ 通配,chainId 精确匹配;拒绝 ../、绝对路径、跨链、旧格式直挂根)。 */
6
10
  export declare function isReviewNamespacePath(pagePath: string, chainId: string): boolean;
7
- /**
8
- * 评审引擎决策(DT):ocr(open-code-review Delegation 模式)优先;
9
- * 不可用 fallback superpowers code-review;两者都不可用 → review-tool-unavailable(阻塞)。
10
- * 纯函数便于单测;真实可用性探测在 agent-runner 装配(探活 ocr 二进制/失败)。
11
- */
12
- export declare function resolveReviewEngine(available: {
13
- ocr: boolean;
14
- codeReview: boolean;
15
- }): 'ocr' | 'code-review' | 'review-tool-unavailable';
16
11
  /**
17
12
  * DT 写护栏 = PT 只读护栏(源码/git/写标记 bash 拒绝)+ wiki_write 仅 review namespace 收窄。
18
13
  * repoRoot 为 D 目标仓库;chainId 用于 wiki 评审命名空间校验。
@@ -25,23 +20,34 @@ export declare function buildReadOnlyWriteGuard(_repoRoot: string): (execution:
25
20
  name?: string;
26
21
  arguments?: unknown;
27
22
  }) => string | undefined;
28
- /** P 专用写护栏(Q3):读全放行;git mutation 一律拒绝;写仅允许目标仓库 openspec/changes 目录。
23
+ /** 本地模式 KB 写护栏:全名只读拦截(base)之上,仅对「实际写目标全部为
24
+ * 库根内绝对路径」的写操作豁免。目标提取不到 / 相对路径 / 越界 → 维持 base 拒绝(fail-closed)。
25
+ * 仅 local 模式对 W/DT 装配;remote 模式仍用 buildReadOnlyWriteGuard(库根写也被拒)。
26
+ * 审查修订:extractWriteTargets 保持既有双参签名(cmd, redirectRe),按入口分流
27
+ * 传 BASH_REDIRECT_TARGET_RE / CODE_REDIRECT_TARGET_RE(与 buildPlanWriteGuard 同款)——
28
+ * 单参调用会在首个写意图命令上 TypeError。 */
29
+ export declare function buildKbWriteGuard(kbRoot: string): (execution: {
30
+ name?: string;
31
+ arguments?: unknown;
32
+ }) => string | undefined;
33
+ /** P 专用写护栏:读全放行;git mutation 一律拒绝;写仅允许目标仓库 openspec/changes 目录。
29
34
  * 直接 fs 写工具 → 路径经 resolve 归一化后须落在 <workspaceRoot>/openspec/changes/ 之下(相邻段对判定);
30
35
  * bash/run_code 写标记命令 → 命令文本须含 `openspec/changes` 子串,且提取出的实际写目标(重定向
31
- * 目标 / writeFileSync 实参)逐条经 resolve+isPlanPath 校验(I1:杀 openspec/changes/../.. 穿越写源码)。
36
+ * 目标 / writeFileSync 实参)逐条经 resolve+isPlanPath 校验(杀 openspec/changes/../.. 穿越写源码)。
32
37
  * 源码/src/lib/tests 等写不入(不含该子串)——"禁止改动源码"为工具级硬约束,非 prompt 软约束。
33
38
  * execution 以 dsh-tools 形态 { name, arguments } 传入(与 buildReadOnlyWriteGuard 一致)。 */
34
39
  export declare function buildPlanWriteGuard(workspaceRoot: string): (execution: {
35
40
  name?: string;
36
41
  arguments?: unknown;
37
42
  }) => string | undefined;
38
- /** 按角色在 agent scope 注册工具面(P1-3 统一注册策略):
39
- * 所有 kanban 工具从 T9 工厂选取 + getCaller 闭包(actor=role、boundTaskId=taskId)。
43
+ /** 按角色在 agent scope 注册工具面(统一注册策略):
44
+ * 所有 kanban 工具从工具工厂选取 + getCaller 闭包(actor=role、boundTaskId=taskId)。
40
45
  * can() 权限兜底仍保留在工具 execute 内(纵深防御第二道)。 */
41
46
  export declare function installRoleTools(agentCtx: Context, role: Role, deps: {
42
47
  kanban: KanbanService;
43
48
  wiki: WikiVaultClient;
44
49
  taskId?: string;
50
+ kbMode?: 'remote' | 'local';
45
51
  }): Promise<void>;
46
52
  export declare function registerDtTaskChain(taskId: string, chainId: string): void;
47
53
  export declare function unregisterDtTaskChain(taskId: string): void;
@@ -60,3 +66,53 @@ export declare function buildSubagentTreeGuard(deps?: SubagentGuardDeps): (execu
60
66
  arguments?: unknown;
61
67
  agent?: unknown;
62
68
  }) => string | undefined;
69
+ /** 蜂群模式主会话硬闸:全局 guard,按 header.agentPreset==='swarm'
70
+ * 精准判定(先例 buildSubagentTreeGuard)。swarm 会话 = 扩权参数教学拦截(宿主 bash/write/edit
71
+ * schema 广播 sandbox_permissions/justification,模型带参重试会触发天花板会话 approveEscalation
72
+ * 死循环——独立 DT 同款拦截)+ git 反选(与独立 DT 共用 GIT_MUTATION_VERBS/dualVerbGitDenyReason,
73
+ * buildPlanWriteGuard 同款分段提取判定,跳过 git 全局选项、提取不到动词 fail-closed,先行判定——
74
+ * git 变更动词多数同时命中只读基座的写标记,须以 swarm-guard 文案优先返回)+ 只读基座
75
+ * (buildReadOnlyWriteGuard:直接写工具全名拦截 + bash/run_code 写标记)。其余会话恒放行
76
+ * (角色会话自有 agent scope 护栏兜底,双保险不叠加)。 */
77
+ export declare function buildSwarmSessionGuard(): (execution: {
78
+ name?: string;
79
+ arguments?: unknown;
80
+ agent?: unknown;
81
+ }) => string | undefined;
82
+ /** 独立评审(standalone DT)全局硬闸。独立会话判定(同时成立):
83
+ * header.agentPreset === 'kanban-dt'、未经角色组合标记(!isRoleComposed)、parentSession
84
+ * 非 kbn- 前缀(与 buildSubagentTreeGuard 判据对齐:有 kbn- parentSession 的是链上系
85
+ * DT 子代理,交由该 guard 管——其 incarnation 可能无组合标记、宿主 id 也可能非 kbn-
86
+ * 前缀,漏判会把链评审写入误当独立模式拒掉)、且(能从 execution.agent 取到 session
87
+ * id 时)id 非 kbn- 前缀。不满足 → 不走独立规则。
88
+ * 独立模式规则(按序):
89
+ * 1. kanban 写工具(complete/block/comment/heartbeat/create)→ 拒(独立评审不挂任务链);
90
+ * 2. bash/run_code/write/edit → 扩权参数教学拦截(sandbox_permissions/justification 任一
91
+ * 出现即拒并教模型去参——只读会话无扩权场景,宿主沙箱校验报错文案晦涩);bash/run_code
92
+ * 再过 git 反选(swarm-guard 同款分段提取:&&/||/;/|/换行 分段、跳过全局选项、提取不到
93
+ * 动词 fail-closed 拒):仅禁变更动词与双态动词的变更子形态(见 GIT_STANDALONE_DENY_VERBS
94
+ * /standaloneGitDenyReason),查询、clone/fetch、裸 checkout/switch 放行;非 git 段不因
95
+ * git 规则拒绝;最后挂只读基座 buildReadOnlyWriteGuard(写动词/重定向照拒;clone/fetch
96
+ * 落盘是 git 自身行为,BASH_WRITE_RE 无此二动词天然放行,无需特判);
97
+ * 3. wiki_write(独立模式)→ 仅放行 projects/<repo>/reviews/<主题>-<日期>/ 命名空间;
98
+ * 4. wiki_write(非独立会话)→ 链上组合会话(isRoleComposed)放行(自有 agent-scope
99
+ * guard 管,链命名空间写入绝不被本 guard 误拦);其余(main/swarm/未知 GUI)拒绝
100
+ * ——评审工具全局注册后 wiki_write 收紧到评审会话;
101
+ * 5. 其余工具(read/glob/grep/ocr_review/wiki_read/wiki_search 等)→ 放行。 */
102
+ export declare function buildStandaloneDtGuard(): (execution: {
103
+ name?: string;
104
+ arguments?: unknown;
105
+ agent?: unknown;
106
+ }) => string | undefined;
107
+ /** 独立评审工具全局注册:ocr_review + wiki 三原语(wiki_read/wiki_search/wiki_write)。
108
+ * 独立评审不经 agent-runner 角色组合,角色工具面不存在,故在插件全局 ctx 注册;
109
+ * caller 固定 actor='dt'(can('wiki-write','dt')=true),wiki_write 的会话级收紧由
110
+ * buildStandaloneDtGuard 完成(链上组合会话放行,main/swarm/未知 GUI 拒绝)。
111
+ * wiki 客户端按 kbMode 构造(与 registerMainSessionTools 同源:remote 优先 ctx.get('wiki')
112
+ * 注入(测试 mock),生产热读取 getEffective().wikiVault;local 走 LocalWikiClient)。
113
+ * local 模式不注册 wiki_write:LocalWikiClient.abs 只接受 wiki/** 形态,而 wiki_write
114
+ * 工具边界只放行 projects/... 命名空间——双锁死(任何路径都写不进)。与链上 DT local
115
+ * 行为一致(走 skill/fs 工具而非 wiki 原语);wiki_read/wiki_search 不受写路径白名单
116
+ * 约束,照常注册。
117
+ * registry 缺失(测试裸 Context)→ return,与 registerMainSessionTools 同款防御。 */
118
+ export declare function registerStandaloneReviewerTools(ctx: Context, configProvider: ConfigProvider): void;