@aionlabsai/aion 0.2.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 +41 -0
- package/dist/agents/base-agent.d.ts +27 -0
- package/dist/agents/base-agent.d.ts.map +1 -0
- package/dist/agents/base-agent.js +97 -0
- package/dist/agents/base-agent.js.map +1 -0
- package/dist/agents/developer.d.ts +21 -0
- package/dist/agents/developer.d.ts.map +1 -0
- package/dist/agents/developer.js +51 -0
- package/dist/agents/developer.js.map +1 -0
- package/dist/agents/explain-agent.d.ts +17 -0
- package/dist/agents/explain-agent.d.ts.map +1 -0
- package/dist/agents/explain-agent.js +30 -0
- package/dist/agents/explain-agent.js.map +1 -0
- package/dist/agents/graph-agent.d.ts +21 -0
- package/dist/agents/graph-agent.d.ts.map +1 -0
- package/dist/agents/graph-agent.js +57 -0
- package/dist/agents/graph-agent.js.map +1 -0
- package/dist/agents/investigator.d.ts +21 -0
- package/dist/agents/investigator.d.ts.map +1 -0
- package/dist/agents/investigator.js +48 -0
- package/dist/agents/investigator.js.map +1 -0
- package/dist/agents/planner.d.ts +19 -0
- package/dist/agents/planner.d.ts.map +1 -0
- package/dist/agents/planner.js +43 -0
- package/dist/agents/planner.js.map +1 -0
- package/dist/agents/planner.test.d.ts +2 -0
- package/dist/agents/planner.test.d.ts.map +1 -0
- package/dist/agents/planner.test.js +21 -0
- package/dist/agents/planner.test.js.map +1 -0
- package/dist/agents/qa.d.ts +18 -0
- package/dist/agents/qa.d.ts.map +1 -0
- package/dist/agents/qa.js +44 -0
- package/dist/agents/qa.js.map +1 -0
- package/dist/agents/reviewer.d.ts +19 -0
- package/dist/agents/reviewer.d.ts.map +1 -0
- package/dist/agents/reviewer.js +47 -0
- package/dist/agents/reviewer.js.map +1 -0
- package/dist/agents/scanner.d.ts +19 -0
- package/dist/agents/scanner.d.ts.map +1 -0
- package/dist/agents/scanner.js +30 -0
- package/dist/agents/scanner.js.map +1 -0
- package/dist/agents/synthesizer.d.ts +16 -0
- package/dist/agents/synthesizer.d.ts.map +1 -0
- package/dist/agents/synthesizer.js +97 -0
- package/dist/agents/synthesizer.js.map +1 -0
- package/dist/agents/tests-agent.d.ts +17 -0
- package/dist/agents/tests-agent.d.ts.map +1 -0
- package/dist/agents/tests-agent.js +36 -0
- package/dist/agents/tests-agent.js.map +1 -0
- package/dist/cli/classifier.d.ts +8 -0
- package/dist/cli/classifier.d.ts.map +1 -0
- package/dist/cli/classifier.js +60 -0
- package/dist/cli/classifier.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +3 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +22 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +3 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +189 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/churn.d.ts +3 -0
- package/dist/cli/commands/churn.d.ts.map +1 -0
- package/dist/cli/commands/churn.js +76 -0
- package/dist/cli/commands/churn.js.map +1 -0
- package/dist/cli/commands/explain.d.ts +3 -0
- package/dist/cli/commands/explain.d.ts.map +1 -0
- package/dist/cli/commands/explain.js +115 -0
- package/dist/cli/commands/explain.js.map +1 -0
- package/dist/cli/commands/fix.d.ts +3 -0
- package/dist/cli/commands/fix.d.ts.map +1 -0
- package/dist/cli/commands/fix.js +22 -0
- package/dist/cli/commands/fix.js.map +1 -0
- package/dist/cli/commands/graph.d.ts +3 -0
- package/dist/cli/commands/graph.d.ts.map +1 -0
- package/dist/cli/commands/graph.js +311 -0
- package/dist/cli/commands/graph.js.map +1 -0
- package/dist/cli/commands/health.d.ts +3 -0
- package/dist/cli/commands/health.d.ts.map +1 -0
- package/dist/cli/commands/health.js +106 -0
- package/dist/cli/commands/health.js.map +1 -0
- package/dist/cli/commands/memory.d.ts +3 -0
- package/dist/cli/commands/memory.d.ts.map +1 -0
- package/dist/cli/commands/memory.js +199 -0
- package/dist/cli/commands/memory.js.map +1 -0
- package/dist/cli/commands/patterns.d.ts +3 -0
- package/dist/cli/commands/patterns.d.ts.map +1 -0
- package/dist/cli/commands/patterns.js +79 -0
- package/dist/cli/commands/patterns.js.map +1 -0
- package/dist/cli/commands/report.d.ts +3 -0
- package/dist/cli/commands/report.d.ts.map +1 -0
- package/dist/cli/commands/report.js +408 -0
- package/dist/cli/commands/report.js.map +1 -0
- package/dist/cli/commands/review.d.ts +3 -0
- package/dist/cli/commands/review.d.ts.map +1 -0
- package/dist/cli/commands/review.js +21 -0
- package/dist/cli/commands/review.js.map +1 -0
- package/dist/cli/commands/scan.d.ts +3 -0
- package/dist/cli/commands/scan.d.ts.map +1 -0
- package/dist/cli/commands/scan.js +129 -0
- package/dist/cli/commands/scan.js.map +1 -0
- package/dist/cli/interactive.d.ts +3 -0
- package/dist/cli/interactive.d.ts.map +1 -0
- package/dist/cli/interactive.js +115 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli/menu.d.ts +2 -0
- package/dist/cli/menu.d.ts.map +1 -0
- package/dist/cli/menu.js +208 -0
- package/dist/cli/menu.js.map +1 -0
- package/dist/cli/runtime-options.d.ts +19 -0
- package/dist/cli/runtime-options.d.ts.map +1 -0
- package/dist/cli/runtime-options.js +56 -0
- package/dist/cli/runtime-options.js.map +1 -0
- package/dist/cli/tui.d.ts +11 -0
- package/dist/cli/tui.d.ts.map +1 -0
- package/dist/cli/tui.js +162 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/cli/ui/renderer.d.ts +15 -0
- package/dist/cli/ui/renderer.d.ts.map +1 -0
- package/dist/cli/ui/renderer.js +129 -0
- package/dist/cli/ui/renderer.js.map +1 -0
- package/dist/core/cost-tracker.d.ts +26 -0
- package/dist/core/cost-tracker.d.ts.map +1 -0
- package/dist/core/cost-tracker.js +71 -0
- package/dist/core/cost-tracker.js.map +1 -0
- package/dist/core/cost-tracker.test.d.ts +2 -0
- package/dist/core/cost-tracker.test.d.ts.map +1 -0
- package/dist/core/cost-tracker.test.js +36 -0
- package/dist/core/cost-tracker.test.js.map +1 -0
- package/dist/core/orchestrator.d.ts +46 -0
- package/dist/core/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestrator.js +67 -0
- package/dist/core/orchestrator.js.map +1 -0
- package/dist/core/pipeline-context.d.ts +18 -0
- package/dist/core/pipeline-context.d.ts.map +1 -0
- package/dist/core/pipeline-context.js +30 -0
- package/dist/core/pipeline-context.js.map +1 -0
- package/dist/core/pipelines/analyze-pipeline.d.ts +4 -0
- package/dist/core/pipelines/analyze-pipeline.d.ts.map +1 -0
- package/dist/core/pipelines/analyze-pipeline.js +69 -0
- package/dist/core/pipelines/analyze-pipeline.js.map +1 -0
- package/dist/core/pipelines/audit-fix-pipeline.d.ts +24 -0
- package/dist/core/pipelines/audit-fix-pipeline.d.ts.map +1 -0
- package/dist/core/pipelines/audit-fix-pipeline.js +79 -0
- package/dist/core/pipelines/audit-fix-pipeline.js.map +1 -0
- package/dist/core/pipelines/audit-pipeline.d.ts +33 -0
- package/dist/core/pipelines/audit-pipeline.d.ts.map +1 -0
- package/dist/core/pipelines/audit-pipeline.js +353 -0
- package/dist/core/pipelines/audit-pipeline.js.map +1 -0
- package/dist/core/pipelines/audit-pipeline.test.d.ts +2 -0
- package/dist/core/pipelines/audit-pipeline.test.d.ts.map +1 -0
- package/dist/core/pipelines/audit-pipeline.test.js +135 -0
- package/dist/core/pipelines/audit-pipeline.test.js.map +1 -0
- package/dist/core/pipelines/fix-pipeline.d.ts +9 -0
- package/dist/core/pipelines/fix-pipeline.d.ts.map +1 -0
- package/dist/core/pipelines/fix-pipeline.js +151 -0
- package/dist/core/pipelines/fix-pipeline.js.map +1 -0
- package/dist/core/pipelines/review-pipeline.d.ts +4 -0
- package/dist/core/pipelines/review-pipeline.d.ts.map +1 -0
- package/dist/core/pipelines/review-pipeline.js +65 -0
- package/dist/core/pipelines/review-pipeline.js.map +1 -0
- package/dist/core/repo-context.d.ts +2 -0
- package/dist/core/repo-context.d.ts.map +1 -0
- package/dist/core/repo-context.js +12 -0
- package/dist/core/repo-context.js.map +1 -0
- package/dist/core/repo-context.test.d.ts +2 -0
- package/dist/core/repo-context.test.d.ts.map +1 -0
- package/dist/core/repo-context.test.js +40 -0
- package/dist/core/repo-context.test.js.map +1 -0
- package/dist/core/runtime-policy.d.ts +35 -0
- package/dist/core/runtime-policy.d.ts.map +1 -0
- package/dist/core/runtime-policy.js +37 -0
- package/dist/core/runtime-policy.js.map +1 -0
- package/dist/core/runtime-policy.test.d.ts +2 -0
- package/dist/core/runtime-policy.test.d.ts.map +1 -0
- package/dist/core/runtime-policy.test.js +27 -0
- package/dist/core/runtime-policy.test.js.map +1 -0
- package/dist/core/state-machine.d.ts +17 -0
- package/dist/core/state-machine.d.ts.map +1 -0
- package/dist/core/state-machine.js +45 -0
- package/dist/core/state-machine.js.map +1 -0
- package/dist/core/task.d.ts +29 -0
- package/dist/core/task.d.ts.map +1 -0
- package/dist/core/task.js +2 -0
- package/dist/core/task.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -0
- package/dist/infra/bm25.d.ts +30 -0
- package/dist/infra/bm25.d.ts.map +1 -0
- package/dist/infra/bm25.js +69 -0
- package/dist/infra/bm25.js.map +1 -0
- package/dist/infra/bm25.test.d.ts +2 -0
- package/dist/infra/bm25.test.d.ts.map +1 -0
- package/dist/infra/bm25.test.js +17 -0
- package/dist/infra/bm25.test.js.map +1 -0
- package/dist/infra/chunker.d.ts +20 -0
- package/dist/infra/chunker.d.ts.map +1 -0
- package/dist/infra/chunker.js +165 -0
- package/dist/infra/chunker.js.map +1 -0
- package/dist/infra/chunker.test.d.ts +2 -0
- package/dist/infra/chunker.test.d.ts.map +1 -0
- package/dist/infra/chunker.test.js +33 -0
- package/dist/infra/chunker.test.js.map +1 -0
- package/dist/infra/code-metrics.d.ts +39 -0
- package/dist/infra/code-metrics.d.ts.map +1 -0
- package/dist/infra/code-metrics.js +222 -0
- package/dist/infra/code-metrics.js.map +1 -0
- package/dist/infra/db/database.d.ts +4 -0
- package/dist/infra/db/database.d.ts.map +1 -0
- package/dist/infra/db/database.js +25 -0
- package/dist/infra/db/database.js.map +1 -0
- package/dist/infra/db/evidence-repo.d.ts +4 -0
- package/dist/infra/db/evidence-repo.d.ts.map +1 -0
- package/dist/infra/db/evidence-repo.js +8 -0
- package/dist/infra/db/evidence-repo.js.map +1 -0
- package/dist/infra/db/migrations.d.ts +2 -0
- package/dist/infra/db/migrations.d.ts.map +1 -0
- package/dist/infra/db/migrations.js +10 -0
- package/dist/infra/db/migrations.js.map +1 -0
- package/dist/infra/db/store.d.ts +12 -0
- package/dist/infra/db/store.d.ts.map +1 -0
- package/dist/infra/db/store.js +73 -0
- package/dist/infra/db/store.js.map +1 -0
- package/dist/infra/db/task-repo.d.ts +8 -0
- package/dist/infra/db/task-repo.d.ts.map +1 -0
- package/dist/infra/db/task-repo.js +19 -0
- package/dist/infra/db/task-repo.js.map +1 -0
- package/dist/infra/dep-graph-python.d.ts +3 -0
- package/dist/infra/dep-graph-python.d.ts.map +1 -0
- package/dist/infra/dep-graph-python.js +154 -0
- package/dist/infra/dep-graph-python.js.map +1 -0
- package/dist/infra/dep-graph.d.ts +20 -0
- package/dist/infra/dep-graph.d.ts.map +1 -0
- package/dist/infra/dep-graph.js +102 -0
- package/dist/infra/dep-graph.js.map +1 -0
- package/dist/infra/embeddings.d.ts +19 -0
- package/dist/infra/embeddings.d.ts.map +1 -0
- package/dist/infra/embeddings.js +110 -0
- package/dist/infra/embeddings.js.map +1 -0
- package/dist/infra/evidence-gate.d.ts +11 -0
- package/dist/infra/evidence-gate.d.ts.map +1 -0
- package/dist/infra/evidence-gate.js +21 -0
- package/dist/infra/evidence-gate.js.map +1 -0
- package/dist/infra/evidence-gate.test.d.ts +2 -0
- package/dist/infra/evidence-gate.test.d.ts.map +1 -0
- package/dist/infra/evidence-gate.test.js +36 -0
- package/dist/infra/evidence-gate.test.js.map +1 -0
- package/dist/infra/git-analysis.d.ts +26 -0
- package/dist/infra/git-analysis.d.ts.map +1 -0
- package/dist/infra/git-analysis.js +102 -0
- package/dist/infra/git-analysis.js.map +1 -0
- package/dist/infra/health-score.d.ts +31 -0
- package/dist/infra/health-score.d.ts.map +1 -0
- package/dist/infra/health-score.js +136 -0
- package/dist/infra/health-score.js.map +1 -0
- package/dist/infra/knowledge.d.ts +15 -0
- package/dist/infra/knowledge.d.ts.map +1 -0
- package/dist/infra/knowledge.js +124 -0
- package/dist/infra/knowledge.js.map +1 -0
- package/dist/infra/lang-detect.d.ts +14 -0
- package/dist/infra/lang-detect.d.ts.map +1 -0
- package/dist/infra/lang-detect.js +135 -0
- package/dist/infra/lang-detect.js.map +1 -0
- package/dist/infra/local-qa.d.ts +6 -0
- package/dist/infra/local-qa.d.ts.map +1 -0
- package/dist/infra/local-qa.js +66 -0
- package/dist/infra/local-qa.js.map +1 -0
- package/dist/infra/pattern-detect.d.ts +30 -0
- package/dist/infra/pattern-detect.d.ts.map +1 -0
- package/dist/infra/pattern-detect.js +250 -0
- package/dist/infra/pattern-detect.js.map +1 -0
- package/dist/infra/persona-presets.d.ts +29 -0
- package/dist/infra/persona-presets.d.ts.map +1 -0
- package/dist/infra/persona-presets.js +110 -0
- package/dist/infra/persona-presets.js.map +1 -0
- package/dist/infra/repo-index.d.ts +50 -0
- package/dist/infra/repo-index.d.ts.map +1 -0
- package/dist/infra/repo-index.js +228 -0
- package/dist/infra/repo-index.js.map +1 -0
- package/dist/infra/repo-index.test.d.ts +2 -0
- package/dist/infra/repo-index.test.d.ts.map +1 -0
- package/dist/infra/repo-index.test.js +53 -0
- package/dist/infra/repo-index.test.js.map +1 -0
- package/dist/infra/repo-query.d.ts +11 -0
- package/dist/infra/repo-query.d.ts.map +1 -0
- package/dist/infra/repo-query.js +67 -0
- package/dist/infra/repo-query.js.map +1 -0
- package/dist/infra/repo-query.test.d.ts +2 -0
- package/dist/infra/repo-query.test.d.ts.map +1 -0
- package/dist/infra/repo-query.test.js +34 -0
- package/dist/infra/repo-query.test.js.map +1 -0
- package/dist/infra/sbom.d.ts +16 -0
- package/dist/infra/sbom.d.ts.map +1 -0
- package/dist/infra/sbom.js +111 -0
- package/dist/infra/sbom.js.map +1 -0
- package/dist/infra/semgrep.d.ts +10 -0
- package/dist/infra/semgrep.d.ts.map +1 -0
- package/dist/infra/semgrep.js +122 -0
- package/dist/infra/semgrep.js.map +1 -0
- package/dist/infra/semgrep.test.d.ts +2 -0
- package/dist/infra/semgrep.test.d.ts.map +1 -0
- package/dist/infra/semgrep.test.js +39 -0
- package/dist/infra/semgrep.test.js.map +1 -0
- package/dist/infra/tmux.d.ts +9 -0
- package/dist/infra/tmux.d.ts.map +1 -0
- package/dist/infra/tmux.js +42 -0
- package/dist/infra/tmux.js.map +1 -0
- package/dist/infra/worktree.d.ts +9 -0
- package/dist/infra/worktree.d.ts.map +1 -0
- package/dist/infra/worktree.js +51 -0
- package/dist/infra/worktree.js.map +1 -0
- package/dist/prompts/developer.d.ts +2 -0
- package/dist/prompts/developer.d.ts.map +1 -0
- package/dist/prompts/developer.js +36 -0
- package/dist/prompts/developer.js.map +1 -0
- package/dist/prompts/explain.d.ts +3 -0
- package/dist/prompts/explain.d.ts.map +1 -0
- package/dist/prompts/explain.js +38 -0
- package/dist/prompts/explain.js.map +1 -0
- package/dist/prompts/investigator.d.ts +3 -0
- package/dist/prompts/investigator.d.ts.map +1 -0
- package/dist/prompts/investigator.js +46 -0
- package/dist/prompts/investigator.js.map +1 -0
- package/dist/prompts/planner.d.ts +2 -0
- package/dist/prompts/planner.d.ts.map +1 -0
- package/dist/prompts/planner.js +37 -0
- package/dist/prompts/planner.js.map +1 -0
- package/dist/prompts/qa.d.ts +2 -0
- package/dist/prompts/qa.d.ts.map +1 -0
- package/dist/prompts/qa.js +37 -0
- package/dist/prompts/qa.js.map +1 -0
- package/dist/prompts/reviewer.d.ts +2 -0
- package/dist/prompts/reviewer.d.ts.map +1 -0
- package/dist/prompts/reviewer.js +36 -0
- package/dist/prompts/reviewer.js.map +1 -0
- package/dist/prompts/scanner-domains-infra.d.ts +48 -0
- package/dist/prompts/scanner-domains-infra.d.ts.map +1 -0
- package/dist/prompts/scanner-domains-infra.js +141 -0
- package/dist/prompts/scanner-domains-infra.js.map +1 -0
- package/dist/prompts/scanner.d.ts +10 -0
- package/dist/prompts/scanner.d.ts.map +1 -0
- package/dist/prompts/scanner.js +185 -0
- package/dist/prompts/scanner.js.map +1 -0
- package/dist/prompts/synthesizer.d.ts +2 -0
- package/dist/prompts/synthesizer.d.ts.map +1 -0
- package/dist/prompts/synthesizer.js +36 -0
- package/dist/prompts/synthesizer.js.map +1 -0
- package/dist/providers/cli-provider.d.ts +16 -0
- package/dist/providers/cli-provider.d.ts.map +1 -0
- package/dist/providers/cli-provider.js +145 -0
- package/dist/providers/cli-provider.js.map +1 -0
- package/dist/providers/openrouter-provider.d.ts +8 -0
- package/dist/providers/openrouter-provider.d.ts.map +1 -0
- package/dist/providers/openrouter-provider.js +86 -0
- package/dist/providers/openrouter-provider.js.map +1 -0
- package/dist/providers/sdk-provider.d.ts +6 -0
- package/dist/providers/sdk-provider.d.ts.map +1 -0
- package/dist/providers/sdk-provider.js +0 -0
- package/dist/providers/sdk-provider.js.map +1 -0
- package/dist/providers/types.d.ts +13 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/schemas/audit.d.ts +278 -0
- package/dist/schemas/audit.d.ts.map +1 -0
- package/dist/schemas/audit.js +37 -0
- package/dist/schemas/audit.js.map +1 -0
- package/dist/schemas/audit.test.d.ts +2 -0
- package/dist/schemas/audit.test.d.ts.map +1 -0
- package/dist/schemas/audit.test.js +41 -0
- package/dist/schemas/audit.test.js.map +1 -0
- package/dist/schemas/evidence.d.ts +48 -0
- package/dist/schemas/evidence.d.ts.map +1 -0
- package/dist/schemas/evidence.js +17 -0
- package/dist/schemas/evidence.js.map +1 -0
- package/dist/schemas/patch.d.ts +25 -0
- package/dist/schemas/patch.d.ts.map +1 -0
- package/dist/schemas/patch.js +10 -0
- package/dist/schemas/patch.js.map +1 -0
- package/dist/schemas/plan.d.ts +69 -0
- package/dist/schemas/plan.d.ts.map +1 -0
- package/dist/schemas/plan.js +17 -0
- package/dist/schemas/plan.js.map +1 -0
- package/dist/schemas/qa.d.ts +28 -0
- package/dist/schemas/qa.d.ts.map +1 -0
- package/dist/schemas/qa.js +11 -0
- package/dist/schemas/qa.js.map +1 -0
- package/dist/schemas/review.d.ts +71 -0
- package/dist/schemas/review.d.ts.map +1 -0
- package/dist/schemas/review.js +16 -0
- package/dist/schemas/review.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/cli/tui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type TaskState } from '../../core/state-machine.js';
|
|
2
|
+
import type { TaskResult } from '../../core/task.js';
|
|
3
|
+
export declare class Renderer {
|
|
4
|
+
private spinners;
|
|
5
|
+
private currentState;
|
|
6
|
+
showState(state: TaskState): void;
|
|
7
|
+
private printProgress;
|
|
8
|
+
agentStart(agentName: string): void;
|
|
9
|
+
agentChunk(agentName: string, text: string): void;
|
|
10
|
+
agentDone(agentName: string, durationMs: number): void;
|
|
11
|
+
showError(err: unknown): void;
|
|
12
|
+
showCost(summary: string): void;
|
|
13
|
+
showResult(result: TaskResult): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/renderer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAerD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,YAAY,CAAoB;IAExC,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAOjC,OAAO,CAAC,aAAa;IAerB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKnC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAWjD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQtD,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAM7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI/B,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;CA+DrC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { STATE_ORDER } from '../../core/state-machine.js';
|
|
4
|
+
const STATE_COLOR = {
|
|
5
|
+
NEW: chalk.gray,
|
|
6
|
+
INVESTIGATING: chalk.yellow,
|
|
7
|
+
REPRODUCED: chalk.blue,
|
|
8
|
+
ROOT_CAUSE_FOUND: chalk.cyan,
|
|
9
|
+
PATCH_CREATED: chalk.magenta,
|
|
10
|
+
REVIEWED: chalk.blueBright,
|
|
11
|
+
TESTED: chalk.green,
|
|
12
|
+
VERIFIED: chalk.greenBright,
|
|
13
|
+
DONE: chalk.bold.green,
|
|
14
|
+
FAILED: chalk.bold.red,
|
|
15
|
+
};
|
|
16
|
+
export class Renderer {
|
|
17
|
+
spinners = new Map();
|
|
18
|
+
currentState = 'NEW';
|
|
19
|
+
showState(state) {
|
|
20
|
+
this.currentState = state;
|
|
21
|
+
const color = STATE_COLOR[state] ?? chalk.white;
|
|
22
|
+
process.stdout.write('\n' + color(`▶ ${state}`) + '\n');
|
|
23
|
+
this.printProgress(state);
|
|
24
|
+
}
|
|
25
|
+
printProgress(active) {
|
|
26
|
+
const activeIdx = STATE_ORDER.indexOf(active);
|
|
27
|
+
const isFailed = active === 'FAILED';
|
|
28
|
+
const bar = STATE_ORDER.filter((s) => s !== 'FAILED').map((s, i) => {
|
|
29
|
+
if (isFailed && i < activeIdx)
|
|
30
|
+
return chalk.green(`✓ ${s}`);
|
|
31
|
+
if (s === active)
|
|
32
|
+
return chalk.bold.white(`[${s}]`);
|
|
33
|
+
const idx = STATE_ORDER.indexOf(s);
|
|
34
|
+
return idx < activeIdx ? chalk.green(`✓ ${s}`) : chalk.gray(s);
|
|
35
|
+
}).join(' → ');
|
|
36
|
+
const suffix = isFailed ? ' → ' + chalk.bold.red('[FAILED]') : '';
|
|
37
|
+
process.stdout.write(bar + suffix + '\n\n');
|
|
38
|
+
}
|
|
39
|
+
agentStart(agentName) {
|
|
40
|
+
const spinner = ora({ text: chalk.dim(`${agentName} thinking...`), spinner: 'dots' }).start();
|
|
41
|
+
this.spinners.set(agentName, spinner);
|
|
42
|
+
}
|
|
43
|
+
agentChunk(agentName, text) {
|
|
44
|
+
const spinner = this.spinners.get(agentName);
|
|
45
|
+
if (spinner) {
|
|
46
|
+
// Show last 60 chars of output as spinner suffix
|
|
47
|
+
const preview = text.replace(/\n/g, ' ').slice(-60);
|
|
48
|
+
spinner.text = chalk.dim(`[${agentName}] `) + preview;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
process.stdout.write(chalk.dim(`[${agentName}] `) + text);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
agentDone(agentName, durationMs) {
|
|
55
|
+
const spinner = this.spinners.get(agentName);
|
|
56
|
+
if (spinner) {
|
|
57
|
+
spinner.succeed(chalk.green(`${agentName} done`) + chalk.gray(` (${durationMs}ms)`));
|
|
58
|
+
this.spinners.delete(agentName);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
showError(err) {
|
|
62
|
+
for (const [, spinner] of this.spinners)
|
|
63
|
+
spinner.fail();
|
|
64
|
+
this.spinners.clear();
|
|
65
|
+
console.error(chalk.red('\n✗ Error: ') + (err instanceof Error ? err.message : String(err)));
|
|
66
|
+
}
|
|
67
|
+
showCost(summary) {
|
|
68
|
+
console.log(chalk.dim('\n' + summary));
|
|
69
|
+
}
|
|
70
|
+
showResult(result) {
|
|
71
|
+
for (const [, spinner] of this.spinners)
|
|
72
|
+
spinner.stop();
|
|
73
|
+
this.spinners.clear();
|
|
74
|
+
console.log('\n' + chalk.bold('─'.repeat(60)));
|
|
75
|
+
if (result.state === 'DONE') {
|
|
76
|
+
console.log(chalk.bold.green('✓ DONE') + chalk.gray(` in ${result.durationMs}ms`));
|
|
77
|
+
}
|
|
78
|
+
else if (result.state === 'REPRODUCED' && result.plan) {
|
|
79
|
+
console.log(chalk.bold.cyan('✓ ANALYSIS COMPLETE') + chalk.gray(` in ${result.durationMs}ms`));
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
console.log(chalk.bold.red(`✗ ${result.state}`) + chalk.gray(` after ${result.durationMs}ms`));
|
|
83
|
+
if (result.errors.length > 0) {
|
|
84
|
+
console.log(chalk.red('\nErrors:'));
|
|
85
|
+
result.errors.forEach((e) => console.log(chalk.red(` • ${e}`)));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (result.plan && !result.evidence) {
|
|
89
|
+
console.log(chalk.bold('\nAnalysis:'));
|
|
90
|
+
console.log(` ${result.plan.summary}`);
|
|
91
|
+
console.log(` Risk: ${chalk.yellow(result.plan.riskLevel)}`);
|
|
92
|
+
if (result.plan.relevantModules.length > 0) {
|
|
93
|
+
console.log(` Modules: ${result.plan.relevantModules.join(', ')}`);
|
|
94
|
+
}
|
|
95
|
+
if (result.plan.constraints.length > 0) {
|
|
96
|
+
console.log(chalk.bold('\nFindings:'));
|
|
97
|
+
result.plan.constraints.forEach((c) => console.log(` • ${c}`));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (result.evidence) {
|
|
101
|
+
console.log(chalk.bold('\nEvidence:'));
|
|
102
|
+
console.log(` Reproduced: ${result.evidence.reproduced ? chalk.green('yes') : chalk.red('no')}`);
|
|
103
|
+
console.log(` Confidence: ${chalk.cyan(result.evidence.confidence + '%')}`);
|
|
104
|
+
console.log(` Summary: ${result.evidence.summary}`);
|
|
105
|
+
}
|
|
106
|
+
if (result.patch) {
|
|
107
|
+
console.log(chalk.bold('\nPatch:'));
|
|
108
|
+
console.log(` Files: ${result.patch.filesChanged.join(', ')}`);
|
|
109
|
+
console.log(` ${result.patch.description}`);
|
|
110
|
+
}
|
|
111
|
+
if (result.review) {
|
|
112
|
+
const approved = result.review.approved;
|
|
113
|
+
console.log(chalk.bold('\nReview:'));
|
|
114
|
+
console.log(` Approved: ${approved ? chalk.green('yes') : chalk.red('no')}`);
|
|
115
|
+
console.log(` Regression risk: ${result.review.regressionRisk}`);
|
|
116
|
+
if (result.review.findings.length > 0) {
|
|
117
|
+
console.log(` Findings: ${result.review.findings.length}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (result.qaResult) {
|
|
121
|
+
console.log(chalk.bold('\nQA:'));
|
|
122
|
+
console.log(` Build: ${result.qaResult.buildOk ? chalk.green('OK') : chalk.red('FAIL')}`);
|
|
123
|
+
console.log(` Tests: ${result.qaResult.testsOk ? chalk.green('OK') : chalk.red('FAIL')}`);
|
|
124
|
+
console.log(` Bug reproduced after fix: ${result.qaResult.reproductionStillFails ? chalk.red('yes (fix failed)') : chalk.green('no (fix worked)')}`);
|
|
125
|
+
}
|
|
126
|
+
console.log(chalk.bold('─'.repeat(60)));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/cli/ui/renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface TokenUsage {
|
|
2
|
+
inputTokens: number;
|
|
3
|
+
outputTokens: number;
|
|
4
|
+
cacheReadTokens: number;
|
|
5
|
+
cacheWriteTokens: number;
|
|
6
|
+
}
|
|
7
|
+
export interface AgentCost {
|
|
8
|
+
agentName: string;
|
|
9
|
+
model: string;
|
|
10
|
+
usage: TokenUsage;
|
|
11
|
+
costUsd: number;
|
|
12
|
+
durationMs: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class CostTracker {
|
|
15
|
+
private entries;
|
|
16
|
+
private unavailableAgents;
|
|
17
|
+
record(agentName: string, model: string, usage: TokenUsage, durationMs: number): void;
|
|
18
|
+
recordUnavailable(agentName: string): void;
|
|
19
|
+
usageAvailable(): boolean;
|
|
20
|
+
totalUsd(): number;
|
|
21
|
+
totalTokens(): TokenUsage;
|
|
22
|
+
assertUnderBudget(capUsd: number): void;
|
|
23
|
+
summary(): string;
|
|
24
|
+
byAgent(): AgentCost[];
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=cost-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-tracker.d.ts","sourceRoot":"","sources":["../../src/core/cost-tracker.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAoBD,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,iBAAiB,CAAqB;IAE9C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAWrF,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAM1C,cAAc,IAAI,OAAO;IAIzB,QAAQ,IAAI,MAAM;IAIlB,WAAW,IAAI,UAAU;IAYzB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOvC,OAAO,IAAI,MAAM;IAejB,OAAO,IAAI,SAAS,EAAE;CAGvB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// Pricing per million tokens (public rates as of 2025)
|
|
2
|
+
const PRICING = {
|
|
3
|
+
'claude-haiku-4-5-20251001': { input: 0.80, output: 4.00, cacheRead: 0.08, cacheWrite: 1.00 },
|
|
4
|
+
'claude-sonnet-4-6': { input: 3.00, output: 15.00, cacheRead: 0.30, cacheWrite: 3.75 },
|
|
5
|
+
'claude-opus-4-8': { input: 15.00, output: 75.00, cacheRead: 1.50, cacheWrite: 18.75 },
|
|
6
|
+
};
|
|
7
|
+
function calcCost(model, usage) {
|
|
8
|
+
const rates = PRICING[model] ?? PRICING['claude-haiku-4-5-20251001'];
|
|
9
|
+
const M = 1_000_000;
|
|
10
|
+
return ((usage.inputTokens * rates.input) / M +
|
|
11
|
+
(usage.outputTokens * rates.output) / M +
|
|
12
|
+
(usage.cacheReadTokens * rates.cacheRead) / M +
|
|
13
|
+
(usage.cacheWriteTokens * rates.cacheWrite) / M);
|
|
14
|
+
}
|
|
15
|
+
export class CostTracker {
|
|
16
|
+
entries = [];
|
|
17
|
+
unavailableAgents = new Set();
|
|
18
|
+
record(agentName, model, usage, durationMs) {
|
|
19
|
+
this.unavailableAgents.delete(agentName);
|
|
20
|
+
this.entries.push({
|
|
21
|
+
agentName,
|
|
22
|
+
model,
|
|
23
|
+
usage,
|
|
24
|
+
costUsd: calcCost(model, usage),
|
|
25
|
+
durationMs,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
recordUnavailable(agentName) {
|
|
29
|
+
if (!this.entries.some((entry) => entry.agentName === agentName)) {
|
|
30
|
+
this.unavailableAgents.add(agentName);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
usageAvailable() {
|
|
34
|
+
return this.entries.length > 0 || this.unavailableAgents.size === 0;
|
|
35
|
+
}
|
|
36
|
+
totalUsd() {
|
|
37
|
+
return this.entries.reduce((s, e) => s + e.costUsd, 0);
|
|
38
|
+
}
|
|
39
|
+
totalTokens() {
|
|
40
|
+
return this.entries.reduce((acc, e) => ({
|
|
41
|
+
inputTokens: acc.inputTokens + e.usage.inputTokens,
|
|
42
|
+
outputTokens: acc.outputTokens + e.usage.outputTokens,
|
|
43
|
+
cacheReadTokens: acc.cacheReadTokens + e.usage.cacheReadTokens,
|
|
44
|
+
cacheWriteTokens: acc.cacheWriteTokens + e.usage.cacheWriteTokens,
|
|
45
|
+
}), { inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0 });
|
|
46
|
+
}
|
|
47
|
+
assertUnderBudget(capUsd) {
|
|
48
|
+
const total = this.totalUsd();
|
|
49
|
+
if (total > capUsd) {
|
|
50
|
+
throw new Error(`Budget exceeded: $${total.toFixed(4)} > cap $${capUsd}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
summary() {
|
|
54
|
+
const total = this.totalTokens();
|
|
55
|
+
const usd = this.totalUsd();
|
|
56
|
+
const saved = total.cacheReadTokens > 0
|
|
57
|
+
? ` cache saved: ~$${((total.cacheReadTokens * 0.72) / 1_000_000).toFixed(4)}`
|
|
58
|
+
: '';
|
|
59
|
+
return [
|
|
60
|
+
this.usageAvailable() ? `cost: $${usd.toFixed(4)}` : 'cost: unavailable',
|
|
61
|
+
`tokens: ${total.inputTokens}in ${total.outputTokens}out`,
|
|
62
|
+
`cache: ${total.cacheReadTokens}read ${total.cacheWriteTokens}write`,
|
|
63
|
+
this.unavailableAgents.size > 0 ? `usage unavailable: ${[...this.unavailableAgents].sort().join(', ')}` : '',
|
|
64
|
+
saved,
|
|
65
|
+
].filter(Boolean).join(' | ');
|
|
66
|
+
}
|
|
67
|
+
byAgent() {
|
|
68
|
+
return [...this.entries].sort((a, b) => b.costUsd - a.costUsd);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=cost-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-tracker.js","sourceRoot":"","sources":["../../src/core/cost-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-tracker.test.d.ts","sourceRoot":"","sources":["../../src/core/cost-tracker.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { CostTracker } from './cost-tracker.js';
|
|
4
|
+
test('CostTracker summarizes real SDK usage', () => {
|
|
5
|
+
const costs = new CostTracker();
|
|
6
|
+
costs.record('scanner-security', 'claude-haiku-4-5', {
|
|
7
|
+
inputTokens: 1_000,
|
|
8
|
+
outputTokens: 500,
|
|
9
|
+
cacheReadTokens: 200,
|
|
10
|
+
cacheWriteTokens: 100,
|
|
11
|
+
}, 123);
|
|
12
|
+
assert.equal(costs.usageAvailable(), true);
|
|
13
|
+
assert.equal(costs.totalTokens().inputTokens, 1_000);
|
|
14
|
+
assert.match(costs.summary(), /cost: \$0\.00/);
|
|
15
|
+
assert.match(costs.summary(), /tokens: 1000in 500out/);
|
|
16
|
+
});
|
|
17
|
+
test('CostTracker reports unavailable usage for CLI providers', () => {
|
|
18
|
+
const costs = new CostTracker();
|
|
19
|
+
costs.recordUnavailable('scanner-security');
|
|
20
|
+
assert.equal(costs.usageAvailable(), false);
|
|
21
|
+
assert.match(costs.summary(), /cost: unavailable/);
|
|
22
|
+
assert.match(costs.summary(), /usage unavailable: scanner-security/);
|
|
23
|
+
});
|
|
24
|
+
test('real usage clears unavailable marker for the same agent', () => {
|
|
25
|
+
const costs = new CostTracker();
|
|
26
|
+
costs.recordUnavailable('scanner-security');
|
|
27
|
+
costs.record('scanner-security', 'claude-haiku-4-5', {
|
|
28
|
+
inputTokens: 1,
|
|
29
|
+
outputTokens: 1,
|
|
30
|
+
cacheReadTokens: 0,
|
|
31
|
+
cacheWriteTokens: 0,
|
|
32
|
+
}, 1);
|
|
33
|
+
assert.equal(costs.usageAvailable(), true);
|
|
34
|
+
assert.doesNotMatch(costs.summary(), /usage unavailable/);
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=cost-tracker.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-tracker.test.js","sourceRoot":"","sources":["../../src/core/cost-tracker.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACjD,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;IAEhC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,EAAE;QACnD,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,GAAG;QACjB,eAAe,EAAE,GAAG;QACpB,gBAAgB,EAAE,GAAG;KACtB,EAAE,GAAG,CAAC,CAAC;IAER,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;IAC/C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,uBAAuB,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;IACnE,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;IAEhC,KAAK,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAE5C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACnD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,qCAAqC,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;IACnE,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;IAEhC,KAAK,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAC5C,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,EAAE;QACnD,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,eAAe,EAAE,CAAC;QAClB,gBAAgB,EAAE,CAAC;KACpB,EAAE,CAAC,CAAC,CAAC;IAEN,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3C,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC,CAAC;AAC5D,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import type { TaskResult } from './task.js';
|
|
3
|
+
import type { TaskState } from './state-machine.js';
|
|
4
|
+
import { type RuntimePolicyInput } from './runtime-policy.js';
|
|
5
|
+
import type { AuditReport } from '../schemas/audit.js';
|
|
6
|
+
import { CostTracker } from './cost-tracker.js';
|
|
7
|
+
import { type AuditFixOptions, type AuditFixReport } from './pipelines/audit-fix-pipeline.js';
|
|
8
|
+
import type { ScanDomain } from '../prompts/scanner.js';
|
|
9
|
+
export interface OrchestratorEvents {
|
|
10
|
+
'state:change': {
|
|
11
|
+
taskId: string;
|
|
12
|
+
state: TaskState;
|
|
13
|
+
};
|
|
14
|
+
'agent:output': {
|
|
15
|
+
agentName: string;
|
|
16
|
+
text: string;
|
|
17
|
+
};
|
|
18
|
+
'agent:start': {
|
|
19
|
+
agentName: string;
|
|
20
|
+
};
|
|
21
|
+
'agent:done': {
|
|
22
|
+
agentName: string;
|
|
23
|
+
durationMs: number;
|
|
24
|
+
};
|
|
25
|
+
error: {
|
|
26
|
+
taskId: string;
|
|
27
|
+
message: string;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export declare class Orchestrator extends EventEmitter {
|
|
31
|
+
private readonly cwd;
|
|
32
|
+
private readonly knowledge;
|
|
33
|
+
private readonly policy;
|
|
34
|
+
readonly costs: CostTracker;
|
|
35
|
+
constructor(cwd: string, policyInput?: RuntimePolicyInput);
|
|
36
|
+
private static readonly TOKEN_RE;
|
|
37
|
+
private static readonly USAGE_UNAVAILABLE_RE;
|
|
38
|
+
private onChunk;
|
|
39
|
+
private get pipelineContext();
|
|
40
|
+
runFixPipeline(target: string): Promise<TaskResult>;
|
|
41
|
+
runAnalyzePipeline(target: string): Promise<TaskResult>;
|
|
42
|
+
runReviewPipeline(target: string): Promise<TaskResult>;
|
|
43
|
+
runAuditFixPipeline(auditReport: AuditReport, options?: AuditFixOptions): Promise<AuditFixReport>;
|
|
44
|
+
runAuditPipeline(target: string, numScanners?: number, explicitDomains?: ScanDomain[]): Promise<AuditReport>;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAA2C,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACvG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKhD,OAAO,EAAuB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,CAAC;IACrD,cAAc,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,aAAa,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED,qBAAa,YAAa,SAAQ,YAAY;IAKhC,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJhC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,QAAQ,CAAC,KAAK,cAAqB;gBAEN,GAAG,EAAE,MAAM,EAAE,WAAW,GAAE,kBAAuB;IAO9E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IACpE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAuB;IAEnE,OAAO,CAAC,OAAO,CAgBb;IAEF,OAAO,KAAK,eAAe,GAQ1B;IAEK,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAInD,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIvD,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAItD,mBAAmB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAIjG,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;CAUnH"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { KnowledgeStore } from '../infra/knowledge.js';
|
|
3
|
+
import { createRuntimePolicy } from './runtime-policy.js';
|
|
4
|
+
import { CostTracker } from './cost-tracker.js';
|
|
5
|
+
import { AuditPipeline } from './pipelines/audit-pipeline.js';
|
|
6
|
+
import { runFixPipeline } from './pipelines/fix-pipeline.js';
|
|
7
|
+
import { runAnalyzePipeline } from './pipelines/analyze-pipeline.js';
|
|
8
|
+
import { runReviewPipeline } from './pipelines/review-pipeline.js';
|
|
9
|
+
import { runAuditFixPipeline } from './pipelines/audit-fix-pipeline.js';
|
|
10
|
+
export class Orchestrator extends EventEmitter {
|
|
11
|
+
cwd;
|
|
12
|
+
knowledge;
|
|
13
|
+
policy;
|
|
14
|
+
costs = new CostTracker();
|
|
15
|
+
constructor(cwd, policyInput = {}) {
|
|
16
|
+
super();
|
|
17
|
+
this.cwd = cwd;
|
|
18
|
+
this.knowledge = new KnowledgeStore(cwd);
|
|
19
|
+
this.policy = createRuntimePolicy(policyInput);
|
|
20
|
+
}
|
|
21
|
+
// TOKEN_PATTERN: matches " tokens:IN:OUT:CACHE_READ:CACHE_WRITE "
|
|
22
|
+
static TOKEN_RE = /tokens:(\d+):(\d+):(\d+):(\d+)/;
|
|
23
|
+
static USAGE_UNAVAILABLE_RE = /usage-unavailable/;
|
|
24
|
+
onChunk = (agentName, text) => {
|
|
25
|
+
const match = Orchestrator.TOKEN_RE.exec(text);
|
|
26
|
+
if (match) {
|
|
27
|
+
this.costs.record(agentName, this.policy.claudeModel, {
|
|
28
|
+
inputTokens: parseInt(match[1]),
|
|
29
|
+
outputTokens: parseInt(match[2]),
|
|
30
|
+
cacheReadTokens: parseInt(match[3]),
|
|
31
|
+
cacheWriteTokens: parseInt(match[4]),
|
|
32
|
+
}, 0);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (Orchestrator.USAGE_UNAVAILABLE_RE.test(text)) {
|
|
36
|
+
this.costs.recordUnavailable(agentName);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
this.emit('agent:output', { agentName, text });
|
|
40
|
+
};
|
|
41
|
+
get pipelineContext() {
|
|
42
|
+
return {
|
|
43
|
+
cwd: this.cwd,
|
|
44
|
+
policy: this.policy,
|
|
45
|
+
knowledge: this.knowledge,
|
|
46
|
+
emit: this.emit.bind(this),
|
|
47
|
+
onChunk: this.onChunk,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async runFixPipeline(target) {
|
|
51
|
+
return runFixPipeline(this.pipelineContext, target);
|
|
52
|
+
}
|
|
53
|
+
async runAnalyzePipeline(target) {
|
|
54
|
+
return runAnalyzePipeline(this.pipelineContext, target);
|
|
55
|
+
}
|
|
56
|
+
async runReviewPipeline(target) {
|
|
57
|
+
return runReviewPipeline(this.pipelineContext, target);
|
|
58
|
+
}
|
|
59
|
+
async runAuditFixPipeline(auditReport, options) {
|
|
60
|
+
return runAuditFixPipeline(this.pipelineContext, auditReport, options);
|
|
61
|
+
}
|
|
62
|
+
async runAuditPipeline(target, numScanners, explicitDomains) {
|
|
63
|
+
const pipeline = new AuditPipeline(this.cwd, this.policy, this.costs, (event, payload) => this.emit(event, payload), this.onChunk);
|
|
64
|
+
return pipeline.run(target, numScanners, explicitDomains);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { RuntimePolicy } from './runtime-policy.js';
|
|
2
|
+
import type { KnowledgeStore } from '../infra/knowledge.js';
|
|
3
|
+
import type { TaskRecord } from './task.js';
|
|
4
|
+
import type { TaskState } from './state-machine.js';
|
|
5
|
+
import type { EventEmitter } from 'events';
|
|
6
|
+
export interface PipelineContext {
|
|
7
|
+
cwd: string;
|
|
8
|
+
policy: RuntimePolicy;
|
|
9
|
+
knowledge: KnowledgeStore;
|
|
10
|
+
emit: EventEmitter['emit'];
|
|
11
|
+
onChunk: (agentName: string, text: string) => void;
|
|
12
|
+
}
|
|
13
|
+
export declare function transition(task: TaskRecord, to: TaskState, emit: EventEmitter['emit'], agentName?: string): Promise<void>;
|
|
14
|
+
export declare function makeWorktreeTracker(cwd: string): {
|
|
15
|
+
create: (name: string, taskId: string) => string;
|
|
16
|
+
cleanup: () => void;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=pipeline-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-context.d.ts","sourceRoot":"","sources":["../../src/core/pipeline-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAIpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,cAAc,CAAC;IAC1B,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAC1B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAChD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAcA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { assertTransition } from './state-machine.js';
|
|
2
|
+
import { updateTaskState, logStateHistory } from '../infra/db/task-repo.js';
|
|
3
|
+
import { createWorktree, removeWorktree } from '../infra/worktree.js';
|
|
4
|
+
export async function transition(task, to, emit, agentName) {
|
|
5
|
+
assertTransition(task.state, to);
|
|
6
|
+
const from = task.state;
|
|
7
|
+
task.state = to;
|
|
8
|
+
updateTaskState(task.id, to);
|
|
9
|
+
logStateHistory(task.id, from, to, agentName);
|
|
10
|
+
emit('state:change', { taskId: task.id, state: to });
|
|
11
|
+
}
|
|
12
|
+
export function makeWorktreeTracker(cwd) {
|
|
13
|
+
const worktrees = [];
|
|
14
|
+
return {
|
|
15
|
+
create(name, taskId) {
|
|
16
|
+
const wt = createWorktree(cwd, name, taskId);
|
|
17
|
+
worktrees.push([name, taskId]);
|
|
18
|
+
return wt;
|
|
19
|
+
},
|
|
20
|
+
cleanup() {
|
|
21
|
+
for (const [name, taskId] of worktrees) {
|
|
22
|
+
try {
|
|
23
|
+
removeWorktree(cwd, name, taskId);
|
|
24
|
+
}
|
|
25
|
+
catch { /* best-effort */ }
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=pipeline-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-context.js","sourceRoot":"","sources":["../../src/core/pipeline-context.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAWtE,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAgB,EAChB,EAAa,EACb,IAA0B,EAC1B,SAAkB;IAElB,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;IACxB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAChB,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7B,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAC9C,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAI7C,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,OAAO;QACL,MAAM,CAAC,IAAI,EAAE,MAAM;YACjB,MAAM,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAC7C,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YAC/B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO;YACL,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBACvC,IAAI,CAAC;oBAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-pipeline.d.ts","sourceRoot":"","sources":["../../../src/core/pipelines/analyze-pipeline.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA4ElG"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import { createTask, saveTaskResult } from '../../infra/db/task-repo.js';
|
|
3
|
+
import { saveEvidence } from '../../infra/db/evidence-repo.js';
|
|
4
|
+
import { KnowledgeStore } from '../../infra/knowledge.js';
|
|
5
|
+
import { PlannerAgent } from '../../agents/planner.js';
|
|
6
|
+
import { InvestigatorAgent } from '../../agents/investigator.js';
|
|
7
|
+
import { GraphAgent } from '../../agents/graph-agent.js';
|
|
8
|
+
import { transition, makeWorktreeTracker } from '../pipeline-context.js';
|
|
9
|
+
import { pickInvestigatorDomains, mergeEvidence } from './fix-pipeline.js';
|
|
10
|
+
export async function runAnalyzePipeline(ctx, target) {
|
|
11
|
+
const req = { id: randomUUID(), command: 'analyze', target, cwd: ctx.cwd, createdAt: new Date() };
|
|
12
|
+
const task = createTask(req);
|
|
13
|
+
const start = Date.now();
|
|
14
|
+
const errors = [];
|
|
15
|
+
const wt = makeWorktreeTracker(ctx.cwd);
|
|
16
|
+
const knowledge = new KnowledgeStore(ctx.cwd);
|
|
17
|
+
const graph = new GraphAgent(ctx.cwd);
|
|
18
|
+
try {
|
|
19
|
+
await transition(task, 'INVESTIGATING', ctx.emit);
|
|
20
|
+
const codebaseSummary = knowledge.embeddings.hasIndex()
|
|
21
|
+
? await knowledge.buildContextSemantic(target)
|
|
22
|
+
: knowledge.buildContext(target);
|
|
23
|
+
const repoContext = await graph.queryWithContext(target);
|
|
24
|
+
ctx.emit('agent:start', { agentName: 'planner' });
|
|
25
|
+
const plannerWT = wt.create('planner', task.id);
|
|
26
|
+
const planRun = await new PlannerAgent(ctx.policy.plannerProvider).run({ taskId: task.id, bugDescription: target, codebaseSummary, repoContext, worktreePath: plannerWT }, ctx.policy, ctx.onChunk);
|
|
27
|
+
const plan = planRun.output;
|
|
28
|
+
ctx.emit('agent:done', { agentName: 'planner', durationMs: planRun.durationMs });
|
|
29
|
+
const isBugSpecific = plan.riskLevel !== 'low' || plan.phases.some((p) => p.agentType === 'investigator');
|
|
30
|
+
if (!isBugSpecific) {
|
|
31
|
+
await transition(task, 'REPRODUCED', ctx.emit, 'planner');
|
|
32
|
+
const result = { taskId: task.id, state: 'REPRODUCED', plan, errors, durationMs: Date.now() - start };
|
|
33
|
+
saveTaskResult(task.id, result);
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
const domains = pickInvestigatorDomains(target, plan, ctx.policy);
|
|
37
|
+
const investigatorWTs = domains.map((d) => wt.create(`investigator-${d}`, task.id));
|
|
38
|
+
domains.forEach((d) => ctx.emit('agent:start', { agentName: `investigator-${d}` }));
|
|
39
|
+
const evidenceRuns = await Promise.all(domains.map((domain, i) => new InvestigatorAgent(domain, ctx.policy.investigatorProvider).run({ plan, bugDescription: target, worktreePath: investigatorWTs[i], domain }, ctx.policy, ctx.onChunk)));
|
|
40
|
+
evidenceRuns.forEach((run) => {
|
|
41
|
+
ctx.emit('agent:done', { agentName: run.agentName, durationMs: run.durationMs });
|
|
42
|
+
saveEvidence(task.id, run.agentName, run.agentName.replace('investigator-', ''), run.output);
|
|
43
|
+
});
|
|
44
|
+
const evidence = mergeEvidence(evidenceRuns.map((r) => r.output));
|
|
45
|
+
const nextState = evidence.reproduced ? 'REPRODUCED' : 'FAILED';
|
|
46
|
+
await transition(task, nextState, ctx.emit, 'investigator');
|
|
47
|
+
const result = { taskId: task.id, state: nextState, plan, evidence, errors, durationMs: Date.now() - start };
|
|
48
|
+
saveTaskResult(task.id, result);
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
53
|
+
errors.push(message);
|
|
54
|
+
ctx.emit('error', { taskId: task.id, message });
|
|
55
|
+
if (task.state !== 'DONE' && task.state !== 'FAILED') {
|
|
56
|
+
try {
|
|
57
|
+
await transition(task, 'FAILED', ctx.emit);
|
|
58
|
+
}
|
|
59
|
+
catch { /* already failed */ }
|
|
60
|
+
}
|
|
61
|
+
const result = { taskId: task.id, state: 'FAILED', errors, durationMs: Date.now() - start };
|
|
62
|
+
saveTaskResult(task.id, result);
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
wt.cleanup();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=analyze-pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-pipeline.js","sourceRoot":"","sources":["../../../src/core/pipelines/analyze-pipeline.ts"],"names":[],"mappings":"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"}
|