maestro-flow 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (806) hide show
  1. package/.claude/commands/maestro-learn.md +364 -0
  2. package/dashboard/dist/assets/ArtifactsPage-A9yzYtpj.js +16 -0
  3. package/dashboard/dist/assets/ChatInput-PuCvZZ3y.js +67 -0
  4. package/dashboard/dist/assets/ChatPage-v19GURYH.js +8 -0
  5. package/dashboard/dist/assets/CollabPage-I5k_mCbG.js +1 -0
  6. package/dashboard/dist/assets/{KanbanPage-BQ6cezbm.js → KanbanPage-PDDBv5-9.js} +2 -2
  7. package/dashboard/dist/assets/{MarkdownRenderer-D2xpZVqP.js → MarkdownRenderer-CCXHaut3.js} +1 -1
  8. package/dashboard/dist/assets/McpPage-CiqXpCHg.js +16 -0
  9. package/dashboard/dist/assets/RequirementBoardPage-CEOvppGn.js +11 -0
  10. package/dashboard/dist/assets/{RequirementPage-CW8e1Cv_.js → RequirementPage-DpnbTEqY.js} +4 -4
  11. package/dashboard/dist/assets/{SpecsPage-Bl5WASF4.js → SpecsPage-CYqOfFkB.js} +2 -2
  12. package/dashboard/dist/assets/{SupervisorPage-Ct51KlRl.js → SupervisorPage-B2sZwkq8.js} +1 -1
  13. package/dashboard/dist/assets/TeamsPage-CkZdCAVZ.js +6 -0
  14. package/dashboard/dist/assets/TreeBrowser-0VIMWclo.js +11 -0
  15. package/dashboard/dist/assets/{WorkflowPage-D5DQLYoY.js → WorkflowPage-Csm23wUS.js} +2 -2
  16. package/dashboard/dist/assets/{arrow-left-GaDqlIdA.js → arrow-left-6fktHyjN.js} +1 -1
  17. package/dashboard/dist/assets/{check-D06Q17_u.js → check-Cbxq2l1-.js} +1 -1
  18. package/dashboard/dist/assets/{chevron-right-Df9DiNd9.js → chevron-right-Yts3bi8p.js} +1 -1
  19. package/dashboard/dist/assets/{circle-CwdcCqnf.js → circle-4Ci4Xolf.js} +1 -1
  20. package/dashboard/dist/assets/{circle-alert-xNa8pdQK.js → circle-alert-B25g9BTL.js} +1 -1
  21. package/dashboard/dist/assets/{circle-check-B6ugdr-I.js → circle-check-BA5_XqeV.js} +1 -1
  22. package/dashboard/dist/assets/{circle-check-big-Du2ZkzU4.js → circle-check-big-DzO2BlL7.js} +1 -1
  23. package/dashboard/dist/assets/{code-DUkRPZIu.js → code-zxwuybO8.js} +1 -1
  24. package/dashboard/dist/assets/{columns-3-B7nerqMb.js → columns-3-DV4oeCfU.js} +1 -1
  25. package/dashboard/dist/assets/{download-DSUXgure.js → download-CXCyQw8M.js} +1 -1
  26. package/dashboard/dist/assets/en-ZbRpfzuP.js +1 -0
  27. package/dashboard/dist/assets/{folder-C6wbX9PV.js → folder-Bvjj8Vn9.js} +1 -1
  28. package/dashboard/dist/assets/{git-branch-BPklQ4Bl.js → git-branch-DL8p9kVC.js} +1 -1
  29. package/dashboard/dist/assets/index-11DuhKhc.js +231 -0
  30. package/dashboard/dist/assets/{index-DkK1KuCs.js → index-BvScJmJM.js} +1 -1
  31. package/dashboard/dist/assets/index-D2Mtyw7I.css +1 -0
  32. package/dashboard/dist/assets/{list-BEAkau2G.js → list-Dj4i9N75.js} +1 -1
  33. package/dashboard/dist/assets/{chevron-down-COuPz-xU.js → minus-DwlFabsT.js} +2 -2
  34. package/dashboard/dist/assets/{pen-line-Bk1b_xE-.js → pen-line-D7UzECt6.js} +1 -1
  35. package/dashboard/dist/assets/{proxy-hByVfg9Z.js → proxy-B9XRqHD9.js} +1 -1
  36. package/dashboard/dist/assets/{search-ij25TuQe.js → search-BQbBTIYl.js} +1 -1
  37. package/dashboard/dist/assets/{shallow-BcyhGB1i.js → shallow-Clb1Lyd_.js} +1 -1
  38. package/dashboard/dist/assets/table-BqxCXid2.js +6 -0
  39. package/dashboard/dist/assets/{trash-2-C7bscdF9.js → trash-2-6rN9B-EQ.js} +1 -1
  40. package/dashboard/dist/assets/{wrench-C3axXC-M.js → wrench-BScEJFqC.js} +1 -1
  41. package/dashboard/dist/assets/{zap-6qysYe-N.js → zap-DxUhG-gk.js} +1 -1
  42. package/dashboard/dist/assets/zh-CN-CoXBFuny.js +1 -0
  43. package/dashboard/dist/index.html +2 -2
  44. package/dashboard/dist-server/dashboard/src/server/agents/delegate-broker-monitor.js +8 -1
  45. package/dashboard/dist-server/dashboard/src/server/agents/delegate-broker-monitor.js.map +1 -1
  46. package/dashboard/dist-server/dashboard/src/server/index.js +6 -4
  47. package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
  48. package/dashboard/dist-server/dashboard/src/server/routes/collab.d.ts +3 -0
  49. package/dashboard/dist-server/dashboard/src/server/routes/collab.js +403 -0
  50. package/dashboard/dist-server/dashboard/src/server/routes/collab.js.map +1 -0
  51. package/dashboard/dist-server/dashboard/src/server/routes/health.js +55 -2
  52. package/dashboard/dist-server/dashboard/src/server/routes/health.js.map +1 -1
  53. package/dashboard/dist-server/dashboard/src/server/routes/index.js +3 -0
  54. package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
  55. package/dashboard/dist-server/dashboard/src/server/routes/specs.js +15 -2
  56. package/dashboard/dist-server/dashboard/src/server/routes/specs.js.map +1 -1
  57. package/dashboard/dist-server/dashboard/src/server/state/event-bus.d.ts +3 -0
  58. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js +2 -0
  59. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js.map +1 -1
  60. package/dashboard/dist-server/dashboard/src/server/state/fs-watcher.js +3 -0
  61. package/dashboard/dist-server/dashboard/src/server/state/fs-watcher.js.map +1 -1
  62. package/dashboard/dist-server/dashboard/src/server/state/state-manager.js +11 -0
  63. package/dashboard/dist-server/dashboard/src/server/state/state-manager.js.map +1 -1
  64. package/dashboard/dist-server/dashboard/src/shared/collab-types.d.ts +42 -0
  65. package/dashboard/dist-server/dashboard/src/shared/collab-types.js +19 -0
  66. package/dashboard/dist-server/dashboard/src/shared/collab-types.js.map +1 -0
  67. package/dashboard/dist-server/dashboard/src/shared/constants.d.ts +7 -0
  68. package/dashboard/dist-server/dashboard/src/shared/constants.js +15 -0
  69. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  70. package/dashboard/dist-server/dashboard/src/shared/types.d.ts +4 -3
  71. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.d.ts +1 -1
  72. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.js.map +1 -1
  73. package/dashboard/dist-server/src/config/template-discovery.js +2 -1
  74. package/dashboard/dist-server/src/config/template-discovery.js.map +1 -1
  75. package/dashboard/dist-server/src/coordinator/graph-walker.d.ts +3 -1
  76. package/dashboard/dist-server/src/coordinator/graph-walker.js +152 -2
  77. package/dashboard/dist-server/src/coordinator/graph-walker.js.map +1 -1
  78. package/dashboard/dist-server/src/hooks/constants.d.ts +2 -0
  79. package/dashboard/dist-server/src/hooks/constants.js +2 -0
  80. package/dashboard/dist-server/src/hooks/constants.js.map +1 -1
  81. package/dashboard/dist-server/src/hooks/hook-engine.d.ts +25 -0
  82. package/dashboard/dist-server/src/hooks/hook-engine.js +67 -0
  83. package/dashboard/dist-server/src/hooks/hook-engine.js.map +1 -0
  84. package/dashboard/dist-server/src/hooks/workflow-hooks.d.ts +57 -0
  85. package/dashboard/dist-server/src/hooks/workflow-hooks.js +47 -0
  86. package/dashboard/dist-server/src/hooks/workflow-hooks.js.map +1 -0
  87. package/dashboard/dist-server/src/server/agents/adapter-factory.d.ts +7 -0
  88. package/dashboard/dist-server/src/server/agents/adapter-factory.js +45 -0
  89. package/dashboard/dist-server/src/server/agents/adapter-factory.js.map +1 -0
  90. package/dashboard/dist-server/{server → src/server}/agents/agent-manager.d.ts +1 -1
  91. package/dashboard/dist-server/{server → src/server}/agents/agent-manager.js +15 -8
  92. package/dashboard/dist-server/src/server/agents/agent-manager.js.map +1 -0
  93. package/dashboard/dist-server/src/server/agents/agent-manager.test.js.map +1 -0
  94. package/dashboard/dist-server/src/server/agents/agent-sdk-adapter.js.map +1 -0
  95. package/dashboard/dist-server/{server → src/server}/agents/base-adapter.d.ts +4 -0
  96. package/dashboard/dist-server/{server → src/server}/agents/base-adapter.js +6 -0
  97. package/dashboard/dist-server/src/server/agents/base-adapter.js.map +1 -0
  98. package/dashboard/dist-server/{server → src/server}/agents/claude-code-adapter.d.ts +4 -0
  99. package/dashboard/dist-server/{server → src/server}/agents/claude-code-adapter.js +59 -12
  100. package/dashboard/dist-server/src/server/agents/claude-code-adapter.js.map +1 -0
  101. package/dashboard/dist-server/src/server/agents/claude-code-adapter.test.js +365 -0
  102. package/dashboard/dist-server/src/server/agents/claude-code-adapter.test.js.map +1 -0
  103. package/dashboard/dist-server/{server → src/server}/agents/codex-app-server-adapter.d.ts +1 -0
  104. package/dashboard/dist-server/{server → src/server}/agents/codex-app-server-adapter.js +3 -0
  105. package/dashboard/dist-server/src/server/agents/codex-app-server-adapter.js.map +1 -0
  106. package/dashboard/dist-server/src/server/agents/codex-cli-adapter.js.map +1 -0
  107. package/dashboard/dist-server/src/server/agents/delegate-broker-monitor.d.ts +30 -0
  108. package/dashboard/dist-server/src/server/agents/delegate-broker-monitor.js +279 -0
  109. package/dashboard/dist-server/src/server/agents/delegate-broker-monitor.js.map +1 -0
  110. package/dashboard/dist-server/src/server/agents/delegate-broker-monitor.test.js +140 -0
  111. package/dashboard/dist-server/src/server/agents/delegate-broker-monitor.test.js.map +1 -0
  112. package/dashboard/dist-server/src/server/agents/entry-normalizer.js.map +1 -0
  113. package/dashboard/dist-server/src/server/agents/entry-normalizer.test.js.map +1 -0
  114. package/dashboard/dist-server/src/server/agents/env-cleanup.js.map +1 -0
  115. package/dashboard/dist-server/src/server/agents/env-file-loader.js.map +1 -0
  116. package/dashboard/dist-server/src/server/agents/gemini-a2a-adapter.d.ts +19 -0
  117. package/dashboard/dist-server/src/server/agents/gemini-a2a-adapter.js +448 -0
  118. package/dashboard/dist-server/src/server/agents/gemini-a2a-adapter.js.map +1 -0
  119. package/dashboard/dist-server/src/server/agents/gemini-a2a-adapter.test.js +411 -0
  120. package/dashboard/dist-server/src/server/agents/gemini-a2a-adapter.test.js.map +1 -0
  121. package/dashboard/dist-server/src/server/agents/opencode-adapter.js.map +1 -0
  122. package/dashboard/dist-server/src/server/agents/sdk-message-translator.js.map +1 -0
  123. package/dashboard/dist-server/src/server/agents/sdk-message-translator.test.js.map +1 -0
  124. package/dashboard/dist-server/src/server/agents/stream-json-adapter.js.map +1 -0
  125. package/dashboard/dist-server/src/server/agents/stream-monitor.js.map +1 -0
  126. package/dashboard/dist-server/src/server/agents/tools/issue-mcp-server.js.map +1 -0
  127. package/dashboard/dist-server/src/server/agents/tools/issue-mcp-server.test.js.map +1 -0
  128. package/dashboard/dist-server/src/server/commander/commander-agent.js.map +1 -0
  129. package/dashboard/dist-server/src/server/commander/commander-agent.test.js.map +1 -0
  130. package/dashboard/dist-server/src/server/commander/commander-config.js.map +1 -0
  131. package/dashboard/dist-server/src/server/commander/commander-config.test.js.map +1 -0
  132. package/dashboard/dist-server/src/server/commander/commander-prompts.js.map +1 -0
  133. package/dashboard/dist-server/src/server/commander/commander-prompts.test.js.map +1 -0
  134. package/dashboard/dist-server/src/server/commander/commander-routes.js.map +1 -0
  135. package/dashboard/dist-server/src/server/commander/commander-routes.test.js.map +1 -0
  136. package/dashboard/dist-server/src/server/config.js.map +1 -0
  137. package/dashboard/dist-server/src/server/coordinator/agents/quality-reviewer-agent.js.map +1 -0
  138. package/dashboard/dist-server/src/server/coordinator/chain-map.js.map +1 -0
  139. package/dashboard/dist-server/src/server/coordinator/chain-map.test.js.map +1 -0
  140. package/dashboard/dist-server/src/server/coordinator/coordinator-routes.js.map +1 -0
  141. package/dashboard/dist-server/src/server/coordinator/coordinator-routes.test.js.map +1 -0
  142. package/dashboard/dist-server/src/server/coordinator/dashboard-executor.js.map +1 -0
  143. package/dashboard/dist-server/src/server/coordinator/dashboard-step-analyzer.js.map +1 -0
  144. package/dashboard/dist-server/src/server/coordinator/graph-walker-factory.js.map +1 -0
  145. package/dashboard/dist-server/src/server/coordinator/prompts/index.js.map +1 -0
  146. package/dashboard/dist-server/src/server/coordinator/tools/workflow-mcp-server.js.map +1 -0
  147. package/dashboard/dist-server/src/server/coordinator/types.js.map +1 -0
  148. package/dashboard/dist-server/src/server/coordinator/walker-event-bridge.js.map +1 -0
  149. package/dashboard/dist-server/src/server/coordinator/workflow-coordinator.js.map +1 -0
  150. package/dashboard/dist-server/src/server/coordinator/workflow-coordinator.test.js.map +1 -0
  151. package/dashboard/dist-server/src/server/execution/dispatch-strategy.js.map +1 -0
  152. package/dashboard/dist-server/src/server/execution/execution-journal.js.map +1 -0
  153. package/dashboard/dist-server/{server → src/server}/execution/execution-scheduler.js +1 -1
  154. package/dashboard/dist-server/src/server/execution/execution-scheduler.js.map +1 -0
  155. package/dashboard/dist-server/src/server/execution/execution-scheduler.test.js.map +1 -0
  156. package/dashboard/dist-server/src/server/execution/strategies/commander-strategy.js.map +1 -0
  157. package/dashboard/dist-server/src/server/execution/strategies/priority-strategy.js.map +1 -0
  158. package/dashboard/dist-server/src/server/execution/strategies/smart-strategy.js.map +1 -0
  159. package/dashboard/dist-server/src/server/execution/wave-executor.js.map +1 -0
  160. package/dashboard/dist-server/src/server/execution/workspace-manager.js.map +1 -0
  161. package/dashboard/dist-server/{server → src/server}/index.js +11 -11
  162. package/dashboard/dist-server/src/server/index.js.map +1 -0
  163. package/dashboard/dist-server/src/server/observability/observability-routes.js.map +1 -0
  164. package/dashboard/dist-server/src/server/observability/observability-service.js.map +1 -0
  165. package/dashboard/dist-server/src/server/prompt/builders/assessment-builder.js.map +1 -0
  166. package/dashboard/dist-server/src/server/prompt/builders/decompose-builder.js.map +1 -0
  167. package/dashboard/dist-server/src/server/prompt/builders/direct-builder.js.map +1 -0
  168. package/dashboard/dist-server/src/server/prompt/builders/skill-builder.js.map +1 -0
  169. package/dashboard/dist-server/src/server/prompt/builders/template-builder.js.map +1 -0
  170. package/dashboard/dist-server/src/server/prompt/prompt-builder.js.map +1 -0
  171. package/dashboard/dist-server/src/server/prompt/prompt-registry.js.map +1 -0
  172. package/dashboard/dist-server/src/server/requirement/requirement-expander.js.map +1 -0
  173. package/dashboard/dist-server/src/server/requirement/requirement-prompts.js.map +1 -0
  174. package/dashboard/dist-server/src/server/routes/agents.js.map +1 -0
  175. package/dashboard/dist-server/src/server/routes/artifacts.js.map +1 -0
  176. package/dashboard/dist-server/src/server/routes/board-state.integration.test.js.map +1 -0
  177. package/dashboard/dist-server/src/server/routes/board.js.map +1 -0
  178. package/dashboard/dist-server/{server → src/server}/routes/cli-history.d.ts +1 -0
  179. package/dashboard/dist-server/{server → src/server}/routes/cli-history.js +24 -1
  180. package/dashboard/dist-server/src/server/routes/cli-history.js.map +1 -0
  181. package/dashboard/dist-server/src/server/routes/cli-history.test.js +202 -0
  182. package/dashboard/dist-server/src/server/routes/cli-history.test.js.map +1 -0
  183. package/dashboard/dist-server/src/server/routes/collab.d.ts +3 -0
  184. package/dashboard/dist-server/src/server/routes/collab.js +293 -0
  185. package/dashboard/dist-server/src/server/routes/collab.js.map +1 -0
  186. package/dashboard/dist-server/src/server/routes/events.js.map +1 -0
  187. package/dashboard/dist-server/src/server/routes/events.test.js.map +1 -0
  188. package/dashboard/dist-server/src/server/routes/execution.integration.test.js.map +1 -0
  189. package/dashboard/dist-server/src/server/routes/execution.js.map +1 -0
  190. package/dashboard/dist-server/src/server/routes/health.js.map +1 -0
  191. package/dashboard/dist-server/{server → src/server}/routes/index.js +6 -0
  192. package/dashboard/dist-server/src/server/routes/index.js.map +1 -0
  193. package/dashboard/dist-server/src/server/routes/install-utils.js.map +1 -0
  194. package/dashboard/dist-server/src/server/routes/install.js.map +1 -0
  195. package/dashboard/dist-server/src/server/routes/issues.js.map +1 -0
  196. package/dashboard/dist-server/src/server/routes/issues.test.js.map +1 -0
  197. package/dashboard/dist-server/src/server/routes/linear.js.map +1 -0
  198. package/dashboard/dist-server/src/server/routes/mcp-templates-store.js.map +1 -0
  199. package/dashboard/dist-server/src/server/routes/mcp.js.map +1 -0
  200. package/dashboard/dist-server/src/server/routes/phases.js.map +1 -0
  201. package/dashboard/dist-server/src/server/routes/requirements.js.map +1 -0
  202. package/dashboard/dist-server/src/server/routes/scratch.js.map +1 -0
  203. package/dashboard/dist-server/src/server/routes/settings.js.map +1 -0
  204. package/dashboard/dist-server/{server → src/server}/routes/specs.d.ts +3 -0
  205. package/dashboard/dist-server/src/server/routes/specs.integration.test.js.map +1 -0
  206. package/dashboard/dist-server/{server → src/server}/routes/specs.js +5 -45
  207. package/dashboard/dist-server/src/server/routes/specs.js.map +1 -0
  208. package/dashboard/dist-server/src/server/routes/supervisor.js.map +1 -0
  209. package/dashboard/dist-server/src/server/routes/supervisor.test.js.map +1 -0
  210. package/dashboard/dist-server/src/server/routes/teams.js.map +1 -0
  211. package/dashboard/dist-server/src/server/routes/wiki.d.ts +20 -0
  212. package/dashboard/dist-server/src/server/routes/wiki.integration.test.js +374 -0
  213. package/dashboard/dist-server/src/server/routes/wiki.integration.test.js.map +1 -0
  214. package/dashboard/dist-server/src/server/routes/wiki.js +220 -0
  215. package/dashboard/dist-server/src/server/routes/wiki.js.map +1 -0
  216. package/dashboard/dist-server/src/server/routes/workspace.js.map +1 -0
  217. package/dashboard/dist-server/src/server/sse/sse-hub.js.map +1 -0
  218. package/dashboard/dist-server/src/server/sse/sse-hub.test.js.map +1 -0
  219. package/dashboard/dist-server/{server → src/server}/state/event-bus.d.ts +7 -0
  220. package/dashboard/dist-server/{server → src/server}/state/event-bus.js +3 -0
  221. package/dashboard/dist-server/src/server/state/event-bus.js.map +1 -0
  222. package/dashboard/dist-server/src/server/state/file-reader.js.map +1 -0
  223. package/dashboard/dist-server/{server → src/server}/state/fs-watcher.js +37 -0
  224. package/dashboard/dist-server/src/server/state/fs-watcher.js.map +1 -0
  225. package/dashboard/dist-server/{server → src/server}/state/state-manager.js +11 -0
  226. package/dashboard/dist-server/src/server/state/state-manager.js.map +1 -0
  227. package/dashboard/dist-server/src/server/state/state-manager.test.js.map +1 -0
  228. package/dashboard/dist-server/src/server/supervisor/extension-manager.js.map +1 -0
  229. package/dashboard/dist-server/src/server/supervisor/extension-manager.test.js.map +1 -0
  230. package/dashboard/dist-server/src/server/supervisor/self-learning-service.js.map +1 -0
  231. package/dashboard/dist-server/src/server/supervisor/self-learning-service.test.js.map +1 -0
  232. package/dashboard/dist-server/src/server/supervisor/supervisor.integration.test.js.map +1 -0
  233. package/dashboard/dist-server/src/server/supervisor/task-scheduler-service.js.map +1 -0
  234. package/dashboard/dist-server/src/server/supervisor/task-scheduler-service.test.js.map +1 -0
  235. package/dashboard/dist-server/src/server/utils/issue-store.js.map +1 -0
  236. package/dashboard/dist-server/src/server/utils/issue-store.test.js.map +1 -0
  237. package/dashboard/dist-server/src/server/wiki/frontmatter-util.js.map +1 -0
  238. package/dashboard/dist-server/src/server/wiki/graph-analysis.d.ts +48 -0
  239. package/dashboard/dist-server/src/server/wiki/graph-analysis.js +103 -0
  240. package/dashboard/dist-server/src/server/wiki/graph-analysis.js.map +1 -0
  241. package/dashboard/dist-server/src/server/wiki/search.d.ts +29 -0
  242. package/dashboard/dist-server/src/server/wiki/search.js +94 -0
  243. package/dashboard/dist-server/src/server/wiki/search.js.map +1 -0
  244. package/dashboard/dist-server/src/server/wiki/stress.test.d.ts +1 -0
  245. package/dashboard/dist-server/src/server/wiki/stress.test.js +245 -0
  246. package/dashboard/dist-server/src/server/wiki/stress.test.js.map +1 -0
  247. package/dashboard/dist-server/src/server/wiki/virtual-wiki-adapters.d.ts +4 -0
  248. package/dashboard/dist-server/{dashboard/src/server/docs/virtual-doc-adapters.js → src/server/wiki/virtual-wiki-adapters.js} +4 -4
  249. package/dashboard/dist-server/src/server/wiki/virtual-wiki-adapters.js.map +1 -0
  250. package/dashboard/dist-server/src/server/wiki/wiki-indexer.d.ts +40 -0
  251. package/dashboard/dist-server/{dashboard/src/server/docs/doc-scanner.js → src/server/wiki/wiki-indexer.js} +86 -32
  252. package/dashboard/dist-server/src/server/wiki/wiki-indexer.js.map +1 -0
  253. package/dashboard/dist-server/src/server/wiki/wiki-indexer.test.d.ts +1 -0
  254. package/dashboard/dist-server/src/server/wiki/wiki-indexer.test.js +173 -0
  255. package/dashboard/dist-server/src/server/wiki/wiki-indexer.test.js.map +1 -0
  256. package/dashboard/dist-server/{dashboard/src/server/docs/doc-types.d.ts → src/server/wiki/wiki-types.d.ts} +18 -18
  257. package/dashboard/dist-server/src/server/wiki/wiki-types.js +2 -0
  258. package/dashboard/dist-server/src/server/wiki/wiki-types.js.map +1 -0
  259. package/dashboard/dist-server/src/server/wiki/writer-stress.test.d.ts +1 -0
  260. package/dashboard/dist-server/src/server/wiki/writer-stress.test.js +242 -0
  261. package/dashboard/dist-server/src/server/wiki/writer-stress.test.js.map +1 -0
  262. package/dashboard/dist-server/src/server/wiki/writer.d.ts +60 -0
  263. package/dashboard/dist-server/src/server/wiki/writer.js +272 -0
  264. package/dashboard/dist-server/src/server/wiki/writer.js.map +1 -0
  265. package/dashboard/dist-server/{server → src/server}/ws/handlers/agent-handler.d.ts +6 -2
  266. package/dashboard/dist-server/{server → src/server}/ws/handlers/agent-handler.js +30 -1
  267. package/dashboard/dist-server/src/server/ws/handlers/agent-handler.js.map +1 -0
  268. package/dashboard/dist-server/src/server/ws/handlers/agent-handler.test.d.ts +1 -0
  269. package/dashboard/dist-server/src/server/ws/handlers/agent-handler.test.js +68 -0
  270. package/dashboard/dist-server/src/server/ws/handlers/agent-handler.test.js.map +1 -0
  271. package/dashboard/dist-server/src/server/ws/handlers/commander-handler.js.map +1 -0
  272. package/dashboard/dist-server/src/server/ws/handlers/coordinate-handler.js.map +1 -0
  273. package/dashboard/dist-server/src/server/ws/handlers/execution-handler.js.map +1 -0
  274. package/dashboard/dist-server/src/server/ws/handlers/requirement-handler.js.map +1 -0
  275. package/dashboard/dist-server/src/server/ws/handlers/supervisor-handler.js.map +1 -0
  276. package/dashboard/dist-server/src/server/ws/handlers/supervisor-handler.test.d.ts +1 -0
  277. package/dashboard/dist-server/src/server/ws/handlers/supervisor-handler.test.js.map +1 -0
  278. package/dashboard/dist-server/src/server/ws/ws-handler.js.map +1 -0
  279. package/dashboard/dist-server/src/server/ws/ws-manager.js.map +1 -0
  280. package/dashboard/dist-server/src/shared/agent-types.d.ts +1 -0
  281. package/dashboard/dist-server/src/shared/agent-types.js +2 -0
  282. package/dashboard/dist-server/src/shared/agent-types.js.map +1 -0
  283. package/dashboard/dist-server/src/shared/collab-types.d.ts +42 -0
  284. package/dashboard/dist-server/src/shared/collab-types.js +19 -0
  285. package/dashboard/dist-server/src/shared/collab-types.js.map +1 -0
  286. package/dashboard/dist-server/src/shared/commander-types.js.map +1 -0
  287. package/dashboard/dist-server/{shared → src/shared}/constants.d.ts +18 -0
  288. package/dashboard/dist-server/{shared → src/shared}/constants.js +32 -0
  289. package/dashboard/dist-server/src/shared/constants.js.map +1 -0
  290. package/dashboard/dist-server/src/shared/constants.test.d.ts +1 -0
  291. package/dashboard/dist-server/src/shared/constants.test.js.map +1 -0
  292. package/dashboard/dist-server/src/shared/coordinate-types.js.map +1 -0
  293. package/dashboard/dist-server/src/shared/execution-types.js.map +1 -0
  294. package/dashboard/dist-server/src/shared/extension-types.js.map +1 -0
  295. package/dashboard/dist-server/src/shared/issue-types.js.map +1 -0
  296. package/dashboard/dist-server/src/shared/issue-types.test.d.ts +1 -0
  297. package/dashboard/dist-server/src/shared/issue-types.test.js.map +1 -0
  298. package/dashboard/dist-server/src/shared/journal-types.js.map +1 -0
  299. package/dashboard/dist-server/src/shared/learning-types.js.map +1 -0
  300. package/dashboard/dist-server/src/shared/linear-types.js.map +1 -0
  301. package/dashboard/dist-server/src/shared/requirement-types.js.map +1 -0
  302. package/dashboard/dist-server/src/shared/schedule-types.js.map +1 -0
  303. package/dashboard/dist-server/src/shared/team-types.js.map +1 -0
  304. package/dashboard/dist-server/{shared → src/shared}/types.d.ts +6 -2
  305. package/dashboard/dist-server/{shared → src/shared}/types.js.map +1 -1
  306. package/dashboard/dist-server/src/shared/utils.js.map +1 -0
  307. package/dashboard/dist-server/src/shared/utils.test.d.ts +1 -0
  308. package/dashboard/dist-server/src/shared/utils.test.js.map +1 -0
  309. package/dashboard/dist-server/src/shared/wave-types.js.map +1 -0
  310. package/dashboard/dist-server/{shared → src/shared}/ws-protocol.d.ts +9 -2
  311. package/dashboard/dist-server/src/shared/ws-protocol.js.map +1 -0
  312. package/dashboard/dist-server/src/types/index.d.ts +74 -0
  313. package/dashboard/dist-server/src/types/index.js +2 -0
  314. package/dashboard/dist-server/src/types/index.js.map +1 -0
  315. package/dashboard/package.json +1 -1
  316. package/dist/src/cli.js +3 -1
  317. package/dist/src/cli.js.map +1 -1
  318. package/dist/src/commands/hooks.d.ts.map +1 -1
  319. package/dist/src/commands/hooks.js +2 -1
  320. package/dist/src/commands/hooks.js.map +1 -1
  321. package/dist/src/commands/install-ui/ComponentGrid.d.ts.map +1 -1
  322. package/dist/src/commands/install-ui/ComponentGrid.js +6 -2
  323. package/dist/src/commands/install-ui/ComponentGrid.js.map +1 -1
  324. package/dist/src/commands/install-ui/GradientHeader.d.ts.map +1 -1
  325. package/dist/src/commands/install-ui/GradientHeader.js +1 -1
  326. package/dist/src/commands/install-ui/GradientHeader.js.map +1 -1
  327. package/dist/src/commands/install-ui/HooksConfig.d.ts.map +1 -1
  328. package/dist/src/commands/install-ui/HooksConfig.js +4 -3
  329. package/dist/src/commands/install-ui/HooksConfig.js.map +1 -1
  330. package/dist/src/commands/install-ui/InstallConfirm.js +2 -2
  331. package/dist/src/commands/install-ui/InstallConfirm.js.map +1 -1
  332. package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
  333. package/dist/src/commands/install-ui/InstallExecution.js +11 -10
  334. package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
  335. package/dist/src/commands/install-ui/InstallFlow.d.ts.map +1 -1
  336. package/dist/src/commands/install-ui/InstallFlow.js +18 -17
  337. package/dist/src/commands/install-ui/InstallFlow.js.map +1 -1
  338. package/dist/src/commands/install-ui/InstallHub.d.ts.map +1 -1
  339. package/dist/src/commands/install-ui/InstallHub.js +9 -9
  340. package/dist/src/commands/install-ui/InstallHub.js.map +1 -1
  341. package/dist/src/commands/install-ui/InstallResult.d.ts.map +1 -1
  342. package/dist/src/commands/install-ui/InstallResult.js +2 -1
  343. package/dist/src/commands/install-ui/InstallResult.js.map +1 -1
  344. package/dist/src/commands/install-ui/McpConfig.d.ts.map +1 -1
  345. package/dist/src/commands/install-ui/McpConfig.js +5 -2
  346. package/dist/src/commands/install-ui/McpConfig.js.map +1 -1
  347. package/dist/src/commands/install.d.ts.map +1 -1
  348. package/dist/src/commands/install.js +15 -8
  349. package/dist/src/commands/install.js.map +1 -1
  350. package/dist/src/commands/uninstall-ui/UninstallFlow.d.ts.map +1 -1
  351. package/dist/src/commands/uninstall-ui/UninstallFlow.js +21 -9
  352. package/dist/src/commands/uninstall-ui/UninstallFlow.js.map +1 -1
  353. package/dist/src/commands/uninstall.d.ts.map +1 -1
  354. package/dist/src/commands/uninstall.js +2 -1
  355. package/dist/src/commands/uninstall.js.map +1 -1
  356. package/dist/src/commands/update.d.ts +3 -0
  357. package/dist/src/commands/update.d.ts.map +1 -0
  358. package/dist/src/commands/update.js +140 -0
  359. package/dist/src/commands/update.js.map +1 -0
  360. package/dist/src/commands/view.d.ts.map +1 -1
  361. package/dist/src/commands/view.js +4 -3
  362. package/dist/src/commands/view.js.map +1 -1
  363. package/dist/src/config/template-discovery.d.ts.map +1 -1
  364. package/dist/src/config/template-discovery.js +2 -1
  365. package/dist/src/config/template-discovery.js.map +1 -1
  366. package/dist/src/i18n/detect.d.ts +13 -0
  367. package/dist/src/i18n/detect.d.ts.map +1 -0
  368. package/dist/src/i18n/detect.js +38 -0
  369. package/dist/src/i18n/detect.js.map +1 -0
  370. package/dist/src/i18n/index.d.ts +4 -0
  371. package/dist/src/i18n/index.d.ts.map +1 -0
  372. package/dist/src/i18n/index.js +14 -0
  373. package/dist/src/i18n/index.js.map +1 -0
  374. package/dist/src/i18n/locales/en.d.ts +3 -0
  375. package/dist/src/i18n/locales/en.d.ts.map +1 -0
  376. package/dist/src/i18n/locales/en.js +145 -0
  377. package/dist/src/i18n/locales/en.js.map +1 -0
  378. package/dist/src/i18n/locales/zh.d.ts +3 -0
  379. package/dist/src/i18n/locales/zh.d.ts.map +1 -0
  380. package/dist/src/i18n/locales/zh.js +145 -0
  381. package/dist/src/i18n/locales/zh.js.map +1 -0
  382. package/dist/src/i18n/types.d.ts +119 -0
  383. package/dist/src/i18n/types.d.ts.map +1 -0
  384. package/dist/src/i18n/types.js +5 -0
  385. package/dist/src/i18n/types.js.map +1 -0
  386. package/dist/src/utils/get-version.d.ts +6 -0
  387. package/dist/src/utils/get-version.d.ts.map +1 -0
  388. package/dist/src/utils/get-version.js +21 -0
  389. package/dist/src/utils/get-version.js.map +1 -0
  390. package/package.json +1 -1
  391. package/shared/agent-types.d.ts +145 -0
  392. package/shared/agent-types.js +8 -0
  393. package/shared/agent-types.js.map +1 -0
  394. package/dashboard/dist/assets/ArtifactsPage-CfkfWkXr.js +0 -3
  395. package/dashboard/dist/assets/ChatInput-DMUm4jhn.js +0 -67
  396. package/dashboard/dist/assets/ChatPage-CPWivYoS.js +0 -13
  397. package/dashboard/dist/assets/McpPage-B-LmhlGn.js +0 -16
  398. package/dashboard/dist/assets/RequirementBoardPage-DoNbM5xS.js +0 -16
  399. package/dashboard/dist/assets/TeamsPage-BLXi7emJ.js +0 -1
  400. package/dashboard/dist/assets/TreeBrowser-BF-vEawe.js +0 -6
  401. package/dashboard/dist/assets/en-C8KOT1y5.js +0 -1
  402. package/dashboard/dist/assets/index-BegaTjR7.css +0 -1
  403. package/dashboard/dist/assets/index-_5uKnGLN.js +0 -216
  404. package/dashboard/dist/assets/table-BAom8rqt.js +0 -6
  405. package/dashboard/dist/assets/x-B8Y1iNhN.js +0 -6
  406. package/dashboard/dist/assets/zh-CN-Bss6VKAV.js +0 -1
  407. package/dashboard/dist-server/dashboard/src/server/docs/doc-scanner.d.ts +0 -31
  408. package/dashboard/dist-server/dashboard/src/server/docs/doc-scanner.js.map +0 -1
  409. package/dashboard/dist-server/dashboard/src/server/docs/doc-scanner.test.js +0 -184
  410. package/dashboard/dist-server/dashboard/src/server/docs/doc-scanner.test.js.map +0 -1
  411. package/dashboard/dist-server/dashboard/src/server/docs/doc-types.js +0 -2
  412. package/dashboard/dist-server/dashboard/src/server/docs/doc-types.js.map +0 -1
  413. package/dashboard/dist-server/dashboard/src/server/docs/frontmatter-util.js.map +0 -1
  414. package/dashboard/dist-server/dashboard/src/server/docs/virtual-doc-adapters.d.ts +0 -4
  415. package/dashboard/dist-server/dashboard/src/server/docs/virtual-doc-adapters.js.map +0 -1
  416. package/dashboard/dist-server/dashboard/src/server/routes/docs.d.ts +0 -13
  417. package/dashboard/dist-server/dashboard/src/server/routes/docs.js +0 -108
  418. package/dashboard/dist-server/dashboard/src/server/routes/docs.js.map +0 -1
  419. package/dashboard/dist-server/server/agents/agent-manager.js.map +0 -1
  420. package/dashboard/dist-server/server/agents/agent-manager.test.js.map +0 -1
  421. package/dashboard/dist-server/server/agents/agent-sdk-adapter.js.map +0 -1
  422. package/dashboard/dist-server/server/agents/base-adapter.js.map +0 -1
  423. package/dashboard/dist-server/server/agents/claude-code-adapter.js.map +0 -1
  424. package/dashboard/dist-server/server/agents/codex-app-server-adapter.js.map +0 -1
  425. package/dashboard/dist-server/server/agents/codex-cli-adapter.js.map +0 -1
  426. package/dashboard/dist-server/server/agents/entry-normalizer.js.map +0 -1
  427. package/dashboard/dist-server/server/agents/entry-normalizer.test.js.map +0 -1
  428. package/dashboard/dist-server/server/agents/env-cleanup.js.map +0 -1
  429. package/dashboard/dist-server/server/agents/env-file-loader.js.map +0 -1
  430. package/dashboard/dist-server/server/agents/opencode-adapter.js.map +0 -1
  431. package/dashboard/dist-server/server/agents/sdk-message-translator.js.map +0 -1
  432. package/dashboard/dist-server/server/agents/sdk-message-translator.test.js.map +0 -1
  433. package/dashboard/dist-server/server/agents/stream-json-adapter.js.map +0 -1
  434. package/dashboard/dist-server/server/agents/stream-monitor.js.map +0 -1
  435. package/dashboard/dist-server/server/agents/tools/issue-mcp-server.js.map +0 -1
  436. package/dashboard/dist-server/server/agents/tools/issue-mcp-server.test.js.map +0 -1
  437. package/dashboard/dist-server/server/commander/commander-agent.js.map +0 -1
  438. package/dashboard/dist-server/server/commander/commander-agent.test.js.map +0 -1
  439. package/dashboard/dist-server/server/commander/commander-config.js.map +0 -1
  440. package/dashboard/dist-server/server/commander/commander-config.test.js.map +0 -1
  441. package/dashboard/dist-server/server/commander/commander-prompts.js.map +0 -1
  442. package/dashboard/dist-server/server/commander/commander-prompts.test.js.map +0 -1
  443. package/dashboard/dist-server/server/commander/commander-routes.js.map +0 -1
  444. package/dashboard/dist-server/server/commander/commander-routes.test.js.map +0 -1
  445. package/dashboard/dist-server/server/config.js.map +0 -1
  446. package/dashboard/dist-server/server/coordinator/agents/intent-classifier-agent.d.ts +0 -5
  447. package/dashboard/dist-server/server/coordinator/agents/intent-classifier-agent.js +0 -97
  448. package/dashboard/dist-server/server/coordinator/agents/intent-classifier-agent.js.map +0 -1
  449. package/dashboard/dist-server/server/coordinator/agents/quality-reviewer-agent.js.map +0 -1
  450. package/dashboard/dist-server/server/coordinator/agents/state-analyzer-agent.d.ts +0 -10
  451. package/dashboard/dist-server/server/coordinator/agents/state-analyzer-agent.js +0 -112
  452. package/dashboard/dist-server/server/coordinator/agents/state-analyzer-agent.js.map +0 -1
  453. package/dashboard/dist-server/server/coordinator/chain-map.js.map +0 -1
  454. package/dashboard/dist-server/server/coordinator/chain-map.test.js.map +0 -1
  455. package/dashboard/dist-server/server/coordinator/coordinate-runner.d.ts +0 -41
  456. package/dashboard/dist-server/server/coordinator/coordinate-runner.js +0 -511
  457. package/dashboard/dist-server/server/coordinator/coordinate-runner.js.map +0 -1
  458. package/dashboard/dist-server/server/coordinator/coordinator-routes.js.map +0 -1
  459. package/dashboard/dist-server/server/coordinator/coordinator-routes.test.js.map +0 -1
  460. package/dashboard/dist-server/server/coordinator/dashboard-executor.js.map +0 -1
  461. package/dashboard/dist-server/server/coordinator/dashboard-step-analyzer.js.map +0 -1
  462. package/dashboard/dist-server/server/coordinator/graph-walker-factory.js.map +0 -1
  463. package/dashboard/dist-server/server/coordinator/prompts/index.js.map +0 -1
  464. package/dashboard/dist-server/server/coordinator/tools/workflow-mcp-server.js.map +0 -1
  465. package/dashboard/dist-server/server/coordinator/types.js.map +0 -1
  466. package/dashboard/dist-server/server/coordinator/walker-event-bridge.js.map +0 -1
  467. package/dashboard/dist-server/server/coordinator/workflow-coordinator.js.map +0 -1
  468. package/dashboard/dist-server/server/coordinator/workflow-coordinator.test.js.map +0 -1
  469. package/dashboard/dist-server/server/execution/dispatch-strategy.js.map +0 -1
  470. package/dashboard/dist-server/server/execution/execution-journal.js.map +0 -1
  471. package/dashboard/dist-server/server/execution/execution-scheduler.js.map +0 -1
  472. package/dashboard/dist-server/server/execution/execution-scheduler.test.js.map +0 -1
  473. package/dashboard/dist-server/server/execution/strategies/commander-strategy.js.map +0 -1
  474. package/dashboard/dist-server/server/execution/strategies/priority-strategy.js.map +0 -1
  475. package/dashboard/dist-server/server/execution/strategies/smart-strategy.js.map +0 -1
  476. package/dashboard/dist-server/server/execution/wave-executor.js.map +0 -1
  477. package/dashboard/dist-server/server/execution/workspace-manager.js.map +0 -1
  478. package/dashboard/dist-server/server/index.js.map +0 -1
  479. package/dashboard/dist-server/server/observability/observability-routes.js.map +0 -1
  480. package/dashboard/dist-server/server/observability/observability-service.js.map +0 -1
  481. package/dashboard/dist-server/server/prompt/builders/assessment-builder.js.map +0 -1
  482. package/dashboard/dist-server/server/prompt/builders/decompose-builder.js.map +0 -1
  483. package/dashboard/dist-server/server/prompt/builders/direct-builder.js.map +0 -1
  484. package/dashboard/dist-server/server/prompt/builders/skill-builder.js.map +0 -1
  485. package/dashboard/dist-server/server/prompt/builders/template-builder.js.map +0 -1
  486. package/dashboard/dist-server/server/prompt/prompt-builder.js.map +0 -1
  487. package/dashboard/dist-server/server/prompt/prompt-registry.js.map +0 -1
  488. package/dashboard/dist-server/server/requirement/requirement-expander.js.map +0 -1
  489. package/dashboard/dist-server/server/requirement/requirement-prompts.js.map +0 -1
  490. package/dashboard/dist-server/server/routes/agents.js.map +0 -1
  491. package/dashboard/dist-server/server/routes/artifacts.js.map +0 -1
  492. package/dashboard/dist-server/server/routes/board-state.integration.test.js.map +0 -1
  493. package/dashboard/dist-server/server/routes/board.js.map +0 -1
  494. package/dashboard/dist-server/server/routes/cli-history.js.map +0 -1
  495. package/dashboard/dist-server/server/routes/events.js.map +0 -1
  496. package/dashboard/dist-server/server/routes/events.test.js.map +0 -1
  497. package/dashboard/dist-server/server/routes/execution.integration.test.js.map +0 -1
  498. package/dashboard/dist-server/server/routes/execution.js.map +0 -1
  499. package/dashboard/dist-server/server/routes/health.js.map +0 -1
  500. package/dashboard/dist-server/server/routes/index.js.map +0 -1
  501. package/dashboard/dist-server/server/routes/install-utils.js.map +0 -1
  502. package/dashboard/dist-server/server/routes/install.js.map +0 -1
  503. package/dashboard/dist-server/server/routes/issues.js.map +0 -1
  504. package/dashboard/dist-server/server/routes/issues.test.js.map +0 -1
  505. package/dashboard/dist-server/server/routes/linear.js.map +0 -1
  506. package/dashboard/dist-server/server/routes/mcp-templates-store.js.map +0 -1
  507. package/dashboard/dist-server/server/routes/mcp.js.map +0 -1
  508. package/dashboard/dist-server/server/routes/phases.js.map +0 -1
  509. package/dashboard/dist-server/server/routes/requirements.js.map +0 -1
  510. package/dashboard/dist-server/server/routes/scratch.js.map +0 -1
  511. package/dashboard/dist-server/server/routes/settings.js.map +0 -1
  512. package/dashboard/dist-server/server/routes/specs.integration.test.js.map +0 -1
  513. package/dashboard/dist-server/server/routes/specs.js.map +0 -1
  514. package/dashboard/dist-server/server/routes/supervisor.js.map +0 -1
  515. package/dashboard/dist-server/server/routes/supervisor.test.js.map +0 -1
  516. package/dashboard/dist-server/server/routes/teams.js.map +0 -1
  517. package/dashboard/dist-server/server/routes/workspace.js.map +0 -1
  518. package/dashboard/dist-server/server/sse/sse-hub.js.map +0 -1
  519. package/dashboard/dist-server/server/sse/sse-hub.test.js.map +0 -1
  520. package/dashboard/dist-server/server/state/event-bus.js.map +0 -1
  521. package/dashboard/dist-server/server/state/file-reader.js.map +0 -1
  522. package/dashboard/dist-server/server/state/fs-watcher.js.map +0 -1
  523. package/dashboard/dist-server/server/state/state-manager.js.map +0 -1
  524. package/dashboard/dist-server/server/state/state-manager.test.js.map +0 -1
  525. package/dashboard/dist-server/server/supervisor/extension-manager.js.map +0 -1
  526. package/dashboard/dist-server/server/supervisor/extension-manager.test.js.map +0 -1
  527. package/dashboard/dist-server/server/supervisor/self-learning-service.js.map +0 -1
  528. package/dashboard/dist-server/server/supervisor/self-learning-service.test.js.map +0 -1
  529. package/dashboard/dist-server/server/supervisor/supervisor.integration.test.js.map +0 -1
  530. package/dashboard/dist-server/server/supervisor/task-scheduler-service.js.map +0 -1
  531. package/dashboard/dist-server/server/supervisor/task-scheduler-service.test.js.map +0 -1
  532. package/dashboard/dist-server/server/utils/issue-store.js.map +0 -1
  533. package/dashboard/dist-server/server/utils/issue-store.test.js.map +0 -1
  534. package/dashboard/dist-server/server/ws/handlers/agent-handler.js.map +0 -1
  535. package/dashboard/dist-server/server/ws/handlers/commander-handler.js.map +0 -1
  536. package/dashboard/dist-server/server/ws/handlers/coordinate-handler.js.map +0 -1
  537. package/dashboard/dist-server/server/ws/handlers/execution-handler.js.map +0 -1
  538. package/dashboard/dist-server/server/ws/handlers/requirement-handler.js.map +0 -1
  539. package/dashboard/dist-server/server/ws/handlers/supervisor-handler.js.map +0 -1
  540. package/dashboard/dist-server/server/ws/handlers/supervisor-handler.test.js.map +0 -1
  541. package/dashboard/dist-server/server/ws/ws-handler.js.map +0 -1
  542. package/dashboard/dist-server/server/ws/ws-manager.js.map +0 -1
  543. package/dashboard/dist-server/shared/commander-types.js.map +0 -1
  544. package/dashboard/dist-server/shared/constants.js.map +0 -1
  545. package/dashboard/dist-server/shared/constants.test.js.map +0 -1
  546. package/dashboard/dist-server/shared/coordinate-types.js.map +0 -1
  547. package/dashboard/dist-server/shared/execution-types.js.map +0 -1
  548. package/dashboard/dist-server/shared/extension-types.js.map +0 -1
  549. package/dashboard/dist-server/shared/issue-types.js.map +0 -1
  550. package/dashboard/dist-server/shared/issue-types.test.js.map +0 -1
  551. package/dashboard/dist-server/shared/journal-types.js.map +0 -1
  552. package/dashboard/dist-server/shared/learning-types.js.map +0 -1
  553. package/dashboard/dist-server/shared/linear-types.js.map +0 -1
  554. package/dashboard/dist-server/shared/requirement-types.js.map +0 -1
  555. package/dashboard/dist-server/shared/schedule-types.js.map +0 -1
  556. package/dashboard/dist-server/shared/team-types.js.map +0 -1
  557. package/dashboard/dist-server/shared/utils.js.map +0 -1
  558. package/dashboard/dist-server/shared/utils.test.js.map +0 -1
  559. package/dashboard/dist-server/shared/wave-types.js.map +0 -1
  560. package/dashboard/dist-server/shared/ws-protocol.js.map +0 -1
  561. /package/dashboard/dist-server/{server → src/server}/agents/agent-manager.test.d.ts +0 -0
  562. /package/dashboard/dist-server/{server → src/server}/agents/agent-manager.test.js +0 -0
  563. /package/dashboard/dist-server/{server → src/server}/agents/agent-sdk-adapter.d.ts +0 -0
  564. /package/dashboard/dist-server/{server → src/server}/agents/agent-sdk-adapter.js +0 -0
  565. /package/dashboard/dist-server/{dashboard/src/server/docs/doc-scanner.test.d.ts → src/server/agents/claude-code-adapter.test.d.ts} +0 -0
  566. /package/dashboard/dist-server/{server → src/server}/agents/codex-cli-adapter.d.ts +0 -0
  567. /package/dashboard/dist-server/{server → src/server}/agents/codex-cli-adapter.js +0 -0
  568. /package/dashboard/dist-server/{server/agents/entry-normalizer.test.d.ts → src/server/agents/delegate-broker-monitor.test.d.ts} +0 -0
  569. /package/dashboard/dist-server/{server → src/server}/agents/entry-normalizer.d.ts +0 -0
  570. /package/dashboard/dist-server/{server → src/server}/agents/entry-normalizer.js +0 -0
  571. /package/dashboard/dist-server/{server/agents/sdk-message-translator.test.d.ts → src/server/agents/entry-normalizer.test.d.ts} +0 -0
  572. /package/dashboard/dist-server/{server → src/server}/agents/entry-normalizer.test.js +0 -0
  573. /package/dashboard/dist-server/{server → src/server}/agents/env-cleanup.d.ts +0 -0
  574. /package/dashboard/dist-server/{server → src/server}/agents/env-cleanup.js +0 -0
  575. /package/dashboard/dist-server/{server → src/server}/agents/env-file-loader.d.ts +0 -0
  576. /package/dashboard/dist-server/{server → src/server}/agents/env-file-loader.js +0 -0
  577. /package/dashboard/dist-server/{server/agents/tools/issue-mcp-server.test.d.ts → src/server/agents/gemini-a2a-adapter.test.d.ts} +0 -0
  578. /package/dashboard/dist-server/{server → src/server}/agents/opencode-adapter.d.ts +0 -0
  579. /package/dashboard/dist-server/{server → src/server}/agents/opencode-adapter.js +0 -0
  580. /package/dashboard/dist-server/{server → src/server}/agents/sdk-message-translator.d.ts +0 -0
  581. /package/dashboard/dist-server/{server → src/server}/agents/sdk-message-translator.js +0 -0
  582. /package/dashboard/dist-server/{server/commander/commander-agent.test.d.ts → src/server/agents/sdk-message-translator.test.d.ts} +0 -0
  583. /package/dashboard/dist-server/{server → src/server}/agents/sdk-message-translator.test.js +0 -0
  584. /package/dashboard/dist-server/{server → src/server}/agents/stream-json-adapter.d.ts +0 -0
  585. /package/dashboard/dist-server/{server → src/server}/agents/stream-json-adapter.js +0 -0
  586. /package/dashboard/dist-server/{server → src/server}/agents/stream-monitor.d.ts +0 -0
  587. /package/dashboard/dist-server/{server → src/server}/agents/stream-monitor.js +0 -0
  588. /package/dashboard/dist-server/{server → src/server}/agents/tools/issue-mcp-server.d.ts +0 -0
  589. /package/dashboard/dist-server/{server → src/server}/agents/tools/issue-mcp-server.js +0 -0
  590. /package/dashboard/dist-server/{server/commander/commander-config.test.d.ts → src/server/agents/tools/issue-mcp-server.test.d.ts} +0 -0
  591. /package/dashboard/dist-server/{server → src/server}/agents/tools/issue-mcp-server.test.js +0 -0
  592. /package/dashboard/dist-server/{server → src/server}/commander/commander-agent.d.ts +0 -0
  593. /package/dashboard/dist-server/{server → src/server}/commander/commander-agent.js +0 -0
  594. /package/dashboard/dist-server/{server/commander/commander-prompts.test.d.ts → src/server/commander/commander-agent.test.d.ts} +0 -0
  595. /package/dashboard/dist-server/{server → src/server}/commander/commander-agent.test.js +0 -0
  596. /package/dashboard/dist-server/{server → src/server}/commander/commander-config.d.ts +0 -0
  597. /package/dashboard/dist-server/{server → src/server}/commander/commander-config.js +0 -0
  598. /package/dashboard/dist-server/{server/commander/commander-routes.test.d.ts → src/server/commander/commander-config.test.d.ts} +0 -0
  599. /package/dashboard/dist-server/{server → src/server}/commander/commander-config.test.js +0 -0
  600. /package/dashboard/dist-server/{server → src/server}/commander/commander-prompts.d.ts +0 -0
  601. /package/dashboard/dist-server/{server → src/server}/commander/commander-prompts.js +0 -0
  602. /package/dashboard/dist-server/{server/coordinator/chain-map.test.d.ts → src/server/commander/commander-prompts.test.d.ts} +0 -0
  603. /package/dashboard/dist-server/{server → src/server}/commander/commander-prompts.test.js +0 -0
  604. /package/dashboard/dist-server/{server → src/server}/commander/commander-routes.d.ts +0 -0
  605. /package/dashboard/dist-server/{server → src/server}/commander/commander-routes.js +0 -0
  606. /package/dashboard/dist-server/{server/coordinator/coordinator-routes.test.d.ts → src/server/commander/commander-routes.test.d.ts} +0 -0
  607. /package/dashboard/dist-server/{server → src/server}/commander/commander-routes.test.js +0 -0
  608. /package/dashboard/dist-server/{server → src/server}/config.d.ts +0 -0
  609. /package/dashboard/dist-server/{server → src/server}/config.js +0 -0
  610. /package/dashboard/dist-server/{server → src/server}/coordinator/agents/quality-reviewer-agent.d.ts +0 -0
  611. /package/dashboard/dist-server/{server → src/server}/coordinator/agents/quality-reviewer-agent.js +0 -0
  612. /package/dashboard/dist-server/{server → src/server}/coordinator/chain-map.d.ts +0 -0
  613. /package/dashboard/dist-server/{server → src/server}/coordinator/chain-map.js +0 -0
  614. /package/dashboard/dist-server/{server/coordinator/workflow-coordinator.test.d.ts → src/server/coordinator/chain-map.test.d.ts} +0 -0
  615. /package/dashboard/dist-server/{server → src/server}/coordinator/chain-map.test.js +0 -0
  616. /package/dashboard/dist-server/{server → src/server}/coordinator/coordinator-routes.d.ts +0 -0
  617. /package/dashboard/dist-server/{server → src/server}/coordinator/coordinator-routes.js +0 -0
  618. /package/dashboard/dist-server/{server/execution/execution-scheduler.test.d.ts → src/server/coordinator/coordinator-routes.test.d.ts} +0 -0
  619. /package/dashboard/dist-server/{server → src/server}/coordinator/coordinator-routes.test.js +0 -0
  620. /package/dashboard/dist-server/{server → src/server}/coordinator/dashboard-executor.d.ts +0 -0
  621. /package/dashboard/dist-server/{server → src/server}/coordinator/dashboard-executor.js +0 -0
  622. /package/dashboard/dist-server/{server → src/server}/coordinator/dashboard-step-analyzer.d.ts +0 -0
  623. /package/dashboard/dist-server/{server → src/server}/coordinator/dashboard-step-analyzer.js +0 -0
  624. /package/dashboard/dist-server/{server → src/server}/coordinator/graph-walker-factory.d.ts +0 -0
  625. /package/dashboard/dist-server/{server → src/server}/coordinator/graph-walker-factory.js +0 -0
  626. /package/dashboard/dist-server/{server → src/server}/coordinator/prompts/index.d.ts +0 -0
  627. /package/dashboard/dist-server/{server → src/server}/coordinator/prompts/index.js +0 -0
  628. /package/dashboard/dist-server/{server → src/server}/coordinator/tools/workflow-mcp-server.d.ts +0 -0
  629. /package/dashboard/dist-server/{server → src/server}/coordinator/tools/workflow-mcp-server.js +0 -0
  630. /package/dashboard/dist-server/{server → src/server}/coordinator/types.d.ts +0 -0
  631. /package/dashboard/dist-server/{server → src/server}/coordinator/types.js +0 -0
  632. /package/dashboard/dist-server/{server → src/server}/coordinator/walker-event-bridge.d.ts +0 -0
  633. /package/dashboard/dist-server/{server → src/server}/coordinator/walker-event-bridge.js +0 -0
  634. /package/dashboard/dist-server/{server → src/server}/coordinator/workflow-coordinator.d.ts +0 -0
  635. /package/dashboard/dist-server/{server → src/server}/coordinator/workflow-coordinator.js +0 -0
  636. /package/dashboard/dist-server/{server/index.d.ts → src/server/coordinator/workflow-coordinator.test.d.ts} +0 -0
  637. /package/dashboard/dist-server/{server → src/server}/coordinator/workflow-coordinator.test.js +0 -0
  638. /package/dashboard/dist-server/{server → src/server}/execution/dispatch-strategy.d.ts +0 -0
  639. /package/dashboard/dist-server/{server → src/server}/execution/dispatch-strategy.js +0 -0
  640. /package/dashboard/dist-server/{server → src/server}/execution/execution-journal.d.ts +0 -0
  641. /package/dashboard/dist-server/{server → src/server}/execution/execution-journal.js +0 -0
  642. /package/dashboard/dist-server/{server → src/server}/execution/execution-scheduler.d.ts +0 -0
  643. /package/dashboard/dist-server/{server/routes/board-state.integration.test.d.ts → src/server/execution/execution-scheduler.test.d.ts} +0 -0
  644. /package/dashboard/dist-server/{server → src/server}/execution/execution-scheduler.test.js +0 -0
  645. /package/dashboard/dist-server/{server → src/server}/execution/strategies/commander-strategy.d.ts +0 -0
  646. /package/dashboard/dist-server/{server → src/server}/execution/strategies/commander-strategy.js +0 -0
  647. /package/dashboard/dist-server/{server → src/server}/execution/strategies/priority-strategy.d.ts +0 -0
  648. /package/dashboard/dist-server/{server → src/server}/execution/strategies/priority-strategy.js +0 -0
  649. /package/dashboard/dist-server/{server → src/server}/execution/strategies/smart-strategy.d.ts +0 -0
  650. /package/dashboard/dist-server/{server → src/server}/execution/strategies/smart-strategy.js +0 -0
  651. /package/dashboard/dist-server/{server → src/server}/execution/wave-executor.d.ts +0 -0
  652. /package/dashboard/dist-server/{server → src/server}/execution/wave-executor.js +0 -0
  653. /package/dashboard/dist-server/{server → src/server}/execution/workspace-manager.d.ts +0 -0
  654. /package/dashboard/dist-server/{server → src/server}/execution/workspace-manager.js +0 -0
  655. /package/dashboard/dist-server/{server/routes/events.test.d.ts → src/server/index.d.ts} +0 -0
  656. /package/dashboard/dist-server/{server → src/server}/observability/observability-routes.d.ts +0 -0
  657. /package/dashboard/dist-server/{server → src/server}/observability/observability-routes.js +0 -0
  658. /package/dashboard/dist-server/{server → src/server}/observability/observability-service.d.ts +0 -0
  659. /package/dashboard/dist-server/{server → src/server}/observability/observability-service.js +0 -0
  660. /package/dashboard/dist-server/{server → src/server}/prompt/builders/assessment-builder.d.ts +0 -0
  661. /package/dashboard/dist-server/{server → src/server}/prompt/builders/assessment-builder.js +0 -0
  662. /package/dashboard/dist-server/{server → src/server}/prompt/builders/decompose-builder.d.ts +0 -0
  663. /package/dashboard/dist-server/{server → src/server}/prompt/builders/decompose-builder.js +0 -0
  664. /package/dashboard/dist-server/{server → src/server}/prompt/builders/direct-builder.d.ts +0 -0
  665. /package/dashboard/dist-server/{server → src/server}/prompt/builders/direct-builder.js +0 -0
  666. /package/dashboard/dist-server/{server → src/server}/prompt/builders/skill-builder.d.ts +0 -0
  667. /package/dashboard/dist-server/{server → src/server}/prompt/builders/skill-builder.js +0 -0
  668. /package/dashboard/dist-server/{server → src/server}/prompt/builders/template-builder.d.ts +0 -0
  669. /package/dashboard/dist-server/{server → src/server}/prompt/builders/template-builder.js +0 -0
  670. /package/dashboard/dist-server/{server → src/server}/prompt/prompt-builder.d.ts +0 -0
  671. /package/dashboard/dist-server/{server → src/server}/prompt/prompt-builder.js +0 -0
  672. /package/dashboard/dist-server/{server → src/server}/prompt/prompt-registry.d.ts +0 -0
  673. /package/dashboard/dist-server/{server → src/server}/prompt/prompt-registry.js +0 -0
  674. /package/dashboard/dist-server/{server → src/server}/requirement/requirement-expander.d.ts +0 -0
  675. /package/dashboard/dist-server/{server → src/server}/requirement/requirement-expander.js +0 -0
  676. /package/dashboard/dist-server/{server → src/server}/requirement/requirement-prompts.d.ts +0 -0
  677. /package/dashboard/dist-server/{server → src/server}/requirement/requirement-prompts.js +0 -0
  678. /package/dashboard/dist-server/{server → src/server}/routes/agents.d.ts +0 -0
  679. /package/dashboard/dist-server/{server → src/server}/routes/agents.js +0 -0
  680. /package/dashboard/dist-server/{server → src/server}/routes/artifacts.d.ts +0 -0
  681. /package/dashboard/dist-server/{server → src/server}/routes/artifacts.js +0 -0
  682. /package/dashboard/dist-server/{server/routes/execution.integration.test.d.ts → src/server/routes/board-state.integration.test.d.ts} +0 -0
  683. /package/dashboard/dist-server/{server → src/server}/routes/board-state.integration.test.js +0 -0
  684. /package/dashboard/dist-server/{server → src/server}/routes/board.d.ts +0 -0
  685. /package/dashboard/dist-server/{server → src/server}/routes/board.js +0 -0
  686. /package/dashboard/dist-server/{server/routes/issues.test.d.ts → src/server/routes/cli-history.test.d.ts} +0 -0
  687. /package/dashboard/dist-server/{server → src/server}/routes/events.d.ts +0 -0
  688. /package/dashboard/dist-server/{server → src/server}/routes/events.js +0 -0
  689. /package/dashboard/dist-server/{server/routes/specs.integration.test.d.ts → src/server/routes/events.test.d.ts} +0 -0
  690. /package/dashboard/dist-server/{server → src/server}/routes/events.test.js +0 -0
  691. /package/dashboard/dist-server/{server → src/server}/routes/execution.d.ts +0 -0
  692. /package/dashboard/dist-server/{server/routes/supervisor.test.d.ts → src/server/routes/execution.integration.test.d.ts} +0 -0
  693. /package/dashboard/dist-server/{server → src/server}/routes/execution.integration.test.js +0 -0
  694. /package/dashboard/dist-server/{server → src/server}/routes/execution.js +0 -0
  695. /package/dashboard/dist-server/{server → src/server}/routes/health.d.ts +0 -0
  696. /package/dashboard/dist-server/{server → src/server}/routes/health.js +0 -0
  697. /package/dashboard/dist-server/{server → src/server}/routes/index.d.ts +0 -0
  698. /package/dashboard/dist-server/{server → src/server}/routes/install-utils.d.ts +0 -0
  699. /package/dashboard/dist-server/{server → src/server}/routes/install-utils.js +0 -0
  700. /package/dashboard/dist-server/{server → src/server}/routes/install.d.ts +0 -0
  701. /package/dashboard/dist-server/{server → src/server}/routes/install.js +0 -0
  702. /package/dashboard/dist-server/{server → src/server}/routes/issues.d.ts +0 -0
  703. /package/dashboard/dist-server/{server → src/server}/routes/issues.js +0 -0
  704. /package/dashboard/dist-server/{server/sse/sse-hub.test.d.ts → src/server/routes/issues.test.d.ts} +0 -0
  705. /package/dashboard/dist-server/{server → src/server}/routes/issues.test.js +0 -0
  706. /package/dashboard/dist-server/{server → src/server}/routes/linear.d.ts +0 -0
  707. /package/dashboard/dist-server/{server → src/server}/routes/linear.js +0 -0
  708. /package/dashboard/dist-server/{server → src/server}/routes/mcp-templates-store.d.ts +0 -0
  709. /package/dashboard/dist-server/{server → src/server}/routes/mcp-templates-store.js +0 -0
  710. /package/dashboard/dist-server/{server → src/server}/routes/mcp.d.ts +0 -0
  711. /package/dashboard/dist-server/{server → src/server}/routes/mcp.js +0 -0
  712. /package/dashboard/dist-server/{server → src/server}/routes/phases.d.ts +0 -0
  713. /package/dashboard/dist-server/{server → src/server}/routes/phases.js +0 -0
  714. /package/dashboard/dist-server/{server → src/server}/routes/requirements.d.ts +0 -0
  715. /package/dashboard/dist-server/{server → src/server}/routes/requirements.js +0 -0
  716. /package/dashboard/dist-server/{server → src/server}/routes/scratch.d.ts +0 -0
  717. /package/dashboard/dist-server/{server → src/server}/routes/scratch.js +0 -0
  718. /package/dashboard/dist-server/{server → src/server}/routes/settings.d.ts +0 -0
  719. /package/dashboard/dist-server/{server → src/server}/routes/settings.js +0 -0
  720. /package/dashboard/dist-server/{server/state/state-manager.test.d.ts → src/server/routes/specs.integration.test.d.ts} +0 -0
  721. /package/dashboard/dist-server/{server → src/server}/routes/specs.integration.test.js +0 -0
  722. /package/dashboard/dist-server/{server → src/server}/routes/supervisor.d.ts +0 -0
  723. /package/dashboard/dist-server/{server → src/server}/routes/supervisor.js +0 -0
  724. /package/dashboard/dist-server/{server/supervisor/extension-manager.test.d.ts → src/server/routes/supervisor.test.d.ts} +0 -0
  725. /package/dashboard/dist-server/{server → src/server}/routes/supervisor.test.js +0 -0
  726. /package/dashboard/dist-server/{server → src/server}/routes/teams.d.ts +0 -0
  727. /package/dashboard/dist-server/{server → src/server}/routes/teams.js +0 -0
  728. /package/dashboard/dist-server/{server/supervisor/self-learning-service.test.d.ts → src/server/routes/wiki.integration.test.d.ts} +0 -0
  729. /package/dashboard/dist-server/{server → src/server}/routes/workspace.d.ts +0 -0
  730. /package/dashboard/dist-server/{server → src/server}/routes/workspace.js +0 -0
  731. /package/dashboard/dist-server/{server → src/server}/sse/sse-hub.d.ts +0 -0
  732. /package/dashboard/dist-server/{server → src/server}/sse/sse-hub.js +0 -0
  733. /package/dashboard/dist-server/{server/supervisor/supervisor.integration.test.d.ts → src/server/sse/sse-hub.test.d.ts} +0 -0
  734. /package/dashboard/dist-server/{server → src/server}/sse/sse-hub.test.js +0 -0
  735. /package/dashboard/dist-server/{server → src/server}/state/file-reader.d.ts +0 -0
  736. /package/dashboard/dist-server/{server → src/server}/state/file-reader.js +0 -0
  737. /package/dashboard/dist-server/{server → src/server}/state/fs-watcher.d.ts +0 -0
  738. /package/dashboard/dist-server/{server → src/server}/state/state-manager.d.ts +0 -0
  739. /package/dashboard/dist-server/{server/supervisor/task-scheduler-service.test.d.ts → src/server/state/state-manager.test.d.ts} +0 -0
  740. /package/dashboard/dist-server/{server → src/server}/state/state-manager.test.js +0 -0
  741. /package/dashboard/dist-server/{server → src/server}/supervisor/extension-manager.d.ts +0 -0
  742. /package/dashboard/dist-server/{server → src/server}/supervisor/extension-manager.js +0 -0
  743. /package/dashboard/dist-server/{server/utils/issue-store.test.d.ts → src/server/supervisor/extension-manager.test.d.ts} +0 -0
  744. /package/dashboard/dist-server/{server → src/server}/supervisor/extension-manager.test.js +0 -0
  745. /package/dashboard/dist-server/{server → src/server}/supervisor/self-learning-service.d.ts +0 -0
  746. /package/dashboard/dist-server/{server → src/server}/supervisor/self-learning-service.js +0 -0
  747. /package/dashboard/dist-server/{server/ws/handlers/supervisor-handler.test.d.ts → src/server/supervisor/self-learning-service.test.d.ts} +0 -0
  748. /package/dashboard/dist-server/{server → src/server}/supervisor/self-learning-service.test.js +0 -0
  749. /package/dashboard/dist-server/{shared/constants.test.d.ts → src/server/supervisor/supervisor.integration.test.d.ts} +0 -0
  750. /package/dashboard/dist-server/{server → src/server}/supervisor/supervisor.integration.test.js +0 -0
  751. /package/dashboard/dist-server/{server → src/server}/supervisor/task-scheduler-service.d.ts +0 -0
  752. /package/dashboard/dist-server/{server → src/server}/supervisor/task-scheduler-service.js +0 -0
  753. /package/dashboard/dist-server/{shared/issue-types.test.d.ts → src/server/supervisor/task-scheduler-service.test.d.ts} +0 -0
  754. /package/dashboard/dist-server/{server → src/server}/supervisor/task-scheduler-service.test.js +0 -0
  755. /package/dashboard/dist-server/{server → src/server}/utils/issue-store.d.ts +0 -0
  756. /package/dashboard/dist-server/{server → src/server}/utils/issue-store.js +0 -0
  757. /package/dashboard/dist-server/{shared/utils.test.d.ts → src/server/utils/issue-store.test.d.ts} +0 -0
  758. /package/dashboard/dist-server/{server → src/server}/utils/issue-store.test.js +0 -0
  759. /package/dashboard/dist-server/{dashboard/src/server/docs → src/server/wiki}/frontmatter-util.d.ts +0 -0
  760. /package/dashboard/dist-server/{dashboard/src/server/docs → src/server/wiki}/frontmatter-util.js +0 -0
  761. /package/dashboard/dist-server/{server → src/server}/ws/handlers/commander-handler.d.ts +0 -0
  762. /package/dashboard/dist-server/{server → src/server}/ws/handlers/commander-handler.js +0 -0
  763. /package/dashboard/dist-server/{server → src/server}/ws/handlers/coordinate-handler.d.ts +0 -0
  764. /package/dashboard/dist-server/{server → src/server}/ws/handlers/coordinate-handler.js +0 -0
  765. /package/dashboard/dist-server/{server → src/server}/ws/handlers/execution-handler.d.ts +0 -0
  766. /package/dashboard/dist-server/{server → src/server}/ws/handlers/execution-handler.js +0 -0
  767. /package/dashboard/dist-server/{server → src/server}/ws/handlers/requirement-handler.d.ts +0 -0
  768. /package/dashboard/dist-server/{server → src/server}/ws/handlers/requirement-handler.js +0 -0
  769. /package/dashboard/dist-server/{server → src/server}/ws/handlers/supervisor-handler.d.ts +0 -0
  770. /package/dashboard/dist-server/{server → src/server}/ws/handlers/supervisor-handler.js +0 -0
  771. /package/dashboard/dist-server/{server → src/server}/ws/handlers/supervisor-handler.test.js +0 -0
  772. /package/dashboard/dist-server/{server → src/server}/ws/ws-handler.d.ts +0 -0
  773. /package/dashboard/dist-server/{server → src/server}/ws/ws-handler.js +0 -0
  774. /package/dashboard/dist-server/{server → src/server}/ws/ws-manager.d.ts +0 -0
  775. /package/dashboard/dist-server/{server → src/server}/ws/ws-manager.js +0 -0
  776. /package/dashboard/dist-server/{shared → src/shared}/commander-types.d.ts +0 -0
  777. /package/dashboard/dist-server/{shared → src/shared}/commander-types.js +0 -0
  778. /package/dashboard/dist-server/{shared → src/shared}/constants.test.js +0 -0
  779. /package/dashboard/dist-server/{shared → src/shared}/coordinate-types.d.ts +0 -0
  780. /package/dashboard/dist-server/{shared → src/shared}/coordinate-types.js +0 -0
  781. /package/dashboard/dist-server/{shared → src/shared}/execution-types.d.ts +0 -0
  782. /package/dashboard/dist-server/{shared → src/shared}/execution-types.js +0 -0
  783. /package/dashboard/dist-server/{shared → src/shared}/extension-types.d.ts +0 -0
  784. /package/dashboard/dist-server/{shared → src/shared}/extension-types.js +0 -0
  785. /package/dashboard/dist-server/{shared → src/shared}/issue-types.d.ts +0 -0
  786. /package/dashboard/dist-server/{shared → src/shared}/issue-types.js +0 -0
  787. /package/dashboard/dist-server/{shared → src/shared}/issue-types.test.js +0 -0
  788. /package/dashboard/dist-server/{shared → src/shared}/journal-types.d.ts +0 -0
  789. /package/dashboard/dist-server/{shared → src/shared}/journal-types.js +0 -0
  790. /package/dashboard/dist-server/{shared → src/shared}/learning-types.d.ts +0 -0
  791. /package/dashboard/dist-server/{shared → src/shared}/learning-types.js +0 -0
  792. /package/dashboard/dist-server/{shared → src/shared}/linear-types.d.ts +0 -0
  793. /package/dashboard/dist-server/{shared → src/shared}/linear-types.js +0 -0
  794. /package/dashboard/dist-server/{shared → src/shared}/requirement-types.d.ts +0 -0
  795. /package/dashboard/dist-server/{shared → src/shared}/requirement-types.js +0 -0
  796. /package/dashboard/dist-server/{shared → src/shared}/schedule-types.d.ts +0 -0
  797. /package/dashboard/dist-server/{shared → src/shared}/schedule-types.js +0 -0
  798. /package/dashboard/dist-server/{shared → src/shared}/team-types.d.ts +0 -0
  799. /package/dashboard/dist-server/{shared → src/shared}/team-types.js +0 -0
  800. /package/dashboard/dist-server/{shared → src/shared}/types.js +0 -0
  801. /package/dashboard/dist-server/{shared → src/shared}/utils.d.ts +0 -0
  802. /package/dashboard/dist-server/{shared → src/shared}/utils.js +0 -0
  803. /package/dashboard/dist-server/{shared → src/shared}/utils.test.js +0 -0
  804. /package/dashboard/dist-server/{shared → src/shared}/wave-types.d.ts +0 -0
  805. /package/dashboard/dist-server/{shared → src/shared}/wave-types.js +0 -0
  806. /package/dashboard/dist-server/{shared → src/shared}/ws-protocol.js +0 -0
