aspectcode 0.2.2 → 0.3.1
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/dist/cli.d.ts +15 -47
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +18 -17
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +14 -24
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -60
- package/dist/config.js.map +1 -1
- package/dist/kbBuilder.d.ts +14 -0
- package/dist/kbBuilder.d.ts.map +1 -0
- package/dist/kbBuilder.js +106 -0
- package/dist/kbBuilder.js.map +1 -0
- package/dist/main.d.ts +4 -5
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +45 -124
- package/dist/main.js.map +1 -1
- package/dist/optimize.d.ts +14 -0
- package/dist/optimize.d.ts.map +1 -0
- package/dist/optimize.js +131 -0
- package/dist/optimize.js.map +1 -0
- package/dist/pipeline.d.ts +15 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +212 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/toolIngestion.d.ts +15 -0
- package/dist/toolIngestion.d.ts.map +1 -0
- package/dist/toolIngestion.js +47 -0
- package/dist/toolIngestion.js.map +1 -0
- package/dist/writer.d.ts +17 -0
- package/dist/writer.d.ts.map +1 -0
- package/dist/writer.js +26 -0
- package/dist/writer.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/analysis/analyzer.d.ts +34 -0
- package/node_modules/@aspectcode/core/dist/analysis/analyzer.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/analysis/analyzer.js +240 -0
- package/node_modules/@aspectcode/core/dist/analysis/analyzer.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/analysis/dependencyAdapters.d.ts +32 -0
- package/node_modules/@aspectcode/core/dist/analysis/dependencyAdapters.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/analysis/dependencyAdapters.js +133 -0
- package/node_modules/@aspectcode/core/dist/analysis/dependencyAdapters.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/analysis/importParsers.d.ts +30 -0
- package/node_modules/@aspectcode/core/dist/analysis/importParsers.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/analysis/importParsers.js +92 -0
- package/node_modules/@aspectcode/core/dist/analysis/importParsers.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/analysis/index.d.ts +9 -0
- package/node_modules/@aspectcode/core/dist/analysis/index.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/analysis/index.js +9 -0
- package/node_modules/@aspectcode/core/dist/analysis/index.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/analysis/moduleResolver.d.ts +34 -0
- package/node_modules/@aspectcode/core/dist/analysis/moduleResolver.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/analysis/moduleResolver.js +240 -0
- package/node_modules/@aspectcode/core/dist/analysis/moduleResolver.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/analysis/repo.d.ts +33 -0
- package/node_modules/@aspectcode/core/dist/analysis/repo.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/analysis/repo.js +246 -0
- package/node_modules/@aspectcode/core/dist/analysis/repo.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/classifiers.d.ts +24 -0
- package/node_modules/@aspectcode/core/dist/classifiers.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/classifiers.js +119 -0
- package/node_modules/@aspectcode/core/dist/classifiers.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/fs/exclusions.d.ts +26 -0
- package/node_modules/@aspectcode/core/dist/fs/exclusions.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/fs/exclusions.js +130 -0
- package/node_modules/@aspectcode/core/dist/fs/exclusions.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/fs/fingerprint.d.ts +42 -0
- package/node_modules/@aspectcode/core/dist/fs/fingerprint.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/fs/fingerprint.js +125 -0
- package/node_modules/@aspectcode/core/dist/fs/fingerprint.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/fs/index.d.ts +9 -0
- package/node_modules/@aspectcode/core/dist/fs/index.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/fs/index.js +26 -0
- package/node_modules/@aspectcode/core/dist/fs/index.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/fs/walker.d.ts +23 -0
- package/node_modules/@aspectcode/core/dist/fs/walker.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/fs/walker.js +94 -0
- package/node_modules/@aspectcode/core/dist/fs/walker.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/host.d.ts +38 -0
- package/node_modules/@aspectcode/core/dist/host.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/host.js +110 -0
- package/node_modules/@aspectcode/core/dist/host.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/index.d.ts +23 -0
- package/node_modules/@aspectcode/core/dist/index.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/index.js +59 -0
- package/node_modules/@aspectcode/core/dist/index.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/model.d.ts +90 -0
- package/node_modules/@aspectcode/core/dist/model.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/model.js +9 -0
- package/node_modules/@aspectcode/core/dist/model.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/csharpExtractors.d.ts +17 -0
- package/node_modules/@aspectcode/core/dist/parsers/csharpExtractors.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/csharpExtractors.js +225 -0
- package/node_modules/@aspectcode/core/dist/parsers/csharpExtractors.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/grammarLoader.d.ts +30 -0
- package/node_modules/@aspectcode/core/dist/parsers/grammarLoader.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/grammarLoader.js +71 -0
- package/node_modules/@aspectcode/core/dist/parsers/grammarLoader.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/index.d.ts +13 -0
- package/node_modules/@aspectcode/core/dist/parsers/index.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/index.js +32 -0
- package/node_modules/@aspectcode/core/dist/parsers/index.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/javaExtractors.d.ts +17 -0
- package/node_modules/@aspectcode/core/dist/parsers/javaExtractors.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/javaExtractors.js +182 -0
- package/node_modules/@aspectcode/core/dist/parsers/javaExtractors.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/languages.d.ts +44 -0
- package/node_modules/@aspectcode/core/dist/parsers/languages.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/languages.js +64 -0
- package/node_modules/@aspectcode/core/dist/parsers/languages.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/pythonExtractors.d.ts +18 -0
- package/node_modules/@aspectcode/core/dist/parsers/pythonExtractors.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/pythonExtractors.js +139 -0
- package/node_modules/@aspectcode/core/dist/parsers/pythonExtractors.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/tsJsExtractors.d.ts +22 -0
- package/node_modules/@aspectcode/core/dist/parsers/tsJsExtractors.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/tsJsExtractors.js +240 -0
- package/node_modules/@aspectcode/core/dist/parsers/tsJsExtractors.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/utils.d.ts +7 -0
- package/node_modules/@aspectcode/core/dist/parsers/utils.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/parsers/utils.js +11 -0
- package/node_modules/@aspectcode/core/dist/parsers/utils.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/paths.d.ts +27 -0
- package/node_modules/@aspectcode/core/dist/paths.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/paths.js +45 -0
- package/node_modules/@aspectcode/core/dist/paths.js.map +1 -0
- package/node_modules/@aspectcode/core/dist/stats.d.ts +41 -0
- package/node_modules/@aspectcode/core/dist/stats.d.ts.map +1 -0
- package/node_modules/@aspectcode/core/dist/stats.js +88 -0
- package/node_modules/@aspectcode/core/dist/stats.js.map +1 -0
- package/node_modules/@aspectcode/core/package.json +41 -0
- package/node_modules/@aspectcode/core/parsers/c_sharp.wasm +0 -0
- package/node_modules/@aspectcode/core/parsers/java.wasm +0 -0
- package/node_modules/@aspectcode/core/parsers/javascript.wasm +0 -0
- package/node_modules/@aspectcode/core/parsers/python.wasm +0 -0
- package/node_modules/@aspectcode/core/parsers/tree-sitter.wasm +0 -0
- package/node_modules/@aspectcode/core/parsers/tsx.wasm +0 -0
- package/node_modules/@aspectcode/core/parsers/typescript.wasm +0 -0
- package/node_modules/@aspectcode/emitters/dist/emitter.d.ts +72 -0
- package/node_modules/@aspectcode/emitters/dist/emitter.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/emitter.js +10 -0
- package/node_modules/@aspectcode/emitters/dist/emitter.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/host.d.ts +31 -0
- package/node_modules/@aspectcode/emitters/dist/host.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/host.js +86 -0
- package/node_modules/@aspectcode/emitters/dist/host.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/index.d.ts +27 -0
- package/node_modules/@aspectcode/emitters/dist/index.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/index.js +116 -0
- package/node_modules/@aspectcode/emitters/dist/index.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/content.d.ts +15 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/content.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/content.js +289 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/content.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/detection.d.ts +13 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/detection.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/detection.js +55 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/detection.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/formats.d.ts +17 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/formats.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/formats.js +23 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/formats.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/index.d.ts +5 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/index.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/index.js +12 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/index.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/instructionsEmitter.d.ts +9 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/instructionsEmitter.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/instructionsEmitter.js +30 -0
- package/node_modules/@aspectcode/emitters/dist/instructions/instructionsEmitter.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/analyzers.d.ts +64 -0
- package/node_modules/@aspectcode/emitters/dist/kb/analyzers.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/analyzers.js +504 -0
- package/node_modules/@aspectcode/emitters/dist/kb/analyzers.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/architectureEmitter.d.ts +24 -0
- package/node_modules/@aspectcode/emitters/dist/kb/architectureEmitter.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/architectureEmitter.js +238 -0
- package/node_modules/@aspectcode/emitters/dist/kb/architectureEmitter.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/classifiers.d.ts +8 -0
- package/node_modules/@aspectcode/emitters/dist/kb/classifiers.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/classifiers.js +14 -0
- package/node_modules/@aspectcode/emitters/dist/kb/classifiers.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/constants.d.ts +35 -0
- package/node_modules/@aspectcode/emitters/dist/kb/constants.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/constants.js +38 -0
- package/node_modules/@aspectcode/emitters/dist/kb/constants.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/contextEmitter.d.ts +20 -0
- package/node_modules/@aspectcode/emitters/dist/kb/contextEmitter.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/contextEmitter.js +155 -0
- package/node_modules/@aspectcode/emitters/dist/kb/contextEmitter.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/conventions.d.ts +52 -0
- package/node_modules/@aspectcode/emitters/dist/kb/conventions.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/conventions.js +391 -0
- package/node_modules/@aspectcode/emitters/dist/kb/conventions.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/depData.d.ts +18 -0
- package/node_modules/@aspectcode/emitters/dist/kb/depData.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/depData.js +31 -0
- package/node_modules/@aspectcode/emitters/dist/kb/depData.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/detectors.d.ts +18 -0
- package/node_modules/@aspectcode/emitters/dist/kb/detectors.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/detectors.js +317 -0
- package/node_modules/@aspectcode/emitters/dist/kb/detectors.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/entryPoints.d.ts +33 -0
- package/node_modules/@aspectcode/emitters/dist/kb/entryPoints.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/entryPoints.js +323 -0
- package/node_modules/@aspectcode/emitters/dist/kb/entryPoints.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/helpers.d.ts +27 -0
- package/node_modules/@aspectcode/emitters/dist/kb/helpers.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/helpers.js +63 -0
- package/node_modules/@aspectcode/emitters/dist/kb/helpers.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/index.d.ts +27 -0
- package/node_modules/@aspectcode/emitters/dist/kb/index.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/index.js +72 -0
- package/node_modules/@aspectcode/emitters/dist/kb/index.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/kbEmitter.d.ts +21 -0
- package/node_modules/@aspectcode/emitters/dist/kb/kbEmitter.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/kbEmitter.js +125 -0
- package/node_modules/@aspectcode/emitters/dist/kb/kbEmitter.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/mapEmitter.d.ts +26 -0
- package/node_modules/@aspectcode/emitters/dist/kb/mapEmitter.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/mapEmitter.js +255 -0
- package/node_modules/@aspectcode/emitters/dist/kb/mapEmitter.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/policy.d.ts +12 -0
- package/node_modules/@aspectcode/emitters/dist/kb/policy.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/policy.js +29 -0
- package/node_modules/@aspectcode/emitters/dist/kb/policy.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/symbols.d.ts +43 -0
- package/node_modules/@aspectcode/emitters/dist/kb/symbols.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/kb/symbols.js +343 -0
- package/node_modules/@aspectcode/emitters/dist/kb/symbols.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/manifest.d.ts +37 -0
- package/node_modules/@aspectcode/emitters/dist/manifest.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/manifest.js +50 -0
- package/node_modules/@aspectcode/emitters/dist/manifest.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/report.d.ts +22 -0
- package/node_modules/@aspectcode/emitters/dist/report.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/report.js +3 -0
- package/node_modules/@aspectcode/emitters/dist/report.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/stableJson.d.ts +14 -0
- package/node_modules/@aspectcode/emitters/dist/stableJson.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/stableJson.js +40 -0
- package/node_modules/@aspectcode/emitters/dist/stableJson.js.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/transaction.d.ts +29 -0
- package/node_modules/@aspectcode/emitters/dist/transaction.d.ts.map +1 -0
- package/node_modules/@aspectcode/emitters/dist/transaction.js +104 -0
- package/node_modules/@aspectcode/emitters/dist/transaction.js.map +1 -0
- package/node_modules/@aspectcode/emitters/package.json +39 -0
- package/node_modules/@aspectcode/optimizer/dist/agent.d.ts +18 -0
- package/node_modules/@aspectcode/optimizer/dist/agent.d.ts.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/agent.js +123 -0
- package/node_modules/@aspectcode/optimizer/dist/agent.js.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/index.d.ts +15 -0
- package/node_modules/@aspectcode/optimizer/dist/index.d.ts.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/index.js +31 -0
- package/node_modules/@aspectcode/optimizer/dist/index.js.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/prompts.d.ts +39 -0
- package/node_modules/@aspectcode/optimizer/dist/prompts.d.ts.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/prompts.js +156 -0
- package/node_modules/@aspectcode/optimizer/dist/prompts.js.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/anthropic.d.ts +20 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/anthropic.d.ts.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/anthropic.js +126 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/anthropic.js.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/index.d.ts +28 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/index.d.ts.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/index.js +142 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/index.js.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/openai.d.ts +19 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/openai.d.ts.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/openai.js +98 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/openai.js.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/retry.d.ts +19 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/retry.d.ts.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/retry.js +87 -0
- package/node_modules/@aspectcode/optimizer/dist/providers/retry.js.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/types.d.ts +93 -0
- package/node_modules/@aspectcode/optimizer/dist/types.d.ts.map +1 -0
- package/node_modules/@aspectcode/optimizer/dist/types.js +20 -0
- package/node_modules/@aspectcode/optimizer/dist/types.js.map +1 -0
- package/node_modules/@aspectcode/optimizer/package.json +41 -0
- package/node_modules/dotenv/CHANGELOG.md +520 -0
- package/node_modules/dotenv/LICENSE +23 -0
- package/node_modules/dotenv/README-es.md +411 -0
- package/node_modules/dotenv/README.md +645 -0
- package/node_modules/dotenv/SECURITY.md +1 -0
- package/node_modules/dotenv/config.d.ts +1 -0
- package/node_modules/dotenv/config.js +9 -0
- package/node_modules/dotenv/lib/cli-options.js +17 -0
- package/node_modules/dotenv/lib/env-options.js +28 -0
- package/node_modules/dotenv/lib/main.d.ts +162 -0
- package/node_modules/dotenv/lib/main.js +386 -0
- package/node_modules/dotenv/package.json +62 -0
- package/package.json +16 -4
- package/dist/commands/deps.d.ts +0 -11
- package/dist/commands/deps.d.ts.map +0 -1
- package/dist/commands/deps.js +0 -197
- package/dist/commands/deps.js.map +0 -1
- package/dist/commands/generate.d.ts +0 -8
- package/dist/commands/generate.d.ts.map +0 -1
- package/dist/commands/generate.js +0 -162
- package/dist/commands/generate.js.map +0 -1
- package/dist/commands/settings.d.ts +0 -9
- package/dist/commands/settings.d.ts.map +0 -1
- package/dist/commands/settings.js +0 -165
- package/dist/commands/settings.js.map +0 -1
- package/dist/commands/watch.d.ts +0 -6
- package/dist/commands/watch.d.ts.map +0 -1
- package/dist/commands/watch.js +0 -180
- package/dist/commands/watch.js.map +0 -1
- package/dist/connections.d.ts +0 -24
- package/dist/connections.d.ts.map +0 -1
- package/dist/connections.js +0 -89
- package/dist/connections.js.map +0 -1
package/dist/pipeline.js
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* aspectcode pipeline — the single pipeline that does everything.
|
|
4
|
+
*
|
|
5
|
+
* 1. Discover files → tree-sitter analysis
|
|
6
|
+
* 2. Build KB in memory (architecture + map + context)
|
|
7
|
+
* 3. Scan & read other AI tool instruction files as context
|
|
8
|
+
* 4. If API key present → optimize via LLM → write AGENTS.md
|
|
9
|
+
* If no API key → write static AGENTS.md + warn
|
|
10
|
+
* 5. If --kb flag → also write kb.md
|
|
11
|
+
* 6. If not --once → watch for changes and repeat
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.runPipeline = runPipeline;
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
const core_1 = require("@aspectcode/core");
|
|
50
|
+
const emitters_1 = require("@aspectcode/emitters");
|
|
51
|
+
const cli_1 = require("./cli");
|
|
52
|
+
const config_1 = require("./config");
|
|
53
|
+
const logger_1 = require("./logger");
|
|
54
|
+
const workspace_1 = require("./workspace");
|
|
55
|
+
const kbBuilder_1 = require("./kbBuilder");
|
|
56
|
+
const toolIngestion_1 = require("./toolIngestion");
|
|
57
|
+
const writer_1 = require("./writer");
|
|
58
|
+
const optimize_1 = require("./optimize");
|
|
59
|
+
// ── Watch constants ──────────────────────────────────────────
|
|
60
|
+
const DEBOUNCE_MS = 2000;
|
|
61
|
+
const IGNORED_SEGMENTS = [
|
|
62
|
+
'/node_modules/', '/.git/', '/dist/', '/build/', '/target/',
|
|
63
|
+
'/coverage/', '/.next/', '/__pycache__/', '/.venv/', '/venv/',
|
|
64
|
+
'/.pytest_cache/', '/.mypy_cache/', '/.tox/', '/htmlcov/',
|
|
65
|
+
];
|
|
66
|
+
function isIgnoredPath(filePath) {
|
|
67
|
+
const normalized = filePath.replace(/\\/g, '/').toLowerCase();
|
|
68
|
+
return IGNORED_SEGMENTS.some((seg) => normalized.includes(seg));
|
|
69
|
+
}
|
|
70
|
+
function isSupportedSourceFile(filePath) {
|
|
71
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
72
|
+
return core_1.SUPPORTED_EXTENSIONS.includes(ext);
|
|
73
|
+
}
|
|
74
|
+
// ── Single pipeline run ──────────────────────────────────────
|
|
75
|
+
async function runOnce(ctx) {
|
|
76
|
+
const { root, flags, log } = ctx;
|
|
77
|
+
const config = (0, config_1.loadConfig)(root);
|
|
78
|
+
const startMs = Date.now();
|
|
79
|
+
// ── 1. Discover & read files ──────────────────────────────
|
|
80
|
+
const workspace = await (0, workspace_1.loadWorkspaceFiles)(root, config, log, { quiet: flags.quiet });
|
|
81
|
+
if (workspace.discoveredPaths.length === 0) {
|
|
82
|
+
log.warn('No source files found. Check your workspace or exclude patterns.');
|
|
83
|
+
return cli_1.ExitCode.ERROR;
|
|
84
|
+
}
|
|
85
|
+
// ── 2. Analyze ────────────────────────────────────────────
|
|
86
|
+
const spinAnalyze = (0, logger_1.createSpinner)('Analyzing…', { quiet: flags.quiet });
|
|
87
|
+
const model = await (0, core_1.analyzeRepoWithDependencies)(root, workspace.relativeFiles, workspace.absoluteFiles, workspace.host);
|
|
88
|
+
spinAnalyze.stop(`Analyzed ${model.files.length} files, ${model.graph.edges.length} edges`);
|
|
89
|
+
// ── 3. Build KB content in memory ─────────────────────────
|
|
90
|
+
const spinKb = (0, logger_1.createSpinner)('Building knowledge base…', { quiet: flags.quiet });
|
|
91
|
+
const kbContent = (0, kbBuilder_1.buildKbContent)(model, root, workspace.relativeFiles);
|
|
92
|
+
spinKb.stop('Knowledge base built');
|
|
93
|
+
// ── 4. Read other AI tool instruction files ───────────────
|
|
94
|
+
const host = (0, emitters_1.createNodeEmitterHost)();
|
|
95
|
+
const toolInstructions = await (0, toolIngestion_1.readToolInstructions)(host, root);
|
|
96
|
+
if (toolInstructions.size > 0) {
|
|
97
|
+
log.debug(`Read ${toolInstructions.size} AI tool instruction file(s) as context`);
|
|
98
|
+
}
|
|
99
|
+
// ── 5. Optimize or fallback ───────────────────────────────
|
|
100
|
+
const agentsContent = await (0, optimize_1.tryOptimize)(ctx, kbContent, toolInstructions, config);
|
|
101
|
+
// ── 6. Write AGENTS.md ────────────────────────────────────
|
|
102
|
+
if (flags.dryRun) {
|
|
103
|
+
log.info(logger_1.fmt.bold('Dry run — proposed AGENTS.md:'));
|
|
104
|
+
log.blank();
|
|
105
|
+
console.log(agentsContent);
|
|
106
|
+
log.blank();
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
await (0, writer_1.writeAgentsMd)(host, root, agentsContent);
|
|
110
|
+
const agentsPath = path.relative(root, path.join(root, 'AGENTS.md')).replace(/\\/g, '/');
|
|
111
|
+
log.success(`${agentsPath} written`);
|
|
112
|
+
}
|
|
113
|
+
// ── 7. Optionally write kb.md ─────────────────────────────
|
|
114
|
+
if (flags.kb && !flags.dryRun) {
|
|
115
|
+
await (0, writer_1.writeKbMd)(host, root, kbContent);
|
|
116
|
+
log.success('kb.md written');
|
|
117
|
+
}
|
|
118
|
+
const elapsedMs = Date.now() - startMs;
|
|
119
|
+
log.info(logger_1.fmt.dim(`Done in ${(elapsedMs / 1000).toFixed(1)}s`));
|
|
120
|
+
return cli_1.ExitCode.OK;
|
|
121
|
+
}
|
|
122
|
+
// ── Pipeline entry point ─────────────────────────────────────
|
|
123
|
+
async function runPipeline(ctx) {
|
|
124
|
+
const { root, flags, log } = ctx;
|
|
125
|
+
log.info(`${logger_1.fmt.bold('aspectcode')} — ${logger_1.fmt.cyan(root)}`);
|
|
126
|
+
log.blank();
|
|
127
|
+
// ── Initial run ──────────────────────────────────────────
|
|
128
|
+
const code = await runOnce(ctx);
|
|
129
|
+
if (code !== cli_1.ExitCode.OK)
|
|
130
|
+
return code;
|
|
131
|
+
// ── --once: exit immediately ──────────────────────────────
|
|
132
|
+
if (flags.once)
|
|
133
|
+
return cli_1.ExitCode.OK;
|
|
134
|
+
// ── Watch mode ────────────────────────────────────────────
|
|
135
|
+
log.blank();
|
|
136
|
+
log.info(logger_1.fmt.dim('Watching for changes… (Ctrl+C to stop)'));
|
|
137
|
+
const chokidarModule = await Promise.resolve().then(() => __importStar(require('chokidar')));
|
|
138
|
+
const chokidar = chokidarModule.default ?? chokidarModule;
|
|
139
|
+
const watcher = chokidar.watch('.', {
|
|
140
|
+
cwd: root,
|
|
141
|
+
ignoreInitial: true,
|
|
142
|
+
awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 100 },
|
|
143
|
+
ignored: (watchedPath) => {
|
|
144
|
+
const abs = path.resolve(root, watchedPath);
|
|
145
|
+
return isIgnoredPath(abs);
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
let timer;
|
|
149
|
+
let running = false;
|
|
150
|
+
let pending = false;
|
|
151
|
+
let stopped = false;
|
|
152
|
+
const triggerRun = async (reason) => {
|
|
153
|
+
if (stopped)
|
|
154
|
+
return;
|
|
155
|
+
if (running) {
|
|
156
|
+
pending = true;
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
running = true;
|
|
160
|
+
try {
|
|
161
|
+
log.blank();
|
|
162
|
+
log.info(`${logger_1.fmt.bold('change detected:')} ${reason}`);
|
|
163
|
+
await runOnce(ctx);
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
167
|
+
log.error(`Pipeline failed: ${msg}`);
|
|
168
|
+
}
|
|
169
|
+
finally {
|
|
170
|
+
running = false;
|
|
171
|
+
if (pending && !stopped) {
|
|
172
|
+
pending = false;
|
|
173
|
+
void triggerRun('queued changes');
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
const onFsEvent = (eventType, eventPath) => {
|
|
178
|
+
const abs = path.resolve(root, eventPath);
|
|
179
|
+
if (!isSupportedSourceFile(abs) || isIgnoredPath(abs))
|
|
180
|
+
return;
|
|
181
|
+
if (timer)
|
|
182
|
+
clearTimeout(timer);
|
|
183
|
+
timer = setTimeout(() => {
|
|
184
|
+
timer = undefined;
|
|
185
|
+
void triggerRun(`${eventType}: ${eventPath.replace(/\\/g, '/')}`);
|
|
186
|
+
}, DEBOUNCE_MS);
|
|
187
|
+
};
|
|
188
|
+
watcher.on('add', (p) => onFsEvent('add', p));
|
|
189
|
+
watcher.on('change', (p) => onFsEvent('change', p));
|
|
190
|
+
watcher.on('unlink', (p) => onFsEvent('unlink', p));
|
|
191
|
+
watcher.on('error', (e) => log.error(`Watcher error: ${String(e)}`));
|
|
192
|
+
await new Promise((resolve) => watcher.once('ready', resolve));
|
|
193
|
+
log.info(logger_1.fmt.dim('Watcher ready.'));
|
|
194
|
+
return await new Promise((resolve) => {
|
|
195
|
+
const shutdown = async (signal) => {
|
|
196
|
+
if (stopped)
|
|
197
|
+
return;
|
|
198
|
+
stopped = true;
|
|
199
|
+
if (timer) {
|
|
200
|
+
clearTimeout(timer);
|
|
201
|
+
timer = undefined;
|
|
202
|
+
}
|
|
203
|
+
log.blank();
|
|
204
|
+
log.info(logger_1.fmt.dim(`Stopping (${signal})…`));
|
|
205
|
+
await watcher.close();
|
|
206
|
+
resolve(cli_1.ExitCode.OK);
|
|
207
|
+
};
|
|
208
|
+
process.once('SIGINT', () => void shutdown('SIGINT'));
|
|
209
|
+
process.once('SIGTERM', () => void shutdown('SIGTERM'));
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsGH,kCAyFC;AA7LD,2CAA6B;AAC7B,2CAAqF;AACrF,mDAA6D;AAE7D,+BAAiC;AAEjC,qCAAsC;AACtC,qCAA8C;AAC9C,2CAAiD;AACjD,2CAA6C;AAC7C,mDAAuD;AACvD,qCAAoD;AACpD,yCAAyC;AAEzC,gEAAgE;AAEhE,MAAM,WAAW,GAAG,IAAI,CAAC;AAEzB,MAAM,gBAAgB,GAAG;IACvB,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU;IAC3D,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ;IAC7D,iBAAiB,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW;CAC1D,CAAC;AAEF,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,OAAO,2BAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,gEAAgE;AAEhE,KAAK,UAAU,OAAO,CAAC,GAAe;IACpC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IACjC,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,6DAA6D;IAC7D,MAAM,SAAS,GAAG,MAAM,IAAA,8BAAkB,EAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACtF,IAAI,SAAS,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QAC7E,OAAO,cAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,6DAA6D;IAC7D,MAAM,WAAW,GAAG,IAAA,sBAAa,EAAC,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,MAAM,IAAA,kCAA2B,EAC7C,IAAI,EACJ,SAAS,CAAC,aAAa,EACvB,SAAS,CAAC,aAAa,EACvB,SAAS,CAAC,IAAI,CACf,CAAC;IACF,WAAW,CAAC,IAAI,CACd,YAAY,KAAK,CAAC,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,QAAQ,CAC1E,CAAC;IAEF,6DAA6D;IAC7D,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,IAAA,0BAAc,EAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IACvE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAEpC,6DAA6D;IAC7D,MAAM,IAAI,GAAG,IAAA,gCAAqB,GAAE,CAAC;IACrC,MAAM,gBAAgB,GAAG,MAAM,IAAA,oCAAoB,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChE,IAAI,gBAAgB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC9B,GAAG,CAAC,KAAK,CAAC,QAAQ,gBAAgB,CAAC,IAAI,yCAAyC,CAAC,CAAC;IACpF,CAAC;IAED,6DAA6D;IAC7D,MAAM,aAAa,GAAG,MAAM,IAAA,sBAAW,EAAC,GAAG,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAElF,6DAA6D;IAC7D,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,GAAG,CAAC,IAAI,CAAC,YAAG,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACpD,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;SAAM,CAAC;QACN,MAAM,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACzF,GAAG,CAAC,OAAO,CAAC,GAAG,UAAU,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,6DAA6D;IAC7D,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAA,kBAAS,EAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACvC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IACvC,GAAG,CAAC,IAAI,CAAC,YAAG,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,OAAO,cAAQ,CAAC,EAAE,CAAC;AACrB,CAAC;AAED,gEAAgE;AAEzD,KAAK,UAAU,WAAW,CAAC,GAAe;IAC/C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAEjC,GAAG,CAAC,IAAI,CAAC,GAAG,YAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,YAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,GAAG,CAAC,KAAK,EAAE,CAAC;IAEZ,4DAA4D;IAC5D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,cAAQ,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAEtC,6DAA6D;IAC7D,IAAI,KAAK,CAAC,IAAI;QAAE,OAAO,cAAQ,CAAC,EAAE,CAAC;IAEnC,6DAA6D;IAC7D,GAAG,CAAC,KAAK,EAAE,CAAC;IACZ,GAAG,CAAC,IAAI,CAAC,YAAG,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAE5D,MAAM,cAAc,GAAG,wDAAa,UAAU,GAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,IAAI,cAAc,CAAC;IAE1D,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE;QAClC,GAAG,EAAE,IAAI;QACT,aAAa,EAAE,IAAI;QACnB,gBAAgB,EAAE,EAAE,kBAAkB,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE;QAChE,OAAO,EAAE,CAAC,WAAmB,EAAE,EAAE;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC5C,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,KAAiC,CAAC;IACtC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,UAAU,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;QACzD,IAAI,OAAO;YAAE,OAAO;QACpB,IAAI,OAAO,EAAE,CAAC;YAAC,OAAO,GAAG,IAAI,CAAC;YAAC,OAAO;QAAC,CAAC;QAExC,OAAO,GAAG,IAAI,CAAC;QACf,IAAI,CAAC;YACH,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,GAAG,CAAC,IAAI,CAAC,GAAG,YAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;YACtD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,GAAG,CAAC,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;gBAAS,CAAC;YACT,OAAO,GAAG,KAAK,CAAC;YAChB,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,GAAG,KAAK,CAAC;gBAChB,KAAK,UAAU,CAAC,gBAAgB,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAE,SAAiB,EAAE,EAAE;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC;YAAE,OAAO;QAE9D,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,KAAK,GAAG,SAAS,CAAC;YAClB,KAAK,UAAU,CAAC,GAAG,SAAS,KAAK,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC,EAAE,WAAW,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9E,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,GAAG,CAAC,IAAI,CAAC,YAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEpC,OAAO,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE;QAClD,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YACxC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,KAAK,EAAE,CAAC;gBAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAAC,KAAK,GAAG,SAAS,CAAC;YAAC,CAAC;YACtD,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,GAAG,CAAC,IAAI,CAAC,YAAG,CAAC,GAAG,CAAC,aAAa,MAAM,IAAI,CAAC,CAAC,CAAC;YAC3C,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,cAAQ,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool instruction ingestion — reads other AI tool instruction files
|
|
3
|
+
* as read-only context for LLM optimization.
|
|
4
|
+
*
|
|
5
|
+
* Scans the workspace root for known AI tool instruction files
|
|
6
|
+
* (e.g. .cursorrules, CLAUDE.md, etc.) and returns their content.
|
|
7
|
+
* AGENTS.md is excluded since that's what we're generating.
|
|
8
|
+
*/
|
|
9
|
+
import type { EmitterHost } from '@aspectcode/emitters';
|
|
10
|
+
/**
|
|
11
|
+
* Read all existing AI tool instruction files from the workspace.
|
|
12
|
+
* Returns a Map of tool name → file content (only files that exist).
|
|
13
|
+
*/
|
|
14
|
+
export declare function readToolInstructions(host: EmitterHost, workspaceRoot: string): Promise<Map<string, string>>;
|
|
15
|
+
//# sourceMappingURL=toolIngestion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolIngestion.d.ts","sourceRoot":"","sources":["../src/toolIngestion.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAgBxD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkB9B"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tool instruction ingestion — reads other AI tool instruction files
|
|
4
|
+
* as read-only context for LLM optimization.
|
|
5
|
+
*
|
|
6
|
+
* Scans the workspace root for known AI tool instruction files
|
|
7
|
+
* (e.g. .cursorrules, CLAUDE.md, etc.) and returns their content.
|
|
8
|
+
* AGENTS.md is excluded since that's what we're generating.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.readToolInstructions = readToolInstructions;
|
|
12
|
+
/**
|
|
13
|
+
* Known AI tool instruction file paths relative to workspace root.
|
|
14
|
+
* AGENTS.md is intentionally omitted — we own that file.
|
|
15
|
+
*/
|
|
16
|
+
const TOOL_INSTRUCTION_PATHS = [
|
|
17
|
+
{ tool: 'GitHub Copilot', path: '.github/copilot-instructions.md' },
|
|
18
|
+
{ tool: 'Cursor', path: '.cursorrules' },
|
|
19
|
+
{ tool: 'Claude Code', path: 'CLAUDE.md' },
|
|
20
|
+
{ tool: 'Windsurf', path: '.windsurfrules' },
|
|
21
|
+
{ tool: 'Cline', path: '.clinerules' },
|
|
22
|
+
{ tool: 'Gemini', path: 'GEMINI.md' },
|
|
23
|
+
{ tool: 'Aider', path: 'CONVENTIONS.md' },
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Read all existing AI tool instruction files from the workspace.
|
|
27
|
+
* Returns a Map of tool name → file content (only files that exist).
|
|
28
|
+
*/
|
|
29
|
+
async function readToolInstructions(host, workspaceRoot) {
|
|
30
|
+
const results = new Map();
|
|
31
|
+
for (const entry of TOOL_INSTRUCTION_PATHS) {
|
|
32
|
+
const fullPath = host.join(workspaceRoot, entry.path);
|
|
33
|
+
try {
|
|
34
|
+
if (await host.exists(fullPath)) {
|
|
35
|
+
const content = await host.readFile(fullPath);
|
|
36
|
+
if (content.trim().length > 0) {
|
|
37
|
+
results.set(entry.tool, content);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Skip unreadable files
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return results;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=toolIngestion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolIngestion.js","sourceRoot":"","sources":["../src/toolIngestion.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAsBH,oDAqBC;AAvCD;;;GAGG;AACH,MAAM,sBAAsB,GAAkD;IAC5E,EAAE,IAAI,EAAE,gBAAgB,EAAG,IAAI,EAAE,iCAAiC,EAAE;IACpE,EAAE,IAAI,EAAE,QAAQ,EAAW,IAAI,EAAE,cAAc,EAAE;IACjD,EAAE,IAAI,EAAE,aAAa,EAAM,IAAI,EAAE,WAAW,EAAE;IAC9C,EAAE,IAAI,EAAE,UAAU,EAAS,IAAI,EAAE,gBAAgB,EAAE;IACnD,EAAE,IAAI,EAAE,OAAO,EAAY,IAAI,EAAE,aAAa,EAAE;IAChD,EAAE,IAAI,EAAE,QAAQ,EAAW,IAAI,EAAE,WAAW,EAAE;IAC9C,EAAE,IAAI,EAAE,OAAO,EAAY,IAAI,EAAE,gBAAgB,EAAE;CACpD,CAAC;AAEF;;;GAGG;AACI,KAAK,UAAU,oBAAoB,CACxC,IAAiB,EACjB,aAAqB;IAErB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,sBAAsB,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC;YACH,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC9C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/writer.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File writer — writes AGENTS.md and optionally kb.md.
|
|
3
|
+
*
|
|
4
|
+
* AGENTS.md is owned completely — no markers, full-file write.
|
|
5
|
+
* kb.md is optional (--kb flag) and written to workspace root.
|
|
6
|
+
*/
|
|
7
|
+
import type { EmitterHost } from '@aspectcode/emitters';
|
|
8
|
+
/**
|
|
9
|
+
* Write AGENTS.md to the workspace root.
|
|
10
|
+
* Completely owns the file — overwrites entirely.
|
|
11
|
+
*/
|
|
12
|
+
export declare function writeAgentsMd(host: EmitterHost, workspaceRoot: string, content: string): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Write kb.md to the workspace root (optional, --kb flag).
|
|
15
|
+
*/
|
|
16
|
+
export declare function writeKbMd(host: EmitterHost, workspaceRoot: string, kbContent: string): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
package/dist/writer.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* File writer — writes AGENTS.md and optionally kb.md.
|
|
4
|
+
*
|
|
5
|
+
* AGENTS.md is owned completely — no markers, full-file write.
|
|
6
|
+
* kb.md is optional (--kb flag) and written to workspace root.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.writeAgentsMd = writeAgentsMd;
|
|
10
|
+
exports.writeKbMd = writeKbMd;
|
|
11
|
+
/**
|
|
12
|
+
* Write AGENTS.md to the workspace root.
|
|
13
|
+
* Completely owns the file — overwrites entirely.
|
|
14
|
+
*/
|
|
15
|
+
async function writeAgentsMd(host, workspaceRoot, content) {
|
|
16
|
+
const filePath = host.join(workspaceRoot, 'AGENTS.md');
|
|
17
|
+
await host.writeFile(filePath, content);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Write kb.md to the workspace root (optional, --kb flag).
|
|
21
|
+
*/
|
|
22
|
+
async function writeKbMd(host, workspaceRoot, kbContent) {
|
|
23
|
+
const filePath = host.join(workspaceRoot, 'kb.md');
|
|
24
|
+
await host.writeFile(filePath, kbContent);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAQH,sCAOC;AAKD,8BAOC;AAvBD;;;GAGG;AACI,KAAK,UAAU,aAAa,CACjC,IAAiB,EACjB,aAAqB,EACrB,OAAe;IAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IACvD,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,SAAS,CAC7B,IAAiB,EACjB,aAAqB,EACrB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure-logic dependency analyzer — no vscode coupling.
|
|
3
|
+
*
|
|
4
|
+
* Uses CoreHost for file I/O and pre-built indexes for fast module
|
|
5
|
+
* resolution. The analyzer produces GraphEdge[] and handles cycle
|
|
6
|
+
* detection and bidirectional link merging.
|
|
7
|
+
*/
|
|
8
|
+
import type { CoreHost } from '../host';
|
|
9
|
+
import type { GraphEdge } from '../model';
|
|
10
|
+
/** Progress callback for dependency analysis */
|
|
11
|
+
export type DependencyProgressCallback = (current: number, total: number, phase: string) => void;
|
|
12
|
+
export type DependencyWarningCallback = (kind: 'grammar-missing' | 'tree-sitter-extract-failed', language: string, filePath: string, message: string) => void;
|
|
13
|
+
export declare class DependencyAnalyzer {
|
|
14
|
+
private workspaceFiles;
|
|
15
|
+
private fileIndex;
|
|
16
|
+
/**
|
|
17
|
+
* Set pre-loaded file contents to avoid redundant file reads.
|
|
18
|
+
* Call this before analyzeDependencies if you already have the content.
|
|
19
|
+
*/
|
|
20
|
+
setFileContentsCache(cache: Map<string, string>): void;
|
|
21
|
+
/**
|
|
22
|
+
* Analyze all real dependencies between workspace files.
|
|
23
|
+
*
|
|
24
|
+
* @param files List of file paths to analyze
|
|
25
|
+
* @param host CoreHost for file I/O (only used when cache is empty)
|
|
26
|
+
* @param onProgress Optional progress callback
|
|
27
|
+
*/
|
|
28
|
+
analyzeDependencies(files: string[], host?: CoreHost, onProgress?: DependencyProgressCallback, onWarning?: DependencyWarningCallback): Promise<GraphEdge[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Load file contents using CoreHost.
|
|
31
|
+
*/
|
|
32
|
+
private loadFileContents;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/analysis/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAmB1C,gDAAgD;AAChD,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,KACV,IAAI,CAAC;AAEV,MAAM,MAAM,yBAAyB,GAAG,CACtC,IAAI,EAAE,iBAAiB,GAAG,4BAA4B,EACtD,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,KACZ,IAAI,CAAC;AAIV,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,SAAS,CAA0B;IAE3C;;;OAGG;IACH,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAItD;;;;;;OAMG;IACG,mBAAmB,CACvB,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,CAAC,EAAE,QAAQ,EACf,UAAU,CAAC,EAAE,0BAA0B,EACvC,SAAS,CAAC,EAAE,yBAAyB,GACpC,OAAO,CAAC,SAAS,EAAE,CAAC;IAwJvB;;OAEG;YACW,gBAAgB;CAiC/B"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pure-logic dependency analyzer — no vscode coupling.
|
|
4
|
+
*
|
|
5
|
+
* Uses CoreHost for file I/O and pre-built indexes for fast module
|
|
6
|
+
* resolution. The analyzer produces GraphEdge[] and handles cycle
|
|
7
|
+
* detection and bidirectional link merging.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.DependencyAnalyzer = void 0;
|
|
11
|
+
const importParsers_1 = require("./importParsers");
|
|
12
|
+
const dependencyAdapters_1 = require("./dependencyAdapters");
|
|
13
|
+
const parsers_1 = require("../parsers");
|
|
14
|
+
const moduleResolver_1 = require("./moduleResolver");
|
|
15
|
+
// ── Public API ───────────────────────────────────────────────
|
|
16
|
+
class DependencyAnalyzer {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.workspaceFiles = new Map();
|
|
19
|
+
this.fileIndex = null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Set pre-loaded file contents to avoid redundant file reads.
|
|
23
|
+
* Call this before analyzeDependencies if you already have the content.
|
|
24
|
+
*/
|
|
25
|
+
setFileContentsCache(cache) {
|
|
26
|
+
this.workspaceFiles = new Map(cache);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Analyze all real dependencies between workspace files.
|
|
30
|
+
*
|
|
31
|
+
* @param files List of file paths to analyze
|
|
32
|
+
* @param host CoreHost for file I/O (only used when cache is empty)
|
|
33
|
+
* @param onProgress Optional progress callback
|
|
34
|
+
*/
|
|
35
|
+
async analyzeDependencies(files, host, onProgress, onWarning) {
|
|
36
|
+
const links = [];
|
|
37
|
+
const linkIndex = new Map();
|
|
38
|
+
const seenWarnings = new Set();
|
|
39
|
+
const warn = (kind, language, filePath, message) => {
|
|
40
|
+
const key = `${kind}|${language}|${filePath}|${message}`;
|
|
41
|
+
if (seenWarnings.has(key))
|
|
42
|
+
return;
|
|
43
|
+
seenWarnings.add(key);
|
|
44
|
+
onWarning?.(kind, language, filePath, message);
|
|
45
|
+
};
|
|
46
|
+
// Load file contents if not already cached
|
|
47
|
+
if (this.workspaceFiles.size === 0 && host) {
|
|
48
|
+
onProgress?.(0, files.length, 'Loading file contents...');
|
|
49
|
+
await this.loadFileContents(files, host, onProgress);
|
|
50
|
+
}
|
|
51
|
+
// Build indexes for fast resolution (O(N) once)
|
|
52
|
+
onProgress?.(0, files.length, 'Building file index...');
|
|
53
|
+
this.fileIndex = (0, moduleResolver_1.buildFileIndex)(files);
|
|
54
|
+
// Initialize tree-sitter grammars when available through host.
|
|
55
|
+
if (host?.wasmPaths?.treeSitter && Object.keys(host.wasmPaths.grammars ?? {}).length > 0) {
|
|
56
|
+
try {
|
|
57
|
+
const loaded = await (0, parsers_1.loadGrammars)(host);
|
|
58
|
+
(0, dependencyAdapters_1.setDependencyAdapterGrammars)(loaded.grammars);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
(0, dependencyAdapters_1.setDependencyAdapterGrammars)({});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
(0, dependencyAdapters_1.setDependencyAdapterGrammars)({});
|
|
66
|
+
}
|
|
67
|
+
// Analyze each file
|
|
68
|
+
for (let i = 0; i < files.length; i++) {
|
|
69
|
+
const file = files[i];
|
|
70
|
+
if (i % 10 === 0 || i === files.length - 1) {
|
|
71
|
+
onProgress?.(i + 1, files.length, `Analyzing imports (${i + 1}/${files.length})...`);
|
|
72
|
+
}
|
|
73
|
+
const content = this.workspaceFiles.get(file);
|
|
74
|
+
if (!content)
|
|
75
|
+
continue;
|
|
76
|
+
const { imports: fileDependencies, calls: fileCalls } = (0, dependencyAdapters_1.analyzeDependenciesForFile)(file, content, warn);
|
|
77
|
+
// Convert imports to dependency links
|
|
78
|
+
for (const imp of fileDependencies) {
|
|
79
|
+
const resolvedTarget = (0, moduleResolver_1.resolveModulePathFast)(imp.module, file, this.fileIndex);
|
|
80
|
+
if (resolvedTarget && resolvedTarget !== file) {
|
|
81
|
+
const key = `import|${file}|${resolvedTarget}`;
|
|
82
|
+
const existing = linkIndex.get(key);
|
|
83
|
+
if (existing) {
|
|
84
|
+
existing.symbols = [
|
|
85
|
+
...new Set([...existing.symbols, ...imp.symbols]),
|
|
86
|
+
];
|
|
87
|
+
existing.lines = [...new Set([...existing.lines, imp.line])].sort((a, b) => a - b);
|
|
88
|
+
existing.strength = Math.min(1.0, Math.max(existing.strength, (0, importParsers_1.calculateImportStrength)(imp)));
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const link = {
|
|
92
|
+
source: file,
|
|
93
|
+
target: resolvedTarget,
|
|
94
|
+
type: 'import',
|
|
95
|
+
strength: (0, importParsers_1.calculateImportStrength)(imp),
|
|
96
|
+
symbols: [...new Set(imp.symbols)],
|
|
97
|
+
lines: [imp.line],
|
|
98
|
+
bidirectional: false,
|
|
99
|
+
};
|
|
100
|
+
links.push(link);
|
|
101
|
+
linkIndex.set(key, link);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Convert function calls to dependency links
|
|
106
|
+
for (const call of fileCalls) {
|
|
107
|
+
if (call.isExternal) {
|
|
108
|
+
const resolvedTarget = (0, moduleResolver_1.resolveCallTargetFast)(call.callee, file, this.fileIndex, this.workspaceFiles);
|
|
109
|
+
if (resolvedTarget && resolvedTarget !== file) {
|
|
110
|
+
const callKey = `call|${file}|${resolvedTarget}`;
|
|
111
|
+
const existing = linkIndex.get(callKey);
|
|
112
|
+
if (existing) {
|
|
113
|
+
if (!existing.symbols.includes(call.callee)) {
|
|
114
|
+
existing.symbols.push(call.callee);
|
|
115
|
+
}
|
|
116
|
+
if (!existing.lines.includes(call.line)) {
|
|
117
|
+
existing.lines.push(call.line);
|
|
118
|
+
}
|
|
119
|
+
existing.strength = Math.min(1.0, existing.strength + 0.1);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
const link = {
|
|
123
|
+
source: file,
|
|
124
|
+
target: resolvedTarget,
|
|
125
|
+
type: 'call',
|
|
126
|
+
strength: 0.6,
|
|
127
|
+
symbols: [call.callee],
|
|
128
|
+
lines: [call.line],
|
|
129
|
+
bidirectional: false,
|
|
130
|
+
};
|
|
131
|
+
links.push(link);
|
|
132
|
+
linkIndex.set(callKey, link);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Detect circular dependencies
|
|
139
|
+
onProgress?.(files.length, files.length, 'Detecting circular dependencies...');
|
|
140
|
+
detectCircularDependencies(links);
|
|
141
|
+
// Merge bidirectional relationships
|
|
142
|
+
mergeBidirectionalLinks(links);
|
|
143
|
+
// Clear index after use
|
|
144
|
+
this.fileIndex = null;
|
|
145
|
+
// Sort for deterministic output
|
|
146
|
+
return links.sort((a, b) => a.source.localeCompare(b.source) ||
|
|
147
|
+
a.target.localeCompare(b.target) ||
|
|
148
|
+
a.type.localeCompare(b.type));
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Load file contents using CoreHost.
|
|
152
|
+
*/
|
|
153
|
+
async loadFileContents(files, host, onProgress) {
|
|
154
|
+
this.workspaceFiles.clear();
|
|
155
|
+
const BATCH_SIZE = 50;
|
|
156
|
+
for (let i = 0; i < files.length; i += BATCH_SIZE) {
|
|
157
|
+
const batch = files.slice(i, i + BATCH_SIZE);
|
|
158
|
+
const results = await Promise.allSettled(batch.map(async (filePath) => {
|
|
159
|
+
const content = await host.readFile(filePath);
|
|
160
|
+
return { filePath, content };
|
|
161
|
+
}));
|
|
162
|
+
for (const result of results) {
|
|
163
|
+
if (result.status === 'fulfilled') {
|
|
164
|
+
this.workspaceFiles.set(result.value.filePath, result.value.content);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
onProgress?.(Math.min(i + BATCH_SIZE, files.length), files.length, `Reading files (${Math.min(i + BATCH_SIZE, files.length)}/${files.length})...`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
exports.DependencyAnalyzer = DependencyAnalyzer;
|
|
172
|
+
// ── Graph algorithms ─────────────────────────────────────────
|
|
173
|
+
/**
|
|
174
|
+
* Detect circular dependencies in the link graph using DFS.
|
|
175
|
+
*/
|
|
176
|
+
function detectCircularDependencies(links) {
|
|
177
|
+
const graph = new Map();
|
|
178
|
+
for (const link of links) {
|
|
179
|
+
if (!graph.has(link.source)) {
|
|
180
|
+
graph.set(link.source, new Set());
|
|
181
|
+
}
|
|
182
|
+
graph.get(link.source).add(link.target);
|
|
183
|
+
}
|
|
184
|
+
const visited = new Set();
|
|
185
|
+
const recursionStack = new Set();
|
|
186
|
+
const hasCycle = (node, nodePath) => {
|
|
187
|
+
if (recursionStack.has(node)) {
|
|
188
|
+
const cycleStart = nodePath.indexOf(node);
|
|
189
|
+
return nodePath.slice(cycleStart);
|
|
190
|
+
}
|
|
191
|
+
if (visited.has(node))
|
|
192
|
+
return null;
|
|
193
|
+
visited.add(node);
|
|
194
|
+
recursionStack.add(node);
|
|
195
|
+
const neighbors = graph.get(node) || new Set();
|
|
196
|
+
for (const neighbor of neighbors) {
|
|
197
|
+
const cycle = hasCycle(neighbor, [...nodePath, node]);
|
|
198
|
+
if (cycle)
|
|
199
|
+
return cycle;
|
|
200
|
+
}
|
|
201
|
+
recursionStack.delete(node);
|
|
202
|
+
return null;
|
|
203
|
+
};
|
|
204
|
+
for (const [node] of graph) {
|
|
205
|
+
if (!visited.has(node)) {
|
|
206
|
+
const cycle = hasCycle(node, []);
|
|
207
|
+
if (cycle) {
|
|
208
|
+
for (let i = 0; i < cycle.length; i++) {
|
|
209
|
+
const source = cycle[i];
|
|
210
|
+
const target = cycle[(i + 1) % cycle.length];
|
|
211
|
+
const link = links.find((l) => l.source === source && l.target === target);
|
|
212
|
+
if (link) {
|
|
213
|
+
link.type = 'circular';
|
|
214
|
+
link.strength = Math.min(1.0, link.strength + 0.3);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Merge bidirectional relationships (A→B + B→A → single bidirectional link).
|
|
223
|
+
*/
|
|
224
|
+
function mergeBidirectionalLinks(links) {
|
|
225
|
+
for (let i = 0; i < links.length; i++) {
|
|
226
|
+
const link1 = links[i];
|
|
227
|
+
const reverseIndex = links.findIndex((link2, j) => j > i &&
|
|
228
|
+
link2.source === link1.target &&
|
|
229
|
+
link2.target === link1.source);
|
|
230
|
+
if (reverseIndex !== -1) {
|
|
231
|
+
const link2 = links[reverseIndex];
|
|
232
|
+
link1.bidirectional = true;
|
|
233
|
+
link1.symbols = [...new Set([...link1.symbols, ...link2.symbols])];
|
|
234
|
+
link1.lines = [...link1.lines, ...link2.lines];
|
|
235
|
+
link1.strength = Math.min(1.0, link1.strength + link2.strength * 0.5);
|
|
236
|
+
links.splice(reverseIndex, 1);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/analysis/analyzer.ts"],"names":[],"mappings":"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"}
|