@frontmcp/sdk 0.4.0 → 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 +111 -10
- 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,67 @@
|
|
|
1
|
+
import { FlowBase, FlowRunOptions } from '../../common';
|
|
2
|
+
import 'reflect-metadata';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
declare const inputSchema: z.ZodObject<{
|
|
5
|
+
request: z.ZodObject<{
|
|
6
|
+
params: z.ZodOptional<z.ZodObject<{
|
|
7
|
+
_meta: z.ZodOptional<z.ZodObject<{
|
|
8
|
+
progressToken: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
9
|
+
}, z.core.$loose>>;
|
|
10
|
+
cursor: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, z.core.$loose>>;
|
|
12
|
+
method: z.ZodLiteral<"prompts/list">;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
ctx: z.ZodUnknown;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
declare const outputSchema: z.ZodObject<{
|
|
17
|
+
_meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
18
|
+
nextCursor: z.ZodOptional<z.ZodString>;
|
|
19
|
+
prompts: z.ZodArray<z.ZodObject<{
|
|
20
|
+
description: z.ZodOptional<z.ZodString>;
|
|
21
|
+
arguments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
22
|
+
name: z.ZodString;
|
|
23
|
+
description: z.ZodOptional<z.ZodString>;
|
|
24
|
+
required: z.ZodOptional<z.ZodBoolean>;
|
|
25
|
+
}, z.core.$strip>>>;
|
|
26
|
+
_meta: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
|
|
27
|
+
icons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
28
|
+
src: z.ZodString;
|
|
29
|
+
mimeType: z.ZodOptional<z.ZodString>;
|
|
30
|
+
sizes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
31
|
+
}, z.core.$strip>>>;
|
|
32
|
+
name: z.ZodString;
|
|
33
|
+
title: z.ZodOptional<z.ZodString>;
|
|
34
|
+
}, z.core.$strip>>;
|
|
35
|
+
}, z.core.$loose>;
|
|
36
|
+
declare const stateSchema: z.ZodObject<{
|
|
37
|
+
cursor: z.ZodOptional<z.ZodString>;
|
|
38
|
+
prompts: z.ZodArray<z.ZodObject<{
|
|
39
|
+
ownerName: z.ZodString;
|
|
40
|
+
prompt: z.ZodAny;
|
|
41
|
+
}, z.core.$strip>>;
|
|
42
|
+
resolvedPrompts: z.ZodArray<z.ZodObject<{
|
|
43
|
+
ownerName: z.ZodString;
|
|
44
|
+
prompt: z.ZodAny;
|
|
45
|
+
finalName: z.ZodString;
|
|
46
|
+
}, z.core.$strip>>;
|
|
47
|
+
}, z.core.$strip>;
|
|
48
|
+
declare const plan: {
|
|
49
|
+
readonly pre: ["parseInput"];
|
|
50
|
+
readonly execute: ["findPrompts", "resolveConflicts"];
|
|
51
|
+
readonly post: ["parsePrompts"];
|
|
52
|
+
};
|
|
53
|
+
declare global {
|
|
54
|
+
interface ExtendFlows {
|
|
55
|
+
'prompts:list-prompts': FlowRunOptions<PromptsListFlow, typeof plan, typeof inputSchema, typeof outputSchema, typeof stateSchema>;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
declare const name: "prompts:list-prompts";
|
|
59
|
+
export default class PromptsListFlow extends FlowBase<typeof name> {
|
|
60
|
+
logger: import("../../common").FrontMcpLogger;
|
|
61
|
+
private sample;
|
|
62
|
+
parseInput(): Promise<void>;
|
|
63
|
+
findPrompts(): Promise<void>;
|
|
64
|
+
resolveConflicts(): Promise<void>;
|
|
65
|
+
parsePrompts(): Promise<void>;
|
|
66
|
+
}
|
|
67
|
+
export {};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// file: libs/sdk/src/prompt/flows/prompts-list.flow.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("../../common");
|
|
6
|
+
require("reflect-metadata");
|
|
7
|
+
const zod_1 = require("zod");
|
|
8
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
9
|
+
const errors_1 = require("../../errors");
|
|
10
|
+
const inputSchema = zod_1.z.object({
|
|
11
|
+
request: types_js_1.ListPromptsRequestSchema,
|
|
12
|
+
ctx: zod_1.z.unknown(),
|
|
13
|
+
});
|
|
14
|
+
const outputSchema = types_js_1.ListPromptsResultSchema;
|
|
15
|
+
const stateSchema = zod_1.z.object({
|
|
16
|
+
cursor: zod_1.z.string().optional(),
|
|
17
|
+
prompts: zod_1.z.array(zod_1.z.object({
|
|
18
|
+
ownerName: zod_1.z.string(),
|
|
19
|
+
// z.any() used because PromptEntry is a complex abstract class type
|
|
20
|
+
prompt: zod_1.z.any(),
|
|
21
|
+
})),
|
|
22
|
+
resolvedPrompts: zod_1.z.array(zod_1.z.object({
|
|
23
|
+
ownerName: zod_1.z.string(),
|
|
24
|
+
// z.any() used because PromptEntry is a complex abstract class type
|
|
25
|
+
prompt: zod_1.z.any(),
|
|
26
|
+
finalName: zod_1.z.string(),
|
|
27
|
+
})),
|
|
28
|
+
});
|
|
29
|
+
const plan = {
|
|
30
|
+
pre: ['parseInput'],
|
|
31
|
+
execute: ['findPrompts', 'resolveConflicts'],
|
|
32
|
+
post: ['parsePrompts'],
|
|
33
|
+
};
|
|
34
|
+
const name = 'prompts:list-prompts';
|
|
35
|
+
const { Stage } = (0, common_1.FlowHooksOf)('prompts:list-prompts');
|
|
36
|
+
let PromptsListFlow = class PromptsListFlow extends common_1.FlowBase {
|
|
37
|
+
logger = this.scopeLogger.child('PromptsListFlow');
|
|
38
|
+
sample(arr, n = 5) {
|
|
39
|
+
return arr.slice(0, n);
|
|
40
|
+
}
|
|
41
|
+
async parseInput() {
|
|
42
|
+
this.logger.verbose('parseInput:start');
|
|
43
|
+
let method;
|
|
44
|
+
let params;
|
|
45
|
+
try {
|
|
46
|
+
const inputData = inputSchema.parse(this.rawInput);
|
|
47
|
+
method = inputData.request.method;
|
|
48
|
+
params = inputData.request.params;
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
throw new errors_1.InvalidInputError('Invalid request format', e instanceof zod_1.z.ZodError ? e.issues : undefined);
|
|
52
|
+
}
|
|
53
|
+
if (method !== 'prompts/list') {
|
|
54
|
+
this.logger.warn(`parseInput: invalid method "${method}"`);
|
|
55
|
+
throw new errors_1.InvalidMethodError(method, 'prompts/list');
|
|
56
|
+
}
|
|
57
|
+
const cursor = params?.cursor;
|
|
58
|
+
if (cursor)
|
|
59
|
+
this.logger.verbose(`parseInput: cursor=${cursor}`);
|
|
60
|
+
this.state.set('cursor', cursor);
|
|
61
|
+
this.logger.verbose('parseInput:done');
|
|
62
|
+
}
|
|
63
|
+
async findPrompts() {
|
|
64
|
+
this.logger.info('findPrompts:start');
|
|
65
|
+
try {
|
|
66
|
+
const prompts = [];
|
|
67
|
+
// Get prompts from scope's prompt registry
|
|
68
|
+
const scopePrompts = this.scope.prompts.getPrompts();
|
|
69
|
+
this.logger.verbose(`findPrompts: scope prompts=${scopePrompts.length}`);
|
|
70
|
+
for (const prompt of scopePrompts) {
|
|
71
|
+
prompts.push({ ownerName: prompt.owner.id, prompt });
|
|
72
|
+
}
|
|
73
|
+
this.logger.info(`findPrompts: total prompts collected=${prompts.length}`);
|
|
74
|
+
if (prompts.length === 0) {
|
|
75
|
+
this.logger.warn('findPrompts: no prompts found');
|
|
76
|
+
}
|
|
77
|
+
this.state.set('prompts', prompts);
|
|
78
|
+
this.logger.verbose('findPrompts:done');
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
this.logger.error('findPrompts: failed to collect prompts', error);
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async resolveConflicts() {
|
|
86
|
+
this.logger.verbose('resolveConflicts:start');
|
|
87
|
+
try {
|
|
88
|
+
const found = this.state.required.prompts;
|
|
89
|
+
const counts = new Map();
|
|
90
|
+
for (const { prompt } of found) {
|
|
91
|
+
const baseName = prompt.metadata.name;
|
|
92
|
+
counts.set(baseName, (counts.get(baseName) ?? 0) + 1);
|
|
93
|
+
}
|
|
94
|
+
const conflicts = new Set([...counts.entries()].filter(([, n]) => n > 1).map(([k]) => k));
|
|
95
|
+
if (conflicts.size > 0) {
|
|
96
|
+
const preview = this.sample(Array.from(conflicts)).join(', ');
|
|
97
|
+
const extra = conflicts.size > 5 ? `, +${conflicts.size - 5} more` : '';
|
|
98
|
+
this.logger.warn(`resolveConflicts: ${conflicts.size} name conflict(s) detected: ${preview}${extra}`);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this.logger.info('resolveConflicts: no name conflicts detected');
|
|
102
|
+
}
|
|
103
|
+
const resolved = found.map(({ ownerName, prompt }) => {
|
|
104
|
+
const baseName = prompt.metadata.name;
|
|
105
|
+
const finalName = conflicts.has(baseName) ? `${ownerName}:${baseName}` : baseName;
|
|
106
|
+
return { ownerName, prompt, finalName };
|
|
107
|
+
});
|
|
108
|
+
this.state.set('resolvedPrompts', resolved);
|
|
109
|
+
this.logger.verbose('resolveConflicts:done');
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
this.logger.error('resolveConflicts: failed to resolve conflicts', error);
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async parsePrompts() {
|
|
117
|
+
this.logger.verbose('parsePrompts:start');
|
|
118
|
+
try {
|
|
119
|
+
const resolved = this.state.required.resolvedPrompts;
|
|
120
|
+
const prompts = resolved.map(({ finalName, prompt }) => ({
|
|
121
|
+
name: finalName,
|
|
122
|
+
title: prompt.metadata.title,
|
|
123
|
+
description: prompt.metadata.description,
|
|
124
|
+
arguments: prompt.metadata.arguments,
|
|
125
|
+
icons: prompt.metadata.icons,
|
|
126
|
+
}));
|
|
127
|
+
const preview = this.sample(prompts.map((p) => p.name)).join(', ');
|
|
128
|
+
const extra = prompts.length > 5 ? `, +${prompts.length - 5} more` : '';
|
|
129
|
+
this.logger.info(`parsePrompts: prepared ${prompts.length} prompt descriptor(s): ${preview}${extra}`);
|
|
130
|
+
this.respond({ prompts });
|
|
131
|
+
this.logger.info('parsePrompts: response sent');
|
|
132
|
+
this.logger.verbose('parsePrompts:done');
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
if (error instanceof common_1.FlowControl)
|
|
136
|
+
throw error;
|
|
137
|
+
this.logger.error('parsePrompts: failed to parse prompts', error);
|
|
138
|
+
throw error;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
tslib_1.__decorate([
|
|
143
|
+
Stage('parseInput'),
|
|
144
|
+
tslib_1.__metadata("design:type", Function),
|
|
145
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
146
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
147
|
+
], PromptsListFlow.prototype, "parseInput", null);
|
|
148
|
+
tslib_1.__decorate([
|
|
149
|
+
Stage('findPrompts'),
|
|
150
|
+
tslib_1.__metadata("design:type", Function),
|
|
151
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
152
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
153
|
+
], PromptsListFlow.prototype, "findPrompts", null);
|
|
154
|
+
tslib_1.__decorate([
|
|
155
|
+
Stage('resolveConflicts'),
|
|
156
|
+
tslib_1.__metadata("design:type", Function),
|
|
157
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
158
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
159
|
+
], PromptsListFlow.prototype, "resolveConflicts", null);
|
|
160
|
+
tslib_1.__decorate([
|
|
161
|
+
Stage('parsePrompts'),
|
|
162
|
+
tslib_1.__metadata("design:type", Function),
|
|
163
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
164
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
165
|
+
], PromptsListFlow.prototype, "parsePrompts", null);
|
|
166
|
+
PromptsListFlow = tslib_1.__decorate([
|
|
167
|
+
(0, common_1.Flow)({
|
|
168
|
+
name,
|
|
169
|
+
plan,
|
|
170
|
+
inputSchema,
|
|
171
|
+
outputSchema,
|
|
172
|
+
access: 'authorized',
|
|
173
|
+
})
|
|
174
|
+
], PromptsListFlow);
|
|
175
|
+
exports.default = PromptsListFlow;
|
|
176
|
+
//# sourceMappingURL=prompts-list.flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts-list.flow.js","sourceRoot":"","sources":["../../../../src/prompt/flows/prompts-list.flow.ts"],"names":[],"mappings":"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","sourcesContent":["// file: libs/sdk/src/prompt/flows/prompts-list.flow.ts\n\nimport { Flow, FlowBase, FlowControl, FlowHooksOf, FlowPlan, FlowRunOptions, PromptEntry } from '../../common';\nimport 'reflect-metadata';\nimport { z } from 'zod';\nimport { ListPromptsRequestSchema, ListPromptsResultSchema, Prompt } from '@modelcontextprotocol/sdk/types.js';\nimport { InvalidMethodError, InvalidInputError } from '../../errors';\n\nconst inputSchema = z.object({\n request: ListPromptsRequestSchema,\n ctx: z.unknown(),\n});\n\nconst outputSchema = ListPromptsResultSchema;\n\nconst stateSchema = z.object({\n cursor: z.string().optional(),\n prompts: z.array(\n z.object({\n ownerName: z.string(),\n // z.any() used because PromptEntry is a complex abstract class type\n prompt: z.any(),\n }),\n ),\n resolvedPrompts: z.array(\n z.object({\n ownerName: z.string(),\n // z.any() used because PromptEntry is a complex abstract class type\n prompt: z.any(),\n finalName: z.string(),\n }),\n ),\n});\n\ntype ResponsePromptItem = Prompt;\n\nconst plan = {\n pre: ['parseInput'],\n execute: ['findPrompts', 'resolveConflicts'],\n post: ['parsePrompts'],\n} as const satisfies FlowPlan<string>;\n\ndeclare global {\n interface ExtendFlows {\n 'prompts:list-prompts': FlowRunOptions<\n PromptsListFlow,\n typeof plan,\n typeof inputSchema,\n typeof outputSchema,\n typeof stateSchema\n >;\n }\n}\n\nconst name = 'prompts:list-prompts' as const;\nconst { Stage } = FlowHooksOf('prompts:list-prompts');\n\n@Flow({\n name,\n plan,\n inputSchema,\n outputSchema,\n access: 'authorized',\n})\nexport default class PromptsListFlow extends FlowBase<typeof name> {\n logger = this.scopeLogger.child('PromptsListFlow');\n\n private sample<T>(arr: T[], n = 5): T[] {\n return arr.slice(0, n);\n }\n\n @Stage('parseInput')\n async parseInput() {\n this.logger.verbose('parseInput:start');\n\n let method!: string;\n let params: { cursor?: string } | undefined;\n try {\n const inputData = inputSchema.parse(this.rawInput);\n method = inputData.request.method;\n params = inputData.request.params as { cursor?: string } | undefined;\n } catch (e) {\n throw new InvalidInputError('Invalid request format', e instanceof z.ZodError ? e.issues : undefined);\n }\n\n if (method !== 'prompts/list') {\n this.logger.warn(`parseInput: invalid method \"${method}\"`);\n throw new InvalidMethodError(method, 'prompts/list');\n }\n\n const cursor = params?.cursor;\n if (cursor) this.logger.verbose(`parseInput: cursor=${cursor}`);\n this.state.set('cursor', cursor);\n this.logger.verbose('parseInput:done');\n }\n\n @Stage('findPrompts')\n async findPrompts() {\n this.logger.info('findPrompts:start');\n\n try {\n const prompts: Array<{ ownerName: string; prompt: PromptEntry }> = [];\n\n // Get prompts from scope's prompt registry\n const scopePrompts = this.scope.prompts.getPrompts();\n this.logger.verbose(`findPrompts: scope prompts=${scopePrompts.length}`);\n\n for (const prompt of scopePrompts) {\n prompts.push({ ownerName: prompt.owner.id, prompt });\n }\n\n this.logger.info(`findPrompts: total prompts collected=${prompts.length}`);\n if (prompts.length === 0) {\n this.logger.warn('findPrompts: no prompts found');\n }\n\n this.state.set('prompts', prompts);\n this.logger.verbose('findPrompts:done');\n } catch (error) {\n this.logger.error('findPrompts: failed to collect prompts', error);\n throw error;\n }\n }\n\n @Stage('resolveConflicts')\n async resolveConflicts() {\n this.logger.verbose('resolveConflicts:start');\n\n try {\n const found = this.state.required.prompts;\n\n const counts = new Map<string, number>();\n for (const { prompt } of found) {\n const baseName = prompt.metadata.name;\n counts.set(baseName, (counts.get(baseName) ?? 0) + 1);\n }\n\n const conflicts = new Set<string>([...counts.entries()].filter(([, n]) => n > 1).map(([k]) => k));\n\n if (conflicts.size > 0) {\n const preview = this.sample(Array.from(conflicts)).join(', ');\n const extra = conflicts.size > 5 ? `, +${conflicts.size - 5} more` : '';\n this.logger.warn(`resolveConflicts: ${conflicts.size} name conflict(s) detected: ${preview}${extra}`);\n } else {\n this.logger.info('resolveConflicts: no name conflicts detected');\n }\n\n const resolved = found.map(({ ownerName, prompt }) => {\n const baseName = prompt.metadata.name;\n const finalName = conflicts.has(baseName) ? `${ownerName}:${baseName}` : baseName;\n return { ownerName, prompt, finalName };\n });\n\n this.state.set('resolvedPrompts', resolved);\n this.logger.verbose('resolveConflicts:done');\n } catch (error) {\n this.logger.error('resolveConflicts: failed to resolve conflicts', error);\n throw error;\n }\n }\n\n @Stage('parsePrompts')\n async parsePrompts() {\n this.logger.verbose('parsePrompts:start');\n\n try {\n const resolved = this.state.required.resolvedPrompts;\n\n const prompts: ResponsePromptItem[] = resolved.map(({ finalName, prompt }) => ({\n name: finalName,\n title: prompt.metadata.title,\n description: prompt.metadata.description,\n arguments: prompt.metadata.arguments,\n icons: prompt.metadata.icons,\n }));\n\n const preview = this.sample(prompts.map((p) => p.name)).join(', ');\n const extra = prompts.length > 5 ? `, +${prompts.length - 5} more` : '';\n this.logger.info(`parsePrompts: prepared ${prompts.length} prompt descriptor(s): ${preview}${extra}`);\n\n this.respond({ prompts });\n this.logger.info('parsePrompts: response sent');\n this.logger.verbose('parsePrompts:done');\n } catch (error) {\n if (error instanceof FlowControl) throw error;\n this.logger.error('parsePrompts: failed to parse prompts', error);\n throw error;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as PromptRegistry } from './prompt.registry';
|
|
2
|
+
export { PromptInstance } from './prompt.instance';
|
|
3
|
+
export * from './prompt.types';
|
|
4
|
+
export * from './prompt.events';
|
|
5
|
+
export * from './prompt.utils';
|
|
6
|
+
export { default as GetPromptFlow } from './flows/get-prompt.flow';
|
|
7
|
+
export { default as PromptsListFlow } from './flows/prompts-list.flow';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// file: libs/sdk/src/prompt/index.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PromptsListFlow = exports.GetPromptFlow = exports.PromptInstance = exports.PromptRegistry = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
var prompt_registry_1 = require("./prompt.registry");
|
|
7
|
+
Object.defineProperty(exports, "PromptRegistry", { enumerable: true, get: function () { return tslib_1.__importDefault(prompt_registry_1).default; } });
|
|
8
|
+
var prompt_instance_1 = require("./prompt.instance");
|
|
9
|
+
Object.defineProperty(exports, "PromptInstance", { enumerable: true, get: function () { return prompt_instance_1.PromptInstance; } });
|
|
10
|
+
tslib_1.__exportStar(require("./prompt.types"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./prompt.events"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./prompt.utils"), exports);
|
|
13
|
+
var get_prompt_flow_1 = require("./flows/get-prompt.flow");
|
|
14
|
+
Object.defineProperty(exports, "GetPromptFlow", { enumerable: true, get: function () { return tslib_1.__importDefault(get_prompt_flow_1).default; } });
|
|
15
|
+
var prompts_list_flow_1 = require("./flows/prompts-list.flow");
|
|
16
|
+
Object.defineProperty(exports, "PromptsListFlow", { enumerable: true, get: function () { return tslib_1.__importDefault(prompts_list_flow_1).default; } });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/prompt/index.ts"],"names":[],"mappings":";AAAA,qCAAqC;;;;AAErC,qDAA8D;AAArD,0IAAA,OAAO,OAAkB;AAClC,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,yDAA+B;AAC/B,0DAAgC;AAChC,yDAA+B;AAC/B,2DAAmE;AAA1D,yIAAA,OAAO,OAAiB;AACjC,+DAAuE;AAA9D,6IAAA,OAAO,OAAmB","sourcesContent":["// file: libs/sdk/src/prompt/index.ts\n\nexport { default as PromptRegistry } from './prompt.registry';\nexport { PromptInstance } from './prompt.instance';\nexport * from './prompt.types';\nexport * from './prompt.events';\nexport * from './prompt.utils';\nexport { default as GetPromptFlow } from './flows/get-prompt.flow';\nexport { default as PromptsListFlow } from './flows/prompts-list.flow';\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { PromptInstance } from './prompt.instance';
|
|
2
|
+
export type PromptChangeKind = 'added' | 'updated' | 'removed' | 'reset';
|
|
3
|
+
export type PromptChangeEvent = {
|
|
4
|
+
kind: PromptChangeKind;
|
|
5
|
+
changeScope: 'global' | 'session';
|
|
6
|
+
sessionId?: string;
|
|
7
|
+
relatedRequestId?: string;
|
|
8
|
+
version: number;
|
|
9
|
+
snapshot: readonly PromptInstance[];
|
|
10
|
+
};
|
|
11
|
+
type Listener = (e: PromptChangeEvent) => void;
|
|
12
|
+
export declare class PromptEmitter {
|
|
13
|
+
private listeners;
|
|
14
|
+
on(l: Listener): () => void;
|
|
15
|
+
emit(e: PromptChangeEvent): void;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// file: libs/sdk/src/prompt/prompt.events.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PromptEmitter = void 0;
|
|
5
|
+
class PromptEmitter {
|
|
6
|
+
listeners = new Set();
|
|
7
|
+
on(l) {
|
|
8
|
+
this.listeners.add(l);
|
|
9
|
+
return () => this.listeners.delete(l);
|
|
10
|
+
}
|
|
11
|
+
emit(e) {
|
|
12
|
+
for (const l of [...this.listeners]) {
|
|
13
|
+
try {
|
|
14
|
+
l(e);
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
// Log error but continue notifying other listeners
|
|
18
|
+
// Use safe logging to avoid Node.js 24 util.inspect bug with Zod errors
|
|
19
|
+
console.error('PromptEmitter listener error:', err instanceof Error ? err.message : 'Unknown error');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.PromptEmitter = PromptEmitter;
|
|
25
|
+
//# sourceMappingURL=prompt.events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.events.js","sourceRoot":"","sources":["../../../src/prompt/prompt.events.ts"],"names":[],"mappings":";AAAA,6CAA6C;;;AAiB7C,MAAa,aAAa;IAChB,SAAS,GAAG,IAAI,GAAG,EAAY,CAAC;IAExC,EAAE,CAAC,CAAW;QACZ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,CAAoB;QACvB,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,CAAC,CAAC,CAAC,CAAC,CAAC;YACP,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,mDAAmD;gBACnD,wEAAwE;gBACxE,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;YACvG,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAnBD,sCAmBC","sourcesContent":["// file: libs/sdk/src/prompt/prompt.events.ts\n\nimport { PromptInstance } from './prompt.instance';\n\nexport type PromptChangeKind = 'added' | 'updated' | 'removed' | 'reset';\n\nexport type PromptChangeEvent = {\n kind: PromptChangeKind;\n changeScope: 'global' | 'session';\n sessionId?: string;\n relatedRequestId?: string;\n version: number;\n snapshot: readonly PromptInstance[];\n};\n\ntype Listener = (e: PromptChangeEvent) => void;\n\nexport class PromptEmitter {\n private listeners = new Set<Listener>();\n\n on(l: Listener): () => void {\n this.listeners.add(l);\n return () => this.listeners.delete(l);\n }\n\n emit(e: PromptChangeEvent) {\n for (const l of [...this.listeners]) {\n try {\n l(e);\n } catch (err) {\n // Log error but continue notifying other listeners\n // Use safe logging to avoid Node.js 24 util.inspect bug with Zod errors\n console.error('PromptEmitter listener error:', err instanceof Error ? err.message : 'Unknown error');\n }\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { EntryOwnerRef, PromptEntry, PromptGetExtra, ParsedPromptResult, PromptSafeTransformResult, PromptRecord, PromptContext, PromptMetadata } from '../common';
|
|
2
|
+
import ProviderRegistry from '../provider/provider.registry';
|
|
3
|
+
import HookRegistry from '../hooks/hook.registry';
|
|
4
|
+
import { Scope } from '../scope';
|
|
5
|
+
export declare class PromptInstance extends PromptEntry {
|
|
6
|
+
private readonly providers;
|
|
7
|
+
readonly scope: Scope;
|
|
8
|
+
readonly hooks: HookRegistry;
|
|
9
|
+
constructor(record: PromptRecord, providers: ProviderRegistry, owner: EntryOwnerRef);
|
|
10
|
+
protected initialize(): Promise<void>;
|
|
11
|
+
getMetadata(): PromptMetadata;
|
|
12
|
+
/**
|
|
13
|
+
* Create a prompt context (class or function wrapper).
|
|
14
|
+
*/
|
|
15
|
+
create(args: Record<string, string>, ctx: PromptGetExtra): PromptContext;
|
|
16
|
+
/**
|
|
17
|
+
* Parse and validate arguments against the prompt's argument definitions.
|
|
18
|
+
* @param args Arguments from the MCP request
|
|
19
|
+
* @returns Validated arguments
|
|
20
|
+
*/
|
|
21
|
+
parseArguments(args?: Record<string, string>): Record<string, string>;
|
|
22
|
+
/**
|
|
23
|
+
* Convert the raw prompt return value into an MCP GetPromptResult.
|
|
24
|
+
*/
|
|
25
|
+
parseOutput(raw: unknown): ParsedPromptResult;
|
|
26
|
+
/**
|
|
27
|
+
* Safe version of parseOutput that returns success/error instead of throwing.
|
|
28
|
+
*/
|
|
29
|
+
safeParseOutput(raw: unknown): PromptSafeTransformResult<ParsedPromptResult>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// file: libs/sdk/src/prompt/prompt.instance.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PromptInstance = void 0;
|
|
5
|
+
const common_1 = require("../common");
|
|
6
|
+
const hooks_utils_1 = require("../hooks/hooks.utils");
|
|
7
|
+
const prompt_utils_1 = require("./prompt.utils");
|
|
8
|
+
class PromptInstance extends common_1.PromptEntry {
|
|
9
|
+
providers;
|
|
10
|
+
scope;
|
|
11
|
+
hooks;
|
|
12
|
+
constructor(record, providers, owner) {
|
|
13
|
+
super(record);
|
|
14
|
+
this.owner = owner;
|
|
15
|
+
this.providers = providers;
|
|
16
|
+
this.name = record.metadata.name;
|
|
17
|
+
this.fullName = this.owner.id + ':' + this.name;
|
|
18
|
+
this.scope = this.providers.getActiveScope();
|
|
19
|
+
this.hooks = this.scope.providers.getHooksRegistry();
|
|
20
|
+
this.ready = this.initialize();
|
|
21
|
+
}
|
|
22
|
+
async initialize() {
|
|
23
|
+
// Register hooks for prompts:get-prompt, prompts:list-prompts flows
|
|
24
|
+
const hooks = (0, hooks_utils_1.normalizeHooksFromCls)(this.record.provide).filter((hook) => hook.metadata.flow === 'prompts:get-prompt' || hook.metadata.flow === 'prompts:list-prompts');
|
|
25
|
+
if (hooks.length > 0) {
|
|
26
|
+
await this.hooks.registerHooks(true, ...hooks);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
getMetadata() {
|
|
30
|
+
return this.record.metadata;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create a prompt context (class or function wrapper).
|
|
34
|
+
*/
|
|
35
|
+
create(args, ctx) {
|
|
36
|
+
const metadata = this.metadata;
|
|
37
|
+
const providers = this.providers;
|
|
38
|
+
const scope = this.providers.getActiveScope();
|
|
39
|
+
const logger = scope.logger;
|
|
40
|
+
const authInfo = ctx.authInfo;
|
|
41
|
+
const promptCtorArgs = {
|
|
42
|
+
metadata,
|
|
43
|
+
args,
|
|
44
|
+
providers,
|
|
45
|
+
logger,
|
|
46
|
+
authInfo,
|
|
47
|
+
};
|
|
48
|
+
const record = this.record;
|
|
49
|
+
switch (record.kind) {
|
|
50
|
+
case common_1.PromptKind.CLASS_TOKEN:
|
|
51
|
+
return new record.provide(promptCtorArgs);
|
|
52
|
+
case common_1.PromptKind.FUNCTION:
|
|
53
|
+
return new FunctionPromptContext(record, promptCtorArgs);
|
|
54
|
+
default:
|
|
55
|
+
// Exhaustive check: TypeScript will error if a new PromptKind is added but not handled
|
|
56
|
+
// The assertion below catches runtime cases that TypeScript can't detect
|
|
57
|
+
throw new Error(`Unhandled prompt kind: ${record.kind}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Parse and validate arguments against the prompt's argument definitions.
|
|
62
|
+
* @param args Arguments from the MCP request
|
|
63
|
+
* @returns Validated arguments
|
|
64
|
+
*/
|
|
65
|
+
parseArguments(args) {
|
|
66
|
+
const argDefs = this.metadata.arguments ?? [];
|
|
67
|
+
const result = {};
|
|
68
|
+
// Check required arguments
|
|
69
|
+
for (const argDef of argDefs) {
|
|
70
|
+
const value = args?.[argDef.name];
|
|
71
|
+
if (argDef.required && (value === undefined || value === null)) {
|
|
72
|
+
throw new Error(`Missing required argument: ${argDef.name}`);
|
|
73
|
+
}
|
|
74
|
+
if (value !== undefined) {
|
|
75
|
+
result[argDef.name] = value;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Include any additional arguments not in the definition
|
|
79
|
+
if (args) {
|
|
80
|
+
for (const [key, value] of Object.entries(args)) {
|
|
81
|
+
if (!(key in result)) {
|
|
82
|
+
result[key] = value;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Convert the raw prompt return value into an MCP GetPromptResult.
|
|
90
|
+
*/
|
|
91
|
+
parseOutput(raw) {
|
|
92
|
+
return (0, prompt_utils_1.buildParsedPromptResult)(raw, this.metadata);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Safe version of parseOutput that returns success/error instead of throwing.
|
|
96
|
+
*/
|
|
97
|
+
safeParseOutput(raw) {
|
|
98
|
+
try {
|
|
99
|
+
return { success: true, data: this.parseOutput(raw) };
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
return { success: false, error: error instanceof Error ? error : new Error(String(error)) };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.PromptInstance = PromptInstance;
|
|
107
|
+
/**
|
|
108
|
+
* Prompt context for function-decorated prompts.
|
|
109
|
+
*/
|
|
110
|
+
class FunctionPromptContext extends common_1.PromptContext {
|
|
111
|
+
record;
|
|
112
|
+
constructor(record, args) {
|
|
113
|
+
super(args);
|
|
114
|
+
this.record = record;
|
|
115
|
+
}
|
|
116
|
+
execute(args) {
|
|
117
|
+
return this.record.provide(args, this);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=prompt.instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.instance.js","sourceRoot":"","sources":["../../../src/prompt/prompt.instance.ts"],"names":[],"mappings":"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","sourcesContent":["// file: libs/sdk/src/prompt/prompt.instance.ts\n\nimport {\n EntryOwnerRef,\n PromptEntry,\n PromptGetExtra,\n ParsedPromptResult,\n PromptSafeTransformResult,\n PromptRecord,\n PromptKind,\n PromptContext,\n PromptCtorArgs,\n PromptMetadata,\n PromptFunctionTokenRecord,\n} from '../common';\nimport ProviderRegistry from '../provider/provider.registry';\nimport HookRegistry from '../hooks/hook.registry';\nimport { Scope } from '../scope';\nimport { normalizeHooksFromCls } from '../hooks/hooks.utils';\nimport { buildParsedPromptResult } from './prompt.utils';\nimport { GetPromptResult } from '@modelcontextprotocol/sdk/types.js';\n\nexport class PromptInstance extends PromptEntry {\n private readonly providers: ProviderRegistry;\n readonly scope: Scope;\n readonly hooks: HookRegistry;\n\n constructor(record: PromptRecord, providers: ProviderRegistry, owner: EntryOwnerRef) {\n super(record);\n this.owner = owner;\n this.providers = providers;\n this.name = record.metadata.name;\n this.fullName = this.owner.id + ':' + this.name;\n this.scope = this.providers.getActiveScope();\n this.hooks = this.scope.providers.getHooksRegistry();\n\n this.ready = this.initialize();\n }\n\n protected async initialize(): Promise<void> {\n // Register hooks for prompts:get-prompt, prompts:list-prompts flows\n const hooks = normalizeHooksFromCls(this.record.provide).filter(\n (hook) => hook.metadata.flow === 'prompts:get-prompt' || hook.metadata.flow === 'prompts:list-prompts',\n );\n if (hooks.length > 0) {\n await this.hooks.registerHooks(true, ...hooks);\n }\n }\n\n getMetadata(): PromptMetadata {\n return this.record.metadata;\n }\n\n /**\n * Create a prompt context (class or function wrapper).\n */\n override create(args: Record<string, string>, ctx: PromptGetExtra): PromptContext {\n const metadata = this.metadata;\n const providers = this.providers;\n const scope = this.providers.getActiveScope();\n const logger = scope.logger;\n const authInfo = ctx.authInfo;\n\n const promptCtorArgs: PromptCtorArgs = {\n metadata,\n args,\n providers,\n logger,\n authInfo,\n };\n\n const record = this.record;\n\n switch (record.kind) {\n case PromptKind.CLASS_TOKEN:\n return new (record.provide as unknown as new (args: PromptCtorArgs) => PromptContext)(promptCtorArgs);\n case PromptKind.FUNCTION:\n return new FunctionPromptContext(record as PromptFunctionTokenRecord, promptCtorArgs);\n default:\n // Exhaustive check: TypeScript will error if a new PromptKind is added but not handled\n // The assertion below catches runtime cases that TypeScript can't detect\n throw new Error(`Unhandled prompt kind: ${(record as { kind: string }).kind}`);\n }\n }\n\n /**\n * Parse and validate arguments against the prompt's argument definitions.\n * @param args Arguments from the MCP request\n * @returns Validated arguments\n */\n override parseArguments(args?: Record<string, string>): Record<string, string> {\n const argDefs = this.metadata.arguments ?? [];\n const result: Record<string, string> = {};\n\n // Check required arguments\n for (const argDef of argDefs) {\n const value = args?.[argDef.name];\n if (argDef.required && (value === undefined || value === null)) {\n throw new Error(`Missing required argument: ${argDef.name}`);\n }\n if (value !== undefined) {\n result[argDef.name] = value;\n }\n }\n\n // Include any additional arguments not in the definition\n if (args) {\n for (const [key, value] of Object.entries(args)) {\n if (!(key in result)) {\n result[key] = value;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Convert the raw prompt return value into an MCP GetPromptResult.\n */\n override parseOutput(raw: unknown): ParsedPromptResult {\n return buildParsedPromptResult(raw, this.metadata);\n }\n\n /**\n * Safe version of parseOutput that returns success/error instead of throwing.\n */\n override safeParseOutput(raw: unknown): PromptSafeTransformResult<ParsedPromptResult> {\n try {\n return { success: true, data: this.parseOutput(raw) };\n } catch (error: unknown) {\n return { success: false, error: error instanceof Error ? error : new Error(String(error)) };\n }\n }\n}\n\n/**\n * Prompt context for function-decorated prompts.\n */\nclass FunctionPromptContext extends PromptContext {\n constructor(private readonly record: PromptFunctionTokenRecord, args: PromptCtorArgs) {\n super(args);\n }\n\n execute(args: Record<string, string>): Promise<GetPromptResult> {\n return this.record.provide(args, this) as Promise<GetPromptResult>;\n }\n}\n"]}
|
|
@@ -1,16 +1,83 @@
|
|
|
1
|
+
import { EntryOwnerRef, PromptEntry, PromptRecord, PromptRegistryInterface, PromptType } from '../common';
|
|
2
|
+
import { PromptChangeEvent } from './prompt.events';
|
|
1
3
|
import ProviderRegistry from '../provider/provider.registry';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
import { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';
|
|
5
|
+
import { PromptInstance } from './prompt.instance';
|
|
6
|
+
import { PromptExportOptions, IndexedPrompt } from './prompt.types';
|
|
7
|
+
import { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';
|
|
8
|
+
export default class PromptRegistry extends RegistryAbstract<PromptInstance, // instances map holds PromptInstance
|
|
9
|
+
PromptRecord, PromptType[]> implements PromptRegistryInterface {
|
|
10
|
+
/** Who owns this registry (used for provenance). */
|
|
11
|
+
owner: EntryOwnerRef;
|
|
12
|
+
/** Prompts truly owned/constructed by THIS registry (with lineage applied) */
|
|
13
|
+
private localRows;
|
|
14
|
+
/** Adopted prompt rows from each child registry (references to the same instances) */
|
|
15
|
+
private adopted;
|
|
16
|
+
/** Children registries that we track */
|
|
17
|
+
private children;
|
|
18
|
+
private byQualifiedId;
|
|
19
|
+
private byName;
|
|
20
|
+
private byOwnerAndName;
|
|
21
|
+
private byOwner;
|
|
22
|
+
private version;
|
|
23
|
+
private emitter;
|
|
24
|
+
constructor(providers: ProviderRegistry, list: PromptType[], owner: EntryOwnerRef);
|
|
25
|
+
protected buildMap(list: PromptType[]): RegistryBuildMapResult<PromptRecord>;
|
|
26
|
+
protected buildGraph(): void;
|
|
12
27
|
protected initialize(): Promise<void>;
|
|
13
|
-
|
|
14
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Adopt prompts from a child registry. Parent runs after children are ready.
|
|
30
|
+
* We *reference* the child's prompt instances; no duplicates are created.
|
|
31
|
+
*/
|
|
32
|
+
adoptFromChild(child: PromptRegistry, _childOwner: EntryOwnerRef): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get all prompts
|
|
35
|
+
*/
|
|
36
|
+
getPrompts(includeHidden?: boolean): PromptEntry[];
|
|
37
|
+
/**
|
|
38
|
+
* Get inline prompts (local only)
|
|
39
|
+
*/
|
|
15
40
|
getInlinePrompts(): PromptEntry[];
|
|
41
|
+
/**
|
|
42
|
+
* Find a prompt by exact name match
|
|
43
|
+
*/
|
|
44
|
+
findByName(name: string): PromptInstance | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Find all prompts matching a name
|
|
47
|
+
*/
|
|
48
|
+
findAllByName(name: string): PromptInstance[];
|
|
49
|
+
/** Internal snapshot of effective indexed rows (locals + adopted). */
|
|
50
|
+
listAllIndexed(): IndexedPrompt[];
|
|
51
|
+
/** List all instances (locals + adopted). */
|
|
52
|
+
listAllInstances(): readonly PromptInstance[];
|
|
53
|
+
/** List instances by owner path (e.g. "app:Portal/plugin:Okta") */
|
|
54
|
+
listByOwner(ownerPath: string): readonly PromptInstance[];
|
|
55
|
+
private reindex;
|
|
56
|
+
/**
|
|
57
|
+
* Produce unique, MCP-valid exported names.
|
|
58
|
+
*/
|
|
59
|
+
exportResolvedNames(opts?: PromptExportOptions): Array<{
|
|
60
|
+
name: string;
|
|
61
|
+
instance: PromptInstance;
|
|
62
|
+
}>;
|
|
63
|
+
/** Lookup by the exported (resolved) name. */
|
|
64
|
+
getExported(name: string, opts?: PromptExportOptions): PromptInstance | undefined;
|
|
65
|
+
subscribe(opts: {
|
|
66
|
+
immediate?: boolean;
|
|
67
|
+
filter?: (i: PromptInstance) => boolean;
|
|
68
|
+
}, cb: (evt: PromptChangeEvent) => void): () => void;
|
|
69
|
+
private bump;
|
|
70
|
+
/** Build an IndexedPrompt row */
|
|
71
|
+
private makeRow;
|
|
72
|
+
/** Clone a child row and prepend lineage (with adjacent de-dup to avoid double prefixes). */
|
|
73
|
+
private relineage;
|
|
74
|
+
/** Best-effort provider id used for prefixing. */
|
|
75
|
+
private providerIdOf;
|
|
76
|
+
/** True if this registry (or adopted children) has any prompts. */
|
|
77
|
+
hasAny(): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Get the MCP capabilities for prompts.
|
|
80
|
+
* These are reported to clients during initialization.
|
|
81
|
+
*/
|
|
82
|
+
getCapabilities(): Partial<ServerCapabilities>;
|
|
16
83
|
}
|