@frontmcp/sdk 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -18
- package/package.json +20 -5
- package/src/app/app.registry.d.ts +3 -2
- package/src/app/app.registry.js +3 -1
- package/src/app/app.registry.js.map +1 -1
- package/src/app/instances/app.local.instance.js +2 -2
- package/src/app/instances/app.local.instance.js.map +1 -1
- package/src/auth/auth.registry.d.ts +34 -2
- package/src/auth/auth.registry.js +162 -24
- package/src/auth/auth.registry.js.map +1 -1
- package/src/auth/auth.utils.js +8 -9
- package/src/auth/auth.utils.js.map +1 -1
- package/src/auth/authorization/authorization.class.d.ts +125 -0
- package/src/auth/authorization/authorization.class.js +224 -0
- package/src/auth/authorization/authorization.class.js.map +1 -0
- package/src/auth/authorization/authorization.types.d.ts +300 -0
- package/src/auth/authorization/authorization.types.js +79 -0
- package/src/auth/authorization/authorization.types.js.map +1 -0
- package/src/auth/authorization/index.d.ts +5 -0
- package/src/auth/authorization/index.js +19 -0
- package/src/auth/authorization/index.js.map +1 -0
- package/src/auth/authorization/orchestrated.authorization.d.ts +242 -0
- package/src/auth/authorization/orchestrated.authorization.js +306 -0
- package/src/auth/authorization/orchestrated.authorization.js.map +1 -0
- package/src/auth/authorization/public.authorization.d.ts +91 -0
- package/src/auth/authorization/public.authorization.js +132 -0
- package/src/auth/authorization/public.authorization.js.map +1 -0
- package/src/auth/authorization/transparent.authorization.d.ts +130 -0
- package/src/auth/authorization/transparent.authorization.js +147 -0
- package/src/auth/authorization/transparent.authorization.js.map +1 -0
- package/src/auth/consent/consent.types.d.ts +111 -0
- package/src/auth/consent/consent.types.js +119 -0
- package/src/auth/consent/consent.types.js.map +1 -0
- package/src/auth/consent/index.d.ts +1 -0
- package/src/auth/consent/index.js +13 -0
- package/src/auth/consent/index.js.map +1 -0
- package/src/auth/detection/auth-provider-detection.d.ts +84 -0
- package/src/auth/detection/auth-provider-detection.js +230 -0
- package/src/auth/detection/auth-provider-detection.js.map +1 -0
- package/src/auth/detection/index.d.ts +1 -0
- package/src/auth/detection/index.js +15 -0
- package/src/auth/detection/index.js.map +1 -0
- package/src/auth/flows/auth.verify.flow.d.ts +110 -0
- package/src/auth/flows/auth.verify.flow.js +379 -0
- package/src/auth/flows/auth.verify.flow.js.map +1 -0
- package/src/auth/flows/oauth.authorize.flow.d.ts +118 -164
- package/src/auth/flows/oauth.authorize.flow.js +701 -33
- package/src/auth/flows/oauth.authorize.flow.js.map +1 -1
- package/src/auth/flows/oauth.callback.flow.d.ts +117 -0
- package/src/auth/flows/oauth.callback.flow.js +357 -0
- package/src/auth/flows/oauth.callback.flow.js.map +1 -0
- package/src/auth/flows/oauth.register.flow.d.ts +32 -125
- package/src/auth/flows/oauth.token.flow.d.ts +52 -154
- package/src/auth/flows/oauth.token.flow.js +193 -55
- package/src/auth/flows/oauth.token.flow.js.map +1 -1
- package/src/auth/flows/session.verify.flow.d.ts +66 -321
- package/src/auth/flows/session.verify.flow.js +107 -18
- package/src/auth/flows/session.verify.flow.js.map +1 -1
- package/src/auth/flows/well-known.jwks.flow.d.ts +34 -205
- package/src/auth/flows/well-known.jwks.flow.js +15 -8
- package/src/auth/flows/well-known.jwks.flow.js.map +1 -1
- package/src/auth/flows/well-known.oauth-authorization-server.flow.d.ts +48 -223
- package/src/auth/flows/well-known.oauth-authorization-server.flow.js +2 -3
- package/src/auth/flows/well-known.oauth-authorization-server.flow.js.map +1 -1
- package/src/auth/flows/well-known.prm.flow.d.ts +19 -120
- package/src/auth/flows/well-known.prm.flow.js +3 -4
- package/src/auth/flows/well-known.prm.flow.js.map +1 -1
- package/src/auth/instances/instance.local-primary-auth.d.ts +91 -4
- package/src/auth/instances/instance.local-primary-auth.js +236 -6
- package/src/auth/instances/instance.local-primary-auth.js.map +1 -1
- package/src/auth/instances/instance.remote-primary-auth.d.ts +4 -3
- package/src/auth/instances/instance.remote-primary-auth.js +2 -2
- package/src/auth/instances/instance.remote-primary-auth.js.map +1 -1
- package/src/auth/session/authorization-vault.d.ts +611 -0
- package/src/auth/session/authorization-vault.js +817 -0
- package/src/auth/session/authorization-vault.js.map +1 -0
- package/src/auth/session/authorization.store.d.ts +301 -0
- package/src/auth/session/authorization.store.js +323 -0
- package/src/auth/session/authorization.store.js.map +1 -0
- package/src/auth/session/encrypted-authorization-vault.d.ts +181 -0
- package/src/auth/session/encrypted-authorization-vault.js +493 -0
- package/src/auth/session/encrypted-authorization-vault.js.map +1 -0
- package/src/auth/session/index.d.ts +4 -4
- package/src/auth/session/index.js +11 -7
- package/src/auth/session/index.js.map +1 -1
- package/src/auth/session/session.schema.d.ts +1 -1
- package/src/auth/session/session.service.d.ts +1 -1
- package/src/auth/session/transport-session.manager.d.ts +101 -0
- package/src/auth/session/transport-session.manager.js +300 -0
- package/src/auth/session/transport-session.manager.js.map +1 -0
- package/src/auth/session/transport-session.types.d.ts +457 -0
- package/src/auth/session/transport-session.types.js +110 -0
- package/src/auth/session/transport-session.types.js.map +1 -0
- package/src/auth/session/utils/session-id.utils.d.ts +14 -2
- package/src/auth/session/utils/session-id.utils.js +68 -19
- package/src/auth/session/utils/session-id.utils.js.map +1 -1
- package/src/auth/session/vault-encryption.d.ts +189 -0
- package/src/auth/session/vault-encryption.js +263 -0
- package/src/auth/session/vault-encryption.js.map +1 -0
- package/src/auth/ui/base-layout.d.ts +188 -0
- package/src/auth/ui/base-layout.js +292 -0
- package/src/auth/ui/base-layout.js.map +1 -0
- package/src/auth/ui/htmx-templates.d.ts +135 -0
- package/src/auth/ui/htmx-templates.js +433 -0
- package/src/auth/ui/htmx-templates.js.map +1 -0
- package/src/auth/ui/index.d.ts +11 -0
- package/src/auth/ui/index.js +35 -0
- package/src/auth/ui/index.js.map +1 -0
- package/src/auth/utils/audience.validator.d.ts +129 -0
- package/src/auth/utils/audience.validator.js +196 -0
- package/src/auth/utils/audience.validator.js.map +1 -0
- package/src/auth/utils/index.d.ts +2 -0
- package/src/auth/utils/index.js +7 -0
- package/src/auth/utils/index.js.map +1 -0
- package/src/auth/utils/www-authenticate.utils.d.ts +97 -0
- package/src/auth/utils/www-authenticate.utils.js +183 -0
- package/src/auth/utils/www-authenticate.utils.js.map +1 -0
- package/src/common/common.schema.d.ts +2 -16
- package/src/common/constants.d.ts +3 -0
- package/src/common/constants.js +6 -1
- package/src/common/constants.js.map +1 -1
- package/src/common/decorators/decorator-utils.d.ts +131 -0
- package/src/common/decorators/decorator-utils.js +195 -0
- package/src/common/decorators/decorator-utils.js.map +1 -0
- package/src/common/decorators/front-mcp.decorator.js +3 -2
- package/src/common/decorators/front-mcp.decorator.js.map +1 -1
- package/src/common/decorators/hook.decorator.d.ts +58 -2
- package/src/common/decorators/hook.decorator.js +127 -17
- package/src/common/decorators/hook.decorator.js.map +1 -1
- package/src/common/decorators/plugin.decorator.d.ts +1 -1
- package/src/common/decorators/plugin.decorator.js +11 -10
- package/src/common/decorators/plugin.decorator.js.map +1 -1
- package/src/common/decorators/resource.decorator.d.ts +32 -3
- package/src/common/decorators/resource.decorator.js +46 -4
- package/src/common/decorators/resource.decorator.js.map +1 -1
- package/src/common/decorators/tool.decorator.d.ts +54 -5
- package/src/common/decorators/tool.decorator.js.map +1 -1
- package/src/common/dynamic/dynamic.plugin.d.ts +22 -11
- package/src/common/dynamic/dynamic.plugin.js +7 -1
- package/src/common/dynamic/dynamic.plugin.js.map +1 -1
- package/src/common/entries/prompt.entry.d.ts +46 -2
- package/src/common/entries/prompt.entry.js +10 -0
- package/src/common/entries/prompt.entry.js.map +1 -1
- package/src/common/entries/resource.entry.d.ts +69 -6
- package/src/common/entries/resource.entry.js +27 -3
- package/src/common/entries/resource.entry.js.map +1 -1
- package/src/common/entries/scope.entry.d.ts +5 -1
- package/src/common/entries/scope.entry.js +3 -3
- package/src/common/entries/scope.entry.js.map +1 -1
- package/src/common/flow/flow.utils.d.ts +56 -0
- package/src/common/flow/flow.utils.js +96 -0
- package/src/common/flow/flow.utils.js.map +1 -0
- package/src/common/index.d.ts +2 -2
- package/src/common/index.js +2 -2
- package/src/common/index.js.map +1 -1
- package/src/common/interfaces/execution-context.interface.d.ts +59 -0
- package/src/common/interfaces/execution-context.interface.js +81 -0
- package/src/common/interfaces/execution-context.interface.js.map +1 -0
- package/src/common/interfaces/flow.interface.d.ts +1 -1
- package/src/common/interfaces/flow.interface.js.map +1 -1
- package/src/common/interfaces/index.d.ts +1 -0
- package/src/common/interfaces/index.js +1 -0
- package/src/common/interfaces/index.js.map +1 -1
- package/src/common/interfaces/internal/primary-auth-provider.interface.d.ts +17 -2
- package/src/common/interfaces/internal/primary-auth-provider.interface.js +52 -4
- package/src/common/interfaces/internal/primary-auth-provider.interface.js.map +1 -1
- package/src/common/interfaces/internal/registry.interface.d.ts +16 -2
- package/src/common/interfaces/internal/registry.interface.js.map +1 -1
- package/src/common/interfaces/plugin.interface.js.map +1 -1
- package/src/common/interfaces/prompt.interface.d.ts +53 -4
- package/src/common/interfaces/prompt.interface.js +78 -0
- package/src/common/interfaces/prompt.interface.js.map +1 -1
- package/src/common/interfaces/resource.interface.d.ts +47 -17
- package/src/common/interfaces/resource.interface.js +53 -0
- package/src/common/interfaces/resource.interface.js.map +1 -1
- package/src/common/interfaces/tool.interface.d.ts +39 -22
- package/src/common/interfaces/tool.interface.js +61 -34
- package/src/common/interfaces/tool.interface.js.map +1 -1
- package/src/common/metadata/adapter.metadata.d.ts +1 -9
- package/src/common/metadata/app.metadata.d.ts +425 -730
- package/src/common/metadata/auth-provider.metadata.d.ts +2 -12
- package/src/common/metadata/flow.metadata.d.ts +10 -25
- package/src/common/metadata/front-mcp.metadata.d.ts +602 -1023
- package/src/common/metadata/front-mcp.metadata.js +6 -4
- package/src/common/metadata/front-mcp.metadata.js.map +1 -1
- package/src/common/metadata/hook.metadata.d.ts +1 -1
- package/src/common/metadata/hook.metadata.js.map +1 -1
- package/src/common/metadata/index.d.ts +1 -0
- package/src/common/metadata/index.js +1 -0
- package/src/common/metadata/index.js.map +1 -1
- package/src/common/metadata/logger.metadata.d.ts +1 -9
- package/src/common/metadata/plugin.metadata.d.ts +8 -30
- package/src/common/metadata/prompt.metadata.d.ts +4 -161
- package/src/common/metadata/provider.metadata.d.ts +2 -12
- package/src/common/metadata/resource.metadata.d.ts +6 -98
- package/src/common/metadata/resource.metadata.js +15 -6
- package/src/common/metadata/resource.metadata.js.map +1 -1
- package/src/common/metadata/tool-ui.metadata.d.ts +10 -0
- package/src/common/metadata/tool-ui.metadata.js +12 -0
- package/src/common/metadata/tool-ui.metadata.js.map +1 -0
- package/src/common/metadata/tool.metadata.d.ts +78 -199
- package/src/common/metadata/tool.metadata.js +11 -14
- package/src/common/metadata/tool.metadata.js.map +1 -1
- package/src/common/providers/base-config.provider.d.ts +84 -0
- package/src/common/providers/base-config.provider.js +128 -0
- package/src/common/providers/base-config.provider.js.map +1 -0
- package/src/common/records/plugin.record.d.ts +5 -6
- package/src/common/records/plugin.record.js.map +1 -1
- package/src/common/records/prompt.record.js.map +1 -1
- package/src/common/records/resource.record.d.ts +17 -1
- package/src/common/records/resource.record.js +12 -6
- package/src/common/records/resource.record.js.map +1 -1
- package/src/common/records/tool.record.js.map +1 -1
- package/src/common/schemas/annotated-class.schema.d.ts +9 -9
- package/src/common/schemas/annotated-class.schema.js +92 -27
- package/src/common/schemas/annotated-class.schema.js.map +1 -1
- package/src/common/schemas/http-input.schema.d.ts +6 -30
- package/src/common/schemas/http-output.schema.d.ts +326 -1630
- package/src/common/schemas/http-output.schema.js +39 -1
- package/src/common/schemas/http-output.schema.js.map +1 -1
- package/src/common/tokens/front-mcp.tokens.js +4 -1
- package/src/common/tokens/front-mcp.tokens.js.map +1 -1
- package/src/common/tokens/resource.tokens.d.ts +2 -0
- package/src/common/tokens/resource.tokens.js +4 -1
- package/src/common/tokens/resource.tokens.js.map +1 -1
- package/src/common/tokens/tool.tokens.d.ts +2 -0
- package/src/common/tokens/tool.tokens.js +2 -0
- package/src/common/tokens/tool.tokens.js.map +1 -1
- package/src/common/types/auth/jwt.types.d.ts +5 -31
- package/src/common/types/auth/session.types.d.ts +97 -192
- package/src/common/types/auth/session.types.js +24 -11
- package/src/common/types/auth/session.types.js.map +1 -1
- package/src/common/types/options/auth.options.d.ts +1013 -490
- package/src/common/types/options/auth.options.js +554 -36
- package/src/common/types/options/auth.options.js.map +1 -1
- package/src/common/types/options/http.options.d.ts +1 -9
- package/src/common/types/options/logging.options.d.ts +7 -13
- package/src/common/types/options/logging.options.js +4 -0
- package/src/common/types/options/logging.options.js.map +1 -1
- package/src/common/types/options/server-info.options.d.ts +3 -31
- package/src/common/types/options/session.options.d.ts +90 -10
- package/src/common/types/options/session.options.js +26 -3
- package/src/common/types/options/session.options.js.map +1 -1
- package/src/common/utils/decide-request-intent.utils.d.ts +8 -46
- package/src/common/utils/decide-request-intent.utils.js +88 -23
- package/src/common/utils/decide-request-intent.utils.js.map +1 -1
- package/src/completion/flows/complete.flow.d.ts +74 -0
- package/src/completion/flows/complete.flow.js +199 -0
- package/src/completion/flows/complete.flow.js.map +1 -0
- package/src/errors/authorization-required.error.d.ts +189 -0
- package/src/errors/authorization-required.error.js +274 -0
- package/src/errors/authorization-required.error.js.map +1 -0
- package/src/errors/index.d.ts +2 -1
- package/src/errors/index.js +17 -1
- package/src/errors/index.js.map +1 -1
- package/src/errors/mcp.error.d.ts +101 -1
- package/src/errors/mcp.error.js +147 -2
- package/src/errors/mcp.error.js.map +1 -1
- package/src/flows/flow.instance.js +4 -3
- package/src/flows/flow.instance.js.map +1 -1
- package/src/flows/flow.registry.js.map +1 -1
- package/src/flows/flow.stages.js +14 -11
- package/src/flows/flow.stages.js.map +1 -1
- package/src/front-mcp/front-mcp.providers.d.ts +464 -102
- package/src/front-mcp/front-mcp.providers.js +3 -5
- package/src/front-mcp/front-mcp.providers.js.map +1 -1
- package/src/hooks/hook.instance.d.ts +1 -1
- package/src/hooks/hook.instance.js +5 -2
- package/src/hooks/hook.instance.js.map +1 -1
- package/src/hooks/hook.registry.js +7 -5
- package/src/hooks/hook.registry.js.map +1 -1
- package/src/index.d.ts +28 -9
- package/src/index.js +5 -1
- package/src/index.js.map +1 -1
- package/src/logger/instances/instance.logger.js +3 -2
- package/src/logger/instances/instance.logger.js.map +1 -1
- package/src/logger/logger.registry.js +7 -2
- package/src/logger/logger.registry.js.map +1 -1
- package/src/logging/flows/set-level.flow.d.ts +62 -0
- package/src/logging/flows/set-level.flow.js +108 -0
- package/src/logging/flows/set-level.flow.js.map +1 -0
- package/src/mcp-apps/csp.d.ts +111 -0
- package/src/mcp-apps/csp.js +267 -0
- package/src/mcp-apps/csp.js.map +1 -0
- package/src/mcp-apps/index.d.ts +23 -0
- package/src/mcp-apps/index.js +91 -0
- package/src/mcp-apps/index.js.map +1 -0
- package/src/mcp-apps/schemas.d.ts +403 -0
- package/src/mcp-apps/schemas.js +345 -0
- package/src/mcp-apps/schemas.js.map +1 -0
- package/src/mcp-apps/template.d.ts +94 -0
- package/src/mcp-apps/template.js +419 -0
- package/src/mcp-apps/template.js.map +1 -0
- package/src/mcp-apps/types.d.ts +323 -0
- package/src/mcp-apps/types.js +59 -0
- package/src/mcp-apps/types.js.map +1 -0
- package/src/notification/index.d.ts +1 -0
- package/src/notification/index.js +13 -0
- package/src/notification/index.js.map +1 -0
- package/src/notification/notification.service.d.ts +378 -0
- package/src/notification/notification.service.js +727 -0
- package/src/notification/notification.service.js.map +1 -0
- package/src/plugin/plugin.registry.js +12 -9
- package/src/plugin/plugin.registry.js.map +1 -1
- package/src/prompt/flows/get-prompt.flow.d.ts +153 -0
- package/src/prompt/flows/get-prompt.flow.js +214 -0
- package/src/prompt/flows/get-prompt.flow.js.map +1 -0
- package/src/prompt/flows/prompts-list.flow.d.ts +67 -0
- package/src/prompt/flows/prompts-list.flow.js +176 -0
- package/src/prompt/flows/prompts-list.flow.js.map +1 -0
- package/src/prompt/index.d.ts +7 -0
- package/src/prompt/index.js +17 -0
- package/src/prompt/index.js.map +1 -0
- package/src/prompt/prompt.events.d.ts +17 -0
- package/src/prompt/prompt.events.js +25 -0
- package/src/prompt/prompt.events.js.map +1 -0
- package/src/prompt/prompt.instance.d.ts +30 -0
- package/src/prompt/prompt.instance.js +120 -0
- package/src/prompt/prompt.instance.js.map +1 -0
- package/src/prompt/prompt.registry.d.ts +79 -12
- package/src/prompt/prompt.registry.js +360 -15
- package/src/prompt/prompt.registry.js.map +1 -1
- package/src/prompt/prompt.types.d.ts +26 -0
- package/src/prompt/prompt.types.js +11 -0
- package/src/prompt/prompt.types.js.map +1 -0
- package/src/prompt/prompt.utils.d.ts +26 -0
- package/src/prompt/prompt.utils.js +136 -0
- package/src/prompt/prompt.utils.js.map +1 -0
- package/src/provider/provider.registry.d.ts +12 -5
- package/src/provider/provider.registry.js +30 -138
- package/src/provider/provider.registry.js.map +1 -1
- package/src/regsitry/registry.base.d.ts +1 -1
- package/src/regsitry/registry.base.js.map +1 -1
- package/src/resource/flows/read-resource.flow.d.ts +91 -0
- package/src/resource/flows/read-resource.flow.js +270 -0
- package/src/resource/flows/read-resource.flow.js.map +1 -0
- package/src/resource/flows/resource-templates-list.flow.d.ts +64 -0
- package/src/resource/flows/resource-templates-list.flow.js +191 -0
- package/src/resource/flows/resource-templates-list.flow.js.map +1 -0
- package/src/resource/flows/resources-list.flow.d.ts +64 -0
- package/src/resource/flows/resources-list.flow.js +196 -0
- package/src/resource/flows/resources-list.flow.js.map +1 -0
- package/src/resource/flows/subscribe-resource.flow.d.ts +45 -0
- package/src/resource/flows/subscribe-resource.flow.js +123 -0
- package/src/resource/flows/subscribe-resource.flow.js.map +1 -0
- package/src/resource/flows/unsubscribe-resource.flow.d.ts +44 -0
- package/src/resource/flows/unsubscribe-resource.flow.js +107 -0
- package/src/resource/flows/unsubscribe-resource.flow.js.map +1 -0
- package/src/resource/index.d.ts +8 -0
- package/src/resource/index.js +20 -0
- package/src/resource/index.js.map +1 -0
- package/src/resource/resource.events.d.ts +24 -0
- package/src/resource/resource.events.js +17 -0
- package/src/resource/resource.events.js.map +1 -0
- package/src/resource/resource.instance.d.ts +35 -0
- package/src/resource/resource.instance.js +163 -0
- package/src/resource/resource.instance.js.map +1 -0
- package/src/resource/resource.registry.d.ts +106 -12
- package/src/resource/resource.registry.js +449 -13
- package/src/resource/resource.registry.js.map +1 -1
- package/src/resource/resource.types.d.ts +35 -0
- package/src/resource/resource.types.js +11 -0
- package/src/resource/resource.types.js.map +1 -0
- package/src/resource/resource.utils.d.ts +30 -0
- package/src/resource/resource.utils.js +151 -0
- package/src/resource/resource.utils.js.map +1 -0
- package/src/scope/flows/http.request.flow.d.ts +48 -330
- package/src/scope/flows/http.request.flow.js +306 -78
- package/src/scope/flows/http.request.flow.js.map +1 -1
- package/src/scope/scope.instance.d.ts +12 -0
- package/src/scope/scope.instance.js +145 -15
- package/src/scope/scope.instance.js.map +1 -1
- package/src/tool/flows/call-tool.flow.d.ts +64 -1110
- package/src/tool/flows/call-tool.flow.js +303 -15
- package/src/tool/flows/call-tool.flow.js.map +1 -1
- package/src/tool/flows/tools-list.flow.d.ts +32 -473
- package/src/tool/flows/tools-list.flow.js +121 -40
- package/src/tool/flows/tools-list.flow.js.map +1 -1
- package/src/tool/tool.events.d.ts +8 -1
- package/src/tool/tool.events.js.map +1 -1
- package/src/tool/tool.instance.d.ts +3 -1
- package/src/tool/tool.instance.js +17 -3
- package/src/tool/tool.instance.js.map +1 -1
- package/src/tool/tool.registry.d.ts +7 -1
- package/src/tool/tool.registry.js +26 -10
- package/src/tool/tool.registry.js.map +1 -1
- package/src/tool/tool.types.d.ts +4 -4
- package/src/tool/tool.types.js.map +1 -1
- package/src/tool/tool.utils.d.ts +3 -12
- package/src/tool/tool.utils.js +39 -193
- package/src/tool/tool.utils.js.map +1 -1
- package/src/tool/ui/index.d.ts +22 -0
- package/src/tool/ui/index.js +63 -0
- package/src/tool/ui/index.js.map +1 -0
- package/src/tool/ui/platform-adapters.d.ts +10 -0
- package/src/tool/ui/platform-adapters.js +18 -0
- package/src/tool/ui/platform-adapters.js.map +1 -0
- package/src/tool/ui/template-helpers.d.ts +46 -0
- package/src/tool/ui/template-helpers.js +112 -0
- package/src/tool/ui/template-helpers.js.map +1 -0
- package/src/tool/ui/ui-resource-template.d.ts +34 -0
- package/src/tool/ui/ui-resource-template.js +64 -0
- package/src/tool/ui/ui-resource-template.js.map +1 -0
- package/src/tool/ui/ui-resource.handler.d.ts +74 -0
- package/src/tool/ui/ui-resource.handler.js +129 -0
- package/src/tool/ui/ui-resource.handler.js.map +1 -0
- package/src/transport/adapters/transport.local.adapter.d.ts +2 -2
- package/src/transport/adapters/transport.local.adapter.js +28 -7
- package/src/transport/adapters/transport.local.adapter.js.map +1 -1
- package/src/transport/adapters/transport.sse.adapter.d.ts +2 -2
- package/src/transport/adapters/transport.sse.adapter.js +4 -3
- package/src/transport/adapters/transport.sse.adapter.js.map +1 -1
- package/src/transport/adapters/transport.streamable-http.adapter.d.ts +10 -3
- package/src/transport/adapters/transport.streamable-http.adapter.js +54 -8
- package/src/transport/adapters/transport.streamable-http.adapter.js.map +1 -1
- package/src/transport/flows/handle.sse.flow.d.ts +29 -63
- package/src/transport/flows/handle.sse.flow.js +78 -10
- package/src/transport/flows/handle.sse.flow.js.map +1 -1
- package/src/transport/flows/handle.stateless-http.flow.d.ts +29 -0
- package/src/transport/flows/handle.stateless-http.flow.js +102 -0
- package/src/transport/flows/handle.stateless-http.flow.js.map +1 -0
- package/src/transport/flows/handle.streamable-http.flow.d.ts +32 -64
- package/src/transport/flows/handle.streamable-http.flow.js +158 -26
- package/src/transport/flows/handle.streamable-http.flow.js.map +1 -1
- package/src/transport/legacy/legacy.sse.tranporter.d.ts +9 -0
- package/src/transport/legacy/legacy.sse.tranporter.js +17 -2
- package/src/transport/legacy/legacy.sse.tranporter.js.map +1 -1
- package/src/transport/mcp-handlers/call-tool-request.handler.js +27 -1
- package/src/transport/mcp-handlers/call-tool-request.handler.js.map +1 -1
- package/src/transport/mcp-handlers/complete-request.handler.d.ts +69 -0
- package/src/transport/mcp-handlers/complete-request.handler.js +11 -0
- package/src/transport/mcp-handlers/complete-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/get-prompt-request.handler.d.ts +87 -0
- package/src/transport/mcp-handlers/get-prompt-request.handler.js +11 -0
- package/src/transport/mcp-handlers/get-prompt-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/index.d.ts +517 -208
- package/src/transport/mcp-handlers/index.js +39 -2
- package/src/transport/mcp-handlers/index.js.map +1 -1
- package/src/transport/mcp-handlers/initialize-request.handler.d.ts +1 -1
- package/src/transport/mcp-handlers/initialize-request.handler.js +73 -7
- package/src/transport/mcp-handlers/initialize-request.handler.js.map +1 -1
- package/src/transport/mcp-handlers/list-prompts-request.handler.d.ts +54 -0
- package/src/transport/mcp-handlers/list-prompts-request.handler.js +11 -0
- package/src/transport/mcp-handlers/list-prompts-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/list-resource-templates-request.handler.d.ts +51 -0
- package/src/transport/mcp-handlers/list-resource-templates-request.handler.js +12 -0
- package/src/transport/mcp-handlers/list-resource-templates-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/list-resources-request.handler.d.ts +51 -0
- package/src/transport/mcp-handlers/list-resources-request.handler.js +12 -0
- package/src/transport/mcp-handlers/list-resources-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/list-tools-request.handler.d.ts +19 -146
- package/src/transport/mcp-handlers/logging-set-level-request.handler.d.ts +46 -0
- package/src/transport/mcp-handlers/logging-set-level-request.handler.js +34 -0
- package/src/transport/mcp-handlers/logging-set-level-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/mcp-handlers.types.d.ts +3 -7
- package/src/transport/mcp-handlers/mcp-handlers.types.js.map +1 -1
- package/src/transport/mcp-handlers/read-resource-request.handler.d.ts +46 -0
- package/src/transport/mcp-handlers/read-resource-request.handler.js +12 -0
- package/src/transport/mcp-handlers/read-resource-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/roots-list-changed-notification.handler.d.ts +11 -0
- package/src/transport/mcp-handlers/roots-list-changed-notification.handler.js +26 -0
- package/src/transport/mcp-handlers/roots-list-changed-notification.handler.js.map +1 -0
- package/src/transport/mcp-handlers/subscribe-request.handler.d.ts +37 -0
- package/src/transport/mcp-handlers/subscribe-request.handler.js +34 -0
- package/src/transport/mcp-handlers/subscribe-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/unsubscribe-request.handler.d.ts +37 -0
- package/src/transport/mcp-handlers/unsubscribe-request.handler.js +34 -0
- package/src/transport/mcp-handlers/unsubscribe-request.handler.js.map +1 -0
- package/src/transport/transport.local.js +7 -2
- package/src/transport/transport.local.js.map +1 -1
- package/src/transport/transport.registry.d.ts +30 -0
- package/src/transport/transport.registry.js +84 -1
- package/src/transport/transport.registry.js.map +1 -1
- package/src/transport/transport.types.d.ts +3 -3
- package/src/transport/transport.types.js.map +1 -1
- package/src/utils/content.utils.d.ts +48 -0
- package/src/utils/content.utils.js +194 -0
- package/src/utils/content.utils.js.map +1 -0
- package/src/utils/index.d.ts +8 -0
- package/src/utils/index.js +55 -0
- package/src/utils/index.js.map +1 -0
- package/src/utils/lineage.utils.d.ts +40 -0
- package/src/utils/lineage.utils.js +82 -0
- package/src/utils/lineage.utils.js.map +1 -0
- package/src/utils/naming.utils.d.ts +46 -0
- package/src/utils/naming.utils.js +136 -0
- package/src/utils/naming.utils.js.map +1 -0
- package/src/utils/types.utils.d.ts +2 -2
- package/src/utils/types.utils.js.map +1 -1
- package/src/utils/uri-template.utils.d.ts +57 -0
- package/src/utils/uri-template.utils.js +113 -0
- package/src/utils/uri-template.utils.js.map +1 -0
- package/src/utils/uri-validation.utils.d.ts +40 -0
- package/src/utils/uri-validation.utils.js +76 -0
- package/src/utils/uri-validation.utils.js.map +1 -0
- package/src/__test-utils__/fixtures/hook.fixtures.d.ts +0 -46
- package/src/__test-utils__/fixtures/hook.fixtures.js +0 -114
- package/src/__test-utils__/fixtures/hook.fixtures.js.map +0 -1
- package/src/__test-utils__/fixtures/index.d.ts +0 -7
- package/src/__test-utils__/fixtures/index.js +0 -11
- package/src/__test-utils__/fixtures/index.js.map +0 -1
- package/src/__test-utils__/fixtures/plugin.fixtures.d.ts +0 -46
- package/src/__test-utils__/fixtures/plugin.fixtures.js +0 -127
- package/src/__test-utils__/fixtures/plugin.fixtures.js.map +0 -1
- package/src/__test-utils__/fixtures/provider.fixtures.d.ts +0 -69
- package/src/__test-utils__/fixtures/provider.fixtures.js +0 -131
- package/src/__test-utils__/fixtures/provider.fixtures.js.map +0 -1
- package/src/__test-utils__/fixtures/scope.fixtures.d.ts +0 -14
- package/src/__test-utils__/fixtures/scope.fixtures.js +0 -59
- package/src/__test-utils__/fixtures/scope.fixtures.js.map +0 -1
- package/src/__test-utils__/fixtures/tool.fixtures.d.ts +0 -36
- package/src/__test-utils__/fixtures/tool.fixtures.js +0 -91
- package/src/__test-utils__/fixtures/tool.fixtures.js.map +0 -1
- package/src/__test-utils__/helpers/assertion.helpers.d.ts +0 -45
- package/src/__test-utils__/helpers/assertion.helpers.js +0 -153
- package/src/__test-utils__/helpers/assertion.helpers.js.map +0 -1
- package/src/__test-utils__/helpers/async.helpers.d.ts +0 -48
- package/src/__test-utils__/helpers/async.helpers.js +0 -112
- package/src/__test-utils__/helpers/async.helpers.js.map +0 -1
- package/src/__test-utils__/helpers/index.d.ts +0 -6
- package/src/__test-utils__/helpers/index.js +0 -10
- package/src/__test-utils__/helpers/index.js.map +0 -1
- package/src/__test-utils__/helpers/setup.helpers.d.ts +0 -54
- package/src/__test-utils__/helpers/setup.helpers.js +0 -106
- package/src/__test-utils__/helpers/setup.helpers.js.map +0 -1
- package/src/__test-utils__/index.d.ts +0 -9
- package/src/__test-utils__/index.js +0 -14
- package/src/__test-utils__/index.js.map +0 -1
- package/src/__test-utils__/mocks/flow-instance.mock.d.ts +0 -50
- package/src/__test-utils__/mocks/flow-instance.mock.js +0 -72
- package/src/__test-utils__/mocks/flow-instance.mock.js.map +0 -1
- package/src/__test-utils__/mocks/hook-registry.mock.d.ts +0 -25
- package/src/__test-utils__/mocks/hook-registry.mock.js +0 -65
- package/src/__test-utils__/mocks/hook-registry.mock.js.map +0 -1
- package/src/__test-utils__/mocks/index.d.ts +0 -8
- package/src/__test-utils__/mocks/index.js +0 -12
- package/src/__test-utils__/mocks/index.js.map +0 -1
- package/src/__test-utils__/mocks/plugin-registry.mock.d.ts +0 -43
- package/src/__test-utils__/mocks/plugin-registry.mock.js +0 -70
- package/src/__test-utils__/mocks/plugin-registry.mock.js.map +0 -1
- package/src/__test-utils__/mocks/provider-registry.mock.d.ts +0 -39
- package/src/__test-utils__/mocks/provider-registry.mock.js +0 -72
- package/src/__test-utils__/mocks/provider-registry.mock.js.map +0 -1
- package/src/__test-utils__/mocks/tool-registry.mock.d.ts +0 -43
- package/src/__test-utils__/mocks/tool-registry.mock.js +0 -79
- package/src/__test-utils__/mocks/tool-registry.mock.js.map +0 -1
- package/src/auth/path.utils.d.ts +0 -20
- package/src/auth/path.utils.js +0 -71
- package/src/auth/path.utils.js.map +0 -1
- package/src/common/decorators-old/async-with.decorator.d.ts +0 -10
- package/src/common/decorators-old/async-with.decorator.js +0 -24
- package/src/common/decorators-old/async-with.decorator.js.map +0 -1
- package/src/common/decorators-old/auth-hook.decorator.d.ts +0 -14
- package/src/common/decorators-old/auth-hook.decorator.js +0 -27
- package/src/common/decorators-old/auth-hook.decorator.js.map +0 -1
- package/src/common/decorators-old/session-hook.decorator.d.ts +0 -14
- package/src/common/decorators-old/session-hook.decorator.js +0 -27
- package/src/common/decorators-old/session-hook.decorator.js.map +0 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// file: libs/sdk/src/prompt/prompt.utils.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.qualifiedNameOf = exports.ownerKeyOf = exports.ensureMaxLen = exports.shortHash = exports.normalizeOwnerPath = exports.normalizeProviderId = exports.normalizeSegment = exports.sepFor = exports.toCase = exports.splitWords = void 0;
|
|
5
|
+
exports.collectPromptMetadata = collectPromptMetadata;
|
|
6
|
+
exports.normalizePrompt = normalizePrompt;
|
|
7
|
+
exports.promptDiscoveryDeps = promptDiscoveryDeps;
|
|
8
|
+
exports.buildParsedPromptResult = buildParsedPromptResult;
|
|
9
|
+
const common_1 = require("../common");
|
|
10
|
+
const token_utils_1 = require("../utils/token.utils");
|
|
11
|
+
const metadata_utils_1 = require("../utils/metadata.utils");
|
|
12
|
+
// Re-export shared naming utilities
|
|
13
|
+
var naming_utils_1 = require("../utils/naming.utils");
|
|
14
|
+
Object.defineProperty(exports, "splitWords", { enumerable: true, get: function () { return naming_utils_1.splitWords; } });
|
|
15
|
+
Object.defineProperty(exports, "toCase", { enumerable: true, get: function () { return naming_utils_1.toCase; } });
|
|
16
|
+
Object.defineProperty(exports, "sepFor", { enumerable: true, get: function () { return naming_utils_1.sepFor; } });
|
|
17
|
+
Object.defineProperty(exports, "normalizeSegment", { enumerable: true, get: function () { return naming_utils_1.normalizeSegment; } });
|
|
18
|
+
Object.defineProperty(exports, "normalizeProviderId", { enumerable: true, get: function () { return naming_utils_1.normalizeProviderId; } });
|
|
19
|
+
Object.defineProperty(exports, "normalizeOwnerPath", { enumerable: true, get: function () { return naming_utils_1.normalizeOwnerPath; } });
|
|
20
|
+
Object.defineProperty(exports, "shortHash", { enumerable: true, get: function () { return naming_utils_1.shortHash; } });
|
|
21
|
+
Object.defineProperty(exports, "ensureMaxLen", { enumerable: true, get: function () { return naming_utils_1.ensureMaxLen; } });
|
|
22
|
+
// Re-export shared lineage utilities
|
|
23
|
+
var lineage_utils_1 = require("../utils/lineage.utils");
|
|
24
|
+
Object.defineProperty(exports, "ownerKeyOf", { enumerable: true, get: function () { return lineage_utils_1.ownerKeyOf; } });
|
|
25
|
+
Object.defineProperty(exports, "qualifiedNameOf", { enumerable: true, get: function () { return lineage_utils_1.qualifiedNameOf; } });
|
|
26
|
+
/**
|
|
27
|
+
* Collect metadata from a class decorated with @FrontMcpPrompt
|
|
28
|
+
*/
|
|
29
|
+
function collectPromptMetadata(cls) {
|
|
30
|
+
return Object.entries(common_1.FrontMcpPromptTokens).reduce((metadata, [key, token]) => {
|
|
31
|
+
const value = (0, metadata_utils_1.getMetadata)(token, cls);
|
|
32
|
+
if (value !== undefined) {
|
|
33
|
+
return Object.assign(metadata, {
|
|
34
|
+
[key]: value,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return metadata;
|
|
38
|
+
}, {});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Normalize any prompt input (class or function) to a PromptRecord.
|
|
42
|
+
*
|
|
43
|
+
* @param item - The prompt input to normalize. Accepts:
|
|
44
|
+
* - A class decorated with @FrontMcpPrompt
|
|
45
|
+
* - A function returned from prompt() builder
|
|
46
|
+
* The `any` type is intentional to handle both decorator patterns and provide
|
|
47
|
+
* meaningful error messages for invalid inputs.
|
|
48
|
+
*/
|
|
49
|
+
function normalizePrompt(item) {
|
|
50
|
+
// Function-style decorator: prompt({ name: '...' })(handler)
|
|
51
|
+
if (item &&
|
|
52
|
+
typeof item === 'function' &&
|
|
53
|
+
item[common_1.FrontMcpPromptTokens.type] === 'function-prompt' &&
|
|
54
|
+
item[common_1.FrontMcpPromptTokens.metadata]) {
|
|
55
|
+
return {
|
|
56
|
+
kind: common_1.PromptKind.FUNCTION,
|
|
57
|
+
provide: item(),
|
|
58
|
+
metadata: item[common_1.FrontMcpPromptTokens.metadata],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// Class-style decorator: @FrontMcpPrompt({ name: '...' })
|
|
62
|
+
if ((0, token_utils_1.isClass)(item)) {
|
|
63
|
+
const metadata = collectPromptMetadata(item);
|
|
64
|
+
return { kind: common_1.PromptKind.CLASS_TOKEN, provide: item, metadata };
|
|
65
|
+
}
|
|
66
|
+
const name = item?.name ?? String(item);
|
|
67
|
+
throw new Error(`Invalid prompt '${name}'. Expected a class or a prompt function.`);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get dependency tokens for graph/cycle detection
|
|
71
|
+
*/
|
|
72
|
+
function promptDiscoveryDeps(rec) {
|
|
73
|
+
switch (rec.kind) {
|
|
74
|
+
case common_1.PromptKind.FUNCTION:
|
|
75
|
+
return (0, token_utils_1.depsOfFunc)(rec.provide, 'discovery');
|
|
76
|
+
case common_1.PromptKind.CLASS_TOKEN:
|
|
77
|
+
return (0, token_utils_1.depsOfClass)(rec.provide, 'discovery');
|
|
78
|
+
default: {
|
|
79
|
+
// Exhaustive check: ensures all PromptKind values are handled
|
|
80
|
+
const _exhaustive = rec;
|
|
81
|
+
throw new Error(`Unhandled prompt kind: ${_exhaustive.kind}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Build a parsed prompt result from raw output
|
|
87
|
+
*/
|
|
88
|
+
function buildParsedPromptResult(raw, metadata) {
|
|
89
|
+
// If already in GetPromptResult format
|
|
90
|
+
if (raw && typeof raw === 'object' && 'messages' in raw && Array.isArray(raw.messages)) {
|
|
91
|
+
const rawObj = raw;
|
|
92
|
+
return {
|
|
93
|
+
description: rawObj.description ?? metadata.description,
|
|
94
|
+
messages: rawObj.messages,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
// If raw is a string, convert to single user message
|
|
98
|
+
if (typeof raw === 'string') {
|
|
99
|
+
return {
|
|
100
|
+
description: metadata.description,
|
|
101
|
+
messages: [{ role: 'user', content: { type: 'text', text: raw } }],
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// If raw is an array of messages
|
|
105
|
+
if (Array.isArray(raw)) {
|
|
106
|
+
return {
|
|
107
|
+
description: metadata.description,
|
|
108
|
+
messages: raw.map(normalizePromptMessage),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// Default: wrap in user message as JSON
|
|
112
|
+
return {
|
|
113
|
+
description: metadata.description,
|
|
114
|
+
messages: [{ role: 'user', content: { type: 'text', text: JSON.stringify(raw) } }],
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Normalize a single message to PromptMessage format
|
|
119
|
+
*/
|
|
120
|
+
function normalizePromptMessage(msg) {
|
|
121
|
+
// If already in correct format with valid role and content
|
|
122
|
+
if (msg &&
|
|
123
|
+
typeof msg === 'object' &&
|
|
124
|
+
'role' in msg &&
|
|
125
|
+
'content' in msg &&
|
|
126
|
+
typeof msg['role'] === 'string' &&
|
|
127
|
+
typeof msg['content'] === 'object') {
|
|
128
|
+
return msg;
|
|
129
|
+
}
|
|
130
|
+
// Assume user message with text content
|
|
131
|
+
return {
|
|
132
|
+
role: 'user',
|
|
133
|
+
content: { type: 'text', text: typeof msg === 'string' ? msg : JSON.stringify(msg) },
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=prompt.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.utils.js","sourceRoot":"","sources":["../../../src/prompt/prompt.utils.ts"],"names":[],"mappings":"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","sourcesContent":["// file: libs/sdk/src/prompt/prompt.utils.ts\n\nimport {\n PromptMetadata,\n FrontMcpPromptTokens,\n PromptType,\n Token,\n PromptRecord,\n PromptKind,\n Type,\n PromptEntry,\n} from '../common';\nimport { depsOfClass, depsOfFunc, isClass } from '../utils/token.utils';\nimport { getMetadata } from '../utils/metadata.utils';\nimport { GetPromptResult, PromptMessage } from '@modelcontextprotocol/sdk/types.js';\n\n// Re-export shared naming utilities\nexport {\n splitWords,\n toCase,\n sepFor,\n normalizeSegment,\n normalizeProviderId,\n normalizeOwnerPath,\n shortHash,\n ensureMaxLen,\n} from '../utils/naming.utils';\n\n// Re-export shared lineage utilities\nexport { ownerKeyOf, qualifiedNameOf } from '../utils/lineage.utils';\n\n/**\n * Collect metadata from a class decorated with @FrontMcpPrompt\n */\nexport function collectPromptMetadata(cls: PromptType): PromptMetadata {\n return Object.entries(FrontMcpPromptTokens).reduce((metadata, [key, token]) => {\n const value = getMetadata(token, cls);\n if (value !== undefined) {\n return Object.assign(metadata, {\n [key]: value,\n });\n }\n return metadata;\n }, {} as PromptMetadata);\n}\n\n/**\n * Normalize any prompt input (class or function) to a PromptRecord.\n *\n * @param item - The prompt input to normalize. Accepts:\n * - A class decorated with @FrontMcpPrompt\n * - A function returned from prompt() builder\n * The `any` type is intentional to handle both decorator patterns and provide\n * meaningful error messages for invalid inputs.\n */\nexport function normalizePrompt(item: any): PromptRecord {\n // Function-style decorator: prompt({ name: '...' })(handler)\n if (\n item &&\n typeof item === 'function' &&\n item[FrontMcpPromptTokens.type] === 'function-prompt' &&\n item[FrontMcpPromptTokens.metadata]\n ) {\n return {\n kind: PromptKind.FUNCTION,\n provide: item(),\n metadata: item[FrontMcpPromptTokens.metadata] as PromptMetadata,\n };\n }\n\n // Class-style decorator: @FrontMcpPrompt({ name: '...' })\n if (isClass(item)) {\n const metadata = collectPromptMetadata(item as PromptType);\n return { kind: PromptKind.CLASS_TOKEN, provide: item as Type<PromptEntry>, metadata };\n }\n\n const name = (item as any)?.name ?? String(item);\n throw new Error(`Invalid prompt '${name}'. Expected a class or a prompt function.`);\n}\n\n/**\n * Get dependency tokens for graph/cycle detection\n */\nexport function promptDiscoveryDeps(rec: PromptRecord): Token[] {\n switch (rec.kind) {\n case PromptKind.FUNCTION:\n return depsOfFunc(rec.provide, 'discovery');\n case PromptKind.CLASS_TOKEN:\n return depsOfClass(rec.provide, 'discovery');\n default: {\n // Exhaustive check: ensures all PromptKind values are handled\n const _exhaustive: never = rec;\n throw new Error(`Unhandled prompt kind: ${(_exhaustive as PromptRecord).kind}`);\n }\n }\n}\n\n/**\n * Build a parsed prompt result from raw output\n */\nexport function buildParsedPromptResult(raw: unknown, metadata: PromptMetadata): GetPromptResult {\n // If already in GetPromptResult format\n if (raw && typeof raw === 'object' && 'messages' in raw && Array.isArray(raw.messages)) {\n const rawObj = raw as { description?: string; messages: unknown[] };\n return {\n description: rawObj.description ?? metadata.description,\n messages: rawObj.messages as PromptMessage[],\n };\n }\n\n // If raw is a string, convert to single user message\n if (typeof raw === 'string') {\n return {\n description: metadata.description,\n messages: [{ role: 'user', content: { type: 'text', text: raw } }],\n };\n }\n\n // If raw is an array of messages\n if (Array.isArray(raw)) {\n return {\n description: metadata.description,\n messages: raw.map(normalizePromptMessage),\n };\n }\n\n // Default: wrap in user message as JSON\n return {\n description: metadata.description,\n messages: [{ role: 'user', content: { type: 'text', text: JSON.stringify(raw) } }],\n };\n}\n\n/**\n * Normalize a single message to PromptMessage format\n */\nfunction normalizePromptMessage(msg: unknown): PromptMessage {\n // If already in correct format with valid role and content\n if (\n msg &&\n typeof msg === 'object' &&\n 'role' in msg &&\n 'content' in msg &&\n typeof (msg as Record<string, unknown>)['role'] === 'string' &&\n typeof (msg as Record<string, unknown>)['content'] === 'object'\n ) {\n return msg as PromptMessage;\n }\n\n // Assume user message with text content\n return {\n role: 'user',\n content: { type: 'text', text: typeof msg === 'string' ? msg : JSON.stringify(msg) },\n };\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
-
import { ProviderInterface, ProviderType, ProviderScope, Token, ProviderRegistryInterface, ProviderRecord, ProviderInjectedRecord, RegistryKind, RegistryType, ProviderEntry, FrontMcpServer } from '../common';
|
|
2
|
+
import { ProviderInterface, ProviderType, ProviderScope, Token, ProviderRegistryInterface, ProviderRecord, ProviderInjectedRecord, ScopeEntry, RegistryKind, RegistryType, ProviderEntry, FrontMcpServer } from '../common';
|
|
3
3
|
import { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';
|
|
4
4
|
import { ProviderViews } from './provider.types';
|
|
5
5
|
import { Scope } from '../scope';
|
|
6
|
-
import HookRegistry from
|
|
6
|
+
import HookRegistry from '../hooks/hook.registry';
|
|
7
7
|
export default class ProviderRegistry extends RegistryAbstract<ProviderEntry, ProviderRecord, ProviderType[], ProviderRegistry | undefined> implements ProviderRegistryInterface {
|
|
8
8
|
private readonly parentProviders?;
|
|
9
9
|
/** used to track which registry provided which token */
|
|
@@ -32,7 +32,8 @@ export default class ProviderRegistry extends RegistryAbstract<ProviderEntry, Pr
|
|
|
32
32
|
getAllSingletons(): ReadonlyMap<Token, unknown>;
|
|
33
33
|
discoveryDeps(rec: ProviderRecord): Token[];
|
|
34
34
|
invocationTokens(_token: Token, rec: ProviderRecord): Token[];
|
|
35
|
-
|
|
35
|
+
getProviderScope(rec: ProviderRecord): ProviderScope;
|
|
36
|
+
getScope(): ScopeEntry;
|
|
36
37
|
private withTimeout;
|
|
37
38
|
private resolveFactoryArg;
|
|
38
39
|
/** Build a single DEFAULT-scoped singleton (used by incremental instantiating). */
|
|
@@ -40,7 +41,7 @@ export default class ProviderRegistry extends RegistryAbstract<ProviderEntry, Pr
|
|
|
40
41
|
private buildIntoStore;
|
|
41
42
|
private resolveManagedForClass;
|
|
42
43
|
get<T>(token: Token<T>): T;
|
|
43
|
-
addRegistry(type:
|
|
44
|
+
addRegistry<T extends RegistryKind>(type: T, value: RegistryType[T]): void;
|
|
44
45
|
getRegistries<T extends RegistryKind>(type: T): RegistryType[T][];
|
|
45
46
|
getHooksRegistry(): HookRegistry;
|
|
46
47
|
getScopeRegistry(): import("../common").ScopeRegistryInterface;
|
|
@@ -67,9 +68,15 @@ export default class ProviderRegistry extends RegistryAbstract<ProviderEntry, Pr
|
|
|
67
68
|
instance: ProviderEntry;
|
|
68
69
|
};
|
|
69
70
|
injectProvider(injected: Omit<ProviderInjectedRecord, 'kind'>): void;
|
|
70
|
-
addDynamicProviders(dynamicProviders:
|
|
71
|
+
addDynamicProviders(dynamicProviders: ProviderType[]): Promise<void[]>;
|
|
71
72
|
private getWithParents;
|
|
72
73
|
getActiveScope(): Scope;
|
|
73
74
|
getActiveServer(): FrontMcpServer;
|
|
75
|
+
/**
|
|
76
|
+
* Build provider instance views for different scopes
|
|
77
|
+
* NOTE: This is currently a stub implementation returning empty maps.
|
|
78
|
+
* Actual view building logic is planned as part of the session management refactoring.
|
|
79
|
+
* See the ProviderRegistryInterface TODO for fixing the session type.
|
|
80
|
+
*/
|
|
74
81
|
buildViews(session: string): Promise<ProviderViews>;
|
|
75
82
|
}
|
|
@@ -40,7 +40,7 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
40
40
|
if (!found)
|
|
41
41
|
throw new Error(`Cannot resolve token ${(0, token_utils_1.tokenName)(token)}: not registered in hierarchy.`);
|
|
42
42
|
const { registry, rec } = found;
|
|
43
|
-
const sc = registry.
|
|
43
|
+
const sc = registry.getProviderScope(rec);
|
|
44
44
|
if (sc !== common_1.ProviderScope.GLOBAL) {
|
|
45
45
|
const scName = common_1.ProviderScope[sc];
|
|
46
46
|
throw new Error(`Dependency ${(0, token_utils_1.tokenName)(token)} is scoped (${scName}) in ${registry.constructor.name}; cannot use as DEFAULT.`);
|
|
@@ -76,8 +76,8 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
76
76
|
throw new Error(`Provider ${(0, token_utils_1.tokenName)(token)} depends on ${(0, token_utils_1.tokenName)(d)}, which is not registered (local or parent).`);
|
|
77
77
|
}
|
|
78
78
|
const depRec = isLocal ? this.defs.get(d) : up.rec;
|
|
79
|
-
const depScope = isLocal ? this.
|
|
80
|
-
if (this.
|
|
79
|
+
const depScope = isLocal ? this.getProviderScope(depRec) : up.registry.getProviderScope(depRec);
|
|
80
|
+
if (this.getProviderScope(rec) === common_1.ProviderScope.GLOBAL && depScope !== common_1.ProviderScope.GLOBAL) {
|
|
81
81
|
throw new Error(`Invalid dependency: DEFAULT-scoped provider ${(0, token_utils_1.tokenName)(token)} cannot depend on scoped provider ${(0, token_utils_1.tokenName)(d)}.`);
|
|
82
82
|
}
|
|
83
83
|
// Only wire local -> local edges in our local graph; parent deps are external to this DAG.
|
|
@@ -122,7 +122,7 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
122
122
|
const only = opts?.onlyTokens ? new Set(opts.onlyTokens) : null;
|
|
123
123
|
for (const token of this.order) {
|
|
124
124
|
const rec = this.defs.get(token);
|
|
125
|
-
if (this.
|
|
125
|
+
if (this.getProviderScope(rec) !== common_1.ProviderScope.GLOBAL)
|
|
126
126
|
continue;
|
|
127
127
|
if (only && !only.has(token))
|
|
128
128
|
continue;
|
|
@@ -136,7 +136,8 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
136
136
|
}
|
|
137
137
|
catch (e) {
|
|
138
138
|
const msg = e?.message ?? e;
|
|
139
|
-
|
|
139
|
+
// Use safe logging to avoid Node.js 24 util.inspect bug with Zod errors
|
|
140
|
+
console.error(`Failed instantiating:`, msg);
|
|
140
141
|
throw new Error(`Failed constructing ${(0, token_utils_1.tokenName)(token)}: ${msg}`);
|
|
141
142
|
}
|
|
142
143
|
}
|
|
@@ -146,136 +147,18 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
146
147
|
getAllSingletons() {
|
|
147
148
|
return this.instances; // exposed as ReadonlyMap in the type
|
|
148
149
|
}
|
|
149
|
-
// /** Get (or create) the mutable session store for a sessionId. */
|
|
150
|
-
// sessionMap(sessionId: string): Map<Token, unknown> {
|
|
151
|
-
// let store = this.scoped.get(sessionId);
|
|
152
|
-
// if (!store) {
|
|
153
|
-
// store = new Map<Token, unknown>();
|
|
154
|
-
// this.scoped.set(sessionId, store);
|
|
155
|
-
// }
|
|
156
|
-
// return store;
|
|
157
|
-
// }
|
|
158
|
-
// /** Try to build SessionProvider from registered DI definition (CLASS/FACTORY/etc.). */
|
|
159
|
-
// private async tryBuildRegisteredSessionProvider(
|
|
160
|
-
// sessionId: string,
|
|
161
|
-
// requestId?: string | number,
|
|
162
|
-
// ): Promise<SessionProvider | undefined> {
|
|
163
|
-
// // Prefer local def; otherwise look up in hierarchy
|
|
164
|
-
// const found = this.lookupDefInHierarchy(SessionProvider as unknown as Token);
|
|
165
|
-
// const rec = found?.rec;
|
|
166
|
-
// const reg = found?.registry;
|
|
167
|
-
//
|
|
168
|
-
// if (!rec) return undefined;
|
|
169
|
-
//
|
|
170
|
-
// const sc = (rec as any).scope ?? ProviderScope.GLOBAL;
|
|
171
|
-
// if (sc === ProviderScope.GLOBAL) {
|
|
172
|
-
// // If someone registered a DEFAULT-scoped SessionProvider, use the singleton instance (from the owning registry)
|
|
173
|
-
// if (!reg!.instances.has(SessionProvider)) {
|
|
174
|
-
// throw new Error(
|
|
175
|
-
// `Registered ${tokenName(SessionProvider)} (DEFAULT) not instantiated at bootstrap`,
|
|
176
|
-
// );
|
|
177
|
-
// }
|
|
178
|
-
// return reg!.instances.get(SessionProvider) as SessionProvider;
|
|
179
|
-
// }
|
|
180
|
-
//
|
|
181
|
-
// // Build into the session store using the owning registry's factory (so its metadata/defs are used)
|
|
182
|
-
// const store = this.sessionMap(sessionId);
|
|
183
|
-
// await reg!.buildIntoStore(
|
|
184
|
-
// SessionProvider as unknown as Token,
|
|
185
|
-
// rec,
|
|
186
|
-
// store,
|
|
187
|
-
// sessionId,
|
|
188
|
-
// [sessionId, requestId],
|
|
189
|
-
// );
|
|
190
|
-
// const sp = store.get(SessionProvider as unknown as Token) as SessionProvider | undefined;
|
|
191
|
-
//
|
|
192
|
-
// // Ensure request id is set/updated, if setter exists
|
|
193
|
-
// if (sp && requestId && typeof sp.setRequestId === 'function') sp.setRequestId(requestId);
|
|
194
|
-
// return sp;
|
|
195
|
-
// }
|
|
196
|
-
// /** Ensure a SessionProvider is present in the session map (registered or anonymous).
|
|
197
|
-
// * @deprecated
|
|
198
|
-
// */
|
|
199
|
-
// async ensureSessionProvider(sessionId: string, requestId?: string | number): Promise<SessionProvider> {
|
|
200
|
-
// const store = this.sessionMap(sessionId);
|
|
201
|
-
//
|
|
202
|
-
// // already present
|
|
203
|
-
// if (store.has(SessionProvider)) {
|
|
204
|
-
// const sp = store.get(SessionProvider) as SessionProvider;
|
|
205
|
-
// if (requestId && typeof sp.setRequestId === 'function') sp.setRequestId(requestId);
|
|
206
|
-
// return sp;
|
|
207
|
-
// }
|
|
208
|
-
//
|
|
209
|
-
// // try registered provider first (local or parent)
|
|
210
|
-
// const registered = await this.tryBuildRegisteredSessionProvider(sessionId, requestId);
|
|
211
|
-
// return registered as SessionProvider;
|
|
212
|
-
//
|
|
213
|
-
// }
|
|
214
|
-
// /**
|
|
215
|
-
// * Create (or get) an authenticated session store, seed SessionProvider if missing.
|
|
216
|
-
// * @deprecated
|
|
217
|
-
// * */
|
|
218
|
-
// bootstrapSession(sessionId: string, requestId?: string): Map<Token, unknown> {
|
|
219
|
-
// let store = this.scoped.get(sessionId);
|
|
220
|
-
// if (!store) {
|
|
221
|
-
// store = new Map<Token, unknown>();
|
|
222
|
-
// this.scoped.set(sessionId, store);
|
|
223
|
-
// }
|
|
224
|
-
// if (!store.has(SessionProvider)) {
|
|
225
|
-
// store.set(SessionProvider, {}); // new SessionProvider(sessionId, requestId ?? '', false));
|
|
226
|
-
// } else if (requestId) {
|
|
227
|
-
// (store.get(SessionProvider) as SessionProvider).setRequestId(requestId);
|
|
228
|
-
// }
|
|
229
|
-
// return store;
|
|
230
|
-
// }
|
|
231
|
-
// /**
|
|
232
|
-
// * Returns all tokens that are registered as session-scoped (including SessionProvider).
|
|
233
|
-
// * @deprecated
|
|
234
|
-
// */
|
|
235
|
-
// listSessionScopedTokens(): Token[] {
|
|
236
|
-
// const out: Token[] = [];
|
|
237
|
-
// // Only local scoped tokens are known here; parent-scoped tokens will be pulled on demand.
|
|
238
|
-
// for (const [tok, rec] of this.defs.entries()) {
|
|
239
|
-
// if (this.getScope(rec) === ProviderScope.SESSION) out.push(tok);
|
|
240
|
-
// }
|
|
241
|
-
// return out;
|
|
242
|
-
// }
|
|
243
|
-
// /** Eager build selected session providers into the given session store. */
|
|
244
|
-
// private async buildSelectedSessionProviders(sessionId: string, requestId?: string | number): Promise<void> {
|
|
245
|
-
// const store = this.sessionMap(sessionId);
|
|
246
|
-
// await this.ensureSessionProvider(sessionId, requestId);
|
|
247
|
-
//
|
|
248
|
-
// // Iterate over all session-scoped tokens (local list). Parent-scoped will resolve on demand.
|
|
249
|
-
// for (const tok of this.listSessionScopedTokens()) {
|
|
250
|
-
// if (tok === (SessionProvider as any)) continue;
|
|
251
|
-
//
|
|
252
|
-
// if (store.has(tok)) continue; // already built
|
|
253
|
-
//
|
|
254
|
-
// const rec = this.defs.get(tok);
|
|
255
|
-
// if (!rec) continue; // should not happen
|
|
256
|
-
//
|
|
257
|
-
// // Recursively build into this session store (handles scoped/default deps)
|
|
258
|
-
// await this.buildIntoStore(tok, rec, store, sessionId);
|
|
259
|
-
// }
|
|
260
|
-
// }
|
|
261
|
-
// /** Convenience: build all three maps you can pass straight into an invoke ctx. */
|
|
262
|
-
// async buildViews(sessionId: string, requestId?: string | number): Promise<ProviderViews> {
|
|
263
|
-
// await this.buildSelectedSessionProviders(sessionId, requestId);
|
|
264
|
-
// return {
|
|
265
|
-
// global: this.getAllSingletons(),
|
|
266
|
-
// session: this.sessionMap(sessionId),
|
|
267
|
-
// request: new Map<Token, unknown>(),
|
|
268
|
-
// };
|
|
269
|
-
// }
|
|
270
150
|
discoveryDeps(rec) {
|
|
271
151
|
return (0, provider_utils_1.providerDiscoveryDeps)(rec, this.tokens, (k, phase) => (0, token_utils_1.depsOfClass)(k, phase));
|
|
272
152
|
}
|
|
273
153
|
invocationTokens(_token, rec) {
|
|
274
154
|
return (0, provider_utils_1.providerInvocationTokens)(rec, (k, phase) => (0, token_utils_1.depsOfClass)(k, phase));
|
|
275
155
|
}
|
|
276
|
-
|
|
156
|
+
getProviderScope(rec) {
|
|
277
157
|
return rec.metadata?.scope ?? common_1.ProviderScope.GLOBAL;
|
|
278
158
|
}
|
|
159
|
+
getScope() {
|
|
160
|
+
return this.getActiveScope();
|
|
161
|
+
}
|
|
279
162
|
/* -------------------- Instantiation -------------------- */
|
|
280
163
|
async withTimeout(p, ms, label) {
|
|
281
164
|
if (ms <= 0 || !Number.isFinite(ms))
|
|
@@ -297,7 +180,7 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
297
180
|
// Local def?
|
|
298
181
|
const rec = this.defs.get(t);
|
|
299
182
|
if (rec) {
|
|
300
|
-
const sc = this.
|
|
183
|
+
const sc = this.getProviderScope(rec);
|
|
301
184
|
if (sc === common_1.ProviderScope.GLOBAL) {
|
|
302
185
|
if (!this.instances.has(t)) {
|
|
303
186
|
throw new Error(`Dependency ${(0, token_utils_1.tokenName)(t)} (DEFAULT scope) is not instantiated`);
|
|
@@ -312,7 +195,7 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
312
195
|
// Parent def?
|
|
313
196
|
const up = this.lookupDefInHierarchy(t);
|
|
314
197
|
if (up) {
|
|
315
|
-
const sc = up.registry.
|
|
198
|
+
const sc = up.registry.getProviderScope(up.rec);
|
|
316
199
|
if (sc === common_1.ProviderScope.GLOBAL) {
|
|
317
200
|
const inst = up.registry.instances.get(t);
|
|
318
201
|
if (inst === undefined) {
|
|
@@ -485,7 +368,8 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
485
368
|
}
|
|
486
369
|
catch (e) {
|
|
487
370
|
const msg = e?.message ?? e;
|
|
488
|
-
|
|
371
|
+
// Use safe logging to avoid Node.js 24 util.inspect bug with Zod errors
|
|
372
|
+
console.error(`Failed constructing:`, msg);
|
|
489
373
|
throw new Error(`Failed constructing (scoped) ${(0, token_utils_1.tokenName)(token)}: ${msg}`);
|
|
490
374
|
}
|
|
491
375
|
}
|
|
@@ -500,7 +384,7 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
500
384
|
// Local DI?
|
|
501
385
|
const depRec = this.defs.get(d);
|
|
502
386
|
if (depRec) {
|
|
503
|
-
const sc = this.
|
|
387
|
+
const sc = this.getProviderScope(depRec);
|
|
504
388
|
if (sc === common_1.ProviderScope.GLOBAL) {
|
|
505
389
|
const v = this.instances.get(d);
|
|
506
390
|
if (v === undefined)
|
|
@@ -515,7 +399,7 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
515
399
|
// Parent DI?
|
|
516
400
|
const up = this.lookupDefInHierarchy(d);
|
|
517
401
|
if (up) {
|
|
518
|
-
const sc = up.registry.
|
|
402
|
+
const sc = up.registry.getProviderScope(up.rec);
|
|
519
403
|
if (sc === common_1.ProviderScope.GLOBAL) {
|
|
520
404
|
const v = up.registry.instances.get(d);
|
|
521
405
|
if (v === undefined)
|
|
@@ -533,8 +417,8 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
533
417
|
if (this.instances.has(token))
|
|
534
418
|
return this.instances.get(token);
|
|
535
419
|
const rec = this.defs.get(token);
|
|
536
|
-
if (rec && this.
|
|
537
|
-
const scName = common_1.ProviderScope[this.
|
|
420
|
+
if (rec && this.getProviderScope(rec) !== common_1.ProviderScope.GLOBAL) {
|
|
421
|
+
const scName = common_1.ProviderScope[this.getProviderScope(rec)];
|
|
538
422
|
throw new Error(`Provider ${(0, token_utils_1.tokenName)(token)} is scoped (${scName}). Use getScoped(token, key).`);
|
|
539
423
|
}
|
|
540
424
|
// bubble to parent
|
|
@@ -552,7 +436,7 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
552
436
|
registry.add(value);
|
|
553
437
|
}
|
|
554
438
|
getRegistries(type) {
|
|
555
|
-
return [...this.registries.get(type) ?? []];
|
|
439
|
+
return [...(this.registries.get(type) ?? [])];
|
|
556
440
|
}
|
|
557
441
|
getHooksRegistry() {
|
|
558
442
|
return this.getRegistries('HookRegistry')[0];
|
|
@@ -570,7 +454,7 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
570
454
|
const found = this.lookupDefInHierarchy(t);
|
|
571
455
|
if (found) {
|
|
572
456
|
const { registry, rec } = found;
|
|
573
|
-
const sc = registry.
|
|
457
|
+
const sc = registry.getProviderScope(rec);
|
|
574
458
|
if (sc !== common_1.ProviderScope.GLOBAL)
|
|
575
459
|
throw new Error(`Plugin dependency ${(0, token_utils_1.tokenName)(t)} must be DEFAULT-scoped at bootstrap`);
|
|
576
460
|
const v = registry.instances.get(t);
|
|
@@ -591,7 +475,7 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
591
475
|
const found = this.lookupDefInHierarchy(cls);
|
|
592
476
|
if (found) {
|
|
593
477
|
const { registry, rec } = found;
|
|
594
|
-
const sc = registry.
|
|
478
|
+
const sc = registry.getProviderScope(rec);
|
|
595
479
|
if (sc !== common_1.ProviderScope.GLOBAL) {
|
|
596
480
|
const scName = common_1.ProviderScope[sc];
|
|
597
481
|
throw new Error(`Provider ${(0, token_utils_1.tokenName)(cls)} is scoped (${scName}). Use getScoped(token, key) or buildViews(...).`);
|
|
@@ -649,7 +533,9 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
649
533
|
this.instances.set(rec.provide, rec.value);
|
|
650
534
|
}
|
|
651
535
|
async addDynamicProviders(dynamicProviders) {
|
|
652
|
-
|
|
536
|
+
// Normalize ProviderType[] to ProviderRecord[] before instantiation
|
|
537
|
+
const normalized = dynamicProviders.map((p) => (0, provider_utils_1.normalizeProvider)(p));
|
|
538
|
+
return Promise.all(normalized.map((rec) => this.initiateOne(rec.provide, rec)));
|
|
653
539
|
}
|
|
654
540
|
getWithParents(token) {
|
|
655
541
|
if (this.instances.has(token)) {
|
|
@@ -667,6 +553,12 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
|
|
|
667
553
|
getActiveServer() {
|
|
668
554
|
return this.getWithParents(common_1.FrontMcpServer);
|
|
669
555
|
}
|
|
556
|
+
/**
|
|
557
|
+
* Build provider instance views for different scopes
|
|
558
|
+
* NOTE: This is currently a stub implementation returning empty maps.
|
|
559
|
+
* Actual view building logic is planned as part of the session management refactoring.
|
|
560
|
+
* See the ProviderRegistryInterface TODO for fixing the session type.
|
|
561
|
+
*/
|
|
670
562
|
async buildViews(session) {
|
|
671
563
|
return {
|
|
672
564
|
global: new Map(),
|