@joekytc/dsh-swarm 0.1.2 → 0.2.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 (567) hide show
  1. package/README.md +3 -3
  2. package/README.zh-CN.md +3 -3
  3. package/client/BoardCard.tsx +24 -2
  4. package/client/ConfigSection.tsx +71 -0
  5. package/client/ConfigSelect.tsx +69 -0
  6. package/client/KanbanBoard.tsx +3 -0
  7. package/client/KanbanTab.tsx +4 -3
  8. package/client/TaskDrawer.tsx +2 -26
  9. package/client/WorkflowRail.tsx +3 -1
  10. package/client/config-store.ts +51 -0
  11. package/client/config.css +110 -0
  12. package/client/index.ts +39 -4
  13. package/client/kanban.css +19 -2
  14. package/client/session-bridge.ts +39 -0
  15. package/client/timeline-model.ts +10 -1
  16. package/client/workflow-model.ts +3 -1
  17. package/lib/client.js +358 -53
  18. package/lib/config.d.ts +8 -1
  19. package/lib/config.js +6 -1
  20. package/lib/dispatcher/agent-runner.d.ts +28 -6
  21. package/lib/dispatcher/agent-runner.js +175 -62
  22. package/lib/dispatcher/chain-auditor.js +4 -1
  23. package/lib/dispatcher/dispatcher.d.ts +62 -3
  24. package/lib/dispatcher/dispatcher.js +243 -20
  25. package/lib/dispatcher/session-events.d.ts +11 -15
  26. package/lib/dispatcher/session-events.js +17 -5
  27. package/lib/dispatcher/v-orchestrator.d.ts +42 -9
  28. package/lib/dispatcher/v-orchestrator.js +236 -28
  29. package/lib/domain/config-override.d.ts +38 -0
  30. package/lib/domain/config-override.js +101 -0
  31. package/lib/domain/delivery-contract.d.ts +3 -2
  32. package/lib/domain/delivery-contract.js +28 -16
  33. package/lib/domain/gate-policy.d.ts +26 -0
  34. package/lib/domain/gate-policy.js +44 -0
  35. package/lib/domain/kanban-service.d.ts +16 -3
  36. package/lib/domain/kanban-service.js +41 -6
  37. package/lib/domain/permissions.js +1 -1
  38. package/lib/domain/planning-checklist.d.ts +5 -0
  39. package/lib/domain/planning-checklist.js +80 -6
  40. package/lib/domain/projection.js +2 -1
  41. package/lib/domain/review-evidence.js +1 -1
  42. package/lib/domain/state-machine.js +2 -1
  43. package/lib/domain/types.d.ts +2 -2
  44. package/lib/index.js +19 -21
  45. package/lib/roles/clean-fs-tools.d.ts +22 -0
  46. package/lib/roles/clean-fs-tools.js +118 -0
  47. package/lib/roles/skill-installer.d.ts +6 -0
  48. package/lib/roles/skill-installer.js +32 -0
  49. package/lib/roles/toolsets.d.ts +13 -1
  50. package/lib/roles/toolsets.js +163 -31
  51. package/lib/roles/wiki-worker.d.ts +1 -0
  52. package/lib/roles/wiki-worker.js +10 -2
  53. package/lib/routes/kanban-http.d.ts +5 -2
  54. package/lib/routes/kanban-http.js +36 -3
  55. package/lib/routes/planning-driver.d.ts +3 -1
  56. package/lib/routes/planning-driver.js +10 -6
  57. package/lib/routes/prefix-router.d.ts +16 -0
  58. package/lib/routes/prefix-router.js +37 -2
  59. package/lib/services/config-provider.d.ts +42 -0
  60. package/lib/services/config-provider.js +94 -0
  61. package/lib/services/gate-runner.d.ts +24 -0
  62. package/lib/services/gate-runner.js +87 -0
  63. package/lib/services/kanban-provider.d.ts +5 -1
  64. package/lib/services/kanban-provider.js +40 -2
  65. package/lib/services/llm-catalog.d.ts +35 -0
  66. package/lib/services/llm-catalog.js +19 -0
  67. package/lib/tools/kanban-tools.js +1 -0
  68. package/lib/tools/main-session-tools.d.ts +17 -2
  69. package/lib/tools/main-session-tools.js +88 -21
  70. package/lib/tools/planning-tools.d.ts +4 -0
  71. package/lib/tools/planning-tools.js +39 -12
  72. package/lib/tools/prefetch-tools.js +1 -0
  73. package/lib/tools/spec-card-tools.js +1 -0
  74. package/lib/tools/wiki-tools.js +5 -4
  75. package/lib/wiki/kb-linkage.d.ts +9 -2
  76. package/lib/wiki/kb-linkage.js +3 -3
  77. package/lib/wiki/local-kb-client.d.ts +14 -0
  78. package/lib/wiki/local-kb-client.js +101 -0
  79. package/lib/wiki/local-kb.d.ts +6 -0
  80. package/lib/wiki/local-kb.js +25 -0
  81. package/lib/wiki/memory-recall.d.ts +14 -6
  82. package/lib/wiki/memory-recall.js +17 -13
  83. package/lib/wiki/page-path.d.ts +9 -3
  84. package/lib/wiki/page-path.js +29 -11
  85. package/lib/wiki/wiki-vault-client.d.ts +3 -3
  86. package/lib/wiki/wiki-vault-client.js +6 -6
  87. package/package.json +16 -11
  88. package/personas/kanban-d/preset.yml +1 -1
  89. package/personas/kanban-dt/agent.cordis.yml +2 -2
  90. package/personas/kanban-dt/preset.yml +1 -1
  91. package/personas/kanban-p/agent.cordis.yml +16 -0
  92. package/personas/kanban-p/preset.yml +1 -1
  93. package/personas/kanban-pt/agent.cordis.yml +38 -8
  94. package/personas/kanban-pt/preset.yml +1 -1
  95. package/personas/kanban-w/agent.cordis.yml +35 -16
  96. package/personas/kanban-w/preset.yml +1 -1
  97. package/personas/persona-dt.md +1 -1
  98. package/personas/persona-p.md +4 -1
  99. package/personas/persona-pt.md +13 -6
  100. package/personas/persona-w.md +11 -9
  101. package/skills/grill-me/SKILL.md +71 -0
  102. package/skills/llm-wiki-skill/.mise.toml +2 -0
  103. package/skills/llm-wiki-skill/.nvmrc +1 -0
  104. package/skills/llm-wiki-skill/AGENTS.md +173 -0
  105. package/skills/llm-wiki-skill/CHANGELOG.md +548 -0
  106. package/skills/llm-wiki-skill/CLAUDE.md +152 -0
  107. package/skills/llm-wiki-skill/HERMES.md +44 -0
  108. package/skills/llm-wiki-skill/README.en.md +261 -0
  109. package/skills/llm-wiki-skill/README.md +291 -0
  110. package/skills/llm-wiki-skill/SKILL.md +1133 -0
  111. package/skills/llm-wiki-skill/assets/graph-demo.gif +0 -0
  112. package/skills/llm-wiki-skill/assets/graph-preview.png +0 -0
  113. package/skills/llm-wiki-skill/deps/LICENSE-d3.txt +13 -0
  114. package/skills/llm-wiki-skill/deps/LICENSE-marked.txt +44 -0
  115. package/skills/llm-wiki-skill/deps/LICENSE-purify.txt +568 -0
  116. package/skills/llm-wiki-skill/deps/LICENSE-roughjs.txt +21 -0
  117. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/SKILL.md +261 -0
  118. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/references/config/first-time-setup.md +106 -0
  119. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/cdp.ts +179 -0
  120. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/constants.ts +13 -0
  121. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/defuddle-converter.ts +58 -0
  122. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/html-to-markdown.ts +135 -0
  123. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/legacy-converter.ts +629 -0
  124. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/main.ts +314 -0
  125. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/markdown-conversion-shared.ts +305 -0
  126. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/media-localizer.ts +317 -0
  127. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/package.json +14 -0
  128. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/paths.ts +29 -0
  129. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/vendor/baoyu-chrome-cdp/package.json +9 -0
  130. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/vendor/baoyu-chrome-cdp/src/index.test.ts +307 -0
  131. package/skills/llm-wiki-skill/deps/baoyu-url-to-markdown/scripts/vendor/baoyu-chrome-cdp/src/index.ts +523 -0
  132. package/skills/llm-wiki-skill/deps/d3.min.js +2 -0
  133. package/skills/llm-wiki-skill/deps/marked.min.js +6 -0
  134. package/skills/llm-wiki-skill/deps/purify.min.js +3 -0
  135. package/skills/llm-wiki-skill/deps/rough.min.js +7 -0
  136. package/skills/llm-wiki-skill/deps/youtube-transcript/SKILL.md +47 -0
  137. package/skills/llm-wiki-skill/deps/youtube-transcript/scripts/get_transcript.py +72 -0
  138. package/skills/llm-wiki-skill/designs/graph-edge-legibility/graph-edge-treatments.html +480 -0
  139. package/skills/llm-wiki-skill/docs/design/oriental-atlas/DESIGN.md +183 -0
  140. package/skills/llm-wiki-skill/docs/design/oriental-atlas/README.md +10 -0
  141. package/skills/llm-wiki-skill/docs/design/oriental-atlas/design-brief.md +170 -0
  142. package/skills/llm-wiki-skill/docs/design/oriental-atlas/oriental-editorial-atlas.html +1908 -0
  143. package/skills/llm-wiki-skill/docs/design/oriental-atlas/reviews/result-review.md +68 -0
  144. package/skills/llm-wiki-skill/docs/graph/2026-06-16-interaction-risk-audit.md +88 -0
  145. package/skills/llm-wiki-skill/docs/graph/2026-06-16-interaction-test-coverage-map.md +212 -0
  146. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-18-phase-0-2-baseline.md +86 -0
  147. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-18-phase-1-3-dom-svg-large-baseline.md +85 -0
  148. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-18-phase-1-4-disposable-validation-gate.md +97 -0
  149. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-18-phase-2-4-global-renderer-trial-matrix.md +168 -0
  150. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-19-phase-6-1-sigma-graphology-trial.md +71 -0
  151. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-19-phase-6-2-vis-network-trial.md +78 -0
  152. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-19-phase-6-3-aggregation-fallback-trial.md +72 -0
  153. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-19-phase-6-4-global-renderer-route-decision.md +94 -0
  154. package/skills/llm-wiki-skill/docs/graph/performance/2026-06-19-sigma-global-production-integration-result.md +102 -0
  155. package/skills/llm-wiki-skill/docs/graph/performance/artifacts/2026-06-18-phase-0-2/stage-4.5-offline-dense-wheel.json +9 -0
  156. package/skills/llm-wiki-skill/docs/graph/performance/artifacts/2026-06-18-phase-0-2/stage-4.5-offline-dense-wheel.png +0 -0
  157. package/skills/llm-wiki-skill/docs/graph/performance/artifacts/2026-06-18-phase-0-2/stage-4.5-offline-navigation.png +0 -0
  158. package/skills/llm-wiki-skill/docs/spark/2026-06-15-omp-tool-status-events-design.md +174 -0
  159. package/skills/llm-wiki-skill/docs/spark/2026-06-16-graph-interaction-geometry-design.md +832 -0
  160. package/skills/llm-wiki-skill/docs/spark/2026-06-16-graph-six-layer-architecture-design.md +577 -0
  161. package/skills/llm-wiki-skill/docs/spark/2026-06-17-static-renderer-coordination-split-design.md +172 -0
  162. package/skills/llm-wiki-skill/docs/spark/2026-06-18-large-graph-global-community-design.md +909 -0
  163. package/skills/llm-wiki-skill/docs/spark/2026-06-19-sigma-global-graph-renderer-design.md +360 -0
  164. package/skills/llm-wiki-skill/docs/spark/2026-06-20-paper-ui-port-design.md +162 -0
  165. package/skills/llm-wiki-skill/docs/spark/2026-06-20-paper-ui-v2-shell-alignment-design.md +384 -0
  166. package/skills/llm-wiki-skill/docs/spark/2026-06-21-graph-experience-completion-design.md +534 -0
  167. package/skills/llm-wiki-skill/docs/spark/2026-06-22-chat-auto-scroll-design.md +185 -0
  168. package/skills/llm-wiki-skill/docs/spark/2026-06-22-graph-community-node-visual-design.md +266 -0
  169. package/skills/llm-wiki-skill/docs/spark/2026-06-25-sigma-overlay-refactor-perf-design.md +170 -0
  170. package/skills/llm-wiki-skill/docs/spark/2026-06-26-global-sigma-community-spotlight-design.md +393 -0
  171. package/skills/llm-wiki-skill/docs/spark/mockups/2026-06-18-large-graph-global-community-flow.html +746 -0
  172. package/skills/llm-wiki-skill/install.ps1 +87 -0
  173. package/skills/llm-wiki-skill/install.sh +722 -0
  174. package/skills/llm-wiki-skill/package-lock.json +11171 -0
  175. package/skills/llm-wiki-skill/package.json +24 -0
  176. package/skills/llm-wiki-skill/packages/graph-engine/package.json +37 -0
  177. package/skills/llm-wiki-skill/packages/graph-engine/src/anim/.gitkeep +1 -0
  178. package/skills/llm-wiki-skill/packages/graph-engine/src/anim/index.ts +179 -0
  179. package/skills/llm-wiki-skill/packages/graph-engine/src/architecture.ts +79 -0
  180. package/skills/llm-wiki-skill/packages/graph-engine/src/diff.ts +121 -0
  181. package/skills/llm-wiki-skill/packages/graph-engine/src/facade.ts +1406 -0
  182. package/skills/llm-wiki-skill/packages/graph-engine/src/graph-node.ts +37 -0
  183. package/skills/llm-wiki-skill/packages/graph-engine/src/index.ts +25 -0
  184. package/skills/llm-wiki-skill/packages/graph-engine/src/layout/edge-geometry.ts +17 -0
  185. package/skills/llm-wiki-skill/packages/graph-engine/src/layout/index.ts +16 -0
  186. package/skills/llm-wiki-skill/packages/graph-engine/src/layout/spatial-index.ts +509 -0
  187. package/skills/llm-wiki-skill/packages/graph-engine/src/model/atlas.ts +18 -0
  188. package/skills/llm-wiki-skill/packages/graph-engine/src/model/index.ts +10 -0
  189. package/skills/llm-wiki-skill/packages/graph-engine/src/model/labels.ts +11 -0
  190. package/skills/llm-wiki-skill/packages/graph-engine/src/model/layout.ts +81 -0
  191. package/skills/llm-wiki-skill/packages/graph-engine/src/model/learning.ts +8 -0
  192. package/skills/llm-wiki-skill/packages/graph-engine/src/model/legacy-helpers.ts +1379 -0
  193. package/skills/llm-wiki-skill/packages/graph-engine/src/model/queue.ts +7 -0
  194. package/skills/llm-wiki-skill/packages/graph-engine/src/model/storage.ts +4 -0
  195. package/skills/llm-wiki-skill/packages/graph-engine/src/model/visibility.ts +9 -0
  196. package/skills/llm-wiki-skill/packages/graph-engine/src/render/.gitkeep +1 -0
  197. package/skills/llm-wiki-skill/packages/graph-engine/src/render/adapter.ts +443 -0
  198. package/skills/llm-wiki-skill/packages/graph-engine/src/render/aggregation-containers.ts +64 -0
  199. package/skills/llm-wiki-skill/packages/graph-engine/src/render/community-cloud-geometry.ts +178 -0
  200. package/skills/llm-wiki-skill/packages/graph-engine/src/render/community-wash.ts +238 -0
  201. package/skills/llm-wiki-skill/packages/graph-engine/src/render/community-washes.ts +19 -0
  202. package/skills/llm-wiki-skill/packages/graph-engine/src/render/compat-contract.ts +14 -0
  203. package/skills/llm-wiki-skill/packages/graph-engine/src/render/controller.ts +705 -0
  204. package/skills/llm-wiki-skill/packages/graph-engine/src/render/controls.ts +288 -0
  205. package/skills/llm-wiki-skill/packages/graph-engine/src/render/dom-svg-renderer.ts +180 -0
  206. package/skills/llm-wiki-skill/packages/graph-engine/src/render/edges.ts +51 -0
  207. package/skills/llm-wiki-skill/packages/graph-engine/src/render/geometry.ts +380 -0
  208. package/skills/llm-wiki-skill/packages/graph-engine/src/render/gestures.ts +673 -0
  209. package/skills/llm-wiki-skill/packages/graph-engine/src/render/graph-renderer-root.ts +387 -0
  210. package/skills/llm-wiki-skill/packages/graph-engine/src/render/hit-testing.ts +56 -0
  211. package/skills/llm-wiki-skill/packages/graph-engine/src/render/host-dom.ts +14 -0
  212. package/skills/llm-wiki-skill/packages/graph-engine/src/render/hover-card.ts +37 -0
  213. package/skills/llm-wiki-skill/packages/graph-engine/src/render/index.ts +213 -0
  214. package/skills/llm-wiki-skill/packages/graph-engine/src/render/keyboard.ts +48 -0
  215. package/skills/llm-wiki-skill/packages/graph-engine/src/render/legend.ts +25 -0
  216. package/skills/llm-wiki-skill/packages/graph-engine/src/render/minimap.ts +45 -0
  217. package/skills/llm-wiki-skill/packages/graph-engine/src/render/model.ts +1339 -0
  218. package/skills/llm-wiki-skill/packages/graph-engine/src/render/node-drag-lifecycle.ts +94 -0
  219. package/skills/llm-wiki-skill/packages/graph-engine/src/render/nodes.ts +103 -0
  220. package/skills/llm-wiki-skill/packages/graph-engine/src/render/offline-reader.ts +209 -0
  221. package/skills/llm-wiki-skill/packages/graph-engine/src/render/overlays-presenter.ts +192 -0
  222. package/skills/llm-wiki-skill/packages/graph-engine/src/render/overlays.ts +73 -0
  223. package/skills/llm-wiki-skill/packages/graph-engine/src/render/pin-position.ts +51 -0
  224. package/skills/llm-wiki-skill/packages/graph-engine/src/render/preview.ts +65 -0
  225. package/skills/llm-wiki-skill/packages/graph-engine/src/render/relation-focus.ts +91 -0
  226. package/skills/llm-wiki-skill/packages/graph-engine/src/render/render-context.ts +85 -0
  227. package/skills/llm-wiki-skill/packages/graph-engine/src/render/render-pipeline.ts +871 -0
  228. package/skills/llm-wiki-skill/packages/graph-engine/src/render/render-styles.ts +1405 -0
  229. package/skills/llm-wiki-skill/packages/graph-engine/src/render/renderer-surface.ts +75 -0
  230. package/skills/llm-wiki-skill/packages/graph-engine/src/render/search.ts +57 -0
  231. package/skills/llm-wiki-skill/packages/graph-engine/src/render/sigma-coordinates.ts +44 -0
  232. package/skills/llm-wiki-skill/packages/graph-engine/src/render/sigma-global-drag.ts +246 -0
  233. package/skills/llm-wiki-skill/packages/graph-engine/src/render/sigma-global-renderer.ts +1425 -0
  234. package/skills/llm-wiki-skill/packages/graph-engine/src/render/sigma-overlay-svg.ts +121 -0
  235. package/skills/llm-wiki-skill/packages/graph-engine/src/render/simulation-bridge.ts +59 -0
  236. package/skills/llm-wiki-skill/packages/graph-engine/src/render/state.ts +262 -0
  237. package/skills/llm-wiki-skill/packages/graph-engine/src/render/toolbar.ts +40 -0
  238. package/skills/llm-wiki-skill/packages/graph-engine/src/render/viewport.ts +336 -0
  239. package/skills/llm-wiki-skill/packages/graph-engine/src/select/.gitkeep +1 -0
  240. package/skills/llm-wiki-skill/packages/graph-engine/src/select/index.ts +189 -0
  241. package/skills/llm-wiki-skill/packages/graph-engine/src/sim/index.ts +372 -0
  242. package/skills/llm-wiki-skill/packages/graph-engine/src/sim/pins.ts +84 -0
  243. package/skills/llm-wiki-skill/packages/graph-engine/src/summary/index.ts +447 -0
  244. package/skills/llm-wiki-skill/packages/graph-engine/src/themes/.gitkeep +1 -0
  245. package/skills/llm-wiki-skill/packages/graph-engine/src/themes/index.ts +8 -0
  246. package/skills/llm-wiki-skill/packages/graph-engine/src/themes/tokens.ts +117 -0
  247. package/skills/llm-wiki-skill/packages/graph-engine/src/types/d3-quadtree.d.ts +22 -0
  248. package/skills/llm-wiki-skill/packages/graph-engine/src/types.ts +531 -0
  249. package/skills/llm-wiki-skill/packages/graph-engine/test/aggregation-fallback-trial-adapter.test.ts +115 -0
  250. package/skills/llm-wiki-skill/packages/graph-engine/test/aggregation-fallback-trial-adapter.ts +222 -0
  251. package/skills/llm-wiki-skill/packages/graph-engine/test/anim.test.ts +121 -0
  252. package/skills/llm-wiki-skill/packages/graph-engine/test/architecture.test.ts +63 -0
  253. package/skills/llm-wiki-skill/packages/graph-engine/test/community-cloud-geometry.test.ts +86 -0
  254. package/skills/llm-wiki-skill/packages/graph-engine/test/community-wash.test.ts +97 -0
  255. package/skills/llm-wiki-skill/packages/graph-engine/test/diff.test.ts +133 -0
  256. package/skills/llm-wiki-skill/packages/graph-engine/test/facade.test.ts +1369 -0
  257. package/skills/llm-wiki-skill/packages/graph-engine/test/geometry.test.ts +147 -0
  258. package/skills/llm-wiki-skill/packages/graph-engine/test/gestures.test.ts +768 -0
  259. package/skills/llm-wiki-skill/packages/graph-engine/test/graph-layout.test.ts +110 -0
  260. package/skills/llm-wiki-skill/packages/graph-engine/test/helpers.test.ts +287 -0
  261. package/skills/llm-wiki-skill/packages/graph-engine/test/interaction-contract.test.ts +106 -0
  262. package/skills/llm-wiki-skill/packages/graph-engine/test/keyboard.test.ts +59 -0
  263. package/skills/llm-wiki-skill/packages/graph-engine/test/large-fixtures.test.ts +47 -0
  264. package/skills/llm-wiki-skill/packages/graph-engine/test/large-graph-fixtures.ts +420 -0
  265. package/skills/llm-wiki-skill/packages/graph-engine/test/learning.test.ts +259 -0
  266. package/skills/llm-wiki-skill/packages/graph-engine/test/node-drag-lifecycle.test.ts +166 -0
  267. package/skills/llm-wiki-skill/packages/graph-engine/test/overlays.test.ts +115 -0
  268. package/skills/llm-wiki-skill/packages/graph-engine/test/preview.test.ts +56 -0
  269. package/skills/llm-wiki-skill/packages/graph-engine/test/queue.test.ts +114 -0
  270. package/skills/llm-wiki-skill/packages/graph-engine/test/relation-focus.test.ts +115 -0
  271. package/skills/llm-wiki-skill/packages/graph-engine/test/render-model.test.ts +1030 -0
  272. package/skills/llm-wiki-skill/packages/graph-engine/test/renderer-adapter-contract.test.ts +271 -0
  273. package/skills/llm-wiki-skill/packages/graph-engine/test/renderer-boundary.test.ts +618 -0
  274. package/skills/llm-wiki-skill/packages/graph-engine/test/renderer-lifecycle.test.ts +1711 -0
  275. package/skills/llm-wiki-skill/packages/graph-engine/test/route-continuity.test.ts +284 -0
  276. package/skills/llm-wiki-skill/packages/graph-engine/test/runtime-state.test.ts +281 -0
  277. package/skills/llm-wiki-skill/packages/graph-engine/test/search-and-legend.test.ts +124 -0
  278. package/skills/llm-wiki-skill/packages/graph-engine/test/select.test.ts +168 -0
  279. package/skills/llm-wiki-skill/packages/graph-engine/test/sigma-coordinates.test.ts +50 -0
  280. package/skills/llm-wiki-skill/packages/graph-engine/test/sigma-global-renderer.test.ts +2210 -0
  281. package/skills/llm-wiki-skill/packages/graph-engine/test/sigma-trial-adapter.test.ts +82 -0
  282. package/skills/llm-wiki-skill/packages/graph-engine/test/sigma-trial-adapter.ts +271 -0
  283. package/skills/llm-wiki-skill/packages/graph-engine/test/sim.test.ts +207 -0
  284. package/skills/llm-wiki-skill/packages/graph-engine/test/simulation-bridge.test.ts +96 -0
  285. package/skills/llm-wiki-skill/packages/graph-engine/test/spatial-index.test.ts +222 -0
  286. package/skills/llm-wiki-skill/packages/graph-engine/test/state.test.ts +189 -0
  287. package/skills/llm-wiki-skill/packages/graph-engine/test/summary-contract.test.ts +422 -0
  288. package/skills/llm-wiki-skill/packages/graph-engine/test/themes.test.ts +62 -0
  289. package/skills/llm-wiki-skill/packages/graph-engine/test/toolbar.test.ts +64 -0
  290. package/skills/llm-wiki-skill/packages/graph-engine/test/viewport.test.ts +213 -0
  291. package/skills/llm-wiki-skill/packages/graph-engine/test/vis-network-trial-adapter.test.ts +82 -0
  292. package/skills/llm-wiki-skill/packages/graph-engine/test/vis-network-trial-adapter.ts +186 -0
  293. package/skills/llm-wiki-skill/packages/graph-engine/tsconfig.json +17 -0
  294. package/skills/llm-wiki-skill/packages/graph-engine/vite.config.ts +15 -0
  295. package/skills/llm-wiki-skill/platforms/claude/CLAUDE.md +37 -0
  296. package/skills/llm-wiki-skill/platforms/claude/companions/llm-wiki-upgrade/SKILL.md +95 -0
  297. package/skills/llm-wiki-skill/platforms/codex/AGENTS.md +23 -0
  298. package/skills/llm-wiki-skill/platforms/hermes/README.md +31 -0
  299. package/skills/llm-wiki-skill/platforms/openclaw/README.md +31 -0
  300. package/skills/llm-wiki-skill/scripts/adapter-state.sh +424 -0
  301. package/skills/llm-wiki-skill/scripts/build-graph-data.sh +395 -0
  302. package/skills/llm-wiki-skill/scripts/build-graph-html.sh +459 -0
  303. package/skills/llm-wiki-skill/scripts/cache.sh +352 -0
  304. package/skills/llm-wiki-skill/scripts/create-source-page.sh +100 -0
  305. package/skills/llm-wiki-skill/scripts/delete-helper.sh +68 -0
  306. package/skills/llm-wiki-skill/scripts/graph-analysis.js +732 -0
  307. package/skills/llm-wiki-skill/scripts/hook-session-start.sh +46 -0
  308. package/skills/llm-wiki-skill/scripts/init-wiki.sh +95 -0
  309. package/skills/llm-wiki-skill/scripts/lib/source-signal-eligibility.js +158 -0
  310. package/skills/llm-wiki-skill/scripts/lint-fix.sh +114 -0
  311. package/skills/llm-wiki-skill/scripts/lint-runner.sh +217 -0
  312. package/skills/llm-wiki-skill/scripts/runtime-context.sh +77 -0
  313. package/skills/llm-wiki-skill/scripts/shared-config.sh +83 -0
  314. package/skills/llm-wiki-skill/scripts/source-record-contract.tsv +10 -0
  315. package/skills/llm-wiki-skill/scripts/source-registry.sh +349 -0
  316. package/skills/llm-wiki-skill/scripts/source-registry.tsv +10 -0
  317. package/skills/llm-wiki-skill/scripts/source-signal-coverage.js +83 -0
  318. package/skills/llm-wiki-skill/scripts/validate-step1.sh +144 -0
  319. package/skills/llm-wiki-skill/scripts/wiki-compat.sh +267 -0
  320. package/skills/llm-wiki-skill/setup.sh +8 -0
  321. package/skills/llm-wiki-skill/templates/entity-template.md +30 -0
  322. package/skills/llm-wiki-skill/templates/graph-styles/wash/footer.html +27 -0
  323. package/skills/llm-wiki-skill/templates/graph-styles/wash/graph-wash-helpers.js +1326 -0
  324. package/skills/llm-wiki-skill/templates/graph-styles/wash/graph-wash.js +1009 -0
  325. package/skills/llm-wiki-skill/templates/graph-styles/wash/header.html +2002 -0
  326. package/skills/llm-wiki-skill/templates/index-en-template.md +51 -0
  327. package/skills/llm-wiki-skill/templates/index-template.md +51 -0
  328. package/skills/llm-wiki-skill/templates/log-en-template.md +11 -0
  329. package/skills/llm-wiki-skill/templates/log-template.md +11 -0
  330. package/skills/llm-wiki-skill/templates/overview-en-template.md +41 -0
  331. package/skills/llm-wiki-skill/templates/overview-template.md +41 -0
  332. package/skills/llm-wiki-skill/templates/purpose-en-template.md +16 -0
  333. package/skills/llm-wiki-skill/templates/purpose-template.md +16 -0
  334. package/skills/llm-wiki-skill/templates/query-template.md +19 -0
  335. package/skills/llm-wiki-skill/templates/schema-template.md +185 -0
  336. package/skills/llm-wiki-skill/templates/source-template.md +51 -0
  337. package/skills/llm-wiki-skill/templates/synthesis-template.md +25 -0
  338. package/skills/llm-wiki-skill/templates/topic-template.md +35 -0
  339. package/skills/llm-wiki-skill/tests/adapter-state.sh +338 -0
  340. package/skills/llm-wiki-skill/tests/browser/graph-aggregation-fallback-trial.ts +737 -0
  341. package/skills/llm-wiki-skill/tests/browser/graph-community-node-map.mjs +255 -0
  342. package/skills/llm-wiki-skill/tests/browser/graph-community-wash-interactions.mjs +170 -0
  343. package/skills/llm-wiki-skill/tests/browser/graph-default-behavior.mjs +630 -0
  344. package/skills/llm-wiki-skill/tests/browser/graph-density-preview.mjs +53 -0
  345. package/skills/llm-wiki-skill/tests/browser/graph-html-insights.mjs +41 -0
  346. package/skills/llm-wiki-skill/tests/browser/graph-large-performance.ts +689 -0
  347. package/skills/llm-wiki-skill/tests/browser/graph-node-slim.mjs +75 -0
  348. package/skills/llm-wiki-skill/tests/browser/graph-offline-phase-6.mjs +660 -0
  349. package/skills/llm-wiki-skill/tests/browser/graph-renderer-trial-shared.ts +291 -0
  350. package/skills/llm-wiki-skill/tests/browser/graph-sigma-global-production.ts +1437 -0
  351. package/skills/llm-wiki-skill/tests/browser/graph-sigma-graphology-trial.ts +949 -0
  352. package/skills/llm-wiki-skill/tests/browser/graph-stage-4-5.mjs +815 -0
  353. package/skills/llm-wiki-skill/tests/browser/graph-vis-network-trial.ts +762 -0
  354. package/skills/llm-wiki-skill/tests/browser/graph-workbench-interactions.mjs +730 -0
  355. package/skills/llm-wiki-skill/tests/browser/validate-graph-trial-result.mjs +149 -0
  356. package/skills/llm-wiki-skill/tests/expected/graph-data-empty.json +60 -0
  357. package/skills/llm-wiki-skill/tests/expected/graph-data-sample.json +396 -0
  358. package/skills/llm-wiki-skill/tests/expected/graph-interactive-basic.html +1736 -0
  359. package/skills/llm-wiki-skill/tests/expected/lint-output.txt +44 -0
  360. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/index.md +1 -0
  361. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/wiki/entities/Alpha.md +10 -0
  362. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/wiki/entities/Beta.md +7 -0
  363. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/wiki/entities/Delta.md +8 -0
  364. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/wiki/entities/Gamma.md +8 -0
  365. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/wiki/queries/20260422-abc.md +10 -0
  366. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/wiki/synthesis/Crystal.md +8 -0
  367. package/skills/llm-wiki-skill/tests/fixtures/coverage-sample-wiki/wiki/topics/Overview.md +9 -0
  368. package/skills/llm-wiki-skill/tests/fixtures/graph-data-empty-wiki/wiki/entities/.gitkeep +0 -0
  369. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/purpose.md +3 -0
  370. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/entities/Attention.md +7 -0
  371. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/entities/Decoder.md +7 -0
  372. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/entities/Encoder.md +7 -0
  373. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/entities/GPT.md +7 -0
  374. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/entities/Transformer.md +13 -0
  375. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/sources/paper.md +9 -0
  376. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/topics/arch.md +12 -0
  377. package/skills/llm-wiki-skill/tests/fixtures/graph-data-sample-wiki/wiki/topics/finetune.md +9 -0
  378. package/skills/llm-wiki-skill/tests/fixtures/graph-interactive-basic/wiki/graph-data.json +40 -0
  379. package/skills/llm-wiki-skill/tests/fixtures/graph-interactive-dense/wiki/graph-data.json +3965 -0
  380. package/skills/llm-wiki-skill/tests/fixtures/graph-interactive-multicomm/wiki/graph-data.json +212 -0
  381. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/index.md +14 -0
  382. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/wiki/entities/C++.md +6 -0
  383. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/wiki/entities/Lonely.md +4 -0
  384. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/wiki/entities/Other.md +8 -0
  385. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/wiki/entities/Real.md +7 -0
  386. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/wiki/sources/2026-01-01-test-source.md +15 -0
  387. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/wiki/sources/2026-02-01-inline-img.md +12 -0
  388. package/skills/llm-wiki-skill/tests/fixtures/lint-sample-wiki/wiki/topics/AIbasic.md +3 -0
  389. package/skills/llm-wiki-skill/tests/graph-aggregation-fallback-trial.regression-1.sh +46 -0
  390. package/skills/llm-wiki-skill/tests/graph-analysis-helper.regression-1.sh +237 -0
  391. package/skills/llm-wiki-skill/tests/graph-browser-large-performance.regression-1.sh +39 -0
  392. package/skills/llm-wiki-skill/tests/graph-browser-stage-4-5.regression-1.sh +163 -0
  393. package/skills/llm-wiki-skill/tests/graph-build-failures.regression-1.sh +91 -0
  394. package/skills/llm-wiki-skill/tests/graph-community-node-map.regression-1.sh +107 -0
  395. package/skills/llm-wiki-skill/tests/graph-community-wash-interactions.regression-1.sh +35 -0
  396. package/skills/llm-wiki-skill/tests/graph-data-confidence-merge.regression-1.sh +309 -0
  397. package/skills/llm-wiki-skill/tests/graph-data-source-paths.regression-1.sh +49 -0
  398. package/skills/llm-wiki-skill/tests/graph-default-behavior.regression-1.sh +35 -0
  399. package/skills/llm-wiki-skill/tests/graph-html-a11y.regression-1.sh +50 -0
  400. package/skills/llm-wiki-skill/tests/graph-html-brand-link.regression-1.sh +47 -0
  401. package/skills/llm-wiki-skill/tests/graph-html-density.regression-1.sh +228 -0
  402. package/skills/llm-wiki-skill/tests/graph-html-drawer-neighbors.regression-1.sh +47 -0
  403. package/skills/llm-wiki-skill/tests/graph-html-insights.regression-1.sh +80 -0
  404. package/skills/llm-wiki-skill/tests/graph-html-long-label.regression-1.sh +92 -0
  405. package/skills/llm-wiki-skill/tests/graph-html-minimap.regression-1.sh +51 -0
  406. package/skills/llm-wiki-skill/tests/graph-html-mobile.regression-1.sh +48 -0
  407. package/skills/llm-wiki-skill/tests/graph-html-oriental-atlas-contract.regression-1.sh +94 -0
  408. package/skills/llm-wiki-skill/tests/graph-html-oriental-design-contract.regression-1.sh +82 -0
  409. package/skills/llm-wiki-skill/tests/graph-html-search.regression-1.sh +52 -0
  410. package/skills/llm-wiki-skill/tests/graph-html-styles.regression-1.sh +66 -0
  411. package/skills/llm-wiki-skill/tests/graph-html-toolbar.regression-1.sh +62 -0
  412. package/skills/llm-wiki-skill/tests/graph-offline-phase-6.regression-1.sh +51 -0
  413. package/skills/llm-wiki-skill/tests/graph-sigma-global-production.regression-1.sh +64 -0
  414. package/skills/llm-wiki-skill/tests/graph-sigma-graphology-trial.regression-1.sh +46 -0
  415. package/skills/llm-wiki-skill/tests/graph-vis-network-trial.regression-1.sh +46 -0
  416. package/skills/llm-wiki-skill/tests/graph-workbench-interactions.regression-1.sh +151 -0
  417. package/skills/llm-wiki-skill/tests/js/graph-wash-bootstrap.test.js +110 -0
  418. package/skills/llm-wiki-skill/tests/js/graph-wash-helpers.test.js +296 -0
  419. package/skills/llm-wiki-skill/tests/js/graph-wash-learning.test.js +260 -0
  420. package/skills/llm-wiki-skill/tests/js/graph-wash-queue.test.js +115 -0
  421. package/skills/llm-wiki-skill/tests/js/graph-wash-runtime-state.test.js +282 -0
  422. package/skills/llm-wiki-skill/tests/js/source-signal-coverage.test.js +48 -0
  423. package/skills/llm-wiki-skill/tests/js/source-signal-eligibility.test.js +202 -0
  424. package/skills/llm-wiki-skill/tests/lib/graph-html-engine-helpers.sh +110 -0
  425. package/skills/llm-wiki-skill/tests/lint-output.regression-1.sh +32 -0
  426. package/skills/llm-wiki-skill/tests/regression.sh +1754 -0
  427. package/skills/llm-wiki-skill/workbench/AGENTS.md +110 -0
  428. package/skills/llm-wiki-skill/workbench/CLAUDE.md +55 -0
  429. package/skills/llm-wiki-skill/workbench/LICENSE +21 -0
  430. package/skills/llm-wiki-skill/workbench/PRODUCT.md +1353 -0
  431. package/skills/llm-wiki-skill/workbench/README.md +30 -0
  432. package/skills/llm-wiki-skill/workbench/docs/current-kb-retrieval-design.md +587 -0
  433. package/skills/llm-wiki-skill/workbench/docs/graph-evolution-1-design.md +210 -0
  434. package/skills/llm-wiki-skill/workbench/docs/stage-2-design.md +1139 -0
  435. package/skills/llm-wiki-skill/workbench/docs/stage-3-design.md +1269 -0
  436. package/skills/llm-wiki-skill/workbench/docs/stage-3.5-design.md +1164 -0
  437. package/skills/llm-wiki-skill/workbench/docs/stage-4-design.md +504 -0
  438. package/skills/llm-wiki-skill/workbench/docs/stage-4.5-design.md +195 -0
  439. package/skills/llm-wiki-skill/workbench/docs/superpowers/specs/2026-05-28-resizable-preview-layout-design.md +165 -0
  440. package/skills/llm-wiki-skill/workbench/docs/superpowers/specs/2026-05-28-settings-panel-scroll-fix.md +50 -0
  441. package/skills/llm-wiki-skill/workbench/server/package.json +31 -0
  442. package/skills/llm-wiki-skill/workbench/server/src/agent.ts +457 -0
  443. package/skills/llm-wiki-skill/workbench/server/src/artifacts.ts +248 -0
  444. package/skills/llm-wiki-skill/workbench/server/src/auth.ts +164 -0
  445. package/skills/llm-wiki-skill/workbench/server/src/config.ts +130 -0
  446. package/skills/llm-wiki-skill/workbench/server/src/conversations.test.ts +159 -0
  447. package/skills/llm-wiki-skill/workbench/server/src/conversations.ts +270 -0
  448. package/skills/llm-wiki-skill/workbench/server/src/digest/batch.ts +189 -0
  449. package/skills/llm-wiki-skill/workbench/server/src/digest/concurrency.test.ts +36 -0
  450. package/skills/llm-wiki-skill/workbench/server/src/digest/concurrency.ts +31 -0
  451. package/skills/llm-wiki-skill/workbench/server/src/digest/subagent.ts +91 -0
  452. package/skills/llm-wiki-skill/workbench/server/src/extensions/artifacts.ts +81 -0
  453. package/skills/llm-wiki-skill/workbench/server/src/extensions/knowledge-base.ts +263 -0
  454. package/skills/llm-wiki-skill/workbench/server/src/extensions/new-wiki.ts +42 -0
  455. package/skills/llm-wiki-skill/workbench/server/src/extensions/synthesis.ts +172 -0
  456. package/skills/llm-wiki-skill/workbench/server/src/graph-watcher.test.ts +196 -0
  457. package/skills/llm-wiki-skill/workbench/server/src/graph.test.ts +113 -0
  458. package/skills/llm-wiki-skill/workbench/server/src/graph.ts +351 -0
  459. package/skills/llm-wiki-skill/workbench/server/src/index.ts +1148 -0
  460. package/skills/llm-wiki-skill/workbench/server/src/knowledge-bases.test.ts +30 -0
  461. package/skills/llm-wiki-skill/workbench/server/src/knowledge-bases.ts +321 -0
  462. package/skills/llm-wiki-skill/workbench/server/src/pages.test.ts +41 -0
  463. package/skills/llm-wiki-skill/workbench/server/src/pages.ts +160 -0
  464. package/skills/llm-wiki-skill/workbench/server/src/retrieval.test.ts +151 -0
  465. package/skills/llm-wiki-skill/workbench/server/src/retrieval.ts +427 -0
  466. package/skills/llm-wiki-skill/workbench/server/src/tool-status-events.test.ts +363 -0
  467. package/skills/llm-wiki-skill/workbench/server/src/tool-status-events.ts +616 -0
  468. package/skills/llm-wiki-skill/workbench/server/src/wiki-init.test.ts +19 -0
  469. package/skills/llm-wiki-skill/workbench/server/src/wiki-init.ts +188 -0
  470. package/skills/llm-wiki-skill/workbench/server/tsconfig.json +10 -0
  471. package/skills/llm-wiki-skill/workbench/tsconfig.json +20 -0
  472. package/skills/llm-wiki-skill/workbench/web/README.md +73 -0
  473. package/skills/llm-wiki-skill/workbench/web/components.json +21 -0
  474. package/skills/llm-wiki-skill/workbench/web/eslint.config.js +22 -0
  475. package/skills/llm-wiki-skill/workbench/web/index.html +16 -0
  476. package/skills/llm-wiki-skill/workbench/web/package.json +54 -0
  477. package/skills/llm-wiki-skill/workbench/web/src/App.tsx +1195 -0
  478. package/skills/llm-wiki-skill/workbench/web/src/components/AddExternalDialog.tsx +375 -0
  479. package/skills/llm-wiki-skill/workbench/web/src/components/AppearancePanel.tsx +158 -0
  480. package/skills/llm-wiki-skill/workbench/web/src/components/ArtifactView.tsx +15 -0
  481. package/skills/llm-wiki-skill/workbench/web/src/components/BatchDigestPanel.tsx +117 -0
  482. package/skills/llm-wiki-skill/workbench/web/src/components/ChatPanel.tsx +890 -0
  483. package/skills/llm-wiki-skill/workbench/web/src/components/CommandMenu.tsx +75 -0
  484. package/skills/llm-wiki-skill/workbench/web/src/components/ExportButtons.tsx +58 -0
  485. package/skills/llm-wiki-skill/workbench/web/src/components/GraphPanel.tsx +800 -0
  486. package/skills/llm-wiki-skill/workbench/web/src/components/GraphReader.tsx +52 -0
  487. package/skills/llm-wiki-skill/workbench/web/src/components/GraphSelection.tsx +100 -0
  488. package/skills/llm-wiki-skill/workbench/web/src/components/GraphSummaryDrawer.tsx +269 -0
  489. package/skills/llm-wiki-skill/workbench/web/src/components/MainViewTabs.tsx +69 -0
  490. package/skills/llm-wiki-skill/workbench/web/src/components/MarkdownView.tsx +106 -0
  491. package/skills/llm-wiki-skill/workbench/web/src/components/NewWikiDialog.tsx +103 -0
  492. package/skills/llm-wiki-skill/workbench/web/src/components/RefMenu.tsx +44 -0
  493. package/skills/llm-wiki-skill/workbench/web/src/components/RightDrawer.tsx +298 -0
  494. package/skills/llm-wiki-skill/workbench/web/src/components/SearchPanel.tsx +165 -0
  495. package/skills/llm-wiki-skill/workbench/web/src/components/SettingsPanel.tsx +320 -0
  496. package/skills/llm-wiki-skill/workbench/web/src/components/Sidebar.tsx +354 -0
  497. package/skills/llm-wiki-skill/workbench/web/src/components/ToolHistorySummary.tsx +111 -0
  498. package/skills/llm-wiki-skill/workbench/web/src/components/ToolStatusRunway.tsx +70 -0
  499. package/skills/llm-wiki-skill/workbench/web/src/components/TopBar.tsx +348 -0
  500. package/skills/llm-wiki-skill/workbench/web/src/components/renderers/DownloadOnlyRenderer.tsx +88 -0
  501. package/skills/llm-wiki-skill/workbench/web/src/components/renderers/HtmlRenderer.tsx +92 -0
  502. package/skills/llm-wiki-skill/workbench/web/src/components/ui/button.tsx +52 -0
  503. package/skills/llm-wiki-skill/workbench/web/src/components/ui/command.tsx +50 -0
  504. package/skills/llm-wiki-skill/workbench/web/src/components/ui/dialog.tsx +156 -0
  505. package/skills/llm-wiki-skill/workbench/web/src/components/ui/input.tsx +21 -0
  506. package/skills/llm-wiki-skill/workbench/web/src/components/ui/tooltip.tsx +57 -0
  507. package/skills/llm-wiki-skill/workbench/web/src/index.css +4204 -0
  508. package/skills/llm-wiki-skill/workbench/web/src/lib/api.ts +648 -0
  509. package/skills/llm-wiki-skill/workbench/web/src/lib/appearance.ts +114 -0
  510. package/skills/llm-wiki-skill/workbench/web/src/lib/drawer-layout.ts +41 -0
  511. package/skills/llm-wiki-skill/workbench/web/src/lib/drawer-state.ts +168 -0
  512. package/skills/llm-wiki-skill/workbench/web/src/lib/graph-reader.ts +25 -0
  513. package/skills/llm-wiki-skill/workbench/web/src/lib/graph-selection-drawer.ts +35 -0
  514. package/skills/llm-wiki-skill/workbench/web/src/lib/graph-selection.ts +96 -0
  515. package/skills/llm-wiki-skill/workbench/web/src/lib/graph-summary-actions.ts +184 -0
  516. package/skills/llm-wiki-skill/workbench/web/src/lib/legacy-tool-status.ts +113 -0
  517. package/skills/llm-wiki-skill/workbench/web/src/lib/model-roles.ts +20 -0
  518. package/skills/llm-wiki-skill/workbench/web/src/lib/search-filter.ts +104 -0
  519. package/skills/llm-wiki-skill/workbench/web/src/lib/sse.ts +72 -0
  520. package/skills/llm-wiki-skill/workbench/web/src/lib/tool-status-format.ts +170 -0
  521. package/skills/llm-wiki-skill/workbench/web/src/lib/tool-status-model.ts +392 -0
  522. package/skills/llm-wiki-skill/workbench/web/src/lib/utils.ts +10 -0
  523. package/skills/llm-wiki-skill/workbench/web/src/lib/view-status.ts +16 -0
  524. package/skills/llm-wiki-skill/workbench/web/src/lib/wiki-links.ts +32 -0
  525. package/skills/llm-wiki-skill/workbench/web/src/main.tsx +10 -0
  526. package/skills/llm-wiki-skill/workbench/web/test/api.test.ts +61 -0
  527. package/skills/llm-wiki-skill/workbench/web/test/app-shell-drawer-layout.test.tsx +48 -0
  528. package/skills/llm-wiki-skill/workbench/web/test/appearance-panel.test.tsx +121 -0
  529. package/skills/llm-wiki-skill/workbench/web/test/appearance.test.ts +262 -0
  530. package/skills/llm-wiki-skill/workbench/web/test/chat-host-source.test.tsx +22 -0
  531. package/skills/llm-wiki-skill/workbench/web/test/chat-panel-auto-scroll.test.tsx +311 -0
  532. package/skills/llm-wiki-skill/workbench/web/test/chat-panel-bubbles.test.tsx +48 -0
  533. package/skills/llm-wiki-skill/workbench/web/test/chat-panel-composer.test.tsx +86 -0
  534. package/skills/llm-wiki-skill/workbench/web/test/chat-panel-tool-status.test.tsx +26 -0
  535. package/skills/llm-wiki-skill/workbench/web/test/export-batch-paper.test.tsx +101 -0
  536. package/skills/llm-wiki-skill/workbench/web/test/graph-drawer-state.test.ts +257 -0
  537. package/skills/llm-wiki-skill/workbench/web/test/graph-panel-paper.test.tsx +200 -0
  538. package/skills/llm-wiki-skill/workbench/web/test/graph-reader-request.test.ts +32 -0
  539. package/skills/llm-wiki-skill/workbench/web/test/graph-reader.test.ts +62 -0
  540. package/skills/llm-wiki-skill/workbench/web/test/graph-selection-drawer.test.ts +56 -0
  541. package/skills/llm-wiki-skill/workbench/web/test/graph-selection.test.ts +83 -0
  542. package/skills/llm-wiki-skill/workbench/web/test/graph-summary-actions.test.ts +188 -0
  543. package/skills/llm-wiki-skill/workbench/web/test/main-view-tabs.test.tsx +34 -0
  544. package/skills/llm-wiki-skill/workbench/web/test/markdown-view.test.tsx +34 -0
  545. package/skills/llm-wiki-skill/workbench/web/test/popup-menus.test.tsx +85 -0
  546. package/skills/llm-wiki-skill/workbench/web/test/render.test.tsx +30 -0
  547. package/skills/llm-wiki-skill/workbench/web/test/render.tsx +38 -0
  548. package/skills/llm-wiki-skill/workbench/web/test/right-drawer-graph-summary.test.tsx +287 -0
  549. package/skills/llm-wiki-skill/workbench/web/test/right-drawer-interactions.test.tsx +182 -0
  550. package/skills/llm-wiki-skill/workbench/web/test/search-filter.test.ts +65 -0
  551. package/skills/llm-wiki-skill/workbench/web/test/search-panel.test.tsx +155 -0
  552. package/skills/llm-wiki-skill/workbench/web/test/setup-dom.ts +66 -0
  553. package/skills/llm-wiki-skill/workbench/web/test/sidebar-v2-source.test.ts +17 -0
  554. package/skills/llm-wiki-skill/workbench/web/test/sidebar.test.tsx +110 -0
  555. package/skills/llm-wiki-skill/workbench/web/test/tool-history-summary.test.tsx +150 -0
  556. package/skills/llm-wiki-skill/workbench/web/test/tool-status-format.test.ts +107 -0
  557. package/skills/llm-wiki-skill/workbench/web/test/tool-status-model.test.ts +324 -0
  558. package/skills/llm-wiki-skill/workbench/web/test/tool-status-runway.test.ts +159 -0
  559. package/skills/llm-wiki-skill/workbench/web/test/topbar.test.tsx +248 -0
  560. package/skills/llm-wiki-skill/workbench/web/test/visual/paper-ui.ts +898 -0
  561. package/skills/llm-wiki-skill/workbench/web/test/wiki-links.test.ts +23 -0
  562. package/skills/llm-wiki-skill/workbench/web/test-results/paper-ui/actual/.gitkeep +1 -0
  563. package/skills/llm-wiki-skill/workbench/web/test-results/paper-ui/baseline/.gitkeep +1 -0
  564. package/skills/llm-wiki-skill/workbench/web/tsconfig.app.json +30 -0
  565. package/skills/llm-wiki-skill/workbench/web/tsconfig.json +7 -0
  566. package/skills/llm-wiki-skill/workbench/web/tsconfig.node.json +24 -0
  567. package/skills/llm-wiki-skill/workbench/web/vite.config.ts +28 -0
