@rryando/arcs 3.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 (370) hide show
  1. package/README.md +448 -0
  2. package/dist/cli/arcs-orchestrate-caveman.d.ts +16 -0
  3. package/dist/cli/arcs-orchestrate-caveman.d.ts.map +1 -0
  4. package/dist/cli/arcs-orchestrate-caveman.js +109 -0
  5. package/dist/cli/arcs-orchestrate-caveman.js.map +1 -0
  6. package/dist/cli/arcs-orchestrate.d.ts +2 -0
  7. package/dist/cli/arcs-orchestrate.d.ts.map +1 -0
  8. package/dist/cli/arcs-orchestrate.js +431 -0
  9. package/dist/cli/arcs-orchestrate.js.map +1 -0
  10. package/dist/cli/arg-parser.d.ts +20 -0
  11. package/dist/cli/arg-parser.d.ts.map +1 -0
  12. package/dist/cli/arg-parser.js +216 -0
  13. package/dist/cli/arg-parser.js.map +1 -0
  14. package/dist/cli/brief-renderer.d.ts +32 -0
  15. package/dist/cli/brief-renderer.d.ts.map +1 -0
  16. package/dist/cli/brief-renderer.js +67 -0
  17. package/dist/cli/brief-renderer.js.map +1 -0
  18. package/dist/cli/bundle-installer.d.ts +77 -0
  19. package/dist/cli/bundle-installer.d.ts.map +1 -0
  20. package/dist/cli/bundle-installer.js +328 -0
  21. package/dist/cli/bundle-installer.js.map +1 -0
  22. package/dist/cli/command-registry.d.ts +52 -0
  23. package/dist/cli/command-registry.d.ts.map +1 -0
  24. package/dist/cli/command-registry.js +68 -0
  25. package/dist/cli/command-registry.js.map +1 -0
  26. package/dist/cli/commands/batch.d.ts +2 -0
  27. package/dist/cli/commands/batch.d.ts.map +1 -0
  28. package/dist/cli/commands/batch.js +307 -0
  29. package/dist/cli/commands/batch.js.map +1 -0
  30. package/dist/cli/commands/brief.d.ts +2 -0
  31. package/dist/cli/commands/brief.d.ts.map +1 -0
  32. package/dist/cli/commands/brief.js +146 -0
  33. package/dist/cli/commands/brief.js.map +1 -0
  34. package/dist/cli/commands/bundle.d.ts +2 -0
  35. package/dist/cli/commands/bundle.d.ts.map +1 -0
  36. package/dist/cli/commands/bundle.js +90 -0
  37. package/dist/cli/commands/bundle.js.map +1 -0
  38. package/dist/cli/commands/dependency.d.ts +2 -0
  39. package/dist/cli/commands/dependency.d.ts.map +1 -0
  40. package/dist/cli/commands/dependency.js +260 -0
  41. package/dist/cli/commands/dependency.js.map +1 -0
  42. package/dist/cli/commands/diagnostics.d.ts +2 -0
  43. package/dist/cli/commands/diagnostics.d.ts.map +1 -0
  44. package/dist/cli/commands/diagnostics.js +91 -0
  45. package/dist/cli/commands/diagnostics.js.map +1 -0
  46. package/dist/cli/commands/diagram.d.ts +2 -0
  47. package/dist/cli/commands/diagram.d.ts.map +1 -0
  48. package/dist/cli/commands/diagram.js +305 -0
  49. package/dist/cli/commands/diagram.js.map +1 -0
  50. package/dist/cli/commands/done.d.ts +2 -0
  51. package/dist/cli/commands/done.d.ts.map +1 -0
  52. package/dist/cli/commands/done.js +140 -0
  53. package/dist/cli/commands/done.js.map +1 -0
  54. package/dist/cli/commands/graph.d.ts +2 -0
  55. package/dist/cli/commands/graph.d.ts.map +1 -0
  56. package/dist/cli/commands/graph.js +105 -0
  57. package/dist/cli/commands/graph.js.map +1 -0
  58. package/dist/cli/commands/index.d.ts +21 -0
  59. package/dist/cli/commands/index.d.ts.map +1 -0
  60. package/dist/cli/commands/index.js +22 -0
  61. package/dist/cli/commands/index.js.map +1 -0
  62. package/dist/cli/commands/knowledge-search.d.ts +2 -0
  63. package/dist/cli/commands/knowledge-search.d.ts.map +1 -0
  64. package/dist/cli/commands/knowledge-search.js +43 -0
  65. package/dist/cli/commands/knowledge-search.js.map +1 -0
  66. package/dist/cli/commands/knowledge.d.ts +2 -0
  67. package/dist/cli/commands/knowledge.d.ts.map +1 -0
  68. package/dist/cli/commands/knowledge.js +416 -0
  69. package/dist/cli/commands/knowledge.js.map +1 -0
  70. package/dist/cli/commands/loop.d.ts +2 -0
  71. package/dist/cli/commands/loop.d.ts.map +1 -0
  72. package/dist/cli/commands/loop.js +192 -0
  73. package/dist/cli/commands/loop.js.map +1 -0
  74. package/dist/cli/commands/maintenance.d.ts +2 -0
  75. package/dist/cli/commands/maintenance.d.ts.map +1 -0
  76. package/dist/cli/commands/maintenance.js +231 -0
  77. package/dist/cli/commands/maintenance.js.map +1 -0
  78. package/dist/cli/commands/next.d.ts +2 -0
  79. package/dist/cli/commands/next.d.ts.map +1 -0
  80. package/dist/cli/commands/next.js +116 -0
  81. package/dist/cli/commands/next.js.map +1 -0
  82. package/dist/cli/commands/plan.d.ts +2 -0
  83. package/dist/cli/commands/plan.d.ts.map +1 -0
  84. package/dist/cli/commands/plan.js +340 -0
  85. package/dist/cli/commands/plan.js.map +1 -0
  86. package/dist/cli/commands/project-updates.d.ts +2 -0
  87. package/dist/cli/commands/project-updates.d.ts.map +1 -0
  88. package/dist/cli/commands/project-updates.js +243 -0
  89. package/dist/cli/commands/project-updates.js.map +1 -0
  90. package/dist/cli/commands/project.d.ts +2 -0
  91. package/dist/cli/commands/project.d.ts.map +1 -0
  92. package/dist/cli/commands/project.js +362 -0
  93. package/dist/cli/commands/project.js.map +1 -0
  94. package/dist/cli/commands/remember.d.ts +2 -0
  95. package/dist/cli/commands/remember.d.ts.map +1 -0
  96. package/dist/cli/commands/remember.js +70 -0
  97. package/dist/cli/commands/remember.js.map +1 -0
  98. package/dist/cli/commands/status.d.ts +2 -0
  99. package/dist/cli/commands/status.d.ts.map +1 -0
  100. package/dist/cli/commands/status.js +104 -0
  101. package/dist/cli/commands/status.js.map +1 -0
  102. package/dist/cli/commands/task.d.ts +6 -0
  103. package/dist/cli/commands/task.d.ts.map +1 -0
  104. package/dist/cli/commands/task.js +361 -0
  105. package/dist/cli/commands/task.js.map +1 -0
  106. package/dist/cli/commands/utility.d.ts +9 -0
  107. package/dist/cli/commands/utility.d.ts.map +1 -0
  108. package/dist/cli/commands/utility.js +302 -0
  109. package/dist/cli/commands/utility.js.map +1 -0
  110. package/dist/cli/config.d.ts +42 -0
  111. package/dist/cli/config.d.ts.map +1 -0
  112. package/dist/cli/config.js +134 -0
  113. package/dist/cli/config.js.map +1 -0
  114. package/dist/cli/dag-commands.d.ts +7 -0
  115. package/dist/cli/dag-commands.d.ts.map +1 -0
  116. package/dist/cli/dag-commands.js +152 -0
  117. package/dist/cli/dag-commands.js.map +1 -0
  118. package/dist/cli/diagram-renderer.d.ts +26 -0
  119. package/dist/cli/diagram-renderer.d.ts.map +1 -0
  120. package/dist/cli/diagram-renderer.js +118 -0
  121. package/dist/cli/diagram-renderer.js.map +1 -0
  122. package/dist/cli/help-generator.d.ts +21 -0
  123. package/dist/cli/help-generator.d.ts.map +1 -0
  124. package/dist/cli/help-generator.js +100 -0
  125. package/dist/cli/help-generator.js.map +1 -0
  126. package/dist/cli/index.d.ts +8 -0
  127. package/dist/cli/index.d.ts.map +1 -0
  128. package/dist/cli/index.js +95 -0
  129. package/dist/cli/index.js.map +1 -0
  130. package/dist/cli/instructions.d.ts +53 -0
  131. package/dist/cli/instructions.d.ts.map +1 -0
  132. package/dist/cli/instructions.js +219 -0
  133. package/dist/cli/instructions.js.map +1 -0
  134. package/dist/cli/lean-output.d.ts +15 -0
  135. package/dist/cli/lean-output.d.ts.map +1 -0
  136. package/dist/cli/lean-output.js +66 -0
  137. package/dist/cli/lean-output.js.map +1 -0
  138. package/dist/cli/md-renderer.d.ts +6 -0
  139. package/dist/cli/md-renderer.d.ts.map +1 -0
  140. package/dist/cli/md-renderer.js +396 -0
  141. package/dist/cli/md-renderer.js.map +1 -0
  142. package/dist/cli/output-envelope.d.ts +15 -0
  143. package/dist/cli/output-envelope.d.ts.map +1 -0
  144. package/dist/cli/output-envelope.js +61 -0
  145. package/dist/cli/output-envelope.js.map +1 -0
  146. package/dist/cli/setup.d.ts +11 -0
  147. package/dist/cli/setup.d.ts.map +1 -0
  148. package/dist/cli/setup.js +415 -0
  149. package/dist/cli/setup.js.map +1 -0
  150. package/dist/cli/status-dashboard.d.ts +5 -0
  151. package/dist/cli/status-dashboard.d.ts.map +1 -0
  152. package/dist/cli/status-dashboard.js +248 -0
  153. package/dist/cli/status-dashboard.js.map +1 -0
  154. package/dist/index.d.ts +3 -0
  155. package/dist/index.d.ts.map +1 -0
  156. package/dist/index.js +25 -0
  157. package/dist/index.js.map +1 -0
  158. package/dist/retrieval/bm25.d.ts +23 -0
  159. package/dist/retrieval/bm25.d.ts.map +1 -0
  160. package/dist/retrieval/bm25.js +92 -0
  161. package/dist/retrieval/bm25.js.map +1 -0
  162. package/dist/retrieval/cross-project-search.d.ts +30 -0
  163. package/dist/retrieval/cross-project-search.d.ts.map +1 -0
  164. package/dist/retrieval/cross-project-search.js +109 -0
  165. package/dist/retrieval/cross-project-search.js.map +1 -0
  166. package/dist/retrieval/graph-builder.d.ts +6 -0
  167. package/dist/retrieval/graph-builder.d.ts.map +1 -0
  168. package/dist/retrieval/graph-builder.js +196 -0
  169. package/dist/retrieval/graph-builder.js.map +1 -0
  170. package/dist/retrieval/graph-cache.d.ts +15 -0
  171. package/dist/retrieval/graph-cache.d.ts.map +1 -0
  172. package/dist/retrieval/graph-cache.js +66 -0
  173. package/dist/retrieval/graph-cache.js.map +1 -0
  174. package/dist/retrieval/graph-invalidate.d.ts +18 -0
  175. package/dist/retrieval/graph-invalidate.d.ts.map +1 -0
  176. package/dist/retrieval/graph-invalidate.js +23 -0
  177. package/dist/retrieval/graph-invalidate.js.map +1 -0
  178. package/dist/retrieval/graph-retrieval.d.ts +24 -0
  179. package/dist/retrieval/graph-retrieval.d.ts.map +1 -0
  180. package/dist/retrieval/graph-retrieval.js +165 -0
  181. package/dist/retrieval/graph-retrieval.js.map +1 -0
  182. package/dist/retrieval/graph-traverse.d.ts +3 -0
  183. package/dist/retrieval/graph-traverse.d.ts.map +1 -0
  184. package/dist/retrieval/graph-traverse.js +53 -0
  185. package/dist/retrieval/graph-traverse.js.map +1 -0
  186. package/dist/retrieval/graph-types.d.ts +37 -0
  187. package/dist/retrieval/graph-types.d.ts.map +1 -0
  188. package/dist/retrieval/graph-types.js +12 -0
  189. package/dist/retrieval/graph-types.js.map +1 -0
  190. package/dist/retrieval/index-builder.d.ts +21 -0
  191. package/dist/retrieval/index-builder.d.ts.map +1 -0
  192. package/dist/retrieval/index-builder.js +94 -0
  193. package/dist/retrieval/index-builder.js.map +1 -0
  194. package/dist/retrieval/knowledge-selection.d.ts +7 -0
  195. package/dist/retrieval/knowledge-selection.d.ts.map +1 -0
  196. package/dist/retrieval/knowledge-selection.js +80 -0
  197. package/dist/retrieval/knowledge-selection.js.map +1 -0
  198. package/dist/retrieval/task-scoped.d.ts +23 -0
  199. package/dist/retrieval/task-scoped.d.ts.map +1 -0
  200. package/dist/retrieval/task-scoped.js +51 -0
  201. package/dist/retrieval/task-scoped.js.map +1 -0
  202. package/dist/utils/content-assembly.d.ts +44 -0
  203. package/dist/utils/content-assembly.d.ts.map +1 -0
  204. package/dist/utils/content-assembly.js +101 -0
  205. package/dist/utils/content-assembly.js.map +1 -0
  206. package/dist/utils/dag.d.ts +28 -0
  207. package/dist/utils/dag.d.ts.map +1 -0
  208. package/dist/utils/dag.js +68 -0
  209. package/dist/utils/dag.js.map +1 -0
  210. package/dist/utils/diagram-generator.d.ts +17 -0
  211. package/dist/utils/diagram-generator.d.ts.map +1 -0
  212. package/dist/utils/diagram-generator.js +38 -0
  213. package/dist/utils/diagram-generator.js.map +1 -0
  214. package/dist/utils/errors.d.ts +40 -0
  215. package/dist/utils/errors.d.ts.map +1 -0
  216. package/dist/utils/errors.js +83 -0
  217. package/dist/utils/errors.js.map +1 -0
  218. package/dist/utils/file-lock.d.ts +13 -0
  219. package/dist/utils/file-lock.d.ts.map +1 -0
  220. package/dist/utils/file-lock.js +80 -0
  221. package/dist/utils/file-lock.js.map +1 -0
  222. package/dist/utils/git.d.ts +14 -0
  223. package/dist/utils/git.d.ts.map +1 -0
  224. package/dist/utils/git.js +56 -0
  225. package/dist/utils/git.js.map +1 -0
  226. package/dist/utils/graphify-knowledge.d.ts +6 -0
  227. package/dist/utils/graphify-knowledge.d.ts.map +1 -0
  228. package/dist/utils/graphify-knowledge.js +60 -0
  229. package/dist/utils/graphify-knowledge.js.map +1 -0
  230. package/dist/utils/graphify.d.ts +49 -0
  231. package/dist/utils/graphify.d.ts.map +1 -0
  232. package/dist/utils/graphify.js +306 -0
  233. package/dist/utils/graphify.js.map +1 -0
  234. package/dist/utils/json-schemas.d.ts +723 -0
  235. package/dist/utils/json-schemas.d.ts.map +1 -0
  236. package/dist/utils/json-schemas.js +147 -0
  237. package/dist/utils/json-schemas.js.map +1 -0
  238. package/dist/utils/json.d.ts +15 -0
  239. package/dist/utils/json.d.ts.map +1 -0
  240. package/dist/utils/json.js +39 -0
  241. package/dist/utils/json.js.map +1 -0
  242. package/dist/utils/knowledge-store.d.ts +49 -0
  243. package/dist/utils/knowledge-store.d.ts.map +1 -0
  244. package/dist/utils/knowledge-store.js +191 -0
  245. package/dist/utils/knowledge-store.js.map +1 -0
  246. package/dist/utils/loop-state.d.ts +51 -0
  247. package/dist/utils/loop-state.d.ts.map +1 -0
  248. package/dist/utils/loop-state.js +123 -0
  249. package/dist/utils/loop-state.js.map +1 -0
  250. package/dist/utils/paths.d.ts +16 -0
  251. package/dist/utils/paths.d.ts.map +1 -0
  252. package/dist/utils/paths.js +66 -0
  253. package/dist/utils/paths.js.map +1 -0
  254. package/dist/utils/plan-store.d.ts +46 -0
  255. package/dist/utils/plan-store.d.ts.map +1 -0
  256. package/dist/utils/plan-store.js +184 -0
  257. package/dist/utils/plan-store.js.map +1 -0
  258. package/dist/utils/project-documents.d.ts +20 -0
  259. package/dist/utils/project-documents.d.ts.map +1 -0
  260. package/dist/utils/project-documents.js +10 -0
  261. package/dist/utils/project-documents.js.map +1 -0
  262. package/dist/utils/project-memory.d.ts +16 -0
  263. package/dist/utils/project-memory.d.ts.map +1 -0
  264. package/dist/utils/project-memory.js +16 -0
  265. package/dist/utils/project-memory.js.map +1 -0
  266. package/dist/utils/project-resolver.d.ts +28 -0
  267. package/dist/utils/project-resolver.d.ts.map +1 -0
  268. package/dist/utils/project-resolver.js +119 -0
  269. package/dist/utils/project-resolver.js.map +1 -0
  270. package/dist/utils/quick-scan.d.ts +13 -0
  271. package/dist/utils/quick-scan.d.ts.map +1 -0
  272. package/dist/utils/quick-scan.js +156 -0
  273. package/dist/utils/quick-scan.js.map +1 -0
  274. package/dist/utils/schemas.d.ts +13 -0
  275. package/dist/utils/schemas.d.ts.map +1 -0
  276. package/dist/utils/schemas.js +6 -0
  277. package/dist/utils/schemas.js.map +1 -0
  278. package/dist/utils/slug.d.ts +10 -0
  279. package/dist/utils/slug.d.ts.map +1 -0
  280. package/dist/utils/slug.js +18 -0
  281. package/dist/utils/slug.js.map +1 -0
  282. package/dist/utils/stdin.d.ts +6 -0
  283. package/dist/utils/stdin.d.ts.map +1 -0
  284. package/dist/utils/stdin.js +25 -0
  285. package/dist/utils/stdin.js.map +1 -0
  286. package/dist/utils/storage-utils.d.ts +48 -0
  287. package/dist/utils/storage-utils.d.ts.map +1 -0
  288. package/dist/utils/storage-utils.js +175 -0
  289. package/dist/utils/storage-utils.js.map +1 -0
  290. package/dist/utils/task-store.d.ts +49 -0
  291. package/dist/utils/task-store.d.ts.map +1 -0
  292. package/dist/utils/task-store.js +178 -0
  293. package/dist/utils/task-store.js.map +1 -0
  294. package/dist/utils/template.d.ts +15 -0
  295. package/dist/utils/template.d.ts.map +1 -0
  296. package/dist/utils/template.js +27 -0
  297. package/dist/utils/template.js.map +1 -0
  298. package/dist/utils/tool-response.d.ts +37 -0
  299. package/dist/utils/tool-response.d.ts.map +1 -0
  300. package/dist/utils/tool-response.js +44 -0
  301. package/dist/utils/tool-response.js.map +1 -0
  302. package/dist/utils/workflow-policy.d.ts +50 -0
  303. package/dist/utils/workflow-policy.d.ts.map +1 -0
  304. package/dist/utils/workflow-policy.js +111 -0
  305. package/dist/utils/workflow-policy.js.map +1 -0
  306. package/dist/utils/workspace-match.d.ts +35 -0
  307. package/dist/utils/workspace-match.d.ts.map +1 -0
  308. package/dist/utils/workspace-match.js +58 -0
  309. package/dist/utils/workspace-match.js.map +1 -0
  310. package/opencode/arcs/.opencode/plugins/arcs.js +348 -0
  311. package/opencode/arcs/bundle-runtime.json +68 -0
  312. package/opencode/arcs/manifest.json +279 -0
  313. package/opencode/arcs/prompts/arcs-docs.txt +124 -0
  314. package/opencode/arcs/prompts/arcs-orchestrate-caveman.txt +529 -0
  315. package/opencode/arcs/prompts/arcs-orchestrate.txt +437 -0
  316. package/opencode/arcs/prompts/code-reviewer.txt +55 -0
  317. package/opencode/arcs/prompts/devil-advocate.txt +121 -0
  318. package/opencode/arcs/prompts/docs-researcher.txt +54 -0
  319. package/opencode/arcs/prompts/oncall-ops.txt +54 -0
  320. package/opencode/arcs/prompts/qa-analyst.txt +54 -0
  321. package/opencode/arcs/prompts/software-engineer.txt +48 -0
  322. package/opencode/arcs/prompts/system-architect.txt +60 -0
  323. package/opencode/arcs/prompts/tech-architect.txt +54 -0
  324. package/opencode/arcs/skills/brainstorming/SKILL.md +144 -0
  325. package/opencode/arcs/skills/brainstorming/scripts/frame-template.html +214 -0
  326. package/opencode/arcs/skills/brainstorming/scripts/helper.js +88 -0
  327. package/opencode/arcs/skills/brainstorming/scripts/server.js +338 -0
  328. package/opencode/arcs/skills/brainstorming/scripts/start-server.sh +137 -0
  329. package/opencode/arcs/skills/brainstorming/scripts/stop-server.sh +31 -0
  330. package/opencode/arcs/skills/brainstorming/spec-document-reviewer-prompt.md +50 -0
  331. package/opencode/arcs/skills/brainstorming/visual-companion.md +277 -0
  332. package/opencode/arcs/skills/caveman-commit/SKILL.md +51 -0
  333. package/opencode/arcs/skills/code-agent/SKILL.md +58 -0
  334. package/opencode/arcs/skills/deep-pr-review/SKILL.md +191 -0
  335. package/opencode/arcs/skills/deep-pr-review/graphify-diff.md +102 -0
  336. package/opencode/arcs/skills/deep-pr-review/review-template.md +69 -0
  337. package/opencode/arcs/skills/executing-plans/SKILL.md +91 -0
  338. package/opencode/arcs/skills/init-project/SKILL.md +150 -0
  339. package/opencode/arcs/skills/quick-dev/SKILL.md +47 -0
  340. package/opencode/arcs/skills/requesting-code-review/SKILL.md +47 -0
  341. package/opencode/arcs/skills/requesting-code-review/code-reviewer.md +179 -0
  342. package/opencode/arcs/skills/subagent-driven-development/SKILL.md +162 -0
  343. package/opencode/arcs/skills/subagent-driven-development/code-quality-reviewer-prompt.md +53 -0
  344. package/opencode/arcs/skills/subagent-driven-development/implementer-prompt.md +148 -0
  345. package/opencode/arcs/skills/subagent-driven-development/spec-reviewer-prompt.md +85 -0
  346. package/opencode/arcs/skills/systematic-debugging/SKILL.md +174 -0
  347. package/opencode/arcs/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  348. package/opencode/arcs/skills/systematic-debugging/condition-based-waiting.md +115 -0
  349. package/opencode/arcs/skills/systematic-debugging/defense-in-depth.md +122 -0
  350. package/opencode/arcs/skills/systematic-debugging/find-polluter.sh +63 -0
  351. package/opencode/arcs/skills/systematic-debugging/phases-reference.md +168 -0
  352. package/opencode/arcs/skills/systematic-debugging/root-cause-tracing.md +169 -0
  353. package/opencode/arcs/skills/test-driven-development/SKILL.md +72 -0
  354. package/opencode/arcs/skills/test-driven-development/tdd-rationalizations-and-examples.md +157 -0
  355. package/opencode/arcs/skills/test-driven-development/testing-anti-patterns.md +299 -0
  356. package/opencode/arcs/skills/to-diagram/SKILL.md +235 -0
  357. package/opencode/arcs/skills/to-diagram/scripts/manage-diagram.mjs +963 -0
  358. package/opencode/arcs/skills/writing-plans/SKILL.md +179 -0
  359. package/opencode/arcs/skills/writing-plans/plan-document-reviewer-prompt.md +52 -0
  360. package/package.json +60 -0
  361. package/scripts/arcs-cli.mjs +45 -0
  362. package/skills/explore-dag.md +57 -0
  363. package/skills/init-project.md +105 -0
  364. package/skills/orchestrate.md +94 -0
  365. package/skills/update-docs.md +72 -0
  366. package/templates/dependency.md.tmpl +9 -0
  367. package/templates/knowledge.md.tmpl +15 -0
  368. package/templates/project-meta.json.tmpl +13 -0
  369. package/templates/project.md.tmpl +11 -0
  370. package/templates/task.md.tmpl +9 -0
