@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,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a skeleton Mermaid .mmd diagram from plan tasks.
|
|
3
|
+
* Node IDs assigned T001+ sorted by priority (high→medium→low) then id.localeCompare.
|
|
4
|
+
* No dependency edges — skeleton only. Use manage-diagram.mjs regenerate to add edges.
|
|
5
|
+
*/
|
|
6
|
+
export function generateDiagramFromTasks(planId, tasks) {
|
|
7
|
+
const priorityOrder = { high: 0, medium: 1, low: 2 };
|
|
8
|
+
const sorted = [...tasks].sort((a, b) => (priorityOrder[a.priority] ?? 1) - (priorityOrder[b.priority] ?? 1) ||
|
|
9
|
+
a.id.localeCompare(b.id));
|
|
10
|
+
const nodes = sorted.map((t, i) => ({
|
|
11
|
+
nodeId: `T${String(i + 1).padStart(3, "0")}`,
|
|
12
|
+
taskId: t.id,
|
|
13
|
+
title: t.title,
|
|
14
|
+
}));
|
|
15
|
+
const statusLine = nodes.map((n, i) => `${n.nodeId}=${sorted[i].status}`).join(", ");
|
|
16
|
+
const lines = [
|
|
17
|
+
`%% plan: ${planId}`,
|
|
18
|
+
`%% status: ${statusLine}`,
|
|
19
|
+
`%% ready: (run: arcs diagram ready ${planId})`,
|
|
20
|
+
`%% next-action: Start first backlog task`,
|
|
21
|
+
"",
|
|
22
|
+
];
|
|
23
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
24
|
+
const node = nodes[i];
|
|
25
|
+
const t = sorted[i];
|
|
26
|
+
lines.push(`%% node: ${node.nodeId}`, `%% title: ${t.title}`, `%% status: ${t.status}`, `%% skill: quick-dev`, `%% scope: (TBD)`, `%% acceptance: (TBD)`, `%% verify: npm test`, "");
|
|
27
|
+
}
|
|
28
|
+
lines.push("flowchart TD", " classDef done fill:#22c55e,color:#fff", " classDef inProgress fill:#f59e0b,color:#fff", " classDef blocked fill:#ef4444,color:#fff", " classDef backlog fill:#94a3b8,color:#fff", "");
|
|
29
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
30
|
+
const node = nodes[i];
|
|
31
|
+
const t = sorted[i];
|
|
32
|
+
const cls = t.status === "in_progress" ? "inProgress" : t.status === "cancelled" ? "backlog" : t.status;
|
|
33
|
+
lines.push(` ${node.nodeId}["${t.title.replace(/"/g, "'")}"]:::${cls}`);
|
|
34
|
+
}
|
|
35
|
+
lines.push("");
|
|
36
|
+
return { mmd: `${lines.join("\n")}\n`, nodes };
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=diagram-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagram-generator.js","sourceRoot":"","sources":["../../src/utils/diagram-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed error helpers for consistent CLI command error responses.
|
|
3
|
+
*/
|
|
4
|
+
export declare class DagError extends Error {
|
|
5
|
+
readonly code: string;
|
|
6
|
+
constructor(code: string, message: string);
|
|
7
|
+
}
|
|
8
|
+
export declare function projectNotFound(slug: string): DagError;
|
|
9
|
+
export declare function projectAlreadyExists(slug: string): DagError;
|
|
10
|
+
export declare function invalidDocType(doc: string): DagError;
|
|
11
|
+
export declare function cycleDetected(fromSlug: string, toSlug: string): DagError;
|
|
12
|
+
export declare function dependencyNotFound(ids: string[]): DagError;
|
|
13
|
+
export declare function invalidPlanStatus(status: string): DagError;
|
|
14
|
+
export declare function invalidTaskStatus(status: string): DagError;
|
|
15
|
+
export declare function invalidTaskPriority(priority: string): DagError;
|
|
16
|
+
export declare function invalidKnowledgeKind(kind: string): DagError;
|
|
17
|
+
export declare function invalidKeyword(keyword: string): DagError;
|
|
18
|
+
export declare function invalidFileRef(detail: string): DagError;
|
|
19
|
+
export declare function normalizedIdCollision(kind: "plan" | "knowledge entry" | "task", requestedId: string, normalizedId: string): DagError;
|
|
20
|
+
export declare function itemNotFound(kind: "plan" | "knowledge entry" | "task", id: string): DagError;
|
|
21
|
+
export declare function planNotFound(slug: string, planId: string): DagError;
|
|
22
|
+
export declare function invalidFileFormat(filePath: string, details: string): DagError;
|
|
23
|
+
export declare function indexRebuildFailed(kind: "plans" | "knowledge", reason: string): DagError;
|
|
24
|
+
export declare function noProjectMatch(workspacePath: string): DagError;
|
|
25
|
+
export declare function ambiguousProjectMatch(workspacePath: string, slugs: string[]): DagError;
|
|
26
|
+
export declare function invalidWorkspacePath(path: string): DagError;
|
|
27
|
+
export declare function noWorkspacePaths(slug: string): DagError;
|
|
28
|
+
/**
|
|
29
|
+
* Format a DagError into a CLI command error response.
|
|
30
|
+
* Delegates to the canonical `toolError` helper so all error responses
|
|
31
|
+
* share the same `[CODE] message` shape.
|
|
32
|
+
*/
|
|
33
|
+
export declare function formatError(err: DagError): {
|
|
34
|
+
content: [{
|
|
35
|
+
type: "text";
|
|
36
|
+
text: string;
|
|
37
|
+
}];
|
|
38
|
+
isError: true;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,qBAAa,QAAS,SAAQ,KAAK;aAEf,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAEtD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAKpD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAKxE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAE9D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE3D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAExD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEvD;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,MAAM,EACzC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,QAAQ,CAKV;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,CAE5F;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEnE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAE7E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAExF;AAED,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,CAM9D;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAMtF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAK3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAKvD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ;;;;;;EAExC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed error helpers for consistent CLI command error responses.
|
|
3
|
+
*/
|
|
4
|
+
import { toolError } from "./tool-response.js";
|
|
5
|
+
export class DagError extends Error {
|
|
6
|
+
code;
|
|
7
|
+
constructor(code, message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.name = "DagError";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function projectNotFound(slug) {
|
|
14
|
+
return new DagError("PROJECT_NOT_FOUND", `Project "${slug}" does not exist.`);
|
|
15
|
+
}
|
|
16
|
+
export function projectAlreadyExists(slug) {
|
|
17
|
+
return new DagError("PROJECT_ALREADY_EXISTS", `Project "${slug}" already exists.`);
|
|
18
|
+
}
|
|
19
|
+
export function invalidDocType(doc) {
|
|
20
|
+
return new DagError("INVALID_DOC_TYPE", `Invalid document type "${doc}". Must be one of: overview, tasks, dependencies, knowledge.`);
|
|
21
|
+
}
|
|
22
|
+
export function cycleDetected(fromSlug, toSlug) {
|
|
23
|
+
return new DagError("CYCLE_DETECTED", `Adding dependency "${fromSlug}" → "${toSlug}" would create a cycle.`);
|
|
24
|
+
}
|
|
25
|
+
export function dependencyNotFound(ids) {
|
|
26
|
+
return new DagError("DEPENDENCY_NOT_FOUND", `Unknown dependency target(s): ${ids.join(", ")}`);
|
|
27
|
+
}
|
|
28
|
+
export function invalidPlanStatus(status) {
|
|
29
|
+
return new DagError("INVALID_PLAN_STATUS", `Invalid plan status "${status}".`);
|
|
30
|
+
}
|
|
31
|
+
export function invalidTaskStatus(status) {
|
|
32
|
+
return new DagError("INVALID_TASK_STATUS", `Invalid task status "${status}".`);
|
|
33
|
+
}
|
|
34
|
+
export function invalidTaskPriority(priority) {
|
|
35
|
+
return new DagError("INVALID_TASK_PRIORITY", `Invalid task priority "${priority}".`);
|
|
36
|
+
}
|
|
37
|
+
export function invalidKnowledgeKind(kind) {
|
|
38
|
+
return new DagError("INVALID_KNOWLEDGE_KIND", `Invalid knowledge kind "${kind}".`);
|
|
39
|
+
}
|
|
40
|
+
export function invalidKeyword(keyword) {
|
|
41
|
+
return new DagError("INVALID_KEYWORD", `Invalid keyword "${keyword}".`);
|
|
42
|
+
}
|
|
43
|
+
export function invalidFileRef(detail) {
|
|
44
|
+
return new DagError("INVALID_FILE_REF", `Invalid file reference: ${detail}`);
|
|
45
|
+
}
|
|
46
|
+
export function normalizedIdCollision(kind, requestedId, normalizedId) {
|
|
47
|
+
return new DagError("NORMALIZED_ID_COLLISION", `Cannot create ${kind} "${requestedId}" because normalized id "${normalizedId}" already exists.`);
|
|
48
|
+
}
|
|
49
|
+
export function itemNotFound(kind, id) {
|
|
50
|
+
return new DagError("ITEM_NOT_FOUND", `Could not find ${kind} "${id}".`);
|
|
51
|
+
}
|
|
52
|
+
export function planNotFound(slug, planId) {
|
|
53
|
+
return new DagError("PLAN_NOT_FOUND", `Plan "${planId}" does not exist in project "${slug}".`);
|
|
54
|
+
}
|
|
55
|
+
export function invalidFileFormat(filePath, details) {
|
|
56
|
+
return new DagError("INVALID_FILE_FORMAT", `Invalid file format in "${filePath}": ${details}`);
|
|
57
|
+
}
|
|
58
|
+
export function indexRebuildFailed(kind, reason) {
|
|
59
|
+
return new DagError("INDEX_REBUILD_FAILED", `Unable to rebuild ${kind} index: ${reason}`);
|
|
60
|
+
}
|
|
61
|
+
export function noProjectMatch(workspacePath) {
|
|
62
|
+
return new DagError("NO_PROJECT_MATCH", `No project found matching workspace path "${workspacePath}". ` +
|
|
63
|
+
`Register a workspace path using update_project_paths(slug, "add", [path]).`);
|
|
64
|
+
}
|
|
65
|
+
export function ambiguousProjectMatch(workspacePath, slugs) {
|
|
66
|
+
return new DagError("AMBIGUOUS_PROJECT_MATCH", `Multiple projects match workspace path "${workspacePath}" at the same depth: ${slugs.join(", ")}. ` +
|
|
67
|
+
`Use more specific workspace paths or remove duplicates with update_project_paths.`);
|
|
68
|
+
}
|
|
69
|
+
export function invalidWorkspacePath(path) {
|
|
70
|
+
return new DagError("INVALID_WORKSPACE_PATH", `Workspace path "${path}" is not absolute. Paths must start with "/".`);
|
|
71
|
+
}
|
|
72
|
+
export function noWorkspacePaths(slug) {
|
|
73
|
+
return new DagError("NO_WORKSPACE_PATHS", `No workspace paths registered for project "${slug}". Use update_project_paths to add paths first.`);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Format a DagError into a CLI command error response.
|
|
77
|
+
* Delegates to the canonical `toolError` helper so all error responses
|
|
78
|
+
* share the same `[CODE] message` shape.
|
|
79
|
+
*/
|
|
80
|
+
export function formatError(err) {
|
|
81
|
+
return toolError(err.code, err.message);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Acquire an advisory lock on a file path.
|
|
3
|
+
* Returns a release function that must be called when done.
|
|
4
|
+
*
|
|
5
|
+
* @throws Error if lock cannot be acquired within timeout
|
|
6
|
+
*/
|
|
7
|
+
export declare function acquireLock(filePath: string): Promise<() => Promise<void>>;
|
|
8
|
+
/**
|
|
9
|
+
* Execute a function while holding a lock on the given file path.
|
|
10
|
+
* The lock is released after the function returns (or throws).
|
|
11
|
+
*/
|
|
12
|
+
export declare function withLock<T>(filePath: string, fn: () => T | Promise<T>): Promise<T>;
|
|
13
|
+
//# sourceMappingURL=file-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../../src/utils/file-lock.ts"],"names":[],"mappings":"AAkBA;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAmDhF;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOxF"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight advisory file locking for concurrent write protection.
|
|
3
|
+
*
|
|
4
|
+
* Uses a .lock file alongside the target file. The lock file is created
|
|
5
|
+
* with O_EXCL (exclusive create) which is atomic on all platforms.
|
|
6
|
+
* Includes a stale lock timeout to prevent deadlocks from crashed processes.
|
|
7
|
+
*/
|
|
8
|
+
import { constants } from "node:fs";
|
|
9
|
+
import { open, stat, unlink } from "node:fs/promises";
|
|
10
|
+
const STALE_LOCK_MS = 10_000; // 10 seconds — locks older than this are considered stale
|
|
11
|
+
const RETRY_INTERVAL_MS = 50;
|
|
12
|
+
const MAX_RETRIES = 200; // 10 seconds total max wait
|
|
13
|
+
function sleep(ms) {
|
|
14
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Acquire an advisory lock on a file path.
|
|
18
|
+
* Returns a release function that must be called when done.
|
|
19
|
+
*
|
|
20
|
+
* @throws Error if lock cannot be acquired within timeout
|
|
21
|
+
*/
|
|
22
|
+
export async function acquireLock(filePath) {
|
|
23
|
+
const lockPath = `${filePath}.lock`;
|
|
24
|
+
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
|
|
25
|
+
try {
|
|
26
|
+
// O_CREAT | O_EXCL — atomic create, fails if exists
|
|
27
|
+
const handle = await open(lockPath, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY);
|
|
28
|
+
await handle.close();
|
|
29
|
+
return async () => {
|
|
30
|
+
try {
|
|
31
|
+
await unlink(lockPath);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Already removed — fine
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
if (err &&
|
|
40
|
+
typeof err === "object" &&
|
|
41
|
+
"code" in err &&
|
|
42
|
+
err.code === "EEXIST") {
|
|
43
|
+
// Lock exists — check if stale
|
|
44
|
+
try {
|
|
45
|
+
const lockStat = await stat(lockPath);
|
|
46
|
+
if (Date.now() - lockStat.mtimeMs > STALE_LOCK_MS) {
|
|
47
|
+
try {
|
|
48
|
+
await unlink(lockPath);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Race with another cleaner — retry
|
|
52
|
+
}
|
|
53
|
+
continue; // Retry immediately after cleaning stale lock
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Lock gone, retry
|
|
58
|
+
}
|
|
59
|
+
await sleep(RETRY_INTERVAL_MS);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
throw err; // Unexpected error
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
throw new Error(`Could not acquire lock on "${filePath}" after ${MAX_RETRIES * RETRY_INTERVAL_MS}ms`);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Execute a function while holding a lock on the given file path.
|
|
69
|
+
* The lock is released after the function returns (or throws).
|
|
70
|
+
*/
|
|
71
|
+
export async function withLock(filePath, fn) {
|
|
72
|
+
const release = await acquireLock(filePath);
|
|
73
|
+
try {
|
|
74
|
+
return await fn();
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
await release();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=file-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../../src/utils/file-lock.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,0DAA0D;AACxF,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,4BAA4B;AAErD,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB;IAChD,MAAM,QAAQ,GAAG,GAAG,QAAQ,OAAO,CAAC;IAEpC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,oDAAoD;YACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CACvB,QAAQ,EACR,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,QAAQ,CAC1D,CAAC;YACF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YAErB,OAAO,KAAK,IAAI,EAAE;gBAChB,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;gBAAC,MAAM,CAAC;oBACP,yBAAyB;gBAC3B,CAAC;YACH,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IACE,GAAG;gBACH,OAAO,GAAG,KAAK,QAAQ;gBACvB,MAAM,IAAI,GAAG;gBACZ,GAAwB,CAAC,IAAI,KAAK,QAAQ,EAC3C,CAAC;gBACD,+BAA+B;gBAC/B,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACtC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,GAAG,aAAa,EAAE,CAAC;wBAClD,IAAI,CAAC;4BACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;wBACzB,CAAC;wBAAC,MAAM,CAAC;4BACP,oCAAoC;wBACtC,CAAC;wBACD,SAAS,CAAC,8CAA8C;oBAC1D,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,mBAAmB;gBACrB,CAAC;gBAED,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAC/B,SAAS;YACX,CAAC;YACD,MAAM,GAAG,CAAC,CAAC,mBAAmB;QAChC,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,WAAW,WAAW,GAAG,iBAAiB,IAAI,CACrF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAI,QAAgB,EAAE,EAAwB;IAC1E,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface GitLogEntry {
|
|
2
|
+
sha: string;
|
|
3
|
+
message: string;
|
|
4
|
+
date: string;
|
|
5
|
+
filesChanged: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function isGitRepo(cwd: string): boolean;
|
|
8
|
+
export declare function getHeadCommit(cwd: string): string | null;
|
|
9
|
+
export declare function getGitLog(cwd: string, options?: {
|
|
10
|
+
since?: string;
|
|
11
|
+
limit?: number;
|
|
12
|
+
}): GitLogEntry[];
|
|
13
|
+
export declare function getFilesChanged(cwd: string, fromCommit: string): string[];
|
|
14
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAcD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAExD;AAED,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,WAAW,EAAE,CAkCf;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAIzE"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
function exec(cmd, cwd) {
|
|
3
|
+
try {
|
|
4
|
+
return execSync(cmd, {
|
|
5
|
+
encoding: "utf-8",
|
|
6
|
+
cwd,
|
|
7
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
8
|
+
}).trim();
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function isGitRepo(cwd) {
|
|
15
|
+
return exec("git rev-parse --is-inside-work-tree", cwd) === "true";
|
|
16
|
+
}
|
|
17
|
+
export function getHeadCommit(cwd) {
|
|
18
|
+
return exec("git rev-parse --short HEAD", cwd);
|
|
19
|
+
}
|
|
20
|
+
export function getGitLog(cwd, options) {
|
|
21
|
+
const limit = options?.limit ?? 50;
|
|
22
|
+
const since = options?.since;
|
|
23
|
+
let cmd = `git log --format=%H%n%s%n%aI -n ${limit}`;
|
|
24
|
+
if (since) {
|
|
25
|
+
// Try as ISO date first; if it looks like a SHA, use commit range
|
|
26
|
+
if (/^[a-f0-9]{4,40}$/.test(since)) {
|
|
27
|
+
cmd += ` ${since}..HEAD`;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
cmd += ` --since="${since}"`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const output = exec(cmd, cwd);
|
|
34
|
+
if (!output)
|
|
35
|
+
return [];
|
|
36
|
+
const lines = output.split("\n");
|
|
37
|
+
const entries = [];
|
|
38
|
+
for (let i = 0; i + 2 < lines.length; i += 3) {
|
|
39
|
+
const fullSha = lines[i];
|
|
40
|
+
const message = lines[i + 1];
|
|
41
|
+
const date = lines[i + 2];
|
|
42
|
+
const shortSha = fullSha.slice(0, 7);
|
|
43
|
+
// Get files changed for this commit
|
|
44
|
+
const filesOutput = exec(`git diff-tree --no-commit-id --name-only -r ${fullSha}`, cwd);
|
|
45
|
+
const filesChanged = filesOutput ? filesOutput.split("\n").filter(Boolean) : [];
|
|
46
|
+
entries.push({ sha: shortSha, message, date, filesChanged });
|
|
47
|
+
}
|
|
48
|
+
return entries;
|
|
49
|
+
}
|
|
50
|
+
export function getFilesChanged(cwd, fromCommit) {
|
|
51
|
+
const output = exec(`git diff --name-only ${fromCommit} HEAD`, cwd);
|
|
52
|
+
if (!output)
|
|
53
|
+
return [];
|
|
54
|
+
return output.split("\n").filter(Boolean);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAS9C,SAAS,IAAI,CAAC,GAAW,EAAE,GAAW;IACpC,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,GAAG,EAAE;YACnB,QAAQ,EAAE,OAAO;YACjB,GAAG;YACH,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,IAAI,CAAC,qCAAqC,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,IAAI,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,GAAW,EACX,OAA4C;IAE5C,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC;IAE7B,IAAI,GAAG,GAAG,mCAAmC,KAAK,EAAE,CAAC;IACrD,IAAI,KAAK,EAAE,CAAC;QACV,kEAAkE;QAClE,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,GAAG,IAAI,IAAI,KAAK,QAAQ,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,aAAa,KAAK,GAAG,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAErC,oCAAoC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,+CAA+C,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QACxF,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEhF,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,UAAkB;IAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,UAAU,OAAO,EAAE,GAAG,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphify-knowledge.d.ts","sourceRoot":"","sources":["../../src/utils/graphify-knowledge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAwCvD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,iBAAiB,EAAE,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAoD/C"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { getProjectDir } from "./paths.js";
|
|
4
|
+
function slugifyTitle(title) {
|
|
5
|
+
return title
|
|
6
|
+
.toLowerCase()
|
|
7
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
8
|
+
.replace(/^-+|-+$/g, "")
|
|
9
|
+
.slice(0, 80);
|
|
10
|
+
}
|
|
11
|
+
async function readJsonSafe(filePath) {
|
|
12
|
+
try {
|
|
13
|
+
return JSON.parse(await readFile(filePath, "utf-8"));
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async function writeJson(filePath, data) {
|
|
20
|
+
await writeFile(filePath, JSON.stringify(data, null, 2), "utf-8");
|
|
21
|
+
}
|
|
22
|
+
export async function persistProposals(slug, proposals) {
|
|
23
|
+
const projectDir = getProjectDir(slug);
|
|
24
|
+
const knowledgeDir = join(projectDir, "knowledge");
|
|
25
|
+
await mkdir(knowledgeDir, { recursive: true });
|
|
26
|
+
const indexPath = join(knowledgeDir, "index.json");
|
|
27
|
+
const index = (await readJsonSafe(indexPath)) ?? { entries: [] };
|
|
28
|
+
const existingIds = new Set(index.entries.map((e) => e.id));
|
|
29
|
+
let created = 0;
|
|
30
|
+
let skipped = 0;
|
|
31
|
+
for (const proposal of proposals) {
|
|
32
|
+
const id = slugifyTitle(proposal.title);
|
|
33
|
+
if (existingIds.has(id)) {
|
|
34
|
+
skipped++;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const ts = new Date().toISOString();
|
|
38
|
+
const bodyFile = join("knowledge", `${id}.md`);
|
|
39
|
+
const meta = {
|
|
40
|
+
id,
|
|
41
|
+
normalizedId: id,
|
|
42
|
+
title: proposal.title,
|
|
43
|
+
kind: proposal.kind,
|
|
44
|
+
keywords: proposal.keywords,
|
|
45
|
+
summary: proposal.summary,
|
|
46
|
+
sourceFiles: proposal.sourceFiles,
|
|
47
|
+
file: bodyFile,
|
|
48
|
+
createdAt: ts,
|
|
49
|
+
updatedAt: ts,
|
|
50
|
+
};
|
|
51
|
+
await writeJson(join(knowledgeDir, `${id}.meta.json`), meta);
|
|
52
|
+
await writeFile(join(knowledgeDir, `${id}.md`), `# ${proposal.title}\n\n${proposal.summary}\n`, "utf-8");
|
|
53
|
+
index.entries.push(meta);
|
|
54
|
+
existingIds.add(id);
|
|
55
|
+
created++;
|
|
56
|
+
}
|
|
57
|
+
await writeJson(indexPath, index);
|
|
58
|
+
return { created, skipped };
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=graphify-knowledge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphify-knowledge.js","sourceRoot":"","sources":["../../src/utils/graphify-knowledge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export interface GraphifyInfo {
|
|
2
|
+
available: boolean;
|
|
3
|
+
version?: string;
|
|
4
|
+
path?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function detectGraphify(): GraphifyInfo;
|
|
7
|
+
export interface ExtractionResult {
|
|
8
|
+
success: true;
|
|
9
|
+
graphJsonPath: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ExtractionError {
|
|
12
|
+
success: false;
|
|
13
|
+
error: string;
|
|
14
|
+
code?: string;
|
|
15
|
+
}
|
|
16
|
+
export type ExtractionOutcome = ExtractionResult | ExtractionError;
|
|
17
|
+
export interface KnowledgeProposal {
|
|
18
|
+
title: string;
|
|
19
|
+
kind: "architecture" | "module" | "gotcha" | "pattern";
|
|
20
|
+
summary: string;
|
|
21
|
+
keywords: string[];
|
|
22
|
+
sourceFiles: Array<{
|
|
23
|
+
path: string;
|
|
24
|
+
anchor?: string;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
export interface IngestionResult {
|
|
28
|
+
proposals: KnowledgeProposal[];
|
|
29
|
+
stats: {
|
|
30
|
+
godNodes: number;
|
|
31
|
+
communities: number;
|
|
32
|
+
crossModuleCouplings: number;
|
|
33
|
+
totalProposals: number;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export declare function ingestGraph(graphJsonPath: string, _slug: string): IngestionResult;
|
|
37
|
+
export interface QueryResult {
|
|
38
|
+
success: true;
|
|
39
|
+
answer: string;
|
|
40
|
+
}
|
|
41
|
+
export interface QueryError {
|
|
42
|
+
success: false;
|
|
43
|
+
error: string;
|
|
44
|
+
}
|
|
45
|
+
export type QueryOutcome = QueryResult | QueryError;
|
|
46
|
+
export declare function queryGraph(question: string, workspacePath: string): QueryOutcome;
|
|
47
|
+
export declare function pathBetween(entityA: string, entityB: string, workspacePath: string): QueryOutcome;
|
|
48
|
+
export declare function runExtraction(workspacePath: string): ExtractionOutcome;
|
|
49
|
+
//# sourceMappingURL=graphify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphify.d.ts","sourceRoot":"","sources":["../../src/utils/graphify.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,cAAc,IAAI,YAAY,CAyB7C;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,IAAI,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAInE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAsHD,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAwGjF;AAID,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC;AAEpD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,YAAY,CA0BhF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,YAAY,CA0BjG;AAED,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB,CAsDtE"}
|