@rryando/arcs 3.10.0 → 3.11.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 (326) hide show
  1. package/README.md +172 -146
  2. package/dist/cli/agent-registry.d.ts +12 -0
  3. package/dist/cli/agent-registry.d.ts.map +1 -0
  4. package/dist/cli/agent-registry.js +67 -0
  5. package/dist/cli/agent-registry.js.map +1 -0
  6. package/dist/cli/arcs-flash.d.ts +2 -0
  7. package/dist/cli/arcs-flash.d.ts.map +1 -0
  8. package/dist/cli/arcs-flash.js +68 -0
  9. package/dist/cli/arcs-flash.js.map +1 -0
  10. package/dist/cli/arcs-orchestrate-caveman.d.ts +2 -14
  11. package/dist/cli/arcs-orchestrate-caveman.d.ts.map +1 -1
  12. package/dist/cli/arcs-orchestrate-caveman.js +6 -97
  13. package/dist/cli/arcs-orchestrate-caveman.js.map +1 -1
  14. package/dist/cli/arcs-orchestrate.d.ts +1 -1
  15. package/dist/cli/arcs-orchestrate.d.ts.map +1 -1
  16. package/dist/cli/arcs-orchestrate.js +40 -383
  17. package/dist/cli/arcs-orchestrate.js.map +1 -1
  18. package/dist/cli/bundle-installer.d.ts +10 -4
  19. package/dist/cli/bundle-installer.d.ts.map +1 -1
  20. package/dist/cli/bundle-installer.js +99 -6
  21. package/dist/cli/bundle-installer.js.map +1 -1
  22. package/dist/cli/commands/batch.js +4 -0
  23. package/dist/cli/commands/batch.js.map +1 -1
  24. package/dist/cli/commands/hooks.d.ts +36 -0
  25. package/dist/cli/commands/hooks.d.ts.map +1 -0
  26. package/dist/cli/commands/hooks.js +298 -0
  27. package/dist/cli/commands/hooks.js.map +1 -0
  28. package/dist/cli/commands/index.d.ts +2 -0
  29. package/dist/cli/commands/index.d.ts.map +1 -1
  30. package/dist/cli/commands/index.js +2 -0
  31. package/dist/cli/commands/index.js.map +1 -1
  32. package/dist/cli/commands/project.js +27 -0
  33. package/dist/cli/commands/project.js.map +1 -1
  34. package/dist/cli/commands/task.js +16 -1
  35. package/dist/cli/commands/task.js.map +1 -1
  36. package/dist/cli/commands/web.d.ts +2 -0
  37. package/dist/cli/commands/web.d.ts.map +1 -0
  38. package/dist/cli/commands/web.js +56 -0
  39. package/dist/cli/commands/web.js.map +1 -0
  40. package/dist/cli/config.d.ts +32 -0
  41. package/dist/cli/config.d.ts.map +1 -1
  42. package/dist/cli/config.js +56 -0
  43. package/dist/cli/config.js.map +1 -1
  44. package/dist/cli/instructions.d.ts +19 -6
  45. package/dist/cli/instructions.d.ts.map +1 -1
  46. package/dist/cli/instructions.js +62 -32
  47. package/dist/cli/instructions.js.map +1 -1
  48. package/dist/cli/orchestrator-shared-blocks.d.ts +31 -0
  49. package/dist/cli/orchestrator-shared-blocks.d.ts.map +1 -0
  50. package/dist/cli/orchestrator-shared-blocks.js +148 -0
  51. package/dist/cli/orchestrator-shared-blocks.js.map +1 -0
  52. package/dist/cli/setup.d.ts.map +1 -1
  53. package/dist/cli/setup.js +159 -85
  54. package/dist/cli/setup.js.map +1 -1
  55. package/dist/retrieval/index-builder.d.ts.map +1 -1
  56. package/dist/retrieval/index-builder.js +29 -1
  57. package/dist/retrieval/index-builder.js.map +1 -1
  58. package/dist/utils/claude-code-hook-install.d.ts +80 -0
  59. package/dist/utils/claude-code-hook-install.d.ts.map +1 -0
  60. package/dist/utils/claude-code-hook-install.js +146 -0
  61. package/dist/utils/claude-code-hook-install.js.map +1 -0
  62. package/dist/utils/claude-transcript.d.ts +127 -0
  63. package/dist/utils/claude-transcript.d.ts.map +1 -0
  64. package/dist/utils/claude-transcript.js +353 -0
  65. package/dist/utils/claude-transcript.js.map +1 -0
  66. package/dist/utils/diagram-generator.d.ts +1 -1
  67. package/dist/utils/diagram-generator.d.ts.map +1 -1
  68. package/dist/utils/diagram-generator.js +3 -2
  69. package/dist/utils/diagram-generator.js.map +1 -1
  70. package/dist/utils/errors.d.ts +6 -2
  71. package/dist/utils/errors.d.ts.map +1 -1
  72. package/dist/utils/errors.js +12 -0
  73. package/dist/utils/errors.js.map +1 -1
  74. package/dist/utils/hook-token-store.d.ts +22 -0
  75. package/dist/utils/hook-token-store.d.ts.map +1 -0
  76. package/dist/utils/hook-token-store.js +43 -0
  77. package/dist/utils/hook-token-store.js.map +1 -0
  78. package/dist/utils/json-schemas.d.ts +186 -2
  79. package/dist/utils/json-schemas.d.ts.map +1 -1
  80. package/dist/utils/json-schemas.js +48 -4
  81. package/dist/utils/json-schemas.js.map +1 -1
  82. package/dist/utils/knowledge-store.d.ts +7 -1
  83. package/dist/utils/knowledge-store.d.ts.map +1 -1
  84. package/dist/utils/knowledge-store.js +97 -65
  85. package/dist/utils/knowledge-store.js.map +1 -1
  86. package/dist/utils/plan-store.d.ts +8 -0
  87. package/dist/utils/plan-store.d.ts.map +1 -1
  88. package/dist/utils/plan-store.js +98 -59
  89. package/dist/utils/plan-store.js.map +1 -1
  90. package/dist/utils/project-resolver.d.ts +8 -0
  91. package/dist/utils/project-resolver.d.ts.map +1 -1
  92. package/dist/utils/project-resolver.js +7 -2
  93. package/dist/utils/project-resolver.js.map +1 -1
  94. package/dist/utils/session-store.d.ts +113 -0
  95. package/dist/utils/session-store.d.ts.map +1 -0
  96. package/dist/utils/session-store.js +312 -0
  97. package/dist/utils/session-store.js.map +1 -0
  98. package/dist/utils/storage-utils.d.ts +31 -0
  99. package/dist/utils/storage-utils.d.ts.map +1 -1
  100. package/dist/utils/storage-utils.js +116 -5
  101. package/dist/utils/storage-utils.js.map +1 -1
  102. package/dist/utils/task-store.d.ts +7 -0
  103. package/dist/utils/task-store.d.ts.map +1 -1
  104. package/dist/utils/task-store.js +73 -23
  105. package/dist/utils/task-store.js.map +1 -1
  106. package/dist/web-client/assets/GraphCanvas-dNyZ458L.js +1 -0
  107. package/dist/web-client/assets/MarkdownEditor-BmU9mdkN.js +77 -0
  108. package/dist/web-client/assets/abnfDiagram-VRR7QNED-D1BFBoeF.js +1 -0
  109. package/dist/web-client/assets/arc-Bfaogrm1.js +1 -0
  110. package/dist/web-client/assets/architecture-TIHT7OUA-CJqI5wNI.js +1 -0
  111. package/dist/web-client/assets/architectureDiagram-ZJ3FMSHR-CA8hTWUK.js +36 -0
  112. package/dist/web-client/assets/array-BifhSqXX.js +1 -0
  113. package/dist/web-client/assets/blockDiagram-677ZJIJ3-CQpb_KwX.js +132 -0
  114. package/dist/web-client/assets/c4Diagram-LMCZKHZV-BhpHX84V.js +10 -0
  115. package/dist/web-client/assets/channel-C8DlmyVe.js +1 -0
  116. package/dist/web-client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  117. package/dist/web-client/assets/chunk-32BRIVSS-BUusQQa_.js +1 -0
  118. package/dist/web-client/assets/chunk-52WLFC77-nNYwlftl.js +10 -0
  119. package/dist/web-client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  120. package/dist/web-client/assets/chunk-7BUUIJ7U-Bb538aSH.js +1 -0
  121. package/dist/web-client/assets/chunk-C7G6YPKG-D0a-yqnK.js +1 -0
  122. package/dist/web-client/assets/chunk-EX3LRPZG-IDuRMN-4.js +231 -0
  123. package/dist/web-client/assets/chunk-FWX5IMBZ-D_spTcqi.js +2 -0
  124. package/dist/web-client/assets/chunk-HOUHSVGY-C-bcxwZS.js +1 -0
  125. package/dist/web-client/assets/chunk-ICXQ74PX-CjmK2bAM.js +2 -0
  126. package/dist/web-client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  127. package/dist/web-client/assets/chunk-KEIR6QF5-DEvma7oi.js +161 -0
  128. package/dist/web-client/assets/chunk-MOJQB5TN-Bkc08KWY.js +88 -0
  129. package/dist/web-client/assets/chunk-OGEWGWER-BAAYYvG9.js +1 -0
  130. package/dist/web-client/assets/chunk-PUDLZKDR-WXbPY7NM.js +156 -0
  131. package/dist/web-client/assets/chunk-Q4XR5HBZ-DcbnjxQE.js +70 -0
  132. package/dist/web-client/assets/chunk-RYQCIY6F-np2RyIY1.js +1 -0
  133. package/dist/web-client/assets/chunk-V7JOEXUC-C6t75PAp.js +206 -0
  134. package/dist/web-client/assets/chunk-VAUOI2AC-DVrJ0Ic7.js +1 -0
  135. package/dist/web-client/assets/chunk-VR4S4FIN-MOOFvGS0.js +1 -0
  136. package/dist/web-client/assets/chunk-WYO6CB5R-sK7Y2NZD.js +125 -0
  137. package/dist/web-client/assets/chunk-XXDRQBXY-BvKO0v-W.js +1 -0
  138. package/dist/web-client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  139. package/dist/web-client/assets/chunk-ZGVPDNZ5-a13RQsku.js +62 -0
  140. package/dist/web-client/assets/chunk-ZIRB5QZD-BpeS1aZ7.js +32 -0
  141. package/dist/web-client/assets/classDiagram-OUVF2IWQ-p32N1P_G.js +1 -0
  142. package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-p32N1P_G.js +1 -0
  143. package/dist/web-client/assets/cose-bilkent-JH36ORCC-BebHqzgp.js +1 -0
  144. package/dist/web-client/assets/cynefin-VYW2F7L2-D8xaH-wO.js +1 -0
  145. package/dist/web-client/assets/cynefinDiagram-TSTJHNR4-Bt__EqJW.js +62 -0
  146. package/dist/web-client/assets/cytoscape-fcose-peAzqedC.js +1 -0
  147. package/dist/web-client/assets/cytoscape.esm-C3UvhD5t.js +321 -0
  148. package/dist/web-client/assets/dagre-Buvkdvvj.js +1 -0
  149. package/dist/web-client/assets/dagre-VKFMJZFB-Bwgjwflz.js +4 -0
  150. package/dist/web-client/assets/defaultLocale-BFoDCU3G.js +1 -0
  151. package/dist/web-client/assets/diagram-FQU43EPY-CaPDVUq2.js +3 -0
  152. package/dist/web-client/assets/diagram-G47NLZAW-BQLB9YYA.js +24 -0
  153. package/dist/web-client/assets/diagram-NH7WQ7WH-BWo84w8Y.js +24 -0
  154. package/dist/web-client/assets/diagram-OA4YK3LP-bKn6Pz5s.js +30 -0
  155. package/dist/web-client/assets/diagram-WEI45ONY-BRqV5Oy6.js +41 -0
  156. package/dist/web-client/assets/dist-B_J_HbC0.js +1 -0
  157. package/dist/web-client/assets/ebnfDiagram-CCIWWBDH-DhUXL1-7.js +1 -0
  158. package/dist/web-client/assets/erDiagram-Q63AITRT-HXAQQ-_F.js +85 -0
  159. package/dist/web-client/assets/eventmodeling-45OFAUF4-Bj5P8mZJ.js +1 -0
  160. package/dist/web-client/assets/flowDiagram-23GEKE2U-37BztFri.js +1 -0
  161. package/dist/web-client/assets/ganttDiagram-NO4QXBWP-D-Ddf_Ii.js +292 -0
  162. package/dist/web-client/assets/gitGraph-TEB2WS4Q-BmHzs0uF.js +1 -0
  163. package/dist/web-client/assets/gitGraphDiagram-IHSO6WYX-YnQWrlh_.js +106 -0
  164. package/dist/web-client/assets/graphlib-DS17s2tU.js +1 -0
  165. package/dist/web-client/assets/index-3mNPVkix.css +2 -0
  166. package/dist/web-client/assets/index-DCWxuIeQ.js +58 -0
  167. package/dist/web-client/assets/info-DKCQHKI2-DCT_B7RN.js +1 -0
  168. package/dist/web-client/assets/infoDiagram-FWYZ7A6U-D-le1Zhq.js +2 -0
  169. package/dist/web-client/assets/init-C-OQMol4.js +1 -0
  170. package/dist/web-client/assets/ishikawaDiagram-FXEZZL3T-Jr1x2VJB.js +70 -0
  171. package/dist/web-client/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  172. package/dist/web-client/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  173. package/dist/web-client/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  174. package/dist/web-client/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  175. package/dist/web-client/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  176. package/dist/web-client/assets/journeyDiagram-5HDEW3XC-BF9ELxj-.js +139 -0
  177. package/dist/web-client/assets/kanban-definition-HUTT4EX6-C4fJqAxu.js +89 -0
  178. package/dist/web-client/assets/katex-DolUETbr.js +257 -0
  179. package/dist/web-client/assets/line-7N7ikFxa.js +1 -0
  180. package/dist/web-client/assets/linear-DeUiD2wj.js +1 -0
  181. package/dist/web-client/assets/map-BaFkSB1l.js +1 -0
  182. package/dist/web-client/assets/mermaid-parser.core-QbC1icPt.js +7 -0
  183. package/dist/web-client/assets/mermaid.core-C26d_UJm.js +11 -0
  184. package/dist/web-client/assets/mindmap-definition-LN4V7U3C-D6TV1JDf.js +96 -0
  185. package/dist/web-client/assets/ordinal-BDEzSJ7C.js +1 -0
  186. package/dist/web-client/assets/packet-7NZHBO7P-CR1vrGj3.js +1 -0
  187. package/dist/web-client/assets/path-COt_16Va.js +1 -0
  188. package/dist/web-client/assets/pegDiagram-2B236MQR-xOMBBtfV.js +1 -0
  189. package/dist/web-client/assets/pie-RZYD4A2V-BbWuhjwy.js +1 -0
  190. package/dist/web-client/assets/pieDiagram-ENE6RG2P-MsfnsqgW.js +39 -0
  191. package/dist/web-client/assets/quadrantDiagram-ABIIQ3AL-BoI7zKXF.js +7 -0
  192. package/dist/web-client/assets/radar-I7S5WNFK-CbYXKToJ.js +1 -0
  193. package/dist/web-client/assets/railroad-3IZDKUUU-6LxHDkLe.js +1 -0
  194. package/dist/web-client/assets/railroad-abnf-AHOZXSZD-2Dg9wu0J.js +1 -0
  195. package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-C_E2ot0R.js +1 -0
  196. package/dist/web-client/assets/railroad-peg-LSFZ7HO6-Bs9UQR1b.js +1 -0
  197. package/dist/web-client/assets/railroadDiagram-RFXS5EU6-D6RUoUki.js +1 -0
  198. package/dist/web-client/assets/requirementDiagram-TGXJPOKE-B6k4BDpE.js +84 -0
  199. package/dist/web-client/assets/rolldown-runtime-Dd_uD5pT.js +1 -0
  200. package/dist/web-client/assets/rough.esm-By172zw-.js +1 -0
  201. package/dist/web-client/assets/sankeyDiagram-HTMAVEWB-BUDF-UFr.js +40 -0
  202. package/dist/web-client/assets/sequenceDiagram-DBY2YBRQ-D6GqcsUi.js +162 -0
  203. package/dist/web-client/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
  204. package/dist/web-client/assets/src-oBChb5qS.js +1 -0
  205. package/dist/web-client/assets/stateDiagram-2N3HPSRC-WfJCQAK5.js +1 -0
  206. package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-BCMWGnsJ.js +1 -0
  207. package/dist/web-client/assets/swimlanes-5IMT3BWC-BtMo82mC.js +2 -0
  208. package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-DmudmLcK.js +8 -0
  209. package/dist/web-client/assets/timeline-definition-FHXFAJF6-CoAmv2Sn.js +120 -0
  210. package/dist/web-client/assets/treeView-QDETBFTQ-BWsKzE1s.js +1 -0
  211. package/dist/web-client/assets/treemap-6X3UGDF4-i_qGtB3o.js +1 -0
  212. package/dist/web-client/assets/vennDiagram-L72KCM5P-DYkiLe-P.js +34 -0
  213. package/dist/web-client/assets/wardley-OPB4EBWU-Daaqr1Vp.js +1 -0
  214. package/dist/web-client/assets/wardleyDiagram-EHGQE667-Bofbsg3J.js +78 -0
  215. package/dist/web-client/assets/xychartDiagram-FW5EYKEG-KNF4VTfL.js +7 -0
  216. package/dist/web-client/index.html +15 -0
  217. package/dist/web-server/app.d.ts +13 -0
  218. package/dist/web-server/app.d.ts.map +1 -0
  219. package/dist/web-server/app.js +58 -0
  220. package/dist/web-server/app.js.map +1 -0
  221. package/dist/web-server/claude-runner.d.ts +86 -0
  222. package/dist/web-server/claude-runner.d.ts.map +1 -0
  223. package/dist/web-server/claude-runner.js +320 -0
  224. package/dist/web-server/claude-runner.js.map +1 -0
  225. package/dist/web-server/hook-auth.d.ts +12 -0
  226. package/dist/web-server/hook-auth.d.ts.map +1 -0
  227. package/dist/web-server/hook-auth.js +36 -0
  228. package/dist/web-server/hook-auth.js.map +1 -0
  229. package/dist/web-server/index.d.ts +23 -0
  230. package/dist/web-server/index.d.ts.map +1 -0
  231. package/dist/web-server/index.js +49 -0
  232. package/dist/web-server/index.js.map +1 -0
  233. package/dist/web-server/opencode-client.d.ts +123 -0
  234. package/dist/web-server/opencode-client.d.ts.map +1 -0
  235. package/dist/web-server/opencode-client.js +514 -0
  236. package/dist/web-server/opencode-client.js.map +1 -0
  237. package/dist/web-server/respond.d.ts +33 -0
  238. package/dist/web-server/respond.d.ts.map +1 -0
  239. package/dist/web-server/respond.js +79 -0
  240. package/dist/web-server/respond.js.map +1 -0
  241. package/dist/web-server/routes/collections.d.ts +11 -0
  242. package/dist/web-server/routes/collections.d.ts.map +1 -0
  243. package/dist/web-server/routes/collections.js +217 -0
  244. package/dist/web-server/routes/collections.js.map +1 -0
  245. package/dist/web-server/routes/discovery.d.ts +7 -0
  246. package/dist/web-server/routes/discovery.d.ts.map +1 -0
  247. package/dist/web-server/routes/discovery.js +159 -0
  248. package/dist/web-server/routes/discovery.js.map +1 -0
  249. package/dist/web-server/routes/events.d.ts +6 -0
  250. package/dist/web-server/routes/events.d.ts.map +1 -0
  251. package/dist/web-server/routes/events.js +25 -0
  252. package/dist/web-server/routes/events.js.map +1 -0
  253. package/dist/web-server/routes/hook-events.d.ts +19 -0
  254. package/dist/web-server/routes/hook-events.d.ts.map +1 -0
  255. package/dist/web-server/routes/hook-events.js +135 -0
  256. package/dist/web-server/routes/hook-events.js.map +1 -0
  257. package/dist/web-server/routes/projects.d.ts +7 -0
  258. package/dist/web-server/routes/projects.d.ts.map +1 -0
  259. package/dist/web-server/routes/projects.js +272 -0
  260. package/dist/web-server/routes/projects.js.map +1 -0
  261. package/dist/web-server/routes/sessions.d.ts +16 -0
  262. package/dist/web-server/routes/sessions.d.ts.map +1 -0
  263. package/dist/web-server/routes/sessions.js +442 -0
  264. package/dist/web-server/routes/sessions.js.map +1 -0
  265. package/dist/web-server/security.d.ts +7 -0
  266. package/dist/web-server/security.d.ts.map +1 -0
  267. package/dist/web-server/security.js +41 -0
  268. package/dist/web-server/security.js.map +1 -0
  269. package/dist/web-server/static.d.ts +10 -0
  270. package/dist/web-server/static.d.ts.map +1 -0
  271. package/dist/web-server/static.js +36 -0
  272. package/dist/web-server/static.js.map +1 -0
  273. package/dist/web-server/storage.d.ts +17 -0
  274. package/dist/web-server/storage.d.ts.map +1 -0
  275. package/dist/web-server/storage.js +42 -0
  276. package/dist/web-server/storage.js.map +1 -0
  277. package/dist/web-server/watcher.d.ts +37 -0
  278. package/dist/web-server/watcher.d.ts.map +1 -0
  279. package/dist/web-server/watcher.js +181 -0
  280. package/dist/web-server/watcher.js.map +1 -0
  281. package/opencode/arcs/bundle-runtime.json +5 -13
  282. package/opencode/arcs/manifest.json +213 -149
  283. package/opencode/arcs/prompts/arcs-docs.txt +53 -47
  284. package/opencode/arcs/prompts/arcs-flash.txt +190 -0
  285. package/opencode/arcs/prompts/arcs-orchestrate-caveman.txt +116 -422
  286. package/opencode/arcs/prompts/arcs-orchestrate.txt +114 -341
  287. package/opencode/arcs/prompts/code-reviewer.txt +37 -98
  288. package/opencode/arcs/prompts/devil-advocate.txt +44 -115
  289. package/opencode/arcs/prompts/graph-explorer.txt +31 -179
  290. package/opencode/arcs/prompts/software-engineer.txt +24 -6
  291. package/opencode/arcs/prompts/tech-architect.txt +25 -9
  292. package/opencode/arcs/skills/brainstorming/SKILL.md +65 -105
  293. package/opencode/arcs/skills/deep-pr-review/SKILL.md +5 -5
  294. package/opencode/arcs/skills/deep-pr-review/review-template.md +1 -1
  295. package/opencode/arcs/skills/enriching-codegraph-proposals/SKILL.md +17 -18
  296. package/opencode/arcs/skills/executing-plans/SKILL.md +26 -234
  297. package/opencode/arcs/skills/implementation/SKILL.md +61 -0
  298. package/opencode/arcs/skills/init-project/SKILL.md +16 -15
  299. package/opencode/arcs/skills/install-claude-code-hook/SKILL.md +143 -0
  300. package/opencode/arcs/skills/systematic-debugging/SKILL.md +7 -7
  301. package/opencode/arcs/skills/test-driven-development/SKILL.md +1 -1
  302. package/opencode/arcs/skills/to-diagram/SKILL.md +8 -3
  303. package/opencode/arcs/skills/writing-knowledge/SKILL.md +7 -6
  304. package/opencode/arcs/skills/writing-plans/SKILL.md +80 -130
  305. package/opencode/arcs/skills/writing-plans/plan-document-reviewer-prompt.md +38 -30
  306. package/package.json +14 -6
  307. package/scripts/build-opencode-bundle.mjs +22 -7
  308. package/scripts/claude-code-session-hook.mjs +125 -0
  309. package/scripts/deploy-claudecode-bundle.mjs +185 -132
  310. package/scripts/deploy-opencode-bundle.mjs +181 -5
  311. package/scripts/lib/bundle-helpers.mjs +26 -0
  312. package/scripts/lint-bundle.mjs +123 -3
  313. package/skills/explore-dag.md +5 -3
  314. package/skills/init-project.md +27 -26
  315. package/skills/orchestrate.md +29 -13
  316. package/skills/update-docs.md +8 -13
  317. package/opencode/arcs/prompts/docs-researcher.txt +0 -79
  318. package/opencode/arcs/prompts/oncall-ops.txt +0 -85
  319. package/opencode/arcs/skills/code-agent/SKILL.md +0 -63
  320. package/opencode/arcs/skills/executing-plans/code-quality-reviewer-prompt.md +0 -57
  321. package/opencode/arcs/skills/executing-plans/implementer-prompt.md +0 -152
  322. package/opencode/arcs/skills/executing-plans/spec-reviewer-prompt.md +0 -91
  323. package/opencode/arcs/skills/quick-dev/SKILL.md +0 -52
  324. package/opencode/arcs/skills/requesting-code-review/SKILL.md +0 -59
  325. package/opencode/arcs/skills/requesting-code-review/code-reviewer.md +0 -139
  326. package/opencode/arcs/skills/the-ladder/SKILL.md +0 -54
