@lobu/gateway 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +6 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/platform.d.ts +92 -0
- package/dist/api/platform.d.ts.map +1 -0
- package/dist/api/platform.js +236 -0
- package/dist/api/platform.js.map +1 -0
- package/dist/api/response-renderer.d.ts +44 -0
- package/dist/api/response-renderer.d.ts.map +1 -0
- package/dist/api/response-renderer.js +123 -0
- package/dist/api/response-renderer.js.map +1 -0
- package/dist/auth/agent-metadata-store.d.ts +64 -0
- package/dist/auth/agent-metadata-store.d.ts.map +1 -0
- package/dist/auth/agent-metadata-store.js +115 -0
- package/dist/auth/agent-metadata-store.js.map +1 -0
- package/dist/auth/api-auth-middleware.d.ts +19 -0
- package/dist/auth/api-auth-middleware.d.ts.map +1 -0
- package/dist/auth/api-auth-middleware.js +61 -0
- package/dist/auth/api-auth-middleware.js.map +1 -0
- package/dist/auth/api-key-provider-module.d.ts +60 -0
- package/dist/auth/api-key-provider-module.d.ts.map +1 -0
- package/dist/auth/api-key-provider-module.js +148 -0
- package/dist/auth/api-key-provider-module.js.map +1 -0
- package/dist/auth/base-provider-module.d.ts +70 -0
- package/dist/auth/base-provider-module.d.ts.map +1 -0
- package/dist/auth/base-provider-module.js +118 -0
- package/dist/auth/base-provider-module.js.map +1 -0
- package/dist/auth/chatgpt/chatgpt-oauth-module.d.ts +34 -0
- package/dist/auth/chatgpt/chatgpt-oauth-module.d.ts.map +1 -0
- package/dist/auth/chatgpt/chatgpt-oauth-module.js +136 -0
- package/dist/auth/chatgpt/chatgpt-oauth-module.js.map +1 -0
- package/dist/auth/chatgpt/device-code-client.d.ts +40 -0
- package/dist/auth/chatgpt/device-code-client.d.ts.map +1 -0
- package/dist/auth/chatgpt/device-code-client.js +165 -0
- package/dist/auth/chatgpt/device-code-client.js.map +1 -0
- package/dist/auth/chatgpt/index.d.ts +2 -0
- package/dist/auth/chatgpt/index.d.ts.map +1 -0
- package/dist/auth/chatgpt/index.js +6 -0
- package/dist/auth/chatgpt/index.js.map +1 -0
- package/dist/auth/claude/oauth-module.d.ts +29 -0
- package/dist/auth/claude/oauth-module.d.ts.map +1 -0
- package/dist/auth/claude/oauth-module.js +201 -0
- package/dist/auth/claude/oauth-module.js.map +1 -0
- package/dist/auth/cli/token-service.d.ts +35 -0
- package/dist/auth/cli/token-service.d.ts.map +1 -0
- package/dist/auth/cli/token-service.js +171 -0
- package/dist/auth/cli/token-service.js.map +1 -0
- package/dist/auth/external/client.d.ts +65 -0
- package/dist/auth/external/client.d.ts.map +1 -0
- package/dist/auth/external/client.js +348 -0
- package/dist/auth/external/client.js.map +1 -0
- package/dist/auth/external/device-code-client.d.ts +41 -0
- package/dist/auth/external/device-code-client.d.ts.map +1 -0
- package/dist/auth/external/device-code-client.js +128 -0
- package/dist/auth/external/device-code-client.js.map +1 -0
- package/dist/auth/mcp/config-service.d.ts +70 -0
- package/dist/auth/mcp/config-service.d.ts.map +1 -0
- package/dist/auth/mcp/config-service.js +269 -0
- package/dist/auth/mcp/config-service.js.map +1 -0
- package/dist/auth/mcp/proxy.d.ts +68 -0
- package/dist/auth/mcp/proxy.d.ts.map +1 -0
- package/dist/auth/mcp/proxy.js +783 -0
- package/dist/auth/mcp/proxy.js.map +1 -0
- package/dist/auth/mcp/string-substitution.d.ts +11 -0
- package/dist/auth/mcp/string-substitution.d.ts.map +1 -0
- package/dist/auth/mcp/string-substitution.js +21 -0
- package/dist/auth/mcp/string-substitution.js.map +1 -0
- package/dist/auth/mcp/tool-cache.d.ts +26 -0
- package/dist/auth/mcp/tool-cache.d.ts.map +1 -0
- package/dist/auth/mcp/tool-cache.js +58 -0
- package/dist/auth/mcp/tool-cache.js.map +1 -0
- package/dist/auth/oauth/base-client.d.ts +54 -0
- package/dist/auth/oauth/base-client.d.ts.map +1 -0
- package/dist/auth/oauth/base-client.js +191 -0
- package/dist/auth/oauth/base-client.js.map +1 -0
- package/dist/auth/oauth/client.d.ts +35 -0
- package/dist/auth/oauth/client.d.ts.map +1 -0
- package/dist/auth/oauth/client.js +96 -0
- package/dist/auth/oauth/client.js.map +1 -0
- package/dist/auth/oauth/credentials.d.ts +8 -0
- package/dist/auth/oauth/credentials.d.ts.map +1 -0
- package/dist/auth/oauth/credentials.js +3 -0
- package/dist/auth/oauth/credentials.js.map +1 -0
- package/dist/auth/oauth/providers.d.ts +44 -0
- package/dist/auth/oauth/providers.d.ts.map +1 -0
- package/dist/auth/oauth/providers.js +37 -0
- package/dist/auth/oauth/providers.js.map +1 -0
- package/dist/auth/oauth/state-store.d.ts +62 -0
- package/dist/auth/oauth/state-store.d.ts.map +1 -0
- package/dist/auth/oauth/state-store.js +84 -0
- package/dist/auth/oauth/state-store.js.map +1 -0
- package/dist/auth/oauth-templates.d.ts +15 -0
- package/dist/auth/oauth-templates.d.ts.map +1 -0
- package/dist/auth/oauth-templates.js +161 -0
- package/dist/auth/oauth-templates.js.map +1 -0
- package/dist/auth/provider-catalog.d.ts +52 -0
- package/dist/auth/provider-catalog.d.ts.map +1 -0
- package/dist/auth/provider-catalog.js +155 -0
- package/dist/auth/provider-catalog.js.map +1 -0
- package/dist/auth/provider-model-options.d.ts +3 -0
- package/dist/auth/provider-model-options.d.ts.map +1 -0
- package/dist/auth/provider-model-options.js +29 -0
- package/dist/auth/provider-model-options.js.map +1 -0
- package/dist/auth/settings/agent-settings-store.d.ts +112 -0
- package/dist/auth/settings/agent-settings-store.d.ts.map +1 -0
- package/dist/auth/settings/agent-settings-store.js +376 -0
- package/dist/auth/settings/agent-settings-store.js.map +1 -0
- package/dist/auth/settings/auth-profiles-manager.d.ts +26 -0
- package/dist/auth/settings/auth-profiles-manager.d.ts.map +1 -0
- package/dist/auth/settings/auth-profiles-manager.js +146 -0
- package/dist/auth/settings/auth-profiles-manager.js.map +1 -0
- package/dist/auth/settings/index.d.ts +4 -0
- package/dist/auth/settings/index.d.ts.map +1 -0
- package/dist/auth/settings/index.js +9 -0
- package/dist/auth/settings/index.js.map +1 -0
- package/dist/auth/settings/model-preference-store.d.ts +25 -0
- package/dist/auth/settings/model-preference-store.d.ts.map +1 -0
- package/dist/auth/settings/model-preference-store.js +50 -0
- package/dist/auth/settings/model-preference-store.js.map +1 -0
- package/dist/auth/settings/model-selection.d.ts +11 -0
- package/dist/auth/settings/model-selection.d.ts.map +1 -0
- package/dist/auth/settings/model-selection.js +83 -0
- package/dist/auth/settings/model-selection.js.map +1 -0
- package/dist/auth/settings/resolved-settings-view.d.ts +45 -0
- package/dist/auth/settings/resolved-settings-view.d.ts.map +1 -0
- package/dist/auth/settings/resolved-settings-view.js +152 -0
- package/dist/auth/settings/resolved-settings-view.js.map +1 -0
- package/dist/auth/settings/template-utils.d.ts +3 -0
- package/dist/auth/settings/template-utils.d.ts.map +1 -0
- package/dist/auth/settings/template-utils.js +43 -0
- package/dist/auth/settings/template-utils.js.map +1 -0
- package/dist/auth/settings/token-service.d.ts +86 -0
- package/dist/auth/settings/token-service.d.ts.map +1 -0
- package/dist/auth/settings/token-service.js +3 -0
- package/dist/auth/settings/token-service.js.map +1 -0
- package/dist/auth/system-env-store.d.ts +26 -0
- package/dist/auth/system-env-store.d.ts.map +1 -0
- package/dist/auth/system-env-store.js +92 -0
- package/dist/auth/system-env-store.js.map +1 -0
- package/dist/auth/user-agents-store.d.ts +31 -0
- package/dist/auth/user-agents-store.d.ts.map +1 -0
- package/dist/auth/user-agents-store.js +54 -0
- package/dist/auth/user-agents-store.js.map +1 -0
- package/dist/channels/binding-service.d.ts +69 -0
- package/dist/channels/binding-service.d.ts.map +1 -0
- package/dist/channels/binding-service.js +144 -0
- package/dist/channels/binding-service.js.map +1 -0
- package/dist/channels/index.d.ts +2 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +6 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/cli/gateway.d.ts +31 -0
- package/dist/cli/gateway.d.ts.map +1 -0
- package/dist/cli/gateway.js +1062 -0
- package/dist/cli/gateway.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +56 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/built-in-commands.d.ts +10 -0
- package/dist/commands/built-in-commands.d.ts.map +1 -0
- package/dist/commands/built-in-commands.js +63 -0
- package/dist/commands/built-in-commands.js.map +1 -0
- package/dist/commands/command-dispatcher.d.ts +25 -0
- package/dist/commands/command-dispatcher.d.ts.map +1 -0
- package/dist/commands/command-dispatcher.js +50 -0
- package/dist/commands/command-dispatcher.js.map +1 -0
- package/dist/commands/command-reply-adapters.d.ts +3 -0
- package/dist/commands/command-reply-adapters.d.ts.map +1 -0
- package/dist/commands/command-reply-adapters.js +60 -0
- package/dist/commands/command-reply-adapters.js.map +1 -0
- package/dist/config/file-loader.d.ts +23 -0
- package/dist/config/file-loader.d.ts.map +1 -0
- package/dist/config/file-loader.js +495 -0
- package/dist/config/file-loader.js.map +1 -0
- package/dist/config/index.d.ts +96 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +357 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/network-allowlist.d.ts +18 -0
- package/dist/config/network-allowlist.d.ts.map +1 -0
- package/dist/config/network-allowlist.js +60 -0
- package/dist/config/network-allowlist.js.map +1 -0
- package/dist/connections/chat-instance-manager.d.ts +107 -0
- package/dist/connections/chat-instance-manager.d.ts.map +1 -0
- package/dist/connections/chat-instance-manager.js +886 -0
- package/dist/connections/chat-instance-manager.js.map +1 -0
- package/dist/connections/chat-response-bridge.d.ts +31 -0
- package/dist/connections/chat-response-bridge.d.ts.map +1 -0
- package/dist/connections/chat-response-bridge.js +465 -0
- package/dist/connections/chat-response-bridge.js.map +1 -0
- package/dist/connections/index.d.ts +4 -0
- package/dist/connections/index.d.ts.map +1 -0
- package/dist/connections/index.js +8 -0
- package/dist/connections/index.js.map +1 -0
- package/dist/connections/interaction-bridge.d.ts +7 -0
- package/dist/connections/interaction-bridge.d.ts.map +1 -0
- package/dist/connections/interaction-bridge.js +593 -0
- package/dist/connections/interaction-bridge.js.map +1 -0
- package/dist/connections/message-handler-bridge.d.ts +21 -0
- package/dist/connections/message-handler-bridge.d.ts.map +1 -0
- package/dist/connections/message-handler-bridge.js +314 -0
- package/dist/connections/message-handler-bridge.js.map +1 -0
- package/dist/connections/platform-auth-methods.d.ts +5 -0
- package/dist/connections/platform-auth-methods.d.ts.map +1 -0
- package/dist/connections/platform-auth-methods.js +13 -0
- package/dist/connections/platform-auth-methods.js.map +1 -0
- package/dist/connections/types.d.ts +52 -0
- package/dist/connections/types.d.ts.map +1 -0
- package/dist/connections/types.js +20 -0
- package/dist/connections/types.js.map +1 -0
- package/dist/gateway/connection-manager.d.ts +87 -0
- package/dist/gateway/connection-manager.d.ts.map +1 -0
- package/dist/gateway/connection-manager.js +216 -0
- package/dist/gateway/connection-manager.js.map +1 -0
- package/dist/gateway/index.d.ts +71 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +509 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/job-router.d.ts +60 -0
- package/dist/gateway/job-router.d.ts.map +1 -0
- package/dist/gateway/job-router.js +148 -0
- package/dist/gateway/job-router.js.map +1 -0
- package/dist/gateway-main.d.ts +81 -0
- package/dist/gateway-main.d.ts.map +1 -0
- package/dist/gateway-main.js +143 -0
- package/dist/gateway-main.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/queue/index.d.ts +8 -0
- package/dist/infrastructure/queue/index.d.ts.map +1 -0
- package/dist/infrastructure/queue/index.js +12 -0
- package/dist/infrastructure/queue/index.js.map +1 -0
- package/dist/infrastructure/queue/queue-producer.d.ts +68 -0
- package/dist/infrastructure/queue/queue-producer.d.ts.map +1 -0
- package/dist/infrastructure/queue/queue-producer.js +72 -0
- package/dist/infrastructure/queue/queue-producer.js.map +1 -0
- package/dist/infrastructure/queue/redis-queue.d.ts +45 -0
- package/dist/infrastructure/queue/redis-queue.d.ts.map +1 -0
- package/dist/infrastructure/queue/redis-queue.js +273 -0
- package/dist/infrastructure/queue/redis-queue.js.map +1 -0
- package/dist/infrastructure/queue/types.d.ts +107 -0
- package/dist/infrastructure/queue/types.d.ts.map +1 -0
- package/dist/infrastructure/queue/types.js +7 -0
- package/dist/infrastructure/queue/types.js.map +1 -0
- package/dist/infrastructure/redis/system-message-limiter.d.ts +35 -0
- package/dist/infrastructure/redis/system-message-limiter.d.ts.map +1 -0
- package/dist/infrastructure/redis/system-message-limiter.js +61 -0
- package/dist/infrastructure/redis/system-message-limiter.js.map +1 -0
- package/dist/interactions/config-request-store.d.ts +41 -0
- package/dist/interactions/config-request-store.d.ts.map +1 -0
- package/dist/interactions/config-request-store.js +103 -0
- package/dist/interactions/config-request-store.js.map +1 -0
- package/dist/interactions.d.ts +134 -0
- package/dist/interactions.d.ts.map +1 -0
- package/dist/interactions.js +175 -0
- package/dist/interactions.js.map +1 -0
- package/dist/lobu.d.ts +78 -0
- package/dist/lobu.d.ts.map +1 -0
- package/dist/lobu.js +248 -0
- package/dist/lobu.js.map +1 -0
- package/dist/metrics/prometheus.d.ts +6 -0
- package/dist/metrics/prometheus.d.ts.map +1 -0
- package/dist/metrics/prometheus.js +78 -0
- package/dist/metrics/prometheus.js.map +1 -0
- package/dist/modules/module-system.d.ts +82 -0
- package/dist/modules/module-system.d.ts.map +1 -0
- package/dist/modules/module-system.js +53 -0
- package/dist/modules/module-system.js.map +1 -0
- package/dist/orchestration/base-deployment-manager.d.ts +173 -0
- package/dist/orchestration/base-deployment-manager.d.ts.map +1 -0
- package/dist/orchestration/base-deployment-manager.js +553 -0
- package/dist/orchestration/base-deployment-manager.js.map +1 -0
- package/dist/orchestration/deployment-utils.d.ts +25 -0
- package/dist/orchestration/deployment-utils.d.ts.map +1 -0
- package/dist/orchestration/deployment-utils.js +65 -0
- package/dist/orchestration/deployment-utils.js.map +1 -0
- package/dist/orchestration/impl/docker-deployment.d.ts +43 -0
- package/dist/orchestration/impl/docker-deployment.d.ts.map +1 -0
- package/dist/orchestration/impl/docker-deployment.js +480 -0
- package/dist/orchestration/impl/docker-deployment.js.map +1 -0
- package/dist/orchestration/impl/embedded-deployment.d.ts +16 -0
- package/dist/orchestration/impl/embedded-deployment.d.ts.map +1 -0
- package/dist/orchestration/impl/embedded-deployment.js +195 -0
- package/dist/orchestration/impl/embedded-deployment.js.map +1 -0
- package/dist/orchestration/impl/index.d.ts +8 -0
- package/dist/orchestration/impl/index.d.ts.map +1 -0
- package/dist/orchestration/impl/index.js +14 -0
- package/dist/orchestration/impl/index.js.map +1 -0
- package/dist/orchestration/impl/k8s/deployment.d.ts +204 -0
- package/dist/orchestration/impl/k8s/deployment.d.ts.map +1 -0
- package/dist/orchestration/impl/k8s/deployment.js +620 -0
- package/dist/orchestration/impl/k8s/deployment.js.map +1 -0
- package/dist/orchestration/impl/k8s/helpers.d.ts +34 -0
- package/dist/orchestration/impl/k8s/helpers.d.ts.map +1 -0
- package/dist/orchestration/impl/k8s/helpers.js +377 -0
- package/dist/orchestration/impl/k8s/helpers.js.map +1 -0
- package/dist/orchestration/impl/k8s/index.d.ts +2 -0
- package/dist/orchestration/impl/k8s/index.d.ts.map +1 -0
- package/dist/orchestration/impl/k8s/index.js +6 -0
- package/dist/orchestration/impl/k8s/index.js.map +1 -0
- package/dist/orchestration/index.d.ts +53 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +257 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/message-consumer.d.ts +49 -0
- package/dist/orchestration/message-consumer.d.ts.map +1 -0
- package/dist/orchestration/message-consumer.js +406 -0
- package/dist/orchestration/message-consumer.js.map +1 -0
- package/dist/orchestration/scheduled-wakeup.d.ts +110 -0
- package/dist/orchestration/scheduled-wakeup.d.ts.map +1 -0
- package/dist/orchestration/scheduled-wakeup.js +500 -0
- package/dist/orchestration/scheduled-wakeup.js.map +1 -0
- package/dist/permissions/approval-policy.d.ts +28 -0
- package/dist/permissions/approval-policy.d.ts.map +1 -0
- package/dist/permissions/approval-policy.js +33 -0
- package/dist/permissions/approval-policy.js.map +1 -0
- package/dist/permissions/grant-store.d.ts +52 -0
- package/dist/permissions/grant-store.d.ts.map +1 -0
- package/dist/permissions/grant-store.js +192 -0
- package/dist/permissions/grant-store.js.map +1 -0
- package/dist/platform/file-handler.d.ts +51 -0
- package/dist/platform/file-handler.d.ts.map +1 -0
- package/dist/platform/file-handler.js +6 -0
- package/dist/platform/file-handler.js.map +1 -0
- package/dist/platform/link-buttons.d.ts +21 -0
- package/dist/platform/link-buttons.d.ts.map +1 -0
- package/dist/platform/link-buttons.js +43 -0
- package/dist/platform/link-buttons.js.map +1 -0
- package/dist/platform/renderer-utils.d.ts +10 -0
- package/dist/platform/renderer-utils.d.ts.map +1 -0
- package/dist/platform/renderer-utils.js +42 -0
- package/dist/platform/renderer-utils.js.map +1 -0
- package/dist/platform/response-renderer.d.ts +66 -0
- package/dist/platform/response-renderer.d.ts.map +1 -0
- package/dist/platform/response-renderer.js +8 -0
- package/dist/platform/response-renderer.js.map +1 -0
- package/dist/platform/unified-thread-consumer.d.ts +41 -0
- package/dist/platform/unified-thread-consumer.d.ts.map +1 -0
- package/dist/platform/unified-thread-consumer.js +143 -0
- package/dist/platform/unified-thread-consumer.js.map +1 -0
- package/dist/platform.d.ts +255 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +40 -0
- package/dist/platform.js.map +1 -0
- package/dist/proxy/http-proxy.d.ts +32 -0
- package/dist/proxy/http-proxy.d.ts.map +1 -0
- package/dist/proxy/http-proxy.js +636 -0
- package/dist/proxy/http-proxy.js.map +1 -0
- package/dist/proxy/proxy-manager.d.ts +13 -0
- package/dist/proxy/proxy-manager.d.ts.map +1 -0
- package/dist/proxy/proxy-manager.js +68 -0
- package/dist/proxy/proxy-manager.js.map +1 -0
- package/dist/proxy/secret-proxy.d.ts +78 -0
- package/dist/proxy/secret-proxy.d.ts.map +1 -0
- package/dist/proxy/secret-proxy.js +309 -0
- package/dist/proxy/secret-proxy.js.map +1 -0
- package/dist/proxy/token-refresh-job.d.ts +29 -0
- package/dist/proxy/token-refresh-job.d.ts.map +1 -0
- package/dist/proxy/token-refresh-job.js +104 -0
- package/dist/proxy/token-refresh-job.js.map +1 -0
- package/dist/routes/internal/audio.d.ts +14 -0
- package/dist/routes/internal/audio.d.ts.map +1 -0
- package/dist/routes/internal/audio.js +118 -0
- package/dist/routes/internal/audio.js.map +1 -0
- package/dist/routes/internal/device-auth.d.ts +42 -0
- package/dist/routes/internal/device-auth.d.ts.map +1 -0
- package/dist/routes/internal/device-auth.js +397 -0
- package/dist/routes/internal/device-auth.js.map +1 -0
- package/dist/routes/internal/files.d.ts +9 -0
- package/dist/routes/internal/files.d.ts.map +1 -0
- package/dist/routes/internal/files.js +175 -0
- package/dist/routes/internal/files.js.map +1 -0
- package/dist/routes/internal/history.d.ts +9 -0
- package/dist/routes/internal/history.d.ts.map +1 -0
- package/dist/routes/internal/history.js +55 -0
- package/dist/routes/internal/history.js.map +1 -0
- package/dist/routes/internal/images.d.ts +10 -0
- package/dist/routes/internal/images.d.ts.map +1 -0
- package/dist/routes/internal/images.js +101 -0
- package/dist/routes/internal/images.js.map +1 -0
- package/dist/routes/internal/interactions.d.ts +9 -0
- package/dist/routes/internal/interactions.d.ts.map +1 -0
- package/dist/routes/internal/interactions.js +53 -0
- package/dist/routes/internal/interactions.js.map +1 -0
- package/dist/routes/internal/middleware.d.ts +7 -0
- package/dist/routes/internal/middleware.d.ts.map +1 -0
- package/dist/routes/internal/middleware.js +24 -0
- package/dist/routes/internal/middleware.js.map +1 -0
- package/dist/routes/internal/schedule.d.ts +14 -0
- package/dist/routes/internal/schedule.d.ts.map +1 -0
- package/dist/routes/internal/schedule.js +169 -0
- package/dist/routes/internal/schedule.js.map +1 -0
- package/dist/routes/internal/types.d.ts +22 -0
- package/dist/routes/internal/types.d.ts.map +1 -0
- package/dist/routes/internal/types.js +6 -0
- package/dist/routes/internal/types.js.map +1 -0
- package/dist/routes/openapi-auto.d.ts +8 -0
- package/dist/routes/openapi-auto.d.ts.map +1 -0
- package/dist/routes/openapi-auto.js +196 -0
- package/dist/routes/openapi-auto.js.map +1 -0
- package/dist/routes/public/agent-access.d.ts +11 -0
- package/dist/routes/public/agent-access.d.ts.map +1 -0
- package/dist/routes/public/agent-access.js +11 -0
- package/dist/routes/public/agent-access.js.map +1 -0
- package/dist/routes/public/agent-config.d.ts +42 -0
- package/dist/routes/public/agent-config.d.ts.map +1 -0
- package/dist/routes/public/agent-config.js +415 -0
- package/dist/routes/public/agent-config.js.map +1 -0
- package/dist/routes/public/agent-history.d.ts +17 -0
- package/dist/routes/public/agent-history.d.ts.map +1 -0
- package/dist/routes/public/agent-history.js +335 -0
- package/dist/routes/public/agent-history.js.map +1 -0
- package/dist/routes/public/agent-schedules.d.ts +18 -0
- package/dist/routes/public/agent-schedules.d.ts.map +1 -0
- package/dist/routes/public/agent-schedules.js +242 -0
- package/dist/routes/public/agent-schedules.js.map +1 -0
- package/dist/routes/public/agent.d.ts +23 -0
- package/dist/routes/public/agent.d.ts.map +1 -0
- package/dist/routes/public/agent.js +864 -0
- package/dist/routes/public/agent.js.map +1 -0
- package/dist/routes/public/agents.d.ts +22 -0
- package/dist/routes/public/agents.d.ts.map +1 -0
- package/dist/routes/public/agents.js +257 -0
- package/dist/routes/public/agents.js.map +1 -0
- package/dist/routes/public/channels.d.ts +23 -0
- package/dist/routes/public/channels.d.ts.map +1 -0
- package/dist/routes/public/channels.js +131 -0
- package/dist/routes/public/channels.js.map +1 -0
- package/dist/routes/public/cli-auth.d.ts +12 -0
- package/dist/routes/public/cli-auth.d.ts.map +1 -0
- package/dist/routes/public/cli-auth.js +552 -0
- package/dist/routes/public/cli-auth.js.map +1 -0
- package/dist/routes/public/connections.d.ts +20 -0
- package/dist/routes/public/connections.d.ts.map +1 -0
- package/dist/routes/public/connections.js +464 -0
- package/dist/routes/public/connections.js.map +1 -0
- package/dist/routes/public/landing.d.ts +3 -0
- package/dist/routes/public/landing.d.ts.map +1 -0
- package/dist/routes/public/landing.js +17 -0
- package/dist/routes/public/landing.js.map +1 -0
- package/dist/routes/public/oauth.d.ts +24 -0
- package/dist/routes/public/oauth.d.ts.map +1 -0
- package/dist/routes/public/oauth.js +108 -0
- package/dist/routes/public/oauth.js.map +1 -0
- package/dist/routes/public/settings-auth.d.ts +28 -0
- package/dist/routes/public/settings-auth.d.ts.map +1 -0
- package/dist/routes/public/settings-auth.js +90 -0
- package/dist/routes/public/settings-auth.js.map +1 -0
- package/dist/routes/public/slack.d.ts +4 -0
- package/dist/routes/public/slack.d.ts.map +1 -0
- package/dist/routes/public/slack.js +119 -0
- package/dist/routes/public/slack.js.map +1 -0
- package/dist/routes/shared/agent-ownership.d.ts +15 -0
- package/dist/routes/shared/agent-ownership.d.ts.map +1 -0
- package/dist/routes/shared/agent-ownership.js +61 -0
- package/dist/routes/shared/agent-ownership.js.map +1 -0
- package/dist/routes/shared/token-verifier.d.ts +21 -0
- package/dist/routes/shared/token-verifier.d.ts.map +1 -0
- package/dist/routes/shared/token-verifier.js +25 -0
- package/dist/routes/shared/token-verifier.js.map +1 -0
- package/dist/services/core-services.d.ts +133 -0
- package/dist/services/core-services.d.ts.map +1 -0
- package/dist/services/core-services.js +728 -0
- package/dist/services/core-services.js.map +1 -0
- package/dist/services/image-generation-service.d.ts +38 -0
- package/dist/services/image-generation-service.d.ts.map +1 -0
- package/dist/services/image-generation-service.js +167 -0
- package/dist/services/image-generation-service.js.map +1 -0
- package/dist/services/instruction-service.d.ts +41 -0
- package/dist/services/instruction-service.d.ts.map +1 -0
- package/dist/services/instruction-service.js +252 -0
- package/dist/services/instruction-service.js.map +1 -0
- package/dist/services/mcp-registry.d.ts +31 -0
- package/dist/services/mcp-registry.d.ts.map +1 -0
- package/dist/services/mcp-registry.js +69 -0
- package/dist/services/mcp-registry.js.map +1 -0
- package/dist/services/platform-helpers.d.ts +47 -0
- package/dist/services/platform-helpers.d.ts.map +1 -0
- package/dist/services/platform-helpers.js +200 -0
- package/dist/services/platform-helpers.js.map +1 -0
- package/dist/services/session-manager.d.ts +72 -0
- package/dist/services/session-manager.d.ts.map +1 -0
- package/dist/services/session-manager.js +199 -0
- package/dist/services/session-manager.js.map +1 -0
- package/dist/services/settings-resolver.d.ts +25 -0
- package/dist/services/settings-resolver.d.ts.map +1 -0
- package/dist/services/settings-resolver.js +55 -0
- package/dist/services/settings-resolver.js.map +1 -0
- package/dist/services/system-config-resolver.d.ts +25 -0
- package/dist/services/system-config-resolver.d.ts.map +1 -0
- package/dist/services/system-config-resolver.js +73 -0
- package/dist/services/system-config-resolver.js.map +1 -0
- package/dist/services/system-skills-service.d.ts +38 -0
- package/dist/services/system-skills-service.d.ts.map +1 -0
- package/dist/services/system-skills-service.js +186 -0
- package/dist/services/system-skills-service.js.map +1 -0
- package/dist/services/transcription-service.d.ts +91 -0
- package/dist/services/transcription-service.d.ts.map +1 -0
- package/dist/services/transcription-service.js +465 -0
- package/dist/services/transcription-service.js.map +1 -0
- package/dist/session.d.ts +75 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +19 -0
- package/dist/session.js.map +1 -0
- package/dist/spaces/index.d.ts +2 -0
- package/dist/spaces/index.d.ts.map +1 -0
- package/dist/spaces/index.js +18 -0
- package/dist/spaces/index.js.map +1 -0
- package/dist/spaces/space-resolver.d.ts +10 -0
- package/dist/spaces/space-resolver.d.ts.map +1 -0
- package/dist/spaces/space-resolver.js +17 -0
- package/dist/spaces/space-resolver.js.map +1 -0
- package/dist/stores/in-memory-agent-store.d.ts +57 -0
- package/dist/stores/in-memory-agent-store.d.ts.map +1 -0
- package/dist/stores/in-memory-agent-store.js +304 -0
- package/dist/stores/in-memory-agent-store.js.map +1 -0
- package/dist/stores/redis-agent-store.d.ts +57 -0
- package/dist/stores/redis-agent-store.d.ts.map +1 -0
- package/dist/stores/redis-agent-store.js +163 -0
- package/dist/stores/redis-agent-store.js.map +1 -0
- package/dist/utils/public-url.d.ts +6 -0
- package/dist/utils/public-url.d.ts.map +1 -0
- package/dist/utils/public-url.js +33 -0
- package/dist/utils/public-url.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +32 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +56 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
"use strict";
|
|
3
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
4
|
+
var t = {};
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
8
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
9
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
10
|
+
t[p[i]] = s[p[i]];
|
|
11
|
+
}
|
|
12
|
+
return t;
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.WorkerGateway = void 0;
|
|
16
|
+
const core_1 = require("@lobu/core");
|
|
17
|
+
const hono_1 = require("hono");
|
|
18
|
+
const streaming_1 = require("hono/streaming");
|
|
19
|
+
const model_selection_1 = require("../auth/settings/model-selection");
|
|
20
|
+
const connection_manager_1 = require("./connection-manager");
|
|
21
|
+
const job_router_1 = require("./job-router");
|
|
22
|
+
const logger = (0, core_1.createLogger)("worker-gateway");
|
|
23
|
+
/**
|
|
24
|
+
* Worker Gateway - SSE and HTTP endpoints for worker communication
|
|
25
|
+
* Workers connect via SSE to receive jobs, send responses via HTTP POST
|
|
26
|
+
* Uses encrypted tokens for authentication and routing
|
|
27
|
+
*/
|
|
28
|
+
class WorkerGateway {
|
|
29
|
+
constructor(queue, publicGatewayUrl, sessionManager, mcpConfigService, instructionService, mcpProxy, providerCatalogService, settingsResolver, systemSkillsService) {
|
|
30
|
+
this.queue = queue;
|
|
31
|
+
this.publicGatewayUrl = publicGatewayUrl;
|
|
32
|
+
this.connectionManager = new connection_manager_1.WorkerConnectionManager();
|
|
33
|
+
this.jobRouter = new job_router_1.WorkerJobRouter(queue, this.connectionManager, sessionManager);
|
|
34
|
+
this.mcpConfigService = mcpConfigService;
|
|
35
|
+
this.instructionService = instructionService;
|
|
36
|
+
this.mcpProxy = mcpProxy;
|
|
37
|
+
this.providerCatalogService = providerCatalogService;
|
|
38
|
+
this.settingsResolver = settingsResolver;
|
|
39
|
+
this.systemSkillsService = systemSkillsService;
|
|
40
|
+
// Setup Hono app
|
|
41
|
+
this.app = new hono_1.Hono();
|
|
42
|
+
this.setupRoutes();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get the Hono app
|
|
46
|
+
*/
|
|
47
|
+
getApp() {
|
|
48
|
+
return this.app;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get the connection manager (for sending SSE notifications from external routes)
|
|
52
|
+
*/
|
|
53
|
+
getConnectionManager() {
|
|
54
|
+
return this.connectionManager;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Setup routes on Hono app
|
|
58
|
+
*/
|
|
59
|
+
setupRoutes() {
|
|
60
|
+
// SSE endpoint for workers to receive jobs
|
|
61
|
+
// Routes are mounted at /worker, so paths here should be relative
|
|
62
|
+
this.app.get("/stream", (c) => this.handleStreamConnection(c));
|
|
63
|
+
// HTTP POST endpoint for workers to send responses
|
|
64
|
+
this.app.post("/response", (c) => this.handleWorkerResponse(c));
|
|
65
|
+
// Unified session context endpoint (includes MCP + instructions)
|
|
66
|
+
this.app.get("/session-context", (c) => this.handleSessionContextRequest(c));
|
|
67
|
+
logger.debug("Worker gateway routes registered");
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Handle SSE connection from worker
|
|
71
|
+
*/
|
|
72
|
+
async handleStreamConnection(c) {
|
|
73
|
+
const auth = this.authenticateWorker(c);
|
|
74
|
+
if (!auth) {
|
|
75
|
+
return c.json({ error: "Invalid token" }, 401);
|
|
76
|
+
}
|
|
77
|
+
const { deploymentName, userId, conversationId, agentId } = auth.tokenData;
|
|
78
|
+
if (!conversationId) {
|
|
79
|
+
return c.json({ error: "Invalid token (missing conversationId)" }, 401);
|
|
80
|
+
}
|
|
81
|
+
// Extract httpPort from query params (worker HTTP server registration)
|
|
82
|
+
const httpPortParam = c.req.query("httpPort");
|
|
83
|
+
const httpPort = httpPortParam ? parseInt(httpPortParam, 10) : undefined;
|
|
84
|
+
// Create an SSE stream
|
|
85
|
+
return (0, streaming_1.stream)(c, async (streamWriter) => {
|
|
86
|
+
let isClosed = false;
|
|
87
|
+
// Create an SSE writer adapter
|
|
88
|
+
const sseWriter = {
|
|
89
|
+
write: (data) => {
|
|
90
|
+
try {
|
|
91
|
+
void streamWriter.write(data);
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
catch (_a) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
end: () => {
|
|
99
|
+
try {
|
|
100
|
+
streamWriter.close();
|
|
101
|
+
}
|
|
102
|
+
catch (_a) {
|
|
103
|
+
// Already closed
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
onClose: (callback) => {
|
|
107
|
+
streamWriter.onAbort(() => {
|
|
108
|
+
isClosed = true;
|
|
109
|
+
callback();
|
|
110
|
+
});
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
// Set SSE headers
|
|
114
|
+
c.header("Content-Type", "text/event-stream");
|
|
115
|
+
c.header("Cache-Control", "no-cache");
|
|
116
|
+
c.header("Connection", "keep-alive");
|
|
117
|
+
c.header("X-Accel-Buffering", "no");
|
|
118
|
+
// Clean up stale state before registering new connection.
|
|
119
|
+
// When a container dies without cleanly closing its TCP socket,
|
|
120
|
+
// the old SSE connection may still appear valid. Pause the BullMQ
|
|
121
|
+
// worker first to prevent it from sending jobs to the dead connection,
|
|
122
|
+
// then remove the stale connection so any in-flight handleJob will
|
|
123
|
+
// fail and trigger a retry against the new connection.
|
|
124
|
+
await this.jobRouter.pauseWorker(deploymentName);
|
|
125
|
+
if (this.connectionManager.isConnected(deploymentName)) {
|
|
126
|
+
logger.info(`Cleaning up stale connection for ${deploymentName} before new SSE`);
|
|
127
|
+
// Intentionally no expectedWriter — always evict the old connection
|
|
128
|
+
this.connectionManager.removeConnection(deploymentName);
|
|
129
|
+
}
|
|
130
|
+
// Register new (live) connection
|
|
131
|
+
this.connectionManager.addConnection(deploymentName, userId, conversationId, agentId || "", sseWriter, httpPort);
|
|
132
|
+
// Register BullMQ worker (idempotent) and resume job processing
|
|
133
|
+
await this.jobRouter.registerWorker(deploymentName);
|
|
134
|
+
await this.jobRouter.resumeWorker(deploymentName);
|
|
135
|
+
// Handle client disconnect — only act if this is still the active writer
|
|
136
|
+
sseWriter.onClose(() => {
|
|
137
|
+
const current = this.connectionManager.getConnection(deploymentName);
|
|
138
|
+
if (current && current.writer !== sseWriter) {
|
|
139
|
+
logger.debug(`Ignoring stale disconnect for ${deploymentName} (replaced by newer SSE)`);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
this.jobRouter.pauseWorker(deploymentName).catch((err) => {
|
|
143
|
+
logger.error(`Failed to pause worker ${deploymentName}:`, err);
|
|
144
|
+
});
|
|
145
|
+
this.connectionManager.removeConnection(deploymentName);
|
|
146
|
+
});
|
|
147
|
+
// Keep the connection open until the stream is actually aborted.
|
|
148
|
+
while (!isClosed) {
|
|
149
|
+
await streamWriter.sleep(1000);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Handle HTTP response from worker
|
|
155
|
+
*/
|
|
156
|
+
async handleWorkerResponse(c) {
|
|
157
|
+
const auth = this.authenticateWorker(c);
|
|
158
|
+
if (!auth) {
|
|
159
|
+
return c.json({ error: "Invalid token" }, 401);
|
|
160
|
+
}
|
|
161
|
+
const { deploymentName } = auth.tokenData;
|
|
162
|
+
// Update connection activity
|
|
163
|
+
this.connectionManager.touchConnection(deploymentName);
|
|
164
|
+
try {
|
|
165
|
+
const body = await c.req.json();
|
|
166
|
+
const { jobId } = body, responseData = __rest(body, ["jobId"]);
|
|
167
|
+
const enrichedResponse = auth.tokenData.connectionId &&
|
|
168
|
+
(!responseData.platformMetadata ||
|
|
169
|
+
typeof responseData.platformMetadata === "object")
|
|
170
|
+
? Object.assign(Object.assign({}, responseData), { platformMetadata: Object.assign(Object.assign({}, (responseData.platformMetadata || {})), { connectionId: auth.tokenData.connectionId }) }) : responseData;
|
|
171
|
+
// Acknowledge job completion if jobId provided
|
|
172
|
+
if (jobId) {
|
|
173
|
+
this.jobRouter.acknowledgeJob(jobId);
|
|
174
|
+
}
|
|
175
|
+
// Delivery receipts (worker ACKs) have no message payload — just acknowledge and return
|
|
176
|
+
if (enrichedResponse.received) {
|
|
177
|
+
if (enrichedResponse.heartbeat) {
|
|
178
|
+
// touchConnection already ran above for all /worker/response calls,
|
|
179
|
+
// keeping this worker alive in stale-cleanup.
|
|
180
|
+
logger.debug(`[WORKER-GATEWAY] Received heartbeat ACK from ${deploymentName}`);
|
|
181
|
+
}
|
|
182
|
+
return c.json({ success: true });
|
|
183
|
+
}
|
|
184
|
+
// Log for debugging
|
|
185
|
+
logger.info(`[WORKER-GATEWAY] Received response with fields: ${Object.keys(enrichedResponse).join(", ")}`);
|
|
186
|
+
if (enrichedResponse.delta) {
|
|
187
|
+
logger.info(`[WORKER-GATEWAY] Stream delta: deltaLength=${enrichedResponse.delta.length}`);
|
|
188
|
+
}
|
|
189
|
+
// Send response to thread_response queue
|
|
190
|
+
await this.queue.send("thread_response", enrichedResponse);
|
|
191
|
+
return c.json({ success: true });
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
logger.error(`Error handling worker response: ${error}`);
|
|
195
|
+
return c.json({ error: "Failed to process response" }, 500);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Unified session context endpoint
|
|
200
|
+
*/
|
|
201
|
+
async handleSessionContextRequest(c) {
|
|
202
|
+
var _a, _b, _c, _d;
|
|
203
|
+
if (!this.mcpConfigService || !this.instructionService) {
|
|
204
|
+
return c.json({ error: "session_context_unavailable" }, 503);
|
|
205
|
+
}
|
|
206
|
+
const auth = this.authenticateWorker(c);
|
|
207
|
+
if (!auth) {
|
|
208
|
+
return c.json({ error: "Invalid token" }, 401);
|
|
209
|
+
}
|
|
210
|
+
try {
|
|
211
|
+
const { userId, platform, sessionKey, conversationId, agentId, deploymentName, } = auth.tokenData;
|
|
212
|
+
const baseUrl = this.getRequestBaseUrl(c);
|
|
213
|
+
if (!conversationId) {
|
|
214
|
+
return c.json({ error: "Invalid token (missing conversationId)" }, 401);
|
|
215
|
+
}
|
|
216
|
+
// Build instruction context
|
|
217
|
+
const instructionContext = {
|
|
218
|
+
userId,
|
|
219
|
+
agentId: agentId || "",
|
|
220
|
+
sessionKey: sessionKey || "",
|
|
221
|
+
workingDirectory: "/workspace",
|
|
222
|
+
availableProjects: [],
|
|
223
|
+
};
|
|
224
|
+
// Build settings URL as a short-lived claim link so platform users
|
|
225
|
+
// can open it without a pre-existing browser session.
|
|
226
|
+
const CLAIM_TTL_MS = 10 * 60 * 1000; // 10 minutes
|
|
227
|
+
const claimToken = (0, core_1.encrypt)(JSON.stringify({
|
|
228
|
+
userId,
|
|
229
|
+
platform: platform || "unknown",
|
|
230
|
+
agentId: agentId || undefined,
|
|
231
|
+
exp: Date.now() + CLAIM_TTL_MS,
|
|
232
|
+
}));
|
|
233
|
+
const settingsUrl = new URL("/connect/claim", baseUrl);
|
|
234
|
+
settingsUrl.searchParams.set("claim", claimToken);
|
|
235
|
+
if (agentId) {
|
|
236
|
+
settingsUrl.searchParams.set("agent", agentId);
|
|
237
|
+
}
|
|
238
|
+
// Fetch MCP config and session context in parallel
|
|
239
|
+
const [mcpConfig, contextData] = await Promise.all([
|
|
240
|
+
this.mcpConfigService.getWorkerConfig({
|
|
241
|
+
baseUrl,
|
|
242
|
+
workerToken: auth.token,
|
|
243
|
+
deploymentName,
|
|
244
|
+
}),
|
|
245
|
+
this.instructionService.getSessionContext(platform || "unknown", instructionContext, { settingsUrl: settingsUrl.toString() }),
|
|
246
|
+
]);
|
|
247
|
+
// Fetch tool lists and instructions for ALL MCPs (unauthenticated ones
|
|
248
|
+
// will attempt discovery without credentials)
|
|
249
|
+
const mcpTools = {};
|
|
250
|
+
const mcpInstructions = {};
|
|
251
|
+
if (this.mcpProxy && contextData.mcpStatus.length > 0) {
|
|
252
|
+
const toolResults = await Promise.allSettled(contextData.mcpStatus.map(async (mcp) => {
|
|
253
|
+
var _a;
|
|
254
|
+
const result = await ((_a = this.mcpProxy) === null || _a === void 0 ? void 0 : _a.fetchToolsForMcp(mcp.id, agentId || userId, auth.tokenData));
|
|
255
|
+
return Object.assign({ mcpId: mcp.id }, (result || { tools: [] }));
|
|
256
|
+
}));
|
|
257
|
+
for (const result of toolResults) {
|
|
258
|
+
if (result.status === "fulfilled") {
|
|
259
|
+
if (result.value.tools && result.value.tools.length > 0) {
|
|
260
|
+
mcpTools[result.value.mcpId] = result.value.tools;
|
|
261
|
+
}
|
|
262
|
+
if (result.value.instructions) {
|
|
263
|
+
mcpInstructions[result.value.mcpId] = result.value.instructions;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
logger.error("MCP tool fetch rejected", {
|
|
268
|
+
reason: result.reason instanceof Error
|
|
269
|
+
? result.reason.message
|
|
270
|
+
: String(result.reason),
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Resolve dynamic provider configuration (with template agent fallback)
|
|
276
|
+
const agentSettings = this.settingsResolver && agentId
|
|
277
|
+
? await this.settingsResolver.getEffectiveSettings(agentId)
|
|
278
|
+
: null;
|
|
279
|
+
const providerConfig = await this.resolveProviderConfig((agentSettings === null || agentSettings === void 0 ? void 0 : agentSettings.templateAgentId) || agentId || "", (0, model_selection_1.resolveEffectiveModelRef)(agentSettings), baseUrl);
|
|
280
|
+
// Fetch enabled skills with content for worker filesystem sync
|
|
281
|
+
let skillsConfig = [];
|
|
282
|
+
const mcpContext = {};
|
|
283
|
+
if (this.settingsResolver && agentId) {
|
|
284
|
+
try {
|
|
285
|
+
const settings = await this.settingsResolver.getEffectiveSettings(agentId);
|
|
286
|
+
const skills = ((_a = settings === null || settings === void 0 ? void 0 : settings.skillsConfig) === null || _a === void 0 ? void 0 : _a.skills) || [];
|
|
287
|
+
skillsConfig = skills
|
|
288
|
+
.filter((s) => s.enabled && s.content)
|
|
289
|
+
.map((s) => ({ name: s.name, content: s.content }));
|
|
290
|
+
// Build MCP context map: MCP server ID → skill instructions
|
|
291
|
+
for (const skill of skills) {
|
|
292
|
+
if (skill.enabled &&
|
|
293
|
+
((_b = skill.instructions) === null || _b === void 0 ? void 0 : _b.trim()) &&
|
|
294
|
+
((_c = skill.mcpServers) === null || _c === void 0 ? void 0 : _c.length)) {
|
|
295
|
+
for (const mcp of skill.mcpServers) {
|
|
296
|
+
mcpContext[mcp.id] = skill.instructions.trim();
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
logger.error("Failed to fetch skills config for worker sync", {
|
|
303
|
+
error,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
let systemSkillsInstructions = "";
|
|
308
|
+
if (this.systemSkillsService) {
|
|
309
|
+
try {
|
|
310
|
+
const runtimeSystemSkills = await this.systemSkillsService.getRuntimeSystemSkills();
|
|
311
|
+
if (runtimeSystemSkills.length > 0) {
|
|
312
|
+
// Only write SKILL.md files for system skills without instructions
|
|
313
|
+
// (skills with instructions are fully inlined — no cat needed)
|
|
314
|
+
const existingSkillNames = new Set(skillsConfig.map((s) => s.name));
|
|
315
|
+
let hasSkillFiles = false;
|
|
316
|
+
for (const skill of runtimeSystemSkills) {
|
|
317
|
+
if ((_d = skill.instructions) === null || _d === void 0 ? void 0 : _d.trim())
|
|
318
|
+
continue;
|
|
319
|
+
const workspaceSkillName = `system-${skill.id}`;
|
|
320
|
+
if (!existingSkillNames.has(workspaceSkillName)) {
|
|
321
|
+
skillsConfig.push({
|
|
322
|
+
name: workspaceSkillName,
|
|
323
|
+
content: skill.content,
|
|
324
|
+
});
|
|
325
|
+
hasSkillFiles = true;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
const summaryLines = runtimeSystemSkills.map((skill, index) => {
|
|
329
|
+
var _a;
|
|
330
|
+
const description = skill.description
|
|
331
|
+
? ` - ${skill.description}`
|
|
332
|
+
: "";
|
|
333
|
+
const line = `${index + 1}. ${skill.name} (\`${skill.repo}\`)${description}`;
|
|
334
|
+
if ((_a = skill.instructions) === null || _a === void 0 ? void 0 : _a.trim()) {
|
|
335
|
+
return `${line}\n → ${skill.instructions.trim()}`;
|
|
336
|
+
}
|
|
337
|
+
return line;
|
|
338
|
+
});
|
|
339
|
+
const catHint = hasSkillFiles
|
|
340
|
+
? "\n\nRead full instructions using `cat .skills/system-*/SKILL.md` when needed."
|
|
341
|
+
: "";
|
|
342
|
+
systemSkillsInstructions =
|
|
343
|
+
[
|
|
344
|
+
"## Built-in System Skills",
|
|
345
|
+
"",
|
|
346
|
+
"These system skills are always available in this workspace:",
|
|
347
|
+
"",
|
|
348
|
+
...summaryLines,
|
|
349
|
+
].join("\n") + catHint;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
catch (error) {
|
|
353
|
+
logger.error("Failed to fetch runtime system skills", { error });
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
const mergedSkillsInstructions = [
|
|
357
|
+
contextData.skillsInstructions,
|
|
358
|
+
systemSkillsInstructions,
|
|
359
|
+
]
|
|
360
|
+
.filter(Boolean)
|
|
361
|
+
.join("\n\n");
|
|
362
|
+
logger.info(`Session context for ${userId}: ${Object.keys(mcpConfig.mcpServers || {}).length} MCPs, ${contextData.agentInstructions.length} chars agent instructions, ${contextData.platformInstructions.length} chars platform instructions, ${contextData.networkInstructions.length} chars network instructions, ${mergedSkillsInstructions.length} chars skills instructions, ${contextData.mcpStatus.length} MCP status entries, ${Object.keys(mcpTools).length} MCP tool lists, ${Object.keys(mcpInstructions).length} MCP instructions, ${skillsConfig.length} skills, provider: ${providerConfig.defaultProvider || "none"}`);
|
|
363
|
+
return c.json({
|
|
364
|
+
mcpConfig,
|
|
365
|
+
agentInstructions: contextData.agentInstructions,
|
|
366
|
+
platformInstructions: contextData.platformInstructions,
|
|
367
|
+
networkInstructions: contextData.networkInstructions,
|
|
368
|
+
skillsInstructions: mergedSkillsInstructions,
|
|
369
|
+
mcpStatus: contextData.mcpStatus,
|
|
370
|
+
mcpTools,
|
|
371
|
+
mcpInstructions,
|
|
372
|
+
mcpContext,
|
|
373
|
+
providerConfig,
|
|
374
|
+
skillsConfig,
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
catch (error) {
|
|
378
|
+
logger.error("Failed to generate session context", { error });
|
|
379
|
+
return c.json({ error: "session_context_error" }, 500);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
authenticateWorker(c) {
|
|
383
|
+
const authHeader = c.req.header("authorization");
|
|
384
|
+
if (!authHeader || !authHeader.startsWith("Bearer ")) {
|
|
385
|
+
return null;
|
|
386
|
+
}
|
|
387
|
+
const token = authHeader.substring(7);
|
|
388
|
+
const tokenData = (0, core_1.verifyWorkerToken)(token);
|
|
389
|
+
if (!tokenData) {
|
|
390
|
+
logger.warn("Invalid token");
|
|
391
|
+
return null;
|
|
392
|
+
}
|
|
393
|
+
return { tokenData, token };
|
|
394
|
+
}
|
|
395
|
+
getRequestBaseUrl(c) {
|
|
396
|
+
const forwardedProto = c.req.header("x-forwarded-proto");
|
|
397
|
+
const protocolCandidate = Array.isArray(forwardedProto)
|
|
398
|
+
? forwardedProto[0]
|
|
399
|
+
: forwardedProto === null || forwardedProto === void 0 ? void 0 : forwardedProto.split(",")[0];
|
|
400
|
+
const protocol = (protocolCandidate || "http").trim();
|
|
401
|
+
const host = c.req.header("host");
|
|
402
|
+
if (host) {
|
|
403
|
+
return `${protocol}://${host}`;
|
|
404
|
+
}
|
|
405
|
+
return this.publicGatewayUrl;
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Get active worker connections
|
|
409
|
+
*/
|
|
410
|
+
getActiveConnections() {
|
|
411
|
+
return this.connectionManager.getActiveConnections();
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Resolve dynamic provider configuration for a given agent.
|
|
415
|
+
* Mirrors the provider resolution logic in base-deployment-manager's
|
|
416
|
+
* generateEnvironmentVariables() but returns config values instead of env vars.
|
|
417
|
+
*/
|
|
418
|
+
async resolveProviderConfig(agentId, agentModel, requestBaseUrl) {
|
|
419
|
+
var _a, _b, _c, _d;
|
|
420
|
+
if (!this.providerCatalogService || !agentId) {
|
|
421
|
+
return {};
|
|
422
|
+
}
|
|
423
|
+
const effectiveProviders = await this.providerCatalogService.getInstalledModules(agentId);
|
|
424
|
+
if (effectiveProviders.length === 0) {
|
|
425
|
+
return {};
|
|
426
|
+
}
|
|
427
|
+
// Determine primary provider
|
|
428
|
+
let primaryProvider = agentModel
|
|
429
|
+
? await this.providerCatalogService.findProviderForModel(agentModel, effectiveProviders)
|
|
430
|
+
: undefined;
|
|
431
|
+
if (!primaryProvider) {
|
|
432
|
+
for (const candidate of effectiveProviders) {
|
|
433
|
+
if (candidate.hasSystemKey() ||
|
|
434
|
+
(await candidate.hasCredentials(agentId))) {
|
|
435
|
+
primaryProvider = candidate;
|
|
436
|
+
break;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
// Build proxy base URL mappings for all installed providers
|
|
441
|
+
// Use the request base URL (the worker's DISPATCHER_URL) for internal routing
|
|
442
|
+
const proxyBaseUrl = `${requestBaseUrl || this.publicGatewayUrl}/api/proxy`;
|
|
443
|
+
const providerBaseUrlMappings = {};
|
|
444
|
+
for (const provider of effectiveProviders) {
|
|
445
|
+
Object.assign(providerBaseUrlMappings, provider.getProxyBaseUrlMappings(proxyBaseUrl, agentId));
|
|
446
|
+
}
|
|
447
|
+
// Build CLI backend configs
|
|
448
|
+
const cliBackends = [];
|
|
449
|
+
for (const provider of effectiveProviders) {
|
|
450
|
+
const config = (_a = provider.getCliBackendConfig) === null || _a === void 0 ? void 0 : _a.call(provider);
|
|
451
|
+
if (config) {
|
|
452
|
+
cliBackends.push(Object.assign({ providerId: provider.providerId }, config));
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
// Collect metadata from config-driven providers for worker model resolution
|
|
456
|
+
const configProviders = {};
|
|
457
|
+
for (const provider of effectiveProviders) {
|
|
458
|
+
const meta = (_c = (_b = provider).getProviderMetadata) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
459
|
+
if (meta) {
|
|
460
|
+
configProviders[provider.providerId] = meta;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
// Build credential placeholders for proxy mode — in-process workers need
|
|
464
|
+
// these so the runtime doesn't reject requests before they reach the proxy.
|
|
465
|
+
const credentialPlaceholders = {};
|
|
466
|
+
for (const provider of effectiveProviders) {
|
|
467
|
+
if (provider.hasSystemKey() || (await provider.hasCredentials(agentId))) {
|
|
468
|
+
const credVar = provider.getCredentialEnvVarName();
|
|
469
|
+
const placeholder = provider.buildCredentialPlaceholder
|
|
470
|
+
? await provider.buildCredentialPlaceholder(agentId)
|
|
471
|
+
: "lobu-proxy";
|
|
472
|
+
credentialPlaceholders[credVar] = placeholder;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
const result = {};
|
|
476
|
+
if (primaryProvider) {
|
|
477
|
+
result.credentialEnvVarName = primaryProvider.getCredentialEnvVarName();
|
|
478
|
+
const upstream = (_d = primaryProvider.getUpstreamConfig) === null || _d === void 0 ? void 0 : _d.call(primaryProvider);
|
|
479
|
+
if (upstream === null || upstream === void 0 ? void 0 : upstream.slug) {
|
|
480
|
+
result.defaultProvider = upstream.slug;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
if (agentModel) {
|
|
484
|
+
result.defaultModel = agentModel;
|
|
485
|
+
}
|
|
486
|
+
if (Object.keys(providerBaseUrlMappings).length > 0) {
|
|
487
|
+
result.providerBaseUrlMappings = providerBaseUrlMappings;
|
|
488
|
+
}
|
|
489
|
+
if (cliBackends.length > 0) {
|
|
490
|
+
result.cliBackends = cliBackends;
|
|
491
|
+
}
|
|
492
|
+
if (Object.keys(configProviders).length > 0) {
|
|
493
|
+
result.configProviders = configProviders;
|
|
494
|
+
}
|
|
495
|
+
if (Object.keys(credentialPlaceholders).length > 0) {
|
|
496
|
+
result.credentialPlaceholders = credentialPlaceholders;
|
|
497
|
+
}
|
|
498
|
+
return result;
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Shutdown gateway
|
|
502
|
+
*/
|
|
503
|
+
shutdown() {
|
|
504
|
+
this.connectionManager.shutdown();
|
|
505
|
+
this.jobRouter.shutdown();
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
exports.WorkerGateway = WorkerGateway;
|
|
509
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
import type { IMessageQueue } from "../infrastructure/queue";
|
|
3
|
+
import type { ISessionManager } from "../session";
|
|
4
|
+
import type { WorkerConnectionManager } from "./connection-manager";
|
|
5
|
+
/**
|
|
6
|
+
* Routes jobs from queues to workers via SSE connections
|
|
7
|
+
* Manages job acknowledgments and timeouts
|
|
8
|
+
*/
|
|
9
|
+
export declare class WorkerJobRouter {
|
|
10
|
+
private queue;
|
|
11
|
+
private connectionManager;
|
|
12
|
+
private pendingJobs;
|
|
13
|
+
constructor(queue: IMessageQueue, connectionManager: WorkerConnectionManager, _sessionManager: ISessionManager);
|
|
14
|
+
/**
|
|
15
|
+
* Register a worker to receive jobs from its deployment queue
|
|
16
|
+
* Each worker listens on its own queue: thread_message_{deploymentName}
|
|
17
|
+
*
|
|
18
|
+
* Note: This is idempotent - BullMQ's queue.work() handles duplicate registrations gracefully.
|
|
19
|
+
* Safe to call multiple times (e.g., on worker reconnection or gateway restart).
|
|
20
|
+
*/
|
|
21
|
+
registerWorker(deploymentName: string): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Pause the BullMQ worker when SSE connection is lost
|
|
24
|
+
* This prevents jobs from being processed when worker can't receive them
|
|
25
|
+
*/
|
|
26
|
+
pauseWorker(deploymentName: string): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Resume the BullMQ worker when SSE connection is established
|
|
29
|
+
* Jobs will now be processed and sent to the worker
|
|
30
|
+
*/
|
|
31
|
+
resumeWorker(deploymentName: string): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Handle a job from the queue and route it to the worker.
|
|
34
|
+
*
|
|
35
|
+
* Sends the job via SSE and waits for a delivery receipt from the worker.
|
|
36
|
+
* If the worker doesn't acknowledge within the timeout, the job is retried
|
|
37
|
+
* by BullMQ. This prevents jobs from being silently lost when sent to a
|
|
38
|
+
* stale SSE connection (e.g., after a container dies without cleanly closing TCP).
|
|
39
|
+
*/
|
|
40
|
+
private handleJob;
|
|
41
|
+
/**
|
|
42
|
+
* Wait for the worker to acknowledge receipt of a job.
|
|
43
|
+
* Rejects after timeout so BullMQ retries the job.
|
|
44
|
+
*/
|
|
45
|
+
private awaitDeliveryReceipt;
|
|
46
|
+
/**
|
|
47
|
+
* Acknowledge job completion from worker
|
|
48
|
+
* Called when worker sends HTTP response
|
|
49
|
+
*/
|
|
50
|
+
acknowledgeJob(jobId: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* Get number of pending jobs
|
|
53
|
+
*/
|
|
54
|
+
getPendingJobCount(): number;
|
|
55
|
+
/**
|
|
56
|
+
* Shutdown job router
|
|
57
|
+
*/
|
|
58
|
+
shutdown(): void;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=job-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-router.d.ts","sourceRoot":"","sources":["../../src/gateway/job-router.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAWpE;;;GAGG;AACH,qBAAa,eAAe;IAIxB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,iBAAiB;IAJ3B,OAAO,CAAC,WAAW,CAAsC;gBAG/C,KAAK,EAAE,aAAa,EACpB,iBAAiB,EAAE,uBAAuB,EAClD,eAAe,EAAE,eAAe;IAGlC;;;;;;OAMG;IACG,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB3D;;;OAGG;IACG,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxD;;;OAGG;IACG,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzD;;;;;;;OAOG;YACW,SAAS;IAyCvB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAgC5B;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAYnC;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;OAEG;IACH,QAAQ,IAAI,IAAI;CASjB"}
|