@copilotkit/runtime 2.0.0-next.1 → 2.0.0-rc.1
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/LICENSE +21 -0
- package/README.md +135 -1
- package/dist/_virtual/_rolldown/runtime.cjs +29 -0
- package/dist/_virtual/_rolldown/runtime.mjs +18 -0
- package/dist/agent/converters/aisdk.cjs +355 -0
- package/dist/agent/converters/aisdk.cjs.map +1 -0
- package/dist/agent/converters/aisdk.d.cts +22 -0
- package/dist/agent/converters/aisdk.d.cts.map +1 -0
- package/dist/agent/converters/aisdk.d.mts +22 -0
- package/dist/agent/converters/aisdk.d.mts.map +1 -0
- package/dist/agent/converters/aisdk.mjs +351 -0
- package/dist/agent/converters/aisdk.mjs.map +1 -0
- package/dist/agent/converters/index.d.mts +2 -0
- package/dist/agent/converters/tanstack.cjs +374 -0
- package/dist/agent/converters/tanstack.cjs.map +1 -0
- package/dist/agent/converters/tanstack.d.cts +83 -0
- package/dist/agent/converters/tanstack.d.cts.map +1 -0
- package/dist/agent/converters/tanstack.d.mts +83 -0
- package/dist/agent/converters/tanstack.d.mts.map +1 -0
- package/dist/agent/converters/tanstack.mjs +372 -0
- package/dist/agent/converters/tanstack.mjs.map +1 -0
- package/dist/agent/converters/usage.cjs +68 -0
- package/dist/agent/converters/usage.cjs.map +1 -0
- package/dist/agent/converters/usage.d.cts +19 -0
- package/dist/agent/converters/usage.d.cts.map +1 -0
- package/dist/agent/converters/usage.d.mts +19 -0
- package/dist/agent/converters/usage.d.mts.map +1 -0
- package/dist/agent/converters/usage.mjs +62 -0
- package/dist/agent/converters/usage.mjs.map +1 -0
- package/dist/agent/index.cjs +1328 -0
- package/dist/agent/index.cjs.map +1 -0
- package/dist/agent/index.d.cts +467 -0
- package/dist/agent/index.d.cts.map +1 -0
- package/dist/agent/index.d.mts +468 -0
- package/dist/agent/index.d.mts.map +1 -0
- package/dist/agent/index.mjs +1318 -0
- package/dist/agent/index.mjs.map +1 -0
- package/dist/agent/learned-skills.cjs +76 -0
- package/dist/agent/learned-skills.cjs.map +1 -0
- package/dist/agent/learned-skills.d.cts +15 -0
- package/dist/agent/learned-skills.d.cts.map +1 -0
- package/dist/agent/learned-skills.d.mts +15 -0
- package/dist/agent/learned-skills.d.mts.map +1 -0
- package/dist/agent/learned-skills.mjs +74 -0
- package/dist/agent/learned-skills.mjs.map +1 -0
- package/dist/agent/mcp-tool-names.cjs +82 -0
- package/dist/agent/mcp-tool-names.cjs.map +1 -0
- package/dist/agent/mcp-tool-names.mjs +80 -0
- package/dist/agent/mcp-tool-names.mjs.map +1 -0
- package/dist/agent/state-delta.cjs +321 -0
- package/dist/agent/state-delta.cjs.map +1 -0
- package/dist/agent/state-delta.mjs +320 -0
- package/dist/agent/state-delta.mjs.map +1 -0
- package/dist/agent/url-download.cjs +503 -0
- package/dist/agent/url-download.cjs.map +1 -0
- package/dist/agent/url-download.d.cts +79 -0
- package/dist/agent/url-download.d.cts.map +1 -0
- package/dist/agent/url-download.d.mts +79 -0
- package/dist/agent/url-download.d.mts.map +1 -0
- package/dist/agent/url-download.mjs +500 -0
- package/dist/agent/url-download.mjs.map +1 -0
- package/dist/index.cjs +75 -0
- package/dist/index.d.cts +24 -0
- package/dist/index.d.mts +24 -0
- package/dist/index.mjs +17 -5598
- package/dist/internal/learned-skills.cjs +21 -0
- package/dist/internal/learned-skills.d.cts +9 -0
- package/dist/internal/learned-skills.d.mts +9 -0
- package/dist/internal/learned-skills.mjs +9 -0
- package/dist/node.cjs +7 -0
- package/dist/node.d.cts +4 -0
- package/dist/node.d.mts +4 -0
- package/dist/node.mjs +4 -0
- package/dist/runtime/core/channel-activation-config.cjs +87 -0
- package/dist/runtime/core/channel-activation-config.cjs.map +1 -0
- package/dist/runtime/core/channel-activation-config.d.cts +39 -0
- package/dist/runtime/core/channel-activation-config.d.cts.map +1 -0
- package/dist/runtime/core/channel-activation-config.d.mts +39 -0
- package/dist/runtime/core/channel-activation-config.d.mts.map +1 -0
- package/dist/runtime/core/channel-activation-config.mjs +85 -0
- package/dist/runtime/core/channel-activation-config.mjs.map +1 -0
- package/dist/runtime/core/channel-manager.cjs +973 -0
- package/dist/runtime/core/channel-manager.cjs.map +1 -0
- package/dist/runtime/core/channel-manager.d.cts +166 -0
- package/dist/runtime/core/channel-manager.d.cts.map +1 -0
- package/dist/runtime/core/channel-manager.d.mts +167 -0
- package/dist/runtime/core/channel-manager.d.mts.map +1 -0
- package/dist/runtime/core/channel-manager.mjs +972 -0
- package/dist/runtime/core/channel-manager.mjs.map +1 -0
- package/dist/runtime/core/debug-event-bus.cjs +57 -0
- package/dist/runtime/core/debug-event-bus.cjs.map +1 -0
- package/dist/runtime/core/debug-event-bus.d.cts +18 -0
- package/dist/runtime/core/debug-event-bus.d.cts.map +1 -0
- package/dist/runtime/core/debug-event-bus.d.mts +18 -0
- package/dist/runtime/core/debug-event-bus.d.mts.map +1 -0
- package/dist/runtime/core/debug-event-bus.mjs +55 -0
- package/dist/runtime/core/debug-event-bus.mjs.map +1 -0
- package/dist/runtime/core/fetch-cors.cjs +71 -0
- package/dist/runtime/core/fetch-cors.cjs.map +1 -0
- package/dist/runtime/core/fetch-cors.d.cts +19 -0
- package/dist/runtime/core/fetch-cors.d.cts.map +1 -0
- package/dist/runtime/core/fetch-cors.d.mts +19 -0
- package/dist/runtime/core/fetch-cors.d.mts.map +1 -0
- package/dist/runtime/core/fetch-cors.mjs +69 -0
- package/dist/runtime/core/fetch-cors.mjs.map +1 -0
- package/dist/runtime/core/fetch-handler.cjs +539 -0
- package/dist/runtime/core/fetch-handler.cjs.map +1 -0
- package/dist/runtime/core/fetch-handler.d.cts +99 -0
- package/dist/runtime/core/fetch-handler.d.cts.map +1 -0
- package/dist/runtime/core/fetch-handler.d.mts +99 -0
- package/dist/runtime/core/fetch-handler.d.mts.map +1 -0
- package/dist/runtime/core/fetch-handler.mjs +538 -0
- package/dist/runtime/core/fetch-handler.mjs.map +1 -0
- package/dist/runtime/core/fetch-router.cjs +141 -0
- package/dist/runtime/core/fetch-router.cjs.map +1 -0
- package/dist/runtime/core/fetch-router.mjs +140 -0
- package/dist/runtime/core/fetch-router.mjs.map +1 -0
- package/dist/runtime/core/hooks.cjs +28 -0
- package/dist/runtime/core/hooks.cjs.map +1 -0
- package/dist/runtime/core/hooks.d.cts +121 -0
- package/dist/runtime/core/hooks.d.cts.map +1 -0
- package/dist/runtime/core/hooks.d.mts +121 -0
- package/dist/runtime/core/hooks.d.mts.map +1 -0
- package/dist/runtime/core/hooks.mjs +24 -0
- package/dist/runtime/core/hooks.mjs.map +1 -0
- package/dist/runtime/core/learning.cjs +61 -0
- package/dist/runtime/core/learning.cjs.map +1 -0
- package/dist/runtime/core/learning.d.cts +61 -0
- package/dist/runtime/core/learning.d.cts.map +1 -0
- package/dist/runtime/core/learning.d.mts +61 -0
- package/dist/runtime/core/learning.d.mts.map +1 -0
- package/dist/runtime/core/learning.mjs +56 -0
- package/dist/runtime/core/learning.mjs.map +1 -0
- package/dist/runtime/core/logger.cjs +21 -0
- package/dist/runtime/core/logger.cjs.map +1 -0
- package/dist/runtime/core/logger.d.cts +12 -0
- package/dist/runtime/core/logger.d.cts.map +1 -0
- package/dist/runtime/core/logger.d.mts +12 -0
- package/dist/runtime/core/logger.d.mts.map +1 -0
- package/dist/runtime/core/logger.mjs +18 -0
- package/dist/runtime/core/logger.mjs.map +1 -0
- package/dist/runtime/core/middleware-sse-parser.cjs +149 -0
- package/dist/runtime/core/middleware-sse-parser.cjs.map +1 -0
- package/dist/runtime/core/middleware-sse-parser.d.cts +21 -0
- package/dist/runtime/core/middleware-sse-parser.d.cts.map +1 -0
- package/dist/runtime/core/middleware-sse-parser.d.mts +21 -0
- package/dist/runtime/core/middleware-sse-parser.d.mts.map +1 -0
- package/dist/runtime/core/middleware-sse-parser.mjs +148 -0
- package/dist/runtime/core/middleware-sse-parser.mjs.map +1 -0
- package/dist/runtime/core/middleware.cjs +34 -0
- package/dist/runtime/core/middleware.cjs.map +1 -0
- package/dist/runtime/core/middleware.d.cts +31 -0
- package/dist/runtime/core/middleware.d.cts.map +1 -0
- package/dist/runtime/core/middleware.d.mts +31 -0
- package/dist/runtime/core/middleware.d.mts.map +1 -0
- package/dist/runtime/core/middleware.mjs +32 -0
- package/dist/runtime/core/middleware.mjs.map +1 -0
- package/dist/runtime/core/package-info.cjs +9 -0
- package/dist/runtime/core/package-info.cjs.map +1 -0
- package/dist/runtime/core/package-info.mjs +7 -0
- package/dist/runtime/core/package-info.mjs.map +1 -0
- package/dist/runtime/core/runtime-error-reporter.cjs +21 -0
- package/dist/runtime/core/runtime-error-reporter.cjs.map +1 -0
- package/dist/runtime/core/runtime-error-reporter.mjs +18 -0
- package/dist/runtime/core/runtime-error-reporter.mjs.map +1 -0
- package/dist/runtime/core/runtime.cjs +256 -0
- package/dist/runtime/core/runtime.cjs.map +1 -0
- package/dist/runtime/core/runtime.d.cts +481 -0
- package/dist/runtime/core/runtime.d.cts.map +1 -0
- package/dist/runtime/core/runtime.d.mts +481 -0
- package/dist/runtime/core/runtime.d.mts.map +1 -0
- package/dist/runtime/core/runtime.mjs +249 -0
- package/dist/runtime/core/runtime.mjs.map +1 -0
- package/dist/runtime/endpoints/auto-start-channels.cjs +46 -0
- package/dist/runtime/endpoints/auto-start-channels.cjs.map +1 -0
- package/dist/runtime/endpoints/auto-start-channels.mjs +45 -0
- package/dist/runtime/endpoints/auto-start-channels.mjs.map +1 -0
- package/dist/runtime/endpoints/node-fetch-handler.cjs +75 -0
- package/dist/runtime/endpoints/node-fetch-handler.cjs.map +1 -0
- package/dist/runtime/endpoints/node-fetch-handler.d.cts +11 -0
- package/dist/runtime/endpoints/node-fetch-handler.d.cts.map +1 -0
- package/dist/runtime/endpoints/node-fetch-handler.d.mts +11 -0
- package/dist/runtime/endpoints/node-fetch-handler.d.mts.map +1 -0
- package/dist/runtime/endpoints/node-fetch-handler.mjs +73 -0
- package/dist/runtime/endpoints/node-fetch-handler.mjs.map +1 -0
- package/dist/runtime/endpoints/node.cjs +16 -0
- package/dist/runtime/endpoints/node.cjs.map +1 -0
- package/dist/runtime/endpoints/node.d.cts +104 -0
- package/dist/runtime/endpoints/node.d.cts.map +1 -0
- package/dist/runtime/endpoints/node.d.mts +104 -0
- package/dist/runtime/endpoints/node.d.mts.map +1 -0
- package/dist/runtime/endpoints/node.mjs +16 -0
- package/dist/runtime/endpoints/node.mjs.map +1 -0
- package/dist/runtime/endpoints/single-route-helpers.cjs +130 -0
- package/dist/runtime/endpoints/single-route-helpers.cjs.map +1 -0
- package/dist/runtime/endpoints/single-route-helpers.mjs +125 -0
- package/dist/runtime/endpoints/single-route-helpers.mjs.map +1 -0
- package/dist/runtime/generative-ui/generative-ui-middleware.cjs +393 -0
- package/dist/runtime/generative-ui/generative-ui-middleware.cjs.map +1 -0
- package/dist/runtime/generative-ui/generative-ui-middleware.d.cts +20 -0
- package/dist/runtime/generative-ui/generative-ui-middleware.d.cts.map +1 -0
- package/dist/runtime/generative-ui/generative-ui-middleware.d.mts +20 -0
- package/dist/runtime/generative-ui/generative-ui-middleware.d.mts.map +1 -0
- package/dist/runtime/generative-ui/generative-ui-middleware.mjs +392 -0
- package/dist/runtime/generative-ui/generative-ui-middleware.mjs.map +1 -0
- package/dist/runtime/generative-ui/index.d.cts +2 -0
- package/dist/runtime/generative-ui/index.d.mts +2 -0
- package/dist/runtime/generative-ui/surface-writer.cjs +85 -0
- package/dist/runtime/generative-ui/surface-writer.cjs.map +1 -0
- package/dist/runtime/generative-ui/surface-writer.d.cts +32 -0
- package/dist/runtime/generative-ui/surface-writer.d.cts.map +1 -0
- package/dist/runtime/generative-ui/surface-writer.d.mts +32 -0
- package/dist/runtime/generative-ui/surface-writer.d.mts.map +1 -0
- package/dist/runtime/generative-ui/surface-writer.mjs +84 -0
- package/dist/runtime/generative-ui/surface-writer.mjs.map +1 -0
- package/dist/runtime/handlers/get-runtime-info.cjs +140 -0
- package/dist/runtime/handlers/get-runtime-info.cjs.map +1 -0
- package/dist/runtime/handlers/get-runtime-info.mjs +140 -0
- package/dist/runtime/handlers/get-runtime-info.mjs.map +1 -0
- package/dist/runtime/handlers/handle-connect.cjs +62 -0
- package/dist/runtime/handlers/handle-connect.cjs.map +1 -0
- package/dist/runtime/handlers/handle-connect.mjs +62 -0
- package/dist/runtime/handlers/handle-connect.mjs.map +1 -0
- package/dist/runtime/handlers/handle-debug-events.cjs +33 -0
- package/dist/runtime/handlers/handle-debug-events.cjs.map +1 -0
- package/dist/runtime/handlers/handle-debug-events.mjs +33 -0
- package/dist/runtime/handlers/handle-debug-events.mjs.map +1 -0
- package/dist/runtime/handlers/handle-inspector-learning.cjs +56 -0
- package/dist/runtime/handlers/handle-inspector-learning.cjs.map +1 -0
- package/dist/runtime/handlers/handle-inspector-learning.mjs +55 -0
- package/dist/runtime/handlers/handle-inspector-learning.mjs.map +1 -0
- package/dist/runtime/handlers/handle-inspector-metadata.cjs +36 -0
- package/dist/runtime/handlers/handle-inspector-metadata.cjs.map +1 -0
- package/dist/runtime/handlers/handle-inspector-metadata.mjs +35 -0
- package/dist/runtime/handlers/handle-inspector-metadata.mjs.map +1 -0
- package/dist/runtime/handlers/handle-run.cjs +111 -0
- package/dist/runtime/handlers/handle-run.cjs.map +1 -0
- package/dist/runtime/handlers/handle-run.mjs +110 -0
- package/dist/runtime/handlers/handle-run.mjs.map +1 -0
- package/dist/runtime/handlers/handle-stop.cjs +102 -0
- package/dist/runtime/handlers/handle-stop.cjs.map +1 -0
- package/dist/runtime/handlers/handle-stop.mjs +101 -0
- package/dist/runtime/handlers/handle-stop.mjs.map +1 -0
- package/dist/runtime/handlers/handle-suggest.cjs +83 -0
- package/dist/runtime/handlers/handle-suggest.cjs.map +1 -0
- package/dist/runtime/handlers/handle-suggest.mjs +82 -0
- package/dist/runtime/handlers/handle-suggest.mjs.map +1 -0
- package/dist/runtime/handlers/handle-trajectory-connect.cjs +40 -0
- package/dist/runtime/handlers/handle-trajectory-connect.cjs.map +1 -0
- package/dist/runtime/handlers/handle-trajectory-connect.mjs +39 -0
- package/dist/runtime/handlers/handle-trajectory-connect.mjs.map +1 -0
- package/dist/runtime/handlers/handle-transcribe.cjs +112 -0
- package/dist/runtime/handlers/handle-transcribe.cjs.map +1 -0
- package/dist/runtime/handlers/handle-transcribe.mjs +111 -0
- package/dist/runtime/handlers/handle-transcribe.mjs.map +1 -0
- package/dist/runtime/handlers/header-utils.cjs +185 -0
- package/dist/runtime/handlers/header-utils.cjs.map +1 -0
- package/dist/runtime/handlers/header-utils.d.cts +53 -0
- package/dist/runtime/handlers/header-utils.d.cts.map +1 -0
- package/dist/runtime/handlers/header-utils.d.mts +53 -0
- package/dist/runtime/handlers/header-utils.d.mts.map +1 -0
- package/dist/runtime/handlers/header-utils.mjs +183 -0
- package/dist/runtime/handlers/header-utils.mjs.map +1 -0
- package/dist/runtime/handlers/intelligence/annotate.cjs +83 -0
- package/dist/runtime/handlers/intelligence/annotate.cjs.map +1 -0
- package/dist/runtime/handlers/intelligence/annotate.mjs +82 -0
- package/dist/runtime/handlers/intelligence/annotate.mjs.map +1 -0
- package/dist/runtime/handlers/intelligence/connect.cjs +68 -0
- package/dist/runtime/handlers/intelligence/connect.cjs.map +1 -0
- package/dist/runtime/handlers/intelligence/connect.mjs +68 -0
- package/dist/runtime/handlers/intelligence/connect.mjs.map +1 -0
- package/dist/runtime/handlers/intelligence/memories.cjs +260 -0
- package/dist/runtime/handlers/intelligence/memories.cjs.map +1 -0
- package/dist/runtime/handlers/intelligence/memories.mjs +254 -0
- package/dist/runtime/handlers/intelligence/memories.mjs.map +1 -0
- package/dist/runtime/handlers/intelligence/run.cjs +283 -0
- package/dist/runtime/handlers/intelligence/run.cjs.map +1 -0
- package/dist/runtime/handlers/intelligence/run.mjs +282 -0
- package/dist/runtime/handlers/intelligence/run.mjs.map +1 -0
- package/dist/runtime/handlers/intelligence/thread-names.cjs +172 -0
- package/dist/runtime/handlers/intelligence/thread-names.cjs.map +1 -0
- package/dist/runtime/handlers/intelligence/thread-names.mjs +171 -0
- package/dist/runtime/handlers/intelligence/thread-names.mjs.map +1 -0
- package/dist/runtime/handlers/intelligence/threads.cjs +399 -0
- package/dist/runtime/handlers/intelligence/threads.cjs.map +1 -0
- package/dist/runtime/handlers/intelligence/threads.mjs +390 -0
- package/dist/runtime/handlers/intelligence/threads.mjs.map +1 -0
- package/dist/runtime/handlers/shared/agent-utils.cjs +267 -0
- package/dist/runtime/handlers/shared/agent-utils.cjs.map +1 -0
- package/dist/runtime/handlers/shared/agent-utils.mjs +262 -0
- package/dist/runtime/handlers/shared/agent-utils.mjs.map +1 -0
- package/dist/runtime/handlers/shared/cloud-telemetry.cjs +30 -0
- package/dist/runtime/handlers/shared/cloud-telemetry.cjs.map +1 -0
- package/dist/runtime/handlers/shared/cloud-telemetry.mjs +29 -0
- package/dist/runtime/handlers/shared/cloud-telemetry.mjs.map +1 -0
- package/dist/runtime/handlers/shared/describe-endpoint.cjs +25 -0
- package/dist/runtime/handlers/shared/describe-endpoint.cjs.map +1 -0
- package/dist/runtime/handlers/shared/describe-endpoint.mjs +24 -0
- package/dist/runtime/handlers/shared/describe-endpoint.mjs.map +1 -0
- package/dist/runtime/handlers/shared/intelligence-utils.cjs +24 -0
- package/dist/runtime/handlers/shared/intelligence-utils.cjs.map +1 -0
- package/dist/runtime/handlers/shared/intelligence-utils.mjs +23 -0
- package/dist/runtime/handlers/shared/intelligence-utils.mjs.map +1 -0
- package/dist/runtime/handlers/shared/json-response.cjs +14 -0
- package/dist/runtime/handlers/shared/json-response.cjs.map +1 -0
- package/dist/runtime/handlers/shared/json-response.mjs +12 -0
- package/dist/runtime/handlers/shared/json-response.mjs.map +1 -0
- package/dist/runtime/handlers/shared/mcp-apps-servers.cjs +22 -0
- package/dist/runtime/handlers/shared/mcp-apps-servers.cjs.map +1 -0
- package/dist/runtime/handlers/shared/mcp-apps-servers.mjs +22 -0
- package/dist/runtime/handlers/shared/mcp-apps-servers.mjs.map +1 -0
- package/dist/runtime/handlers/shared/memory-policy.cjs +78 -0
- package/dist/runtime/handlers/shared/memory-policy.cjs.map +1 -0
- package/dist/runtime/handlers/shared/memory-policy.mjs +77 -0
- package/dist/runtime/handlers/shared/memory-policy.mjs.map +1 -0
- package/dist/runtime/handlers/shared/platform-error.cjs +39 -0
- package/dist/runtime/handlers/shared/platform-error.cjs.map +1 -0
- package/dist/runtime/handlers/shared/platform-error.mjs +39 -0
- package/dist/runtime/handlers/shared/platform-error.mjs.map +1 -0
- package/dist/runtime/handlers/shared/resolve-intelligence-user.cjs +50 -0
- package/dist/runtime/handlers/shared/resolve-intelligence-user.cjs.map +1 -0
- package/dist/runtime/handlers/shared/resolve-intelligence-user.mjs +49 -0
- package/dist/runtime/handlers/shared/resolve-intelligence-user.mjs.map +1 -0
- package/dist/runtime/handlers/shared/sse-keep-alive.cjs +68 -0
- package/dist/runtime/handlers/shared/sse-keep-alive.cjs.map +1 -0
- package/dist/runtime/handlers/shared/sse-keep-alive.mjs +66 -0
- package/dist/runtime/handlers/shared/sse-keep-alive.mjs.map +1 -0
- package/dist/runtime/handlers/shared/sse-response.cjs +237 -0
- package/dist/runtime/handlers/shared/sse-response.cjs.map +1 -0
- package/dist/runtime/handlers/shared/sse-response.mjs +236 -0
- package/dist/runtime/handlers/shared/sse-response.mjs.map +1 -0
- package/dist/runtime/handlers/shared/thread-access.cjs +137 -0
- package/dist/runtime/handlers/shared/thread-access.cjs.map +1 -0
- package/dist/runtime/handlers/shared/thread-access.d.cts +28 -0
- package/dist/runtime/handlers/shared/thread-access.d.cts.map +1 -0
- package/dist/runtime/handlers/shared/thread-access.d.mts +28 -0
- package/dist/runtime/handlers/shared/thread-access.d.mts.map +1 -0
- package/dist/runtime/handlers/shared/thread-access.mjs +132 -0
- package/dist/runtime/handlers/shared/thread-access.mjs.map +1 -0
- package/dist/runtime/handlers/sse/connect.cjs +23 -0
- package/dist/runtime/handlers/sse/connect.cjs.map +1 -0
- package/dist/runtime/handlers/sse/connect.mjs +23 -0
- package/dist/runtime/handlers/sse/connect.mjs.map +1 -0
- package/dist/runtime/handlers/sse/run.cjs +44 -0
- package/dist/runtime/handlers/sse/run.cjs.map +1 -0
- package/dist/runtime/handlers/sse/run.mjs +44 -0
- package/dist/runtime/handlers/sse/run.mjs.map +1 -0
- package/dist/runtime/index.d.cts +29 -0
- package/dist/runtime/index.d.cts.map +1 -0
- package/dist/runtime/index.d.mts +29 -0
- package/dist/runtime/index.d.mts.map +1 -0
- package/dist/runtime/intelligence-platform/client.cjs +1338 -0
- package/dist/runtime/intelligence-platform/client.cjs.map +1 -0
- package/dist/runtime/intelligence-platform/client.d.cts +824 -0
- package/dist/runtime/intelligence-platform/client.d.cts.map +1 -0
- package/dist/runtime/intelligence-platform/client.d.mts +824 -0
- package/dist/runtime/intelligence-platform/client.d.mts.map +1 -0
- package/dist/runtime/intelligence-platform/client.mjs +1334 -0
- package/dist/runtime/intelligence-platform/client.mjs.map +1 -0
- package/dist/runtime/intelligence-platform/experimental.d.cts +26 -0
- package/dist/runtime/intelligence-platform/experimental.d.cts.map +1 -0
- package/dist/runtime/intelligence-platform/experimental.d.mts +26 -0
- package/dist/runtime/intelligence-platform/experimental.d.mts.map +1 -0
- package/dist/runtime/intelligence-platform/index.d.cts +3 -0
- package/dist/runtime/intelligence-platform/index.d.mts +3 -0
- package/dist/runtime/intelligence-platform/learned-skills.cjs +95 -0
- package/dist/runtime/intelligence-platform/learned-skills.cjs.map +1 -0
- package/dist/runtime/intelligence-platform/learned-skills.d.cts +43 -0
- package/dist/runtime/intelligence-platform/learned-skills.d.cts.map +1 -0
- package/dist/runtime/intelligence-platform/learned-skills.d.mts +43 -0
- package/dist/runtime/intelligence-platform/learned-skills.d.mts.map +1 -0
- package/dist/runtime/intelligence-platform/learned-skills.mjs +92 -0
- package/dist/runtime/intelligence-platform/learned-skills.mjs.map +1 -0
- package/dist/runtime/intelligence-platform/learning-management.cjs +203 -0
- package/dist/runtime/intelligence-platform/learning-management.cjs.map +1 -0
- package/dist/runtime/intelligence-platform/learning-management.d.cts +111 -0
- package/dist/runtime/intelligence-platform/learning-management.d.cts.map +1 -0
- package/dist/runtime/intelligence-platform/learning-management.d.mts +111 -0
- package/dist/runtime/intelligence-platform/learning-management.d.mts.map +1 -0
- package/dist/runtime/intelligence-platform/learning-management.mjs +193 -0
- package/dist/runtime/intelligence-platform/learning-management.mjs.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/archive.cjs +131 -0
- package/dist/runtime/intelligence-platform/skill-registry/archive.cjs.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/archive.d.cts +10 -0
- package/dist/runtime/intelligence-platform/skill-registry/archive.d.cts.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/archive.d.mts +10 -0
- package/dist/runtime/intelligence-platform/skill-registry/archive.d.mts.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/archive.mjs +127 -0
- package/dist/runtime/intelligence-platform/skill-registry/archive.mjs.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/config.cjs +65 -0
- package/dist/runtime/intelligence-platform/skill-registry/config.cjs.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/config.d.cts +47 -0
- package/dist/runtime/intelligence-platform/skill-registry/config.d.cts.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/config.d.mts +47 -0
- package/dist/runtime/intelligence-platform/skill-registry/config.d.mts.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/config.mjs +65 -0
- package/dist/runtime/intelligence-platform/skill-registry/config.mjs.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/errors.cjs +10 -0
- package/dist/runtime/intelligence-platform/skill-registry/errors.cjs.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/errors.d.cts +7 -0
- package/dist/runtime/intelligence-platform/skill-registry/errors.d.cts.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/errors.d.mts +7 -0
- package/dist/runtime/intelligence-platform/skill-registry/errors.d.mts.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/errors.mjs +10 -0
- package/dist/runtime/intelligence-platform/skill-registry/errors.mjs.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/index.d.cts +7 -0
- package/dist/runtime/intelligence-platform/skill-registry/index.d.mts +7 -0
- package/dist/runtime/intelligence-platform/skill-registry/registry.cjs +247 -0
- package/dist/runtime/intelligence-platform/skill-registry/registry.cjs.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/registry.d.cts +36 -0
- package/dist/runtime/intelligence-platform/skill-registry/registry.d.cts.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/registry.d.mts +36 -0
- package/dist/runtime/intelligence-platform/skill-registry/registry.d.mts.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/registry.mjs +246 -0
- package/dist/runtime/intelligence-platform/skill-registry/registry.mjs.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/skill-content.cjs +41 -0
- package/dist/runtime/intelligence-platform/skill-registry/skill-content.cjs.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/skill-content.d.cts +12 -0
- package/dist/runtime/intelligence-platform/skill-registry/skill-content.d.cts.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/skill-content.d.mts +12 -0
- package/dist/runtime/intelligence-platform/skill-registry/skill-content.d.mts.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/skill-content.mjs +38 -0
- package/dist/runtime/intelligence-platform/skill-registry/skill-content.mjs.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/snapshot.cjs +92 -0
- package/dist/runtime/intelligence-platform/skill-registry/snapshot.cjs.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/snapshot.d.cts +27 -0
- package/dist/runtime/intelligence-platform/skill-registry/snapshot.d.cts.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/snapshot.d.mts +27 -0
- package/dist/runtime/intelligence-platform/skill-registry/snapshot.d.mts.map +1 -0
- package/dist/runtime/intelligence-platform/skill-registry/snapshot.mjs +91 -0
- package/dist/runtime/intelligence-platform/skill-registry/snapshot.mjs.map +1 -0
- package/dist/runtime/intelligence-platform/thread-lock-heartbeat.cjs +142 -0
- package/dist/runtime/intelligence-platform/thread-lock-heartbeat.cjs.map +1 -0
- package/dist/runtime/intelligence-platform/thread-lock-heartbeat.mjs +141 -0
- package/dist/runtime/intelligence-platform/thread-lock-heartbeat.mjs.map +1 -0
- package/dist/runtime/intelligence-platform/trajectories.cjs +95 -0
- package/dist/runtime/intelligence-platform/trajectories.cjs.map +1 -0
- package/dist/runtime/intelligence-platform/trajectories.d.cts +11 -0
- package/dist/runtime/intelligence-platform/trajectories.d.cts.map +1 -0
- package/dist/runtime/intelligence-platform/trajectories.d.mts +11 -0
- package/dist/runtime/intelligence-platform/trajectories.d.mts.map +1 -0
- package/dist/runtime/intelligence-platform/trajectories.mjs +91 -0
- package/dist/runtime/intelligence-platform/trajectories.mjs.map +1 -0
- package/dist/runtime/node.d.cts +2 -0
- package/dist/runtime/node.d.mts +2 -0
- package/dist/runtime/runner/agent-runner.cjs +82 -0
- package/dist/runtime/runner/agent-runner.cjs.map +1 -0
- package/dist/runtime/runner/agent-runner.d.cts +151 -0
- package/dist/runtime/runner/agent-runner.d.cts.map +1 -0
- package/dist/runtime/runner/agent-runner.d.mts +151 -0
- package/dist/runtime/runner/agent-runner.d.mts.map +1 -0
- package/dist/runtime/runner/agent-runner.mjs +73 -0
- package/dist/runtime/runner/agent-runner.mjs.map +1 -0
- package/dist/runtime/runner/in-memory.cjs +741 -0
- package/dist/runtime/runner/in-memory.cjs.map +1 -0
- package/dist/runtime/runner/in-memory.d.cts +427 -0
- package/dist/runtime/runner/in-memory.d.cts.map +1 -0
- package/dist/runtime/runner/in-memory.d.mts +427 -0
- package/dist/runtime/runner/in-memory.d.mts.map +1 -0
- package/dist/runtime/runner/in-memory.mjs +734 -0
- package/dist/runtime/runner/in-memory.mjs.map +1 -0
- package/dist/runtime/runner/index.d.cts +5 -0
- package/dist/runtime/runner/index.d.mts +5 -0
- package/dist/runtime/runner/index.mjs +6 -0
- package/dist/runtime/runner/intelligence.cjs +617 -0
- package/dist/runtime/runner/intelligence.cjs.map +1 -0
- package/dist/runtime/runner/intelligence.d.cts +104 -0
- package/dist/runtime/runner/intelligence.d.cts.map +1 -0
- package/dist/runtime/runner/intelligence.d.mts +104 -0
- package/dist/runtime/runner/intelligence.d.mts.map +1 -0
- package/dist/runtime/runner/intelligence.mjs +616 -0
- package/dist/runtime/runner/intelligence.mjs.map +1 -0
- package/dist/runtime/telemetry/disclosure.cjs +25 -0
- package/dist/runtime/telemetry/disclosure.cjs.map +1 -0
- package/dist/runtime/telemetry/disclosure.mjs +24 -0
- package/dist/runtime/telemetry/disclosure.mjs.map +1 -0
- package/dist/runtime/telemetry/events.d.cts +66 -0
- package/dist/runtime/telemetry/events.d.cts.map +1 -0
- package/dist/runtime/telemetry/events.d.mts +66 -0
- package/dist/runtime/telemetry/events.d.mts.map +1 -0
- package/dist/runtime/telemetry/instance-created.cjs +34 -0
- package/dist/runtime/telemetry/instance-created.cjs.map +1 -0
- package/dist/runtime/telemetry/instance-created.mjs +34 -0
- package/dist/runtime/telemetry/instance-created.mjs.map +1 -0
- package/dist/runtime/telemetry/telemetry-client.cjs +108 -0
- package/dist/runtime/telemetry/telemetry-client.cjs.map +1 -0
- package/dist/runtime/telemetry/telemetry-client.d.cts +10 -0
- package/dist/runtime/telemetry/telemetry-client.d.cts.map +1 -0
- package/dist/runtime/telemetry/telemetry-client.d.mts +10 -0
- package/dist/runtime/telemetry/telemetry-client.d.mts.map +1 -0
- package/dist/runtime/telemetry/telemetry-client.mjs +107 -0
- package/dist/runtime/telemetry/telemetry-client.mjs.map +1 -0
- package/dist/runtime/telemetry/telemetry-identity.cjs +12 -0
- package/dist/runtime/telemetry/telemetry-identity.cjs.map +1 -0
- package/dist/runtime/telemetry/telemetry-identity.mjs +11 -0
- package/dist/runtime/telemetry/telemetry-identity.mjs.map +1 -0
- package/dist/runtime/transcription-service/transcription-service.cjs +7 -0
- package/dist/runtime/transcription-service/transcription-service.cjs.map +1 -0
- package/dist/runtime/transcription-service/transcription-service.d.cts +14 -0
- package/dist/runtime/transcription-service/transcription-service.d.cts.map +1 -0
- package/dist/runtime/transcription-service/transcription-service.d.mts +14 -0
- package/dist/runtime/transcription-service/transcription-service.d.mts.map +1 -0
- package/dist/runtime/transcription-service/transcription-service.mjs +6 -0
- package/dist/runtime/transcription-service/transcription-service.mjs.map +1 -0
- package/package.json +104 -105
- package/.eslintrc.js +0 -7
- package/CHANGELOG.md +0 -2920
- package/__snapshots__/schema/schema.graphql +0 -371
- package/dist/index.d.ts +0 -1494
- package/dist/index.js +0 -5641
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/langgraph.d.ts +0 -284
- package/dist/langgraph.js +0 -211
- package/dist/langgraph.js.map +0 -1
- package/dist/langgraph.mjs +0 -206
- package/dist/langgraph.mjs.map +0 -1
- package/dist/v2/index.d.ts +0 -2
- package/dist/v2/index.js +0 -22
- package/dist/v2/index.js.map +0 -1
- package/dist/v2/index.mjs +0 -5
- package/dist/v2/index.mjs.map +0 -1
- package/jest.config.js +0 -10
- package/scripts/generate-gql-schema.ts +0 -13
- package/src/agents/langgraph/event-source.ts +0 -329
- package/src/agents/langgraph/events.ts +0 -377
- package/src/graphql/inputs/action.input.ts +0 -16
- package/src/graphql/inputs/agent-session.input.ts +0 -13
- package/src/graphql/inputs/agent-state.input.ts +0 -13
- package/src/graphql/inputs/cloud-guardrails.input.ts +0 -16
- package/src/graphql/inputs/cloud.input.ts +0 -8
- package/src/graphql/inputs/context-property.input.ts +0 -10
- package/src/graphql/inputs/copilot-context.input.ts +0 -10
- package/src/graphql/inputs/custom-property.input.ts +0 -15
- package/src/graphql/inputs/extensions.input.ts +0 -21
- package/src/graphql/inputs/forwarded-parameters.input.ts +0 -22
- package/src/graphql/inputs/frontend.input.ts +0 -14
- package/src/graphql/inputs/generate-copilot-response.input.ts +0 -59
- package/src/graphql/inputs/load-agent-state.input.ts +0 -10
- package/src/graphql/inputs/message.input.ts +0 -110
- package/src/graphql/inputs/meta-event.input.ts +0 -18
- package/src/graphql/message-conversion/agui-to-gql.test.ts +0 -1263
- package/src/graphql/message-conversion/agui-to-gql.ts +0 -333
- package/src/graphql/message-conversion/gql-to-agui.test.ts +0 -1580
- package/src/graphql/message-conversion/gql-to-agui.ts +0 -278
- package/src/graphql/message-conversion/index.ts +0 -2
- package/src/graphql/message-conversion/roundtrip-conversion.test.ts +0 -526
- package/src/graphql/resolvers/copilot.resolver.ts +0 -708
- package/src/graphql/resolvers/state.resolver.ts +0 -27
- package/src/graphql/types/agents-response.type.ts +0 -19
- package/src/graphql/types/base/index.ts +0 -10
- package/src/graphql/types/converted/index.ts +0 -176
- package/src/graphql/types/copilot-response.type.ts +0 -138
- package/src/graphql/types/enums.ts +0 -38
- package/src/graphql/types/extensions-response.type.ts +0 -23
- package/src/graphql/types/guardrails-result.type.ts +0 -20
- package/src/graphql/types/load-agent-state-response.type.ts +0 -17
- package/src/graphql/types/message-status.type.ts +0 -42
- package/src/graphql/types/meta-events.type.ts +0 -71
- package/src/graphql/types/response-status.type.ts +0 -66
- package/src/index.ts +0 -4
- package/src/langgraph.ts +0 -1
- package/src/lib/cloud/index.ts +0 -4
- package/src/lib/error-messages.ts +0 -200
- package/src/lib/index.ts +0 -52
- package/src/lib/integrations/index.ts +0 -6
- package/src/lib/integrations/nest/index.ts +0 -14
- package/src/lib/integrations/nextjs/app-router.ts +0 -38
- package/src/lib/integrations/nextjs/pages-router.ts +0 -39
- package/src/lib/integrations/node-express/index.ts +0 -14
- package/src/lib/integrations/node-http/index.ts +0 -143
- package/src/lib/integrations/node-http/request-handler.ts +0 -111
- package/src/lib/integrations/shared.ts +0 -161
- package/src/lib/logger.ts +0 -28
- package/src/lib/observability.ts +0 -160
- package/src/lib/runtime/__tests__/copilot-runtime-error.test.ts +0 -169
- package/src/lib/runtime/__tests__/mcp-tools-utils.test.ts +0 -464
- package/src/lib/runtime/agent-integrations/langgraph/agent.ts +0 -209
- package/src/lib/runtime/agent-integrations/langgraph/consts.ts +0 -34
- package/src/lib/runtime/agent-integrations/langgraph/index.ts +0 -2
- package/src/lib/runtime/copilot-runtime.ts +0 -710
- package/src/lib/runtime/mcp-tools-utils.ts +0 -254
- package/src/lib/runtime/retry-utils.ts +0 -96
- package/src/lib/runtime/telemetry-agent-runner.ts +0 -139
- package/src/lib/runtime/types.ts +0 -49
- package/src/lib/runtime/utils.ts +0 -87
- package/src/lib/streaming.ts +0 -202
- package/src/lib/telemetry-client.ts +0 -64
- package/src/service-adapters/anthropic/anthropic-adapter.ts +0 -452
- package/src/service-adapters/anthropic/utils.ts +0 -152
- package/src/service-adapters/bedrock/bedrock-adapter.ts +0 -73
- package/src/service-adapters/conversion.ts +0 -67
- package/src/service-adapters/empty/empty-adapter.ts +0 -38
- package/src/service-adapters/events.ts +0 -294
- package/src/service-adapters/experimental/ollama/ollama-adapter.ts +0 -84
- package/src/service-adapters/google/google-genai-adapter.test.ts +0 -104
- package/src/service-adapters/google/google-genai-adapter.ts +0 -88
- package/src/service-adapters/groq/groq-adapter.ts +0 -203
- package/src/service-adapters/index.ts +0 -18
- package/src/service-adapters/langchain/langchain-adapter.ts +0 -111
- package/src/service-adapters/langchain/langserve.ts +0 -88
- package/src/service-adapters/langchain/types.ts +0 -14
- package/src/service-adapters/langchain/utils.ts +0 -313
- package/src/service-adapters/openai/openai-adapter.ts +0 -283
- package/src/service-adapters/openai/openai-assistant-adapter.ts +0 -344
- package/src/service-adapters/openai/utils.ts +0 -199
- package/src/service-adapters/service-adapter.ts +0 -41
- package/src/service-adapters/shared/error-utils.ts +0 -61
- package/src/service-adapters/shared/index.ts +0 -1
- package/src/service-adapters/unify/unify-adapter.ts +0 -151
- package/src/utils/failed-response-status-reasons.ts +0 -70
- package/src/utils/index.ts +0 -1
- package/src/v2/index.ts +0 -3
- package/tests/global.d.ts +0 -13
- package/tests/service-adapters/anthropic/allowlist-approach.test.ts +0 -226
- package/tests/service-adapters/anthropic/anthropic-adapter.test.ts +0 -389
- package/tests/service-adapters/openai/allowlist-approach.test.ts +0 -238
- package/tests/service-adapters/openai/openai-adapter.test.ts +0 -301
- package/tests/setup.jest.ts +0 -21
- package/tests/tsconfig.json +0 -10
- package/tsconfig.json +0 -13
- package/tsup.config.ts +0 -20
- package/typedoc.json +0 -4
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/runtime/intelligence-platform/learning-management.ts
|
|
4
|
+
/** Wire contracts for the project-key Learning API; keep aligned with Intelligence. */
|
|
5
|
+
const learningContainerIdSchema = z.string().min(1).max(64).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/);
|
|
6
|
+
const learningContainerSchema = z.object({
|
|
7
|
+
id: learningContainerIdSchema,
|
|
8
|
+
name: z.string().min(1),
|
|
9
|
+
projectId: z.number().int().positive(),
|
|
10
|
+
promptContext: z.string().nullable(),
|
|
11
|
+
createdAt: z.string().datetime({ offset: true }),
|
|
12
|
+
updatedAt: z.string().datetime({ offset: true })
|
|
13
|
+
});
|
|
14
|
+
const learningContainerPageSchema = z.object({
|
|
15
|
+
containers: z.array(learningContainerSchema).max(500),
|
|
16
|
+
nextCursor: z.string().min(1).nullable()
|
|
17
|
+
});
|
|
18
|
+
/** Validates a stable identifier before constructing a request path. */
|
|
19
|
+
function learningContainerPath(containerId) {
|
|
20
|
+
return `/api/v1/learning/containers/${encodeURIComponent(learningContainerIdSchema.parse(containerId))}`;
|
|
21
|
+
}
|
|
22
|
+
/** Reads a bounded JSON response while the request's signal governs stream cancellation. */
|
|
23
|
+
async function readLearningJson(response, limit = 16 * 1024 * 1024, signal) {
|
|
24
|
+
if (!response.body) throw new Error("Missing Learning response body");
|
|
25
|
+
const reader = response.body.getReader();
|
|
26
|
+
const abort = () => {
|
|
27
|
+
reader.cancel(signal?.reason).catch(() => void 0);
|
|
28
|
+
};
|
|
29
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
30
|
+
if (signal?.aborted) abort();
|
|
31
|
+
const decoder = new TextDecoder();
|
|
32
|
+
let text = "";
|
|
33
|
+
let bytes = 0;
|
|
34
|
+
try {
|
|
35
|
+
while (true) {
|
|
36
|
+
signal?.throwIfAborted();
|
|
37
|
+
const next = await reader.read();
|
|
38
|
+
signal?.throwIfAborted();
|
|
39
|
+
if (next.done) break;
|
|
40
|
+
bytes += next.value.byteLength;
|
|
41
|
+
if (bytes > limit) {
|
|
42
|
+
await reader.cancel();
|
|
43
|
+
throw new Error("Learning response exceeds its size limit");
|
|
44
|
+
}
|
|
45
|
+
text += decoder.decode(next.value, { stream: true });
|
|
46
|
+
}
|
|
47
|
+
return JSON.parse(text + decoder.decode());
|
|
48
|
+
} finally {
|
|
49
|
+
signal?.removeEventListener("abort", abort);
|
|
50
|
+
reader.releaseLock();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const learningSha256Schema = z.string().regex(/^[a-f0-9]{64}$/u);
|
|
54
|
+
const learningUuidSchema = z.string().uuid();
|
|
55
|
+
const learningDateTimeSchema = z.string().datetime({ offset: true });
|
|
56
|
+
/** One immutable file in a proposed Skill candidate bundle. */
|
|
57
|
+
const learningSkillBundleFileSchema = z.object({
|
|
58
|
+
content: z.string(),
|
|
59
|
+
path: z.string().min(1).refine((path) => !path.startsWith("/") && !path.split("/").some((segment) => segment === ".."), "Bundle paths must be relative and may not traverse parent directories."),
|
|
60
|
+
sha256: learningSha256Schema
|
|
61
|
+
});
|
|
62
|
+
/** Complete Skill files attached to one review candidate. */
|
|
63
|
+
const learningSkillBundleSchema = z.object({
|
|
64
|
+
files: z.array(learningSkillBundleFileSchema).min(1),
|
|
65
|
+
schemaVersion: z.literal(1)
|
|
66
|
+
}).superRefine(({ files }, context) => {
|
|
67
|
+
const paths = /* @__PURE__ */ new Set();
|
|
68
|
+
for (const file of files) {
|
|
69
|
+
if (paths.has(file.path)) context.addIssue({
|
|
70
|
+
code: "custom",
|
|
71
|
+
message: `Duplicate bundle path: ${file.path}`,
|
|
72
|
+
path: ["files"]
|
|
73
|
+
});
|
|
74
|
+
paths.add(file.path);
|
|
75
|
+
}
|
|
76
|
+
if (!paths.has("SKILL.md")) context.addIssue({
|
|
77
|
+
code: "custom",
|
|
78
|
+
message: "A Skill bundle must contain SKILL.md.",
|
|
79
|
+
path: ["files"]
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
/** Review state and summary returned for one proposed Skill change. */
|
|
83
|
+
const learningCandidateSchema = z.object({
|
|
84
|
+
bundleSha256: learningSha256Schema,
|
|
85
|
+
createdAt: learningDateTimeSchema,
|
|
86
|
+
description: z.string().min(1),
|
|
87
|
+
id: learningUuidSchema,
|
|
88
|
+
operation: z.enum([
|
|
89
|
+
"add",
|
|
90
|
+
"update",
|
|
91
|
+
"remove"
|
|
92
|
+
]),
|
|
93
|
+
publishedRegistryRevision: z.number().int().positive().nullable(),
|
|
94
|
+
publishedSkillId: learningUuidSchema.nullable(),
|
|
95
|
+
reason: z.string().min(1),
|
|
96
|
+
registryBaseRevision: z.number().int().nonnegative(),
|
|
97
|
+
reviewedAt: learningDateTimeSchema.nullable(),
|
|
98
|
+
runId: learningUuidSchema,
|
|
99
|
+
status: z.enum([
|
|
100
|
+
"pending_review",
|
|
101
|
+
"approved",
|
|
102
|
+
"rejected"
|
|
103
|
+
]),
|
|
104
|
+
subjectSha256: learningSha256Schema,
|
|
105
|
+
targetSkillId: learningUuidSchema.nullable(),
|
|
106
|
+
targetSkillRevision: z.number().int().positive().nullable(),
|
|
107
|
+
title: z.string().min(1)
|
|
108
|
+
});
|
|
109
|
+
/** Full proposed Skill change, including evidence and every bundle file. */
|
|
110
|
+
const learningCandidateDetailSchema = learningCandidateSchema.extend({
|
|
111
|
+
bundle: learningSkillBundleSchema,
|
|
112
|
+
supportingInsights: z.array(z.object({
|
|
113
|
+
alias: z.string().min(1),
|
|
114
|
+
id: learningUuidSchema,
|
|
115
|
+
impact: z.string().min(1),
|
|
116
|
+
statement: z.string().min(1)
|
|
117
|
+
}))
|
|
118
|
+
});
|
|
119
|
+
/** Result returned after a human or agent reviews a Skill candidate. */
|
|
120
|
+
const learningCandidateReviewSchema = z.object({
|
|
121
|
+
candidateId: learningUuidSchema,
|
|
122
|
+
operation: z.enum([
|
|
123
|
+
"add",
|
|
124
|
+
"update",
|
|
125
|
+
"remove"
|
|
126
|
+
]),
|
|
127
|
+
publishedRegistryRevision: z.number().int().positive().nullable(),
|
|
128
|
+
publishedSkillId: learningUuidSchema.nullable(),
|
|
129
|
+
status: z.enum(["approved", "rejected"])
|
|
130
|
+
});
|
|
131
|
+
const learningRunSchema = z.object({
|
|
132
|
+
id: z.string().uuid(),
|
|
133
|
+
learningContainerId: learningContainerIdSchema,
|
|
134
|
+
projectId: z.number().int().positive(),
|
|
135
|
+
status: z.enum([
|
|
136
|
+
"queued",
|
|
137
|
+
"freezing",
|
|
138
|
+
"batching",
|
|
139
|
+
"reducing",
|
|
140
|
+
"finalizing",
|
|
141
|
+
"succeeded",
|
|
142
|
+
"failed"
|
|
143
|
+
]),
|
|
144
|
+
triggerSource: z.enum(["automatic", "manual"]),
|
|
145
|
+
attemptCount: z.number().int().nonnegative(),
|
|
146
|
+
candidateCount: z.number().int().nonnegative().nullable(),
|
|
147
|
+
insightCount: z.number().int().nonnegative().nullable(),
|
|
148
|
+
evidenceThreadCount: z.number().int().nonnegative().nullable().optional(),
|
|
149
|
+
createdAt: learningDateTimeSchema,
|
|
150
|
+
updatedAt: learningDateTimeSchema,
|
|
151
|
+
startedAt: learningDateTimeSchema.nullable(),
|
|
152
|
+
completedAt: learningDateTimeSchema.nullable(),
|
|
153
|
+
failureCode: z.string().nullable(),
|
|
154
|
+
kubernetesJobName: z.string().nullable()
|
|
155
|
+
});
|
|
156
|
+
const unavailableSchema = z.enum(["snapshot-missing", "snapshot-unreadable"]).nullable();
|
|
157
|
+
const learningInsightEvidenceSchema = z.union([z.object({
|
|
158
|
+
cited: z.array(z.object({
|
|
159
|
+
id: z.string(),
|
|
160
|
+
content: z.string(),
|
|
161
|
+
role: z.enum([
|
|
162
|
+
"assistant",
|
|
163
|
+
"tool",
|
|
164
|
+
"user"
|
|
165
|
+
])
|
|
166
|
+
})),
|
|
167
|
+
messageCount: z.number().int().nonnegative(),
|
|
168
|
+
threadId: z.string(),
|
|
169
|
+
threadName: z.string().nullable(),
|
|
170
|
+
threadPresent: z.boolean(),
|
|
171
|
+
unavailable: unavailableSchema
|
|
172
|
+
}), z.object({
|
|
173
|
+
kind: z.literal("trajectory"),
|
|
174
|
+
trajectoryId: z.string().uuid(),
|
|
175
|
+
trajectoryPresent: z.boolean(),
|
|
176
|
+
eventCount: z.number().int().nonnegative(),
|
|
177
|
+
events: z.array(z.object({
|
|
178
|
+
seq: z.number().int().nonnegative(),
|
|
179
|
+
name: z.string(),
|
|
180
|
+
offsetMs: z.number(),
|
|
181
|
+
value: z.unknown(),
|
|
182
|
+
eventId: z.string().nullable()
|
|
183
|
+
})),
|
|
184
|
+
unavailable: unavailableSchema
|
|
185
|
+
})]);
|
|
186
|
+
/** Validates object IDs independently from container IDs; neither may alter the path. */
|
|
187
|
+
function learningObjectId(id) {
|
|
188
|
+
return z.string().uuid().parse(id);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
//#endregion
|
|
192
|
+
export { learningCandidateDetailSchema, learningCandidateReviewSchema, learningCandidateSchema, learningContainerPageSchema, learningContainerPath, learningContainerSchema, learningInsightEvidenceSchema, learningObjectId, learningRunSchema, readLearningJson };
|
|
193
|
+
//# sourceMappingURL=learning-management.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning-management.mjs","names":[],"sources":["../../../src/runtime/intelligence-platform/learning-management.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/** Wire contracts for the project-key Learning API; keep aligned with Intelligence. */\nexport const learningContainerIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/);\nexport const learningContainerSchema = z.object({\n id: learningContainerIdSchema,\n name: z.string().min(1),\n projectId: z.number().int().positive(),\n promptContext: z.string().nullable(),\n createdAt: z.string().datetime({ offset: true }),\n updatedAt: z.string().datetime({ offset: true }),\n});\nexport const learningContainerPageSchema = z.object({\n containers: z.array(learningContainerSchema).max(500),\n nextCursor: z.string().min(1).nullable(),\n});\n/** Explicit wire types preserve required/null fields in declarations emitted with strictNullChecks disabled. */\nexport interface LearningContainer {\n id: string;\n name: string;\n projectId: number;\n promptContext: string | null;\n createdAt: string;\n updatedAt: string;\n}\nexport interface LearningContainerPage {\n containers: LearningContainer[];\n nextCursor: string | null;\n}\nexport interface LearningRequestOptions {\n readonly signal?: AbortSignal;\n}\nexport interface LearningContainerRequest extends LearningRequestOptions {\n readonly containerId: string;\n}\n\n/** Validates a stable identifier before constructing a request path. */\nexport function learningContainerPath(containerId: string): string {\n return `/api/v1/learning/containers/${encodeURIComponent(learningContainerIdSchema.parse(containerId))}`;\n}\n\n/** Reads a bounded JSON response while the request's signal governs stream cancellation. */\nexport async function readLearningJson(\n response: Response,\n limit = 16 * 1024 * 1024,\n signal?: AbortSignal,\n): Promise<unknown> {\n if (!response.body) throw new Error(\"Missing Learning response body\");\n const reader = response.body.getReader();\n const abort = () => {\n void reader.cancel(signal?.reason).catch(() => undefined);\n };\n signal?.addEventListener(\"abort\", abort, { once: true });\n if (signal?.aborted) abort();\n const decoder = new TextDecoder();\n let text = \"\";\n let bytes = 0;\n try {\n while (true) {\n signal?.throwIfAborted();\n const next = await reader.read();\n signal?.throwIfAborted();\n if (next.done) break;\n bytes += next.value.byteLength;\n if (bytes > limit) {\n await reader.cancel();\n throw new Error(\"Learning response exceeds its size limit\");\n }\n text += decoder.decode(next.value, { stream: true });\n }\n return JSON.parse(text + decoder.decode());\n } finally {\n signal?.removeEventListener(\"abort\", abort);\n reader.releaseLock();\n }\n}\n\nconst learningSha256Schema = z.string().regex(/^[a-f0-9]{64}$/u);\nconst learningUuidSchema = z.string().uuid();\nconst learningDateTimeSchema = z.string().datetime({ offset: true });\n\n/** One immutable file in a proposed Skill candidate bundle. */\nexport const learningSkillBundleFileSchema = z.object({\n content: z.string(),\n path: z\n .string()\n .min(1)\n .refine(\n (path) =>\n !path.startsWith(\"/\") &&\n !path.split(\"/\").some((segment) => segment === \"..\"),\n \"Bundle paths must be relative and may not traverse parent directories.\",\n ),\n sha256: learningSha256Schema,\n});\n\n/** Complete Skill files attached to one review candidate. */\nexport const learningSkillBundleSchema = z\n .object({\n files: z.array(learningSkillBundleFileSchema).min(1),\n schemaVersion: z.literal(1),\n })\n\n .superRefine(({ files }, context) => {\n const paths = new Set<string>();\n for (const file of files) {\n if (paths.has(file.path)) {\n context.addIssue({\n code: \"custom\",\n message: `Duplicate bundle path: ${file.path}`,\n path: [\"files\"],\n });\n }\n paths.add(file.path);\n }\n if (!paths.has(\"SKILL.md\")) {\n context.addIssue({\n code: \"custom\",\n message: \"A Skill bundle must contain SKILL.md.\",\n path: [\"files\"],\n });\n }\n });\n\n/** Review state and summary returned for one proposed Skill change. */\nexport const learningCandidateSchema = z.object({\n bundleSha256: learningSha256Schema,\n createdAt: learningDateTimeSchema,\n description: z.string().min(1),\n id: learningUuidSchema,\n operation: z.enum([\"add\", \"update\", \"remove\"]),\n publishedRegistryRevision: z.number().int().positive().nullable(),\n publishedSkillId: learningUuidSchema.nullable(),\n reason: z.string().min(1),\n registryBaseRevision: z.number().int().nonnegative(),\n reviewedAt: learningDateTimeSchema.nullable(),\n runId: learningUuidSchema,\n status: z.enum([\"pending_review\", \"approved\", \"rejected\"]),\n subjectSha256: learningSha256Schema,\n targetSkillId: learningUuidSchema.nullable(),\n targetSkillRevision: z.number().int().positive().nullable(),\n title: z.string().min(1),\n});\n\n/** Full proposed Skill change, including evidence and every bundle file. */\nexport const learningCandidateDetailSchema = learningCandidateSchema.extend({\n bundle: learningSkillBundleSchema,\n supportingInsights: z.array(\n z.object({\n alias: z.string().min(1),\n id: learningUuidSchema,\n impact: z.string().min(1),\n statement: z.string().min(1),\n }),\n ),\n});\n\n/** Result returned after a human or agent reviews a Skill candidate. */\nexport const learningCandidateReviewSchema = z.object({\n candidateId: learningUuidSchema,\n operation: z.enum([\"add\", \"update\", \"remove\"]),\n publishedRegistryRevision: z.number().int().positive().nullable(),\n publishedSkillId: learningUuidSchema.nullable(),\n status: z.enum([\"approved\", \"rejected\"]),\n});\n\nexport interface LearningCandidate {\n id: string;\n bundleSha256: string;\n createdAt: string;\n description: string;\n operation: \"add\" | \"update\" | \"remove\";\n publishedRegistryRevision: number | null;\n publishedSkillId: string | null;\n reason: string;\n registryBaseRevision: number;\n reviewedAt: string | null;\n runId: string;\n status: \"pending_review\" | \"approved\" | \"rejected\";\n subjectSha256: string;\n targetSkillId: string | null;\n targetSkillRevision: number | null;\n title: string;\n}\nexport interface LearningCandidateDetail extends LearningCandidate {\n bundle: {\n schemaVersion: 1;\n files: Array<{ path: string; content: string; sha256: string }>;\n };\n supportingInsights: Array<{\n alias: string;\n id: string;\n impact: string;\n statement: string;\n }>;\n}\nexport interface LearningCandidateReview {\n candidateId: string;\n operation: \"add\" | \"update\" | \"remove\";\n publishedRegistryRevision: number | null;\n publishedSkillId: string | null;\n status: \"approved\" | \"rejected\";\n}\nexport interface LearningCandidateRequest extends LearningContainerRequest {\n readonly candidateId: string;\n}\n\nexport const learningRunSchema = z.object({\n id: z.string().uuid(),\n learningContainerId: learningContainerIdSchema,\n projectId: z.number().int().positive(),\n status: z.enum([\n \"queued\",\n \"freezing\",\n \"batching\",\n \"reducing\",\n \"finalizing\",\n \"succeeded\",\n \"failed\",\n ]),\n triggerSource: z.enum([\"automatic\", \"manual\"]),\n attemptCount: z.number().int().nonnegative(),\n candidateCount: z.number().int().nonnegative().nullable(),\n insightCount: z.number().int().nonnegative().nullable(),\n evidenceThreadCount: z.number().int().nonnegative().nullable().optional(),\n createdAt: learningDateTimeSchema,\n updatedAt: learningDateTimeSchema,\n startedAt: learningDateTimeSchema.nullable(),\n completedAt: learningDateTimeSchema.nullable(),\n failureCode: z.string().nullable(),\n kubernetesJobName: z.string().nullable(),\n});\nexport interface LearningRun {\n id: string;\n learningContainerId: string;\n projectId: number;\n status:\n | \"queued\"\n | \"freezing\"\n | \"batching\"\n | \"reducing\"\n | \"finalizing\"\n | \"succeeded\"\n | \"failed\";\n triggerSource: \"automatic\" | \"manual\";\n attemptCount: number;\n candidateCount: number | null;\n insightCount: number | null;\n evidenceThreadCount?: number | null;\n createdAt: string;\n updatedAt: string;\n startedAt: string | null;\n completedAt: string | null;\n failureCode: string | null;\n kubernetesJobName: string | null;\n}\nconst unavailableSchema = z\n .enum([\"snapshot-missing\", \"snapshot-unreadable\"])\n .nullable();\nexport const learningInsightEvidenceSchema = z.union([\n z.object({\n cited: z.array(\n z.object({\n id: z.string(),\n content: z.string(),\n role: z.enum([\"assistant\", \"tool\", \"user\"]),\n }),\n ),\n messageCount: z.number().int().nonnegative(),\n threadId: z.string(),\n threadName: z.string().nullable(),\n threadPresent: z.boolean(),\n unavailable: unavailableSchema,\n }),\n z.object({\n kind: z.literal(\"trajectory\"),\n trajectoryId: z.string().uuid(),\n trajectoryPresent: z.boolean(),\n eventCount: z.number().int().nonnegative(),\n events: z.array(\n z.object({\n seq: z.number().int().nonnegative(),\n name: z.string(),\n offsetMs: z.number(),\n value: z.unknown(),\n eventId: z.string().nullable(),\n }),\n ),\n unavailable: unavailableSchema,\n }),\n]);\nexport type LearningInsightEvidence =\n | {\n cited: Array<{\n id: string;\n content: string;\n role: \"assistant\" | \"tool\" | \"user\";\n }>;\n messageCount: number;\n threadId: string;\n threadName: string | null;\n threadPresent: boolean;\n unavailable: \"snapshot-missing\" | \"snapshot-unreadable\" | null;\n }\n | {\n kind: \"trajectory\";\n trajectoryId: string;\n trajectoryPresent: boolean;\n eventCount: number;\n events: Array<{\n seq: number;\n name: string;\n offsetMs: number;\n value?: unknown;\n eventId: string | null;\n }>;\n unavailable: \"snapshot-missing\" | \"snapshot-unreadable\" | null;\n };\n\n/** Validates object IDs independently from container IDs; neither may alter the path. */\nexport function learningObjectId(id: string): string {\n return z.string().uuid().parse(id);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
2
|
+
const require_errors = require('./errors.cjs');
|
|
3
|
+
let yauzl = require("yauzl");
|
|
4
|
+
|
|
5
|
+
//#region src/runtime/intelligence-platform/skill-registry/archive.ts
|
|
6
|
+
/** Internal corruption bounds, including manifest and directory entries. */
|
|
7
|
+
const MAX_ARCHIVE_ENTRIES = 1e3;
|
|
8
|
+
const MAX_SNAPSHOT_BYTES = 32 * 1024 * 1024;
|
|
9
|
+
function safeRelativePath(path) {
|
|
10
|
+
return path.length > 0 && !/[\\\x00-\x1f\x7f]/.test(path) && !/^[a-z]:/i.test(path) && path.split("/").every((part) => part !== "" && part !== "." && part !== "..");
|
|
11
|
+
}
|
|
12
|
+
/** Decode only the listed ZIP namespace. No filesystem is involved. */
|
|
13
|
+
function readArchive(bytes, signal) {
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
let archive;
|
|
16
|
+
let stream;
|
|
17
|
+
let settled = false;
|
|
18
|
+
const finish = (error) => {
|
|
19
|
+
if (settled) return;
|
|
20
|
+
settled = true;
|
|
21
|
+
signal?.removeEventListener("abort", abort);
|
|
22
|
+
stream?.destroy();
|
|
23
|
+
archive?.close();
|
|
24
|
+
if (error !== void 0) reject(error);
|
|
25
|
+
else resolve(files);
|
|
26
|
+
};
|
|
27
|
+
const abort = () => finish(signal?.reason ?? require_errors.invalidSnapshot());
|
|
28
|
+
const files = /* @__PURE__ */ new Map();
|
|
29
|
+
const names = /* @__PURE__ */ new Set();
|
|
30
|
+
let decodedBytes = 0;
|
|
31
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
32
|
+
if (signal?.aborted) {
|
|
33
|
+
abort();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
(0, yauzl.fromBuffer)(bytes, {
|
|
37
|
+
lazyEntries: true,
|
|
38
|
+
decodeStrings: false,
|
|
39
|
+
validateEntrySizes: true,
|
|
40
|
+
autoClose: false
|
|
41
|
+
}, (error, zip) => {
|
|
42
|
+
if (error) {
|
|
43
|
+
finish(require_errors.invalidSnapshot(error));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
archive = zip;
|
|
47
|
+
if (settled) {
|
|
48
|
+
zip.close();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
zip.on("error", (cause) => finish(require_errors.invalidSnapshot(cause)));
|
|
52
|
+
zip.on("end", () => finish());
|
|
53
|
+
if (zip.entryCount > MAX_ARCHIVE_ENTRIES) {
|
|
54
|
+
finish(require_errors.invalidSnapshot());
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
zip.on("entry", (entry) => {
|
|
58
|
+
try {
|
|
59
|
+
const rawName = entry.fileName;
|
|
60
|
+
if (!Buffer.isBuffer(rawName)) throw require_errors.invalidSnapshot();
|
|
61
|
+
const name = new TextDecoder("utf-8", {
|
|
62
|
+
fatal: true,
|
|
63
|
+
ignoreBOM: true
|
|
64
|
+
}).decode(rawName);
|
|
65
|
+
const directory = name.endsWith("/");
|
|
66
|
+
if (!safeRelativePath(directory ? name.slice(0, -1) : name) || names.has(name)) throw require_errors.invalidSnapshot();
|
|
67
|
+
names.add(name);
|
|
68
|
+
const fileType = entry.externalFileAttributes >>> 16 & 61440;
|
|
69
|
+
if (fileType !== 0 && fileType !== (directory ? 16384 : 32768)) throw require_errors.invalidSnapshot();
|
|
70
|
+
if (entry.isEncrypted() || ![0, 8].includes(entry.compressionMethod)) throw require_errors.invalidSnapshot();
|
|
71
|
+
if (!Number.isSafeInteger(entry.uncompressedSize) || entry.uncompressedSize < 0) throw require_errors.invalidSnapshot();
|
|
72
|
+
decodedBytes += entry.uncompressedSize;
|
|
73
|
+
if (decodedBytes > MAX_SNAPSHOT_BYTES || directory && entry.uncompressedSize !== 0) throw require_errors.invalidSnapshot();
|
|
74
|
+
const local = entry.relativeOffsetOfLocalHeader;
|
|
75
|
+
if (local < 0 || local + 30 > bytes.length || bytes.readUInt32LE(local) !== 67324752) throw require_errors.invalidSnapshot();
|
|
76
|
+
if (bytes.readUInt16LE(local + 6) !== entry.generalPurposeBitFlag || bytes.readUInt16LE(local + 8) !== entry.compressionMethod) throw require_errors.invalidSnapshot();
|
|
77
|
+
const localNameLength = bytes.readUInt16LE(local + 26);
|
|
78
|
+
const localExtraLength = bytes.readUInt16LE(local + 28);
|
|
79
|
+
if (local + 30 + localNameLength + localExtraLength + entry.compressedSize > bytes.length || !bytes.subarray(local + 30, local + 30 + localNameLength).equals(rawName)) throw require_errors.invalidSnapshot();
|
|
80
|
+
if (!(entry.generalPurposeBitFlag & 8) && (bytes.readUInt32LE(local + 18) !== entry.compressedSize || bytes.readUInt32LE(local + 22) !== entry.uncompressedSize)) throw require_errors.invalidSnapshot();
|
|
81
|
+
if (directory) {
|
|
82
|
+
zip.readEntry();
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
zip.openReadStream(entry, (readError, readStream) => {
|
|
86
|
+
if (readError) {
|
|
87
|
+
finish(require_errors.invalidSnapshot(readError));
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
stream = readStream;
|
|
91
|
+
if (settled) {
|
|
92
|
+
readStream.destroy();
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const chunks = [];
|
|
96
|
+
let size = 0;
|
|
97
|
+
readStream.on("error", (cause) => finish(require_errors.invalidSnapshot(cause)));
|
|
98
|
+
readStream.on("data", (chunk) => {
|
|
99
|
+
size += chunk.length;
|
|
100
|
+
if (size > entry.uncompressedSize || size > MAX_SNAPSHOT_BYTES) {
|
|
101
|
+
finish(require_errors.invalidSnapshot());
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
chunks.push(chunk);
|
|
105
|
+
});
|
|
106
|
+
readStream.on("end", () => {
|
|
107
|
+
if (settled) return;
|
|
108
|
+
if (size !== entry.uncompressedSize) {
|
|
109
|
+
finish(require_errors.invalidSnapshot());
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
files.set(name, Buffer.concat(chunks, size));
|
|
113
|
+
stream = void 0;
|
|
114
|
+
zip.readEntry();
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
} catch (cause) {
|
|
118
|
+
finish(require_errors.invalidSnapshot(cause));
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
zip.readEntry();
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
//#endregion
|
|
127
|
+
exports.MAX_ARCHIVE_ENTRIES = MAX_ARCHIVE_ENTRIES;
|
|
128
|
+
exports.MAX_SNAPSHOT_BYTES = MAX_SNAPSHOT_BYTES;
|
|
129
|
+
exports.readArchive = readArchive;
|
|
130
|
+
exports.safeRelativePath = safeRelativePath;
|
|
131
|
+
//# sourceMappingURL=archive.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.cjs","names":["invalidSnapshot"],"sources":["../../../../src/runtime/intelligence-platform/skill-registry/archive.ts"],"sourcesContent":["import { fromBuffer } from \"yauzl\";\nimport type { Entry, ZipFile } from \"yauzl\";\nimport type { Readable } from \"node:stream\";\nimport { invalidSnapshot } from \"./errors\";\n\n/** Internal corruption bounds, including manifest and directory entries. */\nexport const MAX_ARCHIVE_ENTRIES = 1_000;\nexport const MAX_SNAPSHOT_BYTES = 32 * 1024 * 1024;\n\nexport function safeRelativePath(path: string): boolean {\n return (\n path.length > 0 &&\n // Reject control bytes in archive paths, including NUL and DEL.\n // eslint-disable-next-line no-control-regex\n !/[\\\\\\x00-\\x1f\\x7f]/.test(path) &&\n !/^[a-z]:/i.test(path) &&\n path\n .split(\"/\")\n .every((part) => part !== \"\" && part !== \".\" && part !== \"..\")\n );\n}\n\n/** Decode only the listed ZIP namespace. No filesystem is involved. */\nexport function readArchive(\n bytes: Buffer,\n signal?: AbortSignal,\n): Promise<Map<string, Buffer>> {\n return new Promise((resolve, reject) => {\n let archive: ZipFile | undefined;\n let stream: Readable | undefined;\n let settled = false;\n const finish = (error?: unknown) => {\n if (settled) return;\n settled = true;\n signal?.removeEventListener(\"abort\", abort);\n stream?.destroy();\n archive?.close();\n if (error !== undefined) reject(error);\n else resolve(files);\n };\n const abort = () => finish(signal?.reason ?? invalidSnapshot());\n const files = new Map<string, Buffer>();\n const names = new Set<string>();\n let decodedBytes = 0;\n signal?.addEventListener(\"abort\", abort, { once: true });\n if (signal?.aborted) {\n abort();\n return;\n }\n fromBuffer(\n bytes,\n {\n lazyEntries: true,\n decodeStrings: false,\n validateEntrySizes: true,\n autoClose: false,\n },\n (error, zip) => {\n if (error) {\n finish(invalidSnapshot(error));\n return;\n }\n archive = zip;\n if (settled) {\n zip.close();\n return;\n }\n zip.on(\"error\", (cause: unknown) => finish(invalidSnapshot(cause)));\n zip.on(\"end\", () => finish());\n if (zip.entryCount > MAX_ARCHIVE_ENTRIES) {\n finish(invalidSnapshot());\n return;\n }\n zip.on(\"entry\", (entry: Entry) => {\n try {\n // decodeStrings:false preserves raw UTF-8 names instead of normalizing\n // backslashes or consulting alternate Unicode-path extra fields.\n const rawName: unknown = entry.fileName;\n if (!Buffer.isBuffer(rawName)) throw invalidSnapshot();\n const name = new TextDecoder(\"utf-8\", {\n fatal: true,\n ignoreBOM: true,\n }).decode(rawName);\n const directory = name.endsWith(\"/\");\n if (\n !safeRelativePath(directory ? name.slice(0, -1) : name) ||\n names.has(name)\n )\n throw invalidSnapshot();\n names.add(name);\n const fileType = (entry.externalFileAttributes >>> 16) & 0o170000;\n if (\n fileType !== 0 &&\n fileType !== (directory ? 0o040000 : 0o100000)\n )\n throw invalidSnapshot();\n if (\n entry.isEncrypted() ||\n ![0, 8].includes(entry.compressionMethod)\n )\n throw invalidSnapshot();\n if (\n !Number.isSafeInteger(entry.uncompressedSize) ||\n entry.uncompressedSize < 0\n )\n throw invalidSnapshot();\n decodedBytes += entry.uncompressedSize;\n if (\n decodedBytes > MAX_SNAPSHOT_BYTES ||\n (directory && entry.uncompressedSize !== 0)\n )\n throw invalidSnapshot();\n // Require the central directory and the local entry to name the same\n // bytes. ZIP data descriptors may leave local sizes unset.\n const local = entry.relativeOffsetOfLocalHeader;\n if (\n local < 0 ||\n local + 30 > bytes.length ||\n bytes.readUInt32LE(local) !== 0x04034b50\n )\n throw invalidSnapshot();\n if (\n bytes.readUInt16LE(local + 6) !== entry.generalPurposeBitFlag ||\n bytes.readUInt16LE(local + 8) !== entry.compressionMethod\n )\n throw invalidSnapshot();\n const localNameLength = bytes.readUInt16LE(local + 26);\n const localExtraLength = bytes.readUInt16LE(local + 28);\n const dataStart = local + 30 + localNameLength + localExtraLength;\n if (\n dataStart + entry.compressedSize > bytes.length ||\n !bytes\n .subarray(local + 30, local + 30 + localNameLength)\n .equals(rawName)\n )\n throw invalidSnapshot();\n if (\n !(entry.generalPurposeBitFlag & 8) &&\n (bytes.readUInt32LE(local + 18) !== entry.compressedSize ||\n bytes.readUInt32LE(local + 22) !== entry.uncompressedSize)\n )\n throw invalidSnapshot();\n if (directory) {\n zip.readEntry();\n return;\n }\n zip.openReadStream(entry, (readError, readStream) => {\n if (readError) {\n finish(invalidSnapshot(readError));\n return;\n }\n stream = readStream;\n if (settled) {\n readStream.destroy();\n return;\n }\n const chunks: Buffer[] = [];\n let size = 0;\n readStream.on(\"error\", (cause: unknown) =>\n finish(invalidSnapshot(cause)),\n );\n readStream.on(\"data\", (chunk: Buffer) => {\n size += chunk.length;\n if (\n size > entry.uncompressedSize ||\n size > MAX_SNAPSHOT_BYTES\n ) {\n finish(invalidSnapshot());\n return;\n }\n chunks.push(chunk);\n });\n readStream.on(\"end\", () => {\n if (settled) return;\n if (size !== entry.uncompressedSize) {\n finish(invalidSnapshot());\n return;\n }\n files.set(name, Buffer.concat(chunks, size));\n stream = undefined;\n zip.readEntry();\n });\n });\n } catch (cause) {\n finish(invalidSnapshot(cause));\n }\n });\n zip.readEntry();\n },\n );\n });\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/runtime/intelligence-platform/skill-registry/archive.d.ts
|
|
2
|
+
/** Internal corruption bounds, including manifest and directory entries. */
|
|
3
|
+
declare const MAX_ARCHIVE_ENTRIES = 1000;
|
|
4
|
+
declare const MAX_SNAPSHOT_BYTES: number;
|
|
5
|
+
declare function safeRelativePath(path: string): boolean;
|
|
6
|
+
/** Decode only the listed ZIP namespace. No filesystem is involved. */
|
|
7
|
+
declare function readArchive(bytes: Buffer, signal?: AbortSignal): Promise<Map<string, Buffer>>;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { MAX_ARCHIVE_ENTRIES, MAX_SNAPSHOT_BYTES, readArchive, safeRelativePath };
|
|
10
|
+
//# sourceMappingURL=archive.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.d.cts","names":[],"sources":["../../../../src/runtime/intelligence-platform/skill-registry/archive.ts"],"mappings":";;cAMa,mBAAA;AAAA,cACA,kBAAA;AAAA,iBAEG,gBAAA,CAAiB,IAAA;;iBAcjB,WAAA,CACd,KAAA,EAAO,MAAA,EACP,MAAA,GAAS,WAAA,GACR,OAAA,CAAQ,GAAA,SAAY,MAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/runtime/intelligence-platform/skill-registry/archive.d.ts
|
|
2
|
+
/** Internal corruption bounds, including manifest and directory entries. */
|
|
3
|
+
declare const MAX_ARCHIVE_ENTRIES = 1000;
|
|
4
|
+
declare const MAX_SNAPSHOT_BYTES: number;
|
|
5
|
+
declare function safeRelativePath(path: string): boolean;
|
|
6
|
+
/** Decode only the listed ZIP namespace. No filesystem is involved. */
|
|
7
|
+
declare function readArchive(bytes: Buffer, signal?: AbortSignal): Promise<Map<string, Buffer>>;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { MAX_ARCHIVE_ENTRIES, MAX_SNAPSHOT_BYTES, readArchive, safeRelativePath };
|
|
10
|
+
//# sourceMappingURL=archive.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.d.mts","names":[],"sources":["../../../../src/runtime/intelligence-platform/skill-registry/archive.ts"],"mappings":";;cAMa,mBAAA;AAAA,cACA,kBAAA;AAAA,iBAEG,gBAAA,CAAiB,IAAA;;iBAcjB,WAAA,CACd,KAAA,EAAO,MAAA,EACP,MAAA,GAAS,WAAA,GACR,OAAA,CAAQ,GAAA,SAAY,MAAA"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { invalidSnapshot } from "./errors.mjs";
|
|
2
|
+
import { fromBuffer } from "yauzl";
|
|
3
|
+
|
|
4
|
+
//#region src/runtime/intelligence-platform/skill-registry/archive.ts
|
|
5
|
+
/** Internal corruption bounds, including manifest and directory entries. */
|
|
6
|
+
const MAX_ARCHIVE_ENTRIES = 1e3;
|
|
7
|
+
const MAX_SNAPSHOT_BYTES = 32 * 1024 * 1024;
|
|
8
|
+
function safeRelativePath(path) {
|
|
9
|
+
return path.length > 0 && !/[\\\x00-\x1f\x7f]/.test(path) && !/^[a-z]:/i.test(path) && path.split("/").every((part) => part !== "" && part !== "." && part !== "..");
|
|
10
|
+
}
|
|
11
|
+
/** Decode only the listed ZIP namespace. No filesystem is involved. */
|
|
12
|
+
function readArchive(bytes, signal) {
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
let archive;
|
|
15
|
+
let stream;
|
|
16
|
+
let settled = false;
|
|
17
|
+
const finish = (error) => {
|
|
18
|
+
if (settled) return;
|
|
19
|
+
settled = true;
|
|
20
|
+
signal?.removeEventListener("abort", abort);
|
|
21
|
+
stream?.destroy();
|
|
22
|
+
archive?.close();
|
|
23
|
+
if (error !== void 0) reject(error);
|
|
24
|
+
else resolve(files);
|
|
25
|
+
};
|
|
26
|
+
const abort = () => finish(signal?.reason ?? invalidSnapshot());
|
|
27
|
+
const files = /* @__PURE__ */ new Map();
|
|
28
|
+
const names = /* @__PURE__ */ new Set();
|
|
29
|
+
let decodedBytes = 0;
|
|
30
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
31
|
+
if (signal?.aborted) {
|
|
32
|
+
abort();
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
fromBuffer(bytes, {
|
|
36
|
+
lazyEntries: true,
|
|
37
|
+
decodeStrings: false,
|
|
38
|
+
validateEntrySizes: true,
|
|
39
|
+
autoClose: false
|
|
40
|
+
}, (error, zip) => {
|
|
41
|
+
if (error) {
|
|
42
|
+
finish(invalidSnapshot(error));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
archive = zip;
|
|
46
|
+
if (settled) {
|
|
47
|
+
zip.close();
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
zip.on("error", (cause) => finish(invalidSnapshot(cause)));
|
|
51
|
+
zip.on("end", () => finish());
|
|
52
|
+
if (zip.entryCount > MAX_ARCHIVE_ENTRIES) {
|
|
53
|
+
finish(invalidSnapshot());
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
zip.on("entry", (entry) => {
|
|
57
|
+
try {
|
|
58
|
+
const rawName = entry.fileName;
|
|
59
|
+
if (!Buffer.isBuffer(rawName)) throw invalidSnapshot();
|
|
60
|
+
const name = new TextDecoder("utf-8", {
|
|
61
|
+
fatal: true,
|
|
62
|
+
ignoreBOM: true
|
|
63
|
+
}).decode(rawName);
|
|
64
|
+
const directory = name.endsWith("/");
|
|
65
|
+
if (!safeRelativePath(directory ? name.slice(0, -1) : name) || names.has(name)) throw invalidSnapshot();
|
|
66
|
+
names.add(name);
|
|
67
|
+
const fileType = entry.externalFileAttributes >>> 16 & 61440;
|
|
68
|
+
if (fileType !== 0 && fileType !== (directory ? 16384 : 32768)) throw invalidSnapshot();
|
|
69
|
+
if (entry.isEncrypted() || ![0, 8].includes(entry.compressionMethod)) throw invalidSnapshot();
|
|
70
|
+
if (!Number.isSafeInteger(entry.uncompressedSize) || entry.uncompressedSize < 0) throw invalidSnapshot();
|
|
71
|
+
decodedBytes += entry.uncompressedSize;
|
|
72
|
+
if (decodedBytes > MAX_SNAPSHOT_BYTES || directory && entry.uncompressedSize !== 0) throw invalidSnapshot();
|
|
73
|
+
const local = entry.relativeOffsetOfLocalHeader;
|
|
74
|
+
if (local < 0 || local + 30 > bytes.length || bytes.readUInt32LE(local) !== 67324752) throw invalidSnapshot();
|
|
75
|
+
if (bytes.readUInt16LE(local + 6) !== entry.generalPurposeBitFlag || bytes.readUInt16LE(local + 8) !== entry.compressionMethod) throw invalidSnapshot();
|
|
76
|
+
const localNameLength = bytes.readUInt16LE(local + 26);
|
|
77
|
+
const localExtraLength = bytes.readUInt16LE(local + 28);
|
|
78
|
+
if (local + 30 + localNameLength + localExtraLength + entry.compressedSize > bytes.length || !bytes.subarray(local + 30, local + 30 + localNameLength).equals(rawName)) throw invalidSnapshot();
|
|
79
|
+
if (!(entry.generalPurposeBitFlag & 8) && (bytes.readUInt32LE(local + 18) !== entry.compressedSize || bytes.readUInt32LE(local + 22) !== entry.uncompressedSize)) throw invalidSnapshot();
|
|
80
|
+
if (directory) {
|
|
81
|
+
zip.readEntry();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
zip.openReadStream(entry, (readError, readStream) => {
|
|
85
|
+
if (readError) {
|
|
86
|
+
finish(invalidSnapshot(readError));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
stream = readStream;
|
|
90
|
+
if (settled) {
|
|
91
|
+
readStream.destroy();
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const chunks = [];
|
|
95
|
+
let size = 0;
|
|
96
|
+
readStream.on("error", (cause) => finish(invalidSnapshot(cause)));
|
|
97
|
+
readStream.on("data", (chunk) => {
|
|
98
|
+
size += chunk.length;
|
|
99
|
+
if (size > entry.uncompressedSize || size > MAX_SNAPSHOT_BYTES) {
|
|
100
|
+
finish(invalidSnapshot());
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
chunks.push(chunk);
|
|
104
|
+
});
|
|
105
|
+
readStream.on("end", () => {
|
|
106
|
+
if (settled) return;
|
|
107
|
+
if (size !== entry.uncompressedSize) {
|
|
108
|
+
finish(invalidSnapshot());
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
files.set(name, Buffer.concat(chunks, size));
|
|
112
|
+
stream = void 0;
|
|
113
|
+
zip.readEntry();
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
} catch (cause) {
|
|
117
|
+
finish(invalidSnapshot(cause));
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
zip.readEntry();
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
//#endregion
|
|
126
|
+
export { MAX_ARCHIVE_ENTRIES, MAX_SNAPSHOT_BYTES, readArchive, safeRelativePath };
|
|
127
|
+
//# sourceMappingURL=archive.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.mjs","names":[],"sources":["../../../../src/runtime/intelligence-platform/skill-registry/archive.ts"],"sourcesContent":["import { fromBuffer } from \"yauzl\";\nimport type { Entry, ZipFile } from \"yauzl\";\nimport type { Readable } from \"node:stream\";\nimport { invalidSnapshot } from \"./errors\";\n\n/** Internal corruption bounds, including manifest and directory entries. */\nexport const MAX_ARCHIVE_ENTRIES = 1_000;\nexport const MAX_SNAPSHOT_BYTES = 32 * 1024 * 1024;\n\nexport function safeRelativePath(path: string): boolean {\n return (\n path.length > 0 &&\n // Reject control bytes in archive paths, including NUL and DEL.\n // eslint-disable-next-line no-control-regex\n !/[\\\\\\x00-\\x1f\\x7f]/.test(path) &&\n !/^[a-z]:/i.test(path) &&\n path\n .split(\"/\")\n .every((part) => part !== \"\" && part !== \".\" && part !== \"..\")\n );\n}\n\n/** Decode only the listed ZIP namespace. No filesystem is involved. */\nexport function readArchive(\n bytes: Buffer,\n signal?: AbortSignal,\n): Promise<Map<string, Buffer>> {\n return new Promise((resolve, reject) => {\n let archive: ZipFile | undefined;\n let stream: Readable | undefined;\n let settled = false;\n const finish = (error?: unknown) => {\n if (settled) return;\n settled = true;\n signal?.removeEventListener(\"abort\", abort);\n stream?.destroy();\n archive?.close();\n if (error !== undefined) reject(error);\n else resolve(files);\n };\n const abort = () => finish(signal?.reason ?? invalidSnapshot());\n const files = new Map<string, Buffer>();\n const names = new Set<string>();\n let decodedBytes = 0;\n signal?.addEventListener(\"abort\", abort, { once: true });\n if (signal?.aborted) {\n abort();\n return;\n }\n fromBuffer(\n bytes,\n {\n lazyEntries: true,\n decodeStrings: false,\n validateEntrySizes: true,\n autoClose: false,\n },\n (error, zip) => {\n if (error) {\n finish(invalidSnapshot(error));\n return;\n }\n archive = zip;\n if (settled) {\n zip.close();\n return;\n }\n zip.on(\"error\", (cause: unknown) => finish(invalidSnapshot(cause)));\n zip.on(\"end\", () => finish());\n if (zip.entryCount > MAX_ARCHIVE_ENTRIES) {\n finish(invalidSnapshot());\n return;\n }\n zip.on(\"entry\", (entry: Entry) => {\n try {\n // decodeStrings:false preserves raw UTF-8 names instead of normalizing\n // backslashes or consulting alternate Unicode-path extra fields.\n const rawName: unknown = entry.fileName;\n if (!Buffer.isBuffer(rawName)) throw invalidSnapshot();\n const name = new TextDecoder(\"utf-8\", {\n fatal: true,\n ignoreBOM: true,\n }).decode(rawName);\n const directory = name.endsWith(\"/\");\n if (\n !safeRelativePath(directory ? name.slice(0, -1) : name) ||\n names.has(name)\n )\n throw invalidSnapshot();\n names.add(name);\n const fileType = (entry.externalFileAttributes >>> 16) & 0o170000;\n if (\n fileType !== 0 &&\n fileType !== (directory ? 0o040000 : 0o100000)\n )\n throw invalidSnapshot();\n if (\n entry.isEncrypted() ||\n ![0, 8].includes(entry.compressionMethod)\n )\n throw invalidSnapshot();\n if (\n !Number.isSafeInteger(entry.uncompressedSize) ||\n entry.uncompressedSize < 0\n )\n throw invalidSnapshot();\n decodedBytes += entry.uncompressedSize;\n if (\n decodedBytes > MAX_SNAPSHOT_BYTES ||\n (directory && entry.uncompressedSize !== 0)\n )\n throw invalidSnapshot();\n // Require the central directory and the local entry to name the same\n // bytes. ZIP data descriptors may leave local sizes unset.\n const local = entry.relativeOffsetOfLocalHeader;\n if (\n local < 0 ||\n local + 30 > bytes.length ||\n bytes.readUInt32LE(local) !== 0x04034b50\n )\n throw invalidSnapshot();\n if (\n bytes.readUInt16LE(local + 6) !== entry.generalPurposeBitFlag ||\n bytes.readUInt16LE(local + 8) !== entry.compressionMethod\n )\n throw invalidSnapshot();\n const localNameLength = bytes.readUInt16LE(local + 26);\n const localExtraLength = bytes.readUInt16LE(local + 28);\n const dataStart = local + 30 + localNameLength + localExtraLength;\n if (\n dataStart + entry.compressedSize > bytes.length ||\n !bytes\n .subarray(local + 30, local + 30 + localNameLength)\n .equals(rawName)\n )\n throw invalidSnapshot();\n if (\n !(entry.generalPurposeBitFlag & 8) &&\n (bytes.readUInt32LE(local + 18) !== entry.compressedSize ||\n bytes.readUInt32LE(local + 22) !== entry.uncompressedSize)\n )\n throw invalidSnapshot();\n if (directory) {\n zip.readEntry();\n return;\n }\n zip.openReadStream(entry, (readError, readStream) => {\n if (readError) {\n finish(invalidSnapshot(readError));\n return;\n }\n stream = readStream;\n if (settled) {\n readStream.destroy();\n return;\n }\n const chunks: Buffer[] = [];\n let size = 0;\n readStream.on(\"error\", (cause: unknown) =>\n finish(invalidSnapshot(cause)),\n );\n readStream.on(\"data\", (chunk: Buffer) => {\n size += chunk.length;\n if (\n size > entry.uncompressedSize ||\n size > MAX_SNAPSHOT_BYTES\n ) {\n finish(invalidSnapshot());\n return;\n }\n chunks.push(chunk);\n });\n readStream.on(\"end\", () => {\n if (settled) return;\n if (size !== entry.uncompressedSize) {\n finish(invalidSnapshot());\n return;\n }\n files.set(name, Buffer.concat(chunks, size));\n stream = undefined;\n zip.readEntry();\n });\n });\n } catch (cause) {\n finish(invalidSnapshot(cause));\n }\n });\n zip.readEntry();\n },\n );\n });\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
const require_learned_skills = require('../learned-skills.cjs');
|
|
2
|
+
const require_client = require('../client.cjs');
|
|
3
|
+
|
|
4
|
+
//#region src/runtime/intelligence-platform/skill-registry/config.ts
|
|
5
|
+
/** Resolve once. Never retain the options object, environment, or a second key. */
|
|
6
|
+
function resolveRegistryConfig(options = {}, environment = process.env) {
|
|
7
|
+
try {
|
|
8
|
+
const multiple = options.containers !== void 0;
|
|
9
|
+
if (multiple && (options.containerId !== void 0 || options.revision !== void 0)) throw new require_learned_skills.LearnedSkillsError("INVALID_CONFIG", false);
|
|
10
|
+
const containerId = multiple ? void 0 : options.containerId ?? environment.CPK_INTELLIGENCE_LEARNING_CONTAINER_ID;
|
|
11
|
+
const revision = multiple ? void 0 : options.revision ?? environment.CPK_INTELLIGENCE_SKILLS_REVISION;
|
|
12
|
+
let containers;
|
|
13
|
+
if (multiple) {
|
|
14
|
+
if (!Array.isArray(options.containers) || options.containers.length === 0 || options.containers.length > 50) throw new require_learned_skills.LearnedSkillsError("INVALID_CONFIG", false);
|
|
15
|
+
const seen = /* @__PURE__ */ new Set();
|
|
16
|
+
containers = Object.freeze(options.containers.map((source) => {
|
|
17
|
+
if (!source || typeof source.id !== "string" || !source.id.trim() || /[\u0000-\u001f\u007f]/.test(source.id) || seen.has(source.id) || source.revision !== void 0 && (typeof source.revision !== "string" || !source.revision.trim())) throw new require_learned_skills.LearnedSkillsError("INVALID_CONFIG", false);
|
|
18
|
+
encodeURIComponent(source.id);
|
|
19
|
+
seen.add(source.id);
|
|
20
|
+
return Object.freeze({
|
|
21
|
+
id: source.id,
|
|
22
|
+
...source.revision !== void 0 ? { revision: source.revision } : {}
|
|
23
|
+
});
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
const freshnessWindowMs = options.freshnessWindowMs ?? 5e3;
|
|
27
|
+
const requestTimeoutMs = options.requestTimeoutMs ?? 5e3;
|
|
28
|
+
const debug = options.debug ?? false;
|
|
29
|
+
if (!multiple && (typeof containerId !== "string" || !containerId.trim()) || revision !== void 0 && (typeof revision !== "string" || revision.length === 0) || !Number.isSafeInteger(freshnessWindowMs) || freshnessWindowMs < 0 || !Number.isSafeInteger(requestTimeoutMs) || requestTimeoutMs < 1 || requestTimeoutMs > 2147483647 || typeof debug !== "boolean") throw new require_learned_skills.LearnedSkillsError("INVALID_CONFIG", false);
|
|
30
|
+
let client = options.client;
|
|
31
|
+
if (client !== void 0) {
|
|
32
|
+
if (!client || typeof (multiple ? client.getLearnedSkillsSnapshots : client.getLearnedSkillsSnapshot) !== "function") throw new require_learned_skills.LearnedSkillsError("INVALID_CONFIG", false);
|
|
33
|
+
} else {
|
|
34
|
+
const apiKey = options.apiKey ?? environment.CPK_INTELLIGENCE_API_KEY;
|
|
35
|
+
const apiUrl = options.apiUrl ?? environment.INTELLIGENCE_API_URL;
|
|
36
|
+
if (typeof apiKey !== "string" || !apiKey.trim()) throw new require_learned_skills.LearnedSkillsError("INVALID_CONFIG", false);
|
|
37
|
+
if (apiUrl?.trim()) {
|
|
38
|
+
const url = new URL(apiUrl);
|
|
39
|
+
if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new require_learned_skills.LearnedSkillsError("INVALID_CONFIG", false);
|
|
40
|
+
}
|
|
41
|
+
client = new require_client.CopilotKitIntelligence({
|
|
42
|
+
apiKey,
|
|
43
|
+
...apiUrl !== void 0 ? { apiUrl } : {},
|
|
44
|
+
...apiUrl?.trim() ? { wsUrl: "wss://realtime.intelligence.copilotkit.ai" } : {}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return Object.freeze({
|
|
48
|
+
client,
|
|
49
|
+
...containers ? { containers } : {
|
|
50
|
+
containerId,
|
|
51
|
+
...revision !== void 0 ? { revision } : {}
|
|
52
|
+
},
|
|
53
|
+
freshnessWindowMs,
|
|
54
|
+
requestTimeoutMs,
|
|
55
|
+
debug
|
|
56
|
+
});
|
|
57
|
+
} catch (error) {
|
|
58
|
+
if (error instanceof require_learned_skills.LearnedSkillsError) throw error;
|
|
59
|
+
throw new require_learned_skills.LearnedSkillsError("INVALID_CONFIG", false, error);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
//#endregion
|
|
64
|
+
exports.resolveRegistryConfig = resolveRegistryConfig;
|
|
65
|
+
//# sourceMappingURL=config.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.cjs","names":["SkillDeliveryError","CopilotKitIntelligence"],"sources":["../../../../src/runtime/intelligence-platform/skill-registry/config.ts"],"sourcesContent":["import { CopilotKitIntelligence } from \"../client\";\nimport { SkillDeliveryError } from \"./errors\";\n\nexport interface SkillRegistryCommonOptions {\n client?: CopilotKitIntelligence;\n apiKey?: string;\n apiUrl?: string;\n freshnessWindowMs?: number;\n requestTimeoutMs?: number;\n debug?: boolean;\n}\n/** One published container and an optional exact revision pin. */\nexport interface SkillRegistryContainer {\n readonly id: string;\n readonly revision?: string;\n}\n\n/** Legacy selection and explicit multi-container selection cannot be combined. */\nexport type SkillRegistryOptions = SkillRegistryCommonOptions &\n (\n | { containerId?: string; revision?: string; containers?: never }\n | {\n containers: readonly SkillRegistryContainer[];\n containerId?: never;\n revision?: never;\n }\n );\n\ninterface RegistryCommonConfig {\n readonly client: CopilotKitIntelligence;\n readonly freshnessWindowMs: number;\n readonly requestTimeoutMs: number;\n readonly debug: boolean;\n}\n\nexport type SingleContainerConfig = RegistryCommonConfig & {\n readonly containerId: string;\n readonly revision?: string;\n readonly containers?: never;\n};\n\nexport type RegistryConfig =\n | SingleContainerConfig\n | (RegistryCommonConfig & {\n readonly containers: readonly SkillRegistryContainer[];\n readonly containerId?: never;\n readonly revision?: never;\n });\n\n/** Resolve once. Never retain the options object, environment, or a second key. */\nexport function resolveRegistryConfig(\n options: SkillRegistryOptions = {},\n environment: NodeJS.ProcessEnv = process.env,\n): RegistryConfig {\n try {\n const multiple = options.containers !== undefined;\n if (\n multiple &&\n (options.containerId !== undefined || options.revision !== undefined)\n ) {\n throw new SkillDeliveryError(\"INVALID_CONFIG\", false);\n }\n const containerId = multiple\n ? undefined\n : (options.containerId ??\n environment.CPK_INTELLIGENCE_LEARNING_CONTAINER_ID);\n const revision = multiple\n ? undefined\n : (options.revision ?? environment.CPK_INTELLIGENCE_SKILLS_REVISION);\n let containers: readonly SkillRegistryContainer[] | undefined;\n if (multiple) {\n if (\n !Array.isArray(options.containers) ||\n options.containers.length === 0 ||\n options.containers.length > 50\n ) {\n throw new SkillDeliveryError(\"INVALID_CONFIG\", false);\n }\n const seen = new Set<string>();\n containers = Object.freeze(\n options.containers.map((source) => {\n if (\n !source ||\n typeof source.id !== \"string\" ||\n !source.id.trim() ||\n // Reject control characters in caller-provided container IDs.\n // eslint-disable-next-line no-control-regex\n /[\\u0000-\\u001f\\u007f]/.test(source.id) ||\n seen.has(source.id) ||\n (source.revision !== undefined &&\n (typeof source.revision !== \"string\" || !source.revision.trim()))\n ) {\n throw new SkillDeliveryError(\"INVALID_CONFIG\", false);\n }\n // Reject malformed Unicode before constructing a qualified tool name.\n encodeURIComponent(source.id);\n seen.add(source.id);\n return Object.freeze({\n id: source.id,\n ...(source.revision !== undefined\n ? { revision: source.revision }\n : {}),\n });\n }),\n );\n }\n const freshnessWindowMs = options.freshnessWindowMs ?? 5_000;\n const requestTimeoutMs = options.requestTimeoutMs ?? 5_000;\n const debug = options.debug ?? false;\n if (\n (!multiple && (typeof containerId !== \"string\" || !containerId.trim())) ||\n (revision !== undefined &&\n (typeof revision !== \"string\" || revision.length === 0)) ||\n !Number.isSafeInteger(freshnessWindowMs) ||\n freshnessWindowMs < 0 ||\n !Number.isSafeInteger(requestTimeoutMs) ||\n requestTimeoutMs < 1 ||\n requestTimeoutMs > 2_147_483_647 ||\n typeof debug !== \"boolean\"\n )\n throw new SkillDeliveryError(\"INVALID_CONFIG\", false);\n let client = options.client;\n if (client !== undefined) {\n if (\n !client ||\n typeof (multiple\n ? client.getLearnedSkillsSnapshots\n : client.getLearnedSkillsSnapshot) !== \"function\"\n )\n throw new SkillDeliveryError(\"INVALID_CONFIG\", false);\n } else {\n const apiKey = options.apiKey ?? environment.CPK_INTELLIGENCE_API_KEY;\n const apiUrl = options.apiUrl ?? environment.INTELLIGENCE_API_URL;\n if (typeof apiKey !== \"string\" || !apiKey.trim())\n throw new SkillDeliveryError(\"INVALID_CONFIG\", false);\n if (apiUrl?.trim()) {\n const url = new URL(apiUrl);\n if (\n ![\"http:\", \"https:\"].includes(url.protocol) ||\n url.username ||\n url.password ||\n url.search ||\n url.hash\n )\n throw new SkillDeliveryError(\"INVALID_CONFIG\", false);\n }\n client = new CopilotKitIntelligence({\n apiKey,\n ...(apiUrl !== undefined ? { apiUrl } : {}),\n // This private helper client uses REST only. Explicitly retain the\n // canonical websocket default to prevent an irrelevant host warning.\n ...(apiUrl?.trim()\n ? { wsUrl: \"wss://realtime.intelligence.copilotkit.ai\" }\n : {}),\n });\n }\n return Object.freeze({\n client,\n ...(containers\n ? { containers }\n : {\n containerId: containerId!,\n ...(revision !== undefined ? { revision } : {}),\n }),\n freshnessWindowMs,\n requestTimeoutMs,\n debug,\n });\n } catch (error) {\n if (error instanceof SkillDeliveryError) throw error;\n throw new SkillDeliveryError(\"INVALID_CONFIG\", false, error);\n }\n}\n"],"mappings":";;;;;AAkDA,SAAgB,sBACd,UAAgC,EAAE,EAClC,cAAiC,QAAQ,KACzB;AAChB,KAAI;EACF,MAAM,WAAW,QAAQ,eAAe;AACxC,MACE,aACC,QAAQ,gBAAgB,UAAa,QAAQ,aAAa,QAE3D,OAAM,IAAIA,0CAAmB,kBAAkB,MAAM;EAEvD,MAAM,cAAc,WAChB,SACC,QAAQ,eACT,YAAY;EAChB,MAAM,WAAW,WACb,SACC,QAAQ,YAAY,YAAY;EACrC,IAAI;AACJ,MAAI,UAAU;AACZ,OACE,CAAC,MAAM,QAAQ,QAAQ,WAAW,IAClC,QAAQ,WAAW,WAAW,KAC9B,QAAQ,WAAW,SAAS,GAE5B,OAAM,IAAIA,0CAAmB,kBAAkB,MAAM;GAEvD,MAAM,uBAAO,IAAI,KAAa;AAC9B,gBAAa,OAAO,OAClB,QAAQ,WAAW,KAAK,WAAW;AACjC,QACE,CAAC,UACD,OAAO,OAAO,OAAO,YACrB,CAAC,OAAO,GAAG,MAAM,IAGjB,wBAAwB,KAAK,OAAO,GAAG,IACvC,KAAK,IAAI,OAAO,GAAG,IAClB,OAAO,aAAa,WAClB,OAAO,OAAO,aAAa,YAAY,CAAC,OAAO,SAAS,MAAM,EAEjE,OAAM,IAAIA,0CAAmB,kBAAkB,MAAM;AAGvD,uBAAmB,OAAO,GAAG;AAC7B,SAAK,IAAI,OAAO,GAAG;AACnB,WAAO,OAAO,OAAO;KACnB,IAAI,OAAO;KACX,GAAI,OAAO,aAAa,SACpB,EAAE,UAAU,OAAO,UAAU,GAC7B,EAAE;KACP,CAAC;KACF,CACH;;EAEH,MAAM,oBAAoB,QAAQ,qBAAqB;EACvD,MAAM,mBAAmB,QAAQ,oBAAoB;EACrD,MAAM,QAAQ,QAAQ,SAAS;AAC/B,MACG,CAAC,aAAa,OAAO,gBAAgB,YAAY,CAAC,YAAY,MAAM,KACpE,aAAa,WACX,OAAO,aAAa,YAAY,SAAS,WAAW,MACvD,CAAC,OAAO,cAAc,kBAAkB,IACxC,oBAAoB,KACpB,CAAC,OAAO,cAAc,iBAAiB,IACvC,mBAAmB,KACnB,mBAAmB,cACnB,OAAO,UAAU,UAEjB,OAAM,IAAIA,0CAAmB,kBAAkB,MAAM;EACvD,IAAI,SAAS,QAAQ;AACrB,MAAI,WAAW,QACb;OACE,CAAC,UACD,QAAQ,WACJ,OAAO,4BACP,OAAO,8BAA8B,WAEzC,OAAM,IAAIA,0CAAmB,kBAAkB,MAAM;SAClD;GACL,MAAM,SAAS,QAAQ,UAAU,YAAY;GAC7C,MAAM,SAAS,QAAQ,UAAU,YAAY;AAC7C,OAAI,OAAO,WAAW,YAAY,CAAC,OAAO,MAAM,CAC9C,OAAM,IAAIA,0CAAmB,kBAAkB,MAAM;AACvD,OAAI,QAAQ,MAAM,EAAE;IAClB,MAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,QACE,CAAC,CAAC,SAAS,SAAS,CAAC,SAAS,IAAI,SAAS,IAC3C,IAAI,YACJ,IAAI,YACJ,IAAI,UACJ,IAAI,KAEJ,OAAM,IAAIA,0CAAmB,kBAAkB,MAAM;;AAEzD,YAAS,IAAIC,sCAAuB;IAClC;IACA,GAAI,WAAW,SAAY,EAAE,QAAQ,GAAG,EAAE;IAG1C,GAAI,QAAQ,MAAM,GACd,EAAE,OAAO,6CAA6C,GACtD,EAAE;IACP,CAAC;;AAEJ,SAAO,OAAO,OAAO;GACnB;GACA,GAAI,aACA,EAAE,YAAY,GACd;IACe;IACb,GAAI,aAAa,SAAY,EAAE,UAAU,GAAG,EAAE;IAC/C;GACL;GACA;GACA;GACD,CAAC;UACK,OAAO;AACd,MAAI,iBAAiBD,0CAAoB,OAAM;AAC/C,QAAM,IAAIA,0CAAmB,kBAAkB,OAAO,MAAM"}
|