@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
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview A TaskStore implementation backed by the framework's StorageService.
|
|
3
|
-
* This provides persistent task storage that survives server restarts, using
|
|
4
|
-
* whatever storage backend is configured (filesystem, Supabase, SurrealDB, etc.).
|
|
5
|
-
*
|
|
6
|
-
* Use this instead of InMemoryTaskStore when you need task durability.
|
|
7
|
-
*
|
|
8
|
-
* @experimental These APIs are experimental and may change without notice.
|
|
9
|
-
* @module src/mcp-server/tasks/core/storageBackedTaskStore
|
|
10
|
-
*/
|
|
11
|
-
import type { Request, RequestId, Result } from '@modelcontextprotocol/sdk/types.js';
|
|
12
|
-
import type { StorageService } from '../../../storage/core/StorageService.js';
|
|
13
|
-
import type { CreateTaskOptions, Task, TaskStore } from './taskTypes.js';
|
|
14
|
-
/**
|
|
15
|
-
* Configuration options for StorageBackedTaskStore.
|
|
16
|
-
*/
|
|
17
|
-
export interface StorageBackedTaskStoreOptions {
|
|
18
|
-
/**
|
|
19
|
-
* Default TTL in milliseconds if not specified in task creation.
|
|
20
|
-
* Set to null for unlimited lifetime.
|
|
21
|
-
* @default null
|
|
22
|
-
*/
|
|
23
|
-
defaultTtl?: number | null;
|
|
24
|
-
/**
|
|
25
|
-
* Prefix for storage keys.
|
|
26
|
-
* @default 'tasks'
|
|
27
|
-
*/
|
|
28
|
-
keyPrefix?: string;
|
|
29
|
-
/**
|
|
30
|
-
* Page size for listTasks pagination.
|
|
31
|
-
* @default 10
|
|
32
|
-
*/
|
|
33
|
-
pageSize?: number;
|
|
34
|
-
/**
|
|
35
|
-
* The tenant ID to use for storage operations.
|
|
36
|
-
* Tasks are stored under this tenant for isolation.
|
|
37
|
-
* @default 'system-tasks'
|
|
38
|
-
*/
|
|
39
|
-
tenantId?: string;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* A TaskStore implementation backed by StorageService for persistent task storage.
|
|
43
|
-
*
|
|
44
|
-
* Unlike InMemoryTaskStore, this implementation:
|
|
45
|
-
* - Persists tasks across server restarts
|
|
46
|
-
* - Works with any configured storage backend (filesystem, Supabase, SurrealDB, etc.)
|
|
47
|
-
* - Supports TTL via storage provider options
|
|
48
|
-
*
|
|
49
|
-
* @example
|
|
50
|
-
* ```typescript
|
|
51
|
-
* const taskStore = new StorageBackedTaskStore(storageService, {
|
|
52
|
-
* tenantId: 'my-app-tasks',
|
|
53
|
-
* defaultTtl: 3600000, // 1 hour
|
|
54
|
-
* });
|
|
55
|
-
* ```
|
|
56
|
-
*
|
|
57
|
-
* @experimental
|
|
58
|
-
*/
|
|
59
|
-
export declare class StorageBackedTaskStore implements TaskStore {
|
|
60
|
-
private readonly storage;
|
|
61
|
-
private readonly tenantId;
|
|
62
|
-
private readonly keyPrefix;
|
|
63
|
-
private readonly defaultTtl;
|
|
64
|
-
private readonly pageSize;
|
|
65
|
-
constructor(storage: StorageService, options?: StorageBackedTaskStoreOptions);
|
|
66
|
-
/**
|
|
67
|
-
* Creates a request context for storage operations.
|
|
68
|
-
*/
|
|
69
|
-
private createContext;
|
|
70
|
-
/**
|
|
71
|
-
* Generates the storage key for a task.
|
|
72
|
-
*/
|
|
73
|
-
private getTaskKey;
|
|
74
|
-
/**
|
|
75
|
-
* Validates that the caller's sessionId matches the stored task's sessionId.
|
|
76
|
-
* Tasks created without a sessionId (legacy/pre-ownership) are accessible by any session.
|
|
77
|
-
* @throws {McpError} Forbidden if sessionId mismatch
|
|
78
|
-
*/
|
|
79
|
-
private assertOwnership;
|
|
80
|
-
/**
|
|
81
|
-
* Generates a unique task ID.
|
|
82
|
-
* Uses the framework's idGenerator for consistent ID format.
|
|
83
|
-
*/
|
|
84
|
-
private generateTaskId;
|
|
85
|
-
createTask(taskParams: CreateTaskOptions, requestId: RequestId, request: Request, sessionId?: string): Promise<Task>;
|
|
86
|
-
getTask(taskId: string, sessionId?: string): Promise<Task | null>;
|
|
87
|
-
storeTaskResult(taskId: string, status: 'completed' | 'failed', result: Result, sessionId?: string): Promise<void>;
|
|
88
|
-
getTaskResult(taskId: string, sessionId?: string): Promise<Result>;
|
|
89
|
-
updateTaskStatus(taskId: string, status: Task['status'], statusMessage?: string, sessionId?: string): Promise<void>;
|
|
90
|
-
listTasks(cursor?: string, sessionId?: string): Promise<{
|
|
91
|
-
tasks: Task[];
|
|
92
|
-
nextCursor?: string;
|
|
93
|
-
}>;
|
|
94
|
-
/**
|
|
95
|
-
* Deletes a task from storage.
|
|
96
|
-
* Useful for manual cleanup or testing.
|
|
97
|
-
*
|
|
98
|
-
* @param taskId - The task ID to delete
|
|
99
|
-
*/
|
|
100
|
-
deleteTask(taskId: string): Promise<void>;
|
|
101
|
-
/**
|
|
102
|
-
* Clears all tasks from storage.
|
|
103
|
-
* Useful for testing or administrative purposes.
|
|
104
|
-
*
|
|
105
|
-
* WARNING: This deletes ALL tasks for the configured tenant.
|
|
106
|
-
*/
|
|
107
|
-
clearAllTasks(): Promise<void>;
|
|
108
|
-
}
|
|
109
|
-
//# sourceMappingURL=storageBackedTaskStore.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storageBackedTaskStore.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tasks/core/storageBackedTaskStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAErF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAIvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAgBzE;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,sBAAuB,YAAW,SAAS;IAOpD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC,YACmB,OAAO,EAAE,cAAc,EACxC,OAAO,GAAE,6BAAkC,EAM5C;IAED;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAWvB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAKhB,UAAU,CACd,UAAU,EAAE,iBAAiB,EAC7B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAoCf;IAEK,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAMtE;IAEK,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAAG,QAAQ,EAC9B,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA4Bf;IAEK,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAcvE;IAEK,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EACtB,aAAa,CAAC,EAAE,MAAM,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA+Bf;IAEK,SAAS,CACb,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CA+BjD;IAED;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9C;IAED;;;;;OAKG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBnC;CACF"}
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
import { forbidden, invalidRequest, notFound } from '../../../types-global/errors.js';
|
|
2
|
-
import { idGenerator } from '../../../utils/security/idGenerator.js';
|
|
3
|
-
import { isTerminal } from './taskTypes.js';
|
|
4
|
-
/**
|
|
5
|
-
* A TaskStore implementation backed by StorageService for persistent task storage.
|
|
6
|
-
*
|
|
7
|
-
* Unlike InMemoryTaskStore, this implementation:
|
|
8
|
-
* - Persists tasks across server restarts
|
|
9
|
-
* - Works with any configured storage backend (filesystem, Supabase, SurrealDB, etc.)
|
|
10
|
-
* - Supports TTL via storage provider options
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```typescript
|
|
14
|
-
* const taskStore = new StorageBackedTaskStore(storageService, {
|
|
15
|
-
* tenantId: 'my-app-tasks',
|
|
16
|
-
* defaultTtl: 3600000, // 1 hour
|
|
17
|
-
* });
|
|
18
|
-
* ```
|
|
19
|
-
*
|
|
20
|
-
* @experimental
|
|
21
|
-
*/
|
|
22
|
-
export class StorageBackedTaskStore {
|
|
23
|
-
storage;
|
|
24
|
-
tenantId;
|
|
25
|
-
keyPrefix;
|
|
26
|
-
defaultTtl;
|
|
27
|
-
pageSize;
|
|
28
|
-
constructor(storage, options = {}) {
|
|
29
|
-
this.storage = storage;
|
|
30
|
-
this.tenantId = options.tenantId ?? 'system-tasks';
|
|
31
|
-
this.keyPrefix = options.keyPrefix ?? 'tasks';
|
|
32
|
-
this.defaultTtl = options.defaultTtl ?? null;
|
|
33
|
-
this.pageSize = options.pageSize ?? 10;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Creates a request context for storage operations.
|
|
37
|
-
*/
|
|
38
|
-
createContext(operation) {
|
|
39
|
-
return {
|
|
40
|
-
operation: `StorageBackedTaskStore.${operation}`,
|
|
41
|
-
requestId: idGenerator.generate('req'),
|
|
42
|
-
timestamp: new Date().toISOString(),
|
|
43
|
-
tenantId: this.tenantId,
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Generates the storage key for a task.
|
|
48
|
-
*/
|
|
49
|
-
getTaskKey(taskId) {
|
|
50
|
-
return `${this.keyPrefix}/${taskId}`;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Validates that the caller's sessionId matches the stored task's sessionId.
|
|
54
|
-
* Tasks created without a sessionId (legacy/pre-ownership) are accessible by any session.
|
|
55
|
-
* @throws {McpError} Forbidden if sessionId mismatch
|
|
56
|
-
*/
|
|
57
|
-
assertOwnership(stored, callerSessionId, taskId) {
|
|
58
|
-
if (!stored.sessionId)
|
|
59
|
-
return;
|
|
60
|
-
if (stored.sessionId !== callerSessionId) {
|
|
61
|
-
throw forbidden(`Access denied to task ${taskId}`);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Generates a unique task ID.
|
|
66
|
-
* Uses the framework's idGenerator for consistent ID format.
|
|
67
|
-
*/
|
|
68
|
-
generateTaskId() {
|
|
69
|
-
// Generate a longer ID for global uniqueness (16 chars)
|
|
70
|
-
return idGenerator.generate('task', { length: 16 });
|
|
71
|
-
}
|
|
72
|
-
async createTask(taskParams, requestId, request, sessionId) {
|
|
73
|
-
const context = this.createContext('createTask');
|
|
74
|
-
const taskId = this.generateTaskId();
|
|
75
|
-
const actualTtl = taskParams.ttl ?? this.defaultTtl;
|
|
76
|
-
const createdAt = new Date().toISOString();
|
|
77
|
-
const task = {
|
|
78
|
-
taskId,
|
|
79
|
-
status: 'working',
|
|
80
|
-
ttl: actualTtl,
|
|
81
|
-
createdAt,
|
|
82
|
-
lastUpdatedAt: createdAt,
|
|
83
|
-
pollInterval: taskParams.pollInterval ?? 1000,
|
|
84
|
-
};
|
|
85
|
-
const storedTask = {
|
|
86
|
-
task,
|
|
87
|
-
request,
|
|
88
|
-
requestId,
|
|
89
|
-
};
|
|
90
|
-
// Bind session ownership if provided
|
|
91
|
-
if (sessionId) {
|
|
92
|
-
storedTask.sessionId = sessionId;
|
|
93
|
-
}
|
|
94
|
-
// Store with TTL if specified (convert ms to seconds for StorageService)
|
|
95
|
-
await this.storage.set(this.getTaskKey(taskId), storedTask, context, actualTtl ? { ttl: Math.ceil(actualTtl / 1000) } : undefined);
|
|
96
|
-
return task;
|
|
97
|
-
}
|
|
98
|
-
async getTask(taskId, sessionId) {
|
|
99
|
-
const context = this.createContext('getTask');
|
|
100
|
-
const stored = await this.storage.get(this.getTaskKey(taskId), context);
|
|
101
|
-
if (!stored)
|
|
102
|
-
return null;
|
|
103
|
-
this.assertOwnership(stored, sessionId, taskId);
|
|
104
|
-
return { ...stored.task };
|
|
105
|
-
}
|
|
106
|
-
async storeTaskResult(taskId, status, result, sessionId) {
|
|
107
|
-
const context = this.createContext('storeTaskResult');
|
|
108
|
-
const key = this.getTaskKey(taskId);
|
|
109
|
-
const stored = await this.storage.get(key, context);
|
|
110
|
-
if (!stored) {
|
|
111
|
-
throw notFound(`Task with ID ${taskId} not found`);
|
|
112
|
-
}
|
|
113
|
-
this.assertOwnership(stored, sessionId, taskId);
|
|
114
|
-
// Don't allow storing results for tasks already in terminal state
|
|
115
|
-
if (isTerminal(stored.task.status)) {
|
|
116
|
-
throw invalidRequest(`Cannot store result for task ${taskId} in terminal status '${stored.task.status}'. Task results can only be stored once.`);
|
|
117
|
-
}
|
|
118
|
-
stored.result = result;
|
|
119
|
-
stored.task.status = status;
|
|
120
|
-
stored.task.lastUpdatedAt = new Date().toISOString();
|
|
121
|
-
// Re-store with TTL reset (if ttl is set, convert ms to seconds)
|
|
122
|
-
await this.storage.set(key, stored, context, stored.task.ttl ? { ttl: Math.ceil(stored.task.ttl / 1000) } : undefined);
|
|
123
|
-
}
|
|
124
|
-
async getTaskResult(taskId, sessionId) {
|
|
125
|
-
const context = this.createContext('getTaskResult');
|
|
126
|
-
const stored = await this.storage.get(this.getTaskKey(taskId), context);
|
|
127
|
-
if (!stored) {
|
|
128
|
-
throw notFound(`Task with ID ${taskId} not found`);
|
|
129
|
-
}
|
|
130
|
-
this.assertOwnership(stored, sessionId, taskId);
|
|
131
|
-
if (!stored.result) {
|
|
132
|
-
throw invalidRequest(`Task ${taskId} has no result stored`);
|
|
133
|
-
}
|
|
134
|
-
return stored.result;
|
|
135
|
-
}
|
|
136
|
-
async updateTaskStatus(taskId, status, statusMessage, sessionId) {
|
|
137
|
-
const context = this.createContext('updateTaskStatus');
|
|
138
|
-
const key = this.getTaskKey(taskId);
|
|
139
|
-
const stored = await this.storage.get(key, context);
|
|
140
|
-
if (!stored) {
|
|
141
|
-
throw notFound(`Task with ID ${taskId} not found`);
|
|
142
|
-
}
|
|
143
|
-
this.assertOwnership(stored, sessionId, taskId);
|
|
144
|
-
// Don't allow transitions from terminal states
|
|
145
|
-
if (isTerminal(stored.task.status)) {
|
|
146
|
-
throw invalidRequest(`Cannot update task ${taskId} from terminal status '${stored.task.status}' to '${status}'. Terminal states (completed, failed, cancelled) cannot transition to other states.`);
|
|
147
|
-
}
|
|
148
|
-
stored.task.status = status;
|
|
149
|
-
if (statusMessage) {
|
|
150
|
-
stored.task.statusMessage = statusMessage;
|
|
151
|
-
}
|
|
152
|
-
stored.task.lastUpdatedAt = new Date().toISOString();
|
|
153
|
-
// Re-store, reset TTL if transitioning to terminal state (convert ms to seconds)
|
|
154
|
-
const shouldResetTtl = isTerminal(status) && stored.task.ttl;
|
|
155
|
-
await this.storage.set(key, stored, context, shouldResetTtl ? { ttl: Math.ceil(stored.task.ttl / 1000) } : undefined);
|
|
156
|
-
}
|
|
157
|
-
async listTasks(cursor, sessionId) {
|
|
158
|
-
const context = this.createContext('listTasks');
|
|
159
|
-
// List all task keys with pagination
|
|
160
|
-
const listResult = await this.storage.list(this.keyPrefix, context, cursor ? { cursor, limit: this.pageSize } : { limit: this.pageSize });
|
|
161
|
-
// Fetch all tasks in parallel, filtering by session ownership
|
|
162
|
-
const taskPromises = listResult.keys.map(async (key) => {
|
|
163
|
-
const stored = await this.storage.get(key, context);
|
|
164
|
-
if (!stored)
|
|
165
|
-
return null;
|
|
166
|
-
// Filter: hide tasks whose sessionId doesn't match the caller's.
|
|
167
|
-
// Consistent with assertOwnership: session-bound tasks are only
|
|
168
|
-
// visible to the session that created them.
|
|
169
|
-
if (stored.sessionId && stored.sessionId !== sessionId) {
|
|
170
|
-
return null;
|
|
171
|
-
}
|
|
172
|
-
return { ...stored.task };
|
|
173
|
-
});
|
|
174
|
-
const tasksOrNull = await Promise.all(taskPromises);
|
|
175
|
-
const tasks = tasksOrNull.filter((t) => t !== null);
|
|
176
|
-
// Handle exactOptionalPropertyTypes - only include nextCursor if defined
|
|
177
|
-
if (listResult.nextCursor !== undefined) {
|
|
178
|
-
return { tasks, nextCursor: listResult.nextCursor };
|
|
179
|
-
}
|
|
180
|
-
return { tasks };
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Deletes a task from storage.
|
|
184
|
-
* Useful for manual cleanup or testing.
|
|
185
|
-
*
|
|
186
|
-
* @param taskId - The task ID to delete
|
|
187
|
-
*/
|
|
188
|
-
async deleteTask(taskId) {
|
|
189
|
-
const context = this.createContext('deleteTask');
|
|
190
|
-
await this.storage.delete(this.getTaskKey(taskId), context);
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Clears all tasks from storage.
|
|
194
|
-
* Useful for testing or administrative purposes.
|
|
195
|
-
*
|
|
196
|
-
* WARNING: This deletes ALL tasks for the configured tenant.
|
|
197
|
-
*/
|
|
198
|
-
async clearAllTasks() {
|
|
199
|
-
const context = this.createContext('clearAllTasks');
|
|
200
|
-
// List and delete all tasks
|
|
201
|
-
let cursor;
|
|
202
|
-
do {
|
|
203
|
-
const result = await this.storage.list(this.keyPrefix, context, cursor ? { cursor, limit: 100 } : { limit: 100 });
|
|
204
|
-
await Promise.all(result.keys.map((key) => this.storage.delete(key, context)));
|
|
205
|
-
cursor = result.nextCursor;
|
|
206
|
-
} while (cursor);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
//# sourceMappingURL=storageBackedTaskStore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storageBackedTaskStore.js","sourceRoot":"","sources":["../../../../src/mcp-server/tasks/core/storageBackedTaskStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import type { config as configType } from '../../../config/index.js';
|
|
2
|
-
import type { StorageService } from '../../../storage/core/StorageService.js';
|
|
3
|
-
import type { RequestContext } from '../../../utils/internal/requestContext.js';
|
|
4
|
-
import { type TaskMessageQueue, type TaskStore } from './taskTypes.js';
|
|
5
|
-
/**
|
|
6
|
-
* Singleton service that manages task state and message queues for the MCP server.
|
|
7
|
-
*
|
|
8
|
-
* The TaskManager provides:
|
|
9
|
-
* - A shared TaskStore for creating, tracking, and completing tasks
|
|
10
|
-
* - A shared TaskMessageQueue for side-channel message delivery
|
|
11
|
-
* - Cleanup methods for graceful shutdown
|
|
12
|
-
*
|
|
13
|
-
* The store type is determined by configuration:
|
|
14
|
-
* - `in-memory`: Fast, suitable for development (data lost on restart)
|
|
15
|
-
* - `storage`: Persistent, uses configured StorageService backend
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```typescript
|
|
19
|
-
* // Inject via DI
|
|
20
|
-
* constructor(@inject(TaskManagerToken) private taskManager: TaskManager) {}
|
|
21
|
-
*
|
|
22
|
-
* // Access stores
|
|
23
|
-
* const taskStore = this.taskManager.getTaskStore();
|
|
24
|
-
* const messageQueue = this.taskManager.getMessageQueue();
|
|
25
|
-
* ```
|
|
26
|
-
*
|
|
27
|
-
* @experimental
|
|
28
|
-
*/
|
|
29
|
-
export declare class TaskManager {
|
|
30
|
-
private readonly taskStore;
|
|
31
|
-
private readonly inMemoryTaskStore;
|
|
32
|
-
private readonly messageQueue;
|
|
33
|
-
private readonly storeType;
|
|
34
|
-
private isShuttingDown;
|
|
35
|
-
constructor(config: typeof configType, storageService: StorageService);
|
|
36
|
-
/**
|
|
37
|
-
* Returns the TaskStore instance for managing task lifecycle.
|
|
38
|
-
*
|
|
39
|
-
* The TaskStore handles:
|
|
40
|
-
* - Task creation with TTL and poll intervals
|
|
41
|
-
* - Status updates (working, input_required, completed, failed, cancelled)
|
|
42
|
-
* - Result storage and retrieval
|
|
43
|
-
* - Task listing with pagination
|
|
44
|
-
*
|
|
45
|
-
* @returns The singleton TaskStore instance
|
|
46
|
-
*/
|
|
47
|
-
getTaskStore(): TaskStore;
|
|
48
|
-
/**
|
|
49
|
-
* Returns the TaskMessageQueue instance for side-channel messaging.
|
|
50
|
-
*
|
|
51
|
-
* The message queue enables:
|
|
52
|
-
* - Queuing requests/notifications for delivery via tasks/result
|
|
53
|
-
* - FIFO ordering per task
|
|
54
|
-
* - Atomic enqueue with size limits
|
|
55
|
-
*
|
|
56
|
-
* @returns The singleton TaskMessageQueue instance
|
|
57
|
-
*/
|
|
58
|
-
getMessageQueue(): TaskMessageQueue;
|
|
59
|
-
/**
|
|
60
|
-
* Returns the store type currently in use.
|
|
61
|
-
*
|
|
62
|
-
* @returns 'in-memory' or 'storage'
|
|
63
|
-
*/
|
|
64
|
-
getStoreType(): 'in-memory' | 'storage';
|
|
65
|
-
/**
|
|
66
|
-
* Performs cleanup of task resources.
|
|
67
|
-
*
|
|
68
|
-
* Should be called during graceful server shutdown to:
|
|
69
|
-
* - Cancel cleanup timers in the in-memory task store
|
|
70
|
-
* - Clear any pending message queues
|
|
71
|
-
*
|
|
72
|
-
* Note: Storage-backed task stores don't require cleanup as data persists.
|
|
73
|
-
*
|
|
74
|
-
* @param context - Request context for logging
|
|
75
|
-
*/
|
|
76
|
-
cleanup(context?: RequestContext): void;
|
|
77
|
-
/**
|
|
78
|
-
* Returns the current task count (for debugging/monitoring).
|
|
79
|
-
* Only available for in-memory store; returns `null` for storage-backed store.
|
|
80
|
-
*
|
|
81
|
-
* @returns The number of tasks currently tracked, or `null` if unavailable
|
|
82
|
-
*/
|
|
83
|
-
getTaskCount(): number | null;
|
|
84
|
-
/**
|
|
85
|
-
* Checks if the TaskManager is shutting down.
|
|
86
|
-
*
|
|
87
|
-
* @returns True if cleanup has been initiated
|
|
88
|
-
*/
|
|
89
|
-
isCleaningUp(): boolean;
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=taskManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"taskManager.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tasks/core/taskManager.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAOzE,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,gBAAgB,CAAC;AAiFxB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,cAAc,CAAS;IAE/B,YAAY,MAAM,EAAE,OAAO,UAAU,EAAE,cAAc,EAAE,cAAc,EA4CpE;IAED;;;;;;;;;;OAUG;IACI,YAAY,IAAI,SAAS,CAE/B;IAED;;;;;;;;;OASG;IACI,eAAe,IAAI,gBAAgB,CAEzC;IAED;;;;OAIG;IACI,YAAY,IAAI,WAAW,GAAG,SAAS,CAE7C;IAED;;;;;;;;;;OAUG;IACI,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,CAqB7C;IAED;;;;;OAKG;IACI,YAAY,IAAI,MAAM,GAAG,IAAI,CAMnC;IAED;;;;OAIG;IACI,YAAY,IAAI,OAAO,CAE7B;CACF"}
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import { logger } from '../../../utils/internal/logger.js';
|
|
2
|
-
import { idGenerator } from '../../../utils/security/idGenerator.js';
|
|
3
|
-
import { ATTR_MCP_TASK_STATUS, ATTR_MCP_TASK_STORE_TYPE } from '../../../utils/telemetry/attributes.js';
|
|
4
|
-
import { createCounter, createObservableGauge } from '../../../utils/telemetry/metrics.js';
|
|
5
|
-
import { EvictingTaskMessageQueue } from './evictingTaskMessageQueue.js';
|
|
6
|
-
import { SessionAwareTaskStore } from './sessionAwareTaskStore.js';
|
|
7
|
-
import { StorageBackedTaskStore } from './storageBackedTaskStore.js';
|
|
8
|
-
import { DEFAULT_AUTO_TASK_TTL_MS, InMemoryTaskMessageQueue, InMemoryTaskStore, } from './taskTypes.js';
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
|
-
// Task lifecycle metrics
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
let taskCreatedCounter;
|
|
13
|
-
let taskStatusCounter;
|
|
14
|
-
function getTaskMetrics() {
|
|
15
|
-
taskCreatedCounter ??= createCounter('mcp.tasks.created', 'Total tasks created', '{tasks}');
|
|
16
|
-
taskStatusCounter ??= createCounter('mcp.tasks.status_changes', 'Total task status transitions', '{transitions}');
|
|
17
|
-
return { taskCreatedCounter, taskStatusCounter };
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Wraps a TaskStore to record lifecycle metrics on create, status update,
|
|
21
|
-
* and result storage. Delegates all actual logic to the inner store.
|
|
22
|
-
*/
|
|
23
|
-
class InstrumentedTaskStore {
|
|
24
|
-
inner;
|
|
25
|
-
storeTypeLabel;
|
|
26
|
-
constructor(inner, storeTypeLabel) {
|
|
27
|
-
this.inner = inner;
|
|
28
|
-
this.storeTypeLabel = storeTypeLabel;
|
|
29
|
-
}
|
|
30
|
-
async createTask(taskParams, requestId, request, sessionId) {
|
|
31
|
-
const task = await this.inner.createTask(taskParams, requestId, request, sessionId);
|
|
32
|
-
getTaskMetrics().taskCreatedCounter.add(1, {
|
|
33
|
-
[ATTR_MCP_TASK_STORE_TYPE]: this.storeTypeLabel,
|
|
34
|
-
});
|
|
35
|
-
return task;
|
|
36
|
-
}
|
|
37
|
-
async storeTaskResult(taskId, status, result, sessionId) {
|
|
38
|
-
await this.inner.storeTaskResult(taskId, status, result, sessionId);
|
|
39
|
-
getTaskMetrics().taskStatusCounter.add(1, {
|
|
40
|
-
[ATTR_MCP_TASK_STATUS]: status,
|
|
41
|
-
[ATTR_MCP_TASK_STORE_TYPE]: this.storeTypeLabel,
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
async updateTaskStatus(taskId, status, statusMessage, sessionId) {
|
|
45
|
-
await this.inner.updateTaskStatus(taskId, status, statusMessage, sessionId);
|
|
46
|
-
getTaskMetrics().taskStatusCounter.add(1, {
|
|
47
|
-
[ATTR_MCP_TASK_STATUS]: status,
|
|
48
|
-
[ATTR_MCP_TASK_STORE_TYPE]: this.storeTypeLabel,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
getTask(taskId, sessionId) {
|
|
52
|
-
return this.inner.getTask(taskId, sessionId);
|
|
53
|
-
}
|
|
54
|
-
getTaskResult(taskId, sessionId) {
|
|
55
|
-
return this.inner.getTaskResult(taskId, sessionId);
|
|
56
|
-
}
|
|
57
|
-
listTasks(cursor, sessionId) {
|
|
58
|
-
return this.inner.listTasks(cursor, sessionId);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Singleton service that manages task state and message queues for the MCP server.
|
|
63
|
-
*
|
|
64
|
-
* The TaskManager provides:
|
|
65
|
-
* - A shared TaskStore for creating, tracking, and completing tasks
|
|
66
|
-
* - A shared TaskMessageQueue for side-channel message delivery
|
|
67
|
-
* - Cleanup methods for graceful shutdown
|
|
68
|
-
*
|
|
69
|
-
* The store type is determined by configuration:
|
|
70
|
-
* - `in-memory`: Fast, suitable for development (data lost on restart)
|
|
71
|
-
* - `storage`: Persistent, uses configured StorageService backend
|
|
72
|
-
*
|
|
73
|
-
* @example
|
|
74
|
-
* ```typescript
|
|
75
|
-
* // Inject via DI
|
|
76
|
-
* constructor(@inject(TaskManagerToken) private taskManager: TaskManager) {}
|
|
77
|
-
*
|
|
78
|
-
* // Access stores
|
|
79
|
-
* const taskStore = this.taskManager.getTaskStore();
|
|
80
|
-
* const messageQueue = this.taskManager.getMessageQueue();
|
|
81
|
-
* ```
|
|
82
|
-
*
|
|
83
|
-
* @experimental
|
|
84
|
-
*/
|
|
85
|
-
export class TaskManager {
|
|
86
|
-
taskStore;
|
|
87
|
-
inMemoryTaskStore = null;
|
|
88
|
-
messageQueue;
|
|
89
|
-
storeType;
|
|
90
|
-
isShuttingDown = false;
|
|
91
|
-
constructor(config, storageService) {
|
|
92
|
-
this.storeType = config.tasks.storeType;
|
|
93
|
-
// The SDK's queue only ever deletes on `dequeueAll`, so a task the client
|
|
94
|
-
// abandons strands its queue for the life of the process. Wrapping it
|
|
95
|
-
// bounds queue lifetime by the same TTL the task store applies.
|
|
96
|
-
this.messageQueue = new EvictingTaskMessageQueue(new InMemoryTaskMessageQueue(), config.tasks.defaultTtlMs ?? DEFAULT_AUTO_TASK_TTL_MS);
|
|
97
|
-
let baseStore;
|
|
98
|
-
if (this.storeType === 'storage') {
|
|
99
|
-
baseStore = new StorageBackedTaskStore(storageService, {
|
|
100
|
-
tenantId: config.tasks.tenantId,
|
|
101
|
-
defaultTtl: config.tasks.defaultTtlMs ?? null,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
this.inMemoryTaskStore = new InMemoryTaskStore();
|
|
106
|
-
// Wrap with session ownership enforcement — the SDK's InMemoryTaskStore
|
|
107
|
-
// ignores sessionId parameters, so SessionAwareTaskStore adds that layer.
|
|
108
|
-
baseStore = new SessionAwareTaskStore(this.inMemoryTaskStore);
|
|
109
|
-
}
|
|
110
|
-
// Wrap with lifecycle metrics (outermost layer)
|
|
111
|
-
this.taskStore = new InstrumentedTaskStore(baseStore, this.storeType);
|
|
112
|
-
logger.info(`TaskManager initialized with ${this.storeType} task store`, {
|
|
113
|
-
operation: 'TaskManager.constructor',
|
|
114
|
-
requestId: idGenerator.generate('req'),
|
|
115
|
-
timestamp: new Date().toISOString(),
|
|
116
|
-
storeType: this.storeType,
|
|
117
|
-
...(this.storeType === 'storage' && { tenantId: config.tasks.tenantId }),
|
|
118
|
-
});
|
|
119
|
-
// Wire task count to OTel observable gauge
|
|
120
|
-
if (this.inMemoryTaskStore) {
|
|
121
|
-
const store = this.inMemoryTaskStore;
|
|
122
|
-
createObservableGauge('mcp.tasks.active', 'Number of active tasks in the in-memory store', () => store.getAllTasks().length, '{tasks}');
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Returns the TaskStore instance for managing task lifecycle.
|
|
127
|
-
*
|
|
128
|
-
* The TaskStore handles:
|
|
129
|
-
* - Task creation with TTL and poll intervals
|
|
130
|
-
* - Status updates (working, input_required, completed, failed, cancelled)
|
|
131
|
-
* - Result storage and retrieval
|
|
132
|
-
* - Task listing with pagination
|
|
133
|
-
*
|
|
134
|
-
* @returns The singleton TaskStore instance
|
|
135
|
-
*/
|
|
136
|
-
getTaskStore() {
|
|
137
|
-
return this.taskStore;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Returns the TaskMessageQueue instance for side-channel messaging.
|
|
141
|
-
*
|
|
142
|
-
* The message queue enables:
|
|
143
|
-
* - Queuing requests/notifications for delivery via tasks/result
|
|
144
|
-
* - FIFO ordering per task
|
|
145
|
-
* - Atomic enqueue with size limits
|
|
146
|
-
*
|
|
147
|
-
* @returns The singleton TaskMessageQueue instance
|
|
148
|
-
*/
|
|
149
|
-
getMessageQueue() {
|
|
150
|
-
return this.messageQueue;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Returns the store type currently in use.
|
|
154
|
-
*
|
|
155
|
-
* @returns 'in-memory' or 'storage'
|
|
156
|
-
*/
|
|
157
|
-
getStoreType() {
|
|
158
|
-
return this.storeType;
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Performs cleanup of task resources.
|
|
162
|
-
*
|
|
163
|
-
* Should be called during graceful server shutdown to:
|
|
164
|
-
* - Cancel cleanup timers in the in-memory task store
|
|
165
|
-
* - Clear any pending message queues
|
|
166
|
-
*
|
|
167
|
-
* Note: Storage-backed task stores don't require cleanup as data persists.
|
|
168
|
-
*
|
|
169
|
-
* @param context - Request context for logging
|
|
170
|
-
*/
|
|
171
|
-
cleanup(context) {
|
|
172
|
-
if (this.isShuttingDown) {
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
this.isShuttingDown = true;
|
|
176
|
-
const logContext = context ?? {
|
|
177
|
-
operation: 'TaskManager.cleanup',
|
|
178
|
-
requestId: idGenerator.generate('req'),
|
|
179
|
-
timestamp: new Date().toISOString(),
|
|
180
|
-
};
|
|
181
|
-
logger.info('Cleaning up TaskManager resources...', logContext);
|
|
182
|
-
// Only InMemoryTaskStore has cleanup timers
|
|
183
|
-
if (this.inMemoryTaskStore) {
|
|
184
|
-
this.inMemoryTaskStore.cleanup();
|
|
185
|
-
}
|
|
186
|
-
logger.info('TaskManager cleanup complete', logContext);
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Returns the current task count (for debugging/monitoring).
|
|
190
|
-
* Only available for in-memory store; returns `null` for storage-backed store.
|
|
191
|
-
*
|
|
192
|
-
* @returns The number of tasks currently tracked, or `null` if unavailable
|
|
193
|
-
*/
|
|
194
|
-
getTaskCount() {
|
|
195
|
-
if (this.inMemoryTaskStore) {
|
|
196
|
-
return this.inMemoryTaskStore.getAllTasks().length;
|
|
197
|
-
}
|
|
198
|
-
// Storage-backed store doesn't have getAllTasks - would require listing
|
|
199
|
-
return null;
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Checks if the TaskManager is shutting down.
|
|
203
|
-
*
|
|
204
|
-
* @returns True if cleanup has been initiated
|
|
205
|
-
*/
|
|
206
|
-
isCleaningUp() {
|
|
207
|
-
return this.isShuttingDown;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
//# sourceMappingURL=taskManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"taskManager.js","sourceRoot":"","sources":["../../../../src/mcp-server/tasks/core/taskManager.ts"],"names":[],"mappings":"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"}
|