@cyanheads/mcp-ts-core 0.11.5 → 0.12.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/AGENTS.md +27 -23
- package/CLAUDE.md +27 -23
- package/README.md +10 -10
- package/biome.json +1 -1
- package/changelog/0.12.x/0.12.0.md +96 -0
- package/dist/cli/init.js +1 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/config/index.d.ts +0 -18
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +0 -25
- package/dist/config/index.js.map +1 -1
- package/dist/core/app.d.ts +5 -7
- package/dist/core/app.d.ts.map +1 -1
- package/dist/core/app.js +18 -27
- package/dist/core/app.js.map +1 -1
- package/dist/core/context.d.ts +90 -57
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +32 -33
- package/dist/core/context.js.map +1 -1
- package/dist/core/gcPressure.d.ts.map +1 -1
- package/dist/core/gcPressure.js +3 -4
- package/dist/core/gcPressure.js.map +1 -1
- package/dist/core/index.d.ts +6 -7
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +10 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/serverManifest.d.ts +1 -3
- package/dist/core/serverManifest.d.ts.map +1 -1
- package/dist/core/serverManifest.js +9 -4
- package/dist/core/serverManifest.js.map +1 -1
- package/dist/core/worker.d.ts.map +1 -1
- package/dist/core/worker.js +32 -35
- package/dist/core/worker.js.map +1 -1
- package/dist/logs/combined.log +10 -22
- package/dist/logs/error.log +6 -18
- package/dist/mcp-server/inputRequired.d.ts +52 -0
- package/dist/mcp-server/inputRequired.d.ts.map +1 -0
- package/dist/mcp-server/inputRequired.js +76 -0
- package/dist/mcp-server/inputRequired.js.map +1 -0
- package/dist/mcp-server/notifications.d.ts +33 -31
- package/dist/mcp-server/notifications.d.ts.map +1 -1
- package/dist/mcp-server/notifications.js +34 -26
- package/dist/mcp-server/notifications.js.map +1 -1
- package/dist/mcp-server/prompts/prompt-registration.d.ts +2 -2
- package/dist/mcp-server/prompts/prompt-registration.d.ts.map +1 -1
- package/dist/mcp-server/prompts/prompt-registration.js +15 -5
- package/dist/mcp-server/prompts/prompt-registration.js.map +1 -1
- package/dist/mcp-server/prompts/utils/promptDefinition.d.ts +1 -1
- package/dist/mcp-server/prompts/utils/promptDefinition.d.ts.map +1 -1
- package/dist/mcp-server/resources/resource-registration.d.ts +3 -3
- package/dist/mcp-server/resources/resource-registration.d.ts.map +1 -1
- package/dist/mcp-server/resources/resource-registration.js +8 -15
- package/dist/mcp-server/resources/resource-registration.js.map +1 -1
- package/dist/mcp-server/resources/resourceSubscriptions.d.ts +45 -0
- package/dist/mcp-server/resources/resourceSubscriptions.d.ts.map +1 -0
- package/dist/mcp-server/resources/resourceSubscriptions.js +51 -0
- package/dist/mcp-server/resources/resourceSubscriptions.js.map +1 -0
- package/dist/mcp-server/resources/utils/resourceDefinition.d.ts +3 -5
- package/dist/mcp-server/resources/utils/resourceDefinition.d.ts.map +1 -1
- package/dist/mcp-server/resources/utils/resourceDefinition.js +1 -1
- package/dist/mcp-server/resources/utils/resourceDefinition.js.map +1 -1
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts +8 -15
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts.map +1 -1
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.js +21 -22
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.js.map +1 -1
- package/dist/mcp-server/server.d.ts +12 -21
- package/dist/mcp-server/server.d.ts.map +1 -1
- package/dist/mcp-server/server.js +38 -28
- package/dist/mcp-server/server.js.map +1 -1
- package/dist/mcp-server/tools/tool-registration.d.ts +11 -33
- package/dist/mcp-server/tools/tool-registration.d.ts.map +1 -1
- package/dist/mcp-server/tools/tool-registration.js +17 -243
- package/dist/mcp-server/tools/tool-registration.js.map +1 -1
- package/dist/mcp-server/tools/utils/toolDefinition.d.ts +1 -3
- package/dist/mcp-server/tools/utils/toolDefinition.d.ts.map +1 -1
- package/dist/mcp-server/tools/utils/toolDefinition.js +48 -1
- package/dist/mcp-server/tools/utils/toolDefinition.js.map +1 -1
- package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts +46 -20
- package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -1
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js +131 -25
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -1
- package/dist/mcp-server/transports/ITransport.d.ts +2 -2
- package/dist/mcp-server/transports/ITransport.d.ts.map +1 -1
- package/dist/mcp-server/transports/auth/authFactory.js +1 -1
- package/dist/mcp-server/transports/auth/authFactory.js.map +1 -1
- package/dist/mcp-server/transports/auth/lib/authTypes.d.ts +1 -1
- package/dist/mcp-server/transports/auth/lib/authTypes.d.ts.map +1 -1
- package/dist/mcp-server/transports/auth/lib/authUtils.d.ts.map +1 -1
- package/dist/mcp-server/transports/auth/lib/authUtils.js +5 -13
- package/dist/mcp-server/transports/auth/lib/authUtils.js.map +1 -1
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js +5 -11
- package/dist/mcp-server/transports/auth/strategies/jwtStrategy.js.map +1 -1
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.d.ts.map +1 -1
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js +9 -22
- package/dist/mcp-server/transports/auth/strategies/oauthStrategy.js.map +1 -1
- package/dist/mcp-server/transports/heartbeat.d.ts.map +1 -1
- package/dist/mcp-server/transports/heartbeat.js +4 -8
- package/dist/mcp-server/transports/heartbeat.js.map +1 -1
- package/dist/mcp-server/transports/http/httpErrorHandler.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/httpErrorHandler.js +6 -24
- package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -1
- package/dist/mcp-server/transports/http/httpServer.d.ts +3 -3
- package/dist/mcp-server/transports/http/httpServer.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/httpServer.js +15 -32
- package/dist/mcp-server/transports/http/httpServer.js.map +1 -1
- package/dist/mcp-server/transports/http/httpTransport.d.ts +25 -8
- package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/httpTransport.js +156 -373
- package/dist/mcp-server/transports/http/httpTransport.js.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/assets/styles.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/assets/styles.js +0 -1
- package/dist/mcp-server/transports/http/landing-page/assets/styles.js.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/handler.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/handler.js +4 -8
- package/dist/mcp-server/transports/http/landing-page/handler.js.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/sections/tools.js +0 -2
- package/dist/mcp-server/transports/http/landing-page/sections/tools.js.map +1 -1
- package/dist/mcp-server/transports/http/protectedResourceMetadata.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/protectedResourceMetadata.js +2 -6
- package/dist/mcp-server/transports/http/protectedResourceMetadata.js.map +1 -1
- package/dist/mcp-server/transports/http/robotsTxt.js +2 -2
- package/dist/mcp-server/transports/http/robotsTxt.js.map +1 -1
- package/dist/mcp-server/transports/http/serverCard.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/serverCard.js +2 -6
- package/dist/mcp-server/transports/http/serverCard.js.map +1 -1
- package/dist/mcp-server/transports/http/sessionStore.d.ts +46 -66
- package/dist/mcp-server/transports/http/sessionStore.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/sessionStore.js +140 -238
- package/dist/mcp-server/transports/http/sessionStore.js.map +1 -1
- package/dist/mcp-server/transports/manager.d.ts +12 -4
- package/dist/mcp-server/transports/manager.d.ts.map +1 -1
- package/dist/mcp-server/transports/manager.js +35 -33
- package/dist/mcp-server/transports/manager.js.map +1 -1
- package/dist/mcp-server/transports/stdio/stdioTransport.d.ts +24 -31
- package/dist/mcp-server/transports/stdio/stdioTransport.d.ts.map +1 -1
- package/dist/mcp-server/transports/stdio/stdioTransport.js +23 -38
- package/dist/mcp-server/transports/stdio/stdioTransport.js.map +1 -1
- package/dist/mcp-server/types.d.ts +25 -0
- package/dist/mcp-server/types.d.ts.map +1 -0
- package/dist/mcp-server/types.js +10 -0
- package/dist/mcp-server/types.js.map +1 -0
- package/dist/services/canvas/core/CanvasInstance.d.ts +2 -2
- package/dist/services/canvas/core/CanvasInstance.d.ts.map +1 -1
- package/dist/services/canvas/core/CanvasInstance.js.map +1 -1
- package/dist/services/canvas/core/CanvasRegistry.d.ts +4 -4
- package/dist/services/canvas/core/CanvasRegistry.d.ts.map +1 -1
- package/dist/services/canvas/core/CanvasRegistry.js +8 -18
- package/dist/services/canvas/core/CanvasRegistry.js.map +1 -1
- package/dist/services/canvas/core/DataCanvas.d.ts +5 -5
- package/dist/services/canvas/core/DataCanvas.d.ts.map +1 -1
- package/dist/services/canvas/core/DataCanvas.js +2 -3
- package/dist/services/canvas/core/DataCanvas.js.map +1 -1
- package/dist/services/canvas/core/IDataCanvasProvider.d.ts +11 -11
- package/dist/services/canvas/core/IDataCanvasProvider.d.ts.map +1 -1
- package/dist/services/canvas/providers/duckdb/DuckdbProvider.d.ts +11 -11
- package/dist/services/canvas/providers/duckdb/DuckdbProvider.d.ts.map +1 -1
- package/dist/services/canvas/providers/duckdb/DuckdbProvider.js +4 -10
- package/dist/services/canvas/providers/duckdb/DuckdbProvider.js.map +1 -1
- package/dist/services/llm/providers/openrouter.provider.d.ts.map +1 -1
- package/dist/services/llm/providers/openrouter.provider.js +2 -5
- package/dist/services/llm/providers/openrouter.provider.js.map +1 -1
- package/dist/services/mirror/core/defineMirror.js +1 -1
- package/dist/services/mirror/core/defineMirror.js.map +1 -1
- package/dist/services/mirror/types.d.ts +5 -5
- package/dist/services/mirror/types.d.ts.map +1 -1
- package/dist/services/speech/providers/elevenlabs.provider.js +1 -1
- package/dist/services/speech/providers/elevenlabs.provider.js.map +1 -1
- package/dist/services/speech/providers/whisper.provider.js +1 -1
- package/dist/services/speech/providers/whisper.provider.js.map +1 -1
- package/dist/storage/core/StorageService.d.ts +1 -1
- package/dist/storage/core/StorageService.d.ts.map +1 -1
- package/dist/storage/core/StorageService.js +12 -20
- package/dist/storage/core/StorageService.js.map +1 -1
- package/dist/storage/core/storageFactory.d.ts.map +1 -1
- package/dist/storage/core/storageFactory.js.map +1 -1
- package/dist/storage/core/storageValidation.d.ts +1 -1
- package/dist/storage/core/storageValidation.d.ts.map +1 -1
- package/dist/storage/core/storageValidation.js +2 -2
- package/dist/storage/core/storageValidation.js.map +1 -1
- package/dist/storage/providers/cloudflare/d1Provider.d.ts +1 -1
- package/dist/storage/providers/cloudflare/d1Provider.d.ts.map +1 -1
- package/dist/storage/providers/cloudflare/d1Provider.js +4 -12
- package/dist/storage/providers/cloudflare/d1Provider.js.map +1 -1
- package/dist/storage/providers/cloudflare/kvProvider.d.ts +1 -1
- package/dist/storage/providers/cloudflare/kvProvider.d.ts.map +1 -1
- package/dist/storage/providers/cloudflare/kvProvider.js +3 -8
- package/dist/storage/providers/cloudflare/kvProvider.js.map +1 -1
- package/dist/storage/providers/cloudflare/r2Provider.d.ts +1 -1
- package/dist/storage/providers/cloudflare/r2Provider.d.ts.map +1 -1
- package/dist/storage/providers/cloudflare/r2Provider.js +3 -8
- package/dist/storage/providers/cloudflare/r2Provider.js.map +1 -1
- package/dist/storage/providers/inMemory/inMemoryProvider.d.ts +1 -1
- package/dist/storage/providers/inMemory/inMemoryProvider.d.ts.map +1 -1
- package/dist/storage/providers/inMemory/inMemoryProvider.js +2 -4
- package/dist/storage/providers/inMemory/inMemoryProvider.js.map +1 -1
- package/dist/testing/index.d.ts +35 -12
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +53 -38
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/vitest.d.ts +1 -1
- package/dist/testing/vitest.d.ts.map +1 -1
- package/dist/types-global/errors.d.ts +28 -15
- package/dist/types-global/errors.d.ts.map +1 -1
- package/dist/types-global/errors.js +8 -1
- package/dist/types-global/errors.js.map +1 -1
- package/dist/utils/formatting/diffFormatter.d.ts +5 -5
- package/dist/utils/formatting/diffFormatter.d.ts.map +1 -1
- package/dist/utils/formatting/diffFormatter.js +7 -20
- package/dist/utils/formatting/diffFormatter.js.map +1 -1
- package/dist/utils/formatting/tableFormatter.d.ts +3 -3
- package/dist/utils/formatting/tableFormatter.d.ts.map +1 -1
- package/dist/utils/formatting/tableFormatter.js +6 -17
- package/dist/utils/formatting/tableFormatter.js.map +1 -1
- package/dist/utils/formatting/treeFormatter.d.ts +3 -3
- package/dist/utils/formatting/treeFormatter.d.ts.map +1 -1
- package/dist/utils/formatting/treeFormatter.js +5 -18
- package/dist/utils/formatting/treeFormatter.js.map +1 -1
- package/dist/utils/index.d.ts +4 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/internal/error-handler/errorHandler.d.ts +1 -1
- package/dist/utils/internal/error-handler/errorHandler.d.ts.map +1 -1
- package/dist/utils/internal/error-handler/errorHandler.js +23 -11
- package/dist/utils/internal/error-handler/errorHandler.js.map +1 -1
- package/dist/utils/internal/error-handler/types.d.ts +10 -13
- package/dist/utils/internal/error-handler/types.d.ts.map +1 -1
- package/dist/utils/internal/logger.d.ts +3 -3
- package/dist/utils/internal/logger.d.ts.map +1 -1
- package/dist/utils/internal/logger.js +11 -5
- package/dist/utils/internal/logger.js.map +1 -1
- package/dist/utils/internal/performance.d.ts +1 -1
- package/dist/utils/internal/performance.d.ts.map +1 -1
- package/dist/utils/internal/performance.js +57 -13
- package/dist/utils/internal/performance.js.map +1 -1
- package/dist/utils/internal/requestContext.d.ts +79 -55
- package/dist/utils/internal/requestContext.d.ts.map +1 -1
- package/dist/utils/internal/requestContext.js +77 -32
- package/dist/utils/internal/requestContext.js.map +1 -1
- package/dist/utils/metrics/tokenCounter.d.ts +3 -3
- package/dist/utils/metrics/tokenCounter.d.ts.map +1 -1
- package/dist/utils/metrics/tokenCounter.js.map +1 -1
- package/dist/utils/network/fetchWithTimeout.d.ts +2 -2
- package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -1
- package/dist/utils/network/fetchWithTimeout.js +8 -24
- package/dist/utils/network/fetchWithTimeout.js.map +1 -1
- package/dist/utils/network/retry.d.ts +2 -2
- package/dist/utils/network/retry.d.ts.map +1 -1
- package/dist/utils/overflow/outlineOnOverflow.d.ts +1 -1
- package/dist/utils/overflow/outlineOnOverflow.d.ts.map +1 -1
- package/dist/utils/pagination/pagination.d.ts +3 -3
- package/dist/utils/pagination/pagination.d.ts.map +1 -1
- package/dist/utils/pagination/pagination.js +3 -3
- package/dist/utils/pagination/pagination.js.map +1 -1
- package/dist/utils/parsing/csvParser.d.ts +2 -2
- package/dist/utils/parsing/csvParser.d.ts.map +1 -1
- package/dist/utils/parsing/csvParser.js +4 -8
- package/dist/utils/parsing/csvParser.js.map +1 -1
- package/dist/utils/parsing/dateParser.d.ts +3 -3
- package/dist/utils/parsing/dateParser.d.ts.map +1 -1
- package/dist/utils/parsing/dateParser.js +3 -2
- package/dist/utils/parsing/dateParser.js.map +1 -1
- package/dist/utils/parsing/frontmatterParser.d.ts +2 -2
- package/dist/utils/parsing/frontmatterParser.d.ts.map +1 -1
- package/dist/utils/parsing/frontmatterParser.js +7 -10
- package/dist/utils/parsing/frontmatterParser.js.map +1 -1
- package/dist/utils/parsing/htmlExtractor.d.ts +2 -2
- package/dist/utils/parsing/htmlExtractor.d.ts.map +1 -1
- package/dist/utils/parsing/htmlExtractor.js +6 -11
- package/dist/utils/parsing/htmlExtractor.js.map +1 -1
- package/dist/utils/parsing/jsonParser.d.ts +2 -2
- package/dist/utils/parsing/jsonParser.d.ts.map +1 -1
- package/dist/utils/parsing/jsonParser.js +4 -8
- package/dist/utils/parsing/jsonParser.js.map +1 -1
- package/dist/utils/parsing/pdfParser.d.ts +10 -10
- package/dist/utils/parsing/pdfParser.d.ts.map +1 -1
- package/dist/utils/parsing/pdfParser.js +26 -89
- package/dist/utils/parsing/pdfParser.js.map +1 -1
- package/dist/utils/parsing/xmlParser.d.ts +2 -2
- package/dist/utils/parsing/xmlParser.d.ts.map +1 -1
- package/dist/utils/parsing/xmlParser.js +4 -8
- package/dist/utils/parsing/xmlParser.js.map +1 -1
- package/dist/utils/parsing/yamlParser.d.ts +2 -2
- package/dist/utils/parsing/yamlParser.d.ts.map +1 -1
- package/dist/utils/parsing/yamlParser.js +4 -8
- package/dist/utils/parsing/yamlParser.js.map +1 -1
- package/dist/utils/scheduling/scheduler.d.ts.map +1 -1
- package/dist/utils/scheduling/scheduler.js +5 -6
- package/dist/utils/scheduling/scheduler.js.map +1 -1
- package/dist/utils/security/rateLimiter.d.ts +2 -2
- package/dist/utils/security/rateLimiter.d.ts.map +1 -1
- package/dist/utils/security/rateLimiter.js +1 -1
- package/dist/utils/security/rateLimiter.js.map +1 -1
- package/dist/utils/telemetry/attributes.d.ts +23 -7
- package/dist/utils/telemetry/attributes.d.ts.map +1 -1
- package/dist/utils/telemetry/attributes.js +23 -10
- package/dist/utils/telemetry/attributes.js.map +1 -1
- package/dist/utils/telemetry/trace.d.ts +3 -3
- package/dist/utils/telemetry/trace.d.ts.map +1 -1
- package/dist/utils/telemetry/trace.js +4 -2
- package/dist/utils/telemetry/trace.js.map +1 -1
- package/package.json +22 -26
- package/scripts/lint-mcp.ts +1 -3
- package/scripts/lint-packaging.ts +1 -1
- package/skills/add-service/SKILL.md +2 -2
- package/skills/add-test/SKILL.md +42 -20
- package/skills/add-tool/SKILL.md +68 -19
- package/skills/api-config/SKILL.md +1 -11
- package/skills/api-context/SKILL.md +175 -111
- package/skills/api-linter/SKILL.md +2 -2
- package/skills/api-telemetry/SKILL.md +8 -12
- package/skills/api-testing/SKILL.md +53 -52
- package/skills/code-simplifier/SKILL.md +2 -2
- package/skills/design-mcp-server/SKILL.md +31 -17
- package/skills/field-test/SKILL.md +4 -2
- package/skills/polish-docs-meta/SKILL.md +1 -1
- package/skills/polish-docs-meta/references/agent-protocol.md +2 -2
- package/skills/polish-docs-meta/references/readme.md +1 -1
- package/skills/release-and-publish/SKILL.md +3 -1
- package/skills/report-issue-framework/SKILL.md +2 -2
- package/skills/report-issue-local/SKILL.md +2 -2
- package/skills/security-pass/SKILL.md +16 -14
- package/templates/AGENTS.md +6 -6
- package/templates/CLAUDE.md +6 -6
- package/templates/tests/resources/echo.resource.test.ts +16 -9
- package/dist/mcp-server/elicitation.d.ts +0 -64
- package/dist/mcp-server/elicitation.d.ts.map +0 -1
- package/dist/mcp-server/elicitation.js +0 -81
- package/dist/mcp-server/elicitation.js.map +0 -1
- package/dist/mcp-server/protocolSession.d.ts +0 -34
- package/dist/mcp-server/protocolSession.d.ts.map +0 -1
- package/dist/mcp-server/protocolSession.js +0 -13
- package/dist/mcp-server/protocolSession.js.map +0 -1
- package/dist/mcp-server/tasks/core/evictingTaskMessageQueue.d.ts +0 -53
- package/dist/mcp-server/tasks/core/evictingTaskMessageQueue.d.ts.map +0 -1
- package/dist/mcp-server/tasks/core/evictingTaskMessageQueue.js +0 -65
- package/dist/mcp-server/tasks/core/evictingTaskMessageQueue.js.map +0 -1
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts +0 -70
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.d.ts.map +0 -1
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js +0 -130
- package/dist/mcp-server/tasks/core/sessionAwareTaskStore.js.map +0 -1
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts +0 -109
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.d.ts.map +0 -1
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.js +0 -209
- package/dist/mcp-server/tasks/core/storageBackedTaskStore.js.map +0 -1
- package/dist/mcp-server/tasks/core/taskManager.d.ts +0 -91
- package/dist/mcp-server/tasks/core/taskManager.d.ts.map +0 -1
- package/dist/mcp-server/tasks/core/taskManager.js +0 -210
- package/dist/mcp-server/tasks/core/taskManager.js.map +0 -1
- package/dist/mcp-server/tasks/core/taskTypes.d.ts +0 -18
- package/dist/mcp-server/tasks/core/taskTypes.d.ts.map +0 -1
- package/dist/mcp-server/tasks/core/taskTypes.js +0 -20
- package/dist/mcp-server/tasks/core/taskTypes.js.map +0 -1
- package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts +0 -101
- package/dist/mcp-server/tasks/utils/taskToolDefinition.d.ts.map +0 -1
- package/dist/mcp-server/tasks/utils/taskToolDefinition.js +0 -14
- package/dist/mcp-server/tasks/utils/taskToolDefinition.js.map +0 -1
|
@@ -36,9 +36,13 @@ export interface AuthContext {
|
|
|
36
36
|
/**
|
|
37
37
|
* Core context object associated with a single request or operation.
|
|
38
38
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
39
|
+
* The one canonical request-shape type. Handler-facing `Context` extends it, so
|
|
40
|
+
* a handler's `ctx` is accepted anywhere a `RequestContext` is — services,
|
|
41
|
+
* storage, the logger — with no slice helper and no index-signature gymnastics.
|
|
42
|
+
*
|
|
43
|
+
* Closed by design: a misspelled canonical field (`tenatId`) is a type error
|
|
44
|
+
* rather than a silently-ignored key. Operation-specific data goes in
|
|
45
|
+
* {@link RequestContext.extra}, the one place that is explicitly an open bag.
|
|
42
46
|
*
|
|
43
47
|
* Optional fields (`traceId`, `spanId`) are injected automatically when an
|
|
44
48
|
* OpenTelemetry active span exists at context-creation time.
|
|
@@ -55,12 +59,33 @@ export interface RequestContext {
|
|
|
55
59
|
* `undefined` when the request is unauthenticated or auth mode is `none`.
|
|
56
60
|
*/
|
|
57
61
|
auth?: AuthContext | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Operation-specific correlation data — tool name, resource URI, retry
|
|
64
|
+
* attempt, whatever the call site wants carried alongside the canonical
|
|
65
|
+
* fields. Flattened into every log line written with this context, so the
|
|
66
|
+
* emitted shape is the same as the pre-0.12 open-bag spread.
|
|
67
|
+
*
|
|
68
|
+
* Add to it with {@link withExtra} rather than by hand: that merges into any
|
|
69
|
+
* value a parent context already carried instead of replacing it.
|
|
70
|
+
*/
|
|
71
|
+
extra?: Readonly<Record<string, unknown>> | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* Human-readable label for the operation this context belongs to. Set from
|
|
74
|
+
* `createRequestContext({ operation })` and read by the storage layer's
|
|
75
|
+
* tenant assertion and the network helpers' error reporting.
|
|
76
|
+
*/
|
|
77
|
+
operation?: string | undefined;
|
|
58
78
|
/**
|
|
59
79
|
* Unique identifier for this request, used to correlate log entries across
|
|
60
80
|
* service boundaries. Inherited from a parent context when provided;
|
|
61
81
|
* otherwise generated by {@link generateRequestContextId}.
|
|
62
82
|
*/
|
|
63
83
|
requestId: string;
|
|
84
|
+
/**
|
|
85
|
+
* MCP session identifier, when the request carries a durable session.
|
|
86
|
+
* `undefined` for stdio and for stateless HTTP.
|
|
87
|
+
*/
|
|
88
|
+
sessionId?: string | undefined;
|
|
64
89
|
/**
|
|
65
90
|
* OpenTelemetry span ID from the active span at context-creation time.
|
|
66
91
|
* `undefined` when no active span exists.
|
|
@@ -69,7 +94,7 @@ export interface RequestContext {
|
|
|
69
94
|
/**
|
|
70
95
|
* Tenant identifier used for multi-tenancy data isolation.
|
|
71
96
|
* Resolved in priority order: `additionalContext.tenantId` →
|
|
72
|
-
*
|
|
97
|
+
* `tenantId` param → `parentContext.tenantId` → AsyncLocalStorage auth store.
|
|
73
98
|
*/
|
|
74
99
|
tenantId?: string | undefined;
|
|
75
100
|
/**
|
|
@@ -81,47 +106,49 @@ export interface RequestContext {
|
|
|
81
106
|
* `undefined` when no active span exists.
|
|
82
107
|
*/
|
|
83
108
|
traceId?: string | undefined;
|
|
84
|
-
/**
|
|
85
|
-
* Additional arbitrary key-value pairs for operation-specific context.
|
|
86
|
-
* Consumers must type-check before accessing extended properties.
|
|
87
|
-
*
|
|
88
|
-
* Note: optional fields above are typed `?: T | undefined` (not just `?: T`)
|
|
89
|
-
* so the handler-facing `Context` — which carries strict-optional fields
|
|
90
|
-
* under `exactOptionalPropertyTypes` — is structurally assignable to
|
|
91
|
-
* {@link RequestContextLike} (the closed canonical-field projection used by
|
|
92
|
-
* service-layer signatures). `RequestContext` itself remains the open
|
|
93
|
-
* "context bag" that the logger and `createRequestContext` build by spread.
|
|
94
|
-
*/
|
|
95
|
-
[key: string]: unknown;
|
|
96
109
|
}
|
|
97
110
|
/**
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* `Context` and `RequestContext` are structurally assignable to.
|
|
103
|
-
*
|
|
104
|
-
* Service and canvas method signatures accept `RequestContextLike` instead of
|
|
105
|
-
* `RequestContext` so consumers can pass the handler `ctx` directly without a
|
|
106
|
-
* slice helper. Internal context construction (`createRequestContext`,
|
|
107
|
-
* `enriched` log dispatch) still produces `RequestContext`, preserving the
|
|
108
|
-
* open-bag spread pattern.
|
|
111
|
+
* @deprecated Use {@link RequestContext}. It was the closed projection that
|
|
112
|
+
* existed only because `RequestContext` carried an index signature; now that
|
|
113
|
+
* the index signature is gone, `RequestContext` *is* the closed projection.
|
|
114
|
+
* Kept as an alias for one minor.
|
|
109
115
|
*/
|
|
110
|
-
export type RequestContextLike =
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
export type RequestContextLike = RequestContext;
|
|
117
|
+
/**
|
|
118
|
+
* Projects any context-shaped object down to the {@link RequestContext}
|
|
119
|
+
* contract, dropping every key the type does not declare.
|
|
120
|
+
*
|
|
121
|
+
* TypeScript cannot enforce this at the call site: excess-property checking
|
|
122
|
+
* applies to object *literals*, not to a variable, so a handler `ctx` — which
|
|
123
|
+
* carries live request machinery (`log`, `signal`, `state`) and, after a
|
|
124
|
+
* multi-round-trip round, the user-entered content in `inputs.responses` —
|
|
125
|
+
* satisfies a `RequestContext` parameter and arrives whole. Anything that
|
|
126
|
+
* serializes a caller-supplied context onto a wire or into a log must project
|
|
127
|
+
* first, or that payload rides along.
|
|
128
|
+
*
|
|
129
|
+
* Allowlist, not denylist: a field added to a handler context later is dropped
|
|
130
|
+
* by default rather than silently published.
|
|
131
|
+
*/
|
|
132
|
+
export declare function toCanonicalContext(context: Readonly<Record<string, unknown>>): RequestContext;
|
|
133
|
+
/**
|
|
134
|
+
* Returns a copy of `context` with `fields` merged into its {@link
|
|
135
|
+
* RequestContext.extra} bag.
|
|
136
|
+
*
|
|
137
|
+
* Replaces the `{ ...context, someField }` spread the open-bag type used to
|
|
138
|
+
* allow. Merging rather than replacing means a child call site can add its own
|
|
139
|
+
* correlation data without dropping what a parent already attached.
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* logger.warning('Retrying upstream call', withExtra(ctx, { attempt, url }));
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
export declare function withExtra(context: RequestContext, fields: Readonly<Record<string, unknown>>): RequestContext;
|
|
118
147
|
/**
|
|
119
148
|
* Parameters accepted by {@link requestContextService.createRequestContext}.
|
|
120
149
|
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
* {@link RequestContext} as-is, allowing ad-hoc context extension without
|
|
124
|
-
* modifying this interface.
|
|
150
|
+
* Closed, like the context it builds. Operation-specific keys go in
|
|
151
|
+
* `additionalContext`, which lands on {@link RequestContext.extra}.
|
|
125
152
|
*
|
|
126
153
|
* @example
|
|
127
154
|
* ```typescript
|
|
@@ -134,25 +161,23 @@ export type RequestContextLike = {
|
|
|
134
161
|
*/
|
|
135
162
|
export interface CreateRequestContextParams {
|
|
136
163
|
/**
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* `parentContext` for overlapping keys. `requestId` and `timestamp` keys in
|
|
140
|
-
* `additionalContext` are silently stripped to prevent overwrites.
|
|
164
|
+
* Operation-specific key-value pairs, merged into the new context's
|
|
165
|
+
* {@link RequestContext.extra} on top of whatever the parent carried.
|
|
141
166
|
*/
|
|
142
|
-
additionalContext?: Record<string, unknown
|
|
167
|
+
additionalContext?: Readonly<Record<string, unknown>> | undefined;
|
|
143
168
|
/**
|
|
144
169
|
* Human-readable label for the operation creating this context.
|
|
145
170
|
* Written onto the context as `context.operation` when provided.
|
|
146
171
|
*/
|
|
147
|
-
operation?: string;
|
|
172
|
+
operation?: string | undefined;
|
|
148
173
|
/**
|
|
149
174
|
* Parent context whose properties are inherited as the base. When
|
|
150
175
|
* `parentContext.requestId` is a non-empty string it is reused as-is,
|
|
151
176
|
* preserving the same request ID across a call chain.
|
|
152
177
|
*/
|
|
153
|
-
parentContext?:
|
|
154
|
-
/**
|
|
155
|
-
|
|
178
|
+
parentContext?: Partial<RequestContext> | undefined;
|
|
179
|
+
/** Explicit tenant, ranked below `additionalContext.tenantId`. */
|
|
180
|
+
tenantId?: string | undefined;
|
|
156
181
|
}
|
|
157
182
|
/**
|
|
158
183
|
* Service for creating and enriching {@link RequestContext} instances.
|
|
@@ -182,12 +207,11 @@ export declare const requestContextService: {
|
|
|
182
207
|
* Merge order (later entries win, except `requestId`/`timestamp` which are
|
|
183
208
|
* always generated fresh or inherited):
|
|
184
209
|
* 1. `parentContext` properties (base)
|
|
185
|
-
* 2.
|
|
186
|
-
* 3. `
|
|
187
|
-
* 4. Resolved `
|
|
188
|
-
* 5.
|
|
189
|
-
* 6. `
|
|
190
|
-
* 7. OTel `traceId`/`spanId` from the active span (when present)
|
|
210
|
+
* 2. Resolved `requestId` and `timestamp` (canonical, never overwritten)
|
|
211
|
+
* 3. `extra` — the parent's bag with `additionalContext` merged over it
|
|
212
|
+
* 4. Resolved `tenantId` (see priority order in {@link RequestContext.tenantId})
|
|
213
|
+
* 5. `operation` (written as `context.operation` when provided)
|
|
214
|
+
* 6. OTel `traceId`/`spanId` from the active span (when present)
|
|
191
215
|
*
|
|
192
216
|
* @param params - Context creation parameters. Defaults to `{}`.
|
|
193
217
|
* @returns A fully constructed `RequestContext`.
|
|
@@ -228,6 +252,6 @@ export declare const requestContextService: {
|
|
|
228
252
|
* // context now includes: { requestId, timestamp, tenantId, auth: {...}, ... }
|
|
229
253
|
* ```
|
|
230
254
|
*/
|
|
231
|
-
withAuthInfo(authInfo: AuthInfo, parentContext?:
|
|
255
|
+
withAuthInfo(authInfo: AuthInfo, parentContext?: Partial<RequestContext>): RequestContext;
|
|
232
256
|
};
|
|
233
257
|
//# sourceMappingURL=requestContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestContext.d.ts","sourceRoot":"","sources":["../../../src/utils/internal/requestContext.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+CAA+C,CAAC;AAc9E;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,2HAA2H;IAC3H,GAAG,EAAE,MAAM,CAAC;IACZ,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IAEtE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED
|
|
1
|
+
{"version":3,"file":"requestContext.d.ts","sourceRoot":"","sources":["../../../src/utils/internal/requestContext.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+CAA+C,CAAC;AAc9E;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,2HAA2H;IAC3H,GAAG,EAAE,MAAM,CAAC;IACZ,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IAEtE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAE/B;;;;;;;;OAQG;IAEH,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAEtD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAmBhD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,cAAc,CAM7F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACxC,cAAc,CAEhB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAElE;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAEpD,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AA6HD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,qBAAqB;IA1IhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;kCAC0B,0BAA0B,GAAQ,cAAc;IAmD7E;;;;;;;;;;;;;;;;;;;;;OAqBG;2BACoB,QAAQ,kBAAkB,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc;CAoCzB,CAAC"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* - `requestId` is inherited from a parent context when provided, otherwise a
|
|
11
11
|
* new unique ID is generated via {@link generateRequestContextId}.
|
|
12
12
|
* - `tenantId` is resolved with the following priority (highest to lowest):
|
|
13
|
-
* `additionalContext.tenantId` →
|
|
13
|
+
* `additionalContext.tenantId` → the `tenantId` param → `parentContext.tenantId`
|
|
14
14
|
* → AsyncLocalStorage auth store (`authContext`).
|
|
15
15
|
* - OpenTelemetry `traceId` and `spanId` are automatically injected from the
|
|
16
16
|
* active span when one exists.
|
|
@@ -33,6 +33,61 @@ function toAuthContext(info) {
|
|
|
33
33
|
...(info.token && { token: info.token }),
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* The complete key set of {@link RequestContext}. The type is closed, so this
|
|
38
|
+
* list is its runtime mirror — used by {@link toCanonicalContext} to project a
|
|
39
|
+
* wider object back down to the contract.
|
|
40
|
+
*/
|
|
41
|
+
const CANONICAL_CONTEXT_KEYS = [
|
|
42
|
+
'auth',
|
|
43
|
+
'extra',
|
|
44
|
+
'operation',
|
|
45
|
+
'requestId',
|
|
46
|
+
'sessionId',
|
|
47
|
+
'spanId',
|
|
48
|
+
'tenantId',
|
|
49
|
+
'timestamp',
|
|
50
|
+
'traceId',
|
|
51
|
+
];
|
|
52
|
+
/**
|
|
53
|
+
* Projects any context-shaped object down to the {@link RequestContext}
|
|
54
|
+
* contract, dropping every key the type does not declare.
|
|
55
|
+
*
|
|
56
|
+
* TypeScript cannot enforce this at the call site: excess-property checking
|
|
57
|
+
* applies to object *literals*, not to a variable, so a handler `ctx` — which
|
|
58
|
+
* carries live request machinery (`log`, `signal`, `state`) and, after a
|
|
59
|
+
* multi-round-trip round, the user-entered content in `inputs.responses` —
|
|
60
|
+
* satisfies a `RequestContext` parameter and arrives whole. Anything that
|
|
61
|
+
* serializes a caller-supplied context onto a wire or into a log must project
|
|
62
|
+
* first, or that payload rides along.
|
|
63
|
+
*
|
|
64
|
+
* Allowlist, not denylist: a field added to a handler context later is dropped
|
|
65
|
+
* by default rather than silently published.
|
|
66
|
+
*/
|
|
67
|
+
export function toCanonicalContext(context) {
|
|
68
|
+
const projected = {};
|
|
69
|
+
for (const key of CANONICAL_CONTEXT_KEYS) {
|
|
70
|
+
if (context[key] !== undefined)
|
|
71
|
+
projected[key] = context[key];
|
|
72
|
+
}
|
|
73
|
+
return projected;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Returns a copy of `context` with `fields` merged into its {@link
|
|
77
|
+
* RequestContext.extra} bag.
|
|
78
|
+
*
|
|
79
|
+
* Replaces the `{ ...context, someField }` spread the open-bag type used to
|
|
80
|
+
* allow. Merging rather than replacing means a child call site can add its own
|
|
81
|
+
* correlation data without dropping what a parent already attached.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* logger.warning('Retrying upstream call', withExtra(ctx, { attempt, url }));
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export function withExtra(context, fields) {
|
|
89
|
+
return { ...context, extra: { ...context.extra, ...fields } };
|
|
90
|
+
}
|
|
36
91
|
/**
|
|
37
92
|
* Singleton-like service object for managing request context operations.
|
|
38
93
|
* @private
|
|
@@ -45,12 +100,11 @@ const requestContextServiceInstance = {
|
|
|
45
100
|
* Merge order (later entries win, except `requestId`/`timestamp` which are
|
|
46
101
|
* always generated fresh or inherited):
|
|
47
102
|
* 1. `parentContext` properties (base)
|
|
48
|
-
* 2.
|
|
49
|
-
* 3. `
|
|
50
|
-
* 4. Resolved `
|
|
51
|
-
* 5.
|
|
52
|
-
* 6. `
|
|
53
|
-
* 7. OTel `traceId`/`spanId` from the active span (when present)
|
|
103
|
+
* 2. Resolved `requestId` and `timestamp` (canonical, never overwritten)
|
|
104
|
+
* 3. `extra` — the parent's bag with `additionalContext` merged over it
|
|
105
|
+
* 4. Resolved `tenantId` (see priority order in {@link RequestContext.tenantId})
|
|
106
|
+
* 5. `operation` (written as `context.operation` when provided)
|
|
107
|
+
* 6. OTel `traceId`/`spanId` from the active span (when present)
|
|
54
108
|
*
|
|
55
109
|
* @param params - Context creation parameters. Defaults to `{}`.
|
|
56
110
|
* @returns A fully constructed `RequestContext`.
|
|
@@ -69,8 +123,7 @@ const requestContextServiceInstance = {
|
|
|
69
123
|
* ```
|
|
70
124
|
*/
|
|
71
125
|
createRequestContext(params = {}) {
|
|
72
|
-
const { parentContext, additionalContext, operation,
|
|
73
|
-
const inheritedContext = parentContext && typeof parentContext === 'object' ? { ...parentContext } : {};
|
|
126
|
+
const { parentContext, additionalContext, operation, tenantId } = params;
|
|
74
127
|
const authStore = alsAuthContext.getStore();
|
|
75
128
|
const tenantIdFromAuth = authStore?.authInfo?.tenantId;
|
|
76
129
|
// Bridge auth info from ALS into the context so ctx.auth is populated
|
|
@@ -78,25 +131,22 @@ const requestContextServiceInstance = {
|
|
|
78
131
|
const authFromStore = authStore?.authInfo
|
|
79
132
|
? toAuthContext(authStore.authInfo)
|
|
80
133
|
: undefined;
|
|
81
|
-
const requestId =
|
|
82
|
-
?
|
|
134
|
+
const requestId = parentContext?.requestId
|
|
135
|
+
? parentContext.requestId
|
|
83
136
|
: generateRequestContextId();
|
|
84
137
|
const timestamp = new Date().toISOString();
|
|
85
|
-
const
|
|
86
|
-
const resolvedTenantId =
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
// Strip system fields from additionalContext to prevent overwriting requestId/timestamp
|
|
91
|
-
const { requestId: _r, timestamp: _t, ...safeAdditional } = additionalContext && typeof additionalContext === 'object' ? additionalContext : {};
|
|
138
|
+
const additionalTenantId = typeof additionalContext?.tenantId === 'string' ? additionalContext.tenantId : undefined;
|
|
139
|
+
const resolvedTenantId = additionalTenantId ?? tenantId ?? parentContext?.tenantId ?? tenantIdFromAuth;
|
|
140
|
+
const extra = parentContext?.extra || additionalContext
|
|
141
|
+
? { ...parentContext?.extra, ...additionalContext }
|
|
142
|
+
: undefined;
|
|
92
143
|
const context = {
|
|
93
|
-
...
|
|
94
|
-
...rest, // Spread any other properties from the params object
|
|
95
|
-
...safeAdditional,
|
|
144
|
+
...parentContext,
|
|
96
145
|
requestId,
|
|
97
146
|
timestamp,
|
|
147
|
+
...(extra && { extra }),
|
|
98
148
|
...(resolvedTenantId ? { tenantId: resolvedTenantId } : {}),
|
|
99
|
-
...(operation
|
|
149
|
+
...(operation ? { operation } : {}),
|
|
100
150
|
...(authFromStore && { auth: authFromStore }),
|
|
101
151
|
};
|
|
102
152
|
// --- OpenTelemetry Integration ---
|
|
@@ -134,17 +184,12 @@ const requestContextServiceInstance = {
|
|
|
134
184
|
* ```
|
|
135
185
|
*/
|
|
136
186
|
withAuthInfo(authInfo, parentContext) {
|
|
137
|
-
// Inherit the operation from parentContext when provided, so callers that
|
|
138
|
-
// already established an operation name (e.g. 'AutoTaskHandler') keep it.
|
|
139
|
-
const parentOp = parentContext && typeof parentContext.operation === 'string'
|
|
140
|
-
? parentContext.operation
|
|
141
|
-
: undefined;
|
|
142
187
|
const baseContext = this.createRequestContext({
|
|
143
|
-
operation
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
},
|
|
188
|
+
// Inherit the operation from parentContext when provided, so callers that
|
|
189
|
+
// already established an operation name keep it.
|
|
190
|
+
operation: parentContext?.operation ?? 'withAuthInfo',
|
|
191
|
+
...(parentContext && { parentContext }),
|
|
192
|
+
...(authInfo.tenantId && { tenantId: authInfo.tenantId }),
|
|
148
193
|
});
|
|
149
194
|
return {
|
|
150
195
|
...baseContext,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestContext.js","sourceRoot":"","sources":["../../../src/utils/internal/requestContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,iDAAiD,CAAC;AAEhG,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,kEAAkE;AAClE,SAAS,aAAa,CAAC,IAAc;IACnC,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ;QAClC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;KACzC,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"requestContext.js","sourceRoot":"","sources":["../../../src/utils/internal/requestContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,iDAAiD,CAAC;AAEhG,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,kEAAkE;AAClE,SAAS,aAAa,CAAC,IAAc;IACnC,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ;QAClC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;KACzC,CAAC;AACJ,CAAC;AAkID;;;;GAIG;AACH,MAAM,sBAAsB,GAAG;IAC7B,MAAM;IACN,OAAO;IACP,WAAW;IACX,WAAW;IACX,WAAW;IACX,QAAQ;IACR,UAAU;IACV,WAAW;IACX,SAAS;CAC2C,CAAC;AAEvD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA0C;IAC3E,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,sBAAsB,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,SAAsC,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS,CACvB,OAAuB,EACvB,MAAyC;IAEzC,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;AAChE,CAAC;AAyCD;;;GAGG;AACH,MAAM,6BAA6B,GAAG;IACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,oBAAoB,CAAC,MAAM,GAA+B,EAAE;QAC1D,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAEzE,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,gBAAgB,GAAG,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAEvD,sEAAsE;QACtE,8EAA8E;QAC9E,MAAM,aAAa,GAA4B,SAAS,EAAE,QAAQ;YAChE,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC;YACnC,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,SAAS,GAAG,aAAa,EAAE,SAAS;YACxC,CAAC,CAAC,aAAa,CAAC,SAAS;YACzB,CAAC,CAAC,wBAAwB,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE3C,MAAM,kBAAkB,GACtB,OAAO,iBAAiB,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,MAAM,gBAAgB,GACpB,kBAAkB,IAAI,QAAQ,IAAI,aAAa,EAAE,QAAQ,IAAI,gBAAgB,CAAC;QAEhF,MAAM,KAAK,GACT,aAAa,EAAE,KAAK,IAAI,iBAAiB;YACvC,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,KAAK,EAAE,GAAG,iBAAiB,EAAE;YACnD,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,OAAO,GAAmB;YAC9B,GAAG,aAAa;YAChB,SAAS;YACT,SAAS;YACT,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;YACvB,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,aAAa,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;SAC9C,CAAC;QAEF,oCAAoC;QACpC,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QACzC,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;YAC/D,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;gBACtC,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;YACtC,CAAC;QACH,CAAC;QACD,wCAAwC;QAExC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,YAAY,CAAC,QAAkB,EAAE,aAAuC;QACtE,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAC5C,0EAA0E;YAC1E,iDAAiD;YACjD,SAAS,EAAE,aAAa,EAAE,SAAS,IAAI,cAAc;YACrD,GAAG,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,CAAC;YACvC,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;SAC1D,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,WAAW;YACd,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC;SAC9B,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,6BAA6B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RequestContext
|
|
1
|
+
import type { RequestContext } from '../../utils/internal/requestContext.js';
|
|
2
2
|
/**
|
|
3
3
|
* Minimal chat message shape used for token counting, intentionally provider-agnostic.
|
|
4
4
|
* Covers the common subset of OpenAI-style chat message fields without depending on
|
|
@@ -65,7 +65,7 @@ export interface ModelHeuristics {
|
|
|
65
65
|
* const tokens = await countTokens('Hello, world!');
|
|
66
66
|
* // Returns approximately 4 (13 chars / 4 charsPerToken, rounded up)
|
|
67
67
|
*/
|
|
68
|
-
export declare function countTokens(text: string, context?:
|
|
68
|
+
export declare function countTokens(text: string, context?: RequestContext, model?: string): Promise<number>;
|
|
69
69
|
/**
|
|
70
70
|
* Estimates the total number of tokens for an array of chat messages using the same
|
|
71
71
|
* heuristics as OpenAI's token-counting cookbook for gpt-4o-family models.
|
|
@@ -93,5 +93,5 @@ export declare function countTokens(text: string, context?: RequestContextLike |
|
|
|
93
93
|
* { role: 'assistant', content: 'It is 4.' },
|
|
94
94
|
* ]);
|
|
95
95
|
*/
|
|
96
|
-
export declare function countChatTokens(messages: ReadonlyArray<ChatMessage>, context?:
|
|
96
|
+
export declare function countChatTokens(messages: ReadonlyArray<ChatMessage>, context?: RequestContext, model?: string): Promise<number>;
|
|
97
97
|
//# sourceMappingURL=tokenCounter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenCounter.d.ts","sourceRoot":"","sources":["../../../src/utils/metrics/tokenCounter.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"tokenCounter.d.ts","sourceRoot":"","sources":["../../../src/utils/metrics/tokenCounter.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IACtF,+FAA+F;IAC/F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAClD,CAAC,GAAG,IAAI,CAAC;IACV,yFAAyF;IACzF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,8FAA8F;IAC9F,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,6FAA6F;IAC7F,gBAAgB,EAAE,MAAM,CAAC;IACzB,yFAAyF;IACzF,aAAa,EAAE,MAAM,CAAC;CACvB;AA2CD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,cAAc,EACxB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,aAAa,CAAC,WAAW,CAAC,EACpC,OAAO,CAAC,EAAE,cAAc,EACxB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAgEjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenCounter.js","sourceRoot":"","sources":["../../../src/utils/metrics/tokenCounter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAkDpD,MAAM,aAAa,GAAG,QAAQ,CAAC;AAE/B,2CAA2C;AAC3C,MAAM,UAAU,GAAoC;IAClD,QAAQ,EAAE;QACR,aAAa,EAAE,CAAC;QAChB,gBAAgB,EAAE,CAAC;QACnB,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,CAAC;KACf;IACD,aAAa,EAAE;QACb,aAAa,EAAE,CAAC;QAChB,gBAAgB,EAAE,CAAC;QACnB,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,CAAC;KACf;IACD,OAAO,EAAE;QACP,aAAa,EAAE,CAAC;QAChB,gBAAgB,EAAE,CAAC;QACnB,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,CAAC;KACf;CACF,CAAC;AAEF,SAAS,kBAAkB,CAAC,KAAc;IACxC,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,OAAO,CAAoB,CAAC;AAC1D,CAAC;AAED,SAAS,cAAc,CAAC,CAAU;IAChC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,aAAqB;IAC3D,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"tokenCounter.js","sourceRoot":"","sources":["../../../src/utils/metrics/tokenCounter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAkDpD,MAAM,aAAa,GAAG,QAAQ,CAAC;AAE/B,2CAA2C;AAC3C,MAAM,UAAU,GAAoC;IAClD,QAAQ,EAAE;QACR,aAAa,EAAE,CAAC;QAChB,gBAAgB,EAAE,CAAC;QACnB,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,CAAC;KACf;IACD,aAAa,EAAE;QACb,aAAa,EAAE,CAAC;QAChB,gBAAgB,EAAE,CAAC;QACnB,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,CAAC;KACf;IACD,OAAO,EAAE;QACP,aAAa,EAAE,CAAC;QAChB,gBAAgB,EAAE,CAAC;QACnB,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,CAAC;KACf;CACF,CAAC;AAEF,SAAS,kBAAkB,CAAC,KAAc;IACxC,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,OAAO,CAAoB,CAAC;AAC1D,CAAC;AAED,SAAS,cAAc,CAAC,CAAU;IAChC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,aAAqB;IAC3D,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,OAAwB,EACxB,KAAc;IAEd,OAAO,MAAM,YAAY,CAAC,QAAQ,CAChC,GAAG,EAAE;QACH,MAAM,CAAC,GAAoB,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACrD,OAAO,gBAAgB,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;IACvD,CAAC,EACD;QACE,SAAS,EAAE,aAAa;QACxB,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,KAAK,EAAE;YACL,UAAU,EAAE,cAAc,CAAC,IAAI,CAAC;gBAC9B,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE;oBAChB,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK;oBAC3B,CAAC,CAAC,IAAI;gBACR,CAAC,CAAC,EAAE;SACP;QACD,SAAS,EAAE,gBAAgB,CAAC,aAAa;KAC1C,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAoC,EACpC,OAAwB,EACxB,KAAc;IAEd,OAAO,MAAM,YAAY,CAAC,QAAQ,CAChC,GAAG,EAAE;QACH,MAAM,CAAC,GAAoB,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,CAAC,gBAAgB,CAAC;YAE7B,mDAAmD;YACnD,MAAM,IAAI,CAAC,CAAC;YAEZ,UAAU;YACV,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,IAAI,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;YAC/D,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACnC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9D,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;oBACzD,CAAC;yBAAM,IAAI,IAAI,EAAE,CAAC;wBAChB,MAAM,CAAC,OAAO,CACZ,sCAAsC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC,EAC7F,OAAO,CACR,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,gBAAgB;YAChB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,CAAC,CAAC,aAAa,CAAC;gBAC1B,MAAM,IAAI,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;YAC5D,CAAC;YAED,uBAAuB;YACvB,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtE,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;oBAC1C,IAAI,QAAQ,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;wBAClC,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;4BAC5B,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;wBACtE,CAAC;wBACD,IAAI,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;4BACjC,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;wBAC3E,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,kBAAkB;YAClB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACpD,MAAM,IAAI,gBAAgB,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,CAAC,WAAW,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC,EACD;QACE,SAAS,EAAE,iBAAiB;QAC5B,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,KAAK,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE;QACxC,SAAS,EAAE,gBAAgB,CAAC,aAAa;KAC1C,CACF,CAAC;AACJ,CAAC;AACD,wEAAwE;AACxE,4EAA4E"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type RequestContext } from '../../utils/internal/requestContext.js';
|
|
2
2
|
/** Eagerly creates the HTTP client duration histogram so the series exists from startup. */
|
|
3
3
|
export declare function initHttpClientMetrics(): void;
|
|
4
4
|
/**
|
|
@@ -152,5 +152,5 @@ export interface FetchWithTimeoutOptions extends Omit<RequestInit, 'signal'> {
|
|
|
152
152
|
* );
|
|
153
153
|
* ```
|
|
154
154
|
*/
|
|
155
|
-
export declare function fetchWithTimeout(url: string | URL, timeoutMs: number, context:
|
|
155
|
+
export declare function fetchWithTimeout(url: string | URL, timeoutMs: number, context: RequestContext, options?: FetchWithTimeoutOptions): Promise<Response>;
|
|
156
156
|
//# sourceMappingURL=fetchWithTimeout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchWithTimeout.d.ts","sourceRoot":"","sources":["../../../src/utils/network/fetchWithTimeout.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"fetchWithTimeout.d.ts","sourceRoot":"","sources":["../../../src/utils/network/fetchWithTimeout.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,cAAc,EAAa,MAAM,oCAAoC,CAAC;AAoCpF,4FAA4F;AAC5F,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AA2BD;;;;;;GAMG;AACH,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;IAC1E;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAkSD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkFG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,QAAQ,CAAC,CAwPnB"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { JsonRpcErrorCode, McpError, serviceUnavailable, timeout, validationError, } from '../../types-global/errors.js';
|
|
7
7
|
import { logger } from '../../utils/internal/logger.js';
|
|
8
|
+
import { withExtra } from '../../utils/internal/requestContext.js';
|
|
8
9
|
import { runtimeCaps } from '../../utils/internal/runtime.js';
|
|
9
10
|
import { httpStatusToErrorCode } from '../../utils/network/httpError.js';
|
|
10
11
|
import { readBoundedResponseText } from '../../utils/network/responseBody.js';
|
|
@@ -25,15 +26,6 @@ const ERROR_BODY_SCAN_LIMIT = 16_384;
|
|
|
25
26
|
* exactly this set, so these responses are returned untouched.
|
|
26
27
|
*/
|
|
27
28
|
const NULL_BODY_STATUS = new Set([204, 205, 304]);
|
|
28
|
-
/**
|
|
29
|
-
* Reads the optional `operation` label off a context argument. It is an ad-hoc
|
|
30
|
-
* field of the `RequestContext` bag, absent from both `RequestContextLike` and
|
|
31
|
-
* the handler-facing `Context`.
|
|
32
|
-
*/
|
|
33
|
-
function contextOperation(context) {
|
|
34
|
-
const operation = context.operation;
|
|
35
|
-
return typeof operation === 'string' ? operation : undefined;
|
|
36
|
-
}
|
|
37
29
|
let clientDurationHistogram;
|
|
38
30
|
function getHttpClientMetrics() {
|
|
39
31
|
clientDurationHistogram ??= createHistogram('http.client.request.duration', 'Duration of outbound HTTP requests', 's');
|
|
@@ -477,23 +469,17 @@ export async function fetchWithTimeout(url, timeoutMs, context, options) {
|
|
|
477
469
|
let deadlineFollowsBody = false;
|
|
478
470
|
const errorIdentity = {
|
|
479
471
|
requestId: context.requestId,
|
|
480
|
-
operation:
|
|
472
|
+
operation: context.operation,
|
|
481
473
|
};
|
|
482
474
|
const timeoutFailure = () => {
|
|
483
|
-
logger.error(`${operationDescription} timed out after ${timeoutMs}ms.`, {
|
|
484
|
-
...context,
|
|
485
|
-
errorSource: 'FetchTimeout',
|
|
486
|
-
});
|
|
475
|
+
logger.error(`${operationDescription} timed out after ${timeoutMs}ms.`, withExtra(context, { errorSource: 'FetchTimeout' }));
|
|
487
476
|
return timeout(`${operationDescription} timed out.`, {
|
|
488
477
|
...errorIdentity,
|
|
489
478
|
errorSource: 'FetchTimeout',
|
|
490
479
|
});
|
|
491
480
|
};
|
|
492
481
|
const abortedFailure = () => {
|
|
493
|
-
logger.info(`${operationDescription} aborted by caller.`, {
|
|
494
|
-
...context,
|
|
495
|
-
errorSource: 'FetchAborted',
|
|
496
|
-
});
|
|
482
|
+
logger.info(`${operationDescription} aborted by caller.`, withExtra(context, { errorSource: 'FetchAborted' }));
|
|
497
483
|
return new McpError(JsonRpcErrorCode.InternalError, `${operationDescription} was aborted.`, {
|
|
498
484
|
...errorIdentity,
|
|
499
485
|
errorSource: 'FetchAborted',
|
|
@@ -536,13 +522,12 @@ export async function fetchWithTimeout(url, timeoutMs, context, options) {
|
|
|
536
522
|
// Callers that treat a status as expected (e.g. 404 → empty result) get a
|
|
537
523
|
// debug line instead of error; the thrown McpError below is unchanged.
|
|
538
524
|
const logMessage = `Fetch failed for ${redactUrl(currentUrl)} with status ${response.status}.`;
|
|
539
|
-
const logPayload = {
|
|
540
|
-
...context,
|
|
525
|
+
const logPayload = withExtra(context, {
|
|
541
526
|
statusCode: response.status,
|
|
542
527
|
statusText: response.statusText,
|
|
543
528
|
responseBody,
|
|
544
529
|
errorSource: 'FetchHttpError',
|
|
545
|
-
};
|
|
530
|
+
});
|
|
546
531
|
if (expectedStatuses?.includes(response.status)) {
|
|
547
532
|
logger.debug(logMessage, logPayload);
|
|
548
533
|
}
|
|
@@ -614,11 +599,10 @@ export async function fetchWithTimeout(url, timeoutMs, context, options) {
|
|
|
614
599
|
throw abortedFailure();
|
|
615
600
|
}
|
|
616
601
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
617
|
-
logger.error(`Network error during ${operationDescription}: ${errorMessage}`, {
|
|
618
|
-
...context,
|
|
602
|
+
logger.error(`Network error during ${operationDescription}: ${errorMessage}`, withExtra(context, {
|
|
619
603
|
originalErrorName: error instanceof Error ? error.name : 'UnknownError',
|
|
620
604
|
errorSource: 'FetchNetworkError',
|
|
621
|
-
});
|
|
605
|
+
}));
|
|
622
606
|
if (error instanceof McpError) {
|
|
623
607
|
throw error;
|
|
624
608
|
}
|