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
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
// configured (CODESIFT_TELEMETRY_URL); with no endpoint nothing leaves the
|
|
5
5
|
// machine, which is the safe default until the public collector is exposed
|
|
6
6
|
// (staged rollout: notice first, push later).
|
|
7
|
-
import { readFileSync, writeFileSync,
|
|
7
|
+
import { closeSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
8
|
+
import { createHash } from "node:crypto";
|
|
8
9
|
import { gzipSync } from "node:zlib";
|
|
9
10
|
import { join } from "node:path";
|
|
10
11
|
import { homedir } from "node:os";
|
|
@@ -13,6 +14,7 @@ import { readLocalUsageEntries, aggregateToolMetrics, aggregateHintFunnel, aggre
|
|
|
13
14
|
import { buildEnvProfile } from "./env-profile.js";
|
|
14
15
|
import { getAnonId } from "./anon-id.js";
|
|
15
16
|
import { buildLevel1Payload, assertSanitized } from "./sanitizer.js";
|
|
17
|
+
import { scanRetros } from "./retro-aggregator.js";
|
|
16
18
|
const FLUSH_TIMEOUT_MS = 2000; // hard cap per spec §3
|
|
17
19
|
const INITIAL_FLUSH_DELAY_MS = 10_000;
|
|
18
20
|
const FLUSH_INTERVAL_MS = 24 * 60 * 60 * 1000; // daily
|
|
@@ -22,24 +24,107 @@ function dataDir() {
|
|
|
22
24
|
function watermarkPath() {
|
|
23
25
|
return join(dataDir(), "telemetry-watermark");
|
|
24
26
|
}
|
|
25
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Retros get their OWN byte-offset cursor. They are append-only but can be written by processes
|
|
29
|
+
* whose clocks disagree, so a timestamp watermark loses late records with an older or identical
|
|
30
|
+
* timestamp. A byte offset follows append order and does not depend on event time.
|
|
31
|
+
*
|
|
32
|
+
* Absent on upgrade, so it starts at 0 and the first flush backfills the machine's retro history.
|
|
33
|
+
* That is intended: those runs happened and were never reported.
|
|
34
|
+
*/
|
|
35
|
+
function retroWatermarkPath() {
|
|
36
|
+
return join(dataDir(), "telemetry-watermark-retros-offset");
|
|
37
|
+
}
|
|
38
|
+
function retroIdentityPath() {
|
|
39
|
+
return join(dataDir(), "telemetry-watermark-retros-identity");
|
|
40
|
+
}
|
|
41
|
+
function retroLogPath() {
|
|
42
|
+
return join(homedir(), ".zuvo", "retros.log");
|
|
43
|
+
}
|
|
44
|
+
/** Identity plus a digest of bytes immediately before an offset; stable across later appends. */
|
|
45
|
+
function retroLogIdentity(offset) {
|
|
46
|
+
let fd = null;
|
|
26
47
|
try {
|
|
27
|
-
|
|
48
|
+
fd = openSync(retroLogPath(), "r");
|
|
49
|
+
const stat = fstatSync(fd);
|
|
50
|
+
if (offset < 0 || offset > stat.size)
|
|
51
|
+
return null;
|
|
52
|
+
const start = Math.max(0, offset - 256);
|
|
53
|
+
const tail = Buffer.alloc(offset - start);
|
|
54
|
+
const bytes = readSync(fd, tail, 0, tail.length, start);
|
|
55
|
+
if (bytes !== tail.length)
|
|
56
|
+
return null;
|
|
57
|
+
const hash = createHash("sha256").update(tail).digest("hex").slice(0, 16);
|
|
58
|
+
return `${stat.dev}:${stat.ino}:${offset}:${hash}`;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
if (fd !== null)
|
|
65
|
+
closeSync(fd);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function readText(path) {
|
|
69
|
+
try {
|
|
70
|
+
return readFileSync(path, "utf-8").trim();
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function writeText(path, value) {
|
|
77
|
+
const tmp = `${path}.tmp.${process.pid}.${Date.now()}`;
|
|
78
|
+
try {
|
|
79
|
+
mkdirSync(dataDir(), { recursive: true });
|
|
80
|
+
writeFileSync(tmp, value, { encoding: "utf-8", flag: "wx" });
|
|
81
|
+
renameSync(tmp, path);
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
try {
|
|
86
|
+
unlinkSync(tmp);
|
|
87
|
+
}
|
|
88
|
+
catch { /* no temp file to clean */ }
|
|
89
|
+
console.error(`[codesift] telemetry cursor identity could not be persisted: ${String(err)}`);
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function readTs(path) {
|
|
94
|
+
try {
|
|
95
|
+
const n = Number(readFileSync(path, "utf-8").trim());
|
|
28
96
|
return Number.isFinite(n) ? n : 0;
|
|
29
97
|
}
|
|
30
98
|
catch {
|
|
31
99
|
return 0;
|
|
32
100
|
}
|
|
33
101
|
}
|
|
34
|
-
function
|
|
102
|
+
function writeTs(path, ts) {
|
|
103
|
+
const current = readTs(path);
|
|
104
|
+
if (current >= ts)
|
|
105
|
+
return true;
|
|
106
|
+
const tmp = `${path}.tmp.${process.pid}.${Date.now()}`;
|
|
35
107
|
try {
|
|
36
108
|
mkdirSync(dataDir(), { recursive: true });
|
|
37
|
-
writeFileSync(
|
|
109
|
+
writeFileSync(tmp, String(ts), { encoding: "utf-8", flag: "wx" });
|
|
110
|
+
renameSync(tmp, path);
|
|
111
|
+
return true;
|
|
38
112
|
}
|
|
39
|
-
catch {
|
|
40
|
-
|
|
113
|
+
catch (err) {
|
|
114
|
+
try {
|
|
115
|
+
unlinkSync(tmp);
|
|
116
|
+
}
|
|
117
|
+
catch { /* no temp file to clean */ }
|
|
118
|
+
console.error(`[codesift] telemetry watermark could not be persisted: ${String(err)}`);
|
|
119
|
+
return false;
|
|
41
120
|
}
|
|
42
121
|
}
|
|
122
|
+
function readWatermark() {
|
|
123
|
+
return readTs(watermarkPath());
|
|
124
|
+
}
|
|
125
|
+
function writeWatermark(ts) {
|
|
126
|
+
return writeTs(watermarkPath(), ts);
|
|
127
|
+
}
|
|
43
128
|
/** Baked default collector — anonymous ingest needs NO token (the endpoint is
|
|
44
129
|
* open + validated + rate-limited). Full/fleet sets CODESIFT_TELEMETRY_TOKEN.
|
|
45
130
|
* Both are env-overridable. */
|
|
@@ -74,30 +159,70 @@ async function postGzip(url, token, body) {
|
|
|
74
159
|
clearTimeout(timer);
|
|
75
160
|
}
|
|
76
161
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
162
|
+
let flushInFlight = null;
|
|
163
|
+
export function flushTelemetry(now) {
|
|
164
|
+
if (flushInFlight)
|
|
165
|
+
return flushInFlight;
|
|
166
|
+
const run = flushTelemetryOnce(now);
|
|
167
|
+
const tracked = run.finally(() => {
|
|
168
|
+
if (flushInFlight === tracked)
|
|
169
|
+
flushInFlight = null;
|
|
170
|
+
});
|
|
171
|
+
flushInFlight = tracked;
|
|
172
|
+
return tracked;
|
|
173
|
+
}
|
|
174
|
+
async function flushTelemetryOnce(now) {
|
|
83
175
|
const level = resolveTelemetryLevel();
|
|
84
176
|
if (level === "off")
|
|
85
177
|
return "off";
|
|
86
178
|
const ep = endpoint();
|
|
87
179
|
const since = readWatermark();
|
|
88
180
|
const entries = await readLocalUsageEntries(since);
|
|
89
|
-
if (entries.length === 0)
|
|
90
|
-
return "empty";
|
|
91
181
|
const maxTs = entries.reduce((m, e) => (e.ts > m ? e.ts : m), since);
|
|
92
182
|
let body;
|
|
93
183
|
let path;
|
|
184
|
+
let retroSinceOffset = 0;
|
|
185
|
+
let retroNextOffset = 0;
|
|
186
|
+
let retroCursorReset = false;
|
|
94
187
|
if (level === "full") {
|
|
95
|
-
// Level 2 (opt-in): raw entries, batched. Full detail — query/paths included.
|
|
188
|
+
// Level 2 (opt-in): raw entries, batched. Full detail — query/paths included. Retros do not
|
|
189
|
+
// ride this level, so no tool usage genuinely means nothing to send.
|
|
190
|
+
if (entries.length === 0)
|
|
191
|
+
return "empty";
|
|
96
192
|
path = "/ingest/codesift";
|
|
97
193
|
body = { schema_version: 1, level: "full", anon_id: getAnonId(), entries };
|
|
98
194
|
}
|
|
99
195
|
else {
|
|
100
196
|
// Level 1 (anon): aggregate-only, allowlisted, guarded.
|
|
197
|
+
// Read retros BEFORE deciding there is nothing to send. They are an independent stream: a
|
|
198
|
+
// machine can run zuvo skills with no CodeSift tool calls at all (measured: CodeSift was
|
|
199
|
+
// unavailable / not-indexed / transport-closed in ~40% of zuvo runs), and the old
|
|
200
|
+
// `entries.length === 0 -> empty` return fired first, so those machines reported NOTHING and
|
|
201
|
+
// read as "zuvo is not installed here".
|
|
202
|
+
const savedOffset = readTs(retroWatermarkPath());
|
|
203
|
+
const savedIdentity = retroLogIdentity(savedOffset);
|
|
204
|
+
if (savedIdentity !== null && readText(retroIdentityPath()) === savedIdentity) {
|
|
205
|
+
retroSinceOffset = savedOffset;
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
retroCursorReset = savedOffset > 0;
|
|
209
|
+
retroSinceOffset = 0;
|
|
210
|
+
}
|
|
211
|
+
let scanIdentity = retroLogIdentity(retroSinceOffset);
|
|
212
|
+
let scan = await scanRetros(retroSinceOffset, retroLogPath(), "offset");
|
|
213
|
+
if (scanIdentity !== retroLogIdentity(retroSinceOffset)) {
|
|
214
|
+
// The path changed between validation and read. Retry from the beginning of the replacement
|
|
215
|
+
// and refuse to upload if it rotates again during the retry.
|
|
216
|
+
retroCursorReset = true;
|
|
217
|
+
retroSinceOffset = 0;
|
|
218
|
+
scanIdentity = retroLogIdentity(0);
|
|
219
|
+
scan = await scanRetros(0, retroLogPath(), "offset");
|
|
220
|
+
if (scanIdentity !== retroLogIdentity(0))
|
|
221
|
+
return "failed";
|
|
222
|
+
}
|
|
223
|
+
retroNextOffset = scan.nextOffset;
|
|
224
|
+
if (entries.length === 0 && scan.rows.length === 0)
|
|
225
|
+
return "empty";
|
|
101
226
|
path = "/ingest/codesift";
|
|
102
227
|
const payload = buildLevel1Payload({
|
|
103
228
|
anonId: getAnonId(),
|
|
@@ -105,6 +230,11 @@ export async function flushTelemetry(now) {
|
|
|
105
230
|
tools: aggregateToolMetrics(entries),
|
|
106
231
|
hints: aggregateHintFunnel(entries),
|
|
107
232
|
planTurn: aggregatePlanTurnFunnel(entries),
|
|
233
|
+
// Absent when zuvo is not installed. Rides this payload rather than getting its own channel
|
|
234
|
+
// because this is the channel that reaches anyone: `/ingest/zuvo` is token-gated (it carries
|
|
235
|
+
// repo names and debt text) and its sender ships over SSH to a tailnet address, so it has
|
|
236
|
+
// exactly one reporting install.
|
|
237
|
+
retros: scan.rows,
|
|
108
238
|
now,
|
|
109
239
|
});
|
|
110
240
|
assertSanitized(payload); // never send an unsanitized L1 payload
|
|
@@ -115,8 +245,21 @@ export async function flushTelemetry(now) {
|
|
|
115
245
|
ok = await postGzip(ep.url + path, ep.token, body); // single retry
|
|
116
246
|
if (!ok)
|
|
117
247
|
return "failed"; // leave watermark — retry next flush
|
|
118
|
-
writeWatermark(maxTs);
|
|
119
|
-
|
|
248
|
+
let persisted = writeWatermark(maxTs);
|
|
249
|
+
// Advance the retro cursor independently, and only forward. Guarded so a flush that carried
|
|
250
|
+
// no retros (or a level that does not carry them) cannot move it — moving it on an empty scan
|
|
251
|
+
// would re-create the original bug in a new place.
|
|
252
|
+
if (retroNextOffset > retroSinceOffset) {
|
|
253
|
+
const offsetPersisted = retroCursorReset
|
|
254
|
+
? writeText(retroWatermarkPath(), String(retroNextOffset))
|
|
255
|
+
: writeTs(retroWatermarkPath(), retroNextOffset);
|
|
256
|
+
const nextIdentity = retroLogIdentity(retroNextOffset);
|
|
257
|
+
const identityPersisted = offsetPersisted && nextIdentity !== null
|
|
258
|
+
? writeText(retroIdentityPath(), nextIdentity)
|
|
259
|
+
: false;
|
|
260
|
+
persisted = persisted && offsetPersisted && identityPersisted;
|
|
261
|
+
}
|
|
262
|
+
return persisted ? "sent" : "failed";
|
|
120
263
|
}
|
|
121
264
|
let timer = null;
|
|
122
265
|
/** Start the background flush timer. Called once at server startup. No-op when
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploader.js","sourceRoot":"","sources":["../../../src/storage/telemetry/uploader.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8EAA8E;AAC9E,2EAA2E;AAC3E,2EAA2E;AAC3E,2EAA2E;AAC3E,8CAA8C;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"uploader.js","sourceRoot":"","sources":["../../../src/storage/telemetry/uploader.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ export async function resolveWorkspaces(root) {
|
|
|
34
34
|
...(rootPackage ? { rootPackage } : {}),
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
|
-
catch (
|
|
37
|
+
catch (_err) {
|
|
38
38
|
// @manypkg throws on non-monorepo or malformed config — caller treats null
|
|
39
39
|
// as flat-repo. Existing regex YAML parser in project-tools.ts is the
|
|
40
40
|
// last-resort fallback and is invoked there, not here.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-resolver.js","sourceRoot":"","sources":["../../src/storage/workspace-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAO3C,oFAAoF;AACpF,MAAM,cAAc,GAAuC;IACzD,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,cAAc,EAAE,QAAQ,CAAC;IAC1B,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAC5B,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,OAAO,EAAE,OAAO,CAAC;CACnB,CAAC;AAqBF;;;kEAGkE;AAClE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY;IAClD,IAAI,GAAG,GAAsF,IAAI,CAAC;IAClG,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW;YACpC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,WAA4C,EAAE;YAC/G,CAAC,CAAC,SAAS,CAAC;QACd,GAAG,GAAG;YACJ,IAAI,EAAE,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAE,MAAM,CAAC,IAAyB,CAAC,IAAI;YAC5F,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpC,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,WAAW,EAAE,CAAC,CAAC,WAA4C;aAC5D,CAAC,CAAC;YACH,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC;IACJ,CAAC;IAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"workspace-resolver.js","sourceRoot":"","sources":["../../src/storage/workspace-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { RepoEndpoint } from "../types.js";
|
|
2
|
+
import type { ApiContractResult as HonoContractResult } from "./hono-api-contract.js";
|
|
3
|
+
import type { NestRouteInventoryResult } from "./nest-tools.js";
|
|
4
|
+
import type { ApiContractResult as NextjsContractResult } from "./nextjs-api-contract-tools.js";
|
|
5
|
+
/**
|
|
6
|
+
* Replace all path-parameter segments with the canonical `{param}` placeholder.
|
|
7
|
+
*
|
|
8
|
+
* Recognised styles:
|
|
9
|
+
* - Express / Hono `:name`
|
|
10
|
+
* - OpenAPI / NestJS `{name}`
|
|
11
|
+
* - Next.js `[name]`
|
|
12
|
+
* - Next.js catch-all `[...name]`
|
|
13
|
+
*
|
|
14
|
+
* Trailing slashes are stripped (except for a bare "/").
|
|
15
|
+
* Method strings are UPPERCASED by callers; this function only handles paths.
|
|
16
|
+
*/
|
|
17
|
+
export declare function normalizePathParams(path: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Adapt an `extractApiContract` result (Hono) into `RepoEndpoint[]`.
|
|
20
|
+
*
|
|
21
|
+
* Only the `summary` format carries the per-route list; `openapi` format and
|
|
22
|
+
* missing/undefined summary both return [].
|
|
23
|
+
*/
|
|
24
|
+
export declare function adaptHonoContract(repo: string, r: HonoContractResult): RepoEndpoint[];
|
|
25
|
+
/**
|
|
26
|
+
* Adapt a `nestRouteInventory` result into `RepoEndpoint[]`.
|
|
27
|
+
*
|
|
28
|
+
* `NestRouteEntry.file` is a required string field — the value is used as-is
|
|
29
|
+
* (may be "" for entries where the controller file couldn't be resolved).
|
|
30
|
+
*/
|
|
31
|
+
export declare function adaptNestInventory(repo: string, r: NestRouteInventoryResult): RepoEndpoint[];
|
|
32
|
+
/**
|
|
33
|
+
* Adapt a Next.js `ApiContractResult` into `RepoEndpoint[]`.
|
|
34
|
+
*
|
|
35
|
+
* `HandlerShape.method` is a single `HttpMethod` string per entry (Next.js
|
|
36
|
+
* emits one handler per HTTP verb), so each handler maps to one RepoEndpoint.
|
|
37
|
+
*/
|
|
38
|
+
export declare function adaptNextjsContract(repo: string, r: NextjsContractResult): RepoEndpoint[];
|
|
39
|
+
//# sourceMappingURL=cross-repo-contract-adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-repo-contract-adapters.d.ts","sourceRoot":"","sources":["../../src/tools/cross-repo-contract-adapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,IAAI,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,IAAI,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEhG;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAaxD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,YAAY,EAAE,CAOrF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,wBAAwB,GAAG,YAAY,EAAE,CAO5F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,oBAAoB,GAAG,YAAY,EAAE,CAOzF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replace all path-parameter segments with the canonical `{param}` placeholder.
|
|
3
|
+
*
|
|
4
|
+
* Recognised styles:
|
|
5
|
+
* - Express / Hono `:name`
|
|
6
|
+
* - OpenAPI / NestJS `{name}`
|
|
7
|
+
* - Next.js `[name]`
|
|
8
|
+
* - Next.js catch-all `[...name]`
|
|
9
|
+
*
|
|
10
|
+
* Trailing slashes are stripped (except for a bare "/").
|
|
11
|
+
* Method strings are UPPERCASED by callers; this function only handles paths.
|
|
12
|
+
*/
|
|
13
|
+
export function normalizePathParams(path) {
|
|
14
|
+
// Replace :name segments
|
|
15
|
+
let result = path.replace(/:([^/]+)/g, "{param}");
|
|
16
|
+
// Replace {name} segments (already-braced OpenAPI style)
|
|
17
|
+
result = result.replace(/\{([^}]+)\}/g, "{param}");
|
|
18
|
+
// Replace [...name] and [name] Next.js segments
|
|
19
|
+
result = result.replace(/\[\.\.\.([^\]]+)\]/g, "{param}");
|
|
20
|
+
result = result.replace(/\[([^\]]+)\]/g, "{param}");
|
|
21
|
+
// Strip trailing slash (but keep bare "/")
|
|
22
|
+
if (result.length > 1 && result.endsWith("/")) {
|
|
23
|
+
result = result.slice(0, -1);
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Adapt an `extractApiContract` result (Hono) into `RepoEndpoint[]`.
|
|
29
|
+
*
|
|
30
|
+
* Only the `summary` format carries the per-route list; `openapi` format and
|
|
31
|
+
* missing/undefined summary both return [].
|
|
32
|
+
*/
|
|
33
|
+
export function adaptHonoContract(repo, r) {
|
|
34
|
+
if (!r.summary)
|
|
35
|
+
return [];
|
|
36
|
+
return r.summary.map((entry) => {
|
|
37
|
+
const method = entry.method.toUpperCase();
|
|
38
|
+
const normalized_path = normalizePathParams(entry.path);
|
|
39
|
+
return { repo, method, path: entry.path, normalized_path, file: entry.file };
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Adapt a `nestRouteInventory` result into `RepoEndpoint[]`.
|
|
44
|
+
*
|
|
45
|
+
* `NestRouteEntry.file` is a required string field — the value is used as-is
|
|
46
|
+
* (may be "" for entries where the controller file couldn't be resolved).
|
|
47
|
+
*/
|
|
48
|
+
export function adaptNestInventory(repo, r) {
|
|
49
|
+
const routes = r.routes ?? [];
|
|
50
|
+
return routes.map((entry) => {
|
|
51
|
+
const method = entry.method.toUpperCase();
|
|
52
|
+
const normalized_path = normalizePathParams(entry.path);
|
|
53
|
+
return { repo, method, path: entry.path, normalized_path, file: entry.file };
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Adapt a Next.js `ApiContractResult` into `RepoEndpoint[]`.
|
|
58
|
+
*
|
|
59
|
+
* `HandlerShape.method` is a single `HttpMethod` string per entry (Next.js
|
|
60
|
+
* emits one handler per HTTP verb), so each handler maps to one RepoEndpoint.
|
|
61
|
+
*/
|
|
62
|
+
export function adaptNextjsContract(repo, r) {
|
|
63
|
+
const handlers = r.handlers ?? [];
|
|
64
|
+
return handlers.map((handler) => {
|
|
65
|
+
const method = handler.method.toUpperCase();
|
|
66
|
+
const normalized_path = normalizePathParams(handler.path);
|
|
67
|
+
return { repo, method, path: handler.path, normalized_path, file: handler.file };
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=cross-repo-contract-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-repo-contract-adapters.js","sourceRoot":"","sources":["../../src/tools/cross-repo-contract-adapters.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,yBAAyB;IACzB,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAClD,yDAAyD;IACzD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IACnD,gDAAgD;IAChD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;IAC1D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IACpD,2CAA2C;IAC3C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,CAAqB;IACnE,IAAI,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,eAAe,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,CAA2B;IAC1E,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;IAC9B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,eAAe,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,CAAuB;IACvE,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;IAClC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,eAAe,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type GroupContractResult, type RepoResolver } from "./cross-repo-contract-types.js";
|
|
2
|
+
export declare function matchGroupContracts(groupName: string, opts?: {
|
|
3
|
+
registryPath?: string;
|
|
4
|
+
resolver?: RepoResolver;
|
|
5
|
+
}): Promise<GroupContractResult>;
|
|
6
|
+
/**
|
|
7
|
+
* Answer "who calls METHOD path" within a group. Returns producer↔consumer
|
|
8
|
+
* `matches` for the endpoint AND `consumers_of_path` — every raw consumer call
|
|
9
|
+
* hitting that path, INCLUDING calls to endpoints with no producer in the group
|
|
10
|
+
* (an external/un-indexed service). Method is uppercased; the path is normalised
|
|
11
|
+
* (`:id`/`{id}`/`[id]` → `{param}`) so any param style works.
|
|
12
|
+
*/
|
|
13
|
+
export declare function findEndpointConsumers(groupName: string, method: string, path: string, opts?: {
|
|
14
|
+
registryPath?: string;
|
|
15
|
+
resolver?: RepoResolver;
|
|
16
|
+
}): Promise<GroupContractResult>;
|
|
17
|
+
//# sourceMappingURL=cross-repo-contract-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-repo-contract-group.d.ts","sourceRoot":"","sources":["../../src/tools/cross-repo-contract-group.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,mBAAmB,EAExB,KAAK,YAAY,EAClB,MAAM,gCAAgC,CAAC;AAmExC,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;CAAE,GACxD,OAAO,CAAC,mBAAmB,CAAC,CAI9B;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;CAAE,GACxD,OAAO,CAAC,mBAAmB,CAAC,CA0B9B"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { normalizePathParams } from "./cross-repo-contract-adapters.js";
|
|
2
|
+
import { instantiatesTemplate, matchContracts, matchesPartialPrefix } from "./cross-repo-contract-matcher.js";
|
|
3
|
+
import { defaultRepoResolver } from "./cross-repo-contract-resolver.js";
|
|
4
|
+
import { MAX_GROUP_REPOS, } from "./cross-repo-contract-types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Answer "who calls what" across a registered repo group: extract producer
|
|
7
|
+
* endpoints and consumer outbound calls for every indexed repo in the group,
|
|
8
|
+
* then match them. Unindexed repos collect a warning and are skipped; a group
|
|
9
|
+
* over MAX_GROUP_REPOS is capped with a truncation warning.
|
|
10
|
+
*/
|
|
11
|
+
async function collectGroupData(groupName, opts) {
|
|
12
|
+
const { getGroup, getGroupRegistryPath } = await import("../storage/group-registry.js");
|
|
13
|
+
let registryPath = opts?.registryPath;
|
|
14
|
+
if (!registryPath) {
|
|
15
|
+
const { loadConfig } = await import("../config.js");
|
|
16
|
+
registryPath = getGroupRegistryPath(loadConfig().dataDir);
|
|
17
|
+
}
|
|
18
|
+
const group = await getGroup(registryPath, groupName);
|
|
19
|
+
if (!group) {
|
|
20
|
+
return { producers: [], consumers: [], warnings: [], repos_processed: 0, error: `repo group "${groupName}" not found` };
|
|
21
|
+
}
|
|
22
|
+
const resolver = opts?.resolver ?? defaultRepoResolver;
|
|
23
|
+
const warnings = [];
|
|
24
|
+
let repos = group.repos;
|
|
25
|
+
if (repos.length > MAX_GROUP_REPOS) {
|
|
26
|
+
warnings.push(`group "${groupName}" has ${repos.length} repos; capped at ${MAX_GROUP_REPOS}`);
|
|
27
|
+
repos = repos.slice(0, MAX_GROUP_REPOS);
|
|
28
|
+
}
|
|
29
|
+
const producers = [];
|
|
30
|
+
const consumers = [];
|
|
31
|
+
let processed = 0;
|
|
32
|
+
for (const repo of repos) {
|
|
33
|
+
let data;
|
|
34
|
+
try {
|
|
35
|
+
data = await resolver(repo);
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
warnings.push(`repo "${repo}" failed to resolve: ${err instanceof Error ? err.message : String(err)}`);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (data.warnings)
|
|
42
|
+
warnings.push(...data.warnings);
|
|
43
|
+
if (!data.indexed) {
|
|
44
|
+
warnings.push(`repo "${repo}" is not indexed — skipped`);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
producers.push(...data.producers);
|
|
48
|
+
consumers.push(...data.consumers);
|
|
49
|
+
processed++;
|
|
50
|
+
}
|
|
51
|
+
return { producers, consumers, warnings, repos_processed: processed };
|
|
52
|
+
}
|
|
53
|
+
export async function matchGroupContracts(groupName, opts) {
|
|
54
|
+
const d = await collectGroupData(groupName, opts);
|
|
55
|
+
if (d.error)
|
|
56
|
+
return { matches: [], warnings: d.warnings, repos_processed: d.repos_processed, error: d.error };
|
|
57
|
+
return { matches: matchContracts(d.producers, d.consumers), warnings: d.warnings, repos_processed: d.repos_processed };
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Answer "who calls METHOD path" within a group. Returns producer↔consumer
|
|
61
|
+
* `matches` for the endpoint AND `consumers_of_path` — every raw consumer call
|
|
62
|
+
* hitting that path, INCLUDING calls to endpoints with no producer in the group
|
|
63
|
+
* (an external/un-indexed service). Method is uppercased; the path is normalised
|
|
64
|
+
* (`:id`/`{id}`/`[id]` → `{param}`) so any param style works.
|
|
65
|
+
*/
|
|
66
|
+
export async function findEndpointConsumers(groupName, method, path, opts) {
|
|
67
|
+
const d = await collectGroupData(groupName, opts);
|
|
68
|
+
if (d.error)
|
|
69
|
+
return { matches: [], warnings: d.warnings, repos_processed: d.repos_processed, error: d.error };
|
|
70
|
+
const wantMethod = method.toUpperCase();
|
|
71
|
+
const wantPath = normalizePathParams(path);
|
|
72
|
+
const matches = matchContracts(d.producers, d.consumers).filter((m) => m.method === wantMethod && m.path === wantPath);
|
|
73
|
+
// Raw consumers of the queried path — independent of whether a group producer
|
|
74
|
+
// serves it (covers external endpoints the group does not produce).
|
|
75
|
+
const consumersOfPath = d.consumers.filter((c) => {
|
|
76
|
+
if (c.method !== wantMethod)
|
|
77
|
+
return false;
|
|
78
|
+
return c.partial
|
|
79
|
+
? matchesPartialPrefix(c.url_prefix, wantPath)
|
|
80
|
+
: instantiatesTemplate(c.url_prefix, wantPath);
|
|
81
|
+
});
|
|
82
|
+
return {
|
|
83
|
+
matches,
|
|
84
|
+
warnings: d.warnings,
|
|
85
|
+
repos_processed: d.repos_processed,
|
|
86
|
+
consumers_of_path: consumersOfPath,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=cross-repo-contract-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-repo-contract-group.js","sourceRoot":"","sources":["../../src/tools/cross-repo-contract-group.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ContractMatch, RepoEndpoint } from "../types.js";
|
|
2
|
+
import type { OutboundCall } from "./cross-repo-outbound-calls.js";
|
|
3
|
+
/** Test whether a concrete path instantiates a normalised template path. */
|
|
4
|
+
declare function instantiatesTemplate(concretePath: string, normalizedTemplate: string): boolean;
|
|
5
|
+
/** Test whether a partial consumer URL prefix matches a template's literal head. */
|
|
6
|
+
declare function matchesPartialPrefix(urlPrefix: string, normalizedTemplate: string): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Match producer `RepoEndpoint[]` against consumer outbound calls (annotated with repo).
|
|
9
|
+
*
|
|
10
|
+
* Matching rules:
|
|
11
|
+
* - Same HTTP method (case-insensitive, already uppercased by adapters)
|
|
12
|
+
* - Cross-repo only (producer.repo !== consumer.repo)
|
|
13
|
+
* - Non-partial consumer: concrete path INSTANTIATES the normalised template → "exact"
|
|
14
|
+
* - Partial consumer: url_prefix is a path-prefix of the template's literal head → "partial"
|
|
15
|
+
*
|
|
16
|
+
* One consumer can match multiple producers (all reported).
|
|
17
|
+
* Multiple consumers can match one producer (all reported).
|
|
18
|
+
* Deduplication: identical (producer_repo, consumer_repo, consumer_file, line, path, method) → single entry.
|
|
19
|
+
*/
|
|
20
|
+
export declare function matchContracts(producers: RepoEndpoint[], consumers: Array<OutboundCall & {
|
|
21
|
+
repo: string;
|
|
22
|
+
}>): ContractMatch[];
|
|
23
|
+
export { instantiatesTemplate, matchesPartialPrefix };
|
|
24
|
+
//# sourceMappingURL=cross-repo-contract-matcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-repo-contract-matcher.d.ts","sourceRoot":"","sources":["../../src/tools/cross-repo-contract-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAmBnE,4EAA4E;AAC5E,iBAAS,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAcvF;AA8BD,oFAAoF;AACpF,iBAAS,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CASpF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,YAAY,EAAE,EACzB,SAAS,EAAE,KAAK,CAAC,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAChD,aAAa,EAAE,CA6CjB;AAED,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAAC"}
|