@rryando/arcs 4.2.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/README.md +2 -2
  2. package/dist/cli/arcs-flash.d.ts +1 -1
  3. package/dist/cli/arcs-flash.d.ts.map +1 -1
  4. package/dist/cli/arcs-flash.js +6 -6
  5. package/dist/cli/arcs-flash.js.map +1 -1
  6. package/dist/cli/arcs-orchestrate.d.ts +1 -1
  7. package/dist/cli/arcs-orchestrate.d.ts.map +1 -1
  8. package/dist/cli/arcs-orchestrate.js +4 -2
  9. package/dist/cli/arcs-orchestrate.js.map +1 -1
  10. package/dist/cli/commands/index.d.ts +1 -1
  11. package/dist/cli/commands/index.d.ts.map +1 -1
  12. package/dist/cli/commands/index.js +1 -1
  13. package/dist/cli/commands/index.js.map +1 -1
  14. package/dist/cli/commands/project.js +1 -30
  15. package/dist/cli/commands/project.js.map +1 -1
  16. package/dist/cli/commands/proposal-doc.d.ts +2 -0
  17. package/dist/cli/commands/proposal-doc.d.ts.map +1 -0
  18. package/dist/cli/commands/proposal-doc.js +382 -0
  19. package/dist/cli/commands/proposal-doc.js.map +1 -0
  20. package/dist/cli/commands/web.js +4 -10
  21. package/dist/cli/commands/web.js.map +1 -1
  22. package/dist/cli/dag-commands.d.ts +9 -0
  23. package/dist/cli/dag-commands.d.ts.map +1 -1
  24. package/dist/cli/dag-commands.js +35 -25
  25. package/dist/cli/dag-commands.js.map +1 -1
  26. package/dist/cli/index.d.ts.map +1 -1
  27. package/dist/cli/index.js +12 -23
  28. package/dist/cli/index.js.map +1 -1
  29. package/dist/cli/orchestrator-shared-blocks.d.ts +12 -10
  30. package/dist/cli/orchestrator-shared-blocks.d.ts.map +1 -1
  31. package/dist/cli/orchestrator-shared-blocks.js +46 -28
  32. package/dist/cli/orchestrator-shared-blocks.js.map +1 -1
  33. package/dist/utils/session-store.d.ts +24 -2
  34. package/dist/utils/session-store.d.ts.map +1 -1
  35. package/dist/utils/session-store.js +16 -7
  36. package/dist/utils/session-store.js.map +1 -1
  37. package/dist/utils/storage-utils.d.ts +1 -1
  38. package/dist/utils/storage-utils.d.ts.map +1 -1
  39. package/dist/utils/storage-utils.js +1 -1
  40. package/dist/utils/storage-utils.js.map +1 -1
  41. package/dist/web-client/assets/{GraphCanvas-BPDgvsyT.js → GraphCanvas-BYZE4sO9.js} +1 -1
  42. package/dist/web-client/assets/{MarkdownEditor-D7TLp78z.js → MarkdownEditor-BKx6M1cw.js} +1 -1
  43. package/dist/web-client/assets/{abnfDiagram-VRR7QNED-CyuP2N9t.js → abnfDiagram-VRR7QNED-D4kt0l2y.js} +1 -1
  44. package/dist/web-client/assets/architecture-TIHT7OUA-CIdGE6VO.js +1 -0
  45. package/dist/web-client/assets/{architectureDiagram-ZJ3FMSHR-DZ0ul9QX.js → architectureDiagram-ZJ3FMSHR-bu29SJFS.js} +1 -1
  46. package/dist/web-client/assets/{blockDiagram-677ZJIJ3-LLGzlc9l.js → blockDiagram-677ZJIJ3-hsu7mXKw.js} +1 -1
  47. package/dist/web-client/assets/{c4Diagram-LMCZKHZV-CViu3CTc.js → c4Diagram-LMCZKHZV-DMllRlT_.js} +1 -1
  48. package/dist/web-client/assets/channel-CBg-s-ZD.js +1 -0
  49. package/dist/web-client/assets/{chunk-32BRIVSS-Bw_IuJCM.js → chunk-32BRIVSS-BSzwj5eM.js} +1 -1
  50. package/dist/web-client/assets/{chunk-52WLFC77-C29h440W.js → chunk-52WLFC77-RDdZn6yY.js} +1 -1
  51. package/dist/web-client/assets/{chunk-C7G6YPKG-hhOrvw5w.js → chunk-C7G6YPKG-DQr--txT.js} +1 -1
  52. package/dist/web-client/assets/{chunk-EX3LRPZG-COMzol-M.js → chunk-EX3LRPZG-Bb8nc4z4.js} +1 -1
  53. package/dist/web-client/assets/{chunk-FWX5IMBZ-6vdX9EUn.js → chunk-FWX5IMBZ-QvBpOcOg.js} +2 -2
  54. package/dist/web-client/assets/{chunk-HOUHSVGY-DWDW6sxp.js → chunk-HOUHSVGY-B0mX_yjc.js} +1 -1
  55. package/dist/web-client/assets/{chunk-ICXQ74PX-BdMYglo2.js → chunk-ICXQ74PX-BmJSQqOH.js} +1 -1
  56. package/dist/web-client/assets/{chunk-MOJQB5TN-C0LAX_dC.js → chunk-MOJQB5TN-BrEI4GGn.js} +1 -1
  57. package/dist/web-client/assets/{chunk-OGEWGWER-CBx8MB7f.js → chunk-OGEWGWER-CrqDPOWP.js} +1 -1
  58. package/dist/web-client/assets/{chunk-PUDLZKDR-DKssR1nf.js → chunk-PUDLZKDR-DfPKldpG.js} +1 -1
  59. package/dist/web-client/assets/{chunk-Q4XR5HBZ-B3kcxFE-.js → chunk-Q4XR5HBZ-ekATI9aV.js} +1 -1
  60. package/dist/web-client/assets/{chunk-V7JOEXUC-CAlymndy.js → chunk-V7JOEXUC-C5APsP1t.js} +1 -1
  61. package/dist/web-client/assets/{chunk-VAUOI2AC-BowfsmTW.js → chunk-VAUOI2AC-BhfSWJZI.js} +1 -1
  62. package/dist/web-client/assets/{chunk-VR4S4FIN-BBOydgvt.js → chunk-VR4S4FIN-BGa-44J7.js} +1 -1
  63. package/dist/web-client/assets/{chunk-WYO6CB5R-DcymFbES.js → chunk-WYO6CB5R-By1K0guW.js} +1 -1
  64. package/dist/web-client/assets/{chunk-ZGVPDNZ5--uKFP-Lr.js → chunk-ZGVPDNZ5-Vnzpc76F.js} +1 -1
  65. package/dist/web-client/assets/classDiagram-OUVF2IWQ-ciwDjhUR.js +1 -0
  66. package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-ciwDjhUR.js +1 -0
  67. package/dist/web-client/assets/{cynefin-VYW2F7L2-CjboUOMA.js → cynefin-VYW2F7L2-C6MOMOOz.js} +1 -1
  68. package/dist/web-client/assets/{cynefinDiagram-TSTJHNR4-BcxygBP7.js → cynefinDiagram-TSTJHNR4-Cseyu79b.js} +1 -1
  69. package/dist/web-client/assets/{dagre-VKFMJZFB-D-tiERQE.js → dagre-VKFMJZFB-CQJlIuNh.js} +1 -1
  70. package/dist/web-client/assets/{diagram-FQU43EPY-ChPXczaS.js → diagram-FQU43EPY-DpqDxhq4.js} +1 -1
  71. package/dist/web-client/assets/{diagram-G47NLZAW-CVL3Y91h.js → diagram-G47NLZAW-C11fYYaF.js} +1 -1
  72. package/dist/web-client/assets/{diagram-NH7WQ7WH-DsaNA9Lh.js → diagram-NH7WQ7WH-BiG-uRAF.js} +1 -1
  73. package/dist/web-client/assets/{diagram-OA4YK3LP-CXhrhdhU.js → diagram-OA4YK3LP-CIXWWjq-.js} +1 -1
  74. package/dist/web-client/assets/{diagram-WEI45ONY-BTVPnk4E.js → diagram-WEI45ONY-C3OgIWu9.js} +1 -1
  75. package/dist/web-client/assets/{ebnfDiagram-CCIWWBDH-BAyrRBtM.js → ebnfDiagram-CCIWWBDH-BHF_NA3_.js} +1 -1
  76. package/dist/web-client/assets/{erDiagram-Q63AITRT-Qm24Wepm.js → erDiagram-Q63AITRT-CUOJCrLy.js} +1 -1
  77. package/dist/web-client/assets/eventmodeling-45OFAUF4-DxfboL1J.js +1 -0
  78. package/dist/web-client/assets/flowDiagram-23GEKE2U-C3NzpTtI.js +1 -0
  79. package/dist/web-client/assets/{ganttDiagram-NO4QXBWP-D8h7l3XJ.js → ganttDiagram-NO4QXBWP-D_4BMJ-g.js} +1 -1
  80. package/dist/web-client/assets/{gitGraph-TEB2WS4Q-DIBml1SB.js → gitGraph-TEB2WS4Q-CBuaZBId.js} +1 -1
  81. package/dist/web-client/assets/{gitGraphDiagram-IHSO6WYX-CtkYoXjn.js → gitGraphDiagram-IHSO6WYX-BbztsGuO.js} +1 -1
  82. package/dist/web-client/assets/index-B1KVIr80.css +2 -0
  83. package/dist/web-client/assets/{index-DOSH4Q9H.js → index-BWd2fBNL.js} +38 -38
  84. package/dist/web-client/assets/{info-DKCQHKI2-DLEUtV5Q.js → info-DKCQHKI2-Bzi0Xjro.js} +1 -1
  85. package/dist/web-client/assets/{infoDiagram-FWYZ7A6U-BJQ7aQux.js → infoDiagram-FWYZ7A6U-BkeEKcr0.js} +1 -1
  86. package/dist/web-client/assets/{ishikawaDiagram-FXEZZL3T-BPM11FvG.js → ishikawaDiagram-FXEZZL3T-CVusWu0p.js} +1 -1
  87. package/dist/web-client/assets/{journeyDiagram-5HDEW3XC-C0aX2z3c.js → journeyDiagram-5HDEW3XC-BUxu71zw.js} +1 -1
  88. package/dist/web-client/assets/{kanban-definition-HUTT4EX6-C56F29Ib.js → kanban-definition-HUTT4EX6-BE8Hv4Kd.js} +1 -1
  89. package/dist/web-client/assets/{line-BLFHLF2N.js → line-CiAoINJS.js} +1 -1
  90. package/dist/web-client/assets/{mermaid-parser.core-BLC8FhgU.js → mermaid-parser.core-BW47khiS.js} +3 -3
  91. package/dist/web-client/assets/{mermaid.core-BBqkKuXt.js → mermaid.core-DP--Jl9R.js} +3 -3
  92. package/dist/web-client/assets/{mindmap-definition-LN4V7U3C-aVZbsoPc.js → mindmap-definition-LN4V7U3C-CvWJUqdq.js} +1 -1
  93. package/dist/web-client/assets/{packet-7NZHBO7P-D4aqSQfB.js → packet-7NZHBO7P-XtzX9SaQ.js} +1 -1
  94. package/dist/web-client/assets/{pegDiagram-2B236MQR-DjfyNI0U.js → pegDiagram-2B236MQR-XNo0K1ct.js} +1 -1
  95. package/dist/web-client/assets/{pie-RZYD4A2V-ChCwYsYj.js → pie-RZYD4A2V-B1eUd9yt.js} +1 -1
  96. package/dist/web-client/assets/{pieDiagram-ENE6RG2P-BeHLKkXC.js → pieDiagram-ENE6RG2P-CRSb5z-4.js} +1 -1
  97. package/dist/web-client/assets/{quadrantDiagram-ABIIQ3AL-stga3gvq.js → quadrantDiagram-ABIIQ3AL-DziMaQxE.js} +1 -1
  98. package/dist/web-client/assets/{radar-I7S5WNFK-DOGheiwT.js → radar-I7S5WNFK-BpRqZH2g.js} +1 -1
  99. package/dist/web-client/assets/{railroad-3IZDKUUU-_JnU7M6L.js → railroad-3IZDKUUU-FDIHW04k.js} +1 -1
  100. package/dist/web-client/assets/railroad-abnf-AHOZXSZD-BKj6JAhH.js +1 -0
  101. package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-ChDM1OBv.js +1 -0
  102. package/dist/web-client/assets/railroad-peg-LSFZ7HO6-DvwA2e0i.js +1 -0
  103. package/dist/web-client/assets/{railroadDiagram-RFXS5EU6-C0CkMsOd.js → railroadDiagram-RFXS5EU6-Cs7EVBaz.js} +1 -1
  104. package/dist/web-client/assets/{requirementDiagram-TGXJPOKE-DuImwoRD.js → requirementDiagram-TGXJPOKE-B9_Lj1ga.js} +1 -1
  105. package/dist/web-client/assets/{sankeyDiagram-HTMAVEWB-kprq0XF9.js → sankeyDiagram-HTMAVEWB-DuTJTiy0.js} +1 -1
  106. package/dist/web-client/assets/{sequenceDiagram-DBY2YBRQ-DiXKJMF6.js → sequenceDiagram-DBY2YBRQ-vOCU5UoE.js} +1 -1
  107. package/dist/web-client/assets/{stateDiagram-2N3HPSRC-D5qbVStE.js → stateDiagram-2N3HPSRC-rxAnfzWn.js} +1 -1
  108. package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-B3EvQPEe.js +1 -0
  109. package/dist/web-client/assets/{swimlanes-5IMT3BWC-DCbw389c.js → swimlanes-5IMT3BWC-gdVZUnPe.js} +1 -1
  110. package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-WcOXuCPg.js +8 -0
  111. package/dist/web-client/assets/{timeline-definition-FHXFAJF6-CQeaYN_9.js → timeline-definition-FHXFAJF6-Do68JyGy.js} +1 -1
  112. package/dist/web-client/assets/{treeView-QDETBFTQ-Cf7Sq3qo.js → treeView-QDETBFTQ-CdZkmg80.js} +1 -1
  113. package/dist/web-client/assets/{treemap-6X3UGDF4-BovzvoTU.js → treemap-6X3UGDF4-ub54fmpW.js} +1 -1
  114. package/dist/web-client/assets/{vennDiagram-L72KCM5P-CZsJy139.js → vennDiagram-L72KCM5P-D-r8NBEp.js} +1 -1
  115. package/dist/web-client/assets/{wardley-OPB4EBWU-DJ7MS6XZ.js → wardley-OPB4EBWU-CTleH1-J.js} +1 -1
  116. package/dist/web-client/assets/{wardleyDiagram-EHGQE667-rqhcmsbM.js → wardleyDiagram-EHGQE667-BU8Kw39F.js} +1 -1
  117. package/dist/web-client/assets/{xychartDiagram-FW5EYKEG-HuK4Seps.js → xychartDiagram-FW5EYKEG-CfNnag6i.js} +1 -1
  118. package/dist/web-client/index.html +2 -2
  119. package/dist/web-server/app.d.ts.map +1 -1
  120. package/dist/web-server/app.js +1 -7
  121. package/dist/web-server/app.js.map +1 -1
  122. package/dist/web-server/claude-runner.d.ts +11 -4
  123. package/dist/web-server/claude-runner.d.ts.map +1 -1
  124. package/dist/web-server/claude-runner.js +10 -14
  125. package/dist/web-server/claude-runner.js.map +1 -1
  126. package/dist/web-server/index.d.ts.map +1 -1
  127. package/dist/web-server/index.js +4 -1
  128. package/dist/web-server/index.js.map +1 -1
  129. package/dist/web-server/prompt-assembly.d.ts.map +1 -1
  130. package/dist/web-server/prompt-assembly.js +1 -2
  131. package/dist/web-server/prompt-assembly.js.map +1 -1
  132. package/dist/web-server/routes/sessions.d.ts +9 -6
  133. package/dist/web-server/routes/sessions.d.ts.map +1 -1
  134. package/dist/web-server/routes/sessions.js +315 -207
  135. package/dist/web-server/routes/sessions.js.map +1 -1
  136. package/dist/web-server/run-driver.d.ts +113 -0
  137. package/dist/web-server/run-driver.d.ts.map +1 -0
  138. package/dist/web-server/run-driver.js +214 -0
  139. package/dist/web-server/run-driver.js.map +1 -0
  140. package/dist/web-server/run-event-log.d.ts +23 -1
  141. package/dist/web-server/run-event-log.d.ts.map +1 -1
  142. package/dist/web-server/run-event-log.js +29 -5
  143. package/dist/web-server/run-event-log.js.map +1 -1
  144. package/dist/web-server/web-auth.d.ts +3 -5
  145. package/dist/web-server/web-auth.d.ts.map +1 -1
  146. package/dist/web-server/web-auth.js +6 -11
  147. package/dist/web-server/web-auth.js.map +1 -1
  148. package/dist/web-server/web-token.d.ts +1 -2
  149. package/dist/web-server/web-token.d.ts.map +1 -1
  150. package/dist/web-server/web-token.js +1 -2
  151. package/dist/web-server/web-token.js.map +1 -1
  152. package/opencode/arcs/bundle-runtime.json +3 -3
  153. package/opencode/arcs/prompts/arcs-docs.txt +4 -4
  154. package/opencode/arcs/prompts/arcs-flash.txt +41 -33
  155. package/opencode/arcs/prompts/arcs-orchestrate-caveman.txt +43 -27
  156. package/opencode/arcs/prompts/arcs-orchestrate.txt +43 -27
  157. package/opencode/arcs/prompts/code-reviewer.txt +4 -4
  158. package/opencode/arcs/prompts/graph-explorer.txt +4 -4
  159. package/opencode/arcs/prompts/software-engineer.txt +2 -2
  160. package/opencode/arcs/prompts/tech-architect.txt +4 -4
  161. package/opencode/arcs/skills/brainstorming/SKILL.md +4 -4
  162. package/opencode/arcs/skills/enriching-codegraph-proposals/SKILL.md +1 -1
  163. package/opencode/arcs/skills/implementation/SKILL.md +6 -6
  164. package/opencode/arcs/skills/init-project/SKILL.md +4 -4
  165. package/opencode/arcs/skills/systematic-debugging/SKILL.md +2 -2
  166. package/opencode/arcs/skills/test-driven-development/SKILL.md +3 -3
  167. package/opencode/arcs/skills/to-diagram/SKILL.md +2 -2
  168. package/opencode/arcs/skills/writing-knowledge/SKILL.md +2 -2
  169. package/opencode/arcs/skills/writing-plans/SKILL.md +2 -2
  170. package/opencode/arcs/skills/writing-proposals/SKILL.md +90 -0
  171. package/package.json +1 -1
  172. package/dist/cli/commands/hooks.d.ts +0 -76
  173. package/dist/cli/commands/hooks.d.ts.map +0 -1
  174. package/dist/cli/commands/hooks.js +0 -436
  175. package/dist/cli/commands/hooks.js.map +0 -1
  176. package/dist/utils/claude-code-hook-install.d.ts +0 -80
  177. package/dist/utils/claude-code-hook-install.d.ts.map +0 -1
  178. package/dist/utils/claude-code-hook-install.js +0 -212
  179. package/dist/utils/claude-code-hook-install.js.map +0 -1
  180. package/dist/utils/hook-contract.d.ts +0 -36
  181. package/dist/utils/hook-contract.d.ts.map +0 -1
  182. package/dist/utils/hook-contract.js +0 -35
  183. package/dist/utils/hook-contract.js.map +0 -1
  184. package/dist/utils/hook-token-store.d.ts +0 -63
  185. package/dist/utils/hook-token-store.d.ts.map +0 -1
  186. package/dist/utils/hook-token-store.js +0 -88
  187. package/dist/utils/hook-token-store.js.map +0 -1
  188. package/dist/web-client/assets/architecture-TIHT7OUA-Bdo2Yvm9.js +0 -1
  189. package/dist/web-client/assets/channel-DBNmizpo.js +0 -1
  190. package/dist/web-client/assets/classDiagram-OUVF2IWQ-CB3HiA1_.js +0 -1
  191. package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-CB3HiA1_.js +0 -1
  192. package/dist/web-client/assets/eventmodeling-45OFAUF4-DoTBIvl5.js +0 -1
  193. package/dist/web-client/assets/flowDiagram-23GEKE2U-BEH23L1A.js +0 -1
  194. package/dist/web-client/assets/index-wSzUPvml.css +0 -2
  195. package/dist/web-client/assets/railroad-abnf-AHOZXSZD-nhNub7LE.js +0 -1
  196. package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-BlQYe7Yf.js +0 -1
  197. package/dist/web-client/assets/railroad-peg-LSFZ7HO6-B3E8pRVN.js +0 -1
  198. package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-DWwTAG1r.js +0 -1
  199. package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-DabrCsjZ.js +0 -8
  200. package/dist/web-server/hook-auth.d.ts +0 -12
  201. package/dist/web-server/hook-auth.d.ts.map +0 -1
  202. package/dist/web-server/hook-auth.js +0 -36
  203. package/dist/web-server/hook-auth.js.map +0 -1
  204. package/dist/web-server/routes/hook-events.d.ts +0 -43
  205. package/dist/web-server/routes/hook-events.d.ts.map +0 -1
  206. package/dist/web-server/routes/hook-events.js +0 -316
  207. package/dist/web-server/routes/hook-events.js.map +0 -1
  208. package/opencode/arcs/skills/install-claude-code-hook/SKILL.md +0 -23
  209. package/scripts/claude-code-session-hook.mjs +0 -146
