codesift-mcp 0.14.0 → 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 -867
- 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/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/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-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/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-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 +5 -61
- package/dist/storage/index-store.d.ts.map +1 -1
- package/dist/storage/index-store.js +33 -414
- 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 +169 -8
- 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/telemetry/config.d.ts.map +1 -1
- package/dist/storage/telemetry/config.js +3 -2
- package/dist/storage/telemetry/config.js.map +1 -1
- package/dist/storage/telemetry/retro-aggregator.d.ts +21 -0
- package/dist/storage/telemetry/retro-aggregator.d.ts.map +1 -1
- package/dist/storage/telemetry/retro-aggregator.js +58 -16
- package/dist/storage/telemetry/retro-aggregator.js.map +1 -1
- package/dist/storage/telemetry/sanitizer.d.ts +16 -0
- package/dist/storage/telemetry/sanitizer.d.ts.map +1 -1
- package/dist/storage/telemetry/sanitizer.js +2 -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 +158 -21
- package/dist/storage/telemetry/uploader.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 +47 -2
- 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 +19 -0
- package/dist/tools/index-tools/registry.d.ts.map +1 -1
- package/dist/tools/index-tools/registry.js +88 -2
- 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.map +1 -1
- package/dist/tools/index-tools.js +3 -1
- 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/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/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 -270
- package/dist/tools/symbol-tools.d.ts.map +1 -1
- package/dist/tools/symbol-tools.js +7 -1131
- 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/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 +1 -1
- package/rules/codesift.md +11 -2
- package/rules/codesift.mdc +11 -2
- package/rules/codex.md +11 -2
- package/rules/gemini.md +11 -2
|
@@ -47,6 +47,18 @@ const FIELD_COUNT = 17;
|
|
|
47
47
|
* where it runs and finds nothing.
|
|
48
48
|
*/
|
|
49
49
|
const GATE_NOT_RUN = new Set(["skipped", "not_run", "blocked", "blocked_infra", "-", ""]);
|
|
50
|
+
/**
|
|
51
|
+
* `N/A` = the skill has no such step, so there is nothing to run. It is NOT a verdict and NOT a
|
|
52
|
+
* skip. Before 2026-08-06 zuvo's append-retro had no N/A in the blind-audit enum at all, so skills
|
|
53
|
+
* without the step were forced to file a verdict-shaped value — 108 of 164 recorded verdicts (66%)
|
|
54
|
+
* came from skills whose SKILL.md never mentions a blind audit. Once zuvo started emitting N/A,
|
|
55
|
+
* gateRan() would have counted it as a real verdict (it is not in GATE_NOT_RUN), turning the fix
|
|
56
|
+
* into a worse metric than the bug. Hence its own set and its own counter.
|
|
57
|
+
*/
|
|
58
|
+
const GATE_NOT_APPLICABLE = new Set(["n/a", "na"]);
|
|
59
|
+
function gateNotApplicable(value) {
|
|
60
|
+
return GATE_NOT_APPLICABLE.has(value.trim().toLowerCase());
|
|
61
|
+
}
|
|
50
62
|
/**
|
|
51
63
|
* Collapse anything that is not a short, enum-shaped token to `"other"`.
|
|
52
64
|
*
|
|
@@ -68,7 +80,7 @@ function enumish(value) {
|
|
|
68
80
|
}
|
|
69
81
|
function gateRan(value) {
|
|
70
82
|
const v = value.trim().toLowerCase();
|
|
71
|
-
return v.length > 0 && !GATE_NOT_RUN.has(v) && !v.startsWith("blocked");
|
|
83
|
+
return v.length > 0 && !GATE_NOT_RUN.has(v) && !GATE_NOT_APPLICABLE.has(v) && !v.startsWith("blocked");
|
|
72
84
|
}
|
|
73
85
|
function median(values) {
|
|
74
86
|
if (values.length === 0)
|
|
@@ -85,20 +97,37 @@ function dayOf(tsField) {
|
|
|
85
97
|
const match = tsField.match(/(\d{4}-\d{2}-\d{2})/);
|
|
86
98
|
return match?.[1] ?? null;
|
|
87
99
|
}
|
|
88
|
-
/**
|
|
89
|
-
* Read and aggregate `~/.zuvo/retros.log`.
|
|
90
|
-
*
|
|
91
|
-
* Returns [] when zuvo is not installed, which is the common case for a codesift user — this must
|
|
92
|
-
* never be an error, only an absence.
|
|
93
|
-
*/
|
|
94
100
|
export async function aggregateRetros(sinceTs = 0, logPath = join(homedir(), ".zuvo", "retros.log")) {
|
|
95
|
-
|
|
101
|
+
return (await scanRetros(sinceTs, logPath)).rows;
|
|
102
|
+
}
|
|
103
|
+
export async function scanRetros(sinceTs = 0, logPath = join(homedir(), ".zuvo", "retros.log"), cursor = "timestamp") {
|
|
104
|
+
let file;
|
|
96
105
|
try {
|
|
97
|
-
|
|
106
|
+
file = await readFile(logPath);
|
|
98
107
|
}
|
|
99
108
|
catch {
|
|
100
|
-
return []
|
|
109
|
+
return { rows: [], maxTs: 0, nextOffset: cursor === "offset" ? sinceTs : 0 };
|
|
101
110
|
}
|
|
111
|
+
let raw;
|
|
112
|
+
let nextOffset = file.length;
|
|
113
|
+
const filterSinceTs = cursor === "timestamp" ? sinceTs : 0;
|
|
114
|
+
if (cursor === "offset") {
|
|
115
|
+
const start = sinceTs >= 0 && sinceTs <= file.length ? sinceTs : 0;
|
|
116
|
+
const unread = file.subarray(start);
|
|
117
|
+
const finalNewline = unread.lastIndexOf(0x0a);
|
|
118
|
+
if (finalNewline < 0) {
|
|
119
|
+
raw = "";
|
|
120
|
+
nextOffset = start;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
raw = unread.subarray(0, finalNewline + 1).toString("utf-8");
|
|
124
|
+
nextOffset = start + finalNewline + 1;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
raw = file.toString("utf-8");
|
|
129
|
+
}
|
|
130
|
+
let maxTs = 0;
|
|
102
131
|
const buckets = new Map();
|
|
103
132
|
for (const line of raw.split(/\r?\n/)) {
|
|
104
133
|
if (!line.startsWith("RETRO:"))
|
|
@@ -112,11 +141,15 @@ export async function aggregateRetros(sinceTs = 0, logPath = join(homedir(), ".z
|
|
|
112
141
|
const day = dayOf(f[F.TS] ?? "");
|
|
113
142
|
if (!day)
|
|
114
143
|
continue;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
144
|
+
const at = Date.parse((f[F.TS] ?? "").replace(/^RETRO:\s*/, ""));
|
|
145
|
+
// Track the newest timestamp across EVERY well-formed line, including ones this call filters
|
|
146
|
+
// out. The watermark must clear lines already sent, otherwise each flush rescans them.
|
|
147
|
+
if (Number.isFinite(at) && at > maxTs)
|
|
148
|
+
maxTs = at;
|
|
149
|
+
// `<=`, not `<`: the watermark stores the newest ts already sent, so a line sitting exactly on
|
|
150
|
+
// it was in the previous payload and would otherwise be re-sent on every flush forever.
|
|
151
|
+
if (filterSinceTs > 0 && Number.isFinite(at) && at <= filterSinceTs)
|
|
152
|
+
continue;
|
|
120
153
|
// Group on the NORMALISED values, not the raw ones: two lines whose prose differs both store
|
|
121
154
|
// `"other"`, so keying on the raw text would emit two aggregate rows with identical content.
|
|
122
155
|
const dims = {
|
|
@@ -136,6 +169,8 @@ export async function aggregateRetros(sinceTs = 0, logPath = join(homedir(), ".z
|
|
|
136
169
|
day,
|
|
137
170
|
...dims,
|
|
138
171
|
blind_audit_ran: 0,
|
|
172
|
+
blind_audit_na: 0,
|
|
173
|
+
adversarial_na: 0,
|
|
139
174
|
adversarial_ran: 0,
|
|
140
175
|
turns: [],
|
|
141
176
|
toolCalls: [],
|
|
@@ -154,10 +189,14 @@ export async function aggregateRetros(sinceTs = 0, logPath = join(homedir(), ".z
|
|
|
154
189
|
b.filesModified.push(num(F.FILES_MODIFIED));
|
|
155
190
|
if (gateRan(f[F.BLIND_AUDIT] ?? ""))
|
|
156
191
|
b.blind_audit_ran++;
|
|
192
|
+
if (gateNotApplicable(f[F.BLIND_AUDIT] ?? ""))
|
|
193
|
+
b.blind_audit_na++;
|
|
194
|
+
if (gateNotApplicable(f[F.ADVERSARIAL] ?? ""))
|
|
195
|
+
b.adversarial_na++;
|
|
157
196
|
if (gateRan(f[F.ADVERSARIAL] ?? ""))
|
|
158
197
|
b.adversarial_ran++;
|
|
159
198
|
}
|
|
160
|
-
|
|
199
|
+
const rows = [...buckets.values()]
|
|
161
200
|
.map((b) => ({
|
|
162
201
|
day: b.day,
|
|
163
202
|
skill: b.skill,
|
|
@@ -173,7 +212,10 @@ export async function aggregateRetros(sinceTs = 0, logPath = join(homedir(), ".z
|
|
|
173
212
|
median_files_modified: median(b.filesModified),
|
|
174
213
|
blind_audit_ran: b.blind_audit_ran,
|
|
175
214
|
adversarial_ran: b.adversarial_ran,
|
|
215
|
+
blind_audit_na: b.blind_audit_na,
|
|
216
|
+
adversarial_na: b.adversarial_na,
|
|
176
217
|
}))
|
|
177
218
|
.sort((a, b) => (a.day === b.day ? a.skill.localeCompare(b.skill) : a.day.localeCompare(b.day)));
|
|
219
|
+
return { rows, maxTs, nextOffset };
|
|
178
220
|
}
|
|
179
221
|
//# sourceMappingURL=retro-aggregator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retro-aggregator.js","sourceRoot":"","sources":["../../../src/storage/telemetry/retro-aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;;;;;;;;;;;;GAgBG;AAEH,iGAAiG;AACjG,MAAM,CAAC,GAAG;IACR,EAAE,EAAE,CAAC;IACL,KAAK,EAAE,CAAC;IACR,2CAA2C;IAC3C,SAAS,EAAE,CAAC;IACZ,QAAQ,EAAE,CAAC;IACX,yDAAyD;IACzD,WAAW,EAAE,CAAC;IACd,KAAK,EAAE,CAAC;IACR,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,CAAC;IACb,cAAc,EAAE,EAAE;IAClB,0DAA0D;IAC1D,yEAAyE;IACzE,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,EAAE;IACf,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,EAAE;CACH,CAAC;AAEX,MAAM,WAAW,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"retro-aggregator.js","sourceRoot":"","sources":["../../../src/storage/telemetry/retro-aggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,22 @@ export interface Level1Retro {
|
|
|
37
37
|
median_files_modified: number;
|
|
38
38
|
blind_audit_ran: number;
|
|
39
39
|
adversarial_ran: number;
|
|
40
|
+
/**
|
|
41
|
+
* Gate outcomes that are NOT a verdict and NOT a skip: the skill has no such
|
|
42
|
+
* step at all.
|
|
43
|
+
*
|
|
44
|
+
* Without these the correction that produced them is unreadable at the far end.
|
|
45
|
+
* `gateRan` stopped counting `N/A` as a verdict, which is right, but if only the
|
|
46
|
+
* `_ran` counters ship then a population of skills that never had a blind audit
|
|
47
|
+
* looks identical to one that has a blind audit and skips it — the metric falls
|
|
48
|
+
* and the reason is unrecoverable. 108 of 164 recorded verdicts came from skills
|
|
49
|
+
* with no such step, so this is most of the signal, not an edge case.
|
|
50
|
+
*
|
|
51
|
+
* It reveals strictly less than `_ran` does: that a SKILL has no gate is a
|
|
52
|
+
* property of the skill, and which skill ran is already sent.
|
|
53
|
+
*/
|
|
54
|
+
blind_audit_na: number;
|
|
55
|
+
adversarial_na: number;
|
|
40
56
|
}
|
|
41
57
|
export interface Level1ToolMetric {
|
|
42
58
|
tool: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../../src/storage/telemetry/sanitizer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,UAAU,CAAC;IAChB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,oFAAoF;IACpF,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../../src/storage/telemetry/sanitizer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,UAAU,CAAC;IAChB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,oFAAoF;IACpF,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;;;;OAaG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AA6DD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,UAAU,CAAC;IAChB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,aAAa,CAehB;AAYD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,SAAM,GAAG,IAAI,CAavE"}
|
|
@@ -40,6 +40,8 @@ function pickRetro(r) {
|
|
|
40
40
|
median_files_modified: r.median_files_modified,
|
|
41
41
|
blind_audit_ran: r.blind_audit_ran,
|
|
42
42
|
adversarial_ran: r.adversarial_ran,
|
|
43
|
+
blind_audit_na: r.blind_audit_na,
|
|
44
|
+
adversarial_na: r.adversarial_na,
|
|
43
45
|
};
|
|
44
46
|
}
|
|
45
47
|
/** Explicitly pick ONLY allowlisted env fields (no hostname/paths). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../../src/storage/telemetry/sanitizer.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,6EAA6E;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../../src/storage/telemetry/sanitizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
* payload, POSTs once (with a single retry), and advances the watermark ONLY on
|
|
4
4
|
* success. Best-effort; never throws.
|
|
5
5
|
*/
|
|
6
|
-
|
|
6
|
+
type FlushResult = "off" | "empty" | "sent" | "failed";
|
|
7
|
+
export declare function flushTelemetry(now: number): Promise<FlushResult>;
|
|
7
8
|
/** Start the background flush timer. Called once at server startup. No-op when
|
|
8
9
|
* telemetry is off or no endpoint is configured. */
|
|
9
10
|
export declare function startTelemetryTimer(): void;
|
|
10
11
|
export declare function stopTelemetryTimer(): void;
|
|
12
|
+
export {};
|
|
11
13
|
//# sourceMappingURL=uploader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../../src/storage/telemetry/uploader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../../src/storage/telemetry/uploader.ts"],"names":[],"mappings":"AA+JA;;;;GAIG;AACH,KAAK,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAGvD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAQhE;AA2FD;qDACqD;AACrD,wBAAgB,mBAAmB,IAAI,IAAI,CAO1C;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -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,7 +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";
|
|
16
|
-
import {
|
|
17
|
+
import { scanRetros } from "./retro-aggregator.js";
|
|
17
18
|
const FLUSH_TIMEOUT_MS = 2000; // hard cap per spec §3
|
|
18
19
|
const INITIAL_FLUSH_DELAY_MS = 10_000;
|
|
19
20
|
const FLUSH_INTERVAL_MS = 24 * 60 * 60 * 1000; // daily
|
|
@@ -23,24 +24,107 @@ function dataDir() {
|
|
|
23
24
|
function watermarkPath() {
|
|
24
25
|
return join(dataDir(), "telemetry-watermark");
|
|
25
26
|
}
|
|
26
|
-
|
|
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;
|
|
27
47
|
try {
|
|
28
|
-
|
|
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());
|
|
29
96
|
return Number.isFinite(n) ? n : 0;
|
|
30
97
|
}
|
|
31
98
|
catch {
|
|
32
99
|
return 0;
|
|
33
100
|
}
|
|
34
101
|
}
|
|
35
|
-
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()}`;
|
|
36
107
|
try {
|
|
37
108
|
mkdirSync(dataDir(), { recursive: true });
|
|
38
|
-
writeFileSync(
|
|
109
|
+
writeFileSync(tmp, String(ts), { encoding: "utf-8", flag: "wx" });
|
|
110
|
+
renameSync(tmp, path);
|
|
111
|
+
return true;
|
|
39
112
|
}
|
|
40
|
-
catch {
|
|
41
|
-
|
|
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;
|
|
42
120
|
}
|
|
43
121
|
}
|
|
122
|
+
function readWatermark() {
|
|
123
|
+
return readTs(watermarkPath());
|
|
124
|
+
}
|
|
125
|
+
function writeWatermark(ts) {
|
|
126
|
+
return writeTs(watermarkPath(), ts);
|
|
127
|
+
}
|
|
44
128
|
/** Baked default collector — anonymous ingest needs NO token (the endpoint is
|
|
45
129
|
* open + validated + rate-limited). Full/fleet sets CODESIFT_TELEMETRY_TOKEN.
|
|
46
130
|
* Both are env-overridable. */
|
|
@@ -75,30 +159,70 @@ async function postGzip(url, token, body) {
|
|
|
75
159
|
clearTimeout(timer);
|
|
76
160
|
}
|
|
77
161
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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) {
|
|
84
175
|
const level = resolveTelemetryLevel();
|
|
85
176
|
if (level === "off")
|
|
86
177
|
return "off";
|
|
87
178
|
const ep = endpoint();
|
|
88
179
|
const since = readWatermark();
|
|
89
180
|
const entries = await readLocalUsageEntries(since);
|
|
90
|
-
if (entries.length === 0)
|
|
91
|
-
return "empty";
|
|
92
181
|
const maxTs = entries.reduce((m, e) => (e.ts > m ? e.ts : m), since);
|
|
93
182
|
let body;
|
|
94
183
|
let path;
|
|
184
|
+
let retroSinceOffset = 0;
|
|
185
|
+
let retroNextOffset = 0;
|
|
186
|
+
let retroCursorReset = false;
|
|
95
187
|
if (level === "full") {
|
|
96
|
-
// 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";
|
|
97
192
|
path = "/ingest/codesift";
|
|
98
193
|
body = { schema_version: 1, level: "full", anon_id: getAnonId(), entries };
|
|
99
194
|
}
|
|
100
195
|
else {
|
|
101
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";
|
|
102
226
|
path = "/ingest/codesift";
|
|
103
227
|
const payload = buildLevel1Payload({
|
|
104
228
|
anonId: getAnonId(),
|
|
@@ -109,8 +233,8 @@ export async function flushTelemetry(now) {
|
|
|
109
233
|
// Absent when zuvo is not installed. Rides this payload rather than getting its own channel
|
|
110
234
|
// because this is the channel that reaches anyone: `/ingest/zuvo` is token-gated (it carries
|
|
111
235
|
// repo names and debt text) and its sender ships over SSH to a tailnet address, so it has
|
|
112
|
-
// exactly one reporting install.
|
|
113
|
-
retros:
|
|
236
|
+
// exactly one reporting install.
|
|
237
|
+
retros: scan.rows,
|
|
114
238
|
now,
|
|
115
239
|
});
|
|
116
240
|
assertSanitized(payload); // never send an unsanitized L1 payload
|
|
@@ -121,8 +245,21 @@ export async function flushTelemetry(now) {
|
|
|
121
245
|
ok = await postGzip(ep.url + path, ep.token, body); // single retry
|
|
122
246
|
if (!ok)
|
|
123
247
|
return "failed"; // leave watermark — retry next flush
|
|
124
|
-
writeWatermark(maxTs);
|
|
125
|
-
|
|
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";
|
|
126
263
|
}
|
|
127
264
|
let timer = null;
|
|
128
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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"}
|
|
@@ -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
|