codesift-mcp 0.13.1 → 0.15.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 +5 -1
- package/dist/cli/commands-admin.d.ts +18 -0
- package/dist/cli/commands-admin.d.ts.map +1 -0
- package/dist/cli/commands-admin.js +187 -0
- package/dist/cli/commands-admin.js.map +1 -0
- package/dist/cli/commands-daemon.d.ts +42 -0
- package/dist/cli/commands-daemon.d.ts.map +1 -0
- package/dist/cli/commands-daemon.js +163 -0
- package/dist/cli/commands-daemon.js.map +1 -0
- package/dist/cli/commands-index.d.ts +12 -0
- package/dist/cli/commands-index.d.ts.map +1 -0
- package/dist/cli/commands-index.js +133 -0
- package/dist/cli/commands-index.js.map +1 -0
- package/dist/cli/commands-maintenance.d.ts +12 -0
- package/dist/cli/commands-maintenance.d.ts.map +1 -0
- package/dist/cli/commands-maintenance.js +409 -0
- package/dist/cli/commands-maintenance.js.map +1 -0
- package/dist/cli/commands-query.d.ts +21 -0
- package/dist/cli/commands-query.d.ts.map +1 -0
- package/dist/cli/commands-query.js +270 -0
- package/dist/cli/commands-query.js.map +1 -0
- package/dist/cli/commands.d.ts +2 -36
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +8 -854
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/embed-child.js +13 -2
- package/dist/cli/embed-child.js.map +1 -1
- package/dist/cli/hooks/pre-tool-use.d.ts +1 -0
- package/dist/cli/hooks/pre-tool-use.d.ts.map +1 -1
- package/dist/cli/hooks/pre-tool-use.js +11 -2
- package/dist/cli/hooks/pre-tool-use.js.map +1 -1
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -0
- package/dist/config.js.map +1 -1
- package/dist/formatters-core.d.ts +7 -0
- package/dist/formatters-core.d.ts.map +1 -1
- package/dist/formatters-core.js +14 -3
- package/dist/formatters-core.js.map +1 -1
- package/dist/instructions.d.ts +1 -1
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +5 -2
- package/dist/instructions.js.map +1 -1
- package/dist/parser/extractors/hono-inline-analyzer.js +2 -2
- package/dist/parser/extractors/hono-inline-analyzer.js.map +1 -1
- package/dist/parser/extractors/php-class-metadata.d.ts +10 -0
- package/dist/parser/extractors/php-class-metadata.d.ts.map +1 -0
- package/dist/parser/extractors/php-class-metadata.js +65 -0
- package/dist/parser/extractors/php-class-metadata.js.map +1 -0
- package/dist/parser/extractors/php-doc.d.ts +13 -0
- package/dist/parser/extractors/php-doc.d.ts.map +1 -0
- package/dist/parser/extractors/php-doc.js +39 -0
- package/dist/parser/extractors/php-doc.js.map +1 -0
- package/dist/parser/extractors/php-node-metadata.d.ts +26 -0
- package/dist/parser/extractors/php-node-metadata.d.ts.map +1 -0
- package/dist/parser/extractors/php-node-metadata.js +132 -0
- package/dist/parser/extractors/php-node-metadata.js.map +1 -0
- package/dist/parser/extractors/php-symbol-builders.d.ts +13 -0
- package/dist/parser/extractors/php-symbol-builders.d.ts.map +1 -0
- package/dist/parser/extractors/php-symbol-builders.js +58 -0
- package/dist/parser/extractors/php-symbol-builders.js.map +1 -0
- package/dist/parser/extractors/php-walker.d.ts +4 -0
- package/dist/parser/extractors/php-walker.d.ts.map +1 -0
- package/dist/parser/extractors/php-walker.js +238 -0
- package/dist/parser/extractors/php-walker.js.map +1 -0
- package/dist/parser/extractors/php.d.ts +2 -33
- package/dist/parser/extractors/php.d.ts.map +1 -1
- package/dist/parser/extractors/php.js +2 -747
- package/dist/parser/extractors/php.js.map +1 -1
- package/dist/register-tool-groups/core/search.d.ts.map +1 -1
- package/dist/register-tool-groups/core/search.js +14 -0
- package/dist/register-tool-groups/core/search.js.map +1 -1
- package/dist/register-tool-groups/core/symbols.d.ts.map +1 -1
- package/dist/register-tool-groups/core/symbols.js +50 -5
- package/dist/register-tool-groups/core/symbols.js.map +1 -1
- package/dist/register-tool-loaders.d.ts +11 -11
- package/dist/register-tool-loaders.d.ts.map +1 -1
- package/dist/register-tools/runtime.d.ts +11 -0
- package/dist/register-tools/runtime.d.ts.map +1 -1
- package/dist/register-tools/runtime.js +40 -0
- package/dist/register-tools/runtime.js.map +1 -1
- package/dist/register-tools.d.ts.map +1 -1
- package/dist/register-tools.js +5 -1
- package/dist/register-tools.js.map +1 -1
- package/dist/retrieval/semantic-handlers.d.ts.map +1 -1
- package/dist/retrieval/semantic-handlers.js +10 -3
- package/dist/retrieval/semantic-handlers.js.map +1 -1
- package/dist/search/semantic.d.ts +2 -0
- package/dist/search/semantic.d.ts.map +1 -1
- package/dist/search/semantic.js +41 -9
- package/dist/search/semantic.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +54 -2
- package/dist/server.js.map +1 -1
- package/dist/storage/_shared.d.ts +21 -0
- package/dist/storage/_shared.d.ts.map +1 -1
- package/dist/storage/_shared.js +36 -0
- package/dist/storage/_shared.js.map +1 -1
- package/dist/storage/chunk-store.d.ts +14 -2
- package/dist/storage/chunk-store.d.ts.map +1 -1
- package/dist/storage/chunk-store.js +214 -34
- package/dist/storage/chunk-store.js.map +1 -1
- package/dist/storage/embedding-store.d.ts +0 -12
- package/dist/storage/embedding-store.d.ts.map +1 -1
- package/dist/storage/embedding-store.js +69 -9
- package/dist/storage/embedding-store.js.map +1 -1
- package/dist/storage/index-cache.d.ts +12 -0
- package/dist/storage/index-cache.d.ts.map +1 -0
- package/dist/storage/index-cache.js +89 -0
- package/dist/storage/index-cache.js.map +1 -0
- package/dist/storage/index-footprint.d.ts +12 -0
- package/dist/storage/index-footprint.d.ts.map +1 -0
- package/dist/storage/index-footprint.js +41 -0
- package/dist/storage/index-footprint.js.map +1 -0
- package/dist/storage/index-json-mutations.d.ts +11 -0
- package/dist/storage/index-json-mutations.d.ts.map +1 -0
- package/dist/storage/index-json-mutations.js +93 -0
- package/dist/storage/index-json-mutations.js.map +1 -0
- package/dist/storage/index-migration.d.ts +22 -0
- package/dist/storage/index-migration.d.ts.map +1 -0
- package/dist/storage/index-migration.js +80 -0
- package/dist/storage/index-migration.js.map +1 -0
- package/dist/storage/index-store.d.ts +26 -55
- package/dist/storage/index-store.d.ts.map +1 -1
- package/dist/storage/index-store.js +82 -350
- package/dist/storage/index-store.js.map +1 -1
- package/dist/storage/index-version.d.ts +39 -0
- package/dist/storage/index-version.d.ts.map +1 -0
- package/dist/storage/index-version.js +87 -0
- package/dist/storage/index-version.js.map +1 -0
- package/dist/storage/registry.d.ts +9 -1
- package/dist/storage/registry.d.ts.map +1 -1
- package/dist/storage/registry.js +233 -9
- package/dist/storage/registry.js.map +1 -1
- package/dist/storage/shared-embedding-cache.d.ts +23 -3
- package/dist/storage/shared-embedding-cache.d.ts.map +1 -1
- package/dist/storage/shared-embedding-cache.js +300 -45
- package/dist/storage/shared-embedding-cache.js.map +1 -1
- package/dist/storage/sqlite/accessors.d.ts +34 -0
- package/dist/storage/sqlite/accessors.d.ts.map +1 -0
- package/dist/storage/sqlite/accessors.js +178 -0
- package/dist/storage/sqlite/accessors.js.map +1 -0
- package/dist/storage/sqlite/connection.d.ts +43 -0
- package/dist/storage/sqlite/connection.d.ts.map +1 -0
- package/dist/storage/sqlite/connection.js +241 -0
- package/dist/storage/sqlite/connection.js.map +1 -0
- package/dist/storage/sqlite/errors.d.ts +38 -0
- package/dist/storage/sqlite/errors.d.ts.map +1 -0
- package/dist/storage/sqlite/errors.js +150 -0
- package/dist/storage/sqlite/errors.js.map +1 -0
- package/dist/storage/sqlite/index-io.d.ts +49 -0
- package/dist/storage/sqlite/index-io.d.ts.map +1 -0
- package/dist/storage/sqlite/index-io.js +268 -0
- package/dist/storage/sqlite/index-io.js.map +1 -0
- package/dist/storage/sqlite/meta.d.ts +41 -0
- package/dist/storage/sqlite/meta.d.ts.map +1 -0
- package/dist/storage/sqlite/meta.js +28 -0
- package/dist/storage/sqlite/meta.js.map +1 -0
- package/dist/storage/sqlite/rows.d.ts +64 -0
- package/dist/storage/sqlite/rows.d.ts.map +1 -0
- package/dist/storage/sqlite/rows.js +186 -0
- package/dist/storage/sqlite/rows.js.map +1 -0
- package/dist/storage/sqlite/runtime.d.ts +6 -0
- package/dist/storage/sqlite/runtime.d.ts.map +1 -0
- package/dist/storage/sqlite/runtime.js +31 -0
- package/dist/storage/sqlite/runtime.js.map +1 -0
- package/dist/storage/sqlite/schema.d.ts +34 -0
- package/dist/storage/sqlite/schema.d.ts.map +1 -0
- package/dist/storage/sqlite/schema.js +98 -0
- package/dist/storage/sqlite/schema.js.map +1 -0
- package/dist/storage/sqlite-index-store.d.ts +40 -80
- package/dist/storage/sqlite-index-store.d.ts.map +1 -1
- package/dist/storage/sqlite-index-store.js +32 -577
- package/dist/storage/sqlite-index-store.js.map +1 -1
- package/dist/storage/telemetry/config.d.ts.map +1 -1
- package/dist/storage/telemetry/config.js +15 -3
- package/dist/storage/telemetry/config.js.map +1 -1
- package/dist/storage/telemetry/payload.d.ts.map +1 -1
- package/dist/storage/telemetry/payload.js +4 -1
- package/dist/storage/telemetry/payload.js.map +1 -1
- package/dist/storage/telemetry/retro-aggregator.d.ts +48 -0
- package/dist/storage/telemetry/retro-aggregator.d.ts.map +1 -0
- package/dist/storage/telemetry/retro-aggregator.js +221 -0
- package/dist/storage/telemetry/retro-aggregator.js.map +1 -0
- package/dist/storage/telemetry/sanitizer.d.ts +46 -0
- package/dist/storage/telemetry/sanitizer.d.ts.map +1 -1
- package/dist/storage/telemetry/sanitizer.js +25 -0
- package/dist/storage/telemetry/sanitizer.js.map +1 -1
- package/dist/storage/telemetry/uploader.d.ts +3 -1
- package/dist/storage/telemetry/uploader.d.ts.map +1 -1
- package/dist/storage/telemetry/uploader.js +161 -18
- package/dist/storage/telemetry/uploader.js.map +1 -1
- package/dist/storage/workspace-resolver.js +1 -1
- package/dist/storage/workspace-resolver.js.map +1 -1
- package/dist/tools/cross-repo-contract-adapters.d.ts +39 -0
- package/dist/tools/cross-repo-contract-adapters.d.ts.map +1 -0
- package/dist/tools/cross-repo-contract-adapters.js +70 -0
- package/dist/tools/cross-repo-contract-adapters.js.map +1 -0
- package/dist/tools/cross-repo-contract-group.d.ts +17 -0
- package/dist/tools/cross-repo-contract-group.d.ts.map +1 -0
- package/dist/tools/cross-repo-contract-group.js +89 -0
- package/dist/tools/cross-repo-contract-group.js.map +1 -0
- package/dist/tools/cross-repo-contract-matcher.d.ts +24 -0
- package/dist/tools/cross-repo-contract-matcher.d.ts.map +1 -0
- package/dist/tools/cross-repo-contract-matcher.js +134 -0
- package/dist/tools/cross-repo-contract-matcher.js.map +1 -0
- package/dist/tools/cross-repo-contract-resolver.d.ts +9 -0
- package/dist/tools/cross-repo-contract-resolver.d.ts.map +1 -0
- package/dist/tools/cross-repo-contract-resolver.js +86 -0
- package/dist/tools/cross-repo-contract-resolver.js.map +1 -0
- package/dist/tools/cross-repo-contract-tools.d.ts +12 -135
- package/dist/tools/cross-repo-contract-tools.d.ts.map +1 -1
- package/dist/tools/cross-repo-contract-tools.js +8 -589
- package/dist/tools/cross-repo-contract-tools.js.map +1 -1
- package/dist/tools/cross-repo-contract-types.d.ts +30 -0
- package/dist/tools/cross-repo-contract-types.d.ts.map +1 -0
- package/dist/tools/cross-repo-contract-types.js +3 -0
- package/dist/tools/cross-repo-contract-types.js.map +1 -0
- package/dist/tools/cross-repo-outbound-calls.d.ts +28 -0
- package/dist/tools/cross-repo-outbound-calls.d.ts.map +1 -0
- package/dist/tools/cross-repo-outbound-calls.js +347 -0
- package/dist/tools/cross-repo-outbound-calls.js.map +1 -0
- package/dist/tools/cross-repo-outbound-lexer/call-detectors.d.ts.map +1 -1
- package/dist/tools/cross-repo-outbound-lexer/call-detectors.js +2 -0
- package/dist/tools/cross-repo-outbound-lexer/call-detectors.js.map +1 -1
- package/dist/tools/cross-repo-outbound-lexer/types.d.ts +2 -0
- package/dist/tools/cross-repo-outbound-lexer/types.d.ts.map +1 -1
- package/dist/tools/index-tools/file-indexer.js +3 -3
- package/dist/tools/index-tools/file-indexer.js.map +1 -1
- package/dist/tools/index-tools/folder-indexer.d.ts.map +1 -1
- package/dist/tools/index-tools/folder-indexer.js +51 -3
- package/dist/tools/index-tools/folder-indexer.js.map +1 -1
- package/dist/tools/index-tools/parse.d.ts +12 -3
- package/dist/tools/index-tools/parse.d.ts.map +1 -1
- package/dist/tools/index-tools/parse.js +33 -8
- package/dist/tools/index-tools/parse.js.map +1 -1
- package/dist/tools/index-tools/registry.d.ts +35 -0
- package/dist/tools/index-tools/registry.d.ts.map +1 -1
- package/dist/tools/index-tools/registry.js +167 -3
- package/dist/tools/index-tools/registry.js.map +1 -1
- package/dist/tools/index-tools/state.d.ts +31 -0
- package/dist/tools/index-tools/state.d.ts.map +1 -1
- package/dist/tools/index-tools/state.js +53 -0
- package/dist/tools/index-tools/state.js.map +1 -1
- package/dist/tools/index-tools/types.d.ts +9 -0
- package/dist/tools/index-tools/types.d.ts.map +1 -1
- package/dist/tools/index-tools/watcher.js +3 -3
- package/dist/tools/index-tools/watcher.js.map +1 -1
- package/dist/tools/index-tools/worktree-seed.d.ts +44 -0
- package/dist/tools/index-tools/worktree-seed.d.ts.map +1 -0
- package/dist/tools/index-tools/worktree-seed.js +302 -0
- package/dist/tools/index-tools/worktree-seed.js.map +1 -0
- package/dist/tools/index-tools.d.ts +2 -2
- package/dist/tools/index-tools.d.ts.map +1 -1
- package/dist/tools/index-tools.js +5 -3
- package/dist/tools/index-tools.js.map +1 -1
- package/dist/tools/nest-ext-tools/graphql.d.ts +17 -0
- package/dist/tools/nest-ext-tools/graphql.d.ts.map +1 -0
- package/dist/tools/nest-ext-tools/graphql.js +54 -0
- package/dist/tools/nest-ext-tools/graphql.js.map +1 -0
- package/dist/tools/nest-ext-tools/microservice.d.ts +17 -0
- package/dist/tools/nest-ext-tools/microservice.d.ts.map +1 -0
- package/dist/tools/nest-ext-tools/microservice.js +51 -0
- package/dist/tools/nest-ext-tools/microservice.js.map +1 -0
- package/dist/tools/nest-ext-tools/openapi.d.ts +81 -0
- package/dist/tools/nest-ext-tools/openapi.d.ts.map +1 -0
- package/dist/tools/nest-ext-tools/openapi.js +254 -0
- package/dist/tools/nest-ext-tools/openapi.js.map +1 -0
- package/dist/tools/nest-ext-tools/queue.d.ts +27 -0
- package/dist/tools/nest-ext-tools/queue.d.ts.map +1 -0
- package/dist/tools/nest-ext-tools/queue.js +95 -0
- package/dist/tools/nest-ext-tools/queue.js.map +1 -0
- package/dist/tools/nest-ext-tools/schedule.d.ts +19 -0
- package/dist/tools/nest-ext-tools/schedule.d.ts.map +1 -0
- package/dist/tools/nest-ext-tools/schedule.js +89 -0
- package/dist/tools/nest-ext-tools/schedule.js.map +1 -0
- package/dist/tools/nest-ext-tools/scope.d.ts +19 -0
- package/dist/tools/nest-ext-tools/scope.d.ts.map +1 -0
- package/dist/tools/nest-ext-tools/scope.js +151 -0
- package/dist/tools/nest-ext-tools/scope.js.map +1 -0
- package/dist/tools/nest-ext-tools/shared.d.ts +33 -0
- package/dist/tools/nest-ext-tools/shared.d.ts.map +1 -0
- package/dist/tools/nest-ext-tools/shared.js +279 -0
- package/dist/tools/nest-ext-tools/shared.js.map +1 -0
- package/dist/tools/nest-ext-tools/typeorm.d.ts +22 -0
- package/dist/tools/nest-ext-tools/typeorm.d.ts.map +1 -0
- package/dist/tools/nest-ext-tools/typeorm.js +59 -0
- package/dist/tools/nest-ext-tools/typeorm.js.map +1 -0
- package/dist/tools/nest-ext-tools/websocket.d.ts +21 -0
- package/dist/tools/nest-ext-tools/websocket.d.ts.map +1 -0
- package/dist/tools/nest-ext-tools/websocket.js +70 -0
- package/dist/tools/nest-ext-tools/websocket.js.map +1 -0
- package/dist/tools/nest-ext-tools.d.ts +10 -204
- package/dist/tools/nest-ext-tools.d.ts.map +1 -1
- package/dist/tools/nest-ext-tools.js +10 -749
- package/dist/tools/nest-ext-tools.js.map +1 -1
- package/dist/tools/perf-tools.js +2 -2
- package/dist/tools/plan-turn/stale-index.d.ts +32 -0
- package/dist/tools/plan-turn/stale-index.d.ts.map +1 -1
- package/dist/tools/plan-turn/stale-index.js +42 -5
- package/dist/tools/plan-turn/stale-index.js.map +1 -1
- package/dist/tools/python-audit/checks/dead-code.d.ts +1 -1
- package/dist/tools/python-audit/checks/dead-code.d.ts.map +1 -1
- package/dist/tools/python-constants/constant-match.d.ts +5 -0
- package/dist/tools/python-constants/constant-match.d.ts.map +1 -0
- package/dist/tools/python-constants/constant-match.js +24 -0
- package/dist/tools/python-constants/constant-match.js.map +1 -0
- package/dist/tools/python-constants/file-context.d.ts +5 -0
- package/dist/tools/python-constants/file-context.d.ts.map +1 -0
- package/dist/tools/python-constants/file-context.js +91 -0
- package/dist/tools/python-constants/file-context.js.map +1 -0
- package/dist/tools/python-constants/function-defaults.d.ts +5 -0
- package/dist/tools/python-constants/function-defaults.d.ts.map +1 -0
- package/dist/tools/python-constants/function-defaults.js +98 -0
- package/dist/tools/python-constants/function-defaults.js.map +1 -0
- package/dist/tools/python-constants/model.d.ts +78 -0
- package/dist/tools/python-constants/model.d.ts.map +1 -0
- package/dist/tools/python-constants/model.js +2 -0
- package/dist/tools/python-constants/model.js.map +1 -0
- package/dist/tools/python-constants/syntax.d.ts +22 -0
- package/dist/tools/python-constants/syntax.d.ts.map +1 -0
- package/dist/tools/python-constants/syntax.js +93 -0
- package/dist/tools/python-constants/syntax.js.map +1 -0
- package/dist/tools/python-constants/value-resolver.d.ts +6 -0
- package/dist/tools/python-constants/value-resolver.d.ts.map +1 -0
- package/dist/tools/python-constants/value-resolver.js +320 -0
- package/dist/tools/python-constants/value-resolver.js.map +1 -0
- package/dist/tools/python-constants-tools.d.ts +3 -45
- package/dist/tools/python-constants-tools.d.ts.map +1 -1
- package/dist/tools/python-constants-tools.js +2 -505
- package/dist/tools/python-constants-tools.js.map +1 -1
- package/dist/tools/route-tools/django.d.ts +8 -0
- package/dist/tools/route-tools/django.d.ts.map +1 -0
- package/dist/tools/route-tools/django.js +52 -0
- package/dist/tools/route-tools/django.js.map +1 -0
- package/dist/tools/route-tools/express.d.ts +5 -0
- package/dist/tools/route-tools/express.d.ts.map +1 -0
- package/dist/tools/route-tools/express.js +33 -0
- package/dist/tools/route-tools/express.js.map +1 -0
- package/dist/tools/route-tools/file-sources.d.ts +7 -0
- package/dist/tools/route-tools/file-sources.d.ts.map +1 -0
- package/dist/tools/route-tools/file-sources.js +15 -0
- package/dist/tools/route-tools/file-sources.js.map +1 -0
- package/dist/tools/route-tools/handler-discovery.d.ts +4 -0
- package/dist/tools/route-tools/handler-discovery.d.ts.map +1 -0
- package/dist/tools/route-tools/handler-discovery.js +38 -0
- package/dist/tools/route-tools/handler-discovery.js.map +1 -0
- package/dist/tools/route-tools/hono.d.ts +5 -0
- package/dist/tools/route-tools/hono.d.ts.map +1 -0
- package/dist/tools/route-tools/hono.js +61 -0
- package/dist/tools/route-tools/hono.js.map +1 -0
- package/dist/tools/route-tools/ktor.d.ts +5 -0
- package/dist/tools/route-tools/ktor.d.ts.map +1 -0
- package/dist/tools/route-tools/ktor.js +76 -0
- package/dist/tools/route-tools/ktor.js.map +1 -0
- package/dist/tools/route-tools/laravel.d.ts +5 -0
- package/dist/tools/route-tools/laravel.d.ts.map +1 -0
- package/dist/tools/route-tools/laravel.js +45 -0
- package/dist/tools/route-tools/laravel.js.map +1 -0
- package/dist/tools/route-tools/mermaid-call-chain.d.ts +3 -0
- package/dist/tools/route-tools/mermaid-call-chain.d.ts.map +1 -0
- package/dist/tools/route-tools/mermaid-call-chain.js +50 -0
- package/dist/tools/route-tools/mermaid-call-chain.js.map +1 -0
- package/dist/tools/route-tools/nest.d.ts +5 -0
- package/dist/tools/route-tools/nest.d.ts.map +1 -0
- package/dist/tools/route-tools/nest.js +75 -0
- package/dist/tools/route-tools/nest.js.map +1 -0
- package/dist/tools/route-tools/next-trace.d.ts +4 -0
- package/dist/tools/route-tools/next-trace.d.ts.map +1 -0
- package/dist/tools/route-tools/next-trace.js +48 -0
- package/dist/tools/route-tools/next-trace.js.map +1 -0
- package/dist/tools/route-tools/next.d.ts +7 -0
- package/dist/tools/route-tools/next.d.ts.map +1 -0
- package/dist/tools/route-tools/next.js +77 -0
- package/dist/tools/route-tools/next.js.map +1 -0
- package/dist/tools/route-tools/python-decorators.d.ts +7 -0
- package/dist/tools/route-tools/python-decorators.d.ts.map +1 -0
- package/dist/tools/route-tools/python-decorators.js +53 -0
- package/dist/tools/route-tools/python-decorators.js.map +1 -0
- package/dist/tools/route-tools/route-mermaid.d.ts +4 -0
- package/dist/tools/route-tools/route-mermaid.d.ts.map +1 -0
- package/dist/tools/route-tools/route-mermaid.js +53 -0
- package/dist/tools/route-tools/route-mermaid.js.map +1 -0
- package/dist/tools/route-tools/spring-kotlin.d.ts +5 -0
- package/dist/tools/route-tools/spring-kotlin.d.ts.map +1 -0
- package/dist/tools/route-tools/spring-kotlin.js +52 -0
- package/dist/tools/route-tools/spring-kotlin.js.map +1 -0
- package/dist/tools/route-tools/trace-analysis.d.ts +4 -0
- package/dist/tools/route-tools/trace-analysis.d.ts.map +1 -0
- package/dist/tools/route-tools/trace-analysis.js +37 -0
- package/dist/tools/route-tools/trace-analysis.js.map +1 -0
- package/dist/tools/route-tools/trace-route.d.ts +6 -0
- package/dist/tools/route-tools/trace-route.d.ts.map +1 -0
- package/dist/tools/route-tools/trace-route.js +53 -0
- package/dist/tools/route-tools/trace-route.js.map +1 -0
- package/dist/tools/route-tools/types.d.ts +35 -0
- package/dist/tools/route-tools/types.d.ts.map +1 -0
- package/dist/tools/route-tools/types.js +2 -0
- package/dist/tools/route-tools/types.js.map +1 -0
- package/dist/tools/route-tools/yii2.d.ts +5 -0
- package/dist/tools/route-tools/yii2.d.ts.map +1 -0
- package/dist/tools/route-tools/yii2.js +73 -0
- package/dist/tools/route-tools/yii2.js.map +1 -0
- package/dist/tools/route-tools.d.ts +7 -49
- package/dist/tools/route-tools.d.ts.map +1 -1
- package/dist/tools/route-tools.js +5 -978
- package/dist/tools/route-tools.js.map +1 -1
- package/dist/tools/search-tools/types.d.ts +20 -0
- package/dist/tools/search-tools/types.d.ts.map +1 -1
- package/dist/tools/search-tools/zero-hit.d.ts.map +1 -1
- package/dist/tools/search-tools/zero-hit.js +0 -0
- package/dist/tools/search-tools/zero-hit.js.map +1 -1
- package/dist/tools/status-tools.d.ts +10 -0
- package/dist/tools/status-tools.d.ts.map +1 -1
- package/dist/tools/status-tools.js +14 -4
- package/dist/tools/status-tools.js.map +1 -1
- package/dist/tools/symbol-analysis-tools.d.ts +81 -0
- package/dist/tools/symbol-analysis-tools.d.ts.map +1 -0
- package/dist/tools/symbol-analysis-tools.js +327 -0
- package/dist/tools/symbol-analysis-tools.js.map +1 -0
- package/dist/tools/symbol-context-tools.d.ts +68 -0
- package/dist/tools/symbol-context-tools.d.ts.map +1 -0
- package/dist/tools/symbol-context-tools.js +232 -0
- package/dist/tools/symbol-context-tools.js.map +1 -0
- package/dist/tools/symbol-lookup-tools.d.ts +77 -0
- package/dist/tools/symbol-lookup-tools.d.ts.map +1 -0
- package/dist/tools/symbol-lookup-tools.js +305 -0
- package/dist/tools/symbol-lookup-tools.js.map +1 -0
- package/dist/tools/symbol-reference-tools.d.ts +38 -0
- package/dist/tools/symbol-reference-tools.d.ts.map +1 -0
- package/dist/tools/symbol-reference-tools.js +253 -0
- package/dist/tools/symbol-reference-tools.js.map +1 -0
- package/dist/tools/symbol-tool-internals.d.ts +9 -0
- package/dist/tools/symbol-tool-internals.d.ts.map +1 -0
- package/dist/tools/symbol-tool-internals.js +47 -0
- package/dist/tools/symbol-tool-internals.js.map +1 -0
- package/dist/tools/symbol-tools.d.ts +11 -176
- package/dist/tools/symbol-tools.d.ts.map +1 -1
- package/dist/tools/symbol-tools.js +7 -975
- package/dist/tools/symbol-tools.js.map +1 -1
- package/dist/tools/taint/python-context.d.ts +10 -0
- package/dist/tools/taint/python-context.d.ts.map +1 -0
- package/dist/tools/taint/python-context.js +150 -0
- package/dist/tools/taint/python-context.js.map +1 -0
- package/dist/tools/taint/taint-analyzer.d.ts +2 -0
- package/dist/tools/taint/taint-analyzer.d.ts.map +1 -0
- package/dist/tools/taint/taint-analyzer.js +2 -0
- package/dist/tools/taint/taint-analyzer.js.map +1 -0
- package/dist/tools/taint/taint-expression.d.ts +18 -0
- package/dist/tools/taint/taint-expression.d.ts.map +1 -0
- package/dist/tools/taint/taint-expression.js +265 -0
- package/dist/tools/taint/taint-expression.js.map +1 -0
- package/dist/tools/taint/taint-flow.d.ts +10 -0
- package/dist/tools/taint/taint-flow.d.ts.map +1 -0
- package/dist/tools/taint/taint-flow.js +178 -0
- package/dist/tools/taint/taint-flow.js.map +1 -0
- package/dist/tools/taint/taint-model.d.ts +113 -0
- package/dist/tools/taint/taint-model.d.ts.map +1 -0
- package/dist/tools/taint/taint-model.js +277 -0
- package/dist/tools/taint/taint-model.js.map +1 -0
- package/dist/tools/taint-tools.d.ts +2 -34
- package/dist/tools/taint-tools.d.ts.map +1 -1
- package/dist/tools/taint-tools.js +2 -852
- package/dist/tools/taint-tools.js.map +1 -1
- package/dist/tools/typescript-constants/file-context.d.ts +7 -0
- package/dist/tools/typescript-constants/file-context.d.ts.map +1 -0
- package/dist/tools/typescript-constants/file-context.js +219 -0
- package/dist/tools/typescript-constants/file-context.js.map +1 -0
- package/dist/tools/typescript-constants/symbol-resolver.d.ts +7 -0
- package/dist/tools/typescript-constants/symbol-resolver.d.ts.map +1 -0
- package/dist/tools/typescript-constants/symbol-resolver.js +165 -0
- package/dist/tools/typescript-constants/symbol-resolver.js.map +1 -0
- package/dist/tools/typescript-constants/types.d.ts +44 -0
- package/dist/tools/typescript-constants/types.d.ts.map +1 -0
- package/dist/tools/typescript-constants/types.js +2 -0
- package/dist/tools/typescript-constants/types.js.map +1 -0
- package/dist/tools/typescript-constants/value-evaluator.d.ts +8 -0
- package/dist/tools/typescript-constants/value-evaluator.d.ts.map +1 -0
- package/dist/tools/typescript-constants/value-evaluator.js +404 -0
- package/dist/tools/typescript-constants/value-evaluator.js.map +1 -0
- package/dist/tools/typescript-constants-tools.d.ts.map +1 -1
- package/dist/tools/typescript-constants-tools.js +19 -709
- package/dist/tools/typescript-constants-tools.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/git-head.d.ts +12 -0
- package/dist/utils/git-head.d.ts.map +1 -1
- package/dist/utils/git-head.js +25 -0
- package/dist/utils/git-head.js.map +1 -1
- package/dist/utils/import-graph/collect.d.ts +5 -0
- package/dist/utils/import-graph/collect.d.ts.map +1 -0
- package/dist/utils/import-graph/collect.js +47 -0
- package/dist/utils/import-graph/collect.js.map +1 -0
- package/dist/utils/import-graph/edge-accumulator.d.ts +7 -0
- package/dist/utils/import-graph/edge-accumulator.d.ts.map +1 -0
- package/dist/utils/import-graph/edge-accumulator.js +47 -0
- package/dist/utils/import-graph/edge-accumulator.js.map +1 -0
- package/dist/utils/import-graph/language-imports.d.ts +6 -0
- package/dist/utils/import-graph/language-imports.d.ts.map +1 -0
- package/dist/utils/import-graph/language-imports.js +84 -0
- package/dist/utils/import-graph/language-imports.js.map +1 -0
- package/dist/utils/import-graph/metrics.d.ts +6 -0
- package/dist/utils/import-graph/metrics.d.ts.map +1 -0
- package/dist/utils/import-graph/metrics.js +51 -0
- package/dist/utils/import-graph/metrics.js.map +1 -0
- package/dist/utils/import-graph/path-map.d.ts +7 -0
- package/dist/utils/import-graph/path-map.d.ts.map +1 -0
- package/dist/utils/import-graph/path-map.js +56 -0
- package/dist/utils/import-graph/path-map.js.map +1 -0
- package/dist/utils/import-graph/python-php-edge-collectors.d.ts +5 -0
- package/dist/utils/import-graph/python-php-edge-collectors.d.ts.map +1 -0
- package/dist/utils/import-graph/python-php-edge-collectors.js +56 -0
- package/dist/utils/import-graph/python-php-edge-collectors.js.map +1 -0
- package/dist/utils/import-graph/source-edge-collector.d.ts +13 -0
- package/dist/utils/import-graph/source-edge-collector.d.ts.map +1 -0
- package/dist/utils/import-graph/source-edge-collector.js +42 -0
- package/dist/utils/import-graph/source-edge-collector.js.map +1 -0
- package/dist/utils/import-graph/source-imports.d.ts +5 -0
- package/dist/utils/import-graph/source-imports.d.ts.map +1 -0
- package/dist/utils/import-graph/source-imports.js +33 -0
- package/dist/utils/import-graph/source-imports.js.map +1 -0
- package/dist/utils/import-graph/types.d.ts +15 -0
- package/dist/utils/import-graph/types.d.ts.map +1 -0
- package/dist/utils/import-graph/types.js +2 -0
- package/dist/utils/import-graph/types.js.map +1 -0
- package/dist/utils/import-graph/typescript-edge-collector.d.ts +7 -0
- package/dist/utils/import-graph/typescript-edge-collector.d.ts.map +1 -0
- package/dist/utils/import-graph/typescript-edge-collector.js +58 -0
- package/dist/utils/import-graph/typescript-edge-collector.js.map +1 -0
- package/dist/utils/import-graph/workspace-alias.d.ts +7 -0
- package/dist/utils/import-graph/workspace-alias.d.ts.map +1 -0
- package/dist/utils/import-graph/workspace-alias.js +95 -0
- package/dist/utils/import-graph/workspace-alias.js.map +1 -0
- package/dist/utils/import-graph/workspace-entry.d.ts +3 -0
- package/dist/utils/import-graph/workspace-entry.d.ts.map +1 -0
- package/dist/utils/import-graph/workspace-entry.js +81 -0
- package/dist/utils/import-graph/workspace-entry.js.map +1 -0
- package/dist/utils/import-graph.d.ts +10 -94
- package/dist/utils/import-graph.d.ts.map +1 -1
- package/dist/utils/import-graph.js +6 -702
- package/dist/utils/import-graph.js.map +1 -1
- package/package.json +6 -4
- package/rules/codesift.md +11 -2
- package/rules/codesift.mdc +11 -2
- package/rules/codex.md +11 -2
- package/rules/gemini.md +11 -2
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { indexCacheMemBudgetBytes } from "../config.js";
|
|
2
|
+
import { indexFootprintBytes } from "./index-footprint.js";
|
|
3
|
+
/** Bounded by entry count, not bytes: a summary holds no symbols, so it cannot dominate the heap
|
|
4
|
+
* the way a materialised index can. */
|
|
5
|
+
const MAX_CACHED_SUMMARIES = 16;
|
|
6
|
+
const summaryCache = new Map();
|
|
7
|
+
function copySummary(summary) {
|
|
8
|
+
const out = { ...summary, files: [...summary.files] };
|
|
9
|
+
if (summary.workspaces !== undefined)
|
|
10
|
+
out.workspaces = [...summary.workspaces];
|
|
11
|
+
return out;
|
|
12
|
+
}
|
|
13
|
+
export function resetSummaryCacheForTesting() {
|
|
14
|
+
summaryCache.clear();
|
|
15
|
+
}
|
|
16
|
+
export function getCachedSummary(dbPath, dataVersion) {
|
|
17
|
+
const cached = summaryCache.get(dbPath);
|
|
18
|
+
if (!cached || cached.dataVersion !== dataVersion)
|
|
19
|
+
return null;
|
|
20
|
+
summaryCache.delete(dbPath);
|
|
21
|
+
summaryCache.set(dbPath, cached);
|
|
22
|
+
return copySummary(cached.summary);
|
|
23
|
+
}
|
|
24
|
+
export function cacheLoadedSummary(dbPath, summary, dataVersion) {
|
|
25
|
+
summaryCache.set(dbPath, { summary, dataVersion });
|
|
26
|
+
while (summaryCache.size > MAX_CACHED_SUMMARIES) {
|
|
27
|
+
const oldest = summaryCache.keys().next();
|
|
28
|
+
if (oldest.done)
|
|
29
|
+
break;
|
|
30
|
+
summaryCache.delete(oldest.value);
|
|
31
|
+
}
|
|
32
|
+
return copySummary(summary);
|
|
33
|
+
}
|
|
34
|
+
// `|| 3` would be wrong here: an operator setting 0 to minimise memory would get 3, because
|
|
35
|
+
// 0 is falsy. Only a non-numeric value should fall back.
|
|
36
|
+
const MAX_CACHED_INDEXES = (() => {
|
|
37
|
+
const raw = process.env["CODESIFT_MAX_CACHED_INDEXES"];
|
|
38
|
+
const parsed = raw === undefined ? 3 : Number(raw);
|
|
39
|
+
return Math.max(1, Number.isNaN(parsed) ? 3 : parsed);
|
|
40
|
+
})();
|
|
41
|
+
const indexCache = new Map();
|
|
42
|
+
function cachedBytes() {
|
|
43
|
+
let total = 0;
|
|
44
|
+
for (const entry of indexCache.values())
|
|
45
|
+
total += indexFootprintBytes(entry.index);
|
|
46
|
+
return total;
|
|
47
|
+
}
|
|
48
|
+
function cacheIndex(dbPath, entry) {
|
|
49
|
+
indexCache.delete(dbPath);
|
|
50
|
+
indexCache.set(dbPath, entry);
|
|
51
|
+
const budget = indexCacheMemBudgetBytes();
|
|
52
|
+
let total = cachedBytes();
|
|
53
|
+
while (indexCache.size > 1 && (indexCache.size > MAX_CACHED_INDEXES || total > budget)) {
|
|
54
|
+
const oldest = indexCache.entries().next();
|
|
55
|
+
if (oldest.done)
|
|
56
|
+
break;
|
|
57
|
+
const [key, cachedEntry] = oldest.value;
|
|
58
|
+
total -= indexFootprintBytes(cachedEntry.index);
|
|
59
|
+
indexCache.delete(key);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function copyIndex(index) {
|
|
63
|
+
return { ...index, files: [...index.files], symbols: [...index.symbols] };
|
|
64
|
+
}
|
|
65
|
+
export function getCachedIndex(dbPath, dataVersion) {
|
|
66
|
+
const cached = indexCache.get(dbPath);
|
|
67
|
+
if (!cached || cached.dataVersion !== dataVersion)
|
|
68
|
+
return null;
|
|
69
|
+
cacheIndex(dbPath, cached);
|
|
70
|
+
return copyIndex(cached.index);
|
|
71
|
+
}
|
|
72
|
+
export function cacheLoadedIndex(dbPath, index, dataVersion) {
|
|
73
|
+
cacheIndex(dbPath, { index, dataVersion });
|
|
74
|
+
return copyIndex(index);
|
|
75
|
+
}
|
|
76
|
+
export function invalidateIndexCache(dbPath) {
|
|
77
|
+
indexCache.delete(dbPath);
|
|
78
|
+
summaryCache.delete(dbPath);
|
|
79
|
+
}
|
|
80
|
+
export function resetIndexCacheForTesting() {
|
|
81
|
+
indexCache.clear();
|
|
82
|
+
}
|
|
83
|
+
export function getIndexCacheSizeForTesting() {
|
|
84
|
+
return indexCache.size;
|
|
85
|
+
}
|
|
86
|
+
export function getIndexCacheBytesForTesting() {
|
|
87
|
+
return cachedBytes();
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=index-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-cache.js","sourceRoot":"","sources":["../../src/storage/index-cache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D;wCACwC;AACxC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,YAAY,GAAG,IAAI,GAAG,EAA0D,CAAC;AAEvF,SAAS,WAAW,CAAC,OAAqB;IACxC,MAAM,GAAG,GAAiB,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;IACpE,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;QAAE,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAAc,EACd,WAAmB;IAEnB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAE/D,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,OAAqB,EACrB,WAAmB;IAEnB,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IACnD,OAAO,YAAY,CAAC,IAAI,GAAG,oBAAoB,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,MAAM,CAAC,IAAI;YAAE,MAAM;QACvB,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAOD,4FAA4F;AAC5F,yDAAyD;AACzD,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC,CAAC,EAAE,CAAC;AACL,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;AAElD,SAAS,WAAW;IAClB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE;QAAE,KAAK,IAAI,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAE,KAAkB;IACpD,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1B,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAE9B,MAAM,MAAM,GAAG,wBAAwB,EAAE,CAAC;IAC1C,IAAI,KAAK,GAAG,WAAW,EAAE,CAAC;IAC1B,OAAO,UAAU,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,kBAAkB,IAAI,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;QACvF,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,IAAI;YAAE,MAAM;QACvB,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACxC,KAAK,IAAI,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChD,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAgB;IACjC,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,WAAmB;IAChE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAE/D,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAAc,EACd,KAAgB,EAChB,WAAmB;IAEnB,UAAU,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAC3C,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1B,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,UAAU,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,OAAO,UAAU,CAAC,IAAI,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,OAAO,WAAW,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CodeIndex } from "../types.js";
|
|
2
|
+
export declare function recordIndexFootprint(index: CodeIndex, bytes: number): void;
|
|
3
|
+
/**
|
|
4
|
+
* Measured footprint when the loader recorded one, otherwise the calibrated estimate.
|
|
5
|
+
*
|
|
6
|
+
* Deliberately returns a number in both cases instead of `undefined`: the caller is choosing what
|
|
7
|
+
* to evict, and "size unknown" there can only degrade into either treating a 400 MB index as free
|
|
8
|
+
* or refusing to cache it at all. An estimate within a small factor is enough for that decision,
|
|
9
|
+
* whereas the entry-counting it replaces was wrong by two orders of magnitude.
|
|
10
|
+
*/
|
|
11
|
+
export declare function indexFootprintBytes(index: CodeIndex): number;
|
|
12
|
+
//# sourceMappingURL=index-footprint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-footprint.d.ts","sourceRoot":"","sources":["../../src/storage/index-footprint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAyB7C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAE1E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAM5D"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How much heap a materialised index occupies, so the cache can budget bytes instead of entries.
|
|
3
|
+
*
|
|
4
|
+
* Kept beside the index rather than on it: `CodeIndex` is a wire/storage shape that gets
|
|
5
|
+
* serialised and copied, and a measurement of this process's heap is neither. A WeakMap also
|
|
6
|
+
* cannot keep an evicted index alive, which a field on the object could not promise.
|
|
7
|
+
*/
|
|
8
|
+
const footprints = new WeakMap();
|
|
9
|
+
/**
|
|
10
|
+
* Per-symbol heap cost, measured rather than guessed: loading the real tgm-survey-platform index
|
|
11
|
+
* (240,137 symbols) moves `heapUsed` by 349 MB under `--expose-gc`, i.e. ~1,454 B/symbol
|
|
12
|
+
* including source text. Rounded up for the same reason as the loader's own constant — this is
|
|
13
|
+
* fitted to one index, and the residual error belongs on the evict-sooner side.
|
|
14
|
+
*
|
|
15
|
+
* Only ever a FALLBACK. The SQLite loader tallies the actual bytes as it walks the rows, which
|
|
16
|
+
* costs one addition each and needs no constant; this covers indexes that arrived some other way
|
|
17
|
+
* (the JSON backend, a hand-built index in a test) where re-walking to measure would cost more
|
|
18
|
+
* than the eviction decision is worth.
|
|
19
|
+
*/
|
|
20
|
+
const ESTIMATED_BYTES_PER_SYMBOL = 1_600;
|
|
21
|
+
const ESTIMATED_BYTES_PER_FILE = 300;
|
|
22
|
+
export function recordIndexFootprint(index, bytes) {
|
|
23
|
+
footprints.set(index, bytes);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Measured footprint when the loader recorded one, otherwise the calibrated estimate.
|
|
27
|
+
*
|
|
28
|
+
* Deliberately returns a number in both cases instead of `undefined`: the caller is choosing what
|
|
29
|
+
* to evict, and "size unknown" there can only degrade into either treating a 400 MB index as free
|
|
30
|
+
* or refusing to cache it at all. An estimate within a small factor is enough for that decision,
|
|
31
|
+
* whereas the entry-counting it replaces was wrong by two orders of magnitude.
|
|
32
|
+
*/
|
|
33
|
+
export function indexFootprintBytes(index) {
|
|
34
|
+
const measured = footprints.get(index);
|
|
35
|
+
if (measured !== undefined)
|
|
36
|
+
return measured;
|
|
37
|
+
const symbols = index.symbol_count || index.symbols.length;
|
|
38
|
+
const files = index.file_count || index.files.length;
|
|
39
|
+
return symbols * ESTIMATED_BYTES_PER_SYMBOL + files * ESTIMATED_BYTES_PER_FILE;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=index-footprint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-footprint.js","sourceRoot":"","sources":["../../src/storage/index-footprint.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,IAAI,OAAO,EAAqB,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,0BAA0B,GAAG,KAAK,CAAC;AACzC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAErC,MAAM,UAAU,oBAAoB,CAAC,KAAgB,EAAE,KAAa;IAClE,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAgB;IAClD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;IAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IACrD,OAAO,OAAO,GAAG,0BAA0B,GAAG,KAAK,GAAG,wBAAwB,CAAC;AACjF,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CodeIndex, CodeSymbol, FileEntry } from "../types.js";
|
|
2
|
+
type MutationIo = {
|
|
3
|
+
loadIndex: (indexPath: string) => Promise<CodeIndex | null>;
|
|
4
|
+
saveIndex: (indexPath: string, index: CodeIndex) => Promise<void>;
|
|
5
|
+
};
|
|
6
|
+
export declare function getIndexWriteCountForTesting(): number;
|
|
7
|
+
export declare function resetIndexWriteCountForTesting(): void;
|
|
8
|
+
export declare function saveIncrementalJson(indexPath: string, updatedFile: string, newSymbols: CodeSymbol[], fileEntry: FileEntry | undefined, io: MutationIo): Promise<void>;
|
|
9
|
+
export declare function removeFileFromJsonIndex(indexPath: string, deletedFile: string, io: MutationIo): Promise<void>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=index-json-mutations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-json-mutations.d.ts","sourceRoot":"","sources":["../../src/storage/index-json-mutations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpE,KAAK,UAAU,GAAG;IAChB,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC5D,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnE,CAAC;AAeF,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED,wBAAgB,8BAA8B,IAAI,IAAI,CAErD;AA2DD,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EAAE,EACxB,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,EAAE,EAAE,UAAU,GACb,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,UAAU,GACb,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
const writeLocks = new Map();
|
|
2
|
+
const pendingMutations = new Map();
|
|
3
|
+
const scheduledFlushes = new Map();
|
|
4
|
+
let indexWriteCount = 0;
|
|
5
|
+
export function getIndexWriteCountForTesting() {
|
|
6
|
+
return indexWriteCount;
|
|
7
|
+
}
|
|
8
|
+
export function resetIndexWriteCountForTesting() {
|
|
9
|
+
indexWriteCount = 0;
|
|
10
|
+
}
|
|
11
|
+
/** Fold every queued mutation for one JSON index into a single load and save. */
|
|
12
|
+
async function flushIndexMutations(indexPath, io) {
|
|
13
|
+
const batch = pendingMutations.get(indexPath);
|
|
14
|
+
if (!batch || batch.length === 0)
|
|
15
|
+
return;
|
|
16
|
+
pendingMutations.delete(indexPath);
|
|
17
|
+
try {
|
|
18
|
+
const existing = await io.loadIndex(indexPath);
|
|
19
|
+
if (!existing) {
|
|
20
|
+
for (const mutation of batch) {
|
|
21
|
+
if (mutation.missing === "throw") {
|
|
22
|
+
mutation.reject(new Error(`Cannot incrementally update: index not found at ${indexPath}`));
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
mutation.resolve();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
let changed = false;
|
|
31
|
+
for (const mutation of batch) {
|
|
32
|
+
if (mutation.apply(existing))
|
|
33
|
+
changed = true;
|
|
34
|
+
}
|
|
35
|
+
if (changed) {
|
|
36
|
+
existing.updated_at = Date.now();
|
|
37
|
+
indexWriteCount++;
|
|
38
|
+
await io.saveIndex(indexPath, existing);
|
|
39
|
+
}
|
|
40
|
+
for (const mutation of batch)
|
|
41
|
+
mutation.resolve();
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
for (const mutation of batch)
|
|
45
|
+
mutation.reject(err);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function enqueueIndexMutation(indexPath, missing, apply, io) {
|
|
49
|
+
return new Promise((resolve, reject) => {
|
|
50
|
+
const queue = pendingMutations.get(indexPath);
|
|
51
|
+
if (queue)
|
|
52
|
+
queue.push({ apply, missing, resolve, reject });
|
|
53
|
+
else
|
|
54
|
+
pendingMutations.set(indexPath, [{ apply, missing, resolve, reject }]);
|
|
55
|
+
if (scheduledFlushes.has(indexPath))
|
|
56
|
+
return;
|
|
57
|
+
const previous = writeLocks.get(indexPath) ?? Promise.resolve();
|
|
58
|
+
const next = previous.then(() => {
|
|
59
|
+
scheduledFlushes.delete(indexPath);
|
|
60
|
+
return flushIndexMutations(indexPath, io);
|
|
61
|
+
});
|
|
62
|
+
scheduledFlushes.set(indexPath, next);
|
|
63
|
+
writeLocks.set(indexPath, next.catch(() => { }));
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
export function saveIncrementalJson(indexPath, updatedFile, newSymbols, fileEntry, io) {
|
|
67
|
+
return enqueueIndexMutation(indexPath, "throw", (existing) => {
|
|
68
|
+
const filtered = existing.symbols.filter((symbol) => symbol.file !== updatedFile);
|
|
69
|
+
const merged = [...filtered, ...newSymbols];
|
|
70
|
+
existing.symbols = merged;
|
|
71
|
+
existing.symbol_count = merged.length;
|
|
72
|
+
if (fileEntry) {
|
|
73
|
+
existing.files = existing.files.filter((file) => file.path !== updatedFile);
|
|
74
|
+
existing.files.push(fileEntry);
|
|
75
|
+
existing.file_count = existing.files.length;
|
|
76
|
+
}
|
|
77
|
+
return true;
|
|
78
|
+
}, io);
|
|
79
|
+
}
|
|
80
|
+
export function removeFileFromJsonIndex(indexPath, deletedFile, io) {
|
|
81
|
+
return enqueueIndexMutation(indexPath, "skip", (existing) => {
|
|
82
|
+
const hadSymbols = existing.symbols.some((symbol) => symbol.file === deletedFile);
|
|
83
|
+
const hadFile = existing.files.some((file) => file.path === deletedFile);
|
|
84
|
+
if (!hadSymbols && !hadFile)
|
|
85
|
+
return false;
|
|
86
|
+
existing.symbols = existing.symbols.filter((symbol) => symbol.file !== deletedFile);
|
|
87
|
+
existing.symbol_count = existing.symbols.length;
|
|
88
|
+
existing.files = existing.files.filter((file) => file.path !== deletedFile);
|
|
89
|
+
existing.file_count = existing.files.length;
|
|
90
|
+
return true;
|
|
91
|
+
}, io);
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=index-json-mutations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-json-mutations.js","sourceRoot":"","sources":["../../src/storage/index-json-mutations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CodeIndex } from "../types.js";
|
|
2
|
+
export type IndexBackend = "json" | "sqlite";
|
|
3
|
+
export declare function resolveIndexBackend(): Promise<IndexBackend>;
|
|
4
|
+
export declare function resetIndexBackendForTesting(): void;
|
|
5
|
+
/** Reject SQLite artifacts where callers must provide the canonical index path. */
|
|
6
|
+
export declare function assertCanonicalIndexPath(indexPath: string): void;
|
|
7
|
+
/**
|
|
8
|
+
* Keep both formats side by side so the JSON file remains a usable rollback artifact.
|
|
9
|
+
* Throws when given an already-derived SQLite file or sidecar: accepting one would silently
|
|
10
|
+
* derive a second, unrelated database path.
|
|
11
|
+
*/
|
|
12
|
+
export declare function sqlitePathFor(indexPath: string): string;
|
|
13
|
+
type LegacyIndexLoader = (indexPath: string) => Promise<CodeIndex | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Bring an existing JSON index across on first touch without deleting the rollback source.
|
|
16
|
+
* The legacy loader is injected by the facade so this module never imports `index-store.ts`
|
|
17
|
+
* and therefore cannot introduce a storage-module cycle.
|
|
18
|
+
*/
|
|
19
|
+
export declare function ensureSqliteMigrated(indexPath: string, dbPath: string, loadLegacyIndex: LegacyIndexLoader): Promise<void>;
|
|
20
|
+
export declare function resetMigrationCacheForTesting(): void;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=index-migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-migration.d.ts","sourceRoot":"","sources":["../../src/storage/index-migration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7C,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;AAU7C,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,CAGjE;AAgBD,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED,mFAAmF;AACnF,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAMhE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,KAAK,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;AAK1E;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,iBAAiB,GACjC,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { importLegacyIndexIfEmpty, isSqliteAvailable, loadIndexSqlite, } from "./sqlite-index-store.js";
|
|
2
|
+
/**
|
|
3
|
+
* Which on-disk format to use.
|
|
4
|
+
*
|
|
5
|
+
* The result is cached because backend selection is process-wide. Explicit SQLite mode fails
|
|
6
|
+
* loudly when `node:sqlite` is unavailable; auto mode keeps Node 20 installations on JSON.
|
|
7
|
+
*/
|
|
8
|
+
let backendPromise;
|
|
9
|
+
export async function resolveIndexBackend() {
|
|
10
|
+
backendPromise ??= computeIndexBackend();
|
|
11
|
+
return backendPromise;
|
|
12
|
+
}
|
|
13
|
+
async function computeIndexBackend() {
|
|
14
|
+
const explicit = process.env["CODESIFT_INDEX_BACKEND"];
|
|
15
|
+
if (explicit === "json")
|
|
16
|
+
return "json";
|
|
17
|
+
if (explicit === "sqlite") {
|
|
18
|
+
if (!(await isSqliteAvailable())) {
|
|
19
|
+
throw new Error("CODESIFT_INDEX_BACKEND=sqlite but node:sqlite is unavailable (requires Node >= 22.5)");
|
|
20
|
+
}
|
|
21
|
+
return "sqlite";
|
|
22
|
+
}
|
|
23
|
+
return (await isSqliteAvailable()) ? "sqlite" : "json";
|
|
24
|
+
}
|
|
25
|
+
export function resetIndexBackendForTesting() {
|
|
26
|
+
backendPromise = undefined;
|
|
27
|
+
}
|
|
28
|
+
/** Reject SQLite artifacts where callers must provide the canonical index path. */
|
|
29
|
+
export function assertCanonicalIndexPath(indexPath) {
|
|
30
|
+
if (/\.db(?:-(?:wal|shm|journal))?(?:\.json)?$/i.test(indexPath)) {
|
|
31
|
+
throw new TypeError(`Expected a canonical index path, received SQLite database path: ${indexPath}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Keep both formats side by side so the JSON file remains a usable rollback artifact.
|
|
36
|
+
* Throws when given an already-derived SQLite file or sidecar: accepting one would silently
|
|
37
|
+
* derive a second, unrelated database path.
|
|
38
|
+
*/
|
|
39
|
+
export function sqlitePathFor(indexPath) {
|
|
40
|
+
assertCanonicalIndexPath(indexPath);
|
|
41
|
+
return indexPath.endsWith(".json")
|
|
42
|
+
? `${indexPath.slice(0, -".json".length)}.db`
|
|
43
|
+
: `${indexPath}.db`;
|
|
44
|
+
}
|
|
45
|
+
/** Guards one-time JSON-to-SQLite migration per database path. */
|
|
46
|
+
const migrations = new Map();
|
|
47
|
+
/**
|
|
48
|
+
* Bring an existing JSON index across on first touch without deleting the rollback source.
|
|
49
|
+
* The legacy loader is injected by the facade so this module never imports `index-store.ts`
|
|
50
|
+
* and therefore cannot introduce a storage-module cycle.
|
|
51
|
+
*/
|
|
52
|
+
export async function ensureSqliteMigrated(indexPath, dbPath, loadLegacyIndex) {
|
|
53
|
+
const inFlight = migrations.get(dbPath);
|
|
54
|
+
if (inFlight)
|
|
55
|
+
return inFlight;
|
|
56
|
+
const run = (async () => {
|
|
57
|
+
if ((await loadIndexSqlite(dbPath)) !== null)
|
|
58
|
+
return;
|
|
59
|
+
const legacy = await loadLegacyIndex(indexPath);
|
|
60
|
+
// The importer re-checks emptiness under its write lock, so racing processes cannot
|
|
61
|
+
// overwrite rows imported by the winner.
|
|
62
|
+
if (legacy)
|
|
63
|
+
await importLegacyIndexIfEmpty(dbPath, legacy);
|
|
64
|
+
})();
|
|
65
|
+
migrations.set(dbPath, run);
|
|
66
|
+
try {
|
|
67
|
+
await run;
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
// Failed migrations are retried. Do not probe the failing database again here: a second
|
|
71
|
+
// error would replace the original one through JavaScript's try/finally semantics.
|
|
72
|
+
migrations.delete(dbPath);
|
|
73
|
+
throw err;
|
|
74
|
+
}
|
|
75
|
+
migrations.set(dbPath, Promise.resolve());
|
|
76
|
+
}
|
|
77
|
+
export function resetMigrationCacheForTesting() {
|
|
78
|
+
migrations.clear();
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=index-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-migration.js","sourceRoot":"","sources":["../../src/storage/index-migration.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAIjC;;;;;GAKG;AACH,IAAI,cAAiD,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,cAAc,KAAK,mBAAmB,EAAE,CAAC;IACzC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACvD,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,MAAM,iBAAiB,EAAE,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,sFAAsF,CACvF,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,cAAc,GAAG,SAAS,CAAC;AAC7B,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,wBAAwB,CAAC,SAAiB;IACxD,IAAI,4CAA4C,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,SAAS,CACjB,mEAAmE,SAAS,EAAE,CAC/E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpC,OAAO,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;QAChC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAC7C,CAAC,CAAC,GAAG,SAAS,KAAK,CAAC;AACxB,CAAC;AAID,kEAAkE;AAClE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAyB,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAiB,EACjB,MAAc,EACd,eAAkC;IAElC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE;QACtB,IAAI,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI;YAAE,OAAO;QACrD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;QAChD,oFAAoF;QACpF,yCAAyC;QACzC,IAAI,MAAM;YAAE,MAAM,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,EAAE,CAAC;IAEL,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,CAAC;IACZ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wFAAwF;QACxF,mFAAmF;QACnF,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,UAAU,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import type { CodeIndex, CodeSymbol, FileEntry } from "../types.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export
|
|
8
|
-
export declare function resetMigrationCacheForTesting(): void;
|
|
2
|
+
import { type IndexSummary } from "./sqlite-index-store.js";
|
|
3
|
+
import { type IndexOrStaleResult } from "./index-version.js";
|
|
4
|
+
export { getIndexCacheBytesForTesting, getIndexCacheSizeForTesting, resetIndexCacheForTesting, resetSummaryCacheForTesting, } from "./index-cache.js";
|
|
5
|
+
export { type IndexBackend, resetIndexBackendForTesting, resetMigrationCacheForTesting, resolveIndexBackend, sqlitePathFor, } from "./index-migration.js";
|
|
6
|
+
export { collectExtractorVersionMismatches, isExtractorVersionCurrent, type ExtractorVersionCheckable, type ExtractorVersionMismatchRow, type IndexOrStaleResult, } from "./index-version.js";
|
|
7
|
+
export { getIndexWriteCountForTesting, resetIndexWriteCountForTesting, } from "./index-json-mutations.js";
|
|
9
8
|
/**
|
|
10
9
|
* Save a code index atomically.
|
|
11
10
|
* Writes to a temp file first, then renames to prevent partial reads.
|
|
12
11
|
*/
|
|
13
|
-
export declare function saveIndex(indexPath: string, index: CodeIndex
|
|
12
|
+
export declare function saveIndex(indexPath: string, index: CodeIndex, opts?: {
|
|
13
|
+
sourceComplete?: boolean;
|
|
14
|
+
}): Promise<void>;
|
|
14
15
|
/**
|
|
15
16
|
* Load a code index from disk.
|
|
16
17
|
* Returns null if file doesn't exist, is unreadable, or has invalid shape.
|
|
@@ -34,46 +35,29 @@ export declare function loadIndex(indexPath: string, currentVersions?: Record<st
|
|
|
34
35
|
* The JSON backend keeps the old cost; there is no way to read one record out of a blob.
|
|
35
36
|
*/
|
|
36
37
|
export declare function getFileEntry(indexPath: string, filePath: string): Promise<FileEntry | undefined>;
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Read an index's files and metadata WITHOUT constructing its symbols (ADR-004 stage 2).
|
|
40
|
+
*
|
|
41
|
+
* On the SQLite backend this skips the object graph entirely. On JSON there is nothing to skip —
|
|
42
|
+
* the format forces a whole-document parse — so this is parity, not a speedup, and it exists so
|
|
43
|
+
* callers can be written once against the narrow shape rather than branching on the backend.
|
|
44
|
+
*/
|
|
45
|
+
export declare function loadIndexSummary(indexPath: string): Promise<IndexSummary | null>;
|
|
46
|
+
/**
|
|
47
|
+
* Project a fully-loaded index onto the narrow shape, dropping the symbols array.
|
|
48
|
+
*
|
|
49
|
+
* `files` is COPIED, not aliased. This function's main caller projects an index held in the
|
|
50
|
+
* `codeIndexes` cache, so handing back the live array would let one caller's `sort`/`splice`
|
|
51
|
+
* rewrite what every later reader is given — the exact boundary `copyIndex` above exists to
|
|
52
|
+
* defend, reached by a different route. `workspaces` is copied for the same reason.
|
|
53
|
+
*/
|
|
54
|
+
export declare function summariseIndex(index: CodeIndex): IndexSummary;
|
|
39
55
|
export declare function resetStaleRollbackWarningForTesting(): void;
|
|
40
56
|
/** Discriminated union returned by loadIndexOrStale: distinguishes a healthy
|
|
41
57
|
* load from a version-mismatch stale-index case. Tools route through this
|
|
42
58
|
* helper instead of calling loadIndex directly so stale indexes surface as
|
|
43
59
|
* structured errors via staleToMcpError (src/tools/_helpers.ts) rather than
|
|
44
60
|
* silent empty results. */
|
|
45
|
-
export type IndexOrStaleResult = {
|
|
46
|
-
status: "ok";
|
|
47
|
-
index: CodeIndex;
|
|
48
|
-
} | {
|
|
49
|
-
/** The store exists but could not be read — locked, corrupt, unreadable. Distinct from a
|
|
50
|
-
* null return, which means "nothing is indexed here". A caller that treats this as an
|
|
51
|
-
* empty index reports a confident, wrong "no results". */
|
|
52
|
-
status: "unreadable";
|
|
53
|
-
reason: "storage_error";
|
|
54
|
-
/** SQLITE_* / errno code, for operators and for deciding whether a retry is sane. */
|
|
55
|
-
code: string;
|
|
56
|
-
message: string;
|
|
57
|
-
} | {
|
|
58
|
-
status: "stale";
|
|
59
|
-
reason: "extractor_version_mismatch";
|
|
60
|
-
/** Language whose extractor version drifted (e.g., "typescript", "python"). */
|
|
61
|
-
language: string;
|
|
62
|
-
expected_version: string;
|
|
63
|
-
actual_version: string;
|
|
64
|
-
/** Present when multiple `currentVersions` keys drift at once — operators
|
|
65
|
-
* should not assume fixing the primary `language` alone refreshes everything. */
|
|
66
|
-
mismatch_detail?: string;
|
|
67
|
-
};
|
|
68
|
-
export type ExtractorVersionMismatchRow = {
|
|
69
|
-
language: string;
|
|
70
|
-
expected: string;
|
|
71
|
-
actual: string;
|
|
72
|
-
};
|
|
73
|
-
/** All languages whose stored `extractor_version` entry does not match
|
|
74
|
-
* `currentVersions`, applying the same tolerances as `loadIndexOrStale`
|
|
75
|
-
* (newly added keys with no files in that language are skipped). */
|
|
76
|
-
export declare function collectExtractorVersionMismatches(index: CodeIndex, currentVersions: Record<string, string>): ExtractorVersionMismatchRow[];
|
|
77
61
|
/** Load an index with version-aware stale detection.
|
|
78
62
|
*
|
|
79
63
|
* Returns:
|
|
@@ -92,19 +76,6 @@ export declare function collectExtractorVersionMismatches(index: CodeIndex, curr
|
|
|
92
76
|
* to `loadIndex(...)` returning null. Callers must still handle null (no
|
|
93
77
|
* structured error) for those cases. */
|
|
94
78
|
export declare function loadIndexOrStale(indexPath: string, currentVersions: Record<string, string>): Promise<IndexOrStaleResult | null>;
|
|
95
|
-
/**
|
|
96
|
-
* Check whether the stored `extractor_version` snapshot matches the current
|
|
97
|
-
* set of extractor versions. Returns false when any language present in BOTH
|
|
98
|
-
* `currentVersions` and `index.files` is missing from the stored snapshot or
|
|
99
|
-
* has a different value. Languages added to `currentVersions` after this index
|
|
100
|
-
* was written are tolerated when the index has no files in that language —
|
|
101
|
-
* matches the tolerance applied by `collectExtractorVersionMismatches`. A missing
|
|
102
|
-
* `extractor_version` field on a fully legacy index is still treated as a
|
|
103
|
-
* version miss.
|
|
104
|
-
*/
|
|
105
|
-
export declare function isExtractorVersionCurrent(index: CodeIndex, currentVersions: Record<string, string>): boolean;
|
|
106
|
-
export declare function getIndexWriteCountForTesting(): number;
|
|
107
|
-
export declare function resetIndexWriteCountForTesting(): void;
|
|
108
79
|
/**
|
|
109
80
|
* Incrementally update an index for a single changed file.
|
|
110
81
|
* Removes old symbols for the file, adds new ones, and saves atomically.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-store.d.ts","sourceRoot":"","sources":["../../src/storage/index-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index-store.d.ts","sourceRoot":"","sources":["../../src/storage/index-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpE,OAAO,EAUL,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AAcjC,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,YAAY,EACjB,2BAA2B,EAC3B,6BAA6B,EAC7B,mBAAmB,EACnB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iCAAiC,EACjC,yBAAyB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,GAC/B,MAAM,2BAA2B,CAAC;AAMnC;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,SAAS,EAChB,IAAI,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GAClC,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAK3B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAShC;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAsBtF;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,CAkB7D;AAuDD,wBAAgB,mCAAmC,IAAI,IAAI,CAE1D;AAwDD;;;;4BAI4B;AAC5B;;;;;;;;;;;;;;;;wCAgBwC;AACxC,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAEpC;AAID;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EAAE,EACxB,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOtE"}
|