codesift-mcp 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +215 -23
- package/dist/cache/hono-cache.d.ts +50 -0
- package/dist/cache/hono-cache.d.ts.map +1 -0
- package/dist/cache/hono-cache.js +132 -0
- package/dist/cache/hono-cache.js.map +1 -0
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +8 -6
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/platform.d.ts.map +1 -1
- package/dist/cli/platform.js +12 -14
- package/dist/cli/platform.js.map +1 -1
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +27 -3
- package/dist/cli/setup.js.map +1 -1
- package/dist/formatters-shortening.d.ts +13 -0
- package/dist/formatters-shortening.d.ts.map +1 -1
- package/dist/formatters-shortening.js +131 -0
- package/dist/formatters-shortening.js.map +1 -1
- package/dist/formatters.d.ts +38 -0
- package/dist/formatters.d.ts.map +1 -1
- package/dist/formatters.js +521 -0
- package/dist/formatters.js.map +1 -1
- package/dist/instructions.d.ts +1 -1
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +39 -38
- package/dist/instructions.js.map +1 -1
- package/dist/lsp/lsp-servers.d.ts.map +1 -1
- package/dist/lsp/lsp-servers.js +5 -0
- package/dist/lsp/lsp-servers.js.map +1 -1
- package/dist/lsp/lsp-tools.d.ts.map +1 -1
- package/dist/lsp/lsp-tools.js +1 -0
- package/dist/lsp/lsp-tools.js.map +1 -1
- package/dist/parser/astro-template.d.ts +47 -0
- package/dist/parser/astro-template.d.ts.map +1 -0
- package/dist/parser/astro-template.js +171 -0
- package/dist/parser/astro-template.js.map +1 -0
- package/dist/parser/extractors/_shared.d.ts +4 -0
- package/dist/parser/extractors/_shared.d.ts.map +1 -1
- package/dist/parser/extractors/_shared.js +8 -0
- package/dist/parser/extractors/_shared.js.map +1 -1
- package/dist/parser/extractors/astro.d.ts +4 -5
- package/dist/parser/extractors/astro.d.ts.map +1 -1
- package/dist/parser/extractors/astro.js +102 -26
- package/dist/parser/extractors/astro.js.map +1 -1
- package/dist/parser/extractors/gradle-kts.d.ts +4 -0
- package/dist/parser/extractors/gradle-kts.d.ts.map +1 -0
- package/dist/parser/extractors/gradle-kts.js +246 -0
- package/dist/parser/extractors/gradle-kts.js.map +1 -0
- package/dist/parser/extractors/hono-inline-analyzer.d.ts +34 -0
- package/dist/parser/extractors/hono-inline-analyzer.d.ts.map +1 -0
- package/dist/parser/extractors/hono-inline-analyzer.js +465 -0
- package/dist/parser/extractors/hono-inline-analyzer.js.map +1 -0
- package/dist/parser/extractors/hono-model.d.ts +196 -0
- package/dist/parser/extractors/hono-model.d.ts.map +1 -0
- package/dist/parser/extractors/hono-model.js +10 -0
- package/dist/parser/extractors/hono-model.js.map +1 -0
- package/dist/parser/extractors/hono.d.ts +118 -0
- package/dist/parser/extractors/hono.d.ts.map +1 -0
- package/dist/parser/extractors/hono.js +1527 -0
- package/dist/parser/extractors/hono.js.map +1 -0
- package/dist/parser/extractors/kotlin.d.ts +4 -0
- package/dist/parser/extractors/kotlin.d.ts.map +1 -0
- package/dist/parser/extractors/kotlin.js +521 -0
- package/dist/parser/extractors/kotlin.js.map +1 -0
- package/dist/parser/extractors/php.d.ts +22 -0
- package/dist/parser/extractors/php.d.ts.map +1 -0
- package/dist/parser/extractors/php.js +334 -0
- package/dist/parser/extractors/php.js.map +1 -0
- package/dist/parser/extractors/python.d.ts.map +1 -1
- package/dist/parser/extractors/python.js +234 -11
- package/dist/parser/extractors/python.js.map +1 -1
- package/dist/parser/extractors/sql.d.ts +33 -0
- package/dist/parser/extractors/sql.d.ts.map +1 -0
- package/dist/parser/extractors/sql.js +506 -0
- package/dist/parser/extractors/sql.js.map +1 -0
- package/dist/parser/extractors/typescript.d.ts.map +1 -1
- package/dist/parser/extractors/typescript.js +209 -3
- package/dist/parser/extractors/typescript.js.map +1 -1
- package/dist/parser/languages/tree-sitter-javascript.wasm +0 -0
- package/dist/parser/languages/tree-sitter-kotlin.wasm +0 -0
- package/dist/parser/languages/tree-sitter-php.wasm +0 -0
- package/dist/parser/languages/tree-sitter-php_only.wasm +0 -0
- package/dist/parser/languages/tree-sitter-python.wasm +0 -0
- package/dist/parser/parse-cache.d.ts +39 -0
- package/dist/parser/parse-cache.d.ts.map +1 -0
- package/dist/parser/parse-cache.js +87 -0
- package/dist/parser/parse-cache.js.map +1 -0
- package/dist/parser/parser-manager.d.ts +32 -0
- package/dist/parser/parser-manager.d.ts.map +1 -1
- package/dist/parser/parser-manager.js +93 -3
- package/dist/parser/parser-manager.js.map +1 -1
- package/dist/parser/symbol-extractor.d.ts.map +1 -1
- package/dist/parser/symbol-extractor.js +16 -0
- package/dist/parser/symbol-extractor.js.map +1 -1
- package/dist/register-tools.d.ts +38 -2
- package/dist/register-tools.d.ts.map +1 -1
- package/dist/register-tools.js +2444 -195
- package/dist/register-tools.js.map +1 -1
- package/dist/search/reranker.js +1 -1
- package/dist/search/reranker.js.map +1 -1
- package/dist/search/tool-ranker.d.ts +90 -0
- package/dist/search/tool-ranker.d.ts.map +1 -0
- package/dist/search/tool-ranker.js +420 -0
- package/dist/search/tool-ranker.js.map +1 -0
- package/dist/server-helpers.d.ts.map +1 -1
- package/dist/server-helpers.js +11 -0
- package/dist/server-helpers.js.map +1 -1
- package/dist/server.js +47 -14
- package/dist/server.js.map +1 -1
- package/dist/storage/index-store.d.ts +15 -1
- package/dist/storage/index-store.d.ts.map +1 -1
- package/dist/storage/index-store.js +27 -1
- package/dist/storage/index-store.js.map +1 -1
- package/dist/storage/session-state.d.ts +1 -1
- package/dist/storage/session-state.d.ts.map +1 -1
- package/dist/storage/session-state.js +6 -4
- package/dist/storage/session-state.js.map +1 -1
- package/dist/storage/usage-tracker.d.ts.map +1 -1
- package/dist/storage/usage-tracker.js +4 -1
- package/dist/storage/usage-tracker.js.map +1 -1
- package/dist/tools/agent-config-tools.d.ts +24 -0
- package/dist/tools/agent-config-tools.d.ts.map +1 -0
- package/dist/tools/agent-config-tools.js +119 -0
- package/dist/tools/agent-config-tools.js.map +1 -0
- package/dist/tools/architecture-tools.d.ts +23 -0
- package/dist/tools/architecture-tools.d.ts.map +1 -0
- package/dist/tools/architecture-tools.js +140 -0
- package/dist/tools/architecture-tools.js.map +1 -0
- package/dist/tools/astro-actions.d.ts +54 -0
- package/dist/tools/astro-actions.d.ts.map +1 -0
- package/dist/tools/astro-actions.js +561 -0
- package/dist/tools/astro-actions.js.map +1 -0
- package/dist/tools/astro-audit.d.ts +87 -0
- package/dist/tools/astro-audit.d.ts.map +1 -0
- package/dist/tools/astro-audit.js +345 -0
- package/dist/tools/astro-audit.js.map +1 -0
- package/dist/tools/astro-config.d.ts +33 -0
- package/dist/tools/astro-config.d.ts.map +1 -0
- package/dist/tools/astro-config.js +260 -0
- package/dist/tools/astro-config.js.map +1 -0
- package/dist/tools/astro-content-collections.d.ts +44 -0
- package/dist/tools/astro-content-collections.d.ts.map +1 -0
- package/dist/tools/astro-content-collections.js +630 -0
- package/dist/tools/astro-content-collections.js.map +1 -0
- package/dist/tools/astro-islands.d.ts +63 -0
- package/dist/tools/astro-islands.d.ts.map +1 -0
- package/dist/tools/astro-islands.js +255 -0
- package/dist/tools/astro-islands.js.map +1 -0
- package/dist/tools/astro-migration.d.ts +31 -0
- package/dist/tools/astro-migration.d.ts.map +1 -0
- package/dist/tools/astro-migration.js +378 -0
- package/dist/tools/astro-migration.js.map +1 -0
- package/dist/tools/astro-routes.d.ts +49 -0
- package/dist/tools/astro-routes.d.ts.map +1 -0
- package/dist/tools/astro-routes.js +119 -0
- package/dist/tools/astro-routes.js.map +1 -0
- package/dist/tools/async-correctness.d.ts +26 -0
- package/dist/tools/async-correctness.d.ts.map +1 -0
- package/dist/tools/async-correctness.js +166 -0
- package/dist/tools/async-correctness.js.map +1 -0
- package/dist/tools/audit-tools.d.ts +38 -0
- package/dist/tools/audit-tools.d.ts.map +1 -0
- package/dist/tools/audit-tools.js +248 -0
- package/dist/tools/audit-tools.js.map +1 -0
- package/dist/tools/celery-tools.d.ts +38 -0
- package/dist/tools/celery-tools.d.ts.map +1 -0
- package/dist/tools/celery-tools.js +154 -0
- package/dist/tools/celery-tools.js.map +1 -0
- package/dist/tools/clone-tools.js +1 -1
- package/dist/tools/clone-tools.js.map +1 -1
- package/dist/tools/complexity-tools.d.ts +4 -0
- package/dist/tools/complexity-tools.d.ts.map +1 -1
- package/dist/tools/complexity-tools.js +78 -4
- package/dist/tools/complexity-tools.js.map +1 -1
- package/dist/tools/compose-tools.d.ts +60 -0
- package/dist/tools/compose-tools.d.ts.map +1 -0
- package/dist/tools/compose-tools.js +203 -0
- package/dist/tools/compose-tools.js.map +1 -0
- package/dist/tools/coupling-tools.d.ts +50 -0
- package/dist/tools/coupling-tools.d.ts.map +1 -0
- package/dist/tools/coupling-tools.js +262 -0
- package/dist/tools/coupling-tools.js.map +1 -0
- package/dist/tools/dependency-audit-tools.d.ts +65 -0
- package/dist/tools/dependency-audit-tools.d.ts.map +1 -0
- package/dist/tools/dependency-audit-tools.js +553 -0
- package/dist/tools/dependency-audit-tools.js.map +1 -0
- package/dist/tools/django-settings.d.ts +22 -0
- package/dist/tools/django-settings.d.ts.map +1 -0
- package/dist/tools/django-settings.js +301 -0
- package/dist/tools/django-settings.js.map +1 -0
- package/dist/tools/django-view-security-tools.d.ts +32 -0
- package/dist/tools/django-view-security-tools.d.ts.map +1 -0
- package/dist/tools/django-view-security-tools.js +184 -0
- package/dist/tools/django-view-security-tools.js.map +1 -0
- package/dist/tools/fastapi-depends.d.ts +63 -0
- package/dist/tools/fastapi-depends.d.ts.map +1 -0
- package/dist/tools/fastapi-depends.js +191 -0
- package/dist/tools/fastapi-depends.js.map +1 -0
- package/dist/tools/frequency-tools.js +1 -1
- package/dist/tools/frequency-tools.js.map +1 -1
- package/dist/tools/graph-tools.d.ts +8 -2
- package/dist/tools/graph-tools.d.ts.map +1 -1
- package/dist/tools/graph-tools.js +44 -3
- package/dist/tools/graph-tools.js.map +1 -1
- package/dist/tools/hilt-tools.d.ts +55 -0
- package/dist/tools/hilt-tools.d.ts.map +1 -0
- package/dist/tools/hilt-tools.js +258 -0
- package/dist/tools/hilt-tools.js.map +1 -0
- package/dist/tools/hono-analyze-app.d.ts +48 -0
- package/dist/tools/hono-analyze-app.d.ts.map +1 -0
- package/dist/tools/hono-analyze-app.js +94 -0
- package/dist/tools/hono-analyze-app.js.map +1 -0
- package/dist/tools/hono-api-contract.d.ts +22 -0
- package/dist/tools/hono-api-contract.d.ts.map +1 -0
- package/dist/tools/hono-api-contract.js +112 -0
- package/dist/tools/hono-api-contract.js.map +1 -0
- package/dist/tools/hono-conditional-middleware.d.ts +27 -0
- package/dist/tools/hono-conditional-middleware.d.ts.map +1 -0
- package/dist/tools/hono-conditional-middleware.js +62 -0
- package/dist/tools/hono-conditional-middleware.js.map +1 -0
- package/dist/tools/hono-context-flow.d.ts +24 -0
- package/dist/tools/hono-context-flow.d.ts.map +1 -0
- package/dist/tools/hono-context-flow.js +70 -0
- package/dist/tools/hono-context-flow.js.map +1 -0
- package/dist/tools/hono-dead-routes.d.ts +26 -0
- package/dist/tools/hono-dead-routes.d.ts.map +1 -0
- package/dist/tools/hono-dead-routes.js +102 -0
- package/dist/tools/hono-dead-routes.js.map +1 -0
- package/dist/tools/hono-entry-resolver.d.ts +27 -0
- package/dist/tools/hono-entry-resolver.d.ts.map +1 -0
- package/dist/tools/hono-entry-resolver.js +31 -0
- package/dist/tools/hono-entry-resolver.js.map +1 -0
- package/dist/tools/hono-env-regression.d.ts +29 -0
- package/dist/tools/hono-env-regression.d.ts.map +1 -0
- package/dist/tools/hono-env-regression.js +157 -0
- package/dist/tools/hono-env-regression.js.map +1 -0
- package/dist/tools/hono-inline-analyze.d.ts +31 -0
- package/dist/tools/hono-inline-analyze.d.ts.map +1 -0
- package/dist/tools/hono-inline-analyze.js +59 -0
- package/dist/tools/hono-inline-analyze.js.map +1 -0
- package/dist/tools/hono-middleware-chain.d.ts +40 -0
- package/dist/tools/hono-middleware-chain.d.ts.map +1 -0
- package/dist/tools/hono-middleware-chain.js +121 -0
- package/dist/tools/hono-middleware-chain.js.map +1 -0
- package/dist/tools/hono-modules.d.ts +22 -0
- package/dist/tools/hono-modules.d.ts.map +1 -0
- package/dist/tools/hono-modules.js +118 -0
- package/dist/tools/hono-modules.js.map +1 -0
- package/dist/tools/hono-response-types.d.ts +37 -0
- package/dist/tools/hono-response-types.d.ts.map +1 -0
- package/dist/tools/hono-response-types.js +76 -0
- package/dist/tools/hono-response-types.js.map +1 -0
- package/dist/tools/hono-rpc-types.d.ts +21 -0
- package/dist/tools/hono-rpc-types.d.ts.map +1 -0
- package/dist/tools/hono-rpc-types.js +49 -0
- package/dist/tools/hono-rpc-types.js.map +1 -0
- package/dist/tools/hono-security.d.ts +31 -0
- package/dist/tools/hono-security.d.ts.map +1 -0
- package/dist/tools/hono-security.js +269 -0
- package/dist/tools/hono-security.js.map +1 -0
- package/dist/tools/hono-visualize.d.ts +13 -0
- package/dist/tools/hono-visualize.d.ts.map +1 -0
- package/dist/tools/hono-visualize.js +64 -0
- package/dist/tools/hono-visualize.js.map +1 -0
- package/dist/tools/hotspot-tools.d.ts.map +1 -1
- package/dist/tools/hotspot-tools.js +9 -7
- package/dist/tools/hotspot-tools.js.map +1 -1
- package/dist/tools/index-tools.d.ts +17 -0
- package/dist/tools/index-tools.d.ts.map +1 -1
- package/dist/tools/index-tools.js +210 -10
- package/dist/tools/index-tools.js.map +1 -1
- package/dist/tools/kotlin-tools.d.ts +142 -0
- package/dist/tools/kotlin-tools.d.ts.map +1 -0
- package/dist/tools/kotlin-tools.js +572 -0
- package/dist/tools/kotlin-tools.js.map +1 -0
- package/dist/tools/legacy-hono-conventions.d.ts +14 -0
- package/dist/tools/legacy-hono-conventions.d.ts.map +1 -0
- package/dist/tools/legacy-hono-conventions.js +152 -0
- package/dist/tools/legacy-hono-conventions.js.map +1 -0
- package/dist/tools/migration-lint-tools.d.ts +26 -0
- package/dist/tools/migration-lint-tools.d.ts.map +1 -0
- package/dist/tools/migration-lint-tools.js +247 -0
- package/dist/tools/migration-lint-tools.js.map +1 -0
- package/dist/tools/model-tools.d.ts +30 -0
- package/dist/tools/model-tools.d.ts.map +1 -0
- package/dist/tools/model-tools.js +145 -0
- package/dist/tools/model-tools.js.map +1 -0
- package/dist/tools/nest-ext-tools.d.ts +207 -0
- package/dist/tools/nest-ext-tools.d.ts.map +1 -0
- package/dist/tools/nest-ext-tools.js +752 -0
- package/dist/tools/nest-ext-tools.js.map +1 -0
- package/dist/tools/nest-tools.d.ts +198 -0
- package/dist/tools/nest-tools.d.ts.map +1 -0
- package/dist/tools/nest-tools.js +1142 -0
- package/dist/tools/nest-tools.js.map +1 -0
- package/dist/tools/nextjs-api-contract-readers.d.ts +14 -0
- package/dist/tools/nextjs-api-contract-readers.d.ts.map +1 -0
- package/dist/tools/nextjs-api-contract-readers.js +204 -0
- package/dist/tools/nextjs-api-contract-readers.js.map +1 -0
- package/dist/tools/nextjs-api-contract-tools.d.ts +57 -0
- package/dist/tools/nextjs-api-contract-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-api-contract-tools.js +144 -0
- package/dist/tools/nextjs-api-contract-tools.js.map +1 -0
- package/dist/tools/nextjs-boundary-tools.d.ts +39 -0
- package/dist/tools/nextjs-boundary-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-boundary-tools.js +152 -0
- package/dist/tools/nextjs-boundary-tools.js.map +1 -0
- package/dist/tools/nextjs-component-readers.d.ts +101 -0
- package/dist/tools/nextjs-component-readers.d.ts.map +1 -0
- package/dist/tools/nextjs-component-readers.js +287 -0
- package/dist/tools/nextjs-component-readers.js.map +1 -0
- package/dist/tools/nextjs-component-tools.d.ts +51 -0
- package/dist/tools/nextjs-component-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-component-tools.js +212 -0
- package/dist/tools/nextjs-component-tools.js.map +1 -0
- package/dist/tools/nextjs-data-flow-tools.d.ts +42 -0
- package/dist/tools/nextjs-data-flow-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-data-flow-tools.js +158 -0
- package/dist/tools/nextjs-data-flow-tools.js.map +1 -0
- package/dist/tools/nextjs-framework-audit-tools.d.ts +60 -0
- package/dist/tools/nextjs-framework-audit-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-framework-audit-tools.js +394 -0
- package/dist/tools/nextjs-framework-audit-tools.js.map +1 -0
- package/dist/tools/nextjs-link-tools.d.ts +41 -0
- package/dist/tools/nextjs-link-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-link-tools.js +157 -0
- package/dist/tools/nextjs-link-tools.js.map +1 -0
- package/dist/tools/nextjs-metadata-tools.d.ts +74 -0
- package/dist/tools/nextjs-metadata-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-metadata-tools.js +252 -0
- package/dist/tools/nextjs-metadata-tools.js.map +1 -0
- package/dist/tools/nextjs-middleware-coverage-tools.d.ts +41 -0
- package/dist/tools/nextjs-middleware-coverage-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-middleware-coverage-tools.js +88 -0
- package/dist/tools/nextjs-middleware-coverage-tools.js.map +1 -0
- package/dist/tools/nextjs-route-readers.d.ts +81 -0
- package/dist/tools/nextjs-route-readers.d.ts.map +1 -0
- package/dist/tools/nextjs-route-readers.js +340 -0
- package/dist/tools/nextjs-route-readers.js.map +1 -0
- package/dist/tools/nextjs-route-tools.d.ts +36 -0
- package/dist/tools/nextjs-route-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-route-tools.js +175 -0
- package/dist/tools/nextjs-route-tools.js.map +1 -0
- package/dist/tools/nextjs-security-readers.d.ts +22 -0
- package/dist/tools/nextjs-security-readers.d.ts.map +1 -0
- package/dist/tools/nextjs-security-readers.js +318 -0
- package/dist/tools/nextjs-security-readers.js.map +1 -0
- package/dist/tools/nextjs-security-scoring.d.ts +15 -0
- package/dist/tools/nextjs-security-scoring.d.ts.map +1 -0
- package/dist/tools/nextjs-security-scoring.js +65 -0
- package/dist/tools/nextjs-security-scoring.js.map +1 -0
- package/dist/tools/nextjs-security-tools.d.ts +75 -0
- package/dist/tools/nextjs-security-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-security-tools.js +153 -0
- package/dist/tools/nextjs-security-tools.js.map +1 -0
- package/dist/tools/nextjs-tools.d.ts +15 -0
- package/dist/tools/nextjs-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-tools.js +15 -0
- package/dist/tools/nextjs-tools.js.map +1 -0
- package/dist/tools/outline-tools.d.ts.map +1 -1
- package/dist/tools/outline-tools.js +20 -0
- package/dist/tools/outline-tools.js.map +1 -1
- package/dist/tools/pattern-tools.d.ts +8 -0
- package/dist/tools/pattern-tools.d.ts.map +1 -1
- package/dist/tools/pattern-tools.js +651 -3
- package/dist/tools/pattern-tools.js.map +1 -1
- package/dist/tools/perf-tools.d.ts +32 -0
- package/dist/tools/perf-tools.d.ts.map +1 -0
- package/dist/tools/perf-tools.js +227 -0
- package/dist/tools/perf-tools.js.map +1 -0
- package/dist/tools/php-tools.d.ts +185 -0
- package/dist/tools/php-tools.d.ts.map +1 -0
- package/dist/tools/php-tools.js +645 -0
- package/dist/tools/php-tools.js.map +1 -0
- package/dist/tools/plan-turn-tools.d.ts +89 -0
- package/dist/tools/plan-turn-tools.d.ts.map +1 -0
- package/dist/tools/plan-turn-tools.js +508 -0
- package/dist/tools/plan-turn-tools.js.map +1 -0
- package/dist/tools/prisma-schema-tools.d.ts +44 -0
- package/dist/tools/prisma-schema-tools.d.ts.map +1 -0
- package/dist/tools/prisma-schema-tools.js +358 -0
- package/dist/tools/prisma-schema-tools.js.map +1 -0
- package/dist/tools/project-tools.d.ts +116 -7
- package/dist/tools/project-tools.d.ts.map +1 -1
- package/dist/tools/project-tools.js +595 -218
- package/dist/tools/project-tools.js.map +1 -1
- package/dist/tools/pydantic-models.d.ts +46 -0
- package/dist/tools/pydantic-models.d.ts.map +1 -0
- package/dist/tools/pydantic-models.js +249 -0
- package/dist/tools/pydantic-models.js.map +1 -0
- package/dist/tools/pyproject-tools.d.ts +23 -0
- package/dist/tools/pyproject-tools.d.ts.map +1 -0
- package/dist/tools/pyproject-tools.js +133 -0
- package/dist/tools/pyproject-tools.js.map +1 -0
- package/dist/tools/pytest-tools.d.ts +20 -0
- package/dist/tools/pytest-tools.d.ts.map +1 -0
- package/dist/tools/pytest-tools.js +106 -0
- package/dist/tools/pytest-tools.js.map +1 -0
- package/dist/tools/python-audit.d.ts +40 -0
- package/dist/tools/python-audit.d.ts.map +1 -0
- package/dist/tools/python-audit.js +244 -0
- package/dist/tools/python-audit.js.map +1 -0
- package/dist/tools/python-callers.d.ts +28 -0
- package/dist/tools/python-callers.d.ts.map +1 -0
- package/dist/tools/python-callers.js +110 -0
- package/dist/tools/python-callers.js.map +1 -0
- package/dist/tools/python-circular-imports.d.ts +19 -0
- package/dist/tools/python-circular-imports.d.ts.map +1 -0
- package/dist/tools/python-circular-imports.js +126 -0
- package/dist/tools/python-circular-imports.js.map +1 -0
- package/dist/tools/python-constants-tools.d.ts +44 -0
- package/dist/tools/python-constants-tools.d.ts.map +1 -0
- package/dist/tools/python-constants-tools.js +525 -0
- package/dist/tools/python-constants-tools.js.map +1 -0
- package/dist/tools/python-deps-analyzer.d.ts +46 -0
- package/dist/tools/python-deps-analyzer.d.ts.map +1 -0
- package/dist/tools/python-deps-analyzer.js +227 -0
- package/dist/tools/python-deps-analyzer.js.map +1 -0
- package/dist/tools/query-tools.d.ts +23 -0
- package/dist/tools/query-tools.d.ts.map +1 -0
- package/dist/tools/query-tools.js +256 -0
- package/dist/tools/query-tools.js.map +1 -0
- package/dist/tools/react-tools.d.ts +263 -0
- package/dist/tools/react-tools.d.ts.map +1 -0
- package/dist/tools/react-tools.js +839 -0
- package/dist/tools/react-tools.js.map +1 -0
- package/dist/tools/report-tools.js +47 -0
- package/dist/tools/report-tools.js.map +1 -1
- package/dist/tools/review-diff-tools.d.ts +5 -4
- package/dist/tools/review-diff-tools.d.ts.map +1 -1
- package/dist/tools/review-diff-tools.js +157 -66
- package/dist/tools/review-diff-tools.js.map +1 -1
- package/dist/tools/room-tools.d.ts +36 -0
- package/dist/tools/room-tools.d.ts.map +1 -0
- package/dist/tools/room-tools.js +147 -0
- package/dist/tools/room-tools.js.map +1 -0
- package/dist/tools/route-tools.d.ts +27 -1
- package/dist/tools/route-tools.d.ts.map +1 -1
- package/dist/tools/route-tools.js +744 -18
- package/dist/tools/route-tools.js.map +1 -1
- package/dist/tools/ruff-tools.d.ts +32 -0
- package/dist/tools/ruff-tools.d.ts.map +1 -0
- package/dist/tools/ruff-tools.js +114 -0
- package/dist/tools/ruff-tools.js.map +1 -0
- package/dist/tools/search-ranker.d.ts.map +1 -1
- package/dist/tools/search-ranker.js +7 -0
- package/dist/tools/search-ranker.js.map +1 -1
- package/dist/tools/search-tools.d.ts +3 -2
- package/dist/tools/search-tools.d.ts.map +1 -1
- package/dist/tools/search-tools.js +16 -3
- package/dist/tools/search-tools.js.map +1 -1
- package/dist/tools/serialization-tools.d.ts +24 -0
- package/dist/tools/serialization-tools.d.ts.map +1 -0
- package/dist/tools/serialization-tools.js +156 -0
- package/dist/tools/serialization-tools.js.map +1 -0
- package/dist/tools/sql-tools.d.ts +274 -0
- package/dist/tools/sql-tools.d.ts.map +1 -0
- package/dist/tools/sql-tools.js +1160 -0
- package/dist/tools/sql-tools.js.map +1 -0
- package/dist/tools/status-tools.d.ts +10 -0
- package/dist/tools/status-tools.d.ts.map +1 -0
- package/dist/tools/status-tools.js +32 -0
- package/dist/tools/status-tools.js.map +1 -0
- package/dist/tools/symbol-tools.d.ts +19 -0
- package/dist/tools/symbol-tools.d.ts.map +1 -1
- package/dist/tools/symbol-tools.js +75 -4
- package/dist/tools/symbol-tools.js.map +1 -1
- package/dist/tools/taint-tools.d.ts +43 -0
- package/dist/tools/taint-tools.d.ts.map +1 -0
- package/dist/tools/taint-tools.js +922 -0
- package/dist/tools/taint-tools.js.map +1 -0
- package/dist/tools/test-impact-tools.d.ts +29 -0
- package/dist/tools/test-impact-tools.d.ts.map +1 -0
- package/dist/tools/test-impact-tools.js +156 -0
- package/dist/tools/test-impact-tools.js.map +1 -0
- package/dist/tools/typecheck-tools.d.ts +39 -0
- package/dist/tools/typecheck-tools.d.ts.map +1 -0
- package/dist/tools/typecheck-tools.js +191 -0
- package/dist/tools/typecheck-tools.js.map +1 -0
- package/dist/tools/wiring-tools.d.ts +19 -0
- package/dist/tools/wiring-tools.d.ts.map +1 -0
- package/dist/tools/wiring-tools.js +147 -0
- package/dist/tools/wiring-tools.js.map +1 -0
- package/dist/types.d.ts +9 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/framework-detect.d.ts +18 -2
- package/dist/utils/framework-detect.d.ts.map +1 -1
- package/dist/utils/framework-detect.js +150 -3
- package/dist/utils/framework-detect.js.map +1 -1
- package/dist/utils/import-graph.d.ts +42 -0
- package/dist/utils/import-graph.d.ts.map +1 -1
- package/dist/utils/import-graph.js +248 -9
- package/dist/utils/import-graph.js.map +1 -1
- package/dist/utils/language-detect.d.ts +21 -0
- package/dist/utils/language-detect.d.ts.map +1 -0
- package/dist/utils/language-detect.js +183 -0
- package/dist/utils/language-detect.js.map +1 -0
- package/dist/utils/nextjs-ast-readers.d.ts +44 -0
- package/dist/utils/nextjs-ast-readers.d.ts.map +1 -0
- package/dist/utils/nextjs-ast-readers.js +341 -0
- package/dist/utils/nextjs-ast-readers.js.map +1 -0
- package/dist/utils/nextjs-audit-cache.d.ts +51 -0
- package/dist/utils/nextjs-audit-cache.d.ts.map +1 -0
- package/dist/utils/nextjs-audit-cache.js +116 -0
- package/dist/utils/nextjs-audit-cache.js.map +1 -0
- package/dist/utils/nextjs-metadata-readers.d.ts +65 -0
- package/dist/utils/nextjs-metadata-readers.d.ts.map +1 -0
- package/dist/utils/nextjs-metadata-readers.js +447 -0
- package/dist/utils/nextjs-metadata-readers.js.map +1 -0
- package/dist/utils/nextjs.d.ts +42 -0
- package/dist/utils/nextjs.d.ts.map +1 -0
- package/dist/utils/nextjs.js +284 -0
- package/dist/utils/nextjs.js.map +1 -0
- package/dist/utils/python-import-resolver.d.ts +42 -0
- package/dist/utils/python-import-resolver.d.ts.map +1 -0
- package/dist/utils/python-import-resolver.js +101 -0
- package/dist/utils/python-import-resolver.js.map +1 -0
- package/dist/utils/python-imports.d.ts +28 -0
- package/dist/utils/python-imports.d.ts.map +1 -0
- package/dist/utils/python-imports.js +117 -0
- package/dist/utils/python-imports.js.map +1 -0
- package/dist/utils/react-alias.d.ts +15 -0
- package/dist/utils/react-alias.d.ts.map +1 -0
- package/dist/utils/react-alias.js +31 -0
- package/dist/utils/react-alias.js.map +1 -0
- package/dist/utils/test-file.d.ts.map +1 -1
- package/dist/utils/test-file.js +7 -0
- package/dist/utils/test-file.js.map +1 -1
- package/dist/utils/walk.d.ts +22 -0
- package/dist/utils/walk.d.ts.map +1 -1
- package/dist/utils/walk.js +70 -2
- package/dist/utils/walk.js.map +1 -1
- package/package.json +4 -3
- package/rules/codesift.md +71 -5
- package/rules/codesift.mdc +71 -5
- package/rules/codex.md +71 -5
- package/rules/gemini.md +71 -5
- package/src/parser/languages/tree-sitter-javascript.wasm +0 -0
- package/src/parser/languages/tree-sitter-kotlin.wasm +0 -0
- package/src/parser/languages/tree-sitter-php.wasm +0 -0
- package/src/parser/languages/tree-sitter-php_only.wasm +0 -0
- package/src/parser/languages/tree-sitter-python.wasm +0 -0
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { readFile } from "node:fs/promises";
|
|
5
5
|
import { join } from "node:path";
|
|
6
|
+
import { getParser } from "../parser/parser-manager.js";
|
|
7
|
+
import { getCachedParse, setCachedParse } from "../parser/parse-cache.js";
|
|
8
|
+
import { extractPythonImports } from "./python-imports.js";
|
|
9
|
+
import { resolvePythonImport, detectSrcLayout } from "./python-import-resolver.js";
|
|
10
|
+
import { resolvePhpNamespace } from "../tools/php-tools.js";
|
|
6
11
|
// Patterns for detecting import statements across common languages
|
|
7
12
|
const IMPORT_PATTERNS = [
|
|
8
13
|
// ES modules: import ... from '...' or import ... from "..."
|
|
@@ -11,7 +16,27 @@ const IMPORT_PATTERNS = [
|
|
|
11
16
|
/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,
|
|
12
17
|
// CommonJS: require('...')
|
|
13
18
|
/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,
|
|
19
|
+
// PHP: require/include with relative path string: require __DIR__ . '/helpers.php';
|
|
20
|
+
/(?:require|include)(?:_once)?\s*\(?\s*(?:__DIR__\s*\.\s*)?['"](\.\.?\/[^'"]+\.php)['"]/g,
|
|
14
21
|
];
|
|
22
|
+
// Patterns for extracting PHP `use` statements (FQCN imports — PSR-4 based).
|
|
23
|
+
// These are NOT file paths; they need PSR-4 resolution via composer.json.
|
|
24
|
+
// Exposed separately so the resolver tool can opt-in.
|
|
25
|
+
//
|
|
26
|
+
// Accepts both UpperCase (PSR-1/2 modern) and lowercase (common in older
|
|
27
|
+
// Yii2 apps: `use app\models\Survey`) namespaces. The FQCN must contain at
|
|
28
|
+
// least one backslash to exclude global class imports like `use Closure;`
|
|
29
|
+
// and `use Yii;` which would be noise for the import graph.
|
|
30
|
+
//
|
|
31
|
+
// Two separate patterns:
|
|
32
|
+
// SINGLE — `use App\Models\User;` or `use App\Models\User as U;`
|
|
33
|
+
// GROUP — `use App\Models\{User, Post, Comment};` or with aliases
|
|
34
|
+
const PHP_USE_SINGLE_PATTERN = /^\s*use\s+(\w+(?:\\\w+)+)(?:\s+as\s+\w+)?\s*;/gm;
|
|
35
|
+
const PHP_USE_GROUP_PATTERN = /^\s*use\s+(\w+(?:\\\w+)*)\\\{([^}]+)\}\s*;/gm;
|
|
36
|
+
// Patterns for extracting Kotlin `import` statements (fully-qualified names).
|
|
37
|
+
// These are NOT file paths; they need heuristic resolution against source roots.
|
|
38
|
+
// Matches: `import com.example.UserService`, `import com.example.*`, `import com.example.Foo as Bar`
|
|
39
|
+
const KOTLIN_IMPORT_PATTERN = /^\s*import\s+([\w.]+(?:\.\*)?)(?:\s+as\s+\w+)?\s*$/gm;
|
|
15
40
|
/**
|
|
16
41
|
* Extract import paths from a source string.
|
|
17
42
|
* Returns relative paths only (skips node_modules / bare specifiers).
|
|
@@ -50,34 +75,189 @@ export function resolveImportPath(importerFile, importPath) {
|
|
|
50
75
|
}
|
|
51
76
|
}
|
|
52
77
|
let resolved = parts.join("/");
|
|
53
|
-
resolved = resolved.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/, "");
|
|
78
|
+
resolved = resolved.replace(/\.(astro|ts|tsx|js|jsx|mjs|cjs|php)$/, "");
|
|
54
79
|
return resolved;
|
|
55
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Extract PHP `use` statements (FQCN imports).
|
|
83
|
+
* Returns fully-qualified class/namespace names without the leading backslash.
|
|
84
|
+
* These are NOT file paths — they require PSR-4 resolution against composer.json.
|
|
85
|
+
*
|
|
86
|
+
* Handles both single-FQCN and grouped forms:
|
|
87
|
+
* `use App\Models\User;`
|
|
88
|
+
* `use App\Models\User as U;`
|
|
89
|
+
* `use App\Models\{User, Post, Comment};`
|
|
90
|
+
* `use App\{Models\User, Services\Auth as A};`
|
|
91
|
+
*/
|
|
92
|
+
export function extractPhpUseStatements(source) {
|
|
93
|
+
const uses = new Set();
|
|
94
|
+
// Single FQCN form
|
|
95
|
+
PHP_USE_SINGLE_PATTERN.lastIndex = 0;
|
|
96
|
+
let match;
|
|
97
|
+
while ((match = PHP_USE_SINGLE_PATTERN.exec(source)) !== null) {
|
|
98
|
+
const fqcn = match[1]?.replace(/^\\/, "");
|
|
99
|
+
if (fqcn)
|
|
100
|
+
uses.add(fqcn);
|
|
101
|
+
}
|
|
102
|
+
// Grouped form — split the brace content on commas, strip aliases,
|
|
103
|
+
// concatenate each fragment with the prefix.
|
|
104
|
+
PHP_USE_GROUP_PATTERN.lastIndex = 0;
|
|
105
|
+
while ((match = PHP_USE_GROUP_PATTERN.exec(source)) !== null) {
|
|
106
|
+
const prefix = match[1]?.replace(/^\\/, "");
|
|
107
|
+
const members = match[2];
|
|
108
|
+
if (!prefix || !members)
|
|
109
|
+
continue;
|
|
110
|
+
for (const raw of members.split(",")) {
|
|
111
|
+
// Strip `as Alias` and surrounding whitespace
|
|
112
|
+
const bare = raw.replace(/\s+as\s+\w+\s*$/, "").trim();
|
|
113
|
+
if (bare)
|
|
114
|
+
uses.add(`${prefix}\\${bare}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return [...uses];
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Extract Kotlin `import` statements (fully-qualified names).
|
|
121
|
+
* Returns dot-separated package + class names. Wildcards (`com.example.*`) are
|
|
122
|
+
* preserved as-is. These are NOT file paths — they require heuristic resolution
|
|
123
|
+
* against the source root (usually `src/main/kotlin`, `src/commonMain/kotlin`, etc.).
|
|
124
|
+
*/
|
|
125
|
+
export function extractKotlinImports(source) {
|
|
126
|
+
const imports = new Set();
|
|
127
|
+
KOTLIN_IMPORT_PATTERN.lastIndex = 0;
|
|
128
|
+
let match;
|
|
129
|
+
while ((match = KOTLIN_IMPORT_PATTERN.exec(source)) !== null) {
|
|
130
|
+
const fqName = match[1];
|
|
131
|
+
if (fqName)
|
|
132
|
+
imports.add(fqName);
|
|
133
|
+
}
|
|
134
|
+
return [...imports];
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Heuristically resolve a Kotlin fully-qualified import to an indexed file.
|
|
138
|
+
* Strategy: match the last segment of the FQN (the simple class name) against
|
|
139
|
+
* file basenames. For `com.example.service.UserService`, tries to find a file
|
|
140
|
+
* whose basename (without .kt/.kts) is `UserService` AND whose path contains
|
|
141
|
+
* the package path `com/example/service`.
|
|
142
|
+
*
|
|
143
|
+
* Returns the matched file path or null if no match.
|
|
144
|
+
*
|
|
145
|
+
* Limitations: single-repo heuristic. Doesn't handle wildcard imports
|
|
146
|
+
* (`com.example.*`) or multi-module setups with complex source roots.
|
|
147
|
+
*/
|
|
148
|
+
export function resolveKotlinImport(fqName, kotlinFilesByBasename) {
|
|
149
|
+
// Skip wildcard imports — can't resolve to a single file
|
|
150
|
+
if (fqName.endsWith(".*"))
|
|
151
|
+
return null;
|
|
152
|
+
// Skip standard library / third-party (no way to index jar files)
|
|
153
|
+
if (fqName.startsWith("kotlin.") || fqName.startsWith("java.") ||
|
|
154
|
+
fqName.startsWith("javax.") || fqName.startsWith("android.") ||
|
|
155
|
+
fqName.startsWith("androidx.") || fqName.startsWith("org.jetbrains.") ||
|
|
156
|
+
fqName.startsWith("org.junit.")) {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
const parts = fqName.split(".");
|
|
160
|
+
if (parts.length < 2)
|
|
161
|
+
return null;
|
|
162
|
+
const simpleName = parts[parts.length - 1];
|
|
163
|
+
const packagePath = parts.slice(0, -1).join("/");
|
|
164
|
+
const candidates = kotlinFilesByBasename.get(simpleName);
|
|
165
|
+
if (!candidates)
|
|
166
|
+
return null;
|
|
167
|
+
// Prefer candidate whose path contains the package path
|
|
168
|
+
for (const candidate of candidates) {
|
|
169
|
+
if (candidate.includes(packagePath))
|
|
170
|
+
return candidate;
|
|
171
|
+
}
|
|
172
|
+
// Fallback: if only one candidate, return it (common in small projects)
|
|
173
|
+
if (candidates.length === 1)
|
|
174
|
+
return candidates[0] ?? null;
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Build a lookup map from Kotlin file basenames (without extension) to file paths.
|
|
179
|
+
* Used by resolveKotlinImport for heuristic FQN resolution.
|
|
180
|
+
*/
|
|
181
|
+
export function buildKotlinFilesByBasename(index) {
|
|
182
|
+
const map = new Map();
|
|
183
|
+
for (const file of index.files) {
|
|
184
|
+
if (!/\.kts?$/.test(file.path))
|
|
185
|
+
continue;
|
|
186
|
+
const basename = file.path
|
|
187
|
+
.slice(file.path.lastIndexOf("/") + 1)
|
|
188
|
+
.replace(/\.kts?$/, "");
|
|
189
|
+
const existing = map.get(basename);
|
|
190
|
+
if (existing) {
|
|
191
|
+
existing.push(file.path);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
map.set(basename, [file.path]);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return map;
|
|
198
|
+
}
|
|
56
199
|
/**
|
|
57
200
|
* Build normalized path map for matching imports to indexed files.
|
|
58
201
|
*/
|
|
59
202
|
export function buildNormalizedPathMap(index) {
|
|
60
203
|
const normalizedPaths = new Map();
|
|
61
204
|
for (const file of index.files) {
|
|
62
|
-
const normalized = file.path.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/, "");
|
|
205
|
+
const normalized = file.path.replace(/\.(astro|ts|tsx|js|jsx|mjs|cjs|php|kt|kts|py)$/, "");
|
|
63
206
|
normalizedPaths.set(normalized, file.path);
|
|
64
207
|
if (normalized.endsWith("/index")) {
|
|
65
208
|
normalizedPaths.set(normalized.slice(0, -6), file.path);
|
|
66
209
|
}
|
|
210
|
+
// Python package index: map `foo/__init__` → `foo`
|
|
211
|
+
if (normalized.endsWith("/__init__")) {
|
|
212
|
+
normalizedPaths.set(normalized.slice(0, -9), file.path);
|
|
213
|
+
}
|
|
67
214
|
}
|
|
68
215
|
return normalizedPaths;
|
|
69
216
|
}
|
|
70
217
|
/**
|
|
71
218
|
* Collect all import edges between files in the index.
|
|
72
219
|
* Reads file source from disk to extract import statements.
|
|
220
|
+
* Handles JS/TS/PHP relative imports AND Kotlin fully-qualified imports
|
|
221
|
+
* (via heuristic basename + package-path matching).
|
|
73
222
|
*/
|
|
74
223
|
export async function collectImportEdges(index, fileFilter) {
|
|
75
224
|
const normalizedPaths = buildNormalizedPathMap(index);
|
|
225
|
+
const kotlinFilesByBasename = buildKotlinFilesByBasename(index);
|
|
76
226
|
const edgeSet = new Set();
|
|
77
227
|
const edges = [];
|
|
228
|
+
// Rollback kill switch — skip Python import extraction if env var set
|
|
229
|
+
const pythonDisabled = process.env.CODESIFT_DISABLE_PYTHON_IMPORTS === "1";
|
|
230
|
+
// Python needs the full indexed file set for package resolution — built once
|
|
231
|
+
const indexedPyFileSet = new Set(index.files.filter((f) => f.path.endsWith(".py")).map((f) => f.path));
|
|
232
|
+
const pySrcLayout = indexedPyFileSet.size > 0
|
|
233
|
+
? detectSrcLayout([...indexedPyFileSet])
|
|
234
|
+
: null;
|
|
78
235
|
const files = fileFilter
|
|
79
236
|
? index.files.filter((f) => fileFilter.has(f.path))
|
|
80
237
|
: index.files;
|
|
238
|
+
const addEdge = (from, to, extras) => {
|
|
239
|
+
if (to === from)
|
|
240
|
+
return;
|
|
241
|
+
const edgeKey = `${from}->${to}`;
|
|
242
|
+
if (edgeSet.has(edgeKey)) {
|
|
243
|
+
// Upgrade: runtime import overrides a prior type_only edge
|
|
244
|
+
if (!extras?.type_only) {
|
|
245
|
+
const existing = edges.find((e) => e.from === from && e.to === to);
|
|
246
|
+
if (existing?.type_only)
|
|
247
|
+
existing.type_only = false;
|
|
248
|
+
}
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
edgeSet.add(edgeKey);
|
|
252
|
+
const edge = { from, to };
|
|
253
|
+
if (extras?.type_only)
|
|
254
|
+
edge.type_only = true;
|
|
255
|
+
if (extras?.star_import)
|
|
256
|
+
edge.star_import = true;
|
|
257
|
+
if (extras?.raw)
|
|
258
|
+
edge.raw = extras.raw;
|
|
259
|
+
edges.push(edge);
|
|
260
|
+
};
|
|
81
261
|
for (const file of files) {
|
|
82
262
|
let source;
|
|
83
263
|
try {
|
|
@@ -86,17 +266,76 @@ export async function collectImportEdges(index, fileFilter) {
|
|
|
86
266
|
catch {
|
|
87
267
|
continue;
|
|
88
268
|
}
|
|
269
|
+
// Relative-path imports (JS/TS/PHP)
|
|
89
270
|
const importPaths = extractImports(source);
|
|
90
271
|
for (const importPath of importPaths) {
|
|
91
272
|
const resolved = resolveImportPath(file.path, importPath);
|
|
92
273
|
const targetFile = normalizedPaths.get(resolved);
|
|
93
|
-
if (
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
274
|
+
if (targetFile)
|
|
275
|
+
addEdge(file.path, targetFile);
|
|
276
|
+
}
|
|
277
|
+
// Kotlin fully-qualified imports (.kt/.kts files only)
|
|
278
|
+
if (/\.kts?$/.test(file.path)) {
|
|
279
|
+
const kotlinImports = extractKotlinImports(source);
|
|
280
|
+
for (const fqName of kotlinImports) {
|
|
281
|
+
const targetFile = resolveKotlinImport(fqName, kotlinFilesByBasename);
|
|
282
|
+
if (targetFile)
|
|
283
|
+
addEdge(file.path, targetFile);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// PHP cross-file edges via PSR-4 `use` statement resolution.
|
|
287
|
+
// Creates edges like: PostController.php → User.php when we see
|
|
288
|
+
// `use App\Models\User;` and composer.json maps `App\` to `src/`.
|
|
289
|
+
if (file.path.endsWith(".php")) {
|
|
290
|
+
const uses = extractPhpUseStatements(source);
|
|
291
|
+
for (const fqcn of uses) {
|
|
292
|
+
try {
|
|
293
|
+
const resolved = await resolvePhpNamespace(index.repo, fqcn);
|
|
294
|
+
if (resolved.exists && resolved.file_path) {
|
|
295
|
+
const candidate = resolved.file_path.replace(/^\.\//, "");
|
|
296
|
+
// Prefer the exact indexed path (handles prefixes like "./src/")
|
|
297
|
+
const targetFile = index.files.some((f) => f.path === candidate)
|
|
298
|
+
? candidate
|
|
299
|
+
: normalizedPaths.get(candidate.replace(/\.php$/, "")) ?? null;
|
|
300
|
+
if (targetFile && targetFile !== file.path) {
|
|
301
|
+
addEdge(file.path, targetFile);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
// Missing composer.json, malformed PSR-4, etc. — skip edge, don't crash.
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
// Python imports via tree-sitter AST + package-aware resolution.
|
|
311
|
+
// Uses parse cache to avoid re-parsing files already parsed by the
|
|
312
|
+
// symbol extractor pipeline — Python files are the only ones parsed
|
|
313
|
+
// twice per index (once for symbols, once for imports here).
|
|
314
|
+
if (!pythonDisabled && file.path.endsWith(".py")) {
|
|
315
|
+
try {
|
|
316
|
+
const parser = await getParser("python");
|
|
317
|
+
if (parser) {
|
|
318
|
+
let tree = getCachedParse("python", source);
|
|
319
|
+
if (!tree) {
|
|
320
|
+
tree = parser.parse(source);
|
|
321
|
+
setCachedParse("python", source, tree);
|
|
322
|
+
}
|
|
323
|
+
const pyImports = extractPythonImports(tree);
|
|
324
|
+
for (const imp of pyImports) {
|
|
325
|
+
const targetFile = resolvePythonImport({ module: imp.module, level: imp.level }, file.path, indexedPyFileSet, pySrcLayout);
|
|
326
|
+
if (targetFile) {
|
|
327
|
+
addEdge(file.path, targetFile, {
|
|
328
|
+
type_only: imp.is_type_only,
|
|
329
|
+
star_import: imp.is_star,
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
catch (err) {
|
|
336
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
337
|
+
console.warn(`[import-graph] python extraction failed for ${file.path}: ${message}`);
|
|
338
|
+
}
|
|
100
339
|
}
|
|
101
340
|
}
|
|
102
341
|
return edges;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-graph.js","sourceRoot":"","sources":["../../src/utils/import-graph.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"import-graph.js","sourceRoot":"","sources":["../../src/utils/import-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ProjectLanguages {
|
|
2
|
+
python: boolean;
|
|
3
|
+
php: boolean;
|
|
4
|
+
typescript: boolean;
|
|
5
|
+
javascript: boolean;
|
|
6
|
+
kotlin: boolean;
|
|
7
|
+
go: boolean;
|
|
8
|
+
rust: boolean;
|
|
9
|
+
ruby: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Scan a directory for source file extensions, returning which languages
|
|
13
|
+
* are present. Short-circuits once all tracked languages are found.
|
|
14
|
+
*/
|
|
15
|
+
export declare function detectProjectLanguages(root: string): Promise<ProjectLanguages>;
|
|
16
|
+
/**
|
|
17
|
+
* Synchronous variant for use during server startup where top-level await
|
|
18
|
+
* isn't convenient. Uses readdirSync. Caps at MAX_FILES_SCANNED.
|
|
19
|
+
*/
|
|
20
|
+
export declare function detectProjectLanguagesSync(root: string): ProjectLanguages;
|
|
21
|
+
//# sourceMappingURL=language-detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-detect.d.ts","sourceRoot":"","sources":["../../src/utils/language-detect.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf;AAyCD;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwDpF;AAOD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CA2DzE"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quick language detection for a project directory — runs BEFORE indexing.
|
|
3
|
+
*
|
|
4
|
+
* Used by registerTools() to gate language-specific tools behind language
|
|
5
|
+
* presence: PHP tools only surface if the project has .php files, Python
|
|
6
|
+
* tools only surface if the project has .py files, etc.
|
|
7
|
+
*
|
|
8
|
+
* Performance: fast file-tree walk with early-exit per language. Caps at
|
|
9
|
+
* ~2000 files to avoid slow startup on huge monorepos.
|
|
10
|
+
*/
|
|
11
|
+
import { readdir, stat } from "node:fs/promises";
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
const IGNORE_DIRS = new Set([
|
|
14
|
+
"node_modules",
|
|
15
|
+
".git",
|
|
16
|
+
"dist",
|
|
17
|
+
"build",
|
|
18
|
+
"target",
|
|
19
|
+
".venv",
|
|
20
|
+
"venv",
|
|
21
|
+
"__pycache__",
|
|
22
|
+
".pytest_cache",
|
|
23
|
+
".mypy_cache",
|
|
24
|
+
".next",
|
|
25
|
+
".nuxt",
|
|
26
|
+
"vendor", // PHP composer deps
|
|
27
|
+
"site-packages", // inside .venv
|
|
28
|
+
".tox",
|
|
29
|
+
"coverage",
|
|
30
|
+
".idea",
|
|
31
|
+
".vscode",
|
|
32
|
+
]);
|
|
33
|
+
const EXTENSION_MAP = {
|
|
34
|
+
".py": "python",
|
|
35
|
+
".php": "php",
|
|
36
|
+
".ts": "typescript",
|
|
37
|
+
".tsx": "typescript",
|
|
38
|
+
".js": "javascript",
|
|
39
|
+
".jsx": "javascript",
|
|
40
|
+
".mjs": "javascript",
|
|
41
|
+
".cjs": "javascript",
|
|
42
|
+
".kt": "kotlin",
|
|
43
|
+
".kts": "kotlin",
|
|
44
|
+
".go": "go",
|
|
45
|
+
".rs": "rust",
|
|
46
|
+
".rb": "ruby",
|
|
47
|
+
};
|
|
48
|
+
const MAX_FILES_SCANNED = 2000;
|
|
49
|
+
/**
|
|
50
|
+
* Scan a directory for source file extensions, returning which languages
|
|
51
|
+
* are present. Short-circuits once all tracked languages are found.
|
|
52
|
+
*/
|
|
53
|
+
export async function detectProjectLanguages(root) {
|
|
54
|
+
const found = {
|
|
55
|
+
python: false,
|
|
56
|
+
php: false,
|
|
57
|
+
typescript: false,
|
|
58
|
+
javascript: false,
|
|
59
|
+
kotlin: false,
|
|
60
|
+
go: false,
|
|
61
|
+
rust: false,
|
|
62
|
+
ruby: false,
|
|
63
|
+
};
|
|
64
|
+
let filesScanned = 0;
|
|
65
|
+
async function walk(dir) {
|
|
66
|
+
if (filesScanned >= MAX_FILES_SCANNED)
|
|
67
|
+
return;
|
|
68
|
+
if (allDetected(found))
|
|
69
|
+
return;
|
|
70
|
+
let entries;
|
|
71
|
+
try {
|
|
72
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
for (const entry of entries) {
|
|
78
|
+
if (filesScanned >= MAX_FILES_SCANNED)
|
|
79
|
+
return;
|
|
80
|
+
if (allDetected(found))
|
|
81
|
+
return;
|
|
82
|
+
if (entry.name.startsWith(".") && entry.name !== ".github")
|
|
83
|
+
continue;
|
|
84
|
+
if (IGNORE_DIRS.has(entry.name))
|
|
85
|
+
continue;
|
|
86
|
+
const fullPath = join(dir, entry.name);
|
|
87
|
+
if (entry.isDirectory()) {
|
|
88
|
+
await walk(fullPath);
|
|
89
|
+
}
|
|
90
|
+
else if (entry.isFile()) {
|
|
91
|
+
filesScanned++;
|
|
92
|
+
const dot = entry.name.lastIndexOf(".");
|
|
93
|
+
if (dot === -1)
|
|
94
|
+
continue;
|
|
95
|
+
const ext = entry.name.slice(dot);
|
|
96
|
+
const lang = EXTENSION_MAP[ext];
|
|
97
|
+
if (lang)
|
|
98
|
+
found[lang] = true;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
const rootStat = await stat(root);
|
|
104
|
+
if (!rootStat.isDirectory())
|
|
105
|
+
return found;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return found;
|
|
109
|
+
}
|
|
110
|
+
await walk(root);
|
|
111
|
+
return found;
|
|
112
|
+
}
|
|
113
|
+
function allDetected(found) {
|
|
114
|
+
return found.python && found.php && found.typescript && found.javascript
|
|
115
|
+
&& found.kotlin && found.go && found.rust && found.ruby;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Synchronous variant for use during server startup where top-level await
|
|
119
|
+
* isn't convenient. Uses readdirSync. Caps at MAX_FILES_SCANNED.
|
|
120
|
+
*/
|
|
121
|
+
export function detectProjectLanguagesSync(root) {
|
|
122
|
+
const found = {
|
|
123
|
+
python: false,
|
|
124
|
+
php: false,
|
|
125
|
+
typescript: false,
|
|
126
|
+
javascript: false,
|
|
127
|
+
kotlin: false,
|
|
128
|
+
go: false,
|
|
129
|
+
rust: false,
|
|
130
|
+
ruby: false,
|
|
131
|
+
};
|
|
132
|
+
// Dynamic require to avoid import-order issues in ESM
|
|
133
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
134
|
+
const { readdirSync, statSync } = require("node:fs");
|
|
135
|
+
let filesScanned = 0;
|
|
136
|
+
function walk(dir) {
|
|
137
|
+
if (filesScanned >= MAX_FILES_SCANNED)
|
|
138
|
+
return;
|
|
139
|
+
if (allDetected(found))
|
|
140
|
+
return;
|
|
141
|
+
let entries;
|
|
142
|
+
try {
|
|
143
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
for (const entry of entries) {
|
|
149
|
+
if (filesScanned >= MAX_FILES_SCANNED)
|
|
150
|
+
return;
|
|
151
|
+
if (allDetected(found))
|
|
152
|
+
return;
|
|
153
|
+
if (entry.name.startsWith(".") && entry.name !== ".github")
|
|
154
|
+
continue;
|
|
155
|
+
if (IGNORE_DIRS.has(entry.name))
|
|
156
|
+
continue;
|
|
157
|
+
const fullPath = join(dir, entry.name);
|
|
158
|
+
if (entry.isDirectory()) {
|
|
159
|
+
walk(fullPath);
|
|
160
|
+
}
|
|
161
|
+
else if (entry.isFile()) {
|
|
162
|
+
filesScanned++;
|
|
163
|
+
const dot = entry.name.lastIndexOf(".");
|
|
164
|
+
if (dot === -1)
|
|
165
|
+
continue;
|
|
166
|
+
const ext = entry.name.slice(dot);
|
|
167
|
+
const lang = EXTENSION_MAP[ext];
|
|
168
|
+
if (lang)
|
|
169
|
+
found[lang] = true;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
try {
|
|
174
|
+
if (!statSync(root).isDirectory())
|
|
175
|
+
return found;
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return found;
|
|
179
|
+
}
|
|
180
|
+
walk(root);
|
|
181
|
+
return found;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=language-detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-detect.js","sourceRoot":"","sources":["../../src/utils/language-detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type Parser from "web-tree-sitter";
|
|
2
|
+
export interface ZodFieldType {
|
|
3
|
+
type: string;
|
|
4
|
+
constraints?: string[];
|
|
5
|
+
nested?: Record<string, ZodFieldType>;
|
|
6
|
+
optional?: boolean;
|
|
7
|
+
nullable?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ZodShape {
|
|
10
|
+
fields: Record<string, ZodFieldType>;
|
|
11
|
+
partial: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Extract the shape of a top-level Zod schema from a source tree.
|
|
15
|
+
*
|
|
16
|
+
* Walks `variable_declarator` nodes and tries each one's initializer. Returns
|
|
17
|
+
* the first successfully parsed Zod schema, or `null` when no z.object(...) is
|
|
18
|
+
* found. Other validation libraries (Yup, Joi, etc.) intentionally return null
|
|
19
|
+
* — downstream tools wrap this and add `schema_lib: "unknown"` at their own
|
|
20
|
+
* aggregation level.
|
|
21
|
+
*/
|
|
22
|
+
export declare function extractZodSchema(tree: Parser.Tree, _source: string): ZodShape | null;
|
|
23
|
+
export type LinkRefKind = "link" | "router_push" | "router_replace";
|
|
24
|
+
export interface LinkRef {
|
|
25
|
+
/** Literal href value when isDynamic=false; raw expression text otherwise. */
|
|
26
|
+
href: string;
|
|
27
|
+
/** True if the href is a template literal with substitutions or a non-literal expression. */
|
|
28
|
+
isDynamic: boolean;
|
|
29
|
+
/** 1-indexed line number of the attribute / call site. */
|
|
30
|
+
line: number;
|
|
31
|
+
/** The kind of navigation source. */
|
|
32
|
+
kind: LinkRefKind;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Extract navigation target references from a parsed tree:
|
|
36
|
+
* - `<Link href="/path">` JSX components
|
|
37
|
+
* - `router.push("/path")` / `router.replace("/path")` call sites
|
|
38
|
+
*
|
|
39
|
+
* Literal string values populate `href` with the unquoted content and
|
|
40
|
+
* `isDynamic: false`. Template literals with substitutions and identifier
|
|
41
|
+
* references populate `href` with the raw expression text and `isDynamic: true`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function extractLinkHrefs(tree: Parser.Tree, _source: string): LinkRef[];
|
|
44
|
+
//# sourceMappingURL=nextjs-ast-readers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nextjs-ast-readers.d.ts","sourceRoot":"","sources":["../../src/utils/nextjs-ast-readers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAgF1C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;CAClB;AAkHD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAqBpF;AAMD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAEpE,MAAM,WAAW,OAAO;IACtB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,6FAA6F;IAC7F,SAAS,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAgG9E"}
|