@@ -0,0 +1,340 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Plan commands — registry-based
3
+ // ---------------------------------------------------------------------------
4
+ import { existsSync } from "node:fs";
5
+ import { readFile, writeFile } from "node:fs/promises";
6
+ import { resolve } from "node:path";
7
+ import { getProjectDir } from "../../utils/paths.js";
8
+ import { createPlan, deletePlan, PLAN_STATUSES, readPlanIndex, updatePlan, } from "../../utils/project-memory.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
+ function requireProject(slug) {
14
+ const dir = getProjectDir(slug);
15
+ if (!existsSync(dir)) {
16
+ return failure(ERROR_CODES.PROJECT_NOT_FOUND, `Project "${slug}" not found`, {
17
+ hint: "Run 'arcs project list' to see available projects.",
18
+ });
19
+ }
20
+ return dir;
21
+ }
22
+ // --- plan list ---
23
+ defineCommand({
24
+ path: "plan list",
25
+ description: "List plans for a project",
26
+ params: {
27
+ slug: { type: "string", required: true, positional: 0, description: "Project slug" },
28
+ status: {
29
+ type: "string",
30
+ description: "Filter by status",
31
+ enum: ["proposed", "planned", "in_progress", "done", "archived"],
32
+ },
33
+ keywords: { type: "string", description: "Comma-separated keywords to filter by" },
34
+ fields: {
35
+ type: "string",
36
+ required: false,
37
+ description: "Comma-separated field names to include in output",
38
+ },
39
+ },
40
+ handler: handlePlanList,
41
+ });
42
+ async function handlePlanList(params, _flags) {
43
+ const slug = params.slug;
44
+ const status = params.status;
45
+ const keywordsRaw = params.keywords;
46
+ const fields = params.fields;
47
+ const result = requireProject(slug);
48
+ if (typeof result !== "string")
49
+ return result;
50
+ const projectDir = result;
51
+ const planIndex = await readPlanIndex(projectDir);
52
+ let plans = planIndex.plans;
53
+ if (status) {
54
+ plans = plans.filter((p) => p.status === status);
55
+ }
56
+ if (keywordsRaw) {
57
+ const keywords = keywordsRaw.split(",").map((k) => k.trim().toLowerCase());
58
+ plans = plans.filter((p) => p.keywords?.some((pk) => keywords.includes(pk.toLowerCase())));
59
+ }
60
+ if (fields) {
61
+ const keys = fields.split(",").map((k) => k.trim());
62
+ const projected = plans.map((item) => {
63
+ const out = {};
64
+ for (const key of keys) {
65
+ if (key in item)
66
+ out[key] = item[key];
67
+ }
68
+ return out;
69
+ });
70
+ return success(projected);
71
+ }
72
+ return success(plans);
73
+ }
74
+ // --- plan get ---
75
+ defineCommand({
76
+ path: "plan get",
77
+ description: "Get plan details",
78
+ params: {
79
+ slug: { type: "string", required: true, positional: 0, description: "Project slug" },
80
+ planId: { type: "string", required: true, positional: 1, description: "Plan ID" },
81
+ body: { type: "boolean", description: "Include plan body content" },
82
+ },
83
+ handler: handlePlanGet,
84
+ });
85
+ async function handlePlanGet(params, _flags) {
86
+ const slug = params.slug;
87
+ const planId = params.planId;
88
+ const includeBody = params.body;
89
+ const result = requireProject(slug);
90
+ if (typeof result !== "string")
91
+ return result;
92
+ const projectDir = result;
93
+ const planIndex = await readPlanIndex(projectDir);
94
+ const plan = planIndex.plans.find((p) => p.id === planId || p.normalizedId === planId);
95
+ if (!plan) {
96
+ return failure(ERROR_CODES.ENTITY_NOT_FOUND, `Plan "${planId}" not found`, {
97
+ hint: `Run 'arcs plan list ${slug}' to see available plans.`,
98
+ });
99
+ }
100
+ if (includeBody) {
101
+ const bodyPath = resolve(projectDir, plan.file);
102
+ let body;
103
+ if (existsSync(bodyPath)) {
104
+ body = await readFile(bodyPath, "utf-8");
105
+ }
106
+ return success({ meta: plan, body });
107
+ }
108
+ return success(plan);
109
+ }
110
+ // --- plan create ---
111
+ defineCommand({
112
+ path: "plan create",
113
+ description: "Create a new plan",
114
+ mutation: true,
115
+ params: {
116
+ slug: { type: "string", required: true, positional: 0, description: "Project slug" },
117
+ title: { type: "string", required: true, positional: 1, description: "Plan title" },
118
+ status: {
119
+ type: "string",
120
+ description: "Initial status (default: proposed)",
121
+ enum: [...PLAN_STATUSES],
122
+ },
123
+ summary: { type: "string", description: "Plan summary" },
124
+ keywords: { type: "string", description: "Comma-separated keywords" },
125
+ body: { type: "string", description: "Inline markdown body content" },
126
+ "body-file": { type: "string", description: "Path to markdown file with plan body" },
127
+ },
128
+ handler: handlePlanCreate,
129
+ });
130
+ async function handlePlanCreate(params, flags) {
131
+ const slug = params.slug;
132
+ const title = params.title;
133
+ const status = params.status ?? "proposed";
134
+ const summary = params.summary;
135
+ const keywordsRaw = params.keywords;
136
+ const bodyInline = params.body;
137
+ const bodyFile = params["body-file"];
138
+ const keywords = keywordsRaw ? keywordsRaw.split(",").map((k) => k.trim()) : [];
139
+ const result = requireProject(slug);
140
+ if (typeof result !== "string")
141
+ return result;
142
+ const projectDir = result;
143
+ if (bodyFile && !existsSync(bodyFile)) {
144
+ return failure(ERROR_CODES.ENTITY_NOT_FOUND, `Body file not found: ${bodyFile}`);
145
+ }
146
+ const id = normalizeIdentifier(title);
147
+ if (flags.dryRun) {
148
+ return success({
149
+ dryRun: true,
150
+ wouldCreate: {
151
+ title,
152
+ slug,
153
+ id,
154
+ status,
155
+ summary,
156
+ keywords,
157
+ hasBody: !!(bodyInline || bodyFile),
158
+ },
159
+ });
160
+ }
161
+ // Resolve body content: inline > file > undefined
162
+ let content;
163
+ if (bodyInline) {
164
+ content = bodyInline;
165
+ }
166
+ else if (bodyFile) {
167
+ content = await readFile(bodyFile, "utf-8");
168
+ }
169
+ try {
170
+ const meta = await createPlan(projectDir, {
171
+ id,
172
+ title,
173
+ status,
174
+ keywords,
175
+ summary,
176
+ ...(content && { content }),
177
+ });
178
+ return success(meta);
179
+ }
180
+ catch (err) {
181
+ return failure("plan_create_error", err instanceof Error ? err.message : String(err));
182
+ }
183
+ }
184
+ // --- plan update-meta ---
185
+ defineCommand({
186
+ path: "plan update-meta",
187
+ description: "Update plan metadata",
188
+ mutation: true,
189
+ params: {
190
+ slug: { type: "string", required: true, positional: 0, description: "Project slug" },
191
+ planId: { type: "string", required: true, positional: 1, description: "Plan ID" },
192
+ title: { type: "string", description: "New title" },
193
+ status: {
194
+ type: "string",
195
+ description: "New status",
196
+ enum: ["proposed", "planned", "in_progress", "done", "archived"],
197
+ },
198
+ summary: { type: "string", description: "New summary" },
199
+ keywords: { type: "string", description: "Comma-separated keywords" },
200
+ },
201
+ handler: handlePlanUpdateMeta,
202
+ });
203
+ async function handlePlanUpdateMeta(params, flags) {
204
+ const slug = params.slug;
205
+ const planId = params.planId;
206
+ const title = params.title;
207
+ const status = params.status;
208
+ const summary = params.summary;
209
+ const keywordsRaw = params.keywords;
210
+ const keywords = keywordsRaw ? keywordsRaw.split(",").map((k) => k.trim()) : undefined;
211
+ const result = requireProject(slug);
212
+ if (typeof result !== "string")
213
+ return result;
214
+ const projectDir = result;
215
+ if (flags.dryRun) {
216
+ return success({
217
+ dryRun: true,
218
+ wouldUpdate: { planId, slug, title, status, summary, keywords },
219
+ });
220
+ }
221
+ try {
222
+ const meta = await updatePlan(projectDir, {
223
+ id: planId,
224
+ title,
225
+ status,
226
+ summary,
227
+ keywords,
228
+ });
229
+ return success(meta);
230
+ }
231
+ catch (err) {
232
+ return failure("plan_update_error", err instanceof Error ? err.message : String(err));
233
+ }
234
+ }
235
+ // --- plan update-body ---
236
+ defineCommand({
237
+ path: "plan update-body",
238
+ description: "Update plan body content",
239
+ mutation: true,
240
+ params: {
241
+ slug: { type: "string", required: true, positional: 0, description: "Project slug" },
242
+ planId: { type: "string", required: true, positional: 1, description: "Plan ID" },
243
+ body: { type: "string", required: false, description: "Inline markdown body content" },
244
+ "body-file": { type: "string", description: "Path to markdown file with plan body" },
245
+ "body-stdin": { type: "boolean", description: "Read body from stdin" },
246
+ },
247
+ handler: handlePlanUpdateBody,
248
+ });
249
+ async function handlePlanUpdateBody(params, flags) {
250
+ const slug = params.slug;
251
+ const planId = params.planId;
252
+ const bodyInline = params.body;
253
+ const bodyFile = params["body-file"];
254
+ const bodyStdin = params["body-stdin"];
255
+ const result = requireProject(slug);
256
+ if (typeof result !== "string")
257
+ return result;
258
+ const projectDir = result;
259
+ if (!bodyInline && !bodyFile && !bodyStdin) {
260
+ return failure("missing_param", "Either --body, --body-file, or --body-stdin is required", {
261
+ usage: "arcs plan update-body <slug> <planId> --body=<content>",
262
+ });
263
+ }
264
+ if (bodyFile && !existsSync(bodyFile)) {
265
+ return failure("file_not_found", `Body file not found: ${bodyFile}`);
266
+ }
267
+ const planIndex = await readPlanIndex(projectDir);
268
+ const normalizedId = normalizeIdentifier(planId);
269
+ const plan = planIndex.plans.find((p) => p.id === planId || p.normalizedId === normalizedId);
270
+ if (!plan) {
271
+ return failure(ERROR_CODES.ENTITY_NOT_FOUND, `Plan "${planId}" not found`, {
272
+ hint: `Run 'arcs plan list ${slug}' to see available plans.`,
273
+ });
274
+ }
275
+ if (flags.dryRun) {
276
+ return success({
277
+ dryRun: true,
278
+ wouldUpdate: {
279
+ planId: plan.id,
280
+ slug,
281
+ source: bodyInline ? "inline" : bodyFile ? "file" : "stdin",
282
+ },
283
+ });
284
+ }
285
+ let body;
286
+ if (bodyInline) {
287
+ body = bodyInline;
288
+ }
289
+ else if (bodyFile) {
290
+ body = await readFile(bodyFile, "utf-8");
291
+ }
292
+ else {
293
+ body = await readStdin();
294
+ }
295
+ const bodyPath = resolve(projectDir, plan.file);
296
+ try {
297
+ await writeFile(bodyPath, body, "utf-8");
298
+ return success({ meta: plan, body });
299
+ }
300
+ catch (err) {
301
+ return failure("plan_update_body_error", err instanceof Error ? err.message : String(err));
302
+ }
303
+ }
304
+ // --- plan delete ---
305
+ defineCommand({
306
+ path: "plan delete",
307
+ description: "Delete a plan",
308
+ mutation: true,
309
+ params: {
310
+ slug: { type: "string", required: true, positional: 0, description: "Project slug" },
311
+ planId: { type: "string", required: true, positional: 1, description: "Plan ID" },
312
+ },
313
+ handler: handlePlanDelete,
314
+ });
315
+ async function handlePlanDelete(params, flags) {
316
+ const slug = params.slug;
317
+ const planId = params.planId;
318
+ const result = requireProject(slug);
319
+ if (typeof result !== "string")
320
+ return result;
321
+ const projectDir = result;
322
+ const planIndex = await readPlanIndex(projectDir);
323
+ const plan = planIndex.plans.find((p) => p.id === planId || p.normalizedId === planId);
324
+ if (!plan) {
325
+ return failure(ERROR_CODES.ENTITY_NOT_FOUND, `Plan "${planId}" not found`, {
326
+ hint: `Run 'arcs plan list ${slug}' to see available plans.`,
327
+ });
328
+ }
329
+ if (flags.dryRun) {
330
+ return success({ dryRun: true, wouldDelete: { slug, planId: plan.id } });
331
+ }
332
+ try {
333
+ await deletePlan(projectDir, plan.id);
334
+ return success({ deleted: plan.id });
335
+ }
336
+ catch (err) {
337
+ return failure("plan_delete_error", err instanceof Error ? err.message : String(err));
338
+ }
339
+ }
340
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/cli/commands/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=project-updates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-updates.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/project-updates.ts"],"names":[],"mappings":""}
@@ -0,0 +1,243 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Project update commands — update-doc, update-status, update-paths, write-checkpoint
3
+ // ---------------------------------------------------------------------------
4
+ import { existsSync, readFileSync } from "node:fs";
5
+ import { writeFile } from "node:fs/promises";
6
+ import { resolve } from "node:path";
7
+ import { readRootMeta, writeRootMeta } from "../../utils/dag.js";
8
+ import { getDataDir, getProjectDir } from "../../utils/paths.js";
9
+ import { PROJECT_DOC_FILES } from "../../utils/project-documents.js";
10
+ import { normalizeWorkspacePath } from "../../utils/workspace-match.js";
11
+ import { defineCommand, ERROR_CODES, } from "../command-registry.js";
12
+ import { failure, success } from "../output-envelope.js";
13
+ // ---------------------------------------------------------------------------
14
+ // project update-doc
15
+ // ---------------------------------------------------------------------------
16
+ defineCommand({
17
+ path: "project update-doc",
18
+ description: "Update a project document",
19
+ mutation: true,
20
+ params: {
21
+ slug: { type: "string", required: true, positional: 0, description: "Project slug" },
22
+ doc: {
23
+ type: "string",
24
+ required: true,
25
+ positional: 1,
26
+ description: "Document to update",
27
+ enum: ["overview", "tasks", "dependencies", "knowledge"],
28
+ },
29
+ "body-file": { type: "string", description: "Path to file with new doc content" },
30
+ "body-stdin": { type: "boolean", description: "Read content from stdin" },
31
+ },
32
+ handler: handleProjectUpdateDoc,
33
+ });
34
+ async function handleProjectUpdateDoc(params, flags) {
35
+ const slug = params.slug;
36
+ const doc = params.doc;
37
+ const bodyFile = params["body-file"];
38
+ const bodyStdin = params["body-stdin"];
39
+ const validDocs = Object.keys(PROJECT_DOC_FILES);
40
+ if (!validDocs.includes(doc)) {
41
+ return failure(ERROR_CODES.INVALID_ENUM, `Invalid doc type "${doc}". Valid: ${validDocs.join(", ")}`);
42
+ }
43
+ const projectDir = getProjectDir(slug);
44
+ if (!existsSync(projectDir)) {
45
+ return failure(ERROR_CODES.PROJECT_NOT_FOUND, `Project "${slug}" not found`);
46
+ }
47
+ if (!bodyFile && !bodyStdin) {
48
+ return failure(ERROR_CODES.MISSING_PARAM, "Either --body-file or --body-stdin is required", {
49
+ param: "body-file",
50
+ });
51
+ }
52
+ if (flags.dryRun) {
53
+ return success({ dryRun: true, wouldUpdate: { slug, doc, bodyFile } });
54
+ }
55
+ let content;
56
+ if (bodyFile) {
57
+ if (!existsSync(bodyFile)) {
58
+ return failure(ERROR_CODES.ENTITY_NOT_FOUND, `Body file not found: ${bodyFile}`);
59
+ }
60
+ content = readFileSync(bodyFile, "utf-8");
61
+ }
62
+ else {
63
+ // Read from stdin
64
+ const chunks = [];
65
+ for await (const chunk of process.stdin) {
66
+ chunks.push(chunk);
67
+ }
68
+ content = Buffer.concat(chunks).toString("utf-8");
69
+ }
70
+ const fileName = PROJECT_DOC_FILES[doc];
71
+ const filePath = resolve(projectDir, fileName);
72
+ try {
73
+ await writeFile(filePath, content, "utf-8");
74
+ return success({ updated: true, slug, doc, path: filePath });
75
+ }
76
+ catch (err) {
77
+ return failure("write_error", err instanceof Error ? err.message : String(err));
78
+ }
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // project update-status
82
+ // ---------------------------------------------------------------------------
83
+ defineCommand({
84
+ path: "project update-status",
85
+ description: "Update a project's status",
86
+ mutation: true,
87
+ params: {
88
+ slug: { type: "string", required: true, positional: 0, description: "Project slug" },
89
+ status: {
90
+ type: "string",
91
+ required: true,
92
+ positional: 1,
93
+ description: "New status",
94
+ enum: ["active", "paused", "completed", "archived"],
95
+ },
96
+ },
97
+ handler: handleProjectUpdateStatus,
98
+ });
99
+ async function handleProjectUpdateStatus(params, flags) {
100
+ const slug = params.slug;
101
+ const status = params.status;
102
+ if (flags.dryRun) {
103
+ return success({ dryRun: true, wouldUpdate: { slug, status } });
104
+ }
105
+ const dataDir = getDataDir();
106
+ try {
107
+ const rootMeta = await readRootMeta(dataDir);
108
+ const project = rootMeta.projects.find((p) => p.id === slug);
109
+ if (!project) {
110
+ return failure(ERROR_CODES.PROJECT_NOT_FOUND, `Project "${slug}" not found`);
111
+ }
112
+ const oldStatus = project.status;
113
+ project.status = status;
114
+ await writeRootMeta(dataDir, rootMeta);
115
+ return success({ slug, previousStatus: oldStatus, newStatus: status });
116
+ }
117
+ catch (err) {
118
+ return failure("update_error", err instanceof Error ? err.message : String(err));
119
+ }
120
+ }
121
+ // ---------------------------------------------------------------------------
122
+ // project update-paths
123
+ // ---------------------------------------------------------------------------
124
+ defineCommand({
125
+ path: "project update-paths",
126
+ description: "Add or remove workspace paths for a project",
127
+ mutation: true,
128
+ params: {
129
+ slug: { type: "string", required: true, positional: 0, description: "Project slug" },
130
+ add: { type: "string", description: "Path to add to workspace paths" },
131
+ remove: { type: "string", description: "Path to remove from workspace paths" },
132
+ },
133
+ handler: handleProjectUpdatePaths,
134
+ });
135
+ async function handleProjectUpdatePaths(params, flags) {
136
+ const slug = params.slug;
137
+ const addPath = params.add;
138
+ const removePath = params.remove;
139
+ if (!addPath && !removePath) {
140
+ return failure(ERROR_CODES.MISSING_PARAM, "Either --add or --remove is required", {
141
+ param: "add",
142
+ });
143
+ }
144
+ const projectDir = getProjectDir(slug);
145
+ if (!existsSync(projectDir)) {
146
+ return failure(ERROR_CODES.PROJECT_NOT_FOUND, `Project "${slug}" not found`);
147
+ }
148
+ if (flags.dryRun) {
149
+ return success({ dryRun: true, wouldUpdate: { slug, add: addPath, remove: removePath } });
150
+ }
151
+ const metaPath = resolve(projectDir, "meta.json");
152
+ try {
153
+ const meta = JSON.parse(readFileSync(metaPath, "utf-8"));
154
+ const paths = meta.workspacePaths ?? [];
155
+ if (addPath) {
156
+ const normalized = normalizeWorkspacePath(addPath);
157
+ if (!paths.includes(normalized)) {
158
+ paths.push(normalized);
159
+ }
160
+ }
161
+ if (removePath) {
162
+ const normalized = normalizeWorkspacePath(removePath);
163
+ const idx = paths.indexOf(normalized);
164
+ if (idx >= 0) {
165
+ paths.splice(idx, 1);
166
+ }
167
+ }
168
+ meta.workspacePaths = paths;
169
+ await writeFile(metaPath, JSON.stringify(meta, null, 2), "utf-8");
170
+ return success({ slug, workspacePaths: paths });
171
+ }
172
+ catch (err) {
173
+ return failure("update_error", err instanceof Error ? err.message : String(err));
174
+ }
175
+ }
176
+ // ---------------------------------------------------------------------------
177
+ // project write-checkpoint
178
+ // ---------------------------------------------------------------------------
179
+ defineCommand({
180
+ path: "project write-checkpoint",
181
+ description: "Write sync checkpoint fields (lastSyncedAt, lastSyncGitCommit, lastSyncStats) to project meta.json",
182
+ mutation: true,
183
+ params: {
184
+ slug: { type: "string", required: true, positional: 0, description: "Project slug" },
185
+ lastSyncedAt: { type: "string", description: "ISO timestamp of last sync" },
186
+ lastSyncGitCommit: { type: "string", description: "Git commit SHA of last sync" },
187
+ lastSyncStats: { type: "string", description: "JSON string with sync stats object" },
188
+ },
189
+ handler: handleProjectWriteCheckpoint,
190
+ });
191
+ async function handleProjectWriteCheckpoint(params, flags) {
192
+ const slug = params.slug;
193
+ const lastSyncedAt = params.lastSyncedAt;
194
+ const lastSyncGitCommit = params.lastSyncGitCommit;
195
+ const lastSyncStatsRaw = params.lastSyncStats;
196
+ if (!lastSyncedAt && !lastSyncGitCommit && !lastSyncStatsRaw) {
197
+ return failure(ERROR_CODES.MISSING_PARAM, "At least one of --lastSyncedAt, --lastSyncGitCommit, or --lastSyncStats is required", { param: "lastSyncedAt" });
198
+ }
199
+ const projectDir = getProjectDir(slug);
200
+ if (!existsSync(projectDir)) {
201
+ return failure(ERROR_CODES.PROJECT_NOT_FOUND, `Project "${slug}" not found`);
202
+ }
203
+ let lastSyncStats;
204
+ if (lastSyncStatsRaw) {
205
+ try {
206
+ lastSyncStats = JSON.parse(lastSyncStatsRaw);
207
+ }
208
+ catch {
209
+ return failure("invalid_param", "Failed to parse --lastSyncStats as JSON", {
210
+ param: "lastSyncStats",
211
+ });
212
+ }
213
+ }
214
+ if (flags.dryRun) {
215
+ return success({
216
+ dryRun: true,
217
+ wouldUpdate: { slug, lastSyncedAt, lastSyncGitCommit, lastSyncStats },
218
+ });
219
+ }
220
+ const metaPath = resolve(projectDir, "meta.json");
221
+ try {
222
+ const meta = JSON.parse(readFileSync(metaPath, "utf-8"));
223
+ const updated = {};
224
+ if (lastSyncedAt !== undefined) {
225
+ meta.lastSyncedAt = lastSyncedAt;
226
+ updated.lastSyncedAt = lastSyncedAt;
227
+ }
228
+ if (lastSyncGitCommit !== undefined) {
229
+ meta.lastSyncGitCommit = lastSyncGitCommit;
230
+ updated.lastSyncGitCommit = lastSyncGitCommit;
231
+ }
232
+ if (lastSyncStats !== undefined) {
233
+ meta.lastSyncStats = lastSyncStats;
234
+ updated.lastSyncStats = lastSyncStats;
235
+ }
236
+ await writeFile(metaPath, JSON.stringify(meta, null, 2), "utf-8");
237
+ return success({ slug, updated });
238
+ }
239
+ catch (err) {
240
+ return failure("update_error", err instanceof Error ? err.message : String(err));
241
+ }
242
+ }
243
+ //# sourceMappingURL=project-updates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-updates.js","sourceRoot":"","sources":["../../../src/cli/commands/project-updates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/project.ts"],"names":[],"mappings":""}