@@ -0,0 +1,312 @@
1
+ /**
2
+ * Session CRUD storage for ARCS projects.
3
+ *
4
+ * Tracks agent runtime sessions (opencode, claude-code) that are attached to a
5
+ * project. Unlike tasks/plans/knowledge these records are volatile runtime
6
+ * state: they carry no markdown mirror and never invalidate the graph cache.
7
+ */
8
+ import { join } from "node:path";
9
+ import { invalidSessionId, invalidSessionLink, itemNotFound, normalizedIdCollision, } from "./errors.js";
10
+ import { withLock } from "./file-lock.js";
11
+ import { readJsonSafe } from "./json.js";
12
+ import { readPlanIndex } from "./plan-store.js";
13
+ import { normalizeIdentifier } from "./slug.js";
14
+ import { ensureDir, fileExists, nowISO, validateSessionLinkedNodeType, validateSessionRuntimeType, validateSessionStatus, writeJson, } from "./storage-utils.js";
15
+ import { getTask } from "./task-store.js";
16
+ export { SESSION_LINKED_NODE_TYPES, SESSION_RUNTIME_TYPES, SESSION_STATUSES, } from "./storage-utils.js";
17
+ // ---------------------------------------------------------------------------
18
+ // Index helpers
19
+ // ---------------------------------------------------------------------------
20
+ export async function readSessionIndex(projectDir) {
21
+ const sessionsDir = join(projectDir, "sessions");
22
+ if (!(await fileExists(sessionsDir))) {
23
+ return { sessions: [] };
24
+ }
25
+ const indexPath = join(sessionsDir, "index.json");
26
+ const index = await readJsonSafe(indexPath);
27
+ if (!index || !Array.isArray(index.sessions)) {
28
+ return { sessions: [] };
29
+ }
30
+ return { sessions: index.sessions };
31
+ }
32
+ function sessionStoreLockPath(projectDir) {
33
+ return join(projectDir, "sessions", ".store");
34
+ }
35
+ async function writeSessionState(projectDir, index) {
36
+ const sessionsDir = join(projectDir, "sessions");
37
+ await ensureDir(sessionsDir);
38
+ await writeJson(join(sessionsDir, "index.json"), index);
39
+ }
40
+ function buildSession(input, normalizedId) {
41
+ const ts = nowISO(input.now);
42
+ return {
43
+ id: normalizedId,
44
+ normalizedId,
45
+ runtimeType: input.runtimeType,
46
+ runtimeSessionId: input.runtimeSessionId,
47
+ status: input.status ?? "active",
48
+ startedAt: input.startedAt ?? ts,
49
+ ...(input.lastMessageAt && { lastMessageAt: input.lastMessageAt }),
50
+ updatedAt: ts,
51
+ ...(input.userEmail && { userEmail: input.userEmail }),
52
+ ...(input.metadata && { metadata: input.metadata }),
53
+ };
54
+ }
55
+ /**
56
+ * Validates a create/upsert payload and returns the canonical normalized id.
57
+ * Runtime session ids are opaque runtime-native strings, so the only structural
58
+ * requirement is that they normalize to a non-empty identifier.
59
+ */
60
+ function validateCreateInput(input) {
61
+ validateSessionRuntimeType(input.runtimeType);
62
+ validateSessionStatus(input.status ?? "active");
63
+ const normalizedId = normalizeIdentifier(input.runtimeSessionId);
64
+ if (!normalizedId) {
65
+ throw invalidSessionId(input.runtimeSessionId);
66
+ }
67
+ return normalizedId;
68
+ }
69
+ /**
70
+ * Resolves a link target against the task/plan store and returns its canonical
71
+ * normalized id. Throws `ITEM_NOT_FOUND` when the target does not exist, so a
72
+ * session can never point at a task/plan that was never created (or was
73
+ * deleted). There is no cross-store validation helper to share here — the
74
+ * task/plan stores are the only source of truth for their own ids.
75
+ */
76
+ async function resolveLinkedNodeId(projectDir, nodeType, nodeId) {
77
+ if (nodeType === "task") {
78
+ return (await getTask(projectDir, nodeId)).normalizedId;
79
+ }
80
+ const normalizedId = normalizeIdentifier(nodeId);
81
+ const { plans } = await readPlanIndex(projectDir);
82
+ const plan = plans.find((p) => p.normalizedId === normalizedId);
83
+ if (!plan) {
84
+ throw itemNotFound("plan", nodeId);
85
+ }
86
+ return plan.normalizedId;
87
+ }
88
+ // ---------------------------------------------------------------------------
89
+ // Public API
90
+ // ---------------------------------------------------------------------------
91
+ async function createSessionUnlocked(projectDir, input) {
92
+ const normalizedId = validateCreateInput(input);
93
+ const index = await readSessionIndex(projectDir);
94
+ if (index.sessions.some((s) => s.normalizedId === normalizedId)) {
95
+ throw normalizedIdCollision("session", input.runtimeSessionId, normalizedId);
96
+ }
97
+ const meta = buildSession(input, normalizedId);
98
+ index.sessions.push(meta);
99
+ await writeSessionState(projectDir, index);
100
+ return meta;
101
+ }
102
+ export async function createSession(projectDir, input) {
103
+ await ensureDir(join(projectDir, "sessions"));
104
+ return withLock(sessionStoreLockPath(projectDir), () => createSessionUnlocked(projectDir, input));
105
+ }
106
+ async function upsertSessionUnlocked(projectDir, input) {
107
+ const normalizedId = validateCreateInput(input);
108
+ const index = await readSessionIndex(projectDir);
109
+ const existingIndex = index.sessions.findIndex((s) => s.normalizedId === normalizedId);
110
+ if (existingIndex === -1) {
111
+ const meta = buildSession(input, normalizedId);
112
+ index.sessions.push(meta);
113
+ await writeSessionState(projectDir, index);
114
+ return meta;
115
+ }
116
+ const existing = index.sessions[existingIndex];
117
+ const merged = {
118
+ ...existing,
119
+ runtimeType: input.runtimeType,
120
+ runtimeSessionId: input.runtimeSessionId,
121
+ ...(input.status && { status: input.status }),
122
+ ...(input.startedAt && { startedAt: input.startedAt }),
123
+ ...(input.lastMessageAt && { lastMessageAt: input.lastMessageAt }),
124
+ ...(input.userEmail && { userEmail: input.userEmail }),
125
+ ...(input.metadata && { metadata: { ...existing.metadata, ...input.metadata } }),
126
+ updatedAt: nowISO(input.now),
127
+ };
128
+ index.sessions[existingIndex] = merged;
129
+ await writeSessionState(projectDir, index);
130
+ return merged;
131
+ }
132
+ /**
133
+ * Create-or-update by runtime session id. Used by runtime discovery bridges,
134
+ * which see the same session many times and must stay idempotent.
135
+ *
136
+ * Deliberately never touches `linkedNodeType`/`linkedNodeId`: discovery
137
+ * refreshes carry status/metadata only and must not silently unlink a session
138
+ * a human just linked. Linkage is `updateSession`-only.
139
+ */
140
+ export async function upsertSession(projectDir, input) {
141
+ await ensureDir(join(projectDir, "sessions"));
142
+ return withLock(sessionStoreLockPath(projectDir), () => upsertSessionUnlocked(projectDir, input));
143
+ }
144
+ export async function listSessions(projectDir, filters) {
145
+ const index = await readSessionIndex(projectDir);
146
+ let sessions = index.sessions;
147
+ if (filters?.status) {
148
+ sessions = sessions.filter((s) => s.status === filters.status);
149
+ }
150
+ if (filters?.runtimeType) {
151
+ sessions = sessions.filter((s) => s.runtimeType === filters.runtimeType);
152
+ }
153
+ return sessions;
154
+ }
155
+ export async function getSession(projectDir, sessionId) {
156
+ const normalizedId = normalizeIdentifier(sessionId);
157
+ const index = await readSessionIndex(projectDir);
158
+ const session = index.sessions.find((s) => s.normalizedId === normalizedId);
159
+ if (!session) {
160
+ throw itemNotFound("session", sessionId);
161
+ }
162
+ return session;
163
+ }
164
+ async function updateSessionUnlocked(projectDir, input) {
165
+ if (input.status !== undefined) {
166
+ validateSessionStatus(input.status);
167
+ }
168
+ const normalizedId = normalizeIdentifier(input.id);
169
+ const index = await readSessionIndex(projectDir);
170
+ const sessionIndex = index.sessions.findIndex((s) => s.normalizedId === normalizedId);
171
+ if (sessionIndex === -1) {
172
+ throw itemNotFound("session", input.id);
173
+ }
174
+ const session = index.sessions[sessionIndex];
175
+ if (input.status !== undefined)
176
+ session.status = input.status;
177
+ if (input.lastMessageAt !== undefined) {
178
+ if (input.lastMessageAt === null || input.lastMessageAt === "") {
179
+ delete session.lastMessageAt;
180
+ }
181
+ else {
182
+ session.lastMessageAt = input.lastMessageAt;
183
+ }
184
+ }
185
+ if (input.userEmail !== undefined) {
186
+ if (input.userEmail === null || input.userEmail === "") {
187
+ delete session.userEmail;
188
+ }
189
+ else {
190
+ session.userEmail = input.userEmail;
191
+ }
192
+ }
193
+ if (input.metadata !== undefined) {
194
+ if (input.metadata === null) {
195
+ delete session.metadata;
196
+ }
197
+ else {
198
+ session.metadata = { ...session.metadata, ...input.metadata };
199
+ }
200
+ }
201
+ if (input.messageQueue !== undefined) {
202
+ if (input.messageQueue === null || input.messageQueue.length === 0) {
203
+ delete session.messageQueue;
204
+ }
205
+ else {
206
+ session.messageQueue = [...input.messageQueue];
207
+ }
208
+ }
209
+ if (input.linkedNodeType !== undefined || input.linkedNodeId !== undefined) {
210
+ const clearing = input.linkedNodeType === null || input.linkedNodeId === null || input.linkedNodeId === "";
211
+ if (clearing) {
212
+ // Unlinking is atomic: both halves go, never one without the other.
213
+ delete session.linkedNodeType;
214
+ delete session.linkedNodeId;
215
+ }
216
+ else {
217
+ const nodeType = input.linkedNodeType ?? session.linkedNodeType;
218
+ const nodeId = input.linkedNodeId ?? session.linkedNodeId;
219
+ if (!nodeType || !nodeId) {
220
+ throw invalidSessionLink("linkedNodeType and linkedNodeId must be set together");
221
+ }
222
+ validateSessionLinkedNodeType(nodeType);
223
+ session.linkedNodeId = await resolveLinkedNodeId(projectDir, nodeType, nodeId);
224
+ session.linkedNodeType = nodeType;
225
+ }
226
+ }
227
+ session.updatedAt = nowISO(input.now);
228
+ index.sessions[sessionIndex] = session;
229
+ await writeSessionState(projectDir, index);
230
+ return session;
231
+ }
232
+ export async function updateSession(projectDir, input) {
233
+ await ensureDir(join(projectDir, "sessions"));
234
+ return withLock(sessionStoreLockPath(projectDir), () => updateSessionUnlocked(projectDir, input));
235
+ }
236
+ function findSessionIndex(index, sessionId) {
237
+ const normalizedId = normalizeIdentifier(sessionId);
238
+ const position = index.sessions.findIndex((s) => s.normalizedId === normalizedId);
239
+ if (position === -1) {
240
+ throw itemNotFound("session", sessionId);
241
+ }
242
+ return position;
243
+ }
244
+ async function enqueueSessionMessageUnlocked(projectDir, sessionId, message) {
245
+ const index = await readSessionIndex(projectDir);
246
+ const position = findSessionIndex(index, sessionId);
247
+ const session = index.sessions[position];
248
+ session.messageQueue = [...(session.messageQueue ?? []), message];
249
+ session.updatedAt = nowISO();
250
+ index.sessions[position] = session;
251
+ await writeSessionState(projectDir, index);
252
+ return session;
253
+ }
254
+ /**
255
+ * Appends a message to a session's pending queue.
256
+ *
257
+ * Deliberately not part of `updateSession`: the generic path shallow-merges
258
+ * whatever the caller passes, which would let two concurrent senders read the
259
+ * same array and write back a queue missing one message. Append happens inside
260
+ * the store lock, so the read-modify-write is atomic.
261
+ *
262
+ * The message is stored verbatim — callers validate content (the route rejects
263
+ * empty strings before it gets here).
264
+ */
265
+ export async function enqueueSessionMessage(projectDir, sessionId, message) {
266
+ await ensureDir(join(projectDir, "sessions"));
267
+ return withLock(sessionStoreLockPath(projectDir), () => enqueueSessionMessageUnlocked(projectDir, sessionId, message));
268
+ }
269
+ async function drainSessionMessageQueueUnlocked(projectDir, sessionId) {
270
+ const index = await readSessionIndex(projectDir);
271
+ const position = findSessionIndex(index, sessionId);
272
+ const session = index.sessions[position];
273
+ const drained = session.messageQueue ?? [];
274
+ if (drained.length === 0) {
275
+ // Nothing pending — the common case at a checkpoint. Skip the write so an
276
+ // idle session's index.json does not churn on every prompt.
277
+ return [];
278
+ }
279
+ delete session.messageQueue;
280
+ session.lastMessageAt = nowISO();
281
+ session.updatedAt = session.lastMessageAt;
282
+ index.sessions[position] = session;
283
+ await writeSessionState(projectDir, index);
284
+ return drained;
285
+ }
286
+ /**
287
+ * Reads and clears a session's pending queue in one lock acquisition.
288
+ *
289
+ * Read-then-clear must be atomic: a checkpoint that read the queue and cleared
290
+ * it in two calls would drop any message enqueued in between. Delivery is
291
+ * at-most-once — a consumer that crashes after draining loses the batch, which
292
+ * is the accepted trade for never replaying a message twice into a session.
293
+ */
294
+ export async function drainSessionMessageQueue(projectDir, sessionId) {
295
+ await ensureDir(join(projectDir, "sessions"));
296
+ return withLock(sessionStoreLockPath(projectDir), () => drainSessionMessageQueueUnlocked(projectDir, sessionId));
297
+ }
298
+ async function deleteSessionUnlocked(projectDir, sessionId) {
299
+ const normalizedId = normalizeIdentifier(sessionId);
300
+ const index = await readSessionIndex(projectDir);
301
+ const session = index.sessions.find((s) => s.normalizedId === normalizedId);
302
+ if (!session) {
303
+ throw itemNotFound("session", sessionId);
304
+ }
305
+ index.sessions = index.sessions.filter((s) => s.normalizedId !== normalizedId);
306
+ await writeSessionState(projectDir, index);
307
+ }
308
+ export async function deleteSession(projectDir, sessionId) {
309
+ await ensureDir(join(projectDir, "sessions"));
310
+ await withLock(sessionStoreLockPath(projectDir), () => deleteSessionUnlocked(projectDir, sessionId));
311
+ }
312
+ //# sourceMappingURL=session-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/utils/session-store.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,17 @@ export declare const TASK_STATUSES: readonly ["backlog", "in_progress", "done",
14
14
  export type TaskStatus = (typeof TASK_STATUSES)[number];
