@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,199 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { readdirSync, statSync, writeFileSync, mkdirSync } from 'fs';
|
|
4
|
+
import { join, relative } from 'path';
|
|
5
|
+
import { KnowledgeStore } from '../../infra/knowledge.js';
|
|
6
|
+
import { chunkFile } from '../../infra/chunker.js';
|
|
7
|
+
import { buildDepGraph, formatDepReport } from '../../infra/dep-graph.js';
|
|
8
|
+
import { buildRepoIndex, writeRepoIndex } from '../../infra/repo-index.js';
|
|
9
|
+
import { formatRepoQuery, loadRepoIndex, queryRepoIndex } from '../../infra/repo-query.js';
|
|
10
|
+
const SOURCE_EXTS = new Set(['.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.java', '.rb', '.rs']);
|
|
11
|
+
const IGNORE_DIRS = new Set(['node_modules', 'dist', 'build', '.git', '.worktrees', 'coverage', '.next', '__pycache__']);
|
|
12
|
+
function collectSourceFiles(dir) {
|
|
13
|
+
const results = [];
|
|
14
|
+
try {
|
|
15
|
+
for (const entry of readdirSync(dir)) {
|
|
16
|
+
if (IGNORE_DIRS.has(entry) || entry.startsWith('.'))
|
|
17
|
+
continue;
|
|
18
|
+
const full = join(dir, entry);
|
|
19
|
+
try {
|
|
20
|
+
const st = statSync(full);
|
|
21
|
+
if (st.isDirectory())
|
|
22
|
+
results.push(...collectSourceFiles(full));
|
|
23
|
+
else if (SOURCE_EXTS.has(entry.slice(entry.lastIndexOf('.'))))
|
|
24
|
+
results.push(full);
|
|
25
|
+
}
|
|
26
|
+
catch { /* skip */ }
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch { /* skip */ }
|
|
30
|
+
return results;
|
|
31
|
+
}
|
|
32
|
+
export function registerMemory(program) {
|
|
33
|
+
const memory = program
|
|
34
|
+
.command('memory')
|
|
35
|
+
.description('Manage the .ai-memory knowledge base');
|
|
36
|
+
// ── ai memory build ───────────────────────────────────────────────────────
|
|
37
|
+
memory
|
|
38
|
+
.command('build')
|
|
39
|
+
.description('Index .ai-memory/ + source code into the embedding vector store')
|
|
40
|
+
.option('--no-src', 'skip source code indexing, only index .ai-memory/')
|
|
41
|
+
.option('--src-dir <dir>', 'source directory to index (default: cwd)')
|
|
42
|
+
.action(async (options) => {
|
|
43
|
+
const cwd = process.cwd();
|
|
44
|
+
const store = new KnowledgeStore(cwd);
|
|
45
|
+
const spinner = ora('Building embedding index...').start();
|
|
46
|
+
try {
|
|
47
|
+
// 1. Index .ai-memory/ entries (bugs, decisions, patterns, etc.)
|
|
48
|
+
const knowledgeCount = await store.embeddings.buildIndex([
|
|
49
|
+
'architecture', 'bugs', 'features', 'decisions', 'patterns',
|
|
50
|
+
]);
|
|
51
|
+
let srcCount = 0;
|
|
52
|
+
if (options.src !== false) {
|
|
53
|
+
// 2. Index source code via Tree-sitter chunks
|
|
54
|
+
const srcDir = options.srcDir ? join(cwd, options.srcDir) : cwd;
|
|
55
|
+
const files = collectSourceFiles(srcDir);
|
|
56
|
+
spinner.text = `Chunking ${files.length} source files...`;
|
|
57
|
+
const srcMemoryDir = join(cwd, '.ai-memory', 'architecture');
|
|
58
|
+
mkdirSync(srcMemoryDir, { recursive: true });
|
|
59
|
+
for (const file of files) {
|
|
60
|
+
const chunks = await chunkFile(file, 1200);
|
|
61
|
+
for (const chunk of chunks) {
|
|
62
|
+
const relPath = relative(cwd, file);
|
|
63
|
+
const slug = `${relPath.replace(/[/\\]/g, '__')}__${chunk.name}`.replace(/[^a-z0-9_-]/gi, '_').slice(0, 80);
|
|
64
|
+
const content = `\`\`\`\n// ${relPath}:${chunk.startLine}-${chunk.endLine} [${chunk.type}: ${chunk.name}]\n${chunk.text}\n\`\`\``;
|
|
65
|
+
const outPath = join(srcMemoryDir, `src__${slug}.md`);
|
|
66
|
+
writeFileSync(outPath, `# ${chunk.name} (${relPath}:${chunk.startLine})\n\n${content}\n`, 'utf8');
|
|
67
|
+
srcCount++;
|
|
68
|
+
}
|
|
69
|
+
spinner.text = `Chunked ${srcCount} chunks from ${files.indexOf(file) + 1}/${files.length} files...`;
|
|
70
|
+
}
|
|
71
|
+
// Re-index now that source chunks are written
|
|
72
|
+
await store.embeddings.buildIndex(['architecture']);
|
|
73
|
+
}
|
|
74
|
+
spinner.succeed(chalk.green(`Indexed ${knowledgeCount} knowledge entries + ${srcCount} source chunks`));
|
|
75
|
+
console.log(chalk.gray('Run `ai memory search "<query>"` to test retrieval.'));
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
spinner.fail(chalk.red('Build failed: ' + String(err)));
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
// ── ai memory search ──────────────────────────────────────────────────────
|
|
83
|
+
memory
|
|
84
|
+
.command('search <query>')
|
|
85
|
+
.description('Semantic search over the .ai-memory knowledge base')
|
|
86
|
+
.option('-k, --top-k <n>', 'number of results', '5')
|
|
87
|
+
.action(async (query, options) => {
|
|
88
|
+
const store = new KnowledgeStore(process.cwd());
|
|
89
|
+
if (!store.embeddings.hasIndex()) {
|
|
90
|
+
console.error(chalk.yellow('No embedding index found. Run `ai memory build` first.'));
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
const spinner = ora('Searching...').start();
|
|
94
|
+
try {
|
|
95
|
+
const topK = Math.max(1, parseInt(options.topK, 10) || 5);
|
|
96
|
+
const results = await store.embeddings.query(query, topK);
|
|
97
|
+
spinner.stop();
|
|
98
|
+
if (results.length === 0) {
|
|
99
|
+
console.log(chalk.gray('No results found.'));
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
console.log(chalk.bold(`\nTop ${results.length} results for: "${query}"\n`));
|
|
103
|
+
for (const r of results) {
|
|
104
|
+
const score = chalk.cyan(`${(r.score * 100).toFixed(1)}%`);
|
|
105
|
+
console.log(`${score} ${chalk.bold(r.category + '/' + r.filename)}`);
|
|
106
|
+
console.log(chalk.gray(' ' + r.text.split('\n')[0]?.slice(0, 100)));
|
|
107
|
+
console.log();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
spinner.fail(chalk.red('Search failed: ' + String(err)));
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
// ── ai memory deps ───────────────────────────────────────────────────────
|
|
116
|
+
memory
|
|
117
|
+
.command('deps')
|
|
118
|
+
.description('Build dependency graph and save to .ai-memory/architecture/')
|
|
119
|
+
.action(() => {
|
|
120
|
+
const cwd = process.cwd();
|
|
121
|
+
const spinner = ora('Analysing imports...').start();
|
|
122
|
+
try {
|
|
123
|
+
const graph = buildDepGraph(cwd);
|
|
124
|
+
const report = formatDepReport(graph);
|
|
125
|
+
const store = new KnowledgeStore(cwd);
|
|
126
|
+
store.writeEntry('architecture', 'Dependency Graph', report);
|
|
127
|
+
spinner.succeed(chalk.green(`Dependency graph: ${graph.nodes.size} modules, ${graph.cycles.length} cycles, ${graph.hotspots.length} hotspots`));
|
|
128
|
+
if (graph.cycles.length > 0) {
|
|
129
|
+
console.log(chalk.yellow('\nCircular dependencies found:'));
|
|
130
|
+
graph.cycles.slice(0, 5).forEach((c) => console.log(chalk.yellow(' ' + c.join(' → '))));
|
|
131
|
+
}
|
|
132
|
+
console.log(chalk.bold('\nTop hotspots:'));
|
|
133
|
+
graph.hotspots.slice(0, 5).forEach((h) => console.log(` ${chalk.cyan(h.file)} — fan-in: ${h.fanIn}, fan-out: ${h.fanOut}`));
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
spinner.fail(chalk.red('Dep graph failed: ' + String(err)));
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
// ── ai memory list ────────────────────────────────────────────────────────
|
|
141
|
+
memory
|
|
142
|
+
.command('index')
|
|
143
|
+
.description('Build deterministic repository intelligence index')
|
|
144
|
+
.action(async () => {
|
|
145
|
+
const cwd = process.cwd();
|
|
146
|
+
const spinner = ora('Building repository index...').start();
|
|
147
|
+
try {
|
|
148
|
+
const index = await buildRepoIndex(cwd);
|
|
149
|
+
const path = writeRepoIndex(cwd, index);
|
|
150
|
+
spinner.succeed(chalk.green(`Repo index: ${index.stats.files} files, ${index.stats.symbols} symbols, ${index.stats.imports} imports, ${index.stats.chunks} chunks`));
|
|
151
|
+
console.log(chalk.gray(`Saved: ${path}`));
|
|
152
|
+
const untested = index.files.filter((file) => !file.isTest && !index.tests.some((link) => link.source === file.path)).length;
|
|
153
|
+
console.log(chalk.gray(`Probable untested source files: ${untested}`));
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
spinner.fail(chalk.red('Repo index failed: ' + String(err)));
|
|
157
|
+
process.exit(1);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
memory
|
|
161
|
+
.command('query <query>')
|
|
162
|
+
.description('Query deterministic repository index')
|
|
163
|
+
.option('-k, --top-k <n>', 'number of file/symbol results', '10')
|
|
164
|
+
.action((query, options) => {
|
|
165
|
+
const index = loadRepoIndex(process.cwd());
|
|
166
|
+
if (!index) {
|
|
167
|
+
console.error(chalk.yellow('No repo index found. Run `ai memory index` first.'));
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
const topK = Math.max(1, parseInt(options.topK, 10) || 10);
|
|
171
|
+
console.log(formatRepoQuery(queryRepoIndex(index, query, topK)));
|
|
172
|
+
});
|
|
173
|
+
memory
|
|
174
|
+
.command('list')
|
|
175
|
+
.description('List all entries in .ai-memory/')
|
|
176
|
+
.action(() => {
|
|
177
|
+
const store = new KnowledgeStore(process.cwd());
|
|
178
|
+
const categories = ['architecture', 'bugs', 'features', 'decisions', 'patterns'];
|
|
179
|
+
let total = 0;
|
|
180
|
+
for (const cat of categories) {
|
|
181
|
+
const text = store.readCategory(cat);
|
|
182
|
+
if (!text)
|
|
183
|
+
continue;
|
|
184
|
+
const count = text.split('---').length;
|
|
185
|
+
console.log(chalk.bold(`${cat}:`) + chalk.gray(` ${count} entries`));
|
|
186
|
+
total += count;
|
|
187
|
+
}
|
|
188
|
+
if (total === 0) {
|
|
189
|
+
console.log(chalk.gray('.ai-memory/ is empty. Fix a bug with `ai fix` to populate it.'));
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
console.log(chalk.green(`\nTotal: ${total} entries`));
|
|
193
|
+
if (!store.embeddings.hasIndex()) {
|
|
194
|
+
console.log(chalk.yellow('Embeddings not built. Run `ai memory build` for semantic search.'));
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/cli/commands/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/patterns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+DvD"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { detectPatterns } from '../../infra/pattern-detect.js';
|
|
3
|
+
import { GraphAgent } from '../../agents/graph-agent.js';
|
|
4
|
+
const CONFIDENCE_COLOR = {
|
|
5
|
+
high: chalk.green,
|
|
6
|
+
medium: chalk.yellow,
|
|
7
|
+
low: chalk.gray,
|
|
8
|
+
};
|
|
9
|
+
const SEVERITY_COLOR = {
|
|
10
|
+
critical: chalk.red.bold,
|
|
11
|
+
high: chalk.red,
|
|
12
|
+
medium: chalk.yellow,
|
|
13
|
+
};
|
|
14
|
+
const PRIORITY_COLOR = {
|
|
15
|
+
high: chalk.red,
|
|
16
|
+
medium: chalk.yellow,
|
|
17
|
+
low: chalk.gray,
|
|
18
|
+
};
|
|
19
|
+
export function registerPatterns(program) {
|
|
20
|
+
program
|
|
21
|
+
.command('patterns')
|
|
22
|
+
.description('Detect architectural patterns, anti-patterns, and improvement recommendations')
|
|
23
|
+
.action(async () => {
|
|
24
|
+
const cwd = process.cwd();
|
|
25
|
+
console.log(chalk.bold.cyan('\nArchitecture Pattern Analysis\n'));
|
|
26
|
+
// Load hotspots from graph if available
|
|
27
|
+
let hotspots = [];
|
|
28
|
+
try {
|
|
29
|
+
const graph = new GraphAgent(cwd);
|
|
30
|
+
const index = graph.getIndex();
|
|
31
|
+
if (index) {
|
|
32
|
+
const { detectLang } = await import('../../infra/lang-detect.js');
|
|
33
|
+
const { buildDepGraph } = await import('../../infra/dep-graph.js');
|
|
34
|
+
const { buildPythonDepGraph } = await import('../../infra/dep-graph-python.js');
|
|
35
|
+
const lang = detectLang(cwd);
|
|
36
|
+
const dep = lang.lang === 'python' ? buildPythonDepGraph(cwd) : buildDepGraph(cwd);
|
|
37
|
+
hotspots = dep.hotspots;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch { /* best-effort */ }
|
|
41
|
+
const report = detectPatterns(cwd, hotspots);
|
|
42
|
+
// Detected patterns
|
|
43
|
+
if (report.detected.length > 0) {
|
|
44
|
+
console.log(chalk.bold('── Detected Patterns ──────────────────────────────────────'));
|
|
45
|
+
report.detected.forEach((p) => {
|
|
46
|
+
const colorFn = CONFIDENCE_COLOR[p.confidence] ?? chalk.white;
|
|
47
|
+
console.log(`\n ${colorFn('●')} ${chalk.bold(p.pattern)} ${chalk.dim(`[${p.category}]`)} ${chalk.gray(`(${p.confidence} confidence)`)}`);
|
|
48
|
+
p.evidence.filter(Boolean).forEach((e) => console.log(chalk.dim(` ${e}`)));
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
// Anti-patterns
|
|
52
|
+
if (report.antiPatterns.length > 0) {
|
|
53
|
+
console.log(chalk.bold('\n── Anti-Patterns ──────────────────────────────────────────'));
|
|
54
|
+
report.antiPatterns.forEach((a) => {
|
|
55
|
+
const colorFn = SEVERITY_COLOR[a.severity] ?? chalk.white;
|
|
56
|
+
console.log(`\n ${colorFn('✗')} ${chalk.bold(a.name)} ${chalk.gray(`[${a.severity}]`)}`);
|
|
57
|
+
console.log(chalk.dim(` ${a.description}`));
|
|
58
|
+
a.evidence.slice(0, 3).forEach((e) => console.log(chalk.dim(` → ${e}`)));
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.log(chalk.bold('\n── Anti-Patterns ──────────────────────────────────────────'));
|
|
63
|
+
console.log(chalk.green(' ✓ No major anti-patterns detected'));
|
|
64
|
+
}
|
|
65
|
+
// Recommendations
|
|
66
|
+
if (report.recommendations.length > 0) {
|
|
67
|
+
console.log(chalk.bold('\n── Recommendations ────────────────────────────────────────'));
|
|
68
|
+
report.recommendations.forEach((r) => {
|
|
69
|
+
const colorFn = PRIORITY_COLOR[r.priority] ?? chalk.white;
|
|
70
|
+
console.log(`\n ${colorFn('→')} ${chalk.bold(r.pattern)} ${chalk.gray(`[${r.priority} priority]`)}`);
|
|
71
|
+
console.log(chalk.dim(` ${r.reason}`));
|
|
72
|
+
r.fixes.forEach((f) => console.log(chalk.dim(` • ${f}`)));
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
console.log(chalk.bold('\n── Summary ────────────────────────────────────────────────'));
|
|
76
|
+
console.log(` ${report.summary}`);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/cli/commands/patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmYzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoFrD"}
|