@vpxa/aikit 0.1.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/LICENSE +21 -0
- package/README.md +1207 -0
- package/bin/aikit.mjs +10 -0
- package/package.json +92 -0
- package/packages/aikit-client/dist/direct-client.d.ts +37 -0
- package/packages/aikit-client/dist/direct-client.js +1 -0
- package/packages/aikit-client/dist/index.d.ts +5 -0
- package/packages/aikit-client/dist/index.js +1 -0
- package/packages/aikit-client/dist/mcp-client.d.ts +19 -0
- package/packages/aikit-client/dist/mcp-client.js +4 -0
- package/packages/aikit-client/dist/parsers.d.ts +35 -0
- package/packages/aikit-client/dist/parsers.js +2 -0
- package/packages/aikit-client/dist/types.d.ts +62 -0
- package/packages/aikit-client/dist/types.js +1 -0
- package/packages/analyzers/dist/blast-radius-analyzer.d.ts +19 -0
- package/packages/analyzers/dist/blast-radius-analyzer.js +6 -0
- package/packages/analyzers/dist/dependency-analyzer.d.ts +32 -0
- package/packages/analyzers/dist/dependency-analyzer.js +8 -0
- package/packages/analyzers/dist/diagram-generator.d.ts +16 -0
- package/packages/analyzers/dist/diagram-generator.js +2 -0
- package/packages/analyzers/dist/entry-point-analyzer.d.ts +40 -0
- package/packages/analyzers/dist/entry-point-analyzer.js +4 -0
- package/packages/analyzers/dist/index.d.ts +12 -0
- package/packages/analyzers/dist/index.js +1 -0
- package/packages/analyzers/dist/knowledge-producer.d.ts +40 -0
- package/packages/analyzers/dist/knowledge-producer.js +26 -0
- package/packages/analyzers/dist/pattern-analyzer.d.ts +15 -0
- package/packages/analyzers/dist/pattern-analyzer.js +2 -0
- package/packages/analyzers/dist/regex-call-graph.d.ts +10 -0
- package/packages/analyzers/dist/regex-call-graph.js +1 -0
- package/packages/analyzers/dist/structure-analyzer.d.ts +19 -0
- package/packages/analyzers/dist/structure-analyzer.js +4 -0
- package/packages/analyzers/dist/symbol-analyzer.d.ts +14 -0
- package/packages/analyzers/dist/symbol-analyzer.js +9 -0
- package/packages/analyzers/dist/ts-call-graph.d.ts +29 -0
- package/packages/analyzers/dist/ts-call-graph.js +1 -0
- package/packages/analyzers/dist/types.d.ts +110 -0
- package/packages/analyzers/dist/types.js +1 -0
- package/packages/chunker/dist/call-graph-extractor.d.ts +25 -0
- package/packages/chunker/dist/call-graph-extractor.js +1 -0
- package/packages/chunker/dist/chunker-factory.d.ts +19 -0
- package/packages/chunker/dist/chunker-factory.js +1 -0
- package/packages/chunker/dist/chunker.interface.d.ts +13 -0
- package/packages/chunker/dist/chunker.interface.js +1 -0
- package/packages/chunker/dist/code-chunker.d.ts +17 -0
- package/packages/chunker/dist/code-chunker.js +11 -0
- package/packages/chunker/dist/extractors/call-extractor.d.ts +24 -0
- package/packages/chunker/dist/extractors/call-extractor.js +1 -0
- package/packages/chunker/dist/extractors/entry-point-detector.d.ts +14 -0
- package/packages/chunker/dist/extractors/entry-point-detector.js +1 -0
- package/packages/chunker/dist/extractors/import-extractor.d.ts +14 -0
- package/packages/chunker/dist/extractors/import-extractor.js +1 -0
- package/packages/chunker/dist/extractors/pattern-detector.d.ts +14 -0
- package/packages/chunker/dist/extractors/pattern-detector.js +1 -0
- package/packages/chunker/dist/extractors/scope-resolver.d.ts +26 -0
- package/packages/chunker/dist/extractors/scope-resolver.js +1 -0
- package/packages/chunker/dist/extractors/symbol-extractor.d.ts +14 -0
- package/packages/chunker/dist/extractors/symbol-extractor.js +3 -0
- package/packages/chunker/dist/extractors/types.d.ts +44 -0
- package/packages/chunker/dist/extractors/types.js +1 -0
- package/packages/chunker/dist/generic-chunker.d.ts +15 -0
- package/packages/chunker/dist/generic-chunker.js +5 -0
- package/packages/chunker/dist/index.d.ts +19 -0
- package/packages/chunker/dist/index.js +1 -0
- package/packages/chunker/dist/markdown-chunker.d.ts +17 -0
- package/packages/chunker/dist/markdown-chunker.js +3 -0
- package/packages/chunker/dist/wasm/languages.d.ts +18 -0
- package/packages/chunker/dist/wasm/languages.js +1 -0
- package/packages/chunker/dist/wasm/query-executor.d.ts +70 -0
- package/packages/chunker/dist/wasm/query-executor.js +1 -0
- package/packages/chunker/dist/wasm/runtime.d.ts +44 -0
- package/packages/chunker/dist/wasm/runtime.js +1 -0
- package/packages/chunker/dist/wasm/types.d.ts +84 -0
- package/packages/chunker/dist/wasm/types.js +1 -0
- package/packages/chunker/dist/wasm-chunker.d.ts +23 -0
- package/packages/chunker/dist/wasm-chunker.js +6 -0
- package/packages/chunker/src/queries/go/calls.scm +11 -0
- package/packages/chunker/src/queries/go/entry-points.scm +20 -0
- package/packages/chunker/src/queries/go/imports.scm +6 -0
- package/packages/chunker/src/queries/go/patterns.scm +25 -0
- package/packages/chunker/src/queries/go/symbols.scm +26 -0
- package/packages/chunker/src/queries/java/calls.scm +10 -0
- package/packages/chunker/src/queries/java/entry-points.scm +27 -0
- package/packages/chunker/src/queries/java/imports.scm +11 -0
- package/packages/chunker/src/queries/java/patterns.scm +27 -0
- package/packages/chunker/src/queries/java/symbols.scm +28 -0
- package/packages/chunker/src/queries/javascript/calls.scm +21 -0
- package/packages/chunker/src/queries/javascript/entry-points.scm +31 -0
- package/packages/chunker/src/queries/javascript/imports.scm +32 -0
- package/packages/chunker/src/queries/javascript/patterns.scm +28 -0
- package/packages/chunker/src/queries/javascript/symbols.scm +52 -0
- package/packages/chunker/src/queries/python/calls.scm +11 -0
- package/packages/chunker/src/queries/python/entry-points.scm +21 -0
- package/packages/chunker/src/queries/python/imports.scm +14 -0
- package/packages/chunker/src/queries/python/patterns.scm +25 -0
- package/packages/chunker/src/queries/python/symbols.scm +17 -0
- package/packages/chunker/src/queries/rust/calls.scm +20 -0
- package/packages/chunker/src/queries/rust/entry-points.scm +7 -0
- package/packages/chunker/src/queries/rust/imports.scm +26 -0
- package/packages/chunker/src/queries/rust/patterns.scm +18 -0
- package/packages/chunker/src/queries/rust/symbols.scm +73 -0
- package/packages/chunker/src/queries/typescript/calls.scm +21 -0
- package/packages/chunker/src/queries/typescript/entry-points.scm +48 -0
- package/packages/chunker/src/queries/typescript/imports.scm +35 -0
- package/packages/chunker/src/queries/typescript/patterns.scm +47 -0
- package/packages/chunker/src/queries/typescript/symbols.scm +79 -0
- package/packages/chunker/wasm/tree-sitter-c.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-c_sharp.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-cpp.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-go.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-java.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-javascript.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-kotlin.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-php.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-python.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-ruby.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-rust.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-scala.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-swift.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-typescript.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter.wasm +0 -0
- package/packages/cli/dist/aikit-init.d.ts +54 -0
- package/packages/cli/dist/aikit-init.js +1 -0
- package/packages/cli/dist/commands/analyze.d.ts +6 -0
- package/packages/cli/dist/commands/analyze.js +2 -0
- package/packages/cli/dist/commands/context-cmds.d.ts +6 -0
- package/packages/cli/dist/commands/context-cmds.js +1 -0
- package/packages/cli/dist/commands/environment.d.ts +6 -0
- package/packages/cli/dist/commands/environment.js +1 -0
- package/packages/cli/dist/commands/execution.d.ts +6 -0
- package/packages/cli/dist/commands/execution.js +1 -0
- package/packages/cli/dist/commands/flow.d.ts +6 -0
- package/packages/cli/dist/commands/flow.js +1 -0
- package/packages/cli/dist/commands/graph.d.ts +6 -0
- package/packages/cli/dist/commands/graph.js +6 -0
- package/packages/cli/dist/commands/init/adapters.d.ts +28 -0
- package/packages/cli/dist/commands/init/adapters.js +1 -0
- package/packages/cli/dist/commands/init/config.d.ts +10 -0
- package/packages/cli/dist/commands/init/config.js +3 -0
- package/packages/cli/dist/commands/init/constants.d.ts +41 -0
- package/packages/cli/dist/commands/init/constants.js +1 -0
- package/packages/cli/dist/commands/init/curated.d.ts +7 -0
- package/packages/cli/dist/commands/init/curated.js +1 -0
- package/packages/cli/dist/commands/init/frontmatter.d.ts +54 -0
- package/packages/cli/dist/commands/init/frontmatter.js +2 -0
- package/packages/cli/dist/commands/init/index.d.ts +36 -0
- package/packages/cli/dist/commands/init/index.js +5 -0
- package/packages/cli/dist/commands/init/manifest.d.ts +71 -0
- package/packages/cli/dist/commands/init/manifest.js +1 -0
- package/packages/cli/dist/commands/init/scaffold.d.ts +46 -0
- package/packages/cli/dist/commands/init/scaffold.js +1 -0
- package/packages/cli/dist/commands/init/templates.d.ts +9 -0
- package/packages/cli/dist/commands/init/templates.js +194 -0
- package/packages/cli/dist/commands/init/user.d.ts +61 -0
- package/packages/cli/dist/commands/init/user.js +5 -0
- package/packages/cli/dist/commands/knowledge.d.ts +6 -0
- package/packages/cli/dist/commands/knowledge.js +1 -0
- package/packages/cli/dist/commands/search.d.ts +6 -0
- package/packages/cli/dist/commands/search.js +1 -0
- package/packages/cli/dist/commands/system.d.ts +6 -0
- package/packages/cli/dist/commands/system.js +4 -0
- package/packages/cli/dist/commands/upgrade.d.ts +6 -0
- package/packages/cli/dist/commands/upgrade.js +1 -0
- package/packages/cli/dist/commands/workspace.d.ts +6 -0
- package/packages/cli/dist/commands/workspace.js +1 -0
- package/packages/cli/dist/context.d.ts +7 -0
- package/packages/cli/dist/context.js +1 -0
- package/packages/cli/dist/helpers.d.ts +55 -0
- package/packages/cli/dist/helpers.js +5 -0
- package/packages/cli/dist/index.d.ts +10 -0
- package/packages/cli/dist/index.js +3 -0
- package/packages/cli/dist/types.d.ts +9 -0
- package/packages/cli/dist/types.js +1 -0
- package/packages/core/dist/constants.d.ts +74 -0
- package/packages/core/dist/constants.js +1 -0
- package/packages/core/dist/content-detector.d.ts +13 -0
- package/packages/core/dist/content-detector.js +1 -0
- package/packages/core/dist/errors.d.ts +20 -0
- package/packages/core/dist/errors.js +1 -0
- package/packages/core/dist/global-registry.d.ts +63 -0
- package/packages/core/dist/global-registry.js +1 -0
- package/packages/core/dist/index.d.ts +7 -0
- package/packages/core/dist/index.js +1 -0
- package/packages/core/dist/logger.d.ts +32 -0
- package/packages/core/dist/logger.js +1 -0
- package/packages/core/dist/types.d.ts +133 -0
- package/packages/core/dist/types.js +1 -0
- package/packages/dashboard/dist/assets/index-BjA4YODs.js +21 -0
- package/packages/dashboard/dist/assets/index-BjA4YODs.js.map +1 -0
- package/packages/dashboard/dist/assets/index-CHpVij2M.css +1 -0
- package/packages/dashboard/dist/index.html +18 -0
- package/packages/elicitation/dist/build.d.ts +14 -0
- package/packages/elicitation/dist/build.js +1 -0
- package/packages/elicitation/dist/fields.d.ts +32 -0
- package/packages/elicitation/dist/fields.js +1 -0
- package/packages/elicitation/dist/index.d.ts +5 -0
- package/packages/elicitation/dist/index.js +1 -0
- package/packages/elicitation/dist/normalize.d.ts +15 -0
- package/packages/elicitation/dist/normalize.js +1 -0
- package/packages/elicitation/dist/types.d.ts +88 -0
- package/packages/elicitation/dist/types.js +1 -0
- package/packages/embeddings/dist/embedder.interface.d.ts +26 -0
- package/packages/embeddings/dist/embedder.interface.js +1 -0
- package/packages/embeddings/dist/index.d.ts +3 -0
- package/packages/embeddings/dist/index.js +1 -0
- package/packages/embeddings/dist/onnx-embedder.d.ts +22 -0
- package/packages/embeddings/dist/onnx-embedder.js +1 -0
- package/packages/enterprise-bridge/dist/cache.d.ts +28 -0
- package/packages/enterprise-bridge/dist/cache.js +1 -0
- package/packages/enterprise-bridge/dist/er-client.d.ts +37 -0
- package/packages/enterprise-bridge/dist/er-client.js +1 -0
- package/packages/enterprise-bridge/dist/evolution-collector.d.ts +62 -0
- package/packages/enterprise-bridge/dist/evolution-collector.js +1 -0
- package/packages/enterprise-bridge/dist/index.d.ts +8 -0
- package/packages/enterprise-bridge/dist/index.js +1 -0
- package/packages/enterprise-bridge/dist/policy-store.d.ts +45 -0
- package/packages/enterprise-bridge/dist/policy-store.js +1 -0
- package/packages/enterprise-bridge/dist/push-adapter.d.ts +23 -0
- package/packages/enterprise-bridge/dist/push-adapter.js +1 -0
- package/packages/enterprise-bridge/dist/result-merger.d.ts +14 -0
- package/packages/enterprise-bridge/dist/result-merger.js +1 -0
- package/packages/enterprise-bridge/dist/types.d.ts +81 -0
- package/packages/enterprise-bridge/dist/types.js +1 -0
- package/packages/flows/dist/adapters/claude-plugin.d.ts +12 -0
- package/packages/flows/dist/adapters/claude-plugin.js +1 -0
- package/packages/flows/dist/adapters/copilot.d.ts +10 -0
- package/packages/flows/dist/adapters/copilot.js +1 -0
- package/packages/flows/dist/adapters/index.d.ts +11 -0
- package/packages/flows/dist/adapters/index.js +1 -0
- package/packages/flows/dist/adapters/native.d.ts +10 -0
- package/packages/flows/dist/adapters/native.js +1 -0
- package/packages/flows/dist/builtins.d.ts +16 -0
- package/packages/flows/dist/builtins.js +1 -0
- package/packages/flows/dist/foundation.d.ts +20 -0
- package/packages/flows/dist/foundation.js +11 -0
- package/packages/flows/dist/git.d.ts +34 -0
- package/packages/flows/dist/git.js +1 -0
- package/packages/flows/dist/index.d.ts +12 -0
- package/packages/flows/dist/index.js +1 -0
- package/packages/flows/dist/loader.d.ts +13 -0
- package/packages/flows/dist/loader.js +2 -0
- package/packages/flows/dist/registry.d.ts +23 -0
- package/packages/flows/dist/registry.js +1 -0
- package/packages/flows/dist/state-machine.d.ts +23 -0
- package/packages/flows/dist/state-machine.js +1 -0
- package/packages/flows/dist/symlinks.d.ts +17 -0
- package/packages/flows/dist/symlinks.js +1 -0
- package/packages/flows/dist/types.d.ts +112 -0
- package/packages/flows/dist/types.js +1 -0
- package/packages/indexer/dist/file-hasher.d.ts +13 -0
- package/packages/indexer/dist/file-hasher.js +1 -0
- package/packages/indexer/dist/filesystem-crawler.d.ts +29 -0
- package/packages/indexer/dist/filesystem-crawler.js +1 -0
- package/packages/indexer/dist/graph-extractor.d.ts +18 -0
- package/packages/indexer/dist/graph-extractor.js +1 -0
- package/packages/indexer/dist/hash-cache.d.ts +24 -0
- package/packages/indexer/dist/hash-cache.js +1 -0
- package/packages/indexer/dist/incremental-indexer.d.ts +56 -0
- package/packages/indexer/dist/incremental-indexer.js +1 -0
- package/packages/indexer/dist/index.d.ts +6 -0
- package/packages/indexer/dist/index.js +1 -0
- package/packages/present/dist/index.html +709 -0
- package/packages/server/dist/api.d.ts +3 -0
- package/packages/server/dist/api.js +1 -0
- package/packages/server/dist/auto-gc.d.ts +30 -0
- package/packages/server/dist/auto-gc.js +1 -0
- package/packages/server/dist/completions.d.ts +14 -0
- package/packages/server/dist/completions.js +1 -0
- package/packages/server/dist/config.d.ts +14 -0
- package/packages/server/dist/config.js +1 -0
- package/packages/server/dist/cross-workspace.d.ts +43 -0
- package/packages/server/dist/cross-workspace.js +1 -0
- package/packages/server/dist/curated-manager.d.ts +92 -0
- package/packages/server/dist/curated-manager.js +5 -0
- package/packages/server/dist/dashboard-static.d.ts +27 -0
- package/packages/server/dist/dashboard-static.js +1 -0
- package/packages/server/dist/elicitor.d.ts +18 -0
- package/packages/server/dist/elicitor.js +1 -0
- package/packages/server/dist/index.d.ts +1 -0
- package/packages/server/dist/index.js +1 -0
- package/packages/server/dist/mcp-logging.d.ts +11 -0
- package/packages/server/dist/mcp-logging.js +1 -0
- package/packages/server/dist/output-schemas.d.ts +242 -0
- package/packages/server/dist/output-schemas.js +1 -0
- package/packages/server/dist/prompts.d.ts +13 -0
- package/packages/server/dist/prompts.js +13 -0
- package/packages/server/dist/replay-interceptor.d.ts +23 -0
- package/packages/server/dist/replay-interceptor.js +1 -0
- package/packages/server/dist/resource-links.d.ts +34 -0
- package/packages/server/dist/resource-links.js +1 -0
- package/packages/server/dist/resources/curated-resources.d.ts +13 -0
- package/packages/server/dist/resources/curated-resources.js +2 -0
- package/packages/server/dist/resources/resource-notifier.d.ts +45 -0
- package/packages/server/dist/resources/resource-notifier.js +1 -0
- package/packages/server/dist/resources/resources.d.ts +8 -0
- package/packages/server/dist/resources/resources.js +2 -0
- package/packages/server/dist/sampling.d.ts +41 -0
- package/packages/server/dist/sampling.js +2 -0
- package/packages/server/dist/server.d.ts +47 -0
- package/packages/server/dist/server.js +3 -0
- package/packages/server/dist/structured-content-guard.d.ts +26 -0
- package/packages/server/dist/structured-content-guard.js +1 -0
- package/packages/server/dist/task-manager.d.ts +40 -0
- package/packages/server/dist/task-manager.js +1 -0
- package/packages/server/dist/tool-metadata.d.ts +38 -0
- package/packages/server/dist/tool-metadata.js +1 -0
- package/packages/server/dist/tool-prefix.d.ts +12 -0
- package/packages/server/dist/tool-prefix.js +1 -0
- package/packages/server/dist/tools/analyze.tools.d.ts +14 -0
- package/packages/server/dist/tools/analyze.tools.js +8 -0
- package/packages/server/dist/tools/audit.tool.d.ts +8 -0
- package/packages/server/dist/tools/audit.tool.js +1 -0
- package/packages/server/dist/tools/brainstorm.tool.d.ts +7 -0
- package/packages/server/dist/tools/brainstorm.tool.js +9 -0
- package/packages/server/dist/tools/bridge.tools.d.ts +34 -0
- package/packages/server/dist/tools/bridge.tools.js +15 -0
- package/packages/server/dist/tools/context.tools.d.ts +15 -0
- package/packages/server/dist/tools/context.tools.js +10 -0
- package/packages/server/dist/tools/evolution.tools.d.ts +7 -0
- package/packages/server/dist/tools/evolution.tools.js +5 -0
- package/packages/server/dist/tools/execution.tools.d.ts +14 -0
- package/packages/server/dist/tools/execution.tools.js +4 -0
- package/packages/server/dist/tools/flow.tools.d.ts +7 -0
- package/packages/server/dist/tools/flow.tools.js +1 -0
- package/packages/server/dist/tools/forge.tools.d.ts +13 -0
- package/packages/server/dist/tools/forge.tools.js +10 -0
- package/packages/server/dist/tools/forget.tool.d.ts +8 -0
- package/packages/server/dist/tools/forget.tool.js +1 -0
- package/packages/server/dist/tools/graph.tool.d.ts +7 -0
- package/packages/server/dist/tools/graph.tool.js +5 -0
- package/packages/server/dist/tools/infra.tools.d.ts +10 -0
- package/packages/server/dist/tools/infra.tools.js +5 -0
- package/packages/server/dist/tools/list.tool.d.ts +7 -0
- package/packages/server/dist/tools/list.tool.js +2 -0
- package/packages/server/dist/tools/lookup.tool.d.ts +7 -0
- package/packages/server/dist/tools/lookup.tool.js +3 -0
- package/packages/server/dist/tools/manipulation.tools.d.ts +10 -0
- package/packages/server/dist/tools/manipulation.tools.js +4 -0
- package/packages/server/dist/tools/onboard.tool.d.ts +9 -0
- package/packages/server/dist/tools/onboard.tool.js +2 -0
- package/packages/server/dist/tools/persistence.tools.d.ts +10 -0
- package/packages/server/dist/tools/persistence.tools.js +5 -0
- package/packages/server/dist/tools/policy.tools.d.ts +7 -0
- package/packages/server/dist/tools/policy.tools.js +3 -0
- package/packages/server/dist/tools/present/browser.d.ts +4 -0
- package/packages/server/dist/tools/present/browser.js +93 -0
- package/packages/server/dist/tools/present/helpers.d.ts +18 -0
- package/packages/server/dist/tools/present/helpers.js +1 -0
- package/packages/server/dist/tools/present/html.d.ts +18 -0
- package/packages/server/dist/tools/present/html.js +5 -0
- package/packages/server/dist/tools/present/index.d.ts +2 -0
- package/packages/server/dist/tools/present/index.js +1 -0
- package/packages/server/dist/tools/present/markdown.d.ts +17 -0
- package/packages/server/dist/tools/present/markdown.js +8 -0
- package/packages/server/dist/tools/present/templates.d.ts +14 -0
- package/packages/server/dist/tools/present/templates.js +472 -0
- package/packages/server/dist/tools/present/tool.d.ts +27 -0
- package/packages/server/dist/tools/present/tool.js +19 -0
- package/packages/server/dist/tools/present-blocks.d.ts +46 -0
- package/packages/server/dist/tools/present-blocks.js +27 -0
- package/packages/server/dist/tools/present-charts.d.ts +31 -0
- package/packages/server/dist/tools/present-charts.js +34 -0
- package/packages/server/dist/tools/present-theme.d.ts +14 -0
- package/packages/server/dist/tools/present-theme.js +395 -0
- package/packages/server/dist/tools/present-utils.d.ts +11 -0
- package/packages/server/dist/tools/present-utils.js +1 -0
- package/packages/server/dist/tools/present.tool.d.ts +2 -0
- package/packages/server/dist/tools/present.tool.js +1 -0
- package/packages/server/dist/tools/produce.tool.d.ts +7 -0
- package/packages/server/dist/tools/produce.tool.js +4 -0
- package/packages/server/dist/tools/read.tool.d.ts +7 -0
- package/packages/server/dist/tools/read.tool.js +2 -0
- package/packages/server/dist/tools/reindex.tool.d.ts +11 -0
- package/packages/server/dist/tools/reindex.tool.js +3 -0
- package/packages/server/dist/tools/remember.tool.d.ts +9 -0
- package/packages/server/dist/tools/remember.tool.js +4 -0
- package/packages/server/dist/tools/replay.tool.d.ts +6 -0
- package/packages/server/dist/tools/replay.tool.js +3 -0
- package/packages/server/dist/tools/restore.tool.d.ts +6 -0
- package/packages/server/dist/tools/restore.tool.js +3 -0
- package/packages/server/dist/tools/search.tool.d.ts +11 -0
- package/packages/server/dist/tools/search.tool.js +10 -0
- package/packages/server/dist/tools/status.tool.d.ts +20 -0
- package/packages/server/dist/tools/status.tool.js +3 -0
- package/packages/server/dist/tools/update.tool.d.ts +8 -0
- package/packages/server/dist/tools/update.tool.js +1 -0
- package/packages/server/dist/tools/utility.tools.d.ts +15 -0
- package/packages/server/dist/tools/utility.tools.js +13 -0
- package/packages/server/dist/version-check.d.ts +32 -0
- package/packages/server/dist/version-check.js +1 -0
- package/packages/store/dist/graph-store.interface.d.ts +118 -0
- package/packages/store/dist/graph-store.interface.js +1 -0
- package/packages/store/dist/index.d.ts +6 -0
- package/packages/store/dist/index.js +1 -0
- package/packages/store/dist/lance-store.d.ts +44 -0
- package/packages/store/dist/lance-store.js +1 -0
- package/packages/store/dist/sqlite-graph-store.d.ts +45 -0
- package/packages/store/dist/sqlite-graph-store.js +58 -0
- package/packages/store/dist/store-factory.d.ts +12 -0
- package/packages/store/dist/store-factory.js +1 -0
- package/packages/store/dist/store.interface.d.ts +54 -0
- package/packages/store/dist/store.interface.js +1 -0
- package/packages/tools/dist/audit.d.ts +65 -0
- package/packages/tools/dist/audit.js +6 -0
- package/packages/tools/dist/batch.d.ts +23 -0
- package/packages/tools/dist/batch.js +1 -0
- package/packages/tools/dist/changelog.d.ts +36 -0
- package/packages/tools/dist/changelog.js +2 -0
- package/packages/tools/dist/check.d.ts +48 -0
- package/packages/tools/dist/check.js +2 -0
- package/packages/tools/dist/checkpoint.d.ts +19 -0
- package/packages/tools/dist/checkpoint.js +1 -0
- package/packages/tools/dist/codemod.d.ts +39 -0
- package/packages/tools/dist/codemod.js +2 -0
- package/packages/tools/dist/compact.d.ts +41 -0
- package/packages/tools/dist/compact.js +3 -0
- package/packages/tools/dist/config-extractor.d.ts +9 -0
- package/packages/tools/dist/config-extractor.js +7 -0
- package/packages/tools/dist/data-transform.d.ts +12 -0
- package/packages/tools/dist/data-transform.js +1 -0
- package/packages/tools/dist/dead-symbols.d.ts +28 -0
- package/packages/tools/dist/dead-symbols.js +2 -0
- package/packages/tools/dist/delegate.d.ts +36 -0
- package/packages/tools/dist/delegate.js +1 -0
- package/packages/tools/dist/diagram-builder.d.ts +9 -0
- package/packages/tools/dist/diagram-builder.js +9 -0
- package/packages/tools/dist/diff-parse.d.ts +28 -0
- package/packages/tools/dist/diff-parse.js +3 -0
- package/packages/tools/dist/digest.d.ts +50 -0
- package/packages/tools/dist/digest.js +6 -0
- package/packages/tools/dist/dogfood-log.d.ts +49 -0
- package/packages/tools/dist/dogfood-log.js +2 -0
- package/packages/tools/dist/encode.d.ts +16 -0
- package/packages/tools/dist/encode.js +1 -0
- package/packages/tools/dist/env-info.d.ts +30 -0
- package/packages/tools/dist/env-info.js +1 -0
- package/packages/tools/dist/eval.d.ts +15 -0
- package/packages/tools/dist/eval.js +2 -0
- package/packages/tools/dist/evidence-map.d.ts +92 -0
- package/packages/tools/dist/evidence-map.js +2 -0
- package/packages/tools/dist/file-cache.d.ts +41 -0
- package/packages/tools/dist/file-cache.js +3 -0
- package/packages/tools/dist/file-summary.d.ts +52 -0
- package/packages/tools/dist/file-summary.js +2 -0
- package/packages/tools/dist/file-walk.d.ts +6 -0
- package/packages/tools/dist/file-walk.js +1 -0
- package/packages/tools/dist/find-examples.d.ts +29 -0
- package/packages/tools/dist/find-examples.js +3 -0
- package/packages/tools/dist/find.d.ts +49 -0
- package/packages/tools/dist/find.js +1 -0
- package/packages/tools/dist/forge-classify.d.ts +44 -0
- package/packages/tools/dist/forge-classify.js +2 -0
- package/packages/tools/dist/forge-ground.d.ts +61 -0
- package/packages/tools/dist/forge-ground.js +1 -0
- package/packages/tools/dist/git-context.d.ts +25 -0
- package/packages/tools/dist/git-context.js +3 -0
- package/packages/tools/dist/graph-query.d.ts +86 -0
- package/packages/tools/dist/graph-query.js +1 -0
- package/packages/tools/dist/guide.d.ts +25 -0
- package/packages/tools/dist/guide.js +1 -0
- package/packages/tools/dist/health.d.ts +16 -0
- package/packages/tools/dist/health.js +2 -0
- package/packages/tools/dist/http-request.d.ts +25 -0
- package/packages/tools/dist/http-request.js +1 -0
- package/packages/tools/dist/index.d.ts +57 -0
- package/packages/tools/dist/index.js +1 -0
- package/packages/tools/dist/lane.d.ts +41 -0
- package/packages/tools/dist/lane.js +6 -0
- package/packages/tools/dist/measure.d.ts +42 -0
- package/packages/tools/dist/measure.js +2 -0
- package/packages/tools/dist/onboard-utils.d.ts +12 -0
- package/packages/tools/dist/onboard-utils.js +1 -0
- package/packages/tools/dist/onboard.d.ts +50 -0
- package/packages/tools/dist/onboard.js +18 -0
- package/packages/tools/dist/parse-output.d.ts +82 -0
- package/packages/tools/dist/parse-output.js +2 -0
- package/packages/tools/dist/path-resolver.d.ts +14 -0
- package/packages/tools/dist/path-resolver.js +1 -0
- package/packages/tools/dist/process-manager.d.ts +20 -0
- package/packages/tools/dist/process-manager.js +1 -0
- package/packages/tools/dist/queue.d.ts +40 -0
- package/packages/tools/dist/queue.js +1 -0
- package/packages/tools/dist/regex-test.d.ts +33 -0
- package/packages/tools/dist/regex-test.js +1 -0
- package/packages/tools/dist/regex-utils.d.ts +8 -0
- package/packages/tools/dist/regex-utils.js +1 -0
- package/packages/tools/dist/rename.d.ts +31 -0
- package/packages/tools/dist/rename.js +2 -0
- package/packages/tools/dist/replay.d.ts +59 -0
- package/packages/tools/dist/replay.js +4 -0
- package/packages/tools/dist/response-envelope.d.ts +43 -0
- package/packages/tools/dist/response-envelope.js +1 -0
- package/packages/tools/dist/restore-points.d.ts +22 -0
- package/packages/tools/dist/restore-points.js +1 -0
- package/packages/tools/dist/schema-validate.d.ts +25 -0
- package/packages/tools/dist/schema-validate.js +1 -0
- package/packages/tools/dist/scope-map.d.ts +51 -0
- package/packages/tools/dist/scope-map.js +1 -0
- package/packages/tools/dist/snippet.d.ts +35 -0
- package/packages/tools/dist/snippet.js +1 -0
- package/packages/tools/dist/stash.d.ts +14 -0
- package/packages/tools/dist/stash.js +1 -0
- package/packages/tools/dist/stratum-card.d.ts +30 -0
- package/packages/tools/dist/stratum-card.js +4 -0
- package/packages/tools/dist/symbol.d.ts +45 -0
- package/packages/tools/dist/symbol.js +3 -0
- package/packages/tools/dist/synthesis-engine.d.ts +13 -0
- package/packages/tools/dist/synthesis-engine.js +6 -0
- package/packages/tools/dist/test-run.d.ts +28 -0
- package/packages/tools/dist/test-run.js +2 -0
- package/packages/tools/dist/text-utils.d.ts +24 -0
- package/packages/tools/dist/text-utils.js +2 -0
- package/packages/tools/dist/time-utils.d.ts +20 -0
- package/packages/tools/dist/time-utils.js +1 -0
- package/packages/tools/dist/trace.d.ts +29 -0
- package/packages/tools/dist/trace.js +2 -0
- package/packages/tools/dist/truncation.d.ts +33 -0
- package/packages/tools/dist/truncation.js +7 -0
- package/packages/tools/dist/watch.d.ts +32 -0
- package/packages/tools/dist/watch.js +1 -0
- package/packages/tools/dist/web-fetch.d.ts +47 -0
- package/packages/tools/dist/web-fetch.js +8 -0
- package/packages/tools/dist/web-search.d.ts +25 -0
- package/packages/tools/dist/web-search.js +1 -0
- package/packages/tools/dist/workset.d.ts +47 -0
- package/packages/tools/dist/workset.js +1 -0
- package/packages/tui/dist/App-DU2KEylW.js +2 -0
- package/packages/tui/dist/App.d.ts +13 -0
- package/packages/tui/dist/App.js +2 -0
- package/packages/tui/dist/CuratedPanel-BIamXLNy.js +2 -0
- package/packages/tui/dist/LogPanel-Bo8a8QXB.js +3 -0
- package/packages/tui/dist/SearchPanel-CpJGczAc.js +2 -0
- package/packages/tui/dist/StatusPanel-BAbUxyqQ.js +2 -0
- package/packages/tui/dist/chunk-D6axbAb-.js +2 -0
- package/packages/tui/dist/devtools-DMOZMn70.js +7 -0
- package/packages/tui/dist/hooks/useKBClient.d.ts +9 -0
- package/packages/tui/dist/hooks/useKBClient.js +2 -0
- package/packages/tui/dist/hooks/usePolling.d.ts +8 -0
- package/packages/tui/dist/hooks/usePolling.js +2 -0
- package/packages/tui/dist/index-BXafekwr.d.ts +64 -0
- package/packages/tui/dist/index.d.ts +7 -0
- package/packages/tui/dist/index.js +2 -0
- package/packages/tui/dist/jsx-runtime-y6Gdq5PZ.js +294 -0
- package/packages/tui/dist/panels/CuratedPanel.d.ts +7 -0
- package/packages/tui/dist/panels/CuratedPanel.js +2 -0
- package/packages/tui/dist/panels/LogPanel.d.ts +7 -0
- package/packages/tui/dist/panels/LogPanel.js +2 -0
- package/packages/tui/dist/panels/SearchPanel.d.ts +7 -0
- package/packages/tui/dist/panels/SearchPanel.js +2 -0
- package/packages/tui/dist/panels/StatusPanel.d.ts +7 -0
- package/packages/tui/dist/panels/StatusPanel.js +2 -0
- package/packages/tui/dist/react-D__J1GQe.js +24 -0
- package/packages/tui/dist/useKBClient-C35iA4uG.js +2 -0
- package/packages/tui/dist/usePolling-BbjnRWgx.js +2 -0
- package/scaffold/README.md +192 -0
- package/scaffold/adapters/claude-code.mjs +56 -0
- package/scaffold/adapters/copilot.mjs +270 -0
- package/scaffold/definitions/agents.mjs +189 -0
- package/scaffold/definitions/bodies.mjs +487 -0
- package/scaffold/definitions/hooks.mjs +43 -0
- package/scaffold/definitions/models.mjs +56 -0
- package/scaffold/definitions/plugins.mjs +38 -0
- package/scaffold/definitions/prompts.mjs +145 -0
- package/scaffold/definitions/protocols.mjs +679 -0
- package/scaffold/definitions/tools.mjs +229 -0
- package/scaffold/flows/aikit-advanced/flow.json +60 -0
- package/scaffold/flows/aikit-advanced/skills/execute/SKILL.md +124 -0
- package/scaffold/flows/aikit-advanced/skills/plan/SKILL.md +100 -0
- package/scaffold/flows/aikit-advanced/skills/spec/SKILL.md +100 -0
- package/scaffold/flows/aikit-advanced/skills/task/SKILL.md +99 -0
- package/scaffold/flows/aikit-advanced/skills/verify/SKILL.md +122 -0
- package/scaffold/flows/aikit-basic/flow.json +36 -0
- package/scaffold/flows/aikit-basic/skills/assess/SKILL.md +82 -0
- package/scaffold/flows/aikit-basic/skills/implement/SKILL.md +105 -0
- package/scaffold/flows/aikit-basic/skills/verify/SKILL.md +96 -0
- package/scaffold/general/agents/Architect-Reviewer-Alpha.agent.md +21 -0
- package/scaffold/general/agents/Architect-Reviewer-Beta.agent.md +21 -0
- package/scaffold/general/agents/Code-Reviewer-Alpha.agent.md +12 -0
- package/scaffold/general/agents/Code-Reviewer-Beta.agent.md +12 -0
- package/scaffold/general/agents/Debugger.agent.md +34 -0
- package/scaffold/general/agents/Documenter.agent.md +53 -0
- package/scaffold/general/agents/Explorer.agent.md +63 -0
- package/scaffold/general/agents/Frontend.agent.md +29 -0
- package/scaffold/general/agents/Implementer.agent.md +33 -0
- package/scaffold/general/agents/Orchestrator.agent.md +149 -0
- package/scaffold/general/agents/Planner.agent.md +79 -0
- package/scaffold/general/agents/README.md +57 -0
- package/scaffold/general/agents/Refactor.agent.md +36 -0
- package/scaffold/general/agents/Researcher-Alpha.agent.md +20 -0
- package/scaffold/general/agents/Researcher-Beta.agent.md +20 -0
- package/scaffold/general/agents/Researcher-Delta.agent.md +20 -0
- package/scaffold/general/agents/Researcher-Gamma.agent.md +20 -0
- package/scaffold/general/agents/Security.agent.md +55 -0
- package/scaffold/general/agents/_shared/architect-reviewer-base.md +60 -0
- package/scaffold/general/agents/_shared/code-agent-base.md +262 -0
- package/scaffold/general/agents/_shared/code-reviewer-base.md +64 -0
- package/scaffold/general/agents/_shared/decision-protocol.md +27 -0
- package/scaffold/general/agents/_shared/forge-protocol.md +90 -0
- package/scaffold/general/agents/_shared/researcher-base.md +101 -0
- package/scaffold/general/agents/templates/adr-template.md +28 -0
- package/scaffold/general/agents/templates/execution-state.md +26 -0
- package/scaffold/general/prompts/ask.prompt.md +21 -0
- package/scaffold/general/prompts/debug.prompt.md +25 -0
- package/scaffold/general/prompts/design.prompt.md +23 -0
- package/scaffold/general/prompts/implement.prompt.md +26 -0
- package/scaffold/general/prompts/plan.prompt.md +25 -0
- package/scaffold/general/prompts/review.prompt.md +32 -0
- package/scaffold/general/skills/adr-skill/SKILL.md +329 -0
- package/scaffold/general/skills/adr-skill/assets/templates/adr-madr.md +89 -0
- package/scaffold/general/skills/adr-skill/assets/templates/adr-readme.md +20 -0
- package/scaffold/general/skills/adr-skill/assets/templates/adr-simple.md +46 -0
- package/scaffold/general/skills/adr-skill/references/adr-conventions.md +95 -0
- package/scaffold/general/skills/adr-skill/references/examples.md +193 -0
- package/scaffold/general/skills/adr-skill/references/review-checklist.md +77 -0
- package/scaffold/general/skills/adr-skill/references/template-variants.md +52 -0
- package/scaffold/general/skills/adr-skill/scripts/bootstrap_adr.js +259 -0
- package/scaffold/general/skills/adr-skill/scripts/new_adr.js +391 -0
- package/scaffold/general/skills/adr-skill/scripts/set_adr_status.js +169 -0
- package/scaffold/general/skills/aikit/SKILL.md +521 -0
- package/scaffold/general/skills/brainstorming/SKILL.md +259 -0
- package/scaffold/general/skills/brainstorming/scripts/frame-template.html +365 -0
- package/scaffold/general/skills/brainstorming/scripts/helper.js +216 -0
- package/scaffold/general/skills/brainstorming/scripts/server.cjs +9 -0
- package/scaffold/general/skills/brainstorming/scripts/server.src.cjs +249 -0
- package/scaffold/general/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/scaffold/general/skills/brainstorming/visual-companion.md +430 -0
- package/scaffold/general/skills/c4-architecture/SKILL.md +295 -0
- package/scaffold/general/skills/c4-architecture/references/advanced-patterns.md +552 -0
- package/scaffold/general/skills/c4-architecture/references/c4-syntax.md +492 -0
- package/scaffold/general/skills/c4-architecture/references/common-mistakes.md +437 -0
- package/scaffold/general/skills/lesson-learned/SKILL.md +105 -0
- package/scaffold/general/skills/lesson-learned/references/anti-patterns.md +55 -0
- package/scaffold/general/skills/lesson-learned/references/se-principles.md +109 -0
- package/scaffold/general/skills/multi-agents-development/SKILL.md +435 -0
- package/scaffold/general/skills/multi-agents-development/architecture-review-prompt.md +81 -0
- package/scaffold/general/skills/multi-agents-development/code-quality-review-prompt.md +91 -0
- package/scaffold/general/skills/multi-agents-development/implementer-prompt.md +93 -0
- package/scaffold/general/skills/multi-agents-development/parallel-dispatch-example.md +167 -0
- package/scaffold/general/skills/multi-agents-development/spec-review-prompt.md +81 -0
- package/scaffold/general/skills/present/SKILL.md +424 -0
- package/scaffold/general/skills/requirements-clarity/SKILL.md +324 -0
- package/scaffold/general/skills/session-handoff/SKILL.md +189 -0
- package/scaffold/general/skills/session-handoff/references/handoff-template.md +139 -0
- package/scaffold/general/skills/session-handoff/references/resume-checklist.md +80 -0
- package/scaffold/general/skills/session-handoff/scripts/check_staleness.js +269 -0
- package/scaffold/general/skills/session-handoff/scripts/create_handoff.js +299 -0
- package/scaffold/general/skills/session-handoff/scripts/list_handoffs.js +113 -0
- package/scaffold/general/skills/session-handoff/scripts/validate_handoff.js +241 -0
- package/scaffold/generate.mjs +82 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{extname as e,join as t,relative as n}from"node:path";import{readFileSync as r,readdirSync as i}from"node:fs";const a=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`,`.venv`,`venv`,`__pycache__`,`target`,`vendor`,`bin`,`obj`]),o=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.java`,`.py`,`.go`,`.cs`,`.kt`,`.scala`,`.rs`,`.rb`,`.php`,`.swift`]);async function s(i){let a=Date.now(),o=v(i);if(o.length===0)return null;let s=o.slice(0,800),u=new Map,m=new Map;for(let t of s){let a=n(i,t).replace(/\\/g,`/`),o=r(t,`utf-8`),s=e(t).toLowerCase(),d=c(o,s);u.set(a,d);let f=l(o,s);m.set(a,f)}let g=p(s,i),x=y(i),S=new Map;for(let[n,a]of u){if(_(n))continue;let o=f(r(t(i,n),`utf-8`),e(n));for(let t of a){if(!t.isRelative){let e=b(t.source,x,g);if(!e)continue;let r=e;if(_(r)||n===r)continue;let i;if(i=t.symbols.length>0?t.symbols.filter(e=>RegExp(`\\b${d(e)}\\b`).test(o)):[`*`],i.length===0)continue;let a=`${n}|${r}`,s=S.get(a);if(s)for(let e of i)s.add(e);else S.set(a,new Set(i));continue}let r=h(n,t.source,g,e(n));if(r.length===0)continue;let i=r[0];if(_(i)||n===i)continue;let a;if(a=t.symbols.length>0?t.symbols.filter(e=>RegExp(`\\b${d(e)}\\b`).test(o)):[`*`],a.length===0)continue;let s=`${n}|${i}`,c=S.get(s);if(c)for(let e of a)c.add(e);else S.set(s,new Set(a))}}let C=[];for(let[e,t]of S){let[n,r]=e.split(`|`);C.push({from:n,to:r,symbols:[...t].sort().slice(0,10)})}return C.sort((e,t)=>t.symbols.length-e.symbols.length),{edges:C,fileCount:s.length,edgeCount:C.length,durationMs:Date.now()-a}}function c(e,t){let n=[];switch(t){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:{let t=/import\s+(?:type\s+)?\{([^}]+)\}\s+from\s+['"]([^'"]+)['"]/g,r;for(;(r=t.exec(e))!==null;){let e=r[1].split(`,`).map(e=>{let t=e.trim().split(/\s+as\s+/);return(t[t.length-1]||``).trim()}).filter(Boolean);n.push({source:r[2],symbols:e,isRelative:r[2].startsWith(`.`)})}let i=/import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g;for(;(r=i.exec(e))!==null;)r[1]!==`type`&&n.push({source:r[2],symbols:[r[1]],isRelative:r[2].startsWith(`.`)});let a=/(?:const|let|var)\s+\{([^}]+)\}\s*=\s*require\(\s*['"]([^'"]+)['"]\s*\)/g;for(;(r=a.exec(e))!==null;){let e=r[1].split(`,`).map(e=>e.trim().split(`:`)[0].trim()).filter(Boolean);n.push({source:r[2],symbols:e,isRelative:r[2].startsWith(`.`)})}break}case`.java`:case`.kt`:case`.scala`:{let t=/^import\s+(?:static\s+)?([\w.]+)\s*;/gm,r;for(;(r=t.exec(e))!==null;){let t=r[1].split(`.`),i=t[t.length-1];i===`*`?n.push({source:r[1],symbols:[],isRelative:u(r[1],e)}):n.push({source:r[1],symbols:[i],isRelative:u(r[1],e)})}break}case`.py`:{let t=/^from\s+([\w.]+)\s+import\s+(.+)$/gm,r;for(;(r=t.exec(e))!==null;){let e=r[2].split(`,`).map(e=>{let t=e.trim().split(/\s+as\s+/);return(t[t.length-1]||``).trim()}).filter(e=>e&&e!==`(`);n.push({source:r[1],symbols:e,isRelative:r[1].startsWith(`.`)})}let i=/^import\s+([\w.]+)(?:\s+as\s+(\w+))?\s*$/gm;for(;(r=i.exec(e))!==null;){let e=r[1].split(`.`),t=r[2]||e[e.length-1];n.push({source:r[1],symbols:[t],isRelative:r[1].startsWith(`.`)})}break}case`.go`:{let t=/import\s+(?:(\w+)\s+)?[""]([^""]+)[""]/g,r;for(;(r=t.exec(e))!==null;){let e=r[2].split(`/`),t=r[1]||e[e.length-1];n.push({source:r[2],symbols:[t],isRelative:!r[2].includes(`.`)&&!r[2].startsWith(`github.com`)})}let i=/import\s*\(([\s\S]*?)\)/g;for(;(r=i.exec(e))!==null;){let e=r[1],t=/(?:(\w+)\s+)?[""]([^""]+)[""]/g,i;for(;(i=t.exec(e))!==null;){let e=i[2].split(`/`),t=i[1]||e[e.length-1];n.push({source:i[2],symbols:[t],isRelative:!i[2].includes(`.`)&&!i[2].startsWith(`github.com`)})}}break}case`.cs`:{let t=/^using\s+(?:static\s+)?([\w.]+)\s*;/gm,r;for(;(r=t.exec(e))!==null;){let e=r[1].split(`.`);n.push({source:r[1],symbols:[e[e.length-1]],isRelative:!0})}break}case`.rs`:{let t=/^use\s+([\w:]+(?:::\w+)*)/gm,r;for(;(r=t.exec(e))!==null;){let e=r[1].split(`::`),t=e[e.length-1];n.push({source:r[1],symbols:t===`*`?[]:[t],isRelative:r[1].startsWith(`crate`)||r[1].startsWith(`super`)})}break}}return n}function l(e,t){let n=new Set;switch(t){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:{let t=/export\s+(?:default\s+)?(?:abstract\s+)?(?:async\s+)?(?:function|class|const|let|var|type|interface|enum)\s+(\w+)/g,r;for(;(r=t.exec(e))!==null;)n.add(r[1]);break}case`.java`:case`.kt`:case`.scala`:{let t=/(?:public|protected)\s+(?:static\s+)?(?:abstract\s+)?(?:final\s+)?(?:class|interface|enum|record|@interface)\s+(\w+)/g,r;for(;(r=t.exec(e))!==null;)n.add(r[1]);let i=/(?:public|protected)\s+(?:static\s+)?(?:abstract\s+)?(?:final\s+)?\w+(?:<[^>]+>)?\s+(\w+)\s*\(/g;for(;(r=i.exec(e))!==null;)[`if`,`for`,`while`,`switch`,`catch`,`return`,`class`,`interface`,`enum`,`new`].includes(r[1])||n.add(r[1]);break}case`.py`:{let t=/^(?:def|class)\s+([A-Z_]\w*)/gm,r;for(;(r=t.exec(e))!==null;)r[1].startsWith(`_`)||n.add(r[1]);break}case`.go`:{let t=/^(?:func|type|var|const)\s+(\(?[A-Z]\w*)/gm,r;for(;(r=t.exec(e))!==null;)n.add(r[1].replace(`(`,``));break}}return n}function u(e,t){let n=t.match(/^package\s+([\w.]+)\s*;/m);if(!n)return!1;let r=n[1].split(`.`),i=e.split(`.`);return r.length>=2&&i.length>=2&&r[0]===i[0]&&r[1]===i[1]}function d(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function f(e,t){switch(t){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:return e.replace(/^import\s+.+$/gm,``).replace(/^const\s+.+=\s*require\(.+$/gm,``);case`.java`:case`.kt`:case`.scala`:return e.replace(/^import\s+.+;$/gm,``);case`.py`:return e.replace(/^(?:from\s+.+import\s+.+|import\s+.+)$/gm,``);case`.go`:return e.replace(/^import\s+.+$/gm,``).replace(/import\s*\([\s\S]*?\)/g,``);case`.cs`:return e.replace(/^using\s+.+;$/gm,``);case`.rs`:return e.replace(/^use\s+.+;$/gm,``);default:return e}}function p(e,t){let r=new Map;for(let i of e){let e=n(t,i).replace(/\\/g,`/`),a=e.replace(/\.[^.]+$/,``);m(r,a,e);let o=a.split(`/`),s=o[o.length-1];m(r,s,e)}return r}function m(e,t,n){let r=e.get(t);r?r.push(n):e.set(t,[n])}function h(e,t,n,r){switch(r){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:{if(!t.startsWith(`.`))return[];let r=e.split(`/`).slice(0,-1).join(`/`),i=g(r?`${r}/${t}`:t);for(let e of[``,`.ts`,`.tsx`,`.js`,`.jsx`,`/index.ts`,`/index.js`]){let t=n.get(i+e)||n.get((i+e).replace(/\.[^.]+$/,``));if(t&&t.length>0)return[t[0]]}let a=n.get(i.replace(/\.[^.]+$/,``));return a?[a[0]]:[]}case`.java`:case`.kt`:case`.scala`:{let e=t.split(`.`),r=e[e.length-1];if(r===`*`)return[];let i=n.get(r);return i?[i[0]]:[]}case`.py`:{if(t.startsWith(`.`)){let r=e.split(`/`).slice(0,-1).join(`/`),i=t.replace(/^\.+/,``).replace(/\./g,`/`),a=r?`${r}/${i}`:i,o=a.split(`/`),s=n.get(a)||n.get(o[o.length-1]);if(s)return[s[0]]}let r=t.replace(/\./g,`/`),i=n.get(r);return i?[i[0]]:[]}case`.go`:{let e=t.split(`/`),r=e[e.length-1],i=n.get(r);return i?[i[0]]:[]}default:return[]}}function g(e){let t=e.split(`/`),n=[];for(let e of t)if(!(e===`.`||e===``)){if(e===`..`){n.pop();continue}n.push(e)}return n.join(`/`)}function _(e){return e.split(`/`).some(e=>e===`test`||e===`tests`||e===`__tests__`||e===`spec`||e===`test_`||e===`__test__`)||/\.(test|spec)\.[^.]+$/.test(e)}function v(r){let s=[],c=(l,u)=>{if(!(u>10))try{for(let d of i(l,{withFileTypes:!0})){if(a.has(d.name)||d.name.startsWith(`.`))continue;let i=t(l,d.name);if(d.isDirectory())c(i,u+1);else{let t=e(d.name).toLowerCase();if(!o.has(t)||d.name.endsWith(`.d.ts`)||/\.(test|spec)\.[^.]+$/.test(d.name)||n(r,l).replace(/\\/g,`/`).split(`/`).some(e=>e===`test`||e===`tests`||e===`__tests__`||e===`spec`))continue;s.push(i)}}}catch{}};return c(r,0),s}function y(e){let n=new Map;for(let a of[`packages`,`apps`,`libs`,`services`,`functions`]){let o=t(e,a),s;try{s=i(o,{withFileTypes:!0})}catch{continue}for(let e of s){if(!e.isDirectory())continue;let i=t(o,e.name,`package.json`);try{let o=JSON.parse(r(i,`utf-8`));if(o.name){let r=o.exports?.[`.`]?.import??o.exports?.[`.`]?.default??o.main??`src/index.ts`,i=t(a,e.name,r).replace(/\\/g,`/`);n.set(o.name,i)}}catch{}}}return n}function b(e,t,n){if(t.has(e))return t.get(e)??null;let r=e.startsWith(`@`)?e.split(`/`):[];if(r.length>=2){let e=`${r[0]}/${r[1]}`,i=t.get(e);if(i){if(r.length===2)return i;let e=i.replace(/\/src\/index\.\w+$/,``).replace(/\/dist\/.*$/,``),t=r.slice(2).join(`/`),a=[`${e}/src/${t}`,`${e}/${t}`];for(let e of a){let t=e.replace(/\.\w+$/,``),r=n.get(t);if(r?.[0])return r[0]}return i}}return null}export{s as extractRegexCallGraph};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AnalysisResult, IAnalyzer, StructureAnalyzerOptions } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region packages/analyzers/src/structure-analyzer.d.ts
|
|
4
|
+
declare class StructureAnalyzer implements IAnalyzer<StructureAnalyzerOptions> {
|
|
5
|
+
readonly name = "structure";
|
|
6
|
+
analyze(rootPath: string, options?: StructureAnalyzerOptions): Promise<AnalysisResult>;
|
|
7
|
+
private buildTree;
|
|
8
|
+
private computeStats;
|
|
9
|
+
private formatMarkdownWithBudget;
|
|
10
|
+
private formatMarkdown;
|
|
11
|
+
private renderTree;
|
|
12
|
+
private renderTreeLevel3;
|
|
13
|
+
private estimateTokens;
|
|
14
|
+
private isLeafDir;
|
|
15
|
+
private leafDirSummary;
|
|
16
|
+
private countFiles;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { StructureAnalyzer };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{readdir as e,stat as t}from"node:fs/promises";import{basename as n,extname as r,join as i}from"node:path";const a={src:`Application source`,lib:`Library code`,dist:`Build output`,build:`Build output`,test:`Tests`,tests:`Tests`,spec:`Tests`,__tests__:`Tests`,docs:`Documentation`,scripts:`Build/utility scripts`,config:`Configuration`,handlers:`Entry point handlers`,controllers:`HTTP controllers`,routes:`API routes`,middleware:`Middleware`,services:`Business logic services`,domain:`Domain/business logic`,infrastructure:`External integrations`,adapters:`Adapter implementations`,ports:`Port interfaces`,models:`Data models`,entities:`Domain entities`,repositories:`Data access`,utils:`Utilities`,helpers:`Helper functions`,types:`Type definitions`,interfaces:`Interface definitions`,constants:`Constants`,cdk:`CDK infrastructure`,stacks:`CDK stacks`,constructs:`CDK constructs`,lambdas:`Lambda functions`,components:`UI components`,hooks:`React hooks`,pages:`Page components`,layouts:`Layout components`,store:`State management`,assets:`Static assets`,styles:`Stylesheets`,fixtures:`Test fixtures`,mocks:`Test mocks`,migrations:`Database migrations`},o={".ts":`TypeScript`,".tsx":`React TSX`,".js":`JavaScript`,".jsx":`React JSX`,".mjs":`ES Module`,".cjs":`CommonJS`,".json":`JSON`,".yaml":`YAML`,".yml":`YAML`,".md":`Markdown`,".mdx":`MDX`,".py":`Python`,".go":`Go`,".rs":`Rust`,".java":`Java`,".sh":`Shell`,".ps1":`PowerShell`,".css":`CSS`,".scss":`SCSS`,".html":`HTML`,".sql":`SQL`,".graphql":`GraphQL`,".proto":`Protocol Buffers`,".toml":`TOML`,".env":`Environment`},s=new Set([`node_modules`,`.git`,`dist`,`build`,`.next`,`.nuxt`,`coverage`,`.turbo`,`.cache`,`__pycache__`,`.venv`,`.terraform`,`cdk.out`]),c=new Set(`.ts,.tsx,.js,.jsx,.mjs,.cjs,.java,.kt,.kts,.scala,.py,.go,.rs,.rb,.php,.swift,.cs,.c,.cpp,.h,.hpp,.sh,.bash,.ps1,.sql,.graphql,.gql,.proto,.json,.yaml,.yml,.toml,.env,.ini,.cfg,.xml,.pom,.gradle,.tf,.hcl,.lock,.mjs`.split(`,`)),l=new Set([`__tests__`,`test`,`tests`,`spec`,`__mocks__`,`__fixtures__`,`fixtures`,`mocks`]);var u=class{name=`structure`;async analyze(e,t={}){let{format:n=`markdown`,maxDepth:r=6,sourceOnly:i=!1,maxTokens:a}=t,o=Date.now(),s=await this.buildTree(e,0,r,i),c=this.computeStats(s);return{output:n===`json`?JSON.stringify({tree:s,stats:c},null,2):this.formatMarkdownWithBudget(s,c,e,a),data:{tree:s,stats:c},meta:{analyzedAt:new Date().toISOString(),scope:e,fileCount:c.totalFiles,durationMs:Date.now()-o}}}async buildTree(l,u,d,f){if(!(await t(l)).isDirectory())return{name:n(l),type:`file`,children:[]};let p=await e(l,{withFileTypes:!0}),m=[];for(let e of p.sort((e,t)=>e.name.localeCompare(t.name))){if(s.has(e.name)||e.name.startsWith(`.`)&&e.name!==`.env.example`)continue;let n=i(l,e.name);if(e.isDirectory()&&u<d){let e=await this.buildTree(n,u+1,d,f);if(f&&(!e.children||e.children.length===0))continue;m.push(e)}else if(e.isFile()){let i=r(e.name).toLowerCase();if(f&&i&&!c.has(i)||f&&!i)continue;let a=await t(n);m.push({name:e.name,type:`file`,language:o[i]??(i||`unknown`),size:a.size})}}let h=l.split(/[/\\]/).pop()??l;return{name:h,type:`directory`,purpose:a[h.toLowerCase()],children:m}}computeStats(e){let t={},n=0,r=0,i=e=>{if(e.type===`file`){n++,r+=e.size??0;let i=e.language??`unknown`;t[i]=(t[i]??0)+1}e.children?.forEach(i)};return i(e),{totalFiles:n,totalSize:r,languages:t}}formatMarkdownWithBudget(e,t,n,r){let i=this.formatMarkdown(e,t,n,1);if(!r||this.estimateTokens(i)<=r)return i;let a=this.formatMarkdown(e,t,n,2);return this.estimateTokens(a)<=r?`${a}\n\n> _Tree pruned to Level 2: leaf directories collapsed to fit token budget._`:this.formatMarkdown(e,t,n,3)+`
|
|
2
|
+
|
|
3
|
+
> _Tree pruned to Level 3: top-level directories only to fit token budget._`}formatMarkdown(e,t,n,r=1){let i=[];return i.push(`## Project Structure: ${n}\n`),i.push(`**${t.totalFiles} files** | Languages: ${Object.entries(t.languages).map(([e,t])=>`${e} (${t})`).join(`, `)}\n`),i.push("```"),r===3?this.renderTreeLevel3(e,i):this.renderTree(e,``,i,r),i.push("```"),i.join(`
|
|
4
|
+
`)}renderTree(e,t,n,r=1){let i=e.purpose?` ── ${e.purpose}`:``;if(e.type===`directory`){let a=e.name.toLowerCase();if(l.has(a)&&e.children){let r=this.countFiles(e);n.push(`${t}${e.name}/${i} (${r} files)`);return}if(r>=2&&this.isLeafDir(e)){n.push(`${t}${e.name}/${i} (${this.leafDirSummary(e)})`);return}n.push(`${t}${e.name}/${i}`),e.children?.forEach((i,a)=>{let o=a===(e.children?.length??0)-1,s=o?`└── `:`├── `,c=t+(o?` `:`│ `);i.type===`directory`?this.renderTree(i,c,n,r):n.push(`${t}${s}${i.name}`)})}else n.push(`${t}${e.name}`)}renderTreeLevel3(e,t){for(let n of e.children??[]){let e=n.purpose?` ── ${n.purpose}`:``;if(n.type===`directory`){let r=this.countFiles(n);t.push(`${n.name}/${e} (${r} files)`)}else t.push(n.name)}}estimateTokens(e){return Math.ceil(e.length/4)}isLeafDir(e){return e.type===`directory`&&(e.children??[]).every(e=>e.type===`file`)}leafDirSummary(e){let t={};for(let n of e.children??[]){let e=n.language??`unknown`;t[e]=(t[e]??0)+1}return`${Object.values(t).reduce((e,t)=>e+t,0)} files — ${Object.entries(t).map(([e,t])=>`${e} (${t})`).join(`, `)}`}countFiles(e){return e.type===`file`?1:(e.children??[]).reduce((e,t)=>e+this.countFiles(t),0)}};export{u as StructureAnalyzer};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AnalysisResult, IAnalyzer, SymbolAnalyzerOptions } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region packages/analyzers/src/symbol-analyzer.d.ts
|
|
4
|
+
declare class SymbolAnalyzer implements IAnalyzer<SymbolAnalyzerOptions> {
|
|
5
|
+
readonly name = "symbols";
|
|
6
|
+
analyze(rootPath: string, options?: SymbolAnalyzerOptions): Promise<AnalysisResult>;
|
|
7
|
+
private collectFiles;
|
|
8
|
+
private extractSymbolsRegex;
|
|
9
|
+
private groupByKind;
|
|
10
|
+
private formatMarkdown;
|
|
11
|
+
private formatCallGraph;
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { SymbolAnalyzer };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{readFile as e,readdir as t,stat as n}from"node:fs/promises";import{dirname as r,extname as i,join as a,relative as o}from"node:path";import{SUPPORTED_EXTENSIONS as s,WasmRuntime as c,extractCalls as l,extractSymbols as u}from"../../chunker/dist/index.js";const d=new Set([`.ts`,`.tsx`,`.js`,`.jsx`,`.java`,`.py`,`.go`,`.cs`,`.rb`,`.kt`,`.scala`,`.rs`,`.php`,`.swift`]),f=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`,`__pycache__`,`.venv`,`target`,`bin`,`obj`,`.gradle`,`venv`,`env`]),p={exported:[{pattern:/^export\s+(?:async\s+)?function\s+(\w+)/gm,kind:`function`},{pattern:/^export\s+(?:default\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^export\s+interface\s+(\w+)/gm,kind:`interface`},{pattern:/^export\s+type\s+(\w+)/gm,kind:`type`},{pattern:/^export\s+(?:const|let)\s+(\w+)/gm,kind:`const`},{pattern:/^export\s+enum\s+(\w+)/gm,kind:`enum`}],local:[{pattern:/^(?:async\s+)?function\s+(\w+)/gm,kind:`function`},{pattern:/^class\s+(\w+)/gm,kind:`class`},{pattern:/^interface\s+(\w+)/gm,kind:`interface`},{pattern:/^type\s+(\w+)/gm,kind:`type`},{pattern:/^(?:const|let)\s+(\w+)\s*=/gm,kind:`const`},{pattern:/^enum\s+(\w+)/gm,kind:`enum`}]},m={exported:[{pattern:/^[ \t]*public\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*public\s+(?:static\s+)?interface\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*public\s+(?:static\s+)?enum\s+(\w+)/gm,kind:`enum`},{pattern:/^[ \t]*public\s+(?:static\s+)?(?:synchronized\s+)?(?:final\s+)?(?:abstract\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])*)\s+(\w+)\s*\(/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:synchronized\s+)?(?:final\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])*)\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?(?:final\s+)?(?:\w+(?:<[^>]*>)?)\s+(\w+)\s*[;=]/gm,kind:`variable`}],skipIndentFilter:!0},h={exported:[{pattern:/^def\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^async\s+def\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^class\s+(\w+)/gm,kind:`class`}],local:[{pattern:/^[ \t]+def\s+(\w+)\s*\(/gm,kind:`function`},{pattern:/^[ \t]+async\s+def\s+(\w+)\s*\(/gm,kind:`function`}],skipIndentFilter:!0},g={exported:[{pattern:/^func\s+([A-Z]\w*)\s*\(/gm,kind:`function`},{pattern:/^func\s+\([^)]+\)\s+([A-Z]\w*)\s*\(/gm,kind:`function`},{pattern:/^type\s+([A-Z]\w*)\s+struct\b/gm,kind:`class`},{pattern:/^type\s+([A-Z]\w*)\s+interface\b/gm,kind:`interface`},{pattern:/^type\s+([A-Z]\w*)\s+/gm,kind:`type`}],local:[{pattern:/^func\s+([a-z]\w*)\s*\(/gm,kind:`function`},{pattern:/^func\s+\([^)]+\)\s+([a-z]\w*)\s*\(/gm,kind:`function`},{pattern:/^type\s+([a-z]\w*)\s+struct\b/gm,kind:`class`},{pattern:/^type\s+([a-z]\w*)\s+/gm,kind:`type`}],skipIndentFilter:!0},_={exported:[{pattern:/^[ \t]*public\s+(?:static\s+)?(?:partial\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*public\s+(?:static\s+)?interface\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*public\s+(?:static\s+)?enum\s+(\w+)/gm,kind:`enum`},{pattern:/^[ \t]*public\s+(?:static\s+)?(?:virtual\s+)?(?:override\s+)?(?:async\s+)?(?:\w+(?:<[^>]*>)?(?:\[\])?)\s+(\w+)\s*\(/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|protected|internal)\s+(?:static\s+)?(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:private|protected|internal)\s+(?:static\s+)?(?:async\s+)?(?:\w+(?:<[^>]*>)?)\s+(\w+)\s*\(/gm,kind:`function`}],skipIndentFilter:!0},v={exported:[{pattern:/^(?:open\s+|data\s+|sealed\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^(?:fun|suspend\s+fun)\s+(\w+)\s*[(<]/gm,kind:`function`},{pattern:/^interface\s+(\w+)/gm,kind:`interface`},{pattern:/^object\s+(\w+)/gm,kind:`class`},{pattern:/^enum\s+class\s+(\w+)/gm,kind:`enum`}],local:[{pattern:/^[ \t]+(?:private|internal)\s+(?:fun|suspend\s+fun)\s+(\w+)/gm,kind:`function`},{pattern:/^[ \t]+(?:private|internal)\s+(?:val|var)\s+(\w+)/gm,kind:`variable`}],skipIndentFilter:!0},y={exported:[{pattern:/^class\s+(\w+)/gm,kind:`class`},{pattern:/^module\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]+def\s+self\.(\w+)/gm,kind:`function`}],local:[{pattern:/^[ \t]+def\s+(\w+)/gm,kind:`function`}],skipIndentFilter:!0},b={exported:[{pattern:/^pub\s+(?:async\s+)?fn\s+(\w+)/gm,kind:`function`},{pattern:/^pub\s+struct\s+(\w+)/gm,kind:`class`},{pattern:/^pub\s+trait\s+(\w+)/gm,kind:`interface`},{pattern:/^pub\s+enum\s+(\w+)/gm,kind:`enum`},{pattern:/^pub\s+type\s+(\w+)/gm,kind:`type`}],local:[{pattern:/^(?:async\s+)?fn\s+(\w+)/gm,kind:`function`},{pattern:/^struct\s+(\w+)/gm,kind:`class`},{pattern:/^trait\s+(\w+)/gm,kind:`interface`},{pattern:/^enum\s+(\w+)/gm,kind:`enum`}],skipIndentFilter:!0},x={exported:[{pattern:/^[ \t]*(?:abstract\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*interface\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*public\s+(?:static\s+)?function\s+(\w+)/gm,kind:`function`},{pattern:/^function\s+(\w+)\s*\(/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|protected)\s+(?:static\s+)?function\s+(\w+)/gm,kind:`function`}],skipIndentFilter:!0},S={exported:[{pattern:/^[ \t]*(?:open|public)\s+class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:open|public)\s+struct\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*(?:open|public)\s+protocol\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*(?:open|public)\s+enum\s+(\w+)/gm,kind:`enum`},{pattern:/^[ \t]*(?:open|public)\s+func\s+(\w+)/gm,kind:`function`}],local:[{pattern:/^[ \t]*(?:private|fileprivate|internal)\s+func\s+(\w+)/gm,kind:`function`},{pattern:/^[ \t]*(?:private|fileprivate|internal)\s+class\s+(\w+)/gm,kind:`class`}],skipIndentFilter:!0},C={exported:[{pattern:/^[ \t]*(?:case\s+)?class\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*object\s+(\w+)/gm,kind:`class`},{pattern:/^[ \t]*trait\s+(\w+)/gm,kind:`interface`},{pattern:/^[ \t]*def\s+(\w+)/gm,kind:`function`}],local:[],skipIndentFilter:!0};function w(e){switch(e){case`.ts`:case`.tsx`:case`.js`:case`.jsx`:return p;case`.java`:return m;case`.py`:return h;case`.go`:return g;case`.cs`:return _;case`.kt`:return v;case`.rb`:return y;case`.rs`:return b;case`.php`:return x;case`.swift`:return S;case`.scala`:return C;default:return p}}function T(e,t){let n=``,r=0,i=!1;for(let a=t;a<Math.min(t+5,e.length);a++){let t=e[a].trim();n+=(n?` `:``)+t;for(let e of t)e===`(`&&(r++,i=!0),e===`)`&&r--;if(i&&r<=0)return n.replace(/\s*\{.*$/,``).replace(/\s*:\s*$/,``).trim()}return n.trim()||void 0}function E(e,t){let n=T(e,t);if(!n)return;let r=n.match(/\)\s*:\s*([^{=]+)/);if(r)return r[1].trim().slice(0,200)||void 0;let i=n.match(/=>\s*([^{]+)/);if(i)return i[1].trim().slice(0,200)||void 0}function D(e,t){for(let n=t-1;n>=Math.max(0,t-10);n--){let t=e[n].trim();if(t!==``){if(t.endsWith(`*/`)){for(let t=n;t>=Math.max(0,n-20);t--)if(e[t].trim().startsWith(`/**`)||e[t].trim().startsWith(`/*`)){for(let r=t;r<=n;r++){let t=e[r].replace(/^\s*\/\*\*?\s*/,``).replace(/\s*\*\/\s*$/,``).replace(/^\s*\*\s?/,``).trim();if(t.length>0&&!t.startsWith(`@`))return t.slice(0,200)}return}}if(t.startsWith(`//`))return t.replace(/^\/\/\s*/,``).slice(0,200)||void 0;break}}}function O(e,t){let n=``,r=0,i=!1;for(let a=t;a<Math.min(t+30,e.length);a++){let t=e[a];n+=` ${t.trim()}`;for(let e of t)e===`{`&&(r++,i=!0),e===`}`&&r--;if(i&&r<=0){let e=n.match(/\{([\s\S]*)\}/);if(e){let t=`{ ${e[1].replace(/\n\s*/g,` `).replace(/\s+/g,` `).trim()} }`;return t.length>500?`${t.slice(0,500)}…`:t}return}}}var k=class{name=`symbols`;async analyze(t,n={}){let{format:a=`markdown`,filter:d}=n,f=Date.now(),p=await this.collectFiles(t),m=p.length===1&&p[0]===t?r(t):t,h=[],g=[],_=!1;try{await c.ensure(),_=!0}catch{}for(let t of p){let n=await e(t,`utf-8`),r=o(m,t).replace(/\\/g,`/`),a=i(t);if(_&&s.has(a)){let e=await u(n,a,r);if(e.length>0){h.push(...e);let t=await l(n,a,r);g.push(...t)}else{let e=this.extractSymbolsRegex(n,r);h.push(...e)}}else{let e=this.extractSymbolsRegex(n,r);h.push(...e)}}if(d){let e=d.toLowerCase();h=h.filter(t=>t.name.toLowerCase().includes(e))}return{output:a===`json`?JSON.stringify(h,null,2):this.formatMarkdown(h,m,g),data:{symbols:h,byKind:this.groupByKind(h),exportedCount:h.filter(e=>e.exported).length,totalCount:h.length,callEdges:g},meta:{analyzedAt:new Date().toISOString(),scope:t,fileCount:p.length,durationMs:Date.now()-f}}}async collectFiles(e){let r=[],o;try{o=await n(e)}catch{throw Error(`Path does not exist: ${e}`)}if(o.isFile()){if(d.has(i(e)))return[e];throw Error(`Not a recognized source file: ${e}`)}if(!o.isDirectory())throw Error(`Not a file or directory: ${e}`);let s=async e=>{let n=await t(e,{withFileTypes:!0});for(let t of n){if(f.has(t.name)||t.name.startsWith(`.`))continue;let n=a(e,t.name);t.isDirectory()?await s(n):d.has(i(t.name))&&r.push(n)}};return await s(e),r}extractSymbolsRegex(e,t){let n=[],r=e.split(`
|
|
2
|
+
`),a=new Set,o=w(i(t));for(let{pattern:i,kind:s}of o.exported){let o=new RegExp(i.source,i.flags),c;for(;(c=o.exec(e))!==null;){let i=c[1];a.add(i);let o=e.slice(0,c.index).split(`
|
|
3
|
+
`).length,l=s===`function`||s===`method`?T(r,o-1):void 0,u=s===`function`||s===`method`?E(r,o-1):void 0,d=D(r,o-1),f=s===`interface`||s===`type`?O(r,o-1):void 0;n.push({name:i,kind:s,exported:!0,filePath:t,line:o,signature:l,returnType:u,jsdoc:d,typeBody:f})}}for(let{pattern:i,kind:s}of o.local){let c=new RegExp(i.source,i.flags),l;for(;(l=c.exec(e))!==null;){let i=l[1];if(a.has(i))continue;if(!o.skipIndentFilter){let t=r[e.slice(0,l.index).split(`
|
|
4
|
+
`).length-1]??``;if(t.startsWith(` `)||t.startsWith(` `))continue}let c=e.slice(0,l.index).split(`
|
|
5
|
+
`).length,u=s===`function`||s===`method`?T(r,c-1):void 0,d=s===`function`||s===`method`?E(r,c-1):void 0,f=D(r,c-1),p=s===`interface`||s===`type`?O(r,c-1):void 0;n.push({name:i,kind:s,exported:!1,filePath:t,line:c,signature:u,returnType:d,jsdoc:f,typeBody:p})}}return n}groupByKind(e){let t={};for(let n of e)t[n.kind]=(t[n.kind]??0)+1;return t}formatMarkdown(e,t,n=[]){let r=[],i=e.filter(e=>e.exported).length;r.push(`## Symbols: ${t}\n`),r.push(`**${e.length} symbols** (${i} exported)\n`);let a={};for(let t of e)a[t.kind]=(a[t.kind]??0)+1;let o=Object.entries(a).sort((e,t)=>t[1]-e[1]).map(([e,t])=>`${t} ${e===`class`?`classes`:`${e}s`}`).join(`, `);r.push(`**Breakdown**: ${o}\n`);let s={};for(let t of e)s[t.filePath]||(s[t.filePath]=[]),s[t.filePath].push(t);r.push(`**${Object.keys(s).length} files** with symbols\n`);let c=0,l=Object.entries(s).sort((e,t)=>{let n=e[1].filter(e=>e.exported).length;return t[1].filter(e=>e.exported).length-n});for(let[e,t]of l){let n=t.filter(e=>e.exported);if(n.length===0)continue;let i=[`### ${e}\n`];for(let e of n){let t=e.signature?` — \`${e.signature}\``:``,n=e.returnType?`: ${e.returnType}`:``,r=e.decorators?.length?` ${e.decorators.join(` `)}`:``;i.push(`- 📤 \`${e.kind}\` **${e.name}** (line ${e.line})${t}${n}`),r&&i.push(` ${r}`),e.jsdoc&&i.push(` > ${e.jsdoc}`),e.typeBody&&i.push(` \`${e.typeBody}\``)}let a=t.length-n.length;a>0&&i.push(`- _${a} internal ${a===1?`symbol`:`symbols`}_`),i.push(``);let o=i.join(`
|
|
6
|
+
`);if(c+=o.length,c>81920){r.push(`\n_Output truncated at 80KB. ${Object.keys(s).length-r.filter(e=>e.startsWith(`### `)).length} files omitted._`);break}r.push(o)}return n.length>0&&r.push(this.formatCallGraph(n)),r.join(`
|
|
7
|
+
`)}formatCallGraph(e){let t=new Map;for(let n of e){if(n.callerName===`<module>`)continue;let e=`${n.callerFile}:${n.callerName}->${n.calleeName}`,r=t.get(e);r?r.count++:t.set(e,{callerFile:n.callerFile,callerName:n.callerName,calleeName:n.calleeName,count:1})}if(t.size===0)return``;let n=[];n.push(`### Call Graph Summary
|
|
8
|
+
`),n.push(`**${e.length} call edges** across analyzed files\n`);let r=new Map;for(let e of t.values()){let t=`${e.callerFile}#${e.callerName}`;r.has(t)||r.set(t,[]),r.get(t)?.push(e.calleeName)}let i=[...r.entries()].sort((e,t)=>t[1].length-e[1].length).slice(0,30);for(let[e,t]of i){let[r,i]=e.split(`#`);n.push(`- **${i}** (${r}) → ${t.join(`, `)}`)}return n.push(``),n.join(`
|
|
9
|
+
`)}};export{k as SymbolAnalyzer};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region packages/analyzers/src/ts-call-graph.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* TypeScript Compiler API-based call graph extractor.
|
|
4
|
+
*
|
|
5
|
+
* Uses ts.createProgram to build a real type-checked program, then walks
|
|
6
|
+
* the AST to find function call sites and resolve them to their declaration files.
|
|
7
|
+
* Produces module-level call edges: which modules call functions in which other modules.
|
|
8
|
+
*/
|
|
9
|
+
interface ModuleCallEdge {
|
|
10
|
+
/** Caller module (relative path) */
|
|
11
|
+
from: string;
|
|
12
|
+
/** Callee module (relative path) */
|
|
13
|
+
to: string;
|
|
14
|
+
/** Function/symbol names called across this edge */
|
|
15
|
+
symbols: string[];
|
|
16
|
+
}
|
|
17
|
+
interface CallGraphResult {
|
|
18
|
+
edges: ModuleCallEdge[];
|
|
19
|
+
fileCount: number;
|
|
20
|
+
edgeCount: number;
|
|
21
|
+
durationMs: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Extract module-level call graph from a TypeScript/JavaScript project.
|
|
25
|
+
* Returns null if TypeScript compiler is unavailable or no TS files found.
|
|
26
|
+
*/
|
|
27
|
+
declare function extractTsCallGraph(rootPath: string): Promise<CallGraphResult | null>;
|
|
28
|
+
//#endregion
|
|
29
|
+
export { CallGraphResult, ModuleCallEdge, extractTsCallGraph };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{extname as e,join as t,relative as n}from"node:path";import{existsSync as r,readFileSync as i,readdirSync as a}from"node:fs";const o=new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`]);async function s(e){let t=Date.now();if(!c(e))return null;let r;try{r=await import(`typescript`)}catch{return null}let i=u(e);if(i.length===0)return null;let a=i.slice(0,800),o=l(r,e),s=r.createProgram(a,{...o,noEmit:!0,skipLibCheck:!0,allowJs:!0,target:r.ScriptTarget.ESNext,module:r.ModuleKind.ESNext,moduleResolution:r.ModuleResolutionKind.Bundler}),f=s.getTypeChecker(),p=new Map;for(let t of s.getSourceFiles()){let i=t.fileName;if(t.isDeclarationFile||i.includes(`node_modules`))continue;let a=n(e,i).replace(/\\/g,`/`);a.startsWith(`..`)||d(r,t,t,f,e,a,p)}let m=[];for(let[e,t]of p){let[n,r]=e.split(`|`);m.push({from:n,to:r,symbols:[...t].sort().slice(0,10)})}return m.sort((e,t)=>t.symbols.length-e.symbols.length),{edges:m,fileCount:a.length,edgeCount:m.length,durationMs:Date.now()-t}}function c(e){if(r(t(e,`tsconfig.json`))||r(t(e,`tsconfig.build.json`)))return!0;try{for(let n of a(e,{withFileTypes:!0}))if(n.isDirectory()&&!o.has(n.name)&&!n.name.startsWith(`.`)&&r(t(e,n.name,`tsconfig.json`)))return!0}catch{}return!1}function l(e,n){let a=t(n,`tsconfig.json`);if(!r(a))return{};try{let t=e.readConfigFile(a,e=>i(e,`utf-8`));return t.error?{}:e.parseJsonConfigFileContent(t.config,e.sys,n).options}catch{return{}}}function u(r){let i=[],s=new Set([`.ts`,`.tsx`]),c=(l,u)=>{if(!(u>10))try{for(let d of a(l,{withFileTypes:!0})){if(o.has(d.name)||d.name.startsWith(`.`))continue;let a=t(l,d.name);if(d.isDirectory())c(a,u+1);else if(s.has(e(d.name))){if(d.name.endsWith(`.d.ts`)||/\.(test|spec)\.[jt]sx?$/.test(d.name)||n(r,l).replace(/\\/g,`/`).split(`/`).some(e=>e===`test`||e===`tests`||e===`__tests__`||e===`spec`))continue;i.push(a)}}}catch{}};return c(r,0),i}function d(e,t,n,r,i,a,o){if(e.isCallExpression(t)||e.isNewExpression(t)){let n=t.expression;p(e,n,r,i,a,o)}e.forEachChild(t,t=>{d(e,t,n,r,i,a,o)})}function f(e){let t=e.match(/^(.+?)\/dist\/(.+)$/);if(!t)return e;let[,n,r]=t;return`${n}/src/${r.replace(/\.d\.(m?ts|cts)$/,`.ts`)}`}function p(e,t,r,i,a,o){try{let s,c;if(e.isIdentifier(t)?(s=r.getSymbolAtLocation(t),c=t.text):e.isPropertyAccessExpression(t)&&(s=r.getSymbolAtLocation(t.name),c=t.name.text),!s||!c)return;s.flags&e.SymbolFlags.Alias&&(s=r.getAliasedSymbol(s));let l=s.getDeclarations();if(!l||l.length===0)return;let u=l[0].getSourceFile().fileName;if(u.includes(`node_modules`))return;let d=n(i,u).replace(/\\/g,`/`);if(d=f(d),d===a||d.startsWith(`..`))return;let p=`${a}|${d}`,m=o.get(p);m?m.add(c):o.set(p,new Set([c]))}catch{}}export{s as extractTsCallGraph};
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
//#region packages/analyzers/src/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Analyzer interfaces and result types.
|
|
4
|
+
*/
|
|
5
|
+
interface AnalysisResult {
|
|
6
|
+
/** Formatted output (Markdown, JSON, or Mermaid) */
|
|
7
|
+
output: string;
|
|
8
|
+
/** Structured data for programmatic access */
|
|
9
|
+
data: Record<string, unknown>;
|
|
10
|
+
/** Analysis metadata */
|
|
11
|
+
meta: {
|
|
12
|
+
analyzedAt: string;
|
|
13
|
+
scope: string;
|
|
14
|
+
fileCount: number;
|
|
15
|
+
durationMs: number;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
interface AnalyzerOptions {
|
|
19
|
+
format?: 'json' | 'markdown' | 'mermaid';
|
|
20
|
+
[key: string]: unknown;
|
|
21
|
+
}
|
|
22
|
+
interface IAnalyzer<TOpts extends AnalyzerOptions = AnalyzerOptions> {
|
|
23
|
+
readonly name: string;
|
|
24
|
+
analyze(rootPath: string, options?: TOpts): Promise<AnalysisResult>;
|
|
25
|
+
}
|
|
26
|
+
interface StructureAnalyzerOptions extends AnalyzerOptions {
|
|
27
|
+
format?: 'json' | 'markdown';
|
|
28
|
+
maxDepth?: number;
|
|
29
|
+
/** When true, only include source code and config files (no docs, images, fonts, etc.) */
|
|
30
|
+
sourceOnly?: boolean;
|
|
31
|
+
/** Token budget for dynamic tree pruning (Level 1=full, 2=collapsed leaves, 3=top-level). */
|
|
32
|
+
maxTokens?: number;
|
|
33
|
+
}
|
|
34
|
+
interface DependencyAnalyzerOptions extends AnalyzerOptions {
|
|
35
|
+
format?: 'json' | 'markdown' | 'mermaid';
|
|
36
|
+
maxNodes?: number;
|
|
37
|
+
}
|
|
38
|
+
interface SymbolAnalyzerOptions extends AnalyzerOptions {
|
|
39
|
+
filter?: string;
|
|
40
|
+
format?: 'json' | 'markdown';
|
|
41
|
+
}
|
|
42
|
+
interface DiagramOptions extends AnalyzerOptions {
|
|
43
|
+
diagramType?: 'architecture' | 'dependencies';
|
|
44
|
+
scope?: string;
|
|
45
|
+
}
|
|
46
|
+
interface TreeNode {
|
|
47
|
+
name: string;
|
|
48
|
+
type: 'file' | 'directory';
|
|
49
|
+
purpose?: string;
|
|
50
|
+
language?: string;
|
|
51
|
+
size?: number;
|
|
52
|
+
children?: TreeNode[];
|
|
53
|
+
}
|
|
54
|
+
interface ProjectStats {
|
|
55
|
+
totalFiles: number;
|
|
56
|
+
totalSize: number;
|
|
57
|
+
languages: Record<string, number>;
|
|
58
|
+
}
|
|
59
|
+
interface ImportInfo {
|
|
60
|
+
source: string;
|
|
61
|
+
specifiers: string[];
|
|
62
|
+
filePath: string;
|
|
63
|
+
isExternal: boolean;
|
|
64
|
+
/** Confidence level based on import resolution method */
|
|
65
|
+
confidence: 'high' | 'medium' | 'low';
|
|
66
|
+
}
|
|
67
|
+
interface SymbolInfo {
|
|
68
|
+
name: string;
|
|
69
|
+
kind: 'function' | 'class' | 'interface' | 'type' | 'const' | 'enum' | 'variable' | 'method';
|
|
70
|
+
exported: boolean;
|
|
71
|
+
filePath: string;
|
|
72
|
+
line: number;
|
|
73
|
+
/** Full signature for functions/methods (parameter list + return type) */
|
|
74
|
+
signature?: string;
|
|
75
|
+
/** Return type annotation (e.g. "Promise<void>", "string") */
|
|
76
|
+
returnType?: string;
|
|
77
|
+
/** First line of JSDoc/docstring */
|
|
78
|
+
jsdoc?: string;
|
|
79
|
+
/** Decorator names (e.g. ["@Controller('/api')", "@Injectable"]) */
|
|
80
|
+
decorators?: string[];
|
|
81
|
+
/** Condensed body for interfaces/types (e.g. "{ id: string; name: string }") */
|
|
82
|
+
typeBody?: string;
|
|
83
|
+
}
|
|
84
|
+
interface PatternMatch {
|
|
85
|
+
pattern: string;
|
|
86
|
+
description: string;
|
|
87
|
+
locations: string[];
|
|
88
|
+
confidence: 'high' | 'medium' | 'low';
|
|
89
|
+
}
|
|
90
|
+
interface EntryPoint {
|
|
91
|
+
name: string;
|
|
92
|
+
type: 'lambda-handler' | 'main' | 'bin' | 'server' | 'cli' | 'test' | 'cdk-construct';
|
|
93
|
+
filePath: string;
|
|
94
|
+
trigger?: string;
|
|
95
|
+
}
|
|
96
|
+
interface ExtractionBaselines {
|
|
97
|
+
structure?: AnalysisResult;
|
|
98
|
+
dependencies?: AnalysisResult;
|
|
99
|
+
symbols?: AnalysisResult;
|
|
100
|
+
patterns?: AnalysisResult;
|
|
101
|
+
entryPoints?: AnalysisResult;
|
|
102
|
+
diagrams?: AnalysisResult[];
|
|
103
|
+
}
|
|
104
|
+
interface ExistingKnowledge {
|
|
105
|
+
categories: string[];
|
|
106
|
+
lastProduced: Record<string, string>;
|
|
107
|
+
documentCount: number;
|
|
108
|
+
}
|
|
109
|
+
//#endregion
|
|
110
|
+
export { AnalysisResult, AnalyzerOptions, DependencyAnalyzerOptions, DiagramOptions, EntryPoint, ExistingKnowledge, ExtractionBaselines, IAnalyzer, ImportInfo, PatternMatch, ProjectStats, StructureAnalyzerOptions, SymbolAnalyzerOptions, SymbolInfo, TreeNode };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region packages/chunker/src/call-graph-extractor.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Call-graph extractor using tree-sitter AST.
|
|
4
|
+
*
|
|
5
|
+
* Extracts function-level call sites from parsed code, producing
|
|
6
|
+
* caller→callee edges for blast-radius and dependency analysis.
|
|
7
|
+
*/
|
|
8
|
+
interface CallEdge {
|
|
9
|
+
/** File containing the call */
|
|
10
|
+
callerFile: string;
|
|
11
|
+
/** Function/method making the call (or '<module>' for top-level) */
|
|
12
|
+
callerName: string;
|
|
13
|
+
/** Name of the function/method being called */
|
|
14
|
+
calleeName: string;
|
|
15
|
+
/** 1-based line number of the call site */
|
|
16
|
+
line: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Extract call edges from a source file using tree-sitter AST.
|
|
20
|
+
* Prefers WASM runtime; falls back to native tree-sitter.
|
|
21
|
+
* Returns null if neither runtime is available or doesn't support the language.
|
|
22
|
+
*/
|
|
23
|
+
declare function extractCallEdges(content: string, filePath: string): CallEdge[] | null;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { CallEdge, extractCallEdges };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{WasmRuntime as e}from"./wasm/runtime.js";import{extname as t}from"node:path";const n=new Set([`function_declaration`,`method_definition`,`arrow_function`,`function_definition`,`function_declaration`,`method_declaration`,`function_item`,`method_declaration`,`constructor_declaration`]),r=new Set([`call_expression`,`new_expression`,`call`]);function i(n,r){let i=t(r).toLowerCase(),o=e.get();if(o?.isLanguageLoaded(i)){let e=o.getParser(),t=o.getLanguage(i);if(e&&t){e.setLanguage(t);let i=e.parse(n);if(i){let e=[];return a(i.rootNode,r,`<module>`,e),e}}}return null}function a(e,t,i,c){if(!e)return;let l=i;if(n.has(e.type)&&(l=o(e)??i),r.has(e.type)){let n=s(e);n&&c.push({callerFile:t,callerName:l,calleeName:n,line:(e.startPosition?.row??0)+1})}for(let n=0;n<(e.childCount??0);n++){let r=e.child(n);r&&a(r,t,l,c)}}function o(e){for(let t=0;t<(e.childCount??0);t++){let n=e.child(t);if(n&&(n.type===`identifier`||n.type===`property_identifier`||n.type===`name`))return n.text??null}return null}function s(e){let t=e.childForFieldName?.(`function`)??e.child(0);return t?t.type===`identifier`||t.type===`name`?t.text??null:t.type===`member_expression`||t.type===`attribute`?(t.childForFieldName?.(`property`)??t.childForFieldName?.(`attribute`))?.text??null:e.type===`new_expression`?e.child(1)?.text??null:null:null}export{i as extractCallEdges};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { IChunker } from "./chunker.interface.js";
|
|
2
|
+
|
|
3
|
+
//#region packages/chunker/src/chunker-factory.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Create the appropriate chunker for a file extension.
|
|
6
|
+
*
|
|
7
|
+
* Uses WASM tree-sitter AST-based chunking when available.
|
|
8
|
+
* Falls back to regex-based CodeChunker.
|
|
9
|
+
*
|
|
10
|
+
* **Breaking change**: Now returns `Promise<IChunker>` because WASM init is async.
|
|
11
|
+
*/
|
|
12
|
+
declare function createChunker(fileExtension: string): Promise<IChunker>;
|
|
13
|
+
/**
|
|
14
|
+
* Create a chunker synchronously (legacy API).
|
|
15
|
+
* Uses whatever runtime is already initialized.
|
|
16
|
+
*/
|
|
17
|
+
declare function createChunkerSync(fileExtension: string): IChunker;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { createChunker, createChunkerSync };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{SUPPORTED_EXTENSIONS as e}from"./wasm/languages.js";import{WasmRuntime as t}from"./wasm/runtime.js";import{CodeChunker as n}from"./code-chunker.js";import{GenericChunker as r}from"./generic-chunker.js";import{MarkdownChunker as i}from"./markdown-chunker.js";import{WasmChunker as a}from"./wasm-chunker.js";async function o(o){let s=o.toLowerCase();switch(s){case`.md`:case`.mdx`:return new i;case`.ts`:case`.tsx`:case`.mts`:case`.cts`:case`.js`:case`.jsx`:case`.mjs`:case`.cjs`:case`.py`:case`.go`:case`.rs`:case`.java`:if(e.has(s)){let e=await t.initialize();if(e)return await e.loadLanguage(s),new a}return new n;default:return new r}}function s(e){let o=e.toLowerCase();switch(o){case`.md`:case`.mdx`:return new i;case`.ts`:case`.tsx`:case`.mts`:case`.cts`:case`.js`:case`.jsx`:case`.mjs`:case`.cjs`:case`.py`:case`.go`:case`.rs`:case`.java`:return t.get()?.isLanguageLoaded(o)?new a:new n;default:return new r}}export{o as createChunker,s as createChunkerSync};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ChunkMetadata, RawChunk } from "../../core/dist/index.js";
|
|
2
|
+
|
|
3
|
+
//#region packages/chunker/src/chunker.interface.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Interface for content chunkers.
|
|
6
|
+
* Each chunker splits a specific content type into searchable chunks.
|
|
7
|
+
*/
|
|
8
|
+
interface IChunker {
|
|
9
|
+
/** Split content into chunks */
|
|
10
|
+
chunk(content: string, metadata: ChunkMetadata): RawChunk[];
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { IChunker };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IChunker } from "./chunker.interface.js";
|
|
2
|
+
import { ChunkMetadata, RawChunk } from "../../core/dist/index.js";
|
|
3
|
+
|
|
4
|
+
//#region packages/chunker/src/code-chunker.d.ts
|
|
5
|
+
declare class CodeChunker implements IChunker {
|
|
6
|
+
private readonly maxChunkSize;
|
|
7
|
+
constructor(options?: {
|
|
8
|
+
maxChunkSize?: number;
|
|
9
|
+
});
|
|
10
|
+
chunk(content: string, metadata: ChunkMetadata): RawChunk[];
|
|
11
|
+
private findDeclarationBoundaries;
|
|
12
|
+
private fallbackChunk;
|
|
13
|
+
private splitByLines;
|
|
14
|
+
private getLineNumber;
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { CodeChunker };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import{CHUNK_SIZES as e}from"../../core/dist/index.js";var t=class{maxChunkSize;constructor(t){this.maxChunkSize=t?.maxChunkSize??e.code.max}chunk(e,t){let n=this.findDeclarationBoundaries(e);if(n.length===0)return this.fallbackChunk(e,t);let r=[];for(let i=0;i<n.length;i++){let a=n[i].offset,o=i+1<n.length?n[i+1].offset:e.length,s=e.slice(a,o).trim();if(s=`// File: ${t.sourcePath}\n`+s,s.length>this.maxChunkSize){let n=this.splitByLines(s,this.maxChunkSize),i=this.getLineNumber(e,a);for(let e of n){let n=e.split(`
|
|
2
|
+
`).length;r.push({text:e,sourcePath:t.sourcePath,contentType:t.contentType,chunkIndex:r.length,totalChunks:0,startLine:i,endLine:i+n-1}),i+=n}}else{let n=this.getLineNumber(e,a);r.push({text:s,sourcePath:t.sourcePath,contentType:t.contentType,chunkIndex:r.length,totalChunks:0,startLine:n,endLine:n+s.split(`
|
|
3
|
+
`).length-1})}}if(n[0].offset>0){let i=e.slice(0,n[0].offset).trim();i.length>0&&r.unshift({text:`// File: ${t.sourcePath}\n${i}`,sourcePath:t.sourcePath,contentType:t.contentType,chunkIndex:0,totalChunks:0,startLine:1,endLine:this.getLineNumber(e,n[0].offset)-1})}return r.map((e,t)=>({...e,chunkIndex:t,totalChunks:r.length}))}findDeclarationBoundaries(e){let t=/^(?:export\s+)?(?:default\s+)?(?:async\s+)?(?:function|class|interface|type|const|enum|abstract\s+class)\s+(\w+)/gm,n=[],r;for(;(r=t.exec(e))!==null;){let t=e.lastIndexOf(`
|
|
4
|
+
`,r.index-1)+1,i=t,a=e.slice(0,t).split(`
|
|
5
|
+
`),o=a.length-1;for(;o>=0;){let e=a[o].trim();if(e===``||e.startsWith(`//`)||e.startsWith(`*`)||e.startsWith(`/*`)||e.startsWith(`*/`)||e.startsWith(`@`))o--;else break}o<a.length-1&&(i=a.slice(0,o+1).join(`
|
|
6
|
+
`).length+1),n.push({offset:i,name:r[1]})}return n}fallbackChunk(e,t){return[{text:`// File: ${t.sourcePath}\n`+e,sourcePath:t.sourcePath,contentType:t.contentType,chunkIndex:0,totalChunks:1,startLine:1,endLine:e.split(`
|
|
7
|
+
`).length}]}splitByLines(e,t){let n=e.split(`
|
|
8
|
+
`),r=[],i=[],a=0;for(let e of n)a+e.length+1>t&&i.length>0?(r.push(i.join(`
|
|
9
|
+
`)),i=[e],a=e.length):(i.push(e),a+=e.length+1);return i.length>0&&r.push(i.join(`
|
|
10
|
+
`)),r}getLineNumber(e,t){return e.slice(0,t).split(`
|
|
11
|
+
`).length}};export{t as CodeChunker};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region packages/chunker/src/extractors/call-extractor.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* AST-based call extractor.
|
|
4
|
+
*
|
|
5
|
+
* Replaces regex-based call graph analysis with tree-sitter AST queries.
|
|
6
|
+
* Returns `CallEdge[]` compatible with the existing call-graph-extractor.
|
|
7
|
+
*/
|
|
8
|
+
interface CallEdge {
|
|
9
|
+
callerFile: string;
|
|
10
|
+
callerName: string;
|
|
11
|
+
calleeName: string;
|
|
12
|
+
line: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Extract call edges from source code using AST queries.
|
|
16
|
+
*
|
|
17
|
+
* @param content - The source code to analyze.
|
|
18
|
+
* @param ext - The file extension (e.g., `.ts`, `.py`).
|
|
19
|
+
* @param filePath - The file path for the returned CallEdge records.
|
|
20
|
+
* @returns Array of extracted call edges, or empty array if language unsupported.
|
|
21
|
+
*/
|
|
22
|
+
declare function extractCalls(content: string, ext: string, filePath?: string): Promise<CallEdge[]>;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { CallEdge, extractCalls };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{WasmRuntime as e}from"../wasm/runtime.js";import{QueryExecutor as t}from"../wasm/query-executor.js";const n=new t,r=new Set([`function_declaration`,`method_definition`,`arrow_function`,`function_definition`,`method_declaration`,`constructor_declaration`,`function_declaration`,`method_declaration`,`function_item`]);async function i(t,r,i=``){let o=await e.ensure(),s=await o.parse(t,r);if(!s)return[];let c=o.getLanguage(r);return c?n.execute(s.rootNode,c,r,`calls`).map(e=>a(e,s.rootNode,i)).filter(e=>e!==null):[]}function a(e,t,n){let r=e.captures.get(`callee`);if(!r)return null;let i=e.captures.get(`node`);return{callerFile:n,callerName:o(i?.node??r.node),calleeName:r.text,line:(i?.startLine??r.startLine)+1}}function o(e){let t=e.parent;for(;t;){if(r.has(t.type)){let e=s(t);if(e)return e}t=t.parent}return`<module>`}function s(e){let t=e.childForFieldName(`name`);if(t)return t.text;for(let t of e.children)if(t.type===`identifier`||t.type===`property_identifier`||t.type===`field_identifier`)return t.text;return null}export{i as extractCalls};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { EntryPoint } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region packages/chunker/src/extractors/entry-point-detector.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Detect entry points from source code using AST queries.
|
|
6
|
+
*
|
|
7
|
+
* @param content - The source code to analyze.
|
|
8
|
+
* @param ext - The file extension (e.g., `.ts`, `.py`).
|
|
9
|
+
* @param filePath - The file path for the returned EntryPoint records.
|
|
10
|
+
* @returns Array of detected entry points, or empty array if language unsupported.
|
|
11
|
+
*/
|
|
12
|
+
declare function detectEntryPoints(content: string, ext: string, filePath?: string): Promise<EntryPoint[]>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { detectEntryPoints };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{WasmRuntime as e}from"../wasm/runtime.js";import{QueryExecutor as t}from"../wasm/query-executor.js";const n=new t,r={handler:`lambda-handler`,lambdaHandler:`lambda-handler`,main:`main`,__name__:`main`,app:`server`,server:`server`,router:`server`,urlpatterns:`server`,init:`main`},i={SpringBootApplication:`server`,RestController:`server`,Controller:`server`};async function a(t,r,i=``){let a=await e.ensure(),s=await a.parse(t,r);if(!s)return[];let c=a.getLanguage(r);if(!c)return[];let l=n.execute(s.rootNode,c,r,`entry-points`),u=[],d=new Set;for(let e of l){let t=o(e,r,i);if(t){let e=`${t.name}:${t.type}`;d.has(e)||(d.add(e),u.push(t))}}return u}function o(e,t,n){let a=e.captures.get(`name`);if(!a)return null;let o=a.text,s=e.captures.get(`_parent`);if(s){let e=s.text;if([`Construct`,`Stack`,`NestedStack`,`Stage`].includes(e))return{name:o,type:`cdk-construct`,filePath:n}}let c=e.captures.get(`_ann`);if(c){let e=i[c.text];if(e)return{name:o,type:e,filePath:n}}let l=r[o];return l?{name:o,type:l,filePath:n}:t===`.go`&&o.toLowerCase().startsWith(`handle`)?{name:o,type:`server`,filePath:n,trigger:`HTTP handler`}:{name:o,type:`main`,filePath:n}}export{a as detectEntryPoints};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ImportInfo } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region packages/chunker/src/extractors/import-extractor.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Extract imports from source code using AST queries.
|
|
6
|
+
*
|
|
7
|
+
* @param content - The source code to analyze.
|
|
8
|
+
* @param ext - The file extension (e.g., `.ts`, `.py`).
|
|
9
|
+
* @param filePath - The file path for the returned ImportInfo records.
|
|
10
|
+
* @returns Array of extracted imports, or empty array if language unsupported.
|
|
11
|
+
*/
|
|
12
|
+
declare function extractImports(content: string, ext: string, filePath?: string): Promise<ImportInfo[]>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { extractImports };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{WasmRuntime as e}from"../wasm/runtime.js";import{QueryExecutor as t}from"../wasm/query-executor.js";const n=new t;async function r(t,r,c=``){let l=await e.ensure(),u=await l.parse(t,r);if(!u)return[];let d=l.getLanguage(r);if(!d)return[];let f=n.execute(u.rootNode,d,r,`imports`),p=[];for(let e of f){let t=e.captures.get(`source`);if(!t){let t=e.captures.get(`node`);if(t){let e=s(t.text,r);e&&p.push({source:e.source,specifiers:e.specifiers,filePath:c,isExternal:a(e.source,r),confidence:`high`})}continue}let n=t.text,l=i(n,r),u=o(e.captures.get(`node`)?.text??``,r,l);p.push({source:l,specifiers:u,filePath:c,isExternal:a(l,r),confidence:`high`})}return p}function i(e,t){let n=e.replace(/^['"`]|['"`]$/g,``);return t===`.go`&&(n=n.replace(/^"|"$/g,``)),n}function a(e,t){return t===`.py`?!e.startsWith(`.`):t===`.go`?e.includes(`/`)||e.includes(`.`):t===`.java`?!0:t===`.rs`?!e.startsWith(`self`)&&!e.startsWith(`super`)&&!e.startsWith(`crate`):!e.startsWith(`.`)&&!e.startsWith(`/`)}function o(e,t,n){if(!e)return[n];if(t===`.py`){let t=e.match(/import\s+(.+)$/m);return t?t[1].split(`,`).map(e=>e.trim().split(/\s+as\s+/)[0].trim()).filter(Boolean):[n]}if(t===`.java`){let e=n.split(`.`);return[e[e.length-1]]}if(t===`.go`){let e=n.split(`/`);return[e[e.length-1]]}if(t===`.rs`){if(n.includes(`{`)){let e=n.match(/\{([^}]+)\}/);if(e)return e[1].split(`,`).map(e=>e.trim()).filter(Boolean)}let e=n.split(`::`);return[e[e.length-1]]}let r=e.match(/\{([^}]+)\}/);if(r)return r[1].split(`,`).map(e=>e.trim().split(/\s+as\s+/)[0].trim()).filter(Boolean);let i=e.match(/import\s+(\w+)/);return i?[i[1]]:[n]}function s(e,t){if(t===`.py`){let t=e.match(/^import\s+([\w.]+)/);if(t)return{source:t[1],specifiers:[t[1]]}}return null}export{r as extractImports};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PatternMatch } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region packages/chunker/src/extractors/pattern-detector.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Detect design patterns from source code using AST queries.
|
|
6
|
+
*
|
|
7
|
+
* @param content - The source code to analyze.
|
|
8
|
+
* @param ext - The file extension (e.g., `.ts`, `.py`).
|
|
9
|
+
* @param filePath - The file path for location info.
|
|
10
|
+
* @returns Array of detected patterns, or empty array if language unsupported.
|
|
11
|
+
*/
|
|
12
|
+
declare function detectPatterns(content: string, ext: string, filePath?: string): Promise<PatternMatch[]>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { detectPatterns };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{WasmRuntime as e}from"../wasm/runtime.js";import{QueryExecutor as t}from"../wasm/query-executor.js";const n=new t;async function r(t,r,a=``){let o=await e.ensure(),s=await o.parse(t,r);if(!s)return[];let c=o.getLanguage(r);if(!c)return[];let l=n.execute(s.rootNode,c,r,`patterns`),u=new Map;for(let e of l){let t=i(e,r);if(!t)continue;let n=e.captures.get(`name`),o=`${a}:${(e.captures.get(`node`)?.startLine??n?.startLine??0)+1}`,s=u.get(t.pattern);s?s.locations.push(o):u.set(t.pattern,{description:t.description,locations:[o]})}let d=[];for(let[e,{description:t,locations:n}]of u)d.push({pattern:e,description:t,locations:n,confidence:`high`});return d}function i(e,t){let n=e.captures.get(`name`)?.text;if(!n)return null;let r=e.captures.get(`node`)?.nodeType??``;if(/^(create|build)[A-Z]/.test(n)||/^(of|from|new)[A-Z]/.test(n))return{pattern:`factory`,description:`Factory function/method`};if(/^(register|bind)$/.test(n))return{pattern:`dependency-injection`,description:`DI container registration`};if(/^(Injectable|Component|Service|Controller|Module|Singleton|Repository|Bean)$/.test(n))return{pattern:`dependency-injection`,description:`Framework DI annotation`};if(/^(Map|WeakMap|Set)$/.test(n))return{pattern:`cached-instance`,description:`Cached Map/Set instance`};if(t===`.py`){if(n===`__new__`)return{pattern:`singleton`,description:`Singleton pattern (__new__ override)`};if(n===`__enter__`)return{pattern:`context-manager`,description:`Context manager pattern`};if(r===`decorated_definition`)return{pattern:`decorator`,description:`Decorator usage`}}if(t===`.go`){if(r===`type_declaration`)return{pattern:`interface`,description:`Interface definition`};if(r===`go_statement`)return{pattern:`concurrency`,description:`Goroutine concurrency pattern`};if(n===`make`)return{pattern:`concurrency`,description:`Channel/make pattern`}}if(t===`.rs`){if(r===`impl_item`)return{pattern:`trait-impl`,description:`Trait implementation`};if(r===`attribute_item`){if(n===`derive`)return{pattern:`derive`,description:`Derive macro attribute`};if(n===`test`)return{pattern:`test`,description:`Test attribute`}}}if(t===`.java`){if(r===`class_declaration`)return{pattern:`singleton`,description:`Singleton pattern (private constructor)`};if(r===`marker_annotation`)return{pattern:`dependency-injection`,description:`Framework DI annotation`}}if(/\.(ts|tsx|mts|cts|js|jsx|mjs|cjs)$/.test(t)){if(r===`class_declaration`)return{pattern:`singleton`,description:`Singleton pattern (private constructor)`};if(r===`decorator`)return{pattern:`decorator`,description:`Framework decorator pattern`}}return{pattern:r||`unknown`,description:`Detected pattern: ${n}`}}export{r as detectPatterns};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region packages/chunker/src/extractors/scope-resolver.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* AST-based scope resolver.
|
|
4
|
+
*
|
|
5
|
+
* NEW capability: resolves the enclosing scope (function/class/module) for any
|
|
6
|
+
* AST node. Used by other extractors to determine caller context.
|
|
7
|
+
*/
|
|
8
|
+
interface ScopeInfo {
|
|
9
|
+
/** Name of the enclosing scope (or '<module>' for top-level). */
|
|
10
|
+
name: string;
|
|
11
|
+
/** The scope type (function, class, module). */
|
|
12
|
+
type: 'function' | 'class' | 'module';
|
|
13
|
+
/** 1-based start line of the scope. */
|
|
14
|
+
line: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Resolve the enclosing scope chain for a given line in source code.
|
|
18
|
+
*
|
|
19
|
+
* @param content - The source code to analyze.
|
|
20
|
+
* @param ext - The file extension.
|
|
21
|
+
* @param targetLine - 1-based line number to resolve scope for.
|
|
22
|
+
* @returns Array of scopes from innermost to outermost, ending with module.
|
|
23
|
+
*/
|
|
24
|
+
declare function resolveScopes(content: string, ext: string, targetLine: number): Promise<ScopeInfo[]>;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { ScopeInfo, resolveScopes };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{WasmRuntime as e}from"../wasm/runtime.js";const t=new Set([`function_declaration`,`method_definition`,`arrow_function`,`class_declaration`,`function_definition`,`class_definition`,`method_declaration`,`constructor_declaration`,`class_declaration`,`function_declaration`,`method_declaration`,`function_item`,`impl_item`]);async function n(t,n,a){let o=await(await e.ensure()).parse(t,n);if(!o)return[{name:`<module>`,type:`module`,line:1}];let s=r(o.rootNode,a-1);if(!s)return[{name:`<module>`,type:`module`,line:1}];let c=[];return i(s,c),c.push({name:`<module>`,type:`module`,line:1}),c}function r(e,t){let n=null;function r(e){if(e.startPosition.row<=t&&e.endPosition.row>=t){n=e;for(let t of e.children)r(t)}}return r(e),n}function i(e,n){let r=e.parent;for(;r;){if(t.has(r.type)){let e=a(r),t=o(r.type);n.push({name:e??`<anonymous>`,type:t,line:r.startPosition.row+1})}r=r.parent}}function a(e){let t=e.childForFieldName(`name`);if(t)return t.text;for(let t of e.children)if(t.type===`identifier`||t.type===`type_identifier`||t.type===`property_identifier`||t.type===`field_identifier`)return t.text;return null}function o(e){return e.includes(`class`)||e===`impl_item`?`class`:`function`}export{n as resolveScopes};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SymbolInfo } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region packages/chunker/src/extractors/symbol-extractor.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Extract symbols from source code using AST queries.
|
|
6
|
+
*
|
|
7
|
+
* @param content - The source code to analyze.
|
|
8
|
+
* @param ext - The file extension (e.g., `.ts`, `.py`).
|
|
9
|
+
* @param filePath - The file path for the returned SymbolInfo records.
|
|
10
|
+
* @returns Array of extracted symbols, or empty array if language unsupported.
|
|
11
|
+
*/
|
|
12
|
+
declare function extractSymbols(content: string, ext: string, filePath?: string): Promise<SymbolInfo[]>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { extractSymbols };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{WasmRuntime as e}from"../wasm/runtime.js";import{QueryExecutor as t}from"../wasm/query-executor.js";const n=new t,r={function_declaration:`function`,class_declaration:`class`,interface_declaration:`interface`,type_alias_declaration:`type`,enum_declaration:`enum`,lexical_declaration:`const`,method_definition:`method`,public_field_definition:`variable`,field_definition:`variable`,function_definition:`function`,class_definition:`class`,expression_statement:`variable`,method_declaration:`method`,constructor_declaration:`method`,field_declaration:`variable`,type_spec:`type`,type_declaration:`type`,const_spec:`const`,var_spec:`variable`,function_item:`function`,struct_item:`class`,enum_item:`enum`,trait_item:`interface`,impl_item:`type`,const_item:`const`,static_item:`variable`,type_item:`type`};async function i(t,r,i=``){let o=await e.ensure(),s=await o.parse(t,r);if(!s)return[];let c=o.getLanguage(r);return c?a(n.execute(s.rootNode,c,r,`symbols`),r,i):[]}function a(e,t,n){let i=new Map;for(let n of e){let e=n.captures.get(`name`);if(!e)continue;let r=`${e.text}:${(n.captures.get(`node`)?.startLine??e.startLine)+1}`,a=o(n,t),s=i.get(r);(!s||!s.exported&&a)&&i.set(r,{match:n,exported:a})}let a=[];for(let{match:e,exported:o}of i.values()){let i=e.captures.get(`name`),l=e.captures.get(`node`);if(!i)continue;let u=r[l?.nodeType??i.nodeType]??`variable`,d=(l?.startLine??i.startLine)+1,f=s(u,l?.node,t),p=l?.node??i.node;a.push({name:i.text,kind:f,exported:o,filePath:n,line:d,signature:c(l?.node,f),returnType:m(l?.node,f),jsdoc:h(p),decorators:g(p),typeBody:_(l?.node,f)})}return a}function o(e,t){if(e.captures.has(`exported`))return!0;let n=e.captures.get(`name`)?.text;if(!n)return!1;if(t===`.py`)return!n.startsWith(`_`);if(t===`.go`)return/^[A-Z]/.test(n);if(t===`.java`){let t=e.captures.get(`node`)?.text??``;return/\bpublic\b/.test(t)}return!1}function s(e,t,n){if(n===`.go`&&e===`type`&&t?.children){let e=t.type===`type_declaration`?t.children.flatMap(e=>e.children??[]):t.children;for(let t of e){if(t.type===`interface_type`)return`interface`;if(t.type===`struct_type`)return`class`}}return e}function c(e,t){if(e){if(t===`function`||t===`method`)return l(e);if(t===`class`)return u(e);if(t===`interface`)return f(e)}}function l(e){let t=e.childForFieldName(`parameters`)??e.childForFieldName(`parameter_list`),n=e.childForFieldName(`return_type`)??e.childForFieldName(`type`),r=e.childForFieldName(`result`);if(!t){for(let t of e.children)if(t.type===`formal_parameters`||t.type===`parameter_list`||t.type===`parameters`){let e=t.text;return n&&(e+=n.text),r&&(e+=` ${r.text}`),e.length>120?`${e.slice(0,117)}...`:e}return}let i=t.text;return n&&(i+=n.text),r&&(i+=` ${r.text}`),i.length>120?`${i.slice(0,117)}...`:i}function u(e){let t=e.childForFieldName(`body`)??e.childForFieldName(`field_declaration_list`);if(!t){for(let t of e.children)if(t.type===`struct_type`||t.type===`class_body`)return d(t);return}return d(t)}function d(e){let t=[];for(let n of e.children){if(n.type===`method_definition`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}if(n.type===`method_declaration`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}if(n.type===`field_declaration`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}if(n.type===`function_definition`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}}if(t.length===0)return;let n=t.join(`, `);return n.length>120?`${n.slice(0,117)}...`:n}function f(e){let t=e.childForFieldName(`body`);if(!t){for(let t of e.children)if(t.type===`interface_type`)return p(t);return}return p(t)}function p(e){let t=[];for(let n of e.children){if(n.type===`property_signature`||n.type===`method_signature`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}if(n.type===`method_declaration`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}if(n.type===`method_spec`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}if(n.type===`function_signature_item`||n.type===`declaration_list`){let e=n.childForFieldName(`name`);e&&t.push(e.text)}}if(t.length===0)return;let n=t.join(`, `);return n.length>120?`${n.slice(0,117)}...`:n}function m(e,t){if(!e||t!==`function`&&t!==`method`)return;let n=e.childForFieldName(`return_type`)??e.childForFieldName(`type`);if(n){let e=n.text.replace(/^:\s*/,``).trim();return e.length>200?`${e.slice(0,200)}…`:e}let r=e.childForFieldName(`result`);if(r)return r.text.trim()}function h(e){let t=e.parent;if(!t?.children)return;let n=t.children.indexOf(e);if(n<=0)return;let r=t.children[n-1];if(r){if(r.type===`comment`||r.type===`block_comment`||r.type===`doc_comment`)return r.text.replace(/^\/\*\*?\s*|\s*\*\/$/g,``).split(`
|
|
2
|
+
`).map(e=>e.replace(/^\s*\*\s?/,``).trim()).filter(e=>e.length>0&&!e.startsWith(`@`))[0]?.slice(0,200)||void 0;if(e.children[0]?.type===`expression_statement`){let t=e.children[0].children[0];if(t&&(t.type===`string`||t.type===`concatenated_string`))return t.text.replace(/^['"`]{1,3}|['"`]{1,3}$/g,``).trim().split(`
|
|
3
|
+
`)[0]?.trim()?.slice(0,200)||void 0}}}function g(e){let t=e.parent;if(!t?.children)return;let n=t.children.indexOf(e),r=[];for(let e=n-1;e>=0;e--){let n=t.children[e];if(n.type===`decorator`||n.type===`annotation`||n.type===`marker_annotation`){let e=n.text.trim();r.unshift(e.length>100?`${e.slice(0,100)}…`:e)}else if(n.type!==`comment`&&n.type!==`block_comment`&&n.type!==`doc_comment`)break}return r.length>0?r:void 0}function _(e,t){if(!e||t!==`interface`&&t!==`type`)return;let n=e.childForFieldName(`body`)??e.childForFieldName(`value`)??e.children.find(e=>e.type===`object_type`||e.type===`interface_body`||e.type===`type_body`);if(!n)return;let r=n.text.replace(/\n\s*/g,` `).replace(/\s+/g,` `).trim();return r.length>500?`${r.slice(0,500)}…`:r}export{i as extractSymbols};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
//#region packages/chunker/src/extractors/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Shared type definitions for AST extractors.
|
|
4
|
+
*
|
|
5
|
+
* These types match the interfaces in `@aikit/analyzers/types.ts` so that
|
|
6
|
+
* downstream consumers can seamlessly switch from regex-based to AST-based extraction.
|
|
7
|
+
*/
|
|
8
|
+
interface SymbolInfo {
|
|
9
|
+
name: string;
|
|
10
|
+
kind: 'function' | 'class' | 'interface' | 'type' | 'const' | 'enum' | 'variable' | 'method';
|
|
11
|
+
exported: boolean;
|
|
12
|
+
filePath: string;
|
|
13
|
+
line: number;
|
|
14
|
+
signature?: string;
|
|
15
|
+
/** Return type annotation (e.g. "Promise<void>", "string") */
|
|
16
|
+
returnType?: string;
|
|
17
|
+
/** First line of JSDoc/docstring */
|
|
18
|
+
jsdoc?: string;
|
|
19
|
+
/** Decorator names (e.g. ["@Controller('/api')", "@Injectable"]) */
|
|
20
|
+
decorators?: string[];
|
|
21
|
+
/** Condensed body for interfaces/types (e.g. "{ id: string; name: string }") */
|
|
22
|
+
typeBody?: string;
|
|
23
|
+
}
|
|
24
|
+
interface ImportInfo {
|
|
25
|
+
source: string;
|
|
26
|
+
specifiers: string[];
|
|
27
|
+
filePath: string;
|
|
28
|
+
isExternal: boolean;
|
|
29
|
+
confidence: 'high' | 'medium' | 'low';
|
|
30
|
+
}
|
|
31
|
+
interface PatternMatch {
|
|
32
|
+
pattern: string;
|
|
33
|
+
description: string;
|
|
34
|
+
locations: string[];
|
|
35
|
+
confidence: 'high' | 'medium' | 'low';
|
|
36
|
+
}
|
|
37
|
+
interface EntryPoint {
|
|
38
|
+
name: string;
|
|
39
|
+
type: 'lambda-handler' | 'main' | 'bin' | 'server' | 'cli' | 'test' | 'cdk-construct';
|
|
40
|
+
filePath: string;
|
|
41
|
+
trigger?: string;
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { EntryPoint, ImportInfo, PatternMatch, SymbolInfo };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { IChunker } from "./chunker.interface.js";
|
|
2
|
+
import { ChunkMetadata, RawChunk } from "../../core/dist/index.js";
|
|
3
|
+
|
|
4
|
+
//#region packages/chunker/src/generic-chunker.d.ts
|
|
5
|
+
declare class GenericChunker implements IChunker {
|
|
6
|
+
private readonly maxChunkSize;
|
|
7
|
+
private readonly overlap;
|
|
8
|
+
constructor(options?: {
|
|
9
|
+
maxChunkSize?: number;
|
|
10
|
+
overlap?: number;
|
|
11
|
+
});
|
|
12
|
+
chunk(content: string, metadata: ChunkMetadata): RawChunk[];
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { GenericChunker };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{CHUNK_SIZES as e}from"../../core/dist/index.js";var t=class{maxChunkSize;overlap;constructor(t){this.maxChunkSize=t?.maxChunkSize??e.default.max,this.overlap=t?.overlap??e.default.overlap}chunk(e,t){if(e.length<=this.maxChunkSize)return[{text:e,sourcePath:t.sourcePath,contentType:t.contentType,chunkIndex:0,totalChunks:1,startLine:1,endLine:e.split(`
|
|
2
|
+
`).length}];let n=e.split(`
|
|
3
|
+
`),r=[],i=[],a=0,o=1;for(let e=0;e<n.length;e++){let s=n[e];if(a+s.length+1>this.maxChunkSize&&i.length>0){r.push({text:i.join(`
|
|
4
|
+
`),sourcePath:t.sourcePath,contentType:t.contentType,chunkIndex:r.length,totalChunks:0,startLine:o,endLine:o+i.length-1});let e=[],n=0;for(let t=i.length-1;t>=0&&!(n+i[t].length+1>this.overlap);t--)e.unshift(i[t]),n+=i[t].length+1;o=o+i.length-e.length,i=[...e,s],a=n+s.length+1}else i.push(s),a+=s.length+1}return i.length>0&&r.push({text:i.join(`
|
|
5
|
+
`),sourcePath:t.sourcePath,contentType:t.contentType,chunkIndex:r.length,totalChunks:0,startLine:o,endLine:o+i.length-1}),r.map((e,t)=>({...e,chunkIndex:t,totalChunks:r.length}))}};export{t as GenericChunker};
|