@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.
- package/README.md +448 -0
- package/dist/cli/arcs-orchestrate-caveman.d.ts +16 -0
- package/dist/cli/arcs-orchestrate-caveman.d.ts.map +1 -0
- package/dist/cli/arcs-orchestrate-caveman.js +109 -0
- package/dist/cli/arcs-orchestrate-caveman.js.map +1 -0
- package/dist/cli/arcs-orchestrate.d.ts +2 -0
- package/dist/cli/arcs-orchestrate.d.ts.map +1 -0
- package/dist/cli/arcs-orchestrate.js +431 -0
- package/dist/cli/arcs-orchestrate.js.map +1 -0
- package/dist/cli/arg-parser.d.ts +20 -0
- package/dist/cli/arg-parser.d.ts.map +1 -0
- package/dist/cli/arg-parser.js +216 -0
- package/dist/cli/arg-parser.js.map +1 -0
- package/dist/cli/brief-renderer.d.ts +32 -0
- package/dist/cli/brief-renderer.d.ts.map +1 -0
- package/dist/cli/brief-renderer.js +67 -0
- package/dist/cli/brief-renderer.js.map +1 -0
- package/dist/cli/bundle-installer.d.ts +77 -0
- package/dist/cli/bundle-installer.d.ts.map +1 -0
- package/dist/cli/bundle-installer.js +328 -0
- package/dist/cli/bundle-installer.js.map +1 -0
- package/dist/cli/command-registry.d.ts +52 -0
- package/dist/cli/command-registry.d.ts.map +1 -0
- package/dist/cli/command-registry.js +68 -0
- package/dist/cli/command-registry.js.map +1 -0
- package/dist/cli/commands/batch.d.ts +2 -0
- package/dist/cli/commands/batch.d.ts.map +1 -0
- package/dist/cli/commands/batch.js +307 -0
- package/dist/cli/commands/batch.js.map +1 -0
- package/dist/cli/commands/brief.d.ts +2 -0
- package/dist/cli/commands/brief.d.ts.map +1 -0
- package/dist/cli/commands/brief.js +146 -0
- package/dist/cli/commands/brief.js.map +1 -0
- package/dist/cli/commands/bundle.d.ts +2 -0
- package/dist/cli/commands/bundle.d.ts.map +1 -0
- package/dist/cli/commands/bundle.js +90 -0
- package/dist/cli/commands/bundle.js.map +1 -0
- package/dist/cli/commands/dependency.d.ts +2 -0
- package/dist/cli/commands/dependency.d.ts.map +1 -0
- package/dist/cli/commands/dependency.js +260 -0
- package/dist/cli/commands/dependency.js.map +1 -0
- package/dist/cli/commands/diagnostics.d.ts +2 -0
- package/dist/cli/commands/diagnostics.d.ts.map +1 -0
- package/dist/cli/commands/diagnostics.js +91 -0
- package/dist/cli/commands/diagnostics.js.map +1 -0
- package/dist/cli/commands/diagram.d.ts +2 -0
- package/dist/cli/commands/diagram.d.ts.map +1 -0
- package/dist/cli/commands/diagram.js +305 -0
- package/dist/cli/commands/diagram.js.map +1 -0
- package/dist/cli/commands/done.d.ts +2 -0
- package/dist/cli/commands/done.d.ts.map +1 -0
- package/dist/cli/commands/done.js +140 -0
- package/dist/cli/commands/done.js.map +1 -0
- package/dist/cli/commands/graph.d.ts +2 -0
- package/dist/cli/commands/graph.d.ts.map +1 -0
- package/dist/cli/commands/graph.js +105 -0
- package/dist/cli/commands/graph.js.map +1 -0
- package/dist/cli/commands/index.d.ts +21 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +22 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/knowledge-search.d.ts +2 -0
- package/dist/cli/commands/knowledge-search.d.ts.map +1 -0
- package/dist/cli/commands/knowledge-search.js +43 -0
- package/dist/cli/commands/knowledge-search.js.map +1 -0
- package/dist/cli/commands/knowledge.d.ts +2 -0
- package/dist/cli/commands/knowledge.d.ts.map +1 -0
- package/dist/cli/commands/knowledge.js +416 -0
- package/dist/cli/commands/knowledge.js.map +1 -0
- package/dist/cli/commands/loop.d.ts +2 -0
- package/dist/cli/commands/loop.d.ts.map +1 -0
- package/dist/cli/commands/loop.js +192 -0
- package/dist/cli/commands/loop.js.map +1 -0
- package/dist/cli/commands/maintenance.d.ts +2 -0
- package/dist/cli/commands/maintenance.d.ts.map +1 -0
- package/dist/cli/commands/maintenance.js +231 -0
- package/dist/cli/commands/maintenance.js.map +1 -0
- package/dist/cli/commands/next.d.ts +2 -0
- package/dist/cli/commands/next.d.ts.map +1 -0
- package/dist/cli/commands/next.js +116 -0
- package/dist/cli/commands/next.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +2 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +340 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/project-updates.d.ts +2 -0
- package/dist/cli/commands/project-updates.d.ts.map +1 -0
- package/dist/cli/commands/project-updates.js +243 -0
- package/dist/cli/commands/project-updates.js.map +1 -0
- package/dist/cli/commands/project.d.ts +2 -0
- package/dist/cli/commands/project.d.ts.map +1 -0
- package/dist/cli/commands/project.js +362 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/remember.d.ts +2 -0
- package/dist/cli/commands/remember.d.ts.map +1 -0
- package/dist/cli/commands/remember.js +70 -0
- package/dist/cli/commands/remember.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +104 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/task.d.ts +6 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +361 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/utility.d.ts +9 -0
- package/dist/cli/commands/utility.d.ts.map +1 -0
- package/dist/cli/commands/utility.js +302 -0
- package/dist/cli/commands/utility.js.map +1 -0
- package/dist/cli/config.d.ts +42 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +134 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/dag-commands.d.ts +7 -0
- package/dist/cli/dag-commands.d.ts.map +1 -0
- package/dist/cli/dag-commands.js +152 -0
- package/dist/cli/dag-commands.js.map +1 -0
- package/dist/cli/diagram-renderer.d.ts +26 -0
- package/dist/cli/diagram-renderer.d.ts.map +1 -0
- package/dist/cli/diagram-renderer.js +118 -0
- package/dist/cli/diagram-renderer.js.map +1 -0
- package/dist/cli/help-generator.d.ts +21 -0
- package/dist/cli/help-generator.d.ts.map +1 -0
- package/dist/cli/help-generator.js +100 -0
- package/dist/cli/help-generator.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +95 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/instructions.d.ts +53 -0
- package/dist/cli/instructions.d.ts.map +1 -0
- package/dist/cli/instructions.js +219 -0
- package/dist/cli/instructions.js.map +1 -0
- package/dist/cli/lean-output.d.ts +15 -0
- package/dist/cli/lean-output.d.ts.map +1 -0
- package/dist/cli/lean-output.js +66 -0
- package/dist/cli/lean-output.js.map +1 -0
- package/dist/cli/md-renderer.d.ts +6 -0
- package/dist/cli/md-renderer.d.ts.map +1 -0
- package/dist/cli/md-renderer.js +396 -0
- package/dist/cli/md-renderer.js.map +1 -0
- package/dist/cli/output-envelope.d.ts +15 -0
- package/dist/cli/output-envelope.d.ts.map +1 -0
- package/dist/cli/output-envelope.js +61 -0
- package/dist/cli/output-envelope.js.map +1 -0
- package/dist/cli/setup.d.ts +11 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +415 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/status-dashboard.d.ts +5 -0
- package/dist/cli/status-dashboard.d.ts.map +1 -0
- package/dist/cli/status-dashboard.js +248 -0
- package/dist/cli/status-dashboard.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/retrieval/bm25.d.ts +23 -0
- package/dist/retrieval/bm25.d.ts.map +1 -0
- package/dist/retrieval/bm25.js +92 -0
- package/dist/retrieval/bm25.js.map +1 -0
- package/dist/retrieval/cross-project-search.d.ts +30 -0
- package/dist/retrieval/cross-project-search.d.ts.map +1 -0
- package/dist/retrieval/cross-project-search.js +109 -0
- package/dist/retrieval/cross-project-search.js.map +1 -0
- package/dist/retrieval/graph-builder.d.ts +6 -0
- package/dist/retrieval/graph-builder.d.ts.map +1 -0
- package/dist/retrieval/graph-builder.js +196 -0
- package/dist/retrieval/graph-builder.js.map +1 -0
- package/dist/retrieval/graph-cache.d.ts +15 -0
- package/dist/retrieval/graph-cache.d.ts.map +1 -0
- package/dist/retrieval/graph-cache.js +66 -0
- package/dist/retrieval/graph-cache.js.map +1 -0
- package/dist/retrieval/graph-invalidate.d.ts +18 -0
- package/dist/retrieval/graph-invalidate.d.ts.map +1 -0
- package/dist/retrieval/graph-invalidate.js +23 -0
- package/dist/retrieval/graph-invalidate.js.map +1 -0
- package/dist/retrieval/graph-retrieval.d.ts +24 -0
- package/dist/retrieval/graph-retrieval.d.ts.map +1 -0
- package/dist/retrieval/graph-retrieval.js +165 -0
- package/dist/retrieval/graph-retrieval.js.map +1 -0
- package/dist/retrieval/graph-traverse.d.ts +3 -0
- package/dist/retrieval/graph-traverse.d.ts.map +1 -0
- package/dist/retrieval/graph-traverse.js +53 -0
- package/dist/retrieval/graph-traverse.js.map +1 -0
- package/dist/retrieval/graph-types.d.ts +37 -0
- package/dist/retrieval/graph-types.d.ts.map +1 -0
- package/dist/retrieval/graph-types.js +12 -0
- package/dist/retrieval/graph-types.js.map +1 -0
- package/dist/retrieval/index-builder.d.ts +21 -0
- package/dist/retrieval/index-builder.d.ts.map +1 -0
- package/dist/retrieval/index-builder.js +94 -0
- package/dist/retrieval/index-builder.js.map +1 -0
- package/dist/retrieval/knowledge-selection.d.ts +7 -0
- package/dist/retrieval/knowledge-selection.d.ts.map +1 -0
- package/dist/retrieval/knowledge-selection.js +80 -0
- package/dist/retrieval/knowledge-selection.js.map +1 -0
- package/dist/retrieval/task-scoped.d.ts +23 -0
- package/dist/retrieval/task-scoped.d.ts.map +1 -0
- package/dist/retrieval/task-scoped.js +51 -0
- package/dist/retrieval/task-scoped.js.map +1 -0
- package/dist/utils/content-assembly.d.ts +44 -0
- package/dist/utils/content-assembly.d.ts.map +1 -0
- package/dist/utils/content-assembly.js +101 -0
- package/dist/utils/content-assembly.js.map +1 -0
- package/dist/utils/dag.d.ts +28 -0
- package/dist/utils/dag.d.ts.map +1 -0
- package/dist/utils/dag.js +68 -0
- package/dist/utils/dag.js.map +1 -0
- package/dist/utils/diagram-generator.d.ts +17 -0
- package/dist/utils/diagram-generator.d.ts.map +1 -0
- package/dist/utils/diagram-generator.js +38 -0
- package/dist/utils/diagram-generator.js.map +1 -0
- package/dist/utils/errors.d.ts +40 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +83 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/file-lock.d.ts +13 -0
- package/dist/utils/file-lock.d.ts.map +1 -0
- package/dist/utils/file-lock.js +80 -0
- package/dist/utils/file-lock.js.map +1 -0
- package/dist/utils/git.d.ts +14 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +56 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/graphify-knowledge.d.ts +6 -0
- package/dist/utils/graphify-knowledge.d.ts.map +1 -0
- package/dist/utils/graphify-knowledge.js +60 -0
- package/dist/utils/graphify-knowledge.js.map +1 -0
- package/dist/utils/graphify.d.ts +49 -0
- package/dist/utils/graphify.d.ts.map +1 -0
- package/dist/utils/graphify.js +306 -0
- package/dist/utils/graphify.js.map +1 -0
- package/dist/utils/json-schemas.d.ts +723 -0
- package/dist/utils/json-schemas.d.ts.map +1 -0
- package/dist/utils/json-schemas.js +147 -0
- package/dist/utils/json-schemas.js.map +1 -0
- package/dist/utils/json.d.ts +15 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +39 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/knowledge-store.d.ts +49 -0
- package/dist/utils/knowledge-store.d.ts.map +1 -0
- package/dist/utils/knowledge-store.js +191 -0
- package/dist/utils/knowledge-store.js.map +1 -0
- package/dist/utils/loop-state.d.ts +51 -0
- package/dist/utils/loop-state.d.ts.map +1 -0
- package/dist/utils/loop-state.js +123 -0
- package/dist/utils/loop-state.js.map +1 -0
- package/dist/utils/paths.d.ts +16 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +66 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/plan-store.d.ts +46 -0
- package/dist/utils/plan-store.d.ts.map +1 -0
- package/dist/utils/plan-store.js +184 -0
- package/dist/utils/plan-store.js.map +1 -0
- package/dist/utils/project-documents.d.ts +20 -0
- package/dist/utils/project-documents.d.ts.map +1 -0
- package/dist/utils/project-documents.js +10 -0
- package/dist/utils/project-documents.js.map +1 -0
- package/dist/utils/project-memory.d.ts +16 -0
- package/dist/utils/project-memory.d.ts.map +1 -0
- package/dist/utils/project-memory.js +16 -0
- package/dist/utils/project-memory.js.map +1 -0
- package/dist/utils/project-resolver.d.ts +28 -0
- package/dist/utils/project-resolver.d.ts.map +1 -0
- package/dist/utils/project-resolver.js +119 -0
- package/dist/utils/project-resolver.js.map +1 -0
- package/dist/utils/quick-scan.d.ts +13 -0
- package/dist/utils/quick-scan.d.ts.map +1 -0
- package/dist/utils/quick-scan.js +156 -0
- package/dist/utils/quick-scan.js.map +1 -0
- package/dist/utils/schemas.d.ts +13 -0
- package/dist/utils/schemas.d.ts.map +1 -0
- package/dist/utils/schemas.js +6 -0
- package/dist/utils/schemas.js.map +1 -0
- package/dist/utils/slug.d.ts +10 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +18 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/utils/stdin.d.ts +6 -0
- package/dist/utils/stdin.d.ts.map +1 -0
- package/dist/utils/stdin.js +25 -0
- package/dist/utils/stdin.js.map +1 -0
- package/dist/utils/storage-utils.d.ts +48 -0
- package/dist/utils/storage-utils.d.ts.map +1 -0
- package/dist/utils/storage-utils.js +175 -0
- package/dist/utils/storage-utils.js.map +1 -0
- package/dist/utils/task-store.d.ts +49 -0
- package/dist/utils/task-store.d.ts.map +1 -0
- package/dist/utils/task-store.js +178 -0
- package/dist/utils/task-store.js.map +1 -0
- package/dist/utils/template.d.ts +15 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/utils/template.js +27 -0
- package/dist/utils/template.js.map +1 -0
- package/dist/utils/tool-response.d.ts +37 -0
- package/dist/utils/tool-response.d.ts.map +1 -0
- package/dist/utils/tool-response.js +44 -0
- package/dist/utils/tool-response.js.map +1 -0
- package/dist/utils/workflow-policy.d.ts +50 -0
- package/dist/utils/workflow-policy.d.ts.map +1 -0
- package/dist/utils/workflow-policy.js +111 -0
- package/dist/utils/workflow-policy.js.map +1 -0
- package/dist/utils/workspace-match.d.ts +35 -0
- package/dist/utils/workspace-match.d.ts.map +1 -0
- package/dist/utils/workspace-match.js +58 -0
- package/dist/utils/workspace-match.js.map +1 -0
- package/opencode/arcs/.opencode/plugins/arcs.js +348 -0
- package/opencode/arcs/bundle-runtime.json +68 -0
- package/opencode/arcs/manifest.json +279 -0
- package/opencode/arcs/prompts/arcs-docs.txt +124 -0
- package/opencode/arcs/prompts/arcs-orchestrate-caveman.txt +529 -0
- package/opencode/arcs/prompts/arcs-orchestrate.txt +437 -0
- package/opencode/arcs/prompts/code-reviewer.txt +55 -0
- package/opencode/arcs/prompts/devil-advocate.txt +121 -0
- package/opencode/arcs/prompts/docs-researcher.txt +54 -0
- package/opencode/arcs/prompts/oncall-ops.txt +54 -0
- package/opencode/arcs/prompts/qa-analyst.txt +54 -0
- package/opencode/arcs/prompts/software-engineer.txt +48 -0
- package/opencode/arcs/prompts/system-architect.txt +60 -0
- package/opencode/arcs/prompts/tech-architect.txt +54 -0
- package/opencode/arcs/skills/brainstorming/SKILL.md +144 -0
- package/opencode/arcs/skills/brainstorming/scripts/frame-template.html +214 -0
- package/opencode/arcs/skills/brainstorming/scripts/helper.js +88 -0
- package/opencode/arcs/skills/brainstorming/scripts/server.js +338 -0
- package/opencode/arcs/skills/brainstorming/scripts/start-server.sh +137 -0
- package/opencode/arcs/skills/brainstorming/scripts/stop-server.sh +31 -0
- package/opencode/arcs/skills/brainstorming/spec-document-reviewer-prompt.md +50 -0
- package/opencode/arcs/skills/brainstorming/visual-companion.md +277 -0
- package/opencode/arcs/skills/caveman-commit/SKILL.md +51 -0
- package/opencode/arcs/skills/code-agent/SKILL.md +58 -0
- package/opencode/arcs/skills/deep-pr-review/SKILL.md +191 -0
- package/opencode/arcs/skills/deep-pr-review/graphify-diff.md +102 -0
- package/opencode/arcs/skills/deep-pr-review/review-template.md +69 -0
- package/opencode/arcs/skills/executing-plans/SKILL.md +91 -0
- package/opencode/arcs/skills/init-project/SKILL.md +150 -0
- package/opencode/arcs/skills/quick-dev/SKILL.md +47 -0
- package/opencode/arcs/skills/requesting-code-review/SKILL.md +47 -0
- package/opencode/arcs/skills/requesting-code-review/code-reviewer.md +179 -0
- package/opencode/arcs/skills/subagent-driven-development/SKILL.md +162 -0
- package/opencode/arcs/skills/subagent-driven-development/code-quality-reviewer-prompt.md +53 -0
- package/opencode/arcs/skills/subagent-driven-development/implementer-prompt.md +148 -0
- package/opencode/arcs/skills/subagent-driven-development/spec-reviewer-prompt.md +85 -0
- package/opencode/arcs/skills/systematic-debugging/SKILL.md +174 -0
- package/opencode/arcs/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/opencode/arcs/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/opencode/arcs/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/opencode/arcs/skills/systematic-debugging/find-polluter.sh +63 -0
- package/opencode/arcs/skills/systematic-debugging/phases-reference.md +168 -0
- package/opencode/arcs/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/opencode/arcs/skills/test-driven-development/SKILL.md +72 -0
- package/opencode/arcs/skills/test-driven-development/tdd-rationalizations-and-examples.md +157 -0
- package/opencode/arcs/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/opencode/arcs/skills/to-diagram/SKILL.md +235 -0
- package/opencode/arcs/skills/to-diagram/scripts/manage-diagram.mjs +963 -0
- package/opencode/arcs/skills/writing-plans/SKILL.md +179 -0
- package/opencode/arcs/skills/writing-plans/plan-document-reviewer-prompt.md +52 -0
- package/package.json +60 -0
- package/scripts/arcs-cli.mjs +45 -0
- package/skills/explore-dag.md +57 -0
- package/skills/init-project.md +105 -0
- package/skills/orchestrate.md +94 -0
- package/skills/update-docs.md +72 -0
- package/templates/dependency.md.tmpl +9 -0
- package/templates/knowledge.md.tmpl +15 -0
- package/templates/project-meta.json.tmpl +13 -0
- package/templates/project.md.tmpl +11 -0
- 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":"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"}
|
|
@@ -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"}
|