@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 @@
1
+ {"version":3,"file":"graph-types.d.ts","sourceRoot":"","sources":["../../src/retrieval/graph-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAE9D,MAAM,MAAM,YAAY,GACpB,sBAAsB,GACtB,oBAAoB,GACpB,wBAAwB,GACxB,oBAAoB,GACpB,iBAAiB,GACjB,oBAAoB,CAAC;AAEzB,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAChC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAOrD,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Core types for ARCS's graph-based retrieval layer.
3
+ */
4
+ export const EDGE_WEIGHTS = {
5
+ task_belongs_to_plan: 1.0,
6
+ shares_source_file: 0.9,
7
+ knowledge_touches_file: 0.85,
8
+ plan_contains_task: 0.8,
9
+ shares_keywords: 0.5,
10
+ project_depends_on: 0.3,
11
+ };
12
+ //# sourceMappingURL=graph-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-types.js","sourceRoot":"","sources":["../../src/retrieval/graph-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+CH,MAAM,CAAC,MAAM,YAAY,GAAiC;IACxD,oBAAoB,EAAE,GAAG;IACzB,kBAAkB,EAAE,GAAG;IACvB,sBAAsB,EAAE,IAAI;IAC5B,kBAAkB,EAAE,GAAG;IACvB,eAAe,EAAE,GAAG;IACpB,kBAAkB,EAAE,GAAG;CACxB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Adapter that builds BM25 retrieval indexes from ARCS project knowledge and plan entries.
3
+ */
4
+ export interface ScoredEntry {
5
+ id: string;
6
+ type: "knowledge" | "plan";
7
+ title: string;
8
+ summary: string;
9
+ score: number;
10
+ }
11
+ export interface RetrievalIndex {
12
+ searchKnowledge(query: string, limit?: number): ScoredEntry[];
13
+ searchPlans(query: string, limit?: number): ScoredEntry[];
14
+ searchAll(query: string, limit?: number): ScoredEntry[];
15
+ }
16
+ /**
17
+ * Builds a retrieval index for a project's knowledge and plan entries.
18
+ * Gracefully returns empty results if the project data cannot be read.
19
+ */
20
+ export declare function buildProjectRetrievalIndex(slug: string): Promise<RetrievalIndex>;
21
+ //# sourceMappingURL=index-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-builder.d.ts","sourceRoot":"","sources":["../../src/retrieval/index-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;IAC9D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;IAC1D,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;CACzD;AA6CD;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA4DtF"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Adapter that builds BM25 retrieval indexes from ARCS project knowledge and plan entries.
3
+ */
4
+ import { getProjectDir } from "../utils/paths.js";
5
+ import { readKnowledgeIndex, readPlanIndex, } from "../utils/project-memory.js";
6
+ import { createBm25Index } from "./bm25.js";
7
+ const FIELD_WEIGHTS = { title: 3, keywords: 2, summary: 1 };
8
+ function knowledgeToDocument(entry) {
9
+ return {
10
+ id: entry.id,
11
+ fields: {
12
+ title: entry.title,
13
+ keywords: entry.keywords.join(" "),
14
+ summary: entry.summary ?? "",
15
+ },
16
+ };
17
+ }
18
+ function planToDocument(plan) {
19
+ return {
20
+ id: plan.id,
21
+ fields: {
22
+ title: plan.title,
23
+ keywords: plan.keywords.join(" "),
24
+ summary: plan.summary ?? "",
25
+ },
26
+ };
27
+ }
28
+ function buildSearchFn(index, metaMap) {
29
+ return (query, limit = 10) => {
30
+ const results = index.search(query, limit);
31
+ return results.map((r) => {
32
+ const meta = metaMap.get(r.id);
33
+ return {
34
+ id: r.id,
35
+ type: meta.type,
36
+ title: meta.title,
37
+ summary: meta.summary,
38
+ score: r.score,
39
+ };
40
+ });
41
+ };
42
+ }
43
+ /**
44
+ * Builds a retrieval index for a project's knowledge and plan entries.
45
+ * Gracefully returns empty results if the project data cannot be read.
46
+ */
47
+ export async function buildProjectRetrievalIndex(slug) {
48
+ const projectDir = getProjectDir(slug);
49
+ let knowledgeEntries = [];
50
+ let planEntries = [];
51
+ try {
52
+ const knowledgeIndex = await readKnowledgeIndex(projectDir);
53
+ knowledgeEntries = knowledgeIndex.entries;
54
+ }
55
+ catch {
56
+ // Graceful: empty knowledge
57
+ }
58
+ try {
59
+ const planIndex = await readPlanIndex(projectDir);
60
+ planEntries = planIndex.plans;
61
+ }
62
+ catch {
63
+ // Graceful: empty plans
64
+ }
65
+ // Build BM25 indexes
66
+ const knowledgeDocs = knowledgeEntries.map(knowledgeToDocument);
67
+ const planDocs = planEntries.map(planToDocument);
68
+ const knowledgeBm25 = createBm25Index(knowledgeDocs, FIELD_WEIGHTS);
69
+ const planBm25 = createBm25Index(planDocs, FIELD_WEIGHTS);
70
+ // Build meta maps for hydrating results
71
+ const knowledgeMetaMap = new Map();
72
+ for (const entry of knowledgeEntries) {
73
+ knowledgeMetaMap.set(entry.id, {
74
+ title: entry.title,
75
+ summary: entry.summary ?? "",
76
+ type: "knowledge",
77
+ });
78
+ }
79
+ const planMetaMap = new Map();
80
+ for (const plan of planEntries) {
81
+ planMetaMap.set(plan.id, { title: plan.title, summary: plan.summary ?? "", type: "plan" });
82
+ }
83
+ const searchKnowledge = buildSearchFn(knowledgeBm25, knowledgeMetaMap);
84
+ const searchPlans = buildSearchFn(planBm25, planMetaMap);
85
+ const searchAll = (query, limit = 10) => {
86
+ const knowledgeResults = searchKnowledge(query, limit);
87
+ const planResults = searchPlans(query, limit);
88
+ const merged = [...knowledgeResults, ...planResults];
89
+ merged.sort((a, b) => b.score - a.score);
90
+ return merged.slice(0, limit);
91
+ };
92
+ return { searchKnowledge, searchPlans, searchAll };
93
+ }
94
+ //# sourceMappingURL=index-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-builder.js","sourceRoot":"","sources":["../../src/retrieval/index-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type KnowledgeMeta } from "../utils/project-memory.js";
2
+ /**
3
+ * Selects top knowledge entries using graph traversal (when taskId provided)
4
+ * or recency-based fallback. Returns up to 10 entries, deduplicated by id.
5
+ */
6
+ export declare function selectKnowledgeEntries(slug: string, entries: KnowledgeMeta[], taskId?: string, audience?: string): Promise<KnowledgeMeta[]>;
7
+ //# sourceMappingURL=knowledge-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-selection.d.ts","sourceRoot":"","sources":["../../src/retrieval/knowledge-selection.ts"],"names":[],"mappings":"AAKA,OAAO,EAAW,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAKzE;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,EAAE,EACxB,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,EAAE,CAAC,CAsE1B"}
@@ -0,0 +1,80 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Knowledge entry selection using graph traversal + BM25 + recency fallback
3
+ // ---------------------------------------------------------------------------
4
+ import { getProjectDir } from "../utils/paths.js";
5
+ import { getTask } from "../utils/project-memory.js";
6
+ import { safeTime } from "../utils/workflow-policy.js";
7
+ import { retrieveRelated } from "./graph-retrieval.js";
8
+ import { retrieveForTask } from "./task-scoped.js";
9
+ /**
10
+ * Selects top knowledge entries using graph traversal (when taskId provided)
11
+ * or recency-based fallback. Returns up to 10 entries, deduplicated by id.
12
+ */
13
+ export async function selectKnowledgeEntries(slug, entries, taskId, audience) {
14
+ const MAX_ENTRIES = 10;
15
+ const entryMap = new Map(entries.map((e) => [e.id, e]));
16
+ if (!taskId) {
17
+ // No task context — pure recency
18
+ const sorted = [...entries].sort((a, b) => safeTime(b.updatedAt) - safeTime(a.updatedAt));
19
+ return sorted.slice(0, MAX_ENTRIES);
20
+ }
21
+ // Try graph retrieval first
22
+ const graphResults = await retrieveRelated(slug, `task:${taskId}`, {
23
+ limit: 5,
24
+ types: ["knowledge"],
25
+ audience,
26
+ });
27
+ const selectedIds = new Set();
28
+ const selected = [];
29
+ if (graphResults.length >= 3) {
30
+ // Use graph results as primary
31
+ for (const r of graphResults) {
32
+ const entry = entryMap.get(r.id);
33
+ if (entry && !selectedIds.has(r.id)) {
34
+ selectedIds.add(r.id);
35
+ selected.push(entry);
36
+ }
37
+ }
38
+ }
39
+ else {
40
+ // Sparse graph — fall back to BM25
41
+ const projectDir = getProjectDir(slug);
42
+ let taskContext;
43
+ try {
44
+ const task = await getTask(projectDir, taskId);
45
+ taskContext = {
46
+ title: task.title,
47
+ sourceFiles: task.sourceFiles,
48
+ };
49
+ }
50
+ catch {
51
+ // Task not found — fall through to recency
52
+ }
53
+ if (taskContext) {
54
+ const bm25Results = await retrieveForTask(slug, taskContext, 5);
55
+ for (const r of bm25Results) {
56
+ if (r.type === "knowledge") {
57
+ const entry = entryMap.get(r.id);
58
+ if (entry && !selectedIds.has(r.id)) {
59
+ selectedIds.add(r.id);
60
+ selected.push(entry);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ }
66
+ // Fill remaining slots with recency-sorted entries not already selected
67
+ if (selected.length < MAX_ENTRIES) {
68
+ const sorted = [...entries].sort((a, b) => safeTime(b.updatedAt) - safeTime(a.updatedAt));
69
+ for (const e of sorted) {
70
+ if (selected.length >= MAX_ENTRIES)
71
+ break;
72
+ if (!selectedIds.has(e.id)) {
73
+ selectedIds.add(e.id);
74
+ selected.push(e);
75
+ }
76
+ }
77
+ }
78
+ return selected;
79
+ }
80
+ //# sourceMappingURL=knowledge-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-selection.js","sourceRoot":"","sources":["../../src/retrieval/knowledge-selection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Task-scoped context retrieval — expands a task's metadata into a query
3
+ * and searches the project's unified retrieval index for relevant entries.
4
+ */
5
+ import { type ScoredEntry } from "./index-builder.js";
6
+ export interface TaskContext {
7
+ title: string;
8
+ planKeywords?: string[];
9
+ sourceFiles?: Array<{
10
+ path: string;
11
+ anchor?: string;
12
+ }>;
13
+ }
14
+ /**
15
+ * Builds an expanded query string from task metadata for better recall.
16
+ */
17
+ export declare function buildTaskQuery(task: TaskContext): string;
18
+ /**
19
+ * Retrieves relevant knowledge and plan entries for a given task context.
20
+ * Returns top-N entries sorted by relevance score.
21
+ */
22
+ export declare function retrieveForTask(slug: string, task: TaskContext, limit?: number): Promise<ScoredEntry[]>;
23
+ //# sourceMappingURL=task-scoped.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-scoped.d.ts","sourceRoot":"","sources":["../../src/retrieval/task-scoped.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAA8B,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAElF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAkBD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAkBxD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,WAAW,EACjB,KAAK,SAAK,GACT,OAAO,CAAC,WAAW,EAAE,CAAC,CAQxB"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Task-scoped context retrieval — expands a task's metadata into a query
3
+ * and searches the project's unified retrieval index for relevant entries.
4
+ */
5
+ import { buildProjectRetrievalIndex } from "./index-builder.js";
6
+ /**
7
+ * Extracts meaningful path segments from a source file path.
8
+ * Takes the last 2-3 segments (directories + filename) and strips extensions.
9
+ */
10
+ function expandSourceFile(file) {
11
+ const segments = file.path.split("/").filter(Boolean);
12
+ const meaningful = segments.slice(-3);
13
+ // Strip extension from filename
14
+ const last = meaningful[meaningful.length - 1];
15
+ if (last) {
16
+ meaningful[meaningful.length - 1] = last.replace(/\.[^.]+$/, "");
17
+ }
18
+ const parts = meaningful.join(" ");
19
+ return file.anchor ? `${parts} ${file.anchor}` : parts;
20
+ }
21
+ /**
22
+ * Builds an expanded query string from task metadata for better recall.
23
+ */
24
+ export function buildTaskQuery(task) {
25
+ const parts = [];
26
+ if (task.title) {
27
+ parts.push(task.title);
28
+ }
29
+ if (task.planKeywords?.length) {
30
+ parts.push(task.planKeywords.join(" "));
31
+ }
32
+ if (task.sourceFiles?.length) {
33
+ for (const file of task.sourceFiles) {
34
+ parts.push(expandSourceFile(file));
35
+ }
36
+ }
37
+ return parts.join(" ");
38
+ }
39
+ /**
40
+ * Retrieves relevant knowledge and plan entries for a given task context.
41
+ * Returns top-N entries sorted by relevance score.
42
+ */
43
+ export async function retrieveForTask(slug, task, limit = 10) {
44
+ if (!task.title) {
45
+ return [];
46
+ }
47
+ const query = buildTaskQuery(task);
48
+ const index = await buildProjectRetrievalIndex(slug);
49
+ return index.searchAll(query, limit);
50
+ }
51
+ //# sourceMappingURL=task-scoped.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-scoped.js","sourceRoot":"","sources":["../../src/retrieval/task-scoped.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,0BAA0B,EAAoB,MAAM,oBAAoB,CAAC;AAQlF;;;GAGG;AACH,SAAS,gBAAgB,CAAC,IAAuC;IAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,gCAAgC;IAChC,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,IAAI,IAAI,EAAE,CAAC;QACT,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAiB;IAC9C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,IAAiB,EACjB,KAAK,GAAG,EAAE;IAEV,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Shared content extraction helpers for assembling project context.
3
+ * Used by both `arcs context` and `arcs sync-agents-md` commands.
4
+ */
5
+ /**
6
+ * Extract meaningful overview content from overview.md, stripping template boilerplate.
7
+ * Returns null if the overview is still the default template (no real content).
8
+ *
9
+ * Strips: leading H1, blockquote, status/repo blocks, then checks if remaining
10
+ * content is just empty section headers.
11
+ *
12
+ * NOTE: Coupled to the template format in project.md.tmpl. Guarded by
13
+ * test/content-assembly.test.ts — edits to the template or this function
14
+ * must preserve the null/non-null contract on unmodified vs. populated
15
+ * renders, or that test will fail.
16
+ */
17
+ export declare function extractOverviewContent(raw: string): string | null;
18
+ /**
19
+ * Extract in-progress task lines (matching `- [/]` pattern) in file order.
20
+ */
21
+ export declare function extractInProgressTasks(raw: string): string[];
22
+ /**
23
+ * Extract backlog task lines (matching `- [ ]` pattern) in file order.
24
+ */
25
+ export declare function extractBacklogTasks(raw: string): string[];
26
+ /**
27
+ * Remove leading markdown checkbox syntax from a task line.
28
+ */
29
+ export declare function stripTaskCheckbox(line: string): string;
30
+ /**
31
+ * Extract meaningful dependencies content from dependencies.md, stripping template boilerplate.
32
+ * Returns null if the content is still the default template.
33
+ *
34
+ * Strips leading H1 (`# Dependencies — {name}`). Downgrades `## Upstream` /
35
+ * `## Downstream` to `###` so they nest correctly under the `## Dependencies`
36
+ * header in assembled documents. Returns null if the only non-blank content
37
+ * under each header is `- None yet` / `- None` or nothing.
38
+ *
39
+ * NOTE: Coupled to the template format in dependency.md.tmpl. Guarded by
40
+ * test/content-assembly.test.ts — edits to the template or this function
41
+ * must preserve the null/non-null contract, or that test will fail.
42
+ */
43
+ export declare function extractDependenciesContent(raw: string): string | null;
44
+ //# sourceMappingURL=content-assembly.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-assembly.d.ts","sourceRoot":"","sources":["../../src/utils/content-assembly.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA6BjE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA2BrE"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Shared content extraction helpers for assembling project context.
3
+ * Used by both `arcs context` and `arcs sync-agents-md` commands.
4
+ */
5
+ /**
6
+ * Extract meaningful overview content from overview.md, stripping template boilerplate.
7
+ * Returns null if the overview is still the default template (no real content).
8
+ *
9
+ * Strips: leading H1, blockquote, status/repo blocks, then checks if remaining
10
+ * content is just empty section headers.
11
+ *
12
+ * NOTE: Coupled to the template format in project.md.tmpl. Guarded by
13
+ * test/content-assembly.test.ts — edits to the template or this function
14
+ * must preserve the null/non-null contract on unmodified vs. populated
15
+ * renders, or that test will fail.
16
+ */
17
+ export function extractOverviewContent(raw) {
18
+ const lines = raw.split("\n");
19
+ let startIdx = 0;
20
+ // Skip leading H1
21
+ if (lines[startIdx]?.startsWith("# "))
22
+ startIdx++;
23
+ // Skip blank lines after H1
24
+ while (startIdx < lines.length && lines[startIdx]?.trim() === "")
25
+ startIdx++;
26
+ // Skip blockquote
27
+ if (lines[startIdx]?.startsWith("> "))
28
+ startIdx++;
29
+ // Skip blank lines after blockquote
30
+ while (startIdx < lines.length && lines[startIdx]?.trim() === "")
31
+ startIdx++;
32
+ // Skip status/repo blocks
33
+ while (startIdx < lines.length &&
34
+ (lines[startIdx]?.startsWith("**Status:**") ||
35
+ lines[startIdx]?.startsWith("**Repo:**") ||
36
+ lines[startIdx]?.trim() === "")) {
37
+ startIdx++;
38
+ }
39
+ const remaining = lines.slice(startIdx).join("\n").trim();
40
+ // Check if it's just empty section headers with no content beneath them
41
+ const withoutHeaders = remaining.replace(/^##\s+.+$/gm, "").trim();
42
+ if (withoutHeaders === "")
43
+ return null;
44
+ return remaining;
45
+ }
46
+ /**
47
+ * Extract in-progress task lines (matching `- [/]` pattern) in file order.
48
+ */
49
+ export function extractInProgressTasks(raw) {
50
+ return raw.split("\n").filter((line) => /^- \[\/\]/.test(line.trim()));
51
+ }
52
+ /**
53
+ * Extract backlog task lines (matching `- [ ]` pattern) in file order.
54
+ */
55
+ export function extractBacklogTasks(raw) {
56
+ return raw.split("\n").filter((line) => /^- \[ \]/.test(line.trim()));
57
+ }
58
+ /**
59
+ * Remove leading markdown checkbox syntax from a task line.
60
+ */
61
+ export function stripTaskCheckbox(line) {
62
+ return line.replace(/^- \[[ x/]\]\s*/, "").trim();
63
+ }
64
+ /**
65
+ * Extract meaningful dependencies content from dependencies.md, stripping template boilerplate.
66
+ * Returns null if the content is still the default template.
67
+ *
68
+ * Strips leading H1 (`# Dependencies — {name}`). Downgrades `## Upstream` /
69
+ * `## Downstream` to `###` so they nest correctly under the `## Dependencies`
70
+ * header in assembled documents. Returns null if the only non-blank content
71
+ * under each header is `- None yet` / `- None` or nothing.
72
+ *
73
+ * NOTE: Coupled to the template format in dependency.md.tmpl. Guarded by
74
+ * test/content-assembly.test.ts — edits to the template or this function
75
+ * must preserve the null/non-null contract, or that test will fail.
76
+ */
77
+ export function extractDependenciesContent(raw) {
78
+ const lines = raw.split("\n");
79
+ let startIdx = 0;
80
+ // Skip leading H1
81
+ if (lines[startIdx]?.startsWith("# "))
82
+ startIdx++;
83
+ // Skip blank lines after H1
84
+ while (startIdx < lines.length && lines[startIdx]?.trim() === "")
85
+ startIdx++;
86
+ const remaining = lines.slice(startIdx).join("\n").trim();
87
+ if (remaining === "")
88
+ return null;
89
+ // Check if it's just empty template: only headers and "- None yet" / "- None" lines
90
+ const withoutHeaders = remaining.replace(/^##\s+.+$/gm, "").trim();
91
+ const withoutNoneYet = withoutHeaders
92
+ .split("\n")
93
+ .filter((line) => line.trim() !== "" && line.trim() !== "- None yet" && line.trim() !== "- None")
94
+ .join("")
95
+ .trim();
96
+ if (withoutNoneYet === "")
97
+ return null;
98
+ // Downgrade ## Upstream / ## Downstream to ### for embedding under ## Dependencies
99
+ return remaining.replace(/^## (Upstream|Downstream)/gm, "### $1");
100
+ }
101
+ //# sourceMappingURL=content-assembly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-assembly.js","sourceRoot":"","sources":["../../src/utils/content-assembly.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,kBAAkB;IAClB,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;QAAE,QAAQ,EAAE,CAAC;IAClD,4BAA4B;IAC5B,OAAO,QAAQ,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;QAAE,QAAQ,EAAE,CAAC;IAC7E,kBAAkB;IAClB,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;QAAE,QAAQ,EAAE,CAAC;IAClD,oCAAoC;IACpC,OAAO,QAAQ,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;QAAE,QAAQ,EAAE,CAAC;IAC7E,0BAA0B;IAC1B,OACE,QAAQ,GAAG,KAAK,CAAC,MAAM;QACvB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC;YACzC,KAAK,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC;YACxC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EACjC,CAAC;QACD,QAAQ,EAAE,CAAC;IACb,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1D,wEAAwE;IACxE,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEnE,IAAI,cAAc,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,0BAA0B,CAAC,GAAW;IACpD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,kBAAkB;IAClB,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;QAAE,QAAQ,EAAE,CAAC;IAClD,4BAA4B;IAC5B,OAAO,QAAQ,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;QAAE,QAAQ,EAAE,CAAC;IAE7E,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1D,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAElC,oFAAoF;IACpF,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnE,MAAM,cAAc,GAAG,cAAc;SAClC,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CACzF;SACA,IAAI,CAAC,EAAE,CAAC;SACR,IAAI,EAAE,CAAC;IAEV,IAAI,cAAc,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAEvC,mFAAmF;IACnF,OAAO,SAAS,CAAC,OAAO,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,28 @@
1
+ export interface DagNode {
2
+ id: string;
3
+ name: string;
4
+ status: string;
5
+ dependsOn: string[];
6
+ }
7
+ export interface RootMeta {
8
+ version: string;
9
+ projects: DagNode[];
10
+ }
11
+ /**
12
+ * Reads and parses the root meta.json.
13
+ */
14
+ export declare function readRootMeta(dataDir: string): Promise<RootMeta>;
15
+ /**
16
+ * Detect if adding an edge (from → to) would create a cycle.
17
+ * Uses DFS from `to` to see if we can reach `from`.
18
+ */
19
+ export declare function wouldCreateCycle(projects: DagNode[], fromId: string, toId: string): boolean;
20
+ /**
21
+ * Writes root meta.json under an advisory file lock.
22
+ */
23
+ export declare function writeRootMeta(dataDir: string, rootMeta: RootMeta): Promise<void>;
24
+ /**
25
+ * Validate that all dependency targets exist in the project list.
26
+ */
27
+ export declare function validateDependencies(projects: DagNode[], dependsOn: string[]): string[];
28
+ //# sourceMappingURL=dag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dag.d.ts","sourceRoot":"","sources":["../../src/utils/dag.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAWrE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA2B3F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAKtF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAGvF"}
@@ -0,0 +1,68 @@
1
+ import { writeFile } from "node:fs/promises";
2
+ import { resolve } from "node:path";
3
+ import { invalidFileFormat } from "./errors.js";
4
+ import { withLock } from "./file-lock.js";
5
+ import { readJsonSafe, validateJson } from "./json.js";
6
+ import { rootMetaSchema } from "./json-schemas.js";
7
+ /**
8
+ * Reads and parses the root meta.json.
9
+ */
10
+ export async function readRootMeta(dataDir) {
11
+ const metaPath = resolve(dataDir, "meta.json");
12
+ const raw = await readJsonSafe(metaPath);
13
+ if (raw === undefined) {
14
+ throw invalidFileFormat(metaPath, "file missing or not valid JSON");
15
+ }
16
+ try {
17
+ return validateJson(raw, rootMetaSchema, metaPath);
18
+ }
19
+ catch (err) {
20
+ throw invalidFileFormat(metaPath, err instanceof Error ? err.message : String(err));
21
+ }
22
+ }
23
+ /**
24
+ * Detect if adding an edge (from → to) would create a cycle.
25
+ * Uses DFS from `to` to see if we can reach `from`.
26
+ */
27
+ export function wouldCreateCycle(projects, fromId, toId) {
28
+ const adjacency = new Map();
29
+ for (const p of projects) {
30
+ adjacency.set(p.id, [...p.dependsOn]);
31
+ }
32
+ // Simulate adding the edge: fromId depends on toId
33
+ const existing = adjacency.get(fromId) ?? [];
34
+ adjacency.set(fromId, [...existing, toId]);
35
+ // DFS from fromId following dependsOn — if we reach fromId again, cycle exists
36
+ const visited = new Set();
37
+ const stack = [toId];
38
+ while (stack.length > 0) {
39
+ const current = stack.pop();
40
+ if (current === fromId)
41
+ return true;
42
+ if (visited.has(current))
43
+ continue;
44
+ visited.add(current);
45
+ const deps = adjacency.get(current) ?? [];
46
+ for (const dep of deps) {
47
+ stack.push(dep);
48
+ }
49
+ }
50
+ return false;
51
+ }
52
+ /**
53
+ * Writes root meta.json under an advisory file lock.
54
+ */
55
+ export async function writeRootMeta(dataDir, rootMeta) {
56
+ const metaPath = resolve(dataDir, "meta.json");
57
+ await withLock(metaPath, async () => {
58
+ await writeFile(metaPath, JSON.stringify(rootMeta, null, 2), "utf-8");
59
+ });
60
+ }
61
+ /**
62
+ * Validate that all dependency targets exist in the project list.
63
+ */
64
+ export function validateDependencies(projects, dependsOn) {
65
+ const knownIds = new Set(projects.map((p) => p.id));
66
+ return dependsOn.filter((id) => !knownIds.has(id));
67
+ }
68
+ //# sourceMappingURL=dag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dag.js","sourceRoot":"","sources":["../../src/utils/dag.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { TaskMeta } from "./project-memory.js";
2
+ export interface DiagramNode {
3
+ nodeId: string;
4
+ taskId: string;
5
+ title: string;
6
+ }
7
+ export interface GenerateDiagramResult {
8
+ mmd: string;
9
+ nodes: DiagramNode[];
10
+ }
11
+ /**
12
+ * Generates a skeleton Mermaid .mmd diagram from plan tasks.
13
+ * Node IDs assigned T001+ sorted by priority (high→medium→low) then id.localeCompare.
14
+ * No dependency edges — skeleton only. Use manage-diagram.mjs regenerate to add edges.
15
+ */
16
+ export declare function generateDiagramFromTasks(planId: string, tasks: TaskMeta[]): GenerateDiagramResult;
17
+ //# sourceMappingURL=diagram-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram-generator.d.ts","sourceRoot":"","sources":["../../src/utils/diagram-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CA0DjG"}