@@ -0,0 +1,382 @@
1
+ // ---------------------------------------------------------------------------
2
+ // proposal-doc commands — human-in-the-loop design proposal documents
3
+ // Proposals live as repo-local markdown files under docs/proposals/
4
+ // ---------------------------------------------------------------------------
5
+ import { existsSync, readdirSync } from "node:fs";
6
+ import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
7
+ import { basename, resolve } from "node:path";
8
+ import { resolveProject } from "../../utils/project-resolver.js";
9
+ import { normalizeIdentifier } from "../../utils/slug.js";
10
+ import { readStdin } from "../../utils/stdin.js";
11
+ import { defineCommand, ERROR_CODES, } from "../command-registry.js";
12
+ import { failure, success } from "../output-envelope.js";
13
+ // ---------------------------------------------------------------------------
14
+ // Helpers
15
+ // ---------------------------------------------------------------------------
16
+ const PROPOSALS_DIR = "docs/proposals";
17
+ function proposalDocPath(workspaceRoot, id) {
18
+ return resolve(workspaceRoot, PROPOSALS_DIR, `${id}.proposal.md`);
19
+ }
20
+ function proposalDocAcceptedPath(workspaceRoot, id) {
21
+ return resolve(workspaceRoot, PROPOSALS_DIR, `${id}.accepted.md`);
22
+ }
23
+ /** List all `.proposal.md` files and return their base names (without extension). */
24
+ function listProposalIds(workspaceRoot) {
25
+ const dir = resolve(workspaceRoot, PROPOSALS_DIR);
26
+ if (!existsSync(dir))
27
+ return [];
28
+ return readdirSync(dir)
29
+ .filter((f) => f.endsWith(".proposal.md"))
30
+ .map((f) => basename(f, ".proposal.md"))
31
+ .sort();
32
+ }
33
+ const PROPOSAL_TEMPLATE = (title) => `# ${title}
34
+
35
+ ## Motivation / Non-goals
36
+
37
+
38
+ ## Current state
39
+
40
+
41
+ ## Proposed design
42
+
43
+
44
+ ## Impact & risks
45
+
46
+
47
+ ## Acceptance criteria
48
+
49
+
50
+ ## Decision
51
+
52
+ *Approved: _when_ — rationale: _rejected alternative summaries_*
53
+ `;
54
+ // ---------------------------------------------------------------------------
55
+ // proposal-doc create
56
+ // ---------------------------------------------------------------------------
57
+ const proposalDocCreateParams = {
58
+ slug: {
59
+ type: "string",
60
+ required: true,
61
+ positional: 0,
62
+ description: "Project slug to create proposal doc for",
63
+ },
64
+ title: {
65
+ type: "string",
66
+ required: true,
67
+ positional: 1,
68
+ description: "Proposal title (also used for the identifier)",
69
+ },
70
+ body: { type: "string", description: "Inline markdown body (overrides template)" },
71
+ "body-file": { type: "string", description: "Path to markdown file with proposal body" },
72
+ "body-stdin": { type: "boolean", description: "Read body from stdin" },
73
+ };
74
+ defineCommand({
75
+ path: "proposal-doc create",
76
+ description: "Scaffold a new proposal document in docs/proposals/",
77
+ mutation: true,
78
+ params: proposalDocCreateParams,
79
+ handler: handleProposalDocCreate,
80
+ });
81
+ async function handleProposalDocCreate(params, flags) {
82
+ const slug = params.slug;
83
+ const title = params.title;
84
+ const bodyInline = params.body;
85
+ const bodyFile = params["body-file"];
86
+ const bodyStdin = params["body-stdin"];
87
+ const resolved = await resolveProject(slug);
88
+ if (!resolved.ok)
89
+ return resolved.result;
90
+ const workspaceRoot = resolved.workspacePath;
91
+ if (!workspaceRoot) {
92
+ return failure("no_workspace_path", `Project "${slug}" has no workspace path configured — cannot write proposal doc`);
93
+ }
94
+ const id = normalizeIdentifier(title);
95
+ if (flags.dryRun) {
96
+ return success({
97
+ dryRun: true,
98
+ wouldCreate: {
99
+ slug,
100
+ title,
101
+ id,
102
+ path: `docs/proposals/${id}.proposal.md`,
103
+ hasBody: !!(bodyInline || bodyFile || bodyStdin),
104
+ },
105
+ });
106
+ }
107
+ const filePath = proposalDocPath(workspaceRoot, id);
108
+ if (existsSync(filePath)) {
109
+ return failure(ERROR_CODES.CREATE_ERROR, `Proposal doc already exists: docs/proposals/${id}.proposal.md`, {
110
+ hint: `Use 'arcs proposal-doc edit ${slug} ${id}' to update it.`,
111
+ });
112
+ }
113
+ // Resolve body content: inline > file > stdin > template
114
+ let body;
115
+ if (bodyInline) {
116
+ body = bodyInline;
117
+ }
118
+ else if (bodyFile) {
119
+ if (!existsSync(bodyFile)) {
120
+ return failure(ERROR_CODES.ENTITY_NOT_FOUND, `Body file not found: ${bodyFile}`);
121
+ }
122
+ body = await readFile(bodyFile, "utf-8");
123
+ }
124
+ else if (bodyStdin) {
125
+ body = await readStdin();
126
+ }
127
+ else {
128
+ body = PROPOSAL_TEMPLATE(title);
129
+ }
130
+ // Ensure directory exists
131
+ const dir = resolve(workspaceRoot, PROPOSALS_DIR);
132
+ await mkdir(dir, { recursive: true });
133
+ await writeFile(filePath, body, "utf-8");
134
+ return success({
135
+ slug,
136
+ id,
137
+ path: `docs/proposals/${id}.proposal.md`,
138
+ fullPath: filePath,
139
+ });
140
+ }
141
+ // ---------------------------------------------------------------------------
142
+ // proposal-doc list
143
+ // ---------------------------------------------------------------------------
144
+ const proposalDocListParams = {
145
+ slug: {
146
+ type: "string",
147
+ required: true,
148
+ positional: 0,
149
+ description: "Project slug",
150
+ },
151
+ };
152
+ defineCommand({
153
+ path: "proposal-doc list",
154
+ description: "List pending proposal documents",
155
+ params: proposalDocListParams,
156
+ handler: handleProposalDocList,
157
+ });
158
+ async function handleProposalDocList(params, _flags) {
159
+ const slug = params.slug;
160
+ const resolved = await resolveProject(slug);
161
+ if (!resolved.ok)
162
+ return resolved.result;
163
+ const workspaceRoot = resolved.workspacePath;
164
+ if (!workspaceRoot) {
165
+ return success({ slug, proposals: [] });
166
+ }
167
+ const ids = listProposalIds(workspaceRoot);
168
+ const proposals = ids.map((id) => {
169
+ return { id, path: `docs/proposals/${id}.proposal.md` };
170
+ });
171
+ return success({ slug, proposals });
172
+ }
173
+ // ---------------------------------------------------------------------------
174
+ // proposal-doc get — view a proposal doc body
175
+ // ---------------------------------------------------------------------------
176
+ const proposalDocGetParams = {
177
+ slug: {
178
+ type: "string",
179
+ required: true,
180
+ positional: 0,
181
+ description: "Project slug",
182
+ },
183
+ id: {
184
+ type: "string",
185
+ required: true,
186
+ positional: 1,
187
+ description: "Proposal doc identifier (without .proposal.md)",
188
+ },
189
+ };
190
+ defineCommand({
191
+ path: "proposal-doc get",
192
+ description: "View the body of a proposal document",
193
+ params: proposalDocGetParams,
194
+ handler: handleProposalDocGet,
195
+ });
196
+ async function handleProposalDocGet(params, _flags) {
197
+ const slug = params.slug;
198
+ const id = params.id;
199
+ const resolved = await resolveProject(slug);
200
+ if (!resolved.ok)
201
+ return resolved.result;
202
+ const workspaceRoot = resolved.workspacePath;
203
+ if (!workspaceRoot) {
204
+ return failure("no_workspace_path", `Project "${slug}" has no workspace path configured`);
205
+ }
206
+ // Try .proposal.md first, then .accepted.md
207
+ let filePath = proposalDocPath(workspaceRoot, id);
208
+ let status = "pending";
209
+ if (!existsSync(filePath)) {
210
+ filePath = proposalDocAcceptedPath(workspaceRoot, id);
211
+ status = "accepted";
212
+ if (!existsSync(filePath)) {
213
+ return failure(ERROR_CODES.ENTITY_NOT_FOUND, `Proposal doc not found: ${id} (tried .proposal.md and .accepted.md)`, {
214
+ hint: `Run 'arcs proposal-doc list ${slug}' to see available proposals.`,
215
+ });
216
+ }
217
+ }
218
+ const body = await readFile(filePath, "utf-8");
219
+ return success({
220
+ slug,
221
+ id,
222
+ status,
223
+ path: `docs/proposals/${id}.${status}.md`,
224
+ body,
225
+ });
226
+ }
227
+ // ---------------------------------------------------------------------------
228
+ // proposal-doc edit — replace body of a proposal doc
229
+ // ---------------------------------------------------------------------------
230
+ const proposalDocEditParams = {
231
+ slug: {
232
+ type: "string",
233
+ required: true,
234
+ positional: 0,
235
+ description: "Project slug",
236
+ },
237
+ id: {
238
+ type: "string",
239
+ required: true,
240
+ positional: 1,
241
+ description: "Proposal doc identifier (without .proposal.md)",
242
+ },
243
+ body: { type: "string", description: "Inline markdown body (replaces content)" },
244
+ "body-file": { type: "string", description: "Path to markdown file with proposal body" },
245
+ "body-stdin": { type: "boolean", description: "Read body from stdin" },
246
+ };
247
+ defineCommand({
248
+ path: "proposal-doc edit",
249
+ description: "Replace the body of a proposal document",
250
+ mutation: true,
251
+ params: proposalDocEditParams,
252
+ handler: handleProposalDocEdit,
253
+ });
254
+ async function handleProposalDocEdit(params, flags) {
255
+ const slug = params.slug;
256
+ const id = params.id;
257
+ const bodyInline = params.body;
258
+ const bodyFile = params["body-file"];
259
+ const bodyStdin = params["body-stdin"];
260
+ if (!bodyInline && !bodyFile && !bodyStdin) {
261
+ return failure(ERROR_CODES.MISSING_PARAM, "Provide --body, --body-file, or --body-stdin", {
262
+ hint: "Use --body=<content>, --body-file=<path>, or --body-stdin to supply replacement content.",
263
+ });
264
+ }
265
+ const resolved = await resolveProject(slug);
266
+ if (!resolved.ok)
267
+ return resolved.result;
268
+ const workspaceRoot = resolved.workspacePath;
269
+ if (!workspaceRoot) {
270
+ return failure("no_workspace_path", `Project "${slug}" has no workspace path configured`);
271
+ }
272
+ // Try .proposal.md first, then .accepted.md
273
+ let filePath = proposalDocPath(workspaceRoot, id);
274
+ let status = "pending";
275
+ if (!existsSync(filePath)) {
276
+ filePath = proposalDocAcceptedPath(workspaceRoot, id);
277
+ status = "accepted";
278
+ if (!existsSync(filePath)) {
279
+ return failure(ERROR_CODES.ENTITY_NOT_FOUND, `Proposal doc not found: ${id}`, {
280
+ hint: `Run 'arcs proposal-doc list ${slug}' to see available proposals.`,
281
+ });
282
+ }
283
+ }
284
+ let body;
285
+ if (bodyInline) {
286
+ body = bodyInline;
287
+ }
288
+ else if (bodyFile) {
289
+ if (!existsSync(bodyFile)) {
290
+ return failure(ERROR_CODES.ENTITY_NOT_FOUND, `Body file not found: ${bodyFile}`);
291
+ }
292
+ body = await readFile(bodyFile, "utf-8");
293
+ }
294
+ else {
295
+ body = await readStdin();
296
+ }
297
+ if (flags.dryRun) {
298
+ return success({
299
+ dryRun: true,
300
+ slug,
301
+ id,
302
+ wouldUpdate: { path: `docs/proposals/${id}.${status}.md`, bodyLength: body.length },
303
+ });
304
+ }
305
+ await writeFile(filePath, body, "utf-8");
306
+ return success({
307
+ slug,
308
+ id,
309
+ status,
310
+ path: `docs/proposals/${id}.${status}.md`,
311
+ bodyLength: body.length,
312
+ });
313
+ }
314
+ // ---------------------------------------------------------------------------
315
+ // proposal-doc promote — convert approved proposal into an ARCS plan
316
+ // ---------------------------------------------------------------------------
317
+ const proposalDocPromoteParams = {
318
+ slug: {
319
+ type: "string",
320
+ required: true,
321
+ positional: 0,
322
+ description: "Project slug",
323
+ },
324
+ id: {
325
+ type: "string",
326
+ required: true,
327
+ positional: 1,
328
+ description: "Proposal doc identifier (from filename, without .proposal.md)",
329
+ },
330
+ };
331
+ defineCommand({
332
+ path: "proposal-doc promote",
333
+ description: "Promote an approved proposal doc into an ARCS plan",
334
+ mutation: true,
335
+ params: proposalDocPromoteParams,
336
+ handler: handleProposalDocPromote,
337
+ });
338
+ async function handleProposalDocPromote(params, flags) {
339
+ const slug = params.slug;
340
+ const id = params.id;
341
+ const resolved = await resolveProject(slug);
342
+ if (!resolved.ok)
343
+ return resolved.result;
344
+ const workspaceRoot = resolved.workspacePath;
345
+ if (!workspaceRoot) {
346
+ return failure("no_workspace_path", `Project "${slug}" has no workspace path configured`);
347
+ }
348
+ const filePath = proposalDocPath(workspaceRoot, id);
349
+ if (!existsSync(filePath)) {
350
+ return failure(ERROR_CODES.ENTITY_NOT_FOUND, `Proposal doc not found: docs/proposals/${id}.proposal.md`, {
351
+ hint: `Run 'arcs proposal-doc list ${slug}' to see available proposals.`,
352
+ });
353
+ }
354
+ // Read the proposal body and infer a title from the first heading
355
+ const body = await readFile(filePath, "utf-8");
356
+ const titleLine = body.split("\n").find((l) => l.startsWith("# "));
357
+ const title = titleLine ? titleLine.replace(/^#\s+/, "").trim() : id;
358
+ if (flags.dryRun) {
359
+ return success({
360
+ dryRun: true,
361
+ slug,
362
+ wouldPromote: {
363
+ id,
364
+ title,
365
+ planAction: `arcs plan create ${slug} "${title}" --body-file="${filePath}"`,
366
+ docAction: "rename .proposal.md -> .accepted.md",
367
+ },
368
+ });
369
+ }
370
+ // Rename .proposal.md → .accepted.md so the content survives for plan creation.
371
+ // The skill orchestrator calls `arcs plan create --body-file=<accepted-path>` next.
372
+ const acceptedPath = proposalDocAcceptedPath(workspaceRoot, id);
373
+ await rename(filePath, acceptedPath);
374
+ return success({
375
+ slug,
376
+ id,
377
+ title,
378
+ docPath: `docs/proposals/${id}.accepted.md`,
379
+ planCommand: `arcs plan create ${slug} "${title}" --body-file="${acceptedPath}"`,
380
+ });
381
+ }
382
+ //# sourceMappingURL=proposal-doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-doc.js","sourceRoot":"","sources":["../../../src/cli/commands/proposal-doc.ts"],"names":[],"mappings":"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"}
@@ -2,14 +2,15 @@
2
2
  // web — Start the ARCS web UI (knowledge base visualizer and manager)
3
3
  // ---------------------------------------------------------------------------
4
4
  import pc from "picocolors";
5
- import { DEFAULT_WEB_HOST, DEFAULT_WEB_PORT } from "../../utils/hook-contract.js";
6
5
  import { defineCommand, } from "../command-registry.js";
7
6
  import { failure, success } from "../output-envelope.js";
7
+ /** Loopback only: `arcs web` refuses to bind anything else. */
8
+ const DEFAULT_WEB_HOST = "127.0.0.1";
9
+ /** Default `arcs web` port. */
10
+ const DEFAULT_WEB_PORT = 4173;
8
11
  const webParams = {
9
12
  port: {
10
13
  type: "number",
11
- // Shared with the hook contract: an installed hook posts to this port, so
12
- // the two defaults must move together or every hook silently misses.
13
14
  default: DEFAULT_WEB_PORT,
14
15
  description: `Port to listen on (default ${DEFAULT_WEB_PORT})`,
15
16
  },
@@ -50,13 +51,6 @@ async function handleWeb(params, _flags) {
50
51
  ];
51
52
  // Banner on stderr keeps --json stdout clean.
52
53
  console.error(banner.join("\n"));
53
- // Checked against the address actually bound, not `params.port`: the two
54
- // differ whenever port 0 was requested. Runs after listen, so it can only
55
- // add output — it never delays or fails the server coming up.
56
- const { hookUrlMismatchWarning } = await import("./hooks.js");
57
- const mismatch = await hookUrlMismatchWarning({ host: handle.host, port: handle.port });
58
- if (mismatch)
59
- console.error(`${pc.yellow(mismatch)}\n`);
60
54
  return success({ url: handle.url, port: handle.port, host: handle.host });
61
55
  }
62
56
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/cli/commands/web.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/cli/commands/web.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sEAAsE;AACtE,8EAA8E;AAE9E,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAGL,aAAa,GAGd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEzD,+DAA+D;AAC/D,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAErC,+BAA+B;AAC/B,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B,MAAM,SAAS,GAAG;IAChB,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,8BAA8B,gBAAgB,GAAG;KAC/D;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,8BAA8B,gBAAgB,GAAG;KAC/D;IACD,SAAS,EAAE;QACT,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,8BAA8B;KAC5C;CAC0C,CAAC;AAE9C,aAAa,CAAC;IACZ,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,+DAA+D;IAC5E,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;CACnB,CAAC,CAAC;AAEH,KAAK,UAAU,SAAS,CACtB,MAAsC,EACtC,MAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QACrE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;YAClC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;SACzB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG;YACb,EAAE;YACF,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE;YACtF,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAClD,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,UAAU,EAAE,EAAE;YAC3C,KAAK,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO;YAClI,KAAK,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;YAC/B,EAAE;SACH,CAAC;QACF,8CAA8C;QAC9C,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEjC,OAAO,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,OAAO,CAAC,iBAAiB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACtF,CAAC;AACH,CAAC"}
@@ -1,4 +1,13 @@
1
1
  import "./commands/index.js";
2
+ /**
3
+ * Command prefixes that route to handleDagCommand for descriptive error messages.
4
+ * These are commands with subcommands (e.g. "plan create") but no single-word
5
+ * registry entry — registry-first routing in index.ts catches the two-word forms,
6
+ * this list provides helpful errors when the user types just the prefix.
7
+ *
8
+ * Keep sorted. The same list is used in index.ts for the switch/case fallback.
9
+ */
10
+ export declare const KNOWN_DAG_COMMANDS: readonly ["dependency", "diagram", "doc", "graph", "knowledge", "loop", "paths", "plan", "project", "proposal", "proposal-doc", "task"];
2
11
  /**
3
12
  * Dispatches DAG CLI subcommands via the registry. Returns true if handled.
4
13
  * Kept as export for backward compatibility with src/cli/index.ts and tests.
@@ -1 +1 @@
1
- {"version":3,"file":"dag-commands.d.ts","sourceRoot":"","sources":["../../src/cli/dag-commands.ts"],"names":[],"mappings":"AAYA,OAAO,qBAAqB,CAAC;AAe7B;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA6HxF"}
1
+ {"version":3,"file":"dag-commands.d.ts","sourceRoot":"","sources":["../../src/cli/dag-commands.ts"],"names":[],"mappings":"AAYA,OAAO,qBAAqB,CAAC;AAe7B;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,yIAaO,CAAC;AAEvC;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAiHxF"}
@@ -20,6 +20,28 @@ function printUsage() {
20
20
  // ---------------------------------------------------------------------------
21
21
  // Dispatcher — delegates all commands to the registry
22
22
  // ---------------------------------------------------------------------------
23
+ /**
24
+ * Command prefixes that route to handleDagCommand for descriptive error messages.
25
+ * These are commands with subcommands (e.g. "plan create") but no single-word
26
+ * registry entry — registry-first routing in index.ts catches the two-word forms,
27
+ * this list provides helpful errors when the user types just the prefix.
28
+ *
29
+ * Keep sorted. The same list is used in index.ts for the switch/case fallback.
30
+ */
31
+ export const KNOWN_DAG_COMMANDS = [
32
+ "dependency",
33
+ "diagram",
34
+ "doc",
35
+ "graph",
36
+ "knowledge",
37
+ "loop",
38
+ "paths",
39
+ "plan",
40
+ "project",
41
+ "proposal",
42
+ "proposal-doc",
43
+ "task",
44
+ ];
23
45
  /**
24
46
  * Dispatches DAG CLI subcommands via the registry. Returns true if handled.
25
47
  * Kept as export for backward compatibility with src/cli/index.ts and tests.
@@ -42,23 +64,22 @@ export async function handleDagCommand(command, args) {
42
64
  }
43
65
  if (!lean && isLeanMode([]))
44
66
  lean = true;
45
- // Delegate to registry
67
+ // Delegate to registry — try N-word paths from remaining args
46
68
  const firstPositional = rest.find((a) => !a.startsWith("-"));
47
69
  let registeredCmd;
48
70
  let remaining;
49
71
  if (firstPositional) {
50
- const twoWord = `${command} ${firstPositional}`;
51
- const cmd = getCommand(twoWord);
52
- if (cmd) {
53
- registeredCmd = cmd;
54
- remaining = [];
55
- let removed = false;
56
- for (const a of rest) {
57
- if (!removed && a === firstPositional) {
58
- removed = true;
59
- continue;
60
- }
61
- remaining.push(a);
72
+ // Find the longest command path that matches: command + up to 2 sub-words
73
+ const posIdx = rest.indexOf(firstPositional);
74
+ const suffixArgs = rest.slice(posIdx);
75
+ const maxWords = Math.min(suffixArgs.length, 2);
76
+ for (let n = maxWords; n >= 1; n--) {
77
+ const candidate = `${command} ${suffixArgs.slice(0, n).join(" ")}`;
78
+ const cmd = getCommand(candidate);
79
+ if (cmd) {
80
+ registeredCmd = cmd;
81
+ remaining = [...rest.slice(0, posIdx), ...rest.slice(posIdx + n)];
82
+ break;
62
83
  }
63
84
  }
64
85
  }
@@ -71,18 +92,7 @@ export async function handleDagCommand(command, args) {
71
92
  }
72
93
  if (!registeredCmd) {
73
94
  // Known DAG commands without a matching registry entry
74
- const knownCommands = [
75
- "task",
76
- "plan",
77
- "knowledge",
78
- "diagram",
79
- "doc",
80
- "dependency",
81
- "paths",
82
- "loop",
83
- "project",
84
- ];
85
- if (knownCommands.includes(command)) {
95
+ if (KNOWN_DAG_COMMANDS.includes(command)) {
86
96
  if (rest.includes("--help")) {
87
97
  printUsage();
88
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dag-commands.js","sourceRoot":"","sources":["../../src/cli/dag-commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dag-commands.js","sourceRoot":"","sources":["../../src/cli/dag-commands.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAoC7B;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA+DhE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAiC7B;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAsDhE"}
package/dist/cli/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import "./commands/index.js"; // Trigger command registrations
2
2
  import { parseArgs } from "./arg-parser.js";
3
3
  import { getCommand } from "./command-registry.js";
4
- import { handleDagCommand } from "./dag-commands.js";
4
+ import { handleDagCommand, KNOWN_DAG_COMMANDS } from "./dag-commands.js";
5
5
  import { formatCommandsDiscovery, generateCommandHelp, generateCommandsDiscovery, } from "./help-generator.js";
6
6
  import { render } from "./output-envelope.js";
7
7
  import { runSetup } from "./setup.js";
@@ -10,19 +10,16 @@ import { runSetup } from "./setup.js";
10
10
  // ---------------------------------------------------------------------------
11
11
  /**
12
12
  * Determine the longest-match command path from raw args.
13
- * Tries two-word path first (e.g. "task transition"), then single word.
13
+ * Tries 3-word, 2-word, then 1-word path. This handles commands like
14
+ * `knowledge search bm25` or `proposal-doc create` as registry entries.
14
15
  */
15
16
  function determineCommandPath(args) {
16
- if (args.length >= 2) {
17
- const twoWord = `${args[0]} ${args[1]}`;
18
- if (getCommand(twoWord)) {
19
- return { path: twoWord, remaining: args.slice(2) };
20
- }
21
- }
22
- if (args.length >= 1) {
23
- const oneWord = args[0];
24
- if (getCommand(oneWord)) {
25
- return { path: oneWord, remaining: args.slice(1) };
17
+ // Try at most 3 words as the command path (e.g. "knowledge search bm25")
18
+ const maxWords = Math.min(args.length, 3);
19
+ for (let n = maxWords; n >= 1; n--) {
20
+ const path = args.slice(0, n).join(" ");
21
+ if (getCommand(path)) {
22
+ return { path, remaining: args.slice(n) };
26
23
  }
27
24
  }
28
25
  return undefined;
@@ -77,18 +74,10 @@ export async function handleCli(args) {
77
74
  case "config":
78
75
  await runSetup("config");
79
76
  return true;
80
- case "task":
81
- case "plan":
82
- case "knowledge":
83
- case "diagram":
84
- case "project":
85
- case "doc":
86
- case "dependency":
87
- case "paths":
88
- case "loop":
89
- case "graph":
90
- return handleDagCommand(command, args.slice(1));
91
77
  default:
78
+ if (KNOWN_DAG_COMMANDS.includes(command)) {
79
+ return handleDagCommand(command, args.slice(1));
80
+ }
92
81
  return false;
93
82
  }
94
83
  }