15
15
  export declare const TASK_PRIORITIES: readonly ["critical", "high", "medium", "low"];
16
16
  export type TaskPriority = (typeof TASK_PRIORITIES)[number];
17
+ export declare const SESSION_STATUSES: readonly ["active", "idle", "completed", "failed", "disconnected"];
18
+ export type SessionStatus = (typeof SESSION_STATUSES)[number];
19
+ export declare const SESSION_RUNTIME_TYPES: readonly ["opencode", "claude-code"];
20
+ export type SessionRuntimeType = (typeof SESSION_RUNTIME_TYPES)[number];
21
+ /**
22
+ * DAG node kinds a session may be linked to. Linkage always keys on the
23
+ * task/plan normalized id — never on a diagram node id (T001…), which is
24
+ * regenerated by `arcs diagram sort-metadata`.
25
+ */
26
+ export declare const SESSION_LINKED_NODE_TYPES: readonly ["task", "plan"];
27
+ export type SessionLinkedNodeType = (typeof SESSION_LINKED_NODE_TYPES)[number];
17
28
  export interface FileRef {
18
29
  path: string;
19
30
  anchor?: string;
@@ -30,10 +41,30 @@ export declare function validatePlanStatus(status: string): asserts status is Pl
30
41
  export declare function validateKnowledgeKind(kind: string): asserts kind is KnowledgeKind;
31
42
  export declare function validateTaskStatus(status: string): asserts status is TaskStatus;
32
43
  export declare function validateTaskPriority(priority: string): asserts priority is TaskPriority;
44
+ export declare function validateSessionStatus(status: string): asserts status is SessionStatus;
45
+ export declare function validateSessionRuntimeType(runtimeType: string): asserts runtimeType is SessionRuntimeType;
46
+ export declare function validateSessionLinkedNodeType(nodeType: string): asserts nodeType is SessionLinkedNodeType;
33
47
  /** A valid keyword is a non-empty, lowercase, alpha-numeric-or-dash string. */
34
48
  export declare function sanitizeKeywords(raw: string[]): string[];
35
49
  export declare function fileExists(path: string): Promise<boolean>;
36
50
  export declare function ensureDir(dir: string): Promise<void>;
51
+ /**
52
+ * Durably replace a text file: fsync the staged file, rename atomically, then
53
+ * fsync the parent directory where supported.
54
+ */
55
+ export declare function writeTextAtomic(filePath: string, content: string): Promise<void>;
56
+ export interface FileMutation {
57
+ path: string;
58
+ /** null removes the file. */
59
+ content: string | null;
60
+ }
61
+ /**
62
+ * Best-effort multi-file transaction. Every file replacement is individually
63
+ * atomic/durable; if a later mutation fails, prior files are restored from
64
+ * their snapshots before the error is rethrown. Callers must hold the
65
+ * collection-level advisory lock for the whole operation.
66
+ */
67
+ export declare function writeFilesTransaction(mutations: FileMutation[]): Promise<void>;
37
68
  export declare function writeJson(filePath: string, data: unknown): Promise<void>;
38
69
  export declare function nowISO(override?: string): string;
39
70
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"storage-utils.d.ts","sourceRoot":"","sources":["../../src/utils/storage-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,eAAO,MAAM,aAAa,gFAOhB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,eAAO,MAAM,eAAe,wGASlB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,eAAO,MAAM,mBAAmB,mEAKtB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAMrE,eAAO,MAAM,aAAa,0DAA2D,CAAC;AACtF,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,eAAO,MAAM,eAAe,gDAAiD,CAAC;AAC9E,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAM5D,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CA6B3D;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAI/E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,aAAa,CAIjF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAI/E;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAIvF;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAexD;AAMD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;AAED,wBAAgB,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAMD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAcjE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjF"}
1
+ {"version":3,"file":"storage-utils.d.ts","sourceRoot":"","sources":["../../src/utils/storage-utils.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,11 @@
4
4
  * Filesystem helpers, validation utilities, and common types used by
5
5
  * plan-store, knowledge-store, and task-store modules.
6
6
  */
7
+ import { randomUUID } from "node:crypto";
7
8
  import { constants } from "node:fs";
8
- import { access, mkdir, readFile, writeFile } from "node:fs/promises";
9
- import { invalidFileRef, invalidKeyword, invalidKnowledgeKind, invalidPlanStatus, invalidTaskPriority, invalidTaskStatus, } from "./errors.js";
9
+ import { access, mkdir, open, readFile, rename, rm, unlink } from "node:fs/promises";
10
+ import { dirname } from "node:path";
11
+ import { invalidFileRef, invalidKeyword, invalidKnowledgeKind, invalidPlanStatus, invalidSessionLink, invalidSessionRuntimeType, invalidSessionStatus, invalidTaskPriority, invalidTaskStatus, } from "./errors.js";
10
12
  // ---------------------------------------------------------------------------
11
13
  // Enums — Plans
12
14
  // ---------------------------------------------------------------------------
@@ -39,6 +41,17 @@ export const KNOWLEDGE_AUDIENCES = [
39
41
  // ---------------------------------------------------------------------------
40
42
  export const TASK_STATUSES = ["backlog", "in_progress", "done", "cancelled"];
41
43
  export const TASK_PRIORITIES = ["critical", "high", "medium", "low"];
44
+ // ---------------------------------------------------------------------------
45
+ // Enums — Sessions
46
+ // ---------------------------------------------------------------------------
47
+ export const SESSION_STATUSES = ["active", "idle", "completed", "failed", "disconnected"];
48
+ export const SESSION_RUNTIME_TYPES = ["opencode", "claude-code"];
49
+ /**
50
+ * DAG node kinds a session may be linked to. Linkage always keys on the
51
+ * task/plan normalized id — never on a diagram node id (T001…), which is
52
+ * regenerated by `arcs diagram sort-metadata`.
53
+ */
54
+ export const SESSION_LINKED_NODE_TYPES = ["task", "plan"];
42
55
  /**
43
56
  * Validates and normalizes an array of FileRef objects.
44
57
  * - path: backslashes normalized to forward slashes first, then validated.
@@ -99,6 +112,21 @@ export function validateTaskPriority(priority) {
99
112
  throw invalidTaskPriority(priority);
100
113
  }
101
114
  }
115
+ export function validateSessionStatus(status) {
116
+ if (!SESSION_STATUSES.includes(status)) {
117
+ throw invalidSessionStatus(status);
118
+ }
119
+ }
120
+ export function validateSessionRuntimeType(runtimeType) {
121
+ if (!SESSION_RUNTIME_TYPES.includes(runtimeType)) {
122
+ throw invalidSessionRuntimeType(runtimeType);
123
+ }
124
+ }
125
+ export function validateSessionLinkedNodeType(nodeType) {
126
+ if (!SESSION_LINKED_NODE_TYPES.includes(nodeType)) {
127
+ throw invalidSessionLink(`unknown linked node type "${nodeType}". Must be task or plan.`);
128
+ }
129
+ }
102
130
  /** A valid keyword is a non-empty, lowercase, alpha-numeric-or-dash string. */
103
131
  export function sanitizeKeywords(raw) {
104
132
  const seen = new Set();
@@ -131,8 +159,91 @@ export async function fileExists(path) {
131
159
  export async function ensureDir(dir) {
132
160
  await mkdir(dir, { recursive: true });
133
161
  }
162
+ async function syncDirectory(filePath) {
163
+ let handle;
164
+ try {
165
+ handle = await open(dirname(filePath), "r");
166
+ await handle.sync();
167
+ }
168
+ catch {
169
+ // Directory fsync is unsupported on some platforms/filesystems.
170
+ }
171
+ finally {
172
+ await handle?.close().catch(() => { });
173
+ }
174
+ }
175
+ /**
176
+ * Durably replace a text file: fsync the staged file, rename atomically, then
177
+ * fsync the parent directory where supported.
178
+ */
179
+ export async function writeTextAtomic(filePath, content) {
180
+ const tempPath = `${filePath}.${process.pid}.${randomUUID()}.tmp`;
181
+ let handle;
182
+ try {
183
+ handle = await open(tempPath, "w");
184
+ await handle.writeFile(content, "utf-8");
185
+ await handle.sync();
186
+ await handle.close();
187
+ handle = undefined;
188
+ await rename(tempPath, filePath);
189
+ await syncDirectory(filePath);
190
+ }
191
+ finally {
192
+ await handle?.close().catch(() => { });
193
+ await rm(tempPath, { force: true }).catch(() => { });
194
+ }
195
+ }
196
+ /**
197
+ * Best-effort multi-file transaction. Every file replacement is individually
198
+ * atomic/durable; if a later mutation fails, prior files are restored from
199
+ * their snapshots before the error is rethrown. Callers must hold the
200
+ * collection-level advisory lock for the whole operation.
201
+ */
202
+ export async function writeFilesTransaction(mutations) {
203
+ const snapshots = await Promise.all(mutations.map(async (mutation) => {
204
+ try {
205
+ return {
206
+ path: mutation.path,
207
+ existed: true,
208
+ content: await readFile(mutation.path, "utf-8"),
209
+ };
210
+ }
211
+ catch {
212
+ return { path: mutation.path, existed: false, content: "" };
213
+ }
214
+ }));
215
+ try {
216
+ for (const mutation of mutations) {
217
+ if (mutation.content === null) {
218
+ await unlink(mutation.path).catch((error) => {
219
+ if (!error ||
220
+ typeof error !== "object" ||
221
+ !("code" in error) ||
222
+ error.code !== "ENOENT") {
223
+ throw error;
224
+ }
225
+ });
226
+ await syncDirectory(mutation.path);
227
+ }
228
+ else {
229
+ await writeTextAtomic(mutation.path, mutation.content);
230
+ }
231
+ }
232
+ }
233
+ catch (error) {
234
+ for (const snapshot of snapshots) {
235
+ if (snapshot.existed) {
236
+ await writeTextAtomic(snapshot.path, snapshot.content).catch(() => { });
237
+ }
238
+ else {
239
+ await unlink(snapshot.path).catch(() => { });
240
+ }
241
+ }
242
+ throw error;
243
+ }
244
+ }
134
245
  export async function writeJson(filePath, data) {
135
- await writeFile(filePath, `${JSON.stringify(data, null, 2)}\n`, "utf-8");
246
+ await writeTextAtomic(filePath, `${JSON.stringify(data, null, 2)}\n`);
136
247
  }
137
248
  export function nowISO(override) {
138
249
  return override ?? new Date().toISOString();
@@ -166,10 +277,10 @@ export async function rewriteH1(filePath, newTitle) {
166
277
  const body = await readFile(filePath, "utf-8");
167
278
  if (body.startsWith("# ")) {
168
279
  const rest = body.slice(body.indexOf("\n"));
169
- await writeFile(filePath, `# ${newTitle}${rest}`, "utf-8");
280
+ await writeTextAtomic(filePath, `# ${newTitle}${rest}`);
170
281
  }
171
282
  else {
172
- await writeFile(filePath, `# ${newTitle}\n\n${body}`, "utf-8");
283
+ await writeTextAtomic(filePath, `# ${newTitle}\n\n${body}`);
173
284
  }
174
285
  }
175
286
  //# sourceMappingURL=storage-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage-utils.js","sourceRoot":"","sources":["../../src/utils/storage-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage-utils.js","sourceRoot":"","sources":["../../src/utils/storage-utils.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  */
7
7
  export type { FileRef, TaskPriority, TaskStatus } from "./storage-utils.js";
8
8
  export { TASK_PRIORITIES, TASK_STATUSES } from "./storage-utils.js";
9
+ export type TaskWorkMode = "bounded" | "inspect";
9
10
  export interface TaskMeta {
10
11
  id: string;
11
12
  normalizedId: string;
@@ -23,6 +24,8 @@ export interface TaskMeta {
23
24
  verify?: string;
24
25
  /** Per-node `%% skill:` metadata: which skill to load when executing the task. */
25
26
  skill?: string;
27
+ /** Per-node `%% work-mode:` metadata for implementation task routing. */
28
+ workMode?: TaskWorkMode;
26
29
  createdAt: string;
27
30
  updatedAt: string;
28
31
  }
@@ -40,6 +43,7 @@ export interface CreateTaskInput {
40
43
  acceptance?: string;
41
44
  verify?: string;
42
45
  skill?: string;
46
+ workMode?: TaskWorkMode;
43
47
  now?: string;
44
48
  }
45
49
  export interface UpdateTaskInput {
@@ -58,8 +62,11 @@ export interface UpdateTaskInput {
58
62
  verify?: string | null;
59
63
  /** Pass `null` to clear; pass string to set. */
60
64
  skill?: string | null;
65
+ /** Pass `null` to clear; pass a work mode to set. */
66
+ workMode?: TaskWorkMode | null;
61
67
  now?: string;
62
68
  }
69
+ export declare function normalizeTaskWorkMetadata(task: TaskMeta): TaskMeta;
63
70
  export declare function renderTasksMd(projectDir: string, index: TaskIndex): Promise<void>;
64
71
  export declare function createTask(projectDir: string, input: CreateTaskInput): Promise<TaskMeta>;
65
72
  export declare function listTasks(projectDir: string, filters?: {
@@ -1 +1 @@
1
- {"version":3,"file":"task-store.d.ts","sourceRoot":"","sources":["../../src/utils/task-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-store.d.ts","sourceRoot":"","sources":["../../src/utils/task-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6BH,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEpE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;AAcjD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,oBAAoB,EAAE,UAAU,CAAC;IAChD,QAAQ,EAAE,OAAO,oBAAoB,EAAE,YAAY,CAAC;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,oBAAoB,EAAE,OAAO,EAAE,CAAC;IACrD,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,SAAS;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAMD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,oBAAoB,EAAE,UAAU,CAAC;IACjD,QAAQ,CAAC,EAAE,OAAO,oBAAoB,EAAE,YAAY,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,oBAAoB,EAAE,OAAO,EAAE,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,oBAAoB,EAAE,UAAU,CAAC;IACjD,QAAQ,CAAC,EAAE,OAAO,oBAAoB,EAAE,YAAY,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,oBAAoB,EAAE,OAAO,EAAE,CAAC;IACrD,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA6BD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAQlE;AA+ED,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvF;AAsDD,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,CAG9F;AAED,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,OAAO,oBAAoB,EAAE,UAAU,CAAC;IACjD,QAAQ,CAAC,EAAE,OAAO,oBAAoB,EAAE,YAAY,CAAC;CACtD,GACA,OAAO,CAAC,QAAQ,EAAE,CAAC,CAYrB;AAED,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAQnF;AA4FD,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,CAG9F;AAeD,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlF"}