@@ -0,0 +1,242 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { mkdtemp, mkdir, writeFile, readFile, rm, symlink, stat } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { createHash } from 'node:crypto';
6
+ import { WikiIndexer } from './wiki-indexer.js';
7
+ import { WikiWriter, WikiWriteError } from './writer.js';
8
+ // ---------------------------------------------------------------------------
9
+ // Stress tests for WikiWriter: concurrency, security (traversal, symlinks,
10
+ // virtual entries), and edge cases the base unit test doesn't cover.
11
+ // ---------------------------------------------------------------------------
12
+ let tmpRoot;
13
+ async function seed(rel, body) {
14
+ const abs = join(tmpRoot, rel);
15
+ await mkdir(join(abs, '..'), { recursive: true });
16
+ await writeFile(abs, body, 'utf-8');
17
+ }
18
+ beforeEach(async () => {
19
+ tmpRoot = await mkdtemp(join(tmpdir(), 'wiki-writer-stress-'));
20
+ });
21
+ afterEach(async () => {
22
+ await rm(tmpRoot, { recursive: true, force: true });
23
+ });
24
+ describe('WikiWriter security — path traversal', () => {
25
+ it('rejects absolute path slug', async () => {
26
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
27
+ const writer = new WikiWriter(tmpRoot, indexer);
28
+ await expect(writer.create({ type: 'spec', slug: '/etc/passwd', title: 'x', body: 'x' })).rejects.toThrow(WikiWriteError);
29
+ });
30
+ it('rejects dot-traversal slug', async () => {
31
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
32
+ const writer = new WikiWriter(tmpRoot, indexer);
33
+ await expect(writer.create({ type: 'spec', slug: '..', title: 'x', body: 'x' })).rejects.toThrow(WikiWriteError);
34
+ });
35
+ it('rejects windows-style traversal slug', async () => {
36
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
37
+ const writer = new WikiWriter(tmpRoot, indexer);
38
+ await expect(writer.create({
39
+ type: 'spec',
40
+ slug: '..\\..\\windows\\system32',
41
+ title: 'x',
42
+ body: 'x',
43
+ })).rejects.toThrow(WikiWriteError);
44
+ });
45
+ it('rejects uppercase slug', async () => {
46
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
47
+ const writer = new WikiWriter(tmpRoot, indexer);
48
+ await expect(writer.create({ type: 'spec', slug: 'UPPERCASE', title: 'x', body: 'x' })).rejects.toThrow(WikiWriteError);
49
+ });
50
+ it('rejects slug with spaces', async () => {
51
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
52
+ const writer = new WikiWriter(tmpRoot, indexer);
53
+ await expect(writer.create({ type: 'spec', slug: 'has space', title: 'x', body: 'x' })).rejects.toThrow(WikiWriteError);
54
+ });
55
+ it('rejects empty title', async () => {
56
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
57
+ const writer = new WikiWriter(tmpRoot, indexer);
58
+ await expect(writer.create({ type: 'spec', slug: 'ok', title: ' ', body: 'x' })).rejects.toThrow(WikiWriteError);
59
+ });
60
+ it('phase requires phaseRef', async () => {
61
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
62
+ const writer = new WikiWriter(tmpRoot, indexer);
63
+ await expect(writer.create({ type: 'phase', slug: 'ok', title: 'T', body: 'x' })).rejects.toThrow(WikiWriteError);
64
+ });
65
+ it('phase writes to phases/NN-slug/slug.md', async () => {
66
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
67
+ const writer = new WikiWriter(tmpRoot, indexer);
68
+ const entry = await writer.create({
69
+ type: 'phase',
70
+ slug: 'setup',
71
+ phaseRef: 3,
72
+ title: 'Setup Phase',
73
+ body: '# Setup',
74
+ });
75
+ expect(entry.source.path).toBe('phases/03-setup/setup.md');
76
+ });
77
+ it('memory writes to memory/MEM-slug.md', async () => {
78
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
79
+ const writer = new WikiWriter(tmpRoot, indexer);
80
+ const entry = await writer.create({
81
+ type: 'memory',
82
+ slug: 'auth-lessons',
83
+ title: 'Auth Lessons',
84
+ body: 'learned',
85
+ });
86
+ expect(entry.source.path).toBe('memory/MEM-auth-lessons.md');
87
+ });
88
+ it('note writes to memory/TIP-slug.md', async () => {
89
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
90
+ const writer = new WikiWriter(tmpRoot, indexer);
91
+ const entry = await writer.create({
92
+ type: 'note',
93
+ slug: 'quick-tip',
94
+ title: 'Tip',
95
+ body: 'tip',
96
+ });
97
+ expect(entry.source.path).toBe('memory/TIP-quick-tip.md');
98
+ });
99
+ });
100
+ describe('WikiWriter security — symlink rejection', () => {
101
+ it('refuses to update a symlinked entry', async () => {
102
+ // Create a real file outside root, then symlink to it from specs/
103
+ const outside = join(tmpRoot, '..', `outside-${Date.now()}.md`);
104
+ await writeFile(outside, '---\ntitle: Outside\n---\n# outside', 'utf-8');
105
+ await mkdir(join(tmpRoot, 'specs'), { recursive: true });
106
+ const linkPath = join(tmpRoot, 'specs', 'linked.md');
107
+ try {
108
+ await symlink(outside, linkPath);
109
+ }
110
+ catch {
111
+ // Platforms/accounts without symlink permission skip this test
112
+ return;
113
+ }
114
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
115
+ const writer = new WikiWriter(tmpRoot, indexer);
116
+ await expect(writer.update('spec-linked', { body: 'hijacked' })).rejects.toThrow(WikiWriteError);
117
+ // Ensure the outside file was NOT mutated
118
+ const raw = await readFile(outside, 'utf-8');
119
+ expect(raw).toContain('# outside');
120
+ await rm(outside, { force: true });
121
+ await rm(linkPath, { force: true });
122
+ });
123
+ });
124
+ describe('WikiWriter virtual entries — read-only', () => {
125
+ it('rejects update on virtual issue', async () => {
126
+ await mkdir(join(tmpRoot, 'issues'), { recursive: true });
127
+ await writeFile(join(tmpRoot, 'issues', 'current.jsonl'), JSON.stringify({ id: 'I1', title: 'Issue 1', status: 'open' }) + '\n', 'utf-8');
128
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
129
+ const index = await indexer.get();
130
+ const issue = index.entries.find((e) => e.type === 'issue');
131
+ expect(issue).toBeDefined();
132
+ const writer = new WikiWriter(tmpRoot, indexer);
133
+ await expect(writer.update(issue.id, { body: 'x' })).rejects.toMatchObject({ code: 'FORBIDDEN' });
134
+ });
135
+ it('rejects remove on virtual lesson', async () => {
136
+ await mkdir(join(tmpRoot, 'learning'), { recursive: true });
137
+ await writeFile(join(tmpRoot, 'learning', 'lessons.jsonl'), JSON.stringify({ id: 'L1', title: 'Lesson 1', category: 'pattern' }) + '\n', 'utf-8');
138
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
139
+ const index = await indexer.get();
140
+ const lesson = index.entries.find((e) => e.type === 'lesson');
141
+ if (!lesson)
142
+ return; // learning adapter may filter
143
+ const writer = new WikiWriter(tmpRoot, indexer);
144
+ await expect(writer.remove(lesson.id)).rejects.toMatchObject({ code: 'FORBIDDEN' });
145
+ });
146
+ });
147
+ describe('WikiWriter concurrency', () => {
148
+ it('concurrent PUTs — one wins, others see CONFLICT with stale hash', async () => {
149
+ await seed('specs/s.md', `---\ntitle: Initial\n---\n# s\nv0`);
150
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
151
+ const writer = new WikiWriter(tmpRoot, indexer);
152
+ // Capture the initial hash
153
+ const raw = await readFile(join(tmpRoot, 'specs', 's.md'));
154
+ const initialHash = createHash('sha256').update(raw).digest('hex');
155
+ // Fire 5 concurrent PUTs all providing the SAME stale hash. Each update
156
+ // serializes through readFile → writeFile, but after the first success the
157
+ // hash on disk changes, so the remaining 4 must see CONFLICT.
158
+ const results = await Promise.allSettled(Array.from({ length: 5 }, (_, i) => writer.update('spec-s', {
159
+ body: `v${i + 1}`,
160
+ expectedHash: initialHash,
161
+ })));
162
+ const ok = results.filter((r) => r.status === 'fulfilled');
163
+ const conflicts = results.filter((r) => r.status === 'rejected' && r.reason.code === 'CONFLICT');
164
+ // Exactly one write must have observed the original hash and succeeded.
165
+ expect(ok.length).toBe(1);
166
+ expect(conflicts.length).toBe(4);
167
+ });
168
+ it('rapid create → update → delete round-trip keeps index consistent', async () => {
169
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
170
+ const writer = new WikiWriter(tmpRoot, indexer);
171
+ const created = await writer.create({
172
+ type: 'spec',
173
+ slug: 'rt',
174
+ title: 'Initial',
175
+ body: '# body',
176
+ });
177
+ expect(created.id).toBe('spec-rt');
178
+ const updated = await writer.update('spec-rt', {
179
+ title: 'Updated',
180
+ body: '# updated',
181
+ });
182
+ expect(updated.title).toBe('Updated');
183
+ await writer.remove('spec-rt');
184
+ const index = await indexer.get();
185
+ expect(index.byId['spec-rt']).toBeUndefined();
186
+ // File should be gone from disk too
187
+ await expect(stat(join(tmpRoot, 'specs', 'rt.md'))).rejects.toThrow();
188
+ });
189
+ it('create with frontmatter serializes arrays and strings correctly', async () => {
190
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
191
+ const writer = new WikiWriter(tmpRoot, indexer);
192
+ const entry = await writer.create({
193
+ type: 'spec',
194
+ slug: 'fm',
195
+ title: 'Frontmatter Test',
196
+ body: '# fm\nbody',
197
+ frontmatter: {
198
+ tags: ['alpha', 'beta'],
199
+ priority: 'high',
200
+ },
201
+ });
202
+ expect(entry.tags).toEqual(['alpha', 'beta']);
203
+ expect(entry.ext.priority).toBe('high');
204
+ });
205
+ it('update without body preserves existing body', async () => {
206
+ await seed('specs/s.md', `---\ntitle: Old\n---\n# Old\noriginal body`);
207
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
208
+ const writer = new WikiWriter(tmpRoot, indexer);
209
+ const updated = await writer.update('spec-s', { title: 'New Title' });
210
+ expect(updated.title).toBe('New Title');
211
+ expect(updated.body).toContain('original body');
212
+ });
213
+ });
214
+ describe('WikiWriter — invalid id validation', () => {
215
+ it('rejects update with slash in id', async () => {
216
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
217
+ const writer = new WikiWriter(tmpRoot, indexer);
218
+ await expect(writer.update('spec/evil', { body: 'x' })).rejects.toMatchObject({ code: 'BAD_REQUEST' });
219
+ });
220
+ it('rejects remove with backslash in id', async () => {
221
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
222
+ const writer = new WikiWriter(tmpRoot, indexer);
223
+ await expect(writer.remove('spec\\evil')).rejects.toMatchObject({ code: 'BAD_REQUEST' });
224
+ });
225
+ it('remove of non-existent id returns NOT_FOUND', async () => {
226
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
227
+ const writer = new WikiWriter(tmpRoot, indexer);
228
+ await expect(writer.remove('spec-nope')).rejects.toMatchObject({ code: 'NOT_FOUND' });
229
+ });
230
+ it('create fails when target file already exists', async () => {
231
+ await seed('specs/dup.md', `---\ntitle: Existing\n---\n# dup`);
232
+ const indexer = new WikiIndexer({ workflowRoot: tmpRoot });
233
+ const writer = new WikiWriter(tmpRoot, indexer);
234
+ await expect(writer.create({
235
+ type: 'spec',
236
+ slug: 'dup',
237
+ title: 'New',
238
+ body: 'x',
239
+ })).rejects.toMatchObject({ code: 'CONFLICT' });
240
+ });
241
+ });
242
+ //# sourceMappingURL=writer-stress.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer-stress.test.js","sourceRoot":"","sources":["../../../../src/server/wiki/writer-stress.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { WikiEntry } from './wiki-types.js';
2
+ import type { WikiIndexer } from './wiki-indexer.js';
3
+ export type WritableType = 'spec' | 'phase' | 'memory' | 'note';
4
+ export interface CreateWikiReq {
5
+ type: WritableType;
6
+ slug: string;
7
+ phaseRef?: number;
8
+ title: string;
9
+ body: string;
10
+ frontmatter?: Record<string, unknown>;
11
+ }
12
+ export interface UpdateWikiReq {
13
+ title?: string;
14
+ body?: string;
15
+ frontmatter?: Record<string, unknown>;
16
+ /** sha256 of the previous file bytes for optimistic concurrency. */
17
+ expectedHash?: string;
18
+ }
19
+ export declare class WikiWriteError extends Error {
20
+ code: 'BAD_REQUEST' | 'NOT_FOUND' | 'CONFLICT' | 'FORBIDDEN';
21
+ details?: unknown | undefined;
22
+ constructor(code: 'BAD_REQUEST' | 'NOT_FOUND' | 'CONFLICT' | 'FORBIDDEN', message: string, details?: unknown | undefined);
23
+ }
24
+ /**
25
+ * WikiWriter — safe CRUD for real markdown wiki entries.
26
+ *
27
+ * Scope: only `spec | phase | memory | note` entries backed by real `.md`
28
+ * files. Virtual entries (issue/lesson), and the top-level `project.md` /
29
+ * `roadmap.md` narratives are rejected.
30
+ *
31
+ * All writes invalidate the indexer cache on success so the next read
32
+ * rebuilds. fs-watcher will fire its own `wiki:invalidated` event for the
33
+ * same change; the single-flight guard on `WikiIndexer.rebuild()` prevents
34
+ * duplicate work.
35
+ */
36
+ export declare class WikiWriter {
37
+ private readonly workflowRoot;
38
+ private readonly indexer;
39
+ /** Per-path serializer: chains async writes so TOCTOU hash checks are safe. */
40
+ private readonly pathLocks;
41
+ constructor(workflowRoot: string, indexer: WikiIndexer);
42
+ /**
43
+ * Serialize async operations touching the same `key`. Each caller's fn runs
44
+ * after the previous one's promise settles, so read-modify-write sequences
45
+ * don't interleave for a single path.
46
+ */
47
+ private withLock;
48
+ create(req: CreateWikiReq): Promise<WikiEntry>;
49
+ update(id: string, req: UpdateWikiReq): Promise<WikiEntry>;
50
+ remove(id: string): Promise<void>;
51
+ private assertWritableType;
52
+ private resolveTargetPath;
53
+ private isInsideRoot;
54
+ private isWritablePath;
55
+ }
56
+ export declare function serializeFrontmatter(fm: Record<string, unknown>): string;
57
+ export declare function splitFrontmatterAndBody(raw: string): {
58
+ frontmatter: Record<string, unknown>;
59
+ body: string;
60
+ };
@@ -0,0 +1,272 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readFile, writeFile, unlink, mkdir, lstat, stat } from 'node:fs/promises';
3
+ import { dirname, join, resolve, sep } from 'node:path';
4
+ import { parseFrontmatter } from './frontmatter-util.js';
5
+ const SLUG_RE = /^[a-z0-9][a-z0-9-]*$/;
6
+ const ID_RE = /^[\w.-]+$/;
7
+ export class WikiWriteError extends Error {
8
+ code;
9
+ details;
10
+ constructor(code, message, details) {
11
+ super(message);
12
+ this.code = code;
13
+ this.details = details;
14
+ this.name = 'WikiWriteError';
15
+ }
16
+ }
17
+ /**
18
+ * WikiWriter — safe CRUD for real markdown wiki entries.
19
+ *
20
+ * Scope: only `spec | phase | memory | note` entries backed by real `.md`
21
+ * files. Virtual entries (issue/lesson), and the top-level `project.md` /
22
+ * `roadmap.md` narratives are rejected.
23
+ *
24
+ * All writes invalidate the indexer cache on success so the next read
25
+ * rebuilds. fs-watcher will fire its own `wiki:invalidated` event for the
26
+ * same change; the single-flight guard on `WikiIndexer.rebuild()` prevents
27
+ * duplicate work.
28
+ */
29
+ export class WikiWriter {
30
+ workflowRoot;
31
+ indexer;
32
+ /** Per-path serializer: chains async writes so TOCTOU hash checks are safe. */
33
+ pathLocks = new Map();
34
+ constructor(workflowRoot, indexer) {
35
+ this.workflowRoot = workflowRoot;
36
+ this.indexer = indexer;
37
+ this.workflowRoot = resolve(workflowRoot);
38
+ }
39
+ /**
40
+ * Serialize async operations touching the same `key`. Each caller's fn runs
41
+ * after the previous one's promise settles, so read-modify-write sequences
42
+ * don't interleave for a single path.
43
+ */
44
+ async withLock(key, fn) {
45
+ const prev = this.pathLocks.get(key) ?? Promise.resolve();
46
+ const settled = prev.then(() => undefined, () => undefined);
47
+ const next = settled.then(fn);
48
+ // Store the error-swallowed tail so later waiters don't inherit rejection.
49
+ const tail = next.then(() => undefined, () => undefined);
50
+ this.pathLocks.set(key, tail);
51
+ try {
52
+ return await next;
53
+ }
54
+ finally {
55
+ if (this.pathLocks.get(key) === tail) {
56
+ this.pathLocks.delete(key);
57
+ }
58
+ }
59
+ }
60
+ async create(req) {
61
+ this.assertWritableType(req.type);
62
+ if (!req.slug || !SLUG_RE.test(req.slug)) {
63
+ throw new WikiWriteError('BAD_REQUEST', `invalid slug '${req.slug}' (expected kebab-case)`);
64
+ }
65
+ if (!req.title || !req.title.trim()) {
66
+ throw new WikiWriteError('BAD_REQUEST', 'title is required');
67
+ }
68
+ if (req.type === 'phase' && (req.phaseRef === undefined || !Number.isFinite(req.phaseRef))) {
69
+ throw new WikiWriteError('BAD_REQUEST', 'phaseRef is required for type=phase');
70
+ }
71
+ const targetPath = this.resolveTargetPath(req.type, req.slug, req.phaseRef);
72
+ if (await pathExists(targetPath)) {
73
+ throw new WikiWriteError('CONFLICT', `file already exists: ${targetPath}`);
74
+ }
75
+ const fm = { title: req.title, ...(req.frontmatter ?? {}) };
76
+ const serialized = serializeFrontmatter(fm);
77
+ const content = `${serialized}\n${req.body}`;
78
+ await mkdir(dirname(targetPath), { recursive: true });
79
+ await writeFile(targetPath, content, 'utf-8');
80
+ this.indexer.invalidate(targetPath);
81
+ const index = await this.indexer.rebuild();
82
+ const id = `${req.type}-${req.slug}`;
83
+ const entry = index.byId[id];
84
+ if (!entry) {
85
+ throw new WikiWriteError('NOT_FOUND', `created entry not indexed: ${id}`);
86
+ }
87
+ return entry;
88
+ }
89
+ async update(id, req) {
90
+ if (!ID_RE.test(id)) {
91
+ throw new WikiWriteError('BAD_REQUEST', `invalid id '${id}'`);
92
+ }
93
+ const index = await this.indexer.get();
94
+ const current = index.byId[id];
95
+ if (!current) {
96
+ throw new WikiWriteError('NOT_FOUND', `entry not found: ${id}`);
97
+ }
98
+ if (current.source.kind !== 'file') {
99
+ throw new WikiWriteError('FORBIDDEN', `cannot write virtual entry: ${id}`);
100
+ }
101
+ const absPath = resolve(join(this.workflowRoot, current.source.path));
102
+ if (!this.isInsideRoot(absPath) || !this.isWritablePath(absPath)) {
103
+ throw new WikiWriteError('FORBIDDEN', `entry path not writable: ${current.source.path}`);
104
+ }
105
+ return this.withLock(absPath, async () => {
106
+ const ls = await safeLstat(absPath);
107
+ if (!ls || ls.isSymbolicLink() || !ls.isFile()) {
108
+ throw new WikiWriteError('NOT_FOUND', `file missing or not a regular file: ${absPath}`);
109
+ }
110
+ const prevBytes = await readFile(absPath);
111
+ const prevHash = sha256(prevBytes);
112
+ if (req.expectedHash && req.expectedHash !== prevHash) {
113
+ throw new WikiWriteError('CONFLICT', 'hash mismatch', {
114
+ currentHash: prevHash,
115
+ currentBody: prevBytes.toString('utf-8'),
116
+ });
117
+ }
118
+ const { frontmatter: currentFm, body: currentBody } = splitFrontmatterAndBody(prevBytes.toString('utf-8'));
119
+ const nextFm = {
120
+ ...currentFm,
121
+ ...(req.frontmatter ?? {}),
122
+ };
123
+ if (req.title !== undefined)
124
+ nextFm.title = req.title;
125
+ const nextBody = req.body !== undefined ? req.body : currentBody;
126
+ const content = `${serializeFrontmatter(nextFm)}\n${nextBody}`;
127
+ await writeFile(absPath, content, 'utf-8');
128
+ this.indexer.invalidate(absPath);
129
+ const rebuilt = await this.indexer.rebuild();
130
+ const entry = rebuilt.byId[id];
131
+ if (!entry) {
132
+ throw new WikiWriteError('NOT_FOUND', `updated entry vanished from index: ${id}`);
133
+ }
134
+ return entry;
135
+ });
136
+ }
137
+ async remove(id) {
138
+ if (!ID_RE.test(id)) {
139
+ throw new WikiWriteError('BAD_REQUEST', `invalid id '${id}'`);
140
+ }
141
+ const index = await this.indexer.get();
142
+ const current = index.byId[id];
143
+ if (!current) {
144
+ throw new WikiWriteError('NOT_FOUND', `entry not found: ${id}`);
145
+ }
146
+ if (current.source.kind !== 'file') {
147
+ throw new WikiWriteError('FORBIDDEN', `cannot delete virtual entry: ${id}`);
148
+ }
149
+ const absPath = resolve(join(this.workflowRoot, current.source.path));
150
+ if (!this.isInsideRoot(absPath) || !this.isWritablePath(absPath)) {
151
+ throw new WikiWriteError('FORBIDDEN', `entry path not writable: ${current.source.path}`);
152
+ }
153
+ const ls = await safeLstat(absPath);
154
+ if (!ls || ls.isSymbolicLink() || !ls.isFile()) {
155
+ throw new WikiWriteError('NOT_FOUND', `file missing or not a regular file: ${absPath}`);
156
+ }
157
+ await unlink(absPath);
158
+ this.indexer.invalidate(absPath);
159
+ await this.indexer.rebuild();
160
+ }
161
+ // -------------------------------------------------------------------------
162
+ // Internal
163
+ // -------------------------------------------------------------------------
164
+ assertWritableType(type) {
165
+ if (type !== 'spec' && type !== 'phase' && type !== 'memory' && type !== 'note') {
166
+ throw new WikiWriteError('BAD_REQUEST', `type '${type}' is not writable`);
167
+ }
168
+ }
169
+ resolveTargetPath(type, slug, phaseRef) {
170
+ let rel;
171
+ if (type === 'spec') {
172
+ rel = `specs/${slug}.md`;
173
+ }
174
+ else if (type === 'phase') {
175
+ const n = String(phaseRef).padStart(2, '0');
176
+ rel = `phases/${n}-${slug}/${slug}.md`;
177
+ }
178
+ else {
179
+ // memory | note → memory/<PREFIX>-<slug>.md
180
+ const prefix = type === 'note' ? 'TIP' : 'MEM';
181
+ rel = `memory/${prefix}-${slug}.md`;
182
+ }
183
+ const abs = resolve(join(this.workflowRoot, rel));
184
+ if (!this.isInsideRoot(abs) || !this.isWritablePath(abs)) {
185
+ throw new WikiWriteError('BAD_REQUEST', `slug resolves outside allowed subtree: ${rel}`);
186
+ }
187
+ return abs;
188
+ }
189
+ isInsideRoot(absPath) {
190
+ const requested = resolve(absPath);
191
+ return requested === this.workflowRoot || requested.startsWith(this.workflowRoot + sep);
192
+ }
193
+ isWritablePath(absPath) {
194
+ const abs = resolve(absPath);
195
+ const rel = abs.slice(this.workflowRoot.length + 1);
196
+ const segs = rel.split(sep);
197
+ if (segs.length === 0)
198
+ return false;
199
+ const top = segs[0];
200
+ return top === 'specs' || top === 'phases' || top === 'memory';
201
+ }
202
+ }
203
+ // ---------------------------------------------------------------------------
204
+ // Frontmatter serialization (flat only — matches the lean parser)
205
+ // ---------------------------------------------------------------------------
206
+ export function serializeFrontmatter(fm) {
207
+ const lines = ['---'];
208
+ for (const [k, v] of Object.entries(fm)) {
209
+ if (v === undefined || v === null)
210
+ continue;
211
+ if (Array.isArray(v)) {
212
+ if (v.length === 0) {
213
+ lines.push(`${k}: []`);
214
+ }
215
+ else {
216
+ lines.push(`${k}:`);
217
+ for (const item of v) {
218
+ lines.push(` - ${serializeScalar(item)}`);
219
+ }
220
+ }
221
+ }
222
+ else if (typeof v === 'object') {
223
+ // Nested objects aren't round-trippable through the lean parser.
224
+ // eslint-disable-next-line no-console
225
+ console.warn(`[wiki-writer] dropping non-serializable key '${k}' (nested object)`);
226
+ }
227
+ else {
228
+ lines.push(`${k}: ${serializeScalar(v)}`);
229
+ }
230
+ }
231
+ lines.push('---');
232
+ return lines.join('\n');
233
+ }
234
+ function serializeScalar(v) {
235
+ if (typeof v === 'string') {
236
+ if (/[:#\n"']/.test(v) || v.trim() !== v) {
237
+ return JSON.stringify(v);
238
+ }
239
+ return v;
240
+ }
241
+ if (typeof v === 'number' || typeof v === 'boolean')
242
+ return String(v);
243
+ return JSON.stringify(v);
244
+ }
245
+ export function splitFrontmatterAndBody(raw) {
246
+ const { data, content } = parseFrontmatter(raw);
247
+ return { frontmatter: data, body: content };
248
+ }
249
+ // ---------------------------------------------------------------------------
250
+ // Small fs helpers
251
+ // ---------------------------------------------------------------------------
252
+ async function pathExists(absPath) {
253
+ try {
254
+ await stat(absPath);
255
+ return true;
256
+ }
257
+ catch {
258
+ return false;
259
+ }
260
+ }
261
+ async function safeLstat(absPath) {
262
+ try {
263
+ return await lstat(absPath);
264
+ }
265
+ catch {
266
+ return null;
267
+ }
268
+ }
269
+ function sha256(data) {
270
+ return createHash('sha256').update(data).digest('hex');
271
+ }
272
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../../../src/server/wiki/writer.ts"],"names":[],"mappings":"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"}
@@ -4,12 +4,15 @@ import type { WsEventType } from '../../../shared/ws-protocol.js';
4
4
  import type { AgentConfig } from '../../../shared/agent-types.js';
5
5
  import type { AgentManager } from '../../agents/agent-manager.js';
6
6
  import type { DashboardEventBus } from '../../state/event-bus.js';
7
+ import { handleDelegateMessage } from '../../../../../src/async/delegate-control.js';
8
+ type DelegateMessageHandler = typeof handleDelegateMessage;
7
9
  export declare class AgentWsHandler implements WsHandler {
8
10
  private readonly agentManager;
9
11
  private readonly eventBus;
10
12
  private readonly workflowRoot;
11
- readonly actions: readonly ["spawn", "stop", "message", "approve", "cli:spawned", "cli:entry", "cli:stopped"];
12
- constructor(agentManager: AgentManager, eventBus: DashboardEventBus, workflowRoot: string);
13
+ private readonly delegateMessage;
14
+ readonly actions: readonly ["spawn", "stop", "message", "delegate:message", "approve", "cli:spawned", "cli:entry", "cli:stopped"];
15
+ constructor(agentManager: AgentManager, eventBus: DashboardEventBus, workflowRoot: string, delegateMessage?: DelegateMessageHandler);
13
16
  handle(action: string, data: unknown, ws: WebSocket, broadcast: (type: WsEventType, data: unknown) => void): Promise<void>;
14
17
  /**
15
18
  * Merge saved agent settings into spawn config, then spawn.
@@ -17,3 +20,4 @@ export declare class AgentWsHandler implements WsHandler {
17
20
  */
18
21
  mergeSettingsAndSpawn(ws: WebSocket, config: AgentConfig): Promise<void>;
19
22
  }
23
+ export {};