@@ -0,0 +1,360 @@
1
+ # Sigma/Graphology Global Graph Renderer Design
2
+
3
+ 日期:2026-06-19
4
+ 状态:待用户复核
5
+ 当前分支:`codex/pr52-sigma-global-renderer-design`
6
+
7
+ ## 目的
8
+
9
+ 这份设计确定 Sigma/Graphology 如何正式接入 llm-wiki 的全局图谱视角。
10
+
11
+ 前一轮性能计划已经选择 Sigma/Graphology 作为未来全局大图渲染路线,但它只完成了路线选择和试验验证,没有切换生产图谱。当前任务不是继续做隐藏试验,也不是重新评估 Sigma、vis-network、聚合方案,而是把 Sigma/Graphology 作为首选正式全局路线接入的产品和工程边界定清楚,方便后续直接写实施计划。
12
+
13
+ 这里的 Phase 0 是“正式接入前的最后开工门槛”,不是重新开启选型。如果 Phase 0 发现 Sigma 存在硬阻塞,本实施方向应停止并记录 blocker,再另开技术路线决策;不要在同一份落地计划里临时转向 vis-network。
14
+
15
+ 本设计延续 2026-06-18 的大图体验结论:
16
+
17
+ **全局图谱负责看结构,社区聚焦负责读内容。**
18
+
19
+ ## 设计结论
20
+
21
+ 采用“全局统一 Sigma,社区继续阅读”的首选正式路线。
22
+
23
+ 1. 所有全局视角统一使用 Sigma/Graphology,不按节点数量分成大小图两套全局渲染主路径。
24
+ 2. 全局视角只承担地图级结构浏览:社区分布、节点点位、关键标签、搜索命中、Pin、选中和高亮。
25
+ 3. 社区阅读、离线详情、内容阅读和富信息卡片继续使用现有 DOM/SVG 阅读路径,不在本次强行改成 Sigma。
26
+ 4. Sigma/Graphology 是首选正式全局路线,不是隐藏开关或实验入口;Phase 0 只决定是否允许进入正式接入,不在本计划内改选其它渲染路线。
27
+ 5. 旧 DOM/SVG 全局图不再作为用户可选的第二套主路径,只保留为小图异常兜底和社区/详情阅读能力。
28
+ 6. 如果 WebGL 不可用、Sigma 初始化失败或画布异常,系统按规模进入明确兜底:小图退回现有 DOM/SVG,全局大图进入最低可用的聚合安全视图,并记录可排查原因。
29
+
30
+ 一句话:
31
+
32
+ **全局统一成一张高性能地图;社区继续承担阅读和理解。**
33
+
34
+ ## 为什么不选“大图才用 Sigma”
35
+
36
+ 只让大图走 Sigma、小图继续走当前全局 DOM/SVG,短期改动较小,但长期会留下两套全局图。
37
+
38
+ 同样是全局视角,搜索、高亮、Pin、选中、筛选、社区摘要、返回全局等行为就必须在两条渲染路径里持续对齐。后续任何体验调整都容易变成双份维护,也容易让小图和大图出现细节不一致。
39
+
40
+ 本次不以 MVP 思维处理,因此选择长期边界更清楚的方案:只要是全局视角,就统一走 Sigma/Graphology。
41
+
42
+ ## 为什么不把社区也改成 Sigma
43
+
44
+ 社区阅读不是单纯画更多点。社区内需要完整节点在场、核心节点卡片、摘要、阅读抽屉、节点内容、上下文动作和更高信息密度。
45
+
46
+ Sigma/Graphology 适合承担全局地图的高性能绘制和视口交互;社区阅读更适合继续使用现有富交互 DOM/SVG 路径。把全局和社区一次性全改成 Sigma 会扩大风险,也会偏离已经确定的“全局看结构,社区读内容”。
47
+
48
+ ## 用户体验边界
49
+
50
+ ### 全局视角
51
+
52
+ 全局视角是地图,不是阅读界面。
53
+
54
+ 显示:
55
+
56
+ - 节点点位。
57
+ - 社区颜色和社区边界。
58
+ - 少量关键节点标签。
59
+ - 重要边或社区间骨架关系。
60
+ - 搜索命中。
61
+ - 当前选中对象。
62
+ - Pin 提示。
63
+ - 社区图例和筛选结果。
64
+
65
+ 降级或不显示:
66
+
67
+ - 普通节点卡片。
68
+ - 大段正文。
69
+ - 全量标签。
70
+ - 全量弱边。
71
+ - 会导致大图卡顿的复杂阴影、动画和富组件。
72
+
73
+ ### 社区阅读和详情
74
+
75
+ 社区阅读继续承担内容理解。
76
+
77
+ 进入社区后:
78
+
79
+ - 社区内节点完整在场。
80
+ - 核心、选中、搜索命中和 Pin 节点可以升级为更高信息密度。
81
+ - 继续使用现有阅读抽屉、节点详情和社区摘要能力。
82
+ - 社区阅读路径不被 Sigma 的内部状态接管。
83
+
84
+ ## 责任边界
85
+
86
+ ### 图谱引擎负责什么
87
+
88
+ `packages/graph-engine/` 继续作为图谱语义和产品规则的唯一来源。
89
+
90
+ 它负责:
91
+
92
+ - 节点、边和社区身份。
93
+ - 搜索结果。
94
+ - 筛选状态。
95
+ - Pin 状态。
96
+ - 选择状态。
97
+ - 社区聚焦。
98
+ - 聚合标记。
99
+ - 全局摘要、节点摘要、社区摘要和不可见对象提示。
100
+ - 抽屉命令,例如进入社区、打开详情、显示对象、清除选择。
101
+ - 大图预算,例如标签、边、卡片和聚合容器显示规则。
102
+
103
+ ### Sigma/Graphology 负责什么
104
+
105
+ Sigma/Graphology 只负责全局地图绘制和视口层交互。
106
+
107
+ 它负责:
108
+
109
+ - 全局节点点位绘制。
110
+ - 全局边绘制。
111
+ - 社区颜色和必要的视觉分组表达。
112
+ - 搜索命中、选中、Pin 等状态的视觉表达。
113
+ - 拖动、缩放和画布命中。
114
+ - 把用户点到的渲染对象投射回图谱引擎能识别的对象。
115
+
116
+ 它不负责:
117
+
118
+ - 决定搜索命中是谁。
119
+ - 决定抽屉显示什么。
120
+ - 决定进入哪个社区。
121
+ - 保存真实图谱状态。
122
+ - 成为新的业务数据源。
123
+
124
+ ### 适配层
125
+
126
+ 正式接入需要清晰的 Sigma 全局适配层,但这一层不从零搭建。`packages/graph-engine/src/render/adapter.ts` 已经有渲染器无关契约(`GraphRendererAdapterData` / `GraphRendererBehaviorContract`),Sigma 试验也已经消费过其中的语义状态,例如选择、搜索命中、Pin、社区和聚合行为。
127
+
128
+ 不过,试验代码仍直接遍历原始 `data.nodes` / `data.edges` 生成 Sigma 点线,因此不能把“数据出向”视为生产就绪。生产 Sigma 必须画适配层输出的受控渲染数据,尤其要使用图谱引擎已经算好的预算、过滤、聚合、标签可见性和语义状态;不能在 Sigma 路径里重新决定画哪些节点、边和标签。
129
+
130
+ 本次主要补两块:第一,把“数据出向”从试验可用推进到生产可用;第二,把 Sigma 的点击、悬停和视口事件转回图谱引擎命令(“命令入向”),以及渲染器生命周期和失败兜底。
131
+
132
+ 适配层必须遵守:
133
+
134
+ - `GraphData` 不为了 Sigma 改形状。
135
+ - Graphology 只保存渲染用图结构,不保存另一份真实业务状态。
136
+ - 抽屉永远通过图谱引擎摘要结果渲染,不读取 Sigma 内部状态。
137
+ - 如果未来更换渲染库,搜索、Pin、社区、抽屉和选择规则不需要重写。
138
+ - 社区区域命中由图谱引擎或适配层根据节点位置、社区 hull / 聚合区域和空间索引计算;Sigma 只上报画布坐标或渲染对象 id,不自己决定“点到了哪个社区”。命中优先级保持为节点、聚合/社区区域、空白。
139
+
140
+ ## 交互规则
141
+
142
+ ### 点击节点
143
+
144
+ 点击全局节点时:
145
+
146
+ - 全局视角不自动跳转。
147
+ - 选中该节点。
148
+ - 高亮该节点和少量直接相关节点。
149
+ - 右侧打开节点轻量摘要。
150
+ - 不自动进入社区。
151
+ - 不自动打开完整阅读内容。
152
+
153
+ 用户在轻量摘要里选择“打开详情 / 阅读”后,进入所属社区并选中该节点。
154
+
155
+ ### 点击社区
156
+
157
+ 点击社区区域或社区图例时:
158
+
159
+ - 全局视角不自动跳转。
160
+ - 选中该社区。
161
+ - 高亮该社区和少量跨社区关系。
162
+ - 右侧打开社区摘要。
163
+ - 不自动进入社区。
164
+
165
+ 用户点击“进入社区”后,才进入社区阅读路径。
166
+
167
+ ### 搜索
168
+
169
+ 搜索只改变当前视图的高亮、淡化、列表和摘要,不重排整张图。
170
+
171
+ 搜索命中很多时:
172
+
173
+ - 命中节点保持可见提示。
174
+ - Pin 节点保持可见提示。
175
+ - 已选对象保持上下文。
176
+ - 普通弱边和普通标签可以降级。
177
+
178
+ ### 筛选
179
+
180
+ 筛选不自动清空当前选择。
181
+
182
+ 如果当前选中对象被筛选排除:
183
+
184
+ - 右侧抽屉保留该对象。
185
+ - 明确提示它不在当前结果中。
186
+ - 提供清除选择或显示该对象的动作。
187
+
188
+ ### Pin
189
+
190
+ Pin 是持久标记,不等于当前选中。
191
+
192
+ 大图降级时,Pin 节点仍要尽量保留可见提示。Pin 可以影响重要性排序,但不能成为唯一排序规则。
193
+
194
+ ### 缩放和拖动
195
+
196
+ 缩放只改变信息密度,不自动切换到社区阅读。
197
+
198
+ 拖动和缩放过程中可以临时降级:
199
+
200
+ - 隐藏普通标签。
201
+ - 隐藏弱边。
202
+ - 减少复杂视觉效果。
203
+
204
+ 交互停止后补回当前预算允许显示的信息。核心锚点、搜索命中、Pin 和选中对象不能在交互中突然消失。
205
+
206
+ ### 返回全局
207
+
208
+ 从社区返回全局后:
209
+
210
+ - 正常情况下回到 Sigma 全局图。
211
+ - 如果当前环境已判定 Sigma 不可用,则回到对应规模的兜底全局视图,不能再次尝试进入一个已知失败的 Sigma 实例。
212
+ - 保留合理上下文,例如刚刚所在社区轻微高亮。
213
+ - 不把用户带到用户可选的另一套全局主路径;兜底只在异常状态下自动发生。
214
+
215
+ ### 失败兜底
216
+
217
+ 如果 Sigma 无法启动(WebGL 不可用、初始化失败、画布异常):
218
+
219
+ - 按规模分层兜底,而不是一律退回 DOM/SVG:小图退回现有 DOM/SVG 全局图;大图退回最低可用的聚合安全视图。因为 DOM/SVG 在 10000 节点本就约 8836ms、36.8 FPS、近乎拖不动,把大图退给它等于把用户丢进一张已知卡死的图。
220
+ - “小图 / 大图”的具体阈值由实施计划用历史基线和真实机器验证确定,初始建议用节点数、边数和社区规模共同判断,而不是只看节点数。
221
+ - 大图聚合安全视图只保证不空白、不卡死、能说明当前图谱结构和下一步动作;它不是完整替代图谱。它只显示社区容器、少量骨架边、选中 / 搜索 / Pin 标记,以及右侧抽屉中的溢出列表入口。
222
+ - 聚合安全视图下的可用动作限定为:查看社区摘要、查看搜索 / Pin / 选中对象列表、进入社区阅读、清除选择或重试 Sigma。节点级自由点选、完整边浏览、完整标签显示不在兜底目标内。
223
+ - 用户要看到轻提示,说明当前处于“图谱安全显示”而不是正常高性能全局图;提示不能打断使用。
224
+ - 用户既不看到空白死图,也不被丢进卡死的大图。
225
+ - 系统记录失败原因,供后续排查。
226
+ - 兜底不是用户主路径,不提供“新旧图谱切换”作为常规入口。这里的聚合降级只是兜底形态,不是第二套全局主产品。
227
+
228
+ ## 性能和验收标准
229
+
230
+ 正式接入不是“Sigma 能画出来”就算完成,而是全局图从小到大都统一、顺滑、可恢复、行为不变。
231
+
232
+ 收益锚点要先说清楚:Sigma 的主要价值不是伺候极端的 10000 节点,而是让数百到数千节点的常见知识库从明显卡顿变丝滑。当前 DOM/SVG 在 1000 节点已要约 900ms、5000 节点约 4615ms 首屏,Sigma 试验把它们压到约 146ms / 175ms。因此验收中心是“真实规模显著变快 + 大图不崩溃”;10000 节点是压力上界,只用来保证不崩,不是产品叙事中心,也不值得为它过度设计(例如为 90000 条弱边堆复杂边预算,而真实库根本到不了那个量级)。
233
+
234
+ 最低验收:
235
+
236
+ 1. 所有全局视角统一走 Sigma/Graphology。
237
+ 2. 社区阅读和详情继续使用现有阅读体验。
238
+ 3. 点击节点、点击社区、搜索、筛选、Pin、进入社区、返回全局、不可见对象提示语义保持一致。
239
+ 4. 1000 节点全局图接近无感。
240
+ 5. 5000 节点全局图拖动、缩放、搜索和抽屉打开明显流畅。
241
+ 6. 10000 节点全局图不能出现拖不动、缩放卡住、搜索迟迟不亮、抽屉慢开或画面大跳变。
242
+ 7. 大图拖动和缩放目标稳定在 45 FPS 以上。
243
+ 8. 10000 节点首次进入全局图时必须有明确加载状态,不能长时间空白。
244
+ 9. Sigma 初始化失败、WebGL 不可用或画布异常时能自动兜底。
245
+ 10. 现有图谱引擎测试、前端图谱行为测试和大图性能测试都必须通过。
246
+
247
+ ## 必测图谱形状
248
+
249
+ 后续实施计划必须跑完整 11 类图谱形状,而不是只复用早期 5 类试验结果。
250
+
251
+ 必须覆盖:
252
+
253
+ 1. 真实图谱快照代理。
254
+ 2. 1000 节点稀疏图。
255
+ 3. 1000 节点密集图。
256
+ 4. 5000 节点稀疏图。
257
+ 5. 5000 节点密集图。
258
+ 6. 10000 节点聚合图。
259
+ 7. 10000 节点高边图。
260
+ 8. 超大社区。
261
+ 9. 很多小社区。
262
+ 10. 很多搜索命中。
263
+ 11. 很多 Pin 节点。
264
+
265
+ 每类至少验证:
266
+
267
+ - 首次渲染。
268
+ - 拖动。
269
+ - 缩放。
270
+ - 搜索高亮。
271
+ - 点选节点。
272
+ - 点选社区或聚合容器。
273
+ - 打开抽屉。
274
+ - 进入社区。
275
+ - 返回全局。
276
+ - 重复交互后的内存和稳定性。
277
+
278
+ ## 实施前置门禁(Phase 0)
279
+
280
+ 写任何生产渲染代码之前,必须先过一道“允许开工”的性能门禁。当前选择 Sigma 的方向成立,但接入前的证据还不够硬:
281
+
282
+ - 现有 Sigma 试验数据(10000 节点约 289ms、60.9 FPS)是“历史隔离基线”,由第一版未硬化的试验脚本产出。决策文档自己也要求“锁定 Sigma 前必须重跑硬化试验”。
283
+ - 关键缺口:5000 / 10000 节点的重复交互内存测试此前是 not run,只有 1000 节点测过内存增长——大图反复交互是否泄漏,目前没有任何数据。
284
+ - 试验用的是极简 drawer 和简单视觉更新模型,不是 workbench 真实的抽屉 / 阅读器 / overlay 负载。
285
+
286
+ 因此 Phase 0 分两层,不把所有发布回归都压到开工前。
287
+
288
+ 开工门禁必须完成:
289
+
290
+ 1. 先升级 harness 判定标准,确保它真的能按本文档验收,而不是继续用过低阈值或极简 drawer 得出虚假通过。
291
+ 2. 重跑完整 11 类形状的核心动作:首次渲染、拖动、缩放、搜索高亮、点选节点、点选社区/聚合、打开抽屉。
292
+ 3. 补齐大图(5000 / 10000)重复交互内存周期。
293
+ 4. 补一个接近真实 drawer / overlay 负载的延迟测试。这里不要求先完成生产集成;可以用代表性负载模拟,但必须比早期极简 drawer 更接近 workbench。
294
+
295
+ 发布回归必须完成:
296
+
297
+ 1. 进入社区。
298
+ 2. 返回全局。
299
+ 3. 失败兜底。
300
+ 4. 小图行为回归。
301
+ 5. 完整 11 类形状的端到端循环。
302
+
303
+ 开工门禁任一项不达标即停下记录 blocker。若 blocker 指向 Sigma 方案本身不可行,停止本实施方向,另开技术路线决策;不要在同一份落地计划里临时改接 vis-network。
304
+
305
+ 开工门禁不通过,下面的生产接入动作不启动;发布回归不通过,不能宣布正式接入完成。
306
+
307
+ ## 工程落点
308
+
309
+ 后续实施计划应围绕以下落点展开(按依赖排序,第 1 条是真正的硬骨头):
310
+
311
+ 1. 先解耦协调层对 DOM/SVG 的隐性依赖。此前的渲染器协调层拆分(已合入 main,对应 `graph-renderer-coordination-split` 计划)已把“决策”(`controller.ts`)和“画图”(`render-pipeline.ts`)分到不同文件,但 controller 仍有多处直接操作具体 DOM(如 `context.dom.nodeElements.get(id)?.focus()`、`.classList.add("is-dragging")`;见 `render-context.ts` 里 `nodeElements: Map<…, HTMLButtonElement>`、`edgeElements: Map<…, SVGPathElement>`)。这些假设“每节点是可单独 focus / 加 class 的 DOM、每边是 SVG path”,对 Sigma 的 WebGL 画布全不成立。必须先把已知 DOM 附着点限定在当前渲染层命令里(如 `setNodeFocused` / `setNodeDragging` / `setSearchState`),不要把它扩成泛化渲染框架。
312
+ 2. 拆清 renderer root、pipeline、controls 的边界。当前生产入口会固定创建 DOM/SVG 根、节点按钮、SVG 边、搜索框、图例和小地图;只抽象 controller 还不够。实施计划需要明确哪些 UI 控件仍由 DOM 外壳承载,哪些图形内容交给 Sigma canvas,哪些能力保留在社区/详情 DOM/SVG 路径。
313
+ 3. 复用已有的 `render/adapter.ts` 契约,但要把“数据出向”补成生产可用:Sigma 画适配层输出的受控渲染数据,不直接遍历原始全量 `GraphData` 自己决定预算。
314
+ 4. 补“命令入向”:把 Sigma 的点击、悬停、视口事件转回图谱引擎命令,不在 Sigma 回调里重算语义。
315
+ 5. 把现有试验用 Sigma 代码收敛成生产路径,而不是直接复制测试 harness。
316
+ 6. 明确全局 Sigma 与社区 DOM/SVG 的路由点。当前 `createGraphFacade` 只创建一个 renderer,`focusCommunity` 只是让同一个 renderer 重新聚焦;正式接入必须决定是双 renderer 切换、单 facade 内部切换,还是 renderer host 管理两种 view,并写清共享状态、销毁、回调、返回全局和兜底如何走。
317
+ 7. 保持现有 workbench 的 `GraphPanel` 对外能力不大改:数据加载、Pin 持久化、选择回调、打开详情、可见状态通知继续通过当前边界通信。复杂度定位要摆正——真正动手术的是 `graph-engine/render` 和 facade 内部,不是 workbench/GraphPanel;后者只调 facade 高层 API,本就不碰渲染细节。
318
+ 8. 把 Graphology 和 Sigma 从试验依赖提升为正式运行依赖时,要明确包边界和构建产物影响。
319
+ 9. 给 WebGL/Sigma 初始化失败增加可测试兜底路径(分层方案见“失败兜底”)。
320
+ 10. 加一个开发期内部开关(env / config 级,不暴露为用户功能)用于新旧渲染对比与快速回退。它默认不进入正式用户路径;如果未来要作为线上应急开关,必须另行写明触发条件、谁能开启、用户会看到什么、何时关闭。它和“不给用户新旧切换按钮”不矛盾,一个是开发/运维工具,一个是产品形态。
321
+ 11. 把性能 harness 从“试验记录”升级为正式验收门禁(即 Phase 0 门禁)。
322
+
323
+ ## 不在本次范围
324
+
325
+ 本次不包含:
326
+
327
+ - 在本实施计划内重新评估或改接 vis-network。若 Phase 0 发现 Sigma 硬阻塞,应停止并另开技术路线决策。
328
+ - 做聚合方案作为第二套全局主产品(聚合仅作为大图失败兜底的降级形态,见“失败兜底”,不作为可选主产品)。
329
+ - 把社区阅读也改成 Sigma。
330
+ - 新增旧图/新图用户切换按钮(开发期内部对比开关不属此列,见“工程落点”第 10 条)。
331
+ - 新增 Agent 提问入口。
332
+ - 新增边点击关系详情。
333
+ - 移动端专项体验。
334
+ - 桌面壳专项实现。
335
+ - 完整键盘漫游。
336
+ - 类型、来源、时间等多套备用组织视角。
337
+
338
+ ## 残余风险
339
+
340
+ 1. Sigma 在生产环境和试验 harness 中的表现可能不同,因此实施前必须通过开工门禁,发布前必须完成完整 11 类形状回归。
341
+ 2. WebGL 在不同电脑和未来桌面壳里的可用性不同,因此兜底路径必须是真实可测的。
342
+ 3. 全局统一 Sigma 会触碰小图全局体验,因此小图行为回归也必须测,不能只测大图。
343
+ 4. 如果适配层边界不够硬,后续容易把搜索、选择、抽屉逻辑写进 Sigma 回调,导致返工。
344
+ 5. controller、renderer root、pipeline 和 controls 现仍有 DOM/SVG 假设,若不先收敛成清晰渲染边界就接 Sigma,会在回调里重造一套交互附着,造成双份维护——这是本次最大的隐性工作量。
345
+ 6. 大图聚合安全视图必须严格保持兜底定位;一旦把它扩成完整可选图谱产品,就会重新引入第二套全局路线。
346
+
347
+ ## 后续动作
348
+
349
+ 用户复核通过后,再把这份设计转换成实施计划。
350
+
351
+ 实施计划应按阶段推进:
352
+
353
+ 1. 先过 Phase 0 开工门禁(升级 harness 判定标准、重跑核心动作、补大图内存周期、补代表性 drawer / overlay 负载);不达标即停,不进入生产接入。
354
+ 2. 解耦 controller、renderer root、pipeline 和 controls 对 DOM/SVG 的隐性依赖,把已知交互附着收敛成渲染器边界命令。
355
+ 3. 复用 adapter.ts,把 Sigma 数据出向补到生产可用,并补齐命令入向。
356
+ 4. 明确全局 Sigma 与社区 DOM/SVG 的路由点、共享状态、销毁、回调、返回全局和兜底。
357
+ 5. 落地生产级 Sigma 全局路径和分层兜底边界。
358
+ 6. 补齐交互语义和抽屉联动。
359
+ 7. 全程用 11 类形状持续回归,发布前完成完整端到端循环。
360
+ 8. 最后把旧 DOM/SVG 从全局主路径移除;它仍可作为小图异常兜底、社区阅读和详情能力保留并测试。
@@ -0,0 +1,162 @@
1
+ # Paper 视觉 + 布局 移植设计(图谱后置)
2
+
3
+ 日期:2026-06-20
4
+ 状态:已转执行计划(被 plan 的评审修订更新)
5
+ 当前分支:`feat/paper-ui`
6
+
7
+ > **执行以 plan 为准**:本 spec 是设计意图;几处实现细节已被 `docs/plans/2026-06-20-paper-ui-port-phased-plan.md` 的 plan-eng-review + Codex 修订**取代**——①不引入 `.pw-*` 并行类,就地演进现有 `.msg-*/.chat-*` 等类;②强调色用 `data-accent` 预设而非行内变量;③`ModelSelector` 组件不存在,需新建(复用 SettingsPanel 的 config 路径);④TopBar 不显示「篇数」(`KnowledgeBaseInfo` 无此字段);⑤搜索 ⌘K 做客户端真搜索;⑥PRODUCT.md 对齐提前到实现第一步。以 plan 为实现真相。
8
+
9
+ ## 目的
10
+
11
+ 把已定稿的 Paper 设计原型(`/Users/kangjiaqi/designs/llm-wiki-skill/bright/paper-final-v2.html`,独立 design 仓库)的**视觉语言 + 布局**移植并复刻进 `workbench/web`,作为产品的新默认外观。
12
+
13
+ 这份文档只确定移植的产品与工程边界,方便后续直接写实施计划。它**不**重新评估视觉方向(方向已通过 baoyu-design 多轮迭代锁定),**不**包含图谱画布内部视觉(明确后置),**不**做 MVP 取舍(除图谱外尽量一步到位)。
14
+
15
+ 设计原型与真实 app **同组件架构、同「CSS 变量 + 语义类名」范式**——原型本就是照 workbench 真实结构画的(同名组件 ChatPanel / Sidebar / Composer / ToolStatus / RightDrawer;真实 app 没有 ModelSelector,需要新建 TopBar 模型选择控件并复用 SettingsPanel 的配置路径)。因此本次是「换皮 + 按 v2 重排布局」,不是重写业务逻辑。
16
+
17
+ ## 设计结论
18
+
19
+ 1. **以 v2 的视觉 + 布局为准做像素级复刻**,而不是「v2 视觉套真实结构」。引入 v2 的统一顶栏、药丸 Tab、气泡对话、单卡 Composer、右抽屉阅读视觉、外观调参面板。
20
+ 2. **默认浅色暖纸主题**(真实 app 现在默认 dark,本次改默认 light);夜灯(暖深色)一键切换保留。
21
+ 3. **Tweaks 外观调参做成真实用户偏好**:纸张质感 / 强调色 / 用户气泡 / 手写体点缀 / 密度,随时切换、localStorage 持久化,零后端改动。
22
+ 4. **真实 app 已有但 v2 没有的功能全部保留并 Paper 化**:导出、批量消化、产物 Artifacts、素材消化 input-chip、拖拽消化、抽屉 resize/tab/全屏、批量消化面板等。
23
+ 5. **图谱后置**:本次只把图谱 Tab 入口 / 工具条 / 图例 Paper 化到与整体不突兀;**图谱画布内部(Sigma 渲染配色)不动**。图谱活地图 Paper 化作为独立后续任务(见末节)。
24
+ 6. **未实现的功能留 UI + 接口,后期接真功能**,不在本次强行做后端。
25
+
26
+ 一句话:**v2 的样子,真实的功能,图谱留到下一程。**
27
+
28
+ ## 为什么引入统一 TopBar 是最优解,而不是沿用 statusbar
29
+
30
+ v2 的布局里,模型选择器、新对话、主题切换、外观调参、搜索这些控件是**横跨「对话」和「图谱」两个视图共享的一条顶栏**,位于 Tab 之上。
31
+
32
+ 真实 app 现在没有顶栏:知识库信息分散在 Sidebar(库列表)和每个视图各自的 statusbar(`ChatPanel` 顶部有一条 `.statusbar` 显示库名 + 模型 pill;`GraphPanel` 另有自己的头部)。其后果是**主题切换按钮被复制传进 ChatPanel 和 GraphPanel 两处**(`App.tsx` 里 `onToggleTheme` 分别传给两个面板)。
33
+
34
+ 引入一条**共享 TopBar** 不只是为了像 v2,它本身是更干净的架构:
35
+
36
+ - 跨视图共享的控件(模型、新对话、主题、外观、搜索)只需要在一处声明,消除当前的双份传递与潜在不一致。
37
+ - 视图切换(对话/图谱)只切 Tab 下面的主区,顶栏稳定不动,符合「顶栏是全局控件、Tab 是视图、主区是内容」的清晰分层。
38
+ - `ChatPanel` 的 `.statusbar` 与 `GraphPanel` 的头部职责被上提,两个面板回归「只渲染各自内容」,边界更单一。
39
+
40
+ 因此 TopBar 是「顺手把结构理顺」,不是为了好看的妥协。**采用。**
41
+
42
+ ## 用户拍板的具体决策(硬约束)
43
+
44
+ - **去掉**顶栏左侧知识库头里的「模型名 + 下拉」。左侧只保留:书本图标 + 库名 + origin/valid 标记,纯展示,不可点、无 chevron;不显示篇数(`KnowledgeBaseInfo` 无此字段)。模型展示与切换只在右侧 TopBar 模型控件,控件需新建并复用 SettingsPanel 的 `config.modelRoles.main` 读写路径。
45
+ - **去掉**侧栏左下角的「夜灯模式」项(与右上角主题切换功能重合)。主题切换只保留在右上角顶栏。
46
+ - **默认主题 = 浅色暖纸**。
47
+ - **主页凸显三个现有功能**:导出(HTML/PDF/PPTX…)、搜索 ⌘K、批量消化。
48
+ - **搜索 ⌘K**:本次做当前库页面引用 metadata 的本地真搜索,数据来自 App/TopBar 级 refs cache;真实跨库 / 全文搜索后端拆为子任务,不在本次扩 scope。
49
+ - 其余 v2 元素**全部保留复刻**。
50
+
51
+ ## 范围
52
+
53
+ ### 本次做
54
+
55
+ - 全局 Paper token 层(浅纸 + 夜灯)映射到现有 `--app-*` 与 shadcn 变量。
56
+ - 新 TopBar 组件 + 移除/上提原 statusbar 控件。
57
+ - Sidebar Paper 化(去夜灯项)。
58
+ - 对话区:扁平消息 → 气泡;工具状态暖化;Composer 单卡化;概念链接 / 荧光笔样式。
59
+ - RightDrawer 阅读视觉 Paper 化(保留 resize/tab/全屏)。
60
+ - 外观偏好系统(`lib/appearance.ts` + `AppearancePanel`)+ localStorage 持久化。
61
+ - 导出 / 批量消化入口凸显并 Paper 化;搜索 ⌘K 做当前库 refs 本地过滤。
62
+ - 图谱 Tab 外壳 / 工具条 / 图例 Paper 化到不突兀。
63
+
64
+ ### 本次不做(后续任务)
65
+
66
+ - 图谱**画布内部**视觉(Sigma 节点 / 社区配色,在 `packages/graph-engine` 的 `render/render-styles.ts`)。
67
+ - 真实跨库 / 全文搜索后端。
68
+ - 任何与外观无关的后端改动。
69
+
70
+ ## 布局骨架(以 v2 为准)
71
+
72
+ ```
73
+ app-shell(竖向 flex)
74
+ ├─ TopBar(新增)
75
+ │ ├─ 左:知识库头 = 书本图标 + 库名 + origin/valid(纯展示,不显示模型名 / 不下拉 / 不显示篇数)
76
+ │ └─ 右:搜索⌘K · 模型选择器(新建) · 新对话 · 主题切换 · 外观齿轮(Tweaks)
77
+ ├─ body(横向 flex)
78
+ │ ├─ Sidebar:笔记本列表 + 会话列表 + footer(图谱活地图 · 设置)【去「夜灯模式」】
79
+ │ ├─ Main:药丸 Tab(对话 / 图谱) + 对话视图 | 图谱视图
80
+ │ └─ RightDrawer:阅读抽屉(节点 / wiki / 产物,保留 resize / tab / 全屏)
81
+ ├─ AppearancePanel(右上齿轮触发的 Tweaks 浮层,右上角展开)
82
+ ├─ SettingsPanel(侧栏「设置」→ 现有配置模态,沿用)
83
+ └─ BatchDigestPanel(沿用,Paper 化)
84
+ ```
85
+
86
+ 落地分工(避免功能重合):
87
+
88
+ - **右上角齿轮 = 外观调参(AppearancePanel)**:纸张 / 配色 / 气泡 / 手写 / 密度 / 主题。
89
+ - **侧栏「设置」= 现有 SettingsPanel 配置模态**(模型凭证、库登记等),不变。
90
+
91
+ ## 样式与 token 策略
92
+
93
+ 1. **Paper token 层**:把 v2 的 `:root` / `[data-theme="light"]` / `[data-theme="dark"]` 暖纸 / 夜灯变量,映射到 `workbench/web/src/index.css` 现有的 `--app-*` 与 shadcn 变量(沿用 design 仓库 `bright/paper-theme.css` 的映射思路,但**补全 v2 实际用到、`paper-theme.css` 漏掉的**:社区色 `--comm-*`、纸张层 `--paper-glow / --paper-vignette / --paper-mottle / --paper-grain`、`--dot`、暖阴影 `--shadow / --shadow-lg`)。
94
+ 2. **组件样式层**:不引入 `.pw-*` 并行层;把现有 `.msg-*` / `.chat-*` / `.tool-*` / `.drawer-*` 等组件类就地演进为 Paper 外观。真实独有组件(导出栏、批量面板、抽屉 resize 把手等)保留既有类并 Paper 化对齐。
95
+ 3. **字体**:`index.html` 引入 Plus Jakarta Sans(正文)+ Caveat(手写点缀)+ JetBrains Mono(路径 / 代码)。注意 CJK:Latin 在前、CJK 系统字体兜底,CJK 正文 line-height 放大。
96
+ 4. **data 属性**:`documentElement` 上 `data-theme`(已有)+ 新增 `data-paper` / `data-userbubble` / `data-hand` / `data-density` / `data-accent`;强调色由 CSS 里的 `data-accent` 预设统一驱动(`--accent` / `--accent-deep` / `--accent-soft`),不用行内 JS 变量。
97
+
98
+ token 替换只换「颜色 / 字体」,达不到复刻;真正复刻需要组件级结构改动(气泡、单卡 Composer、药丸 Tab、摘要卡去左竖条等),本设计的组件清单即覆盖这些。
99
+
100
+ ## 外观偏好(Tweaks = 真实功能)
101
+
102
+ - 新 `workbench/web/src/lib/appearance.ts`:
103
+ - `AppearancePrefs` 类型:`{ theme, paper, accent, userbubble, hand, density }`。
104
+ - 取值:`theme: light|dark`;`paper: clean|grid|laid`;`accent: terracotta|clay|amber|rose`;`userbubble: soft|solid`;`hand: on|off`;`density: cozy|compact`。
105
+ - 读写 localStorage(键前缀 `llm-wiki-agent-appearance-*`,SSR-safe,`typeof window` 守卫),并提供 `applyAppearance(prefs)`:把上述写成 `documentElement` 的 data 属性;强调色通过 `data-accent` 预设生效。
106
+ - 复用现有 `theme` 机制:`theme` 仍走现有 `THEME_STORAGE_KEY` 与 `dataset.theme` + `.dark` class,但**默认值改为 `light`**;其余外观项新增。
107
+ - 新 `AppearancePanel` 组件:复刻 v2 `TweaksPanel`(分段控件 + 配色色板),右上齿轮 popover,右上角展开,带显隐。
108
+ - 状态归属:偏好状态由 `App` 持有(与现有 `theme` 并列),通过一个 effect 应用到 `documentElement`(仿现有 theme effect),`AppearancePanel` 受控。
109
+ - **默认值**:`theme=light` · `paper=clean` · `accent=terracotta` · `userbubble=soft` · `hand=on` · `density=cozy`。
110
+
111
+ ## 组件改造清单
112
+
113
+ | 组件 / 文件 | 改造 | 备注 |
114
+ |---|---|---|
115
+ | `App.tsx` | 新增 TopBar 挂载、外观偏好状态 + effect、移除分散的 `onToggleTheme` 双传 | 顶栏控件回流到此处统一编排 |
116
+ | **TopBar(新)** | 左 kb 头(静态,不显示模型名 / 不下拉 / 不显示篇数)+ 右控件组(搜索⌘K 当前库 refs 本地搜索、模型选择器[新建]、新对话、主题、外观齿轮) | 共享于对话 / 图谱两视图 |
117
+ | `ChatPanel.tsx` | 移除 `.statusbar`(控件上提 TopBar);扁平消息 → 气泡(就地演进 `.msg-row/.msg-avatar/.msg-body/.msg-content` 等类,用户 soft/solid 两态、头像区分);导出栏 Paper 化并凸显;保留 input-chip / 拖拽消化 | 最大块 |
118
+ | `MarkdownView.tsx` | 概念链接补 `.at` Paper 下划线样式(点击开抽屉逻辑已存在);荧光笔 `.hl` | 功能已在,补样式 |
119
+ | `ToolStatusRunway.tsx` / `ToolHistorySummary.tsx` | 暖化对齐 v2(脉冲竖条 + 微光轨道 → 折叠 chips),保留真实信息量 | runway 比 v2 更全,套皮不减信息 |
120
+ | Composer(在 `ChatPanel` 内) | 分离式 → v2 单卡(内嵌发送 + focus 暖光环 + 占位符随 `data-hand` 切手写 / 正文);`RefMenu` / `CommandMenu` Paper 化 | |
121
+ | `Sidebar.tsx` | 笔记本 / 会话 / footer(图谱 · 设置) Paper 化;**移除「夜灯模式」项**;保留折叠 | |
122
+ | `RightDrawer.tsx` + 摘要 / 节点视图 | v2 阅读视觉:摘要改「带标签柔卡」(**去掉左竖条 AI slop**)、meta chip 带社区圆点、关联列表、操作按钮;保留 resize / tab / 全屏 | |
123
+ | `TopBar` 模型选择器 | 新建控件,Paper 化(分组、打勾、pop 动画),复用 SettingsPanel 的 config 读写路径 | 真实 app 无现成 ModelSelector |
124
+ | `BatchDigestPanel.tsx` | Paper 化;入口上浮凸显 | |
125
+ | `GraphPanel.tsx` | 仅 Tab 入口 / 工具条 / 图例 Paper 化;画布内部不动 | 后置任务的边界 |
126
+ | **`lib/appearance.ts`(新)** / **`AppearancePanel`(新)** | 见上节 | |
127
+
128
+ ## 持久化
129
+
130
+ - 外观偏好与现有 UI 偏好一致走 **localStorage**(现有:`llm-wiki-agent-theme` / sidebar-collapsed / drawer-width / main-view)。
131
+ - 不写后端、不进 `~/.llm-wiki-agent/`。
132
+
133
+ ## 测试 / 验收
134
+
135
+ - `npm run build`(含 `tsc -b`)、`npm run typecheck`、现有 `npm test`(node:test / vitest)全绿。
136
+ - **真实功能不回归**:消息流式(SSE)、`@` 引用 / `/` 命令、导出、批量消化、产物抽屉、抽屉 resize/tab/全屏、切库 / 切对话、概念链接开抽屉。
137
+ - **视觉回归**:2 主题 × 3 纸张 × 4 配色 × 2 气泡 × 2 密度 × 手写开关,逐项截图核对;浅 / 夜灯首屏。
138
+ - 过一遍主流程(手动或 Playwright)。
139
+
140
+ ## 落地节奏
141
+
142
+ 一步到位,单分支 `feat/paper-ui`,内部按逻辑单元分 commit:
143
+
144
+ 1. Paper token 层(`index.css` 变量 + 字体)
145
+ 2. 外观偏好系统(`lib/appearance.ts` + `AppearancePanel` + App 接线)
146
+ 3. TopBar 新增 + statusbar 控件上提
147
+ 4. Sidebar Paper 化(去夜灯项)
148
+ 5. 对话区气泡化 + 工具状态暖化
149
+ 6. Composer 单卡化 + 菜单 / 导出 Paper 化
150
+ 7. RightDrawer 阅读视觉
151
+ 8. 图谱 Tab 外壳 Paper 化 + 收尾回归
152
+
153
+ ## 后续任务(不在本次,记录在案)
154
+
155
+ 1. **图谱活地图 Paper 化**:把社区 / 节点配色对齐暖纸调,配色在 `packages/graph-engine` 的 `render/render-styles.ts`(Sigma 渲染),与图谱体验一起规划,不在 CSS 层。
156
+ 2. **真实跨库 / 全文搜索后端**:本次只做当前库 refs metadata 的本地搜索;跨库、全文内容索引、后端搜索 API 作为独立子任务。
157
+
158
+ ## 风险 / 边界
159
+
160
+ - 引入 TopBar 涉及 `App.tsx` 与 `ChatPanel` / `GraphPanel` 的控件回流,是真实重构;已确认接受(理由见上)。属可控范围,因「不以 MVP 处理」而值得一次做对。
161
+ - v2 原型用极简 `tinyMd` 渲染抽屉正文,`## 标题` / `- 列表` 当纯文本;真实 app 用 `MarkdownView`(正常 markdown),移植后此问题不存在。
162
+ - 强调色 `data-accent` 预设需要同时覆盖浅 / 夜灯;用 `color-mix(... var(--card))` 推导 `--accent-soft` 保证两主题都成立。