@cats-inc/cats-platform 0.1.21 → 0.3.4
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/.env.example +3 -7
- package/README.md +35 -0
- package/build/desktop/bootstrapNavigation.d.ts.map +1 -1
- package/build/desktop/bootstrapNavigation.js +6 -13
- package/build/desktop/bootstrapNavigation.js.map +1 -1
- package/build/desktop/bootstrapPage.d.ts.map +1 -1
- package/build/desktop/bootstrapPage.js +63 -86
- package/build/desktop/bootstrapPage.js.map +1 -1
- package/build/desktop/cliInventoryProbe.d.ts +11 -2
- package/build/desktop/cliInventoryProbe.d.ts.map +1 -1
- package/build/desktop/cliInventoryProbe.js +19 -13
- package/build/desktop/cliInventoryProbe.js.map +1 -1
- package/build/desktop/config.d.ts +0 -4
- package/build/desktop/config.d.ts.map +1 -1
- package/build/desktop/config.js +1 -6
- package/build/desktop/config.js.map +1 -1
- package/build/desktop/contracts.d.ts +12 -2
- package/build/desktop/contracts.d.ts.map +1 -1
- package/build/desktop/contracts.js +1 -2
- package/build/desktop/contracts.js.map +1 -1
- package/build/desktop/hostVersion.d.ts.map +1 -1
- package/build/desktop/hostVersion.js +3 -5
- package/build/desktop/hostVersion.js.map +1 -1
- package/build/desktop/main.js +205 -256
- package/build/desktop/main.js.map +1 -1
- package/build/desktop/packaging.d.ts +2 -0
- package/build/desktop/packaging.d.ts.map +1 -1
- package/build/desktop/packaging.js +34 -14
- package/build/desktop/packaging.js.map +1 -1
- package/build/desktop/preload.cjs +9 -0
- package/build/desktop/preload.cjs.map +1 -1
- package/build/desktop/processSupervisor.d.ts.map +1 -1
- package/build/desktop/processSupervisor.js +3 -0
- package/build/desktop/processSupervisor.js.map +1 -1
- package/build/desktop/providerManager.d.ts +46 -0
- package/build/desktop/providerManager.d.ts.map +1 -0
- package/build/desktop/providerManager.js +220 -0
- package/build/desktop/providerManager.js.map +1 -0
- package/build/desktop/providerSelection.d.ts +38 -0
- package/build/desktop/providerSelection.d.ts.map +1 -0
- package/build/desktop/providerSelection.js +118 -0
- package/build/desktop/providerSelection.js.map +1 -0
- package/build/desktop/readiness.d.ts +2 -0
- package/build/desktop/readiness.d.ts.map +1 -1
- package/build/desktop/readiness.js +14 -33
- package/build/desktop/readiness.js.map +1 -1
- package/build/desktop/setupAssets.d.ts.map +1 -1
- package/build/desktop/setupAssets.js +28 -14
- package/build/desktop/setupAssets.js.map +1 -1
- package/build/desktop/setupAudit.d.ts +4 -3
- package/build/desktop/setupAudit.d.ts.map +1 -1
- package/build/desktop/setupAudit.js +18 -34
- package/build/desktop/setupAudit.js.map +1 -1
- package/build/desktop/setupBridge.js +1 -1
- package/build/desktop/setupBridge.js.map +1 -1
- package/build/desktop/setupPrerequisites.d.ts +11 -0
- package/build/desktop/setupPrerequisites.d.ts.map +1 -0
- package/build/desktop/setupPrerequisites.js +47 -0
- package/build/desktop/setupPrerequisites.js.map +1 -0
- package/build/desktop/updateDialog.d.ts +27 -1
- package/build/desktop/updateDialog.d.ts.map +1 -1
- package/build/desktop/updateDialog.js +85 -5
- package/build/desktop/updateDialog.js.map +1 -1
- package/build/renderer/assets/ActiveSessionPermissionChip-B49WcZBJ.js +1 -0
- package/build/renderer/assets/App-BpxZB5ym.js +2 -0
- package/build/renderer/assets/App-DYTUfAl6.js +1 -0
- package/build/renderer/assets/App-DxsV-tKS.css +1 -0
- package/build/renderer/assets/{App-DKOSn0o_.js → App-boB4WrmU.js} +1 -1
- package/build/renderer/assets/WorkspaceAppRoutes-CPqz85iw.js +1 -0
- package/build/renderer/assets/app-C52wwCGz.js +85 -0
- package/build/renderer/assets/app-CqnsY5ed.css +1 -0
- package/build/renderer/assets/{client-BdGHAUoK.js → client-DREGSZqQ.js} +1 -1
- package/build/renderer/assets/conversationSidebarRecentEntries-DK0iWS73.js +6 -0
- package/build/renderer/assets/{screenshotOverlay-DfBcolX-.js → screenshotOverlay-EF07cXvw.js} +1 -1
- package/build/renderer/assets/{useDraftSessionChips-DCIId0eY.js → useDraftSessionChips-BdZ_B1gy.js} +1 -1
- package/build/renderer/desktop/overlay/index.html +2 -2
- package/build/renderer/index.html +3 -3
- package/build/server/app/renderer/auth/api.d.ts.map +1 -1
- package/build/server/app/renderer/auth/api.js +4 -1
- package/build/server/app/renderer/auth/api.js.map +1 -1
- package/build/server/app/renderer/providerCatalogClient.d.ts.map +1 -1
- package/build/server/app/renderer/providerCatalogClient.js +34 -12
- package/build/server/app/renderer/providerCatalogClient.js.map +1 -1
- package/build/server/app/renderer/providerClientInvalidation.d.ts +6 -0
- package/build/server/app/renderer/providerClientInvalidation.d.ts.map +1 -0
- package/build/server/app/renderer/providerClientInvalidation.js +12 -0
- package/build/server/app/renderer/providerClientInvalidation.js.map +1 -0
- package/build/server/app/renderer/providerReadLoop.d.ts +5 -0
- package/build/server/app/renderer/providerReadLoop.d.ts.map +1 -0
- package/build/server/app/renderer/providerReadLoop.js +52 -0
- package/build/server/app/renderer/providerReadLoop.js.map +1 -0
- package/build/server/app/renderer/providerRegistryClient.d.ts +3 -2
- package/build/server/app/renderer/providerRegistryClient.d.ts.map +1 -1
- package/build/server/app/renderer/providerRegistryClient.js +51 -53
- package/build/server/app/renderer/providerRegistryClient.js.map +1 -1
- package/build/server/app/server/appPackageRoutes.d.ts +2 -0
- package/build/server/app/server/appPackageRoutes.d.ts.map +1 -1
- package/build/server/app/server/appPackageRoutes.js +105 -0
- package/build/server/app/server/appPackageRoutes.js.map +1 -1
- package/build/server/app/server/authGatePolicy.js +14 -1
- package/build/server/app/server/authGatePolicy.js.map +1 -1
- package/build/server/app/server/contracts.d.ts +15 -0
- package/build/server/app/server/contracts.d.ts.map +1 -1
- package/build/server/app/server/dependencies.d.ts.map +1 -1
- package/build/server/app/server/dependencies.js +42 -1
- package/build/server/app/server/dependencies.js.map +1 -1
- package/build/server/app/server/goldenPathStartupResume.d.ts +55 -0
- package/build/server/app/server/goldenPathStartupResume.d.ts.map +1 -0
- package/build/server/app/server/goldenPathStartupResume.js +109 -0
- package/build/server/app/server/goldenPathStartupResume.js.map +1 -0
- package/build/server/app/server/platformSetupRoutes.d.ts.map +1 -1
- package/build/server/app/server/platformSetupRoutes.js +1 -13
- package/build/server/app/server/platformSetupRoutes.js.map +1 -1
- package/build/server/app/server/polling.d.ts.map +1 -1
- package/build/server/app/server/polling.js +2 -0
- package/build/server/app/server/polling.js.map +1 -1
- package/build/server/app/server/requestRouter.d.ts.map +1 -1
- package/build/server/app/server/requestRouter.js +30 -0
- package/build/server/app/server/requestRouter.js.map +1 -1
- package/build/server/app/server/runtimeSurfaceProxy.d.ts.map +1 -1
- package/build/server/app/server/runtimeSurfaceProxy.js +4 -2
- package/build/server/app/server/runtimeSurfaceProxy.js.map +1 -1
- package/build/server/app/server/startupRecovery.d.ts.map +1 -1
- package/build/server/app/server/startupRecovery.js +5 -0
- package/build/server/app/server/startupRecovery.js.map +1 -1
- package/build/server/app/server/subscribeRoutes.d.ts.map +1 -1
- package/build/server/app/server/subscribeRoutes.js +5 -3
- package/build/server/app/server/subscribeRoutes.js.map +1 -1
- package/build/server/app/server/telegramCommandSurface.d.ts +29 -0
- package/build/server/app/server/telegramCommandSurface.d.ts.map +1 -0
- package/build/server/app/server/telegramCommandSurface.js +123 -0
- package/build/server/app/server/telegramCommandSurface.js.map +1 -0
- package/build/server/app/server/transportWorkGoldenPath.d.ts +82 -0
- package/build/server/app/server/transportWorkGoldenPath.d.ts.map +1 -0
- package/build/server/app/server/transportWorkGoldenPath.js +307 -0
- package/build/server/app/server/transportWorkGoldenPath.js.map +1 -0
- package/build/server/config.d.ts +21 -0
- package/build/server/config.d.ts.map +1 -1
- package/build/server/config.js +12 -0
- package/build/server/config.js.map +1 -1
- package/build/server/design/components/providerModelFieldsSupport.d.ts +5 -24
- package/build/server/design/components/providerModelFieldsSupport.d.ts.map +1 -1
- package/build/server/design/components/providerModelFieldsSupport.js +65 -70
- package/build/server/design/components/providerModelFieldsSupport.js.map +1 -1
- package/build/server/design/components/useProviderCatalogState.d.ts +2 -2
- package/build/server/design/components/useProviderCatalogState.d.ts.map +1 -1
- package/build/server/design/components/useProviderCatalogState.js +71 -151
- package/build/server/design/components/useProviderCatalogState.js.map +1 -1
- package/build/server/design/components/useProviderModelFieldActions.js +2 -2
- package/build/server/design/components/useProviderModelFieldActions.js.map +1 -1
- package/build/server/design/components/useProviderRegistryState.d.ts +1 -7
- package/build/server/design/components/useProviderRegistryState.d.ts.map +1 -1
- package/build/server/design/components/useProviderRegistryState.js +41 -104
- package/build/server/design/components/useProviderRegistryState.js.map +1 -1
- package/build/server/design/components/useProviderTargetReconciliation.d.ts +1 -0
- package/build/server/design/components/useProviderTargetReconciliation.d.ts.map +1 -1
- package/build/server/design/components/useProviderTargetReconciliation.js +3 -2
- package/build/server/design/components/useProviderTargetReconciliation.js.map +1 -1
- package/build/server/index.js +4 -0
- package/build/server/index.js.map +1 -1
- package/build/server/platform/apps/packageInstaller.d.ts +19 -0
- package/build/server/platform/apps/packageInstaller.d.ts.map +1 -0
- package/build/server/platform/apps/packageInstaller.js +92 -0
- package/build/server/platform/apps/packageInstaller.js.map +1 -0
- package/build/server/platform/apps/registry.d.ts +6 -0
- package/build/server/platform/apps/registry.d.ts.map +1 -1
- package/build/server/platform/apps/registry.js +24 -0
- package/build/server/platform/apps/registry.js.map +1 -1
- package/build/server/platform/apps/renderer.d.ts +6 -0
- package/build/server/platform/apps/renderer.d.ts.map +1 -0
- package/build/server/platform/apps/renderer.js +18 -0
- package/build/server/platform/apps/renderer.js.map +1 -0
- package/build/server/platform/orchestration/entitySubscriptions/channel.d.ts +2 -1
- package/build/server/platform/orchestration/entitySubscriptions/channel.d.ts.map +1 -1
- package/build/server/platform/orchestration/entitySubscriptions/channel.js +3 -18
- package/build/server/platform/orchestration/entitySubscriptions/channel.js.map +1 -1
- package/build/server/platform/orchestration/entitySubscriptions/index.d.ts +1 -0
- package/build/server/platform/orchestration/entitySubscriptions/index.d.ts.map +1 -1
- package/build/server/platform/orchestration/entitySubscriptions/index.js.map +1 -1
- package/build/server/platform/runtime/deliveryClient.d.ts +111 -0
- package/build/server/platform/runtime/deliveryClient.d.ts.map +1 -0
- package/build/server/platform/runtime/deliveryClient.js +289 -0
- package/build/server/platform/runtime/deliveryClient.js.map +1 -0
- package/build/server/platform/supervision/providerCapabilityBootstrapYaml.d.ts +1 -0
- package/build/server/platform/supervision/providerCapabilityBootstrapYaml.d.ts.map +1 -1
- package/build/server/platform/supervision/providerCapabilityBootstrapYaml.js +10 -0
- package/build/server/platform/supervision/providerCapabilityBootstrapYaml.js.map +1 -1
- package/build/server/platform/supervision/runtimeBoundary.d.ts +11 -1
- package/build/server/platform/supervision/runtimeBoundary.d.ts.map +1 -1
- package/build/server/platform/supervision/runtimeBoundary.js +2 -2
- package/build/server/platform/supervision/runtimeBoundary.js.map +1 -1
- package/build/server/platform/transports/telegram/bridge.d.ts +18 -0
- package/build/server/platform/transports/telegram/bridge.d.ts.map +1 -1
- package/build/server/platform/transports/telegram/bridge.js +176 -0
- package/build/server/platform/transports/telegram/bridge.js.map +1 -1
- package/build/server/platform/transports/telegram/commandPort.d.ts +40 -0
- package/build/server/platform/transports/telegram/commandPort.d.ts.map +1 -0
- package/build/server/platform/transports/telegram/commandPort.js +17 -0
- package/build/server/platform/transports/telegram/commandPort.js.map +1 -0
- package/build/server/platform/transports/telegram/commandRouter.d.ts +22 -0
- package/build/server/platform/transports/telegram/commandRouter.d.ts.map +1 -1
- package/build/server/platform/transports/telegram/commandRouter.js.map +1 -1
- package/build/server/platform/transports/telegram/commands/index.d.ts.map +1 -1
- package/build/server/platform/transports/telegram/commands/index.js +38 -0
- package/build/server/platform/transports/telegram/commands/index.js.map +1 -1
- package/build/server/platform/transports/telegram/ingressDispatch.d.ts +56 -0
- package/build/server/platform/transports/telegram/ingressDispatch.d.ts.map +1 -0
- package/build/server/platform/transports/telegram/ingressDispatch.js +93 -0
- package/build/server/platform/transports/telegram/ingressDispatch.js.map +1 -0
- package/build/server/platform/transports/telegram/polling.d.ts +34 -0
- package/build/server/platform/transports/telegram/polling.d.ts.map +1 -1
- package/build/server/platform/transports/telegram/polling.js +86 -9
- package/build/server/platform/transports/telegram/polling.js.map +1 -1
- package/build/server/platform/transports/telegram/relay/index.d.ts +3 -0
- package/build/server/platform/transports/telegram/relay/index.d.ts.map +1 -1
- package/build/server/platform/transports/telegram/relay/index.js +5 -1
- package/build/server/platform/transports/telegram/relay/index.js.map +1 -1
- package/build/server/platform/transports/telegram/relay/ingress.d.ts +2 -0
- package/build/server/platform/transports/telegram/relay/ingress.d.ts.map +1 -1
- package/build/server/platform/transports/telegram/relay/ingress.js +1 -1
- package/build/server/platform/transports/telegram/relay/ingress.js.map +1 -1
- package/build/server/platform/transports/work-delivery/actionTokens.d.ts +66 -0
- package/build/server/platform/transports/work-delivery/actionTokens.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/actionTokens.js +145 -0
- package/build/server/platform/transports/work-delivery/actionTokens.js.map +1 -0
- package/build/server/platform/transports/work-delivery/contracts.d.ts +172 -0
- package/build/server/platform/transports/work-delivery/contracts.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/contracts.js +26 -0
- package/build/server/platform/transports/work-delivery/contracts.js.map +1 -0
- package/build/server/platform/transports/work-delivery/deliveryGates.d.ts +32 -0
- package/build/server/platform/transports/work-delivery/deliveryGates.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/deliveryGates.js +45 -0
- package/build/server/platform/transports/work-delivery/deliveryGates.js.map +1 -0
- package/build/server/platform/transports/work-delivery/inboundClassification.d.ts +31 -0
- package/build/server/platform/transports/work-delivery/inboundClassification.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/inboundClassification.js +52 -0
- package/build/server/platform/transports/work-delivery/inboundClassification.js.map +1 -0
- package/build/server/platform/transports/work-delivery/outbox.d.ts +84 -0
- package/build/server/platform/transports/work-delivery/outbox.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/outbox.js +270 -0
- package/build/server/platform/transports/work-delivery/outbox.js.map +1 -0
- package/build/server/platform/transports/work-delivery/permissionEnvelope.d.ts +57 -0
- package/build/server/platform/transports/work-delivery/permissionEnvelope.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/permissionEnvelope.js +74 -0
- package/build/server/platform/transports/work-delivery/permissionEnvelope.js.map +1 -0
- package/build/server/platform/transports/work-delivery/port.d.ts +60 -0
- package/build/server/platform/transports/work-delivery/port.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/port.js +15 -0
- package/build/server/platform/transports/work-delivery/port.js.map +1 -0
- package/build/server/platform/transports/work-delivery/proposal.d.ts +31 -0
- package/build/server/platform/transports/work-delivery/proposal.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/proposal.js +59 -0
- package/build/server/platform/transports/work-delivery/proposal.js.map +1 -0
- package/build/server/platform/transports/work-delivery/readiness.d.ts +61 -0
- package/build/server/platform/transports/work-delivery/readiness.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/readiness.js +123 -0
- package/build/server/platform/transports/work-delivery/readiness.js.map +1 -0
- package/build/server/platform/transports/work-delivery/stageProjection.d.ts +43 -0
- package/build/server/platform/transports/work-delivery/stageProjection.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/stageProjection.js +132 -0
- package/build/server/platform/transports/work-delivery/stageProjection.js.map +1 -0
- package/build/server/platform/transports/work-delivery/stateStore.d.ts +21 -0
- package/build/server/platform/transports/work-delivery/stateStore.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/stateStore.js +193 -0
- package/build/server/platform/transports/work-delivery/stateStore.js.map +1 -0
- package/build/server/platform/transports/work-delivery/telemetry.d.ts +49 -0
- package/build/server/platform/transports/work-delivery/telemetry.d.ts.map +1 -0
- package/build/server/platform/transports/work-delivery/telemetry.js +80 -0
- package/build/server/platform/transports/work-delivery/telemetry.js.map +1 -0
- package/build/server/products/chat/api/contracts.d.ts +10 -0
- package/build/server/products/chat/api/contracts.d.ts.map +1 -1
- package/build/server/products/chat/api/resources/channelRoutes.d.ts.map +1 -1
- package/build/server/products/chat/api/resources/channelRoutes.js +27 -1
- package/build/server/products/chat/api/resources/channelRoutes.js.map +1 -1
- package/build/server/products/chat/api/routeSupport.d.ts +17 -1
- package/build/server/products/chat/api/routeSupport.d.ts.map +1 -1
- package/build/server/products/chat/api/routeSupport.js +27 -4
- package/build/server/products/chat/api/routeSupport.js.map +1 -1
- package/build/server/products/chat/api/setupRoutes.d.ts.map +1 -1
- package/build/server/products/chat/api/setupRoutes.js +23 -8
- package/build/server/products/chat/api/setupRoutes.js.map +1 -1
- package/build/server/products/chat/state/model/channelExecutionTargets.d.ts +15 -0
- package/build/server/products/chat/state/model/channelExecutionTargets.d.ts.map +1 -1
- package/build/server/products/chat/state/model/channelExecutionTargets.js +25 -0
- package/build/server/products/chat/state/model/channelExecutionTargets.js.map +1 -1
- package/build/server/products/chat/state/model/index.d.ts +1 -1
- package/build/server/products/chat/state/model/index.d.ts.map +1 -1
- package/build/server/products/chat/state/model/index.js +1 -1
- package/build/server/products/chat/state/model/index.js.map +1 -1
- package/build/server/products/chat/state/model/readModels.d.ts +1 -0
- package/build/server/products/chat/state/model/readModels.d.ts.map +1 -1
- package/build/server/products/chat/state/model/readModels.js +2 -1
- package/build/server/products/chat/state/model/readModels.js.map +1 -1
- package/build/server/products/code/api/relayRoutes.d.ts.map +1 -1
- package/build/server/products/code/api/relayRoutes.js +36 -7
- package/build/server/products/code/api/relayRoutes.js.map +1 -1
- package/build/server/products/code/state/relayState.d.ts +2 -1
- package/build/server/products/code/state/relayState.d.ts.map +1 -1
- package/build/server/products/code/state/relayState.js +7 -7
- package/build/server/products/code/state/relayState.js.map +1 -1
- package/build/server/products/shared/api/workspaceContracts.d.ts +5 -0
- package/build/server/products/shared/api/workspaceContracts.d.ts.map +1 -1
- package/build/server/products/shared/renderer/api/appShell.d.ts +1 -0
- package/build/server/products/shared/renderer/api/appShell.d.ts.map +1 -1
- package/build/server/products/shared/renderer/api/appShell.js +9 -0
- package/build/server/products/shared/renderer/api/appShell.js.map +1 -1
- package/build/server/products/work/api/goldenPathProjection.d.ts +156 -0
- package/build/server/products/work/api/goldenPathProjection.d.ts.map +1 -0
- package/build/server/products/work/api/goldenPathProjection.js +252 -0
- package/build/server/products/work/api/goldenPathProjection.js.map +1 -0
- package/build/server/products/work/api/index.d.ts +54 -1
- package/build/server/products/work/api/index.d.ts.map +1 -1
- package/build/server/products/work/api/index.js +182 -4
- package/build/server/products/work/api/index.js.map +1 -1
- package/build/server/products/work/api/projection.d.ts +7 -1
- package/build/server/products/work/api/projection.d.ts.map +1 -1
- package/build/server/products/work/api/projection.js +7 -1
- package/build/server/products/work/api/projection.js.map +1 -1
- package/build/server/products/work/shared/apiPaths.d.ts +8 -0
- package/build/server/products/work/shared/apiPaths.d.ts.map +1 -1
- package/build/server/products/work/shared/apiPaths.js +8 -0
- package/build/server/products/work/shared/apiPaths.js.map +1 -1
- package/build/server/products/work/shared/workGoldenPathMessages.d.ts +83 -0
- package/build/server/products/work/shared/workGoldenPathMessages.d.ts.map +1 -0
- package/build/server/products/work/shared/workGoldenPathMessages.js +211 -0
- package/build/server/products/work/shared/workGoldenPathMessages.js.map +1 -0
- package/build/server/products/work/shared/workGoldenPathMetadata.d.ts +45 -0
- package/build/server/products/work/shared/workGoldenPathMetadata.d.ts.map +1 -0
- package/build/server/products/work/shared/workGoldenPathMetadata.js +122 -0
- package/build/server/products/work/shared/workGoldenPathMetadata.js.map +1 -0
- package/build/server/products/work/state/workCompletionEvidence.d.ts +42 -0
- package/build/server/products/work/state/workCompletionEvidence.d.ts.map +1 -0
- package/build/server/products/work/state/workCompletionEvidence.js +59 -0
- package/build/server/products/work/state/workCompletionEvidence.js.map +1 -0
- package/build/server/products/work/state/workExecutionTaskDelegate.d.ts +16 -0
- package/build/server/products/work/state/workExecutionTaskDelegate.d.ts.map +1 -1
- package/build/server/products/work/state/workExecutionTaskDelegate.js +91 -68
- package/build/server/products/work/state/workExecutionTaskDelegate.js.map +1 -1
- package/build/server/products/work/state/workGoldenPathAdmission.d.ts +78 -0
- package/build/server/products/work/state/workGoldenPathAdmission.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathAdmission.js +249 -0
- package/build/server/products/work/state/workGoldenPathAdmission.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathDeliveryEvidence.d.ts +33 -0
- package/build/server/products/work/state/workGoldenPathDeliveryEvidence.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathDeliveryEvidence.js +161 -0
- package/build/server/products/work/state/workGoldenPathDeliveryEvidence.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathIntake.d.ts +34 -0
- package/build/server/products/work/state/workGoldenPathIntake.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathIntake.js +50 -0
- package/build/server/products/work/state/workGoldenPathIntake.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathLifecycle.d.ts +44 -0
- package/build/server/products/work/state/workGoldenPathLifecycle.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathLifecycle.js +146 -0
- package/build/server/products/work/state/workGoldenPathLifecycle.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathPublish.d.ts +84 -0
- package/build/server/products/work/state/workGoldenPathPublish.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathPublish.js +488 -0
- package/build/server/products/work/state/workGoldenPathPublish.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathRunner.d.ts +121 -0
- package/build/server/products/work/state/workGoldenPathRunner.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathRunner.js +447 -0
- package/build/server/products/work/state/workGoldenPathRunner.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathRuntimeExecutor.d.ts +74 -0
- package/build/server/products/work/state/workGoldenPathRuntimeExecutor.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathRuntimeExecutor.js +239 -0
- package/build/server/products/work/state/workGoldenPathRuntimeExecutor.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathService.d.ts +152 -0
- package/build/server/products/work/state/workGoldenPathService.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathService.js +1057 -0
- package/build/server/products/work/state/workGoldenPathService.js.map +1 -0
- package/build/server/products/work/state/workGoldenPathTelegramPort.d.ts +87 -0
- package/build/server/products/work/state/workGoldenPathTelegramPort.d.ts.map +1 -0
- package/build/server/products/work/state/workGoldenPathTelegramPort.js +220 -0
- package/build/server/products/work/state/workGoldenPathTelegramPort.js.map +1 -0
- package/build/server/runtime/client.d.ts +13 -0
- package/build/server/runtime/client.d.ts.map +1 -1
- package/build/server/runtime/client.js +44 -1
- package/build/server/runtime/client.js.map +1 -1
- package/build/server/runtime/setup.d.ts +14 -4
- package/build/server/runtime/setup.d.ts.map +1 -1
- package/build/server/runtime/setup.js +17 -19
- package/build/server/runtime/setup.js.map +1 -1
- package/build/server/runtime/usageSnapshot.d.ts +3 -0
- package/build/server/runtime/usageSnapshot.d.ts.map +1 -0
- package/build/server/runtime/usageSnapshot.js +69 -0
- package/build/server/runtime/usageSnapshot.js.map +1 -0
- package/build/server/server/routes/providerCapabilityBootstrap.d.ts +69 -0
- package/build/server/server/routes/providerCapabilityBootstrap.d.ts.map +1 -0
- package/build/server/server/routes/providerCapabilityBootstrap.js +165 -0
- package/build/server/server/routes/providerCapabilityBootstrap.js.map +1 -0
- package/build/server/server/routes/providers.d.ts.map +1 -1
- package/build/server/server/routes/providers.js +133 -131
- package/build/server/server/routes/providers.js.map +1 -1
- package/build/server/server/routes/telegram.d.ts +9 -0
- package/build/server/server/routes/telegram.d.ts.map +1 -1
- package/build/server/server/routes/telegram.js +79 -72
- package/build/server/server/routes/telegram.js.map +1 -1
- package/build/server/shared/catsAppManifest.d.ts +3 -1
- package/build/server/shared/catsAppManifest.d.ts.map +1 -1
- package/build/server/shared/catsAppManifest.js +2 -0
- package/build/server/shared/catsAppManifest.js.map +1 -1
- package/build/server/shared/desktopRecoveryBridge.d.ts +2 -1
- package/build/server/shared/desktopRecoveryBridge.d.ts.map +1 -1
- package/build/server/shared/desktopRecoveryBridge.js.map +1 -1
- package/build/server/shared/executionLabel.d.ts.map +1 -1
- package/build/server/shared/executionLabel.js +8 -1
- package/build/server/shared/executionLabel.js.map +1 -1
- package/build/server/shared/i18n/catalogs/en.d.ts.map +1 -1
- package/build/server/shared/i18n/catalogs/en.js +198 -3
- package/build/server/shared/i18n/catalogs/en.js.map +1 -1
- package/build/server/shared/i18n/catalogs/zh-TW.d.ts.map +1 -1
- package/build/server/shared/i18n/catalogs/zh-TW.js +197 -3
- package/build/server/shared/i18n/catalogs/zh-TW.js.map +1 -1
- package/build/server/shared/i18n/index.d.ts +192 -0
- package/build/server/shared/i18n/index.d.ts.map +1 -1
- package/build/server/shared/i18n/messageKeys.d.ts +192 -0
- package/build/server/shared/i18n/messageKeys.d.ts.map +1 -1
- package/build/server/shared/i18n/messageKeys.js +192 -0
- package/build/server/shared/i18n/messageKeys.js.map +1 -1
- package/build/server/shared/platformSetupOperation.d.ts +2 -0
- package/build/server/shared/platformSetupOperation.d.ts.map +1 -0
- package/build/server/shared/platformSetupOperation.js +9 -0
- package/build/server/shared/platformSetupOperation.js.map +1 -0
- package/build/server/shared/providerCatalog.d.ts +5 -2
- package/build/server/shared/providerCatalog.d.ts.map +1 -1
- package/build/server/shared/providerCatalog.js +6 -0
- package/build/server/shared/providerCatalog.js.map +1 -1
- package/build/server/shared/providerCatalogData.d.ts +154 -77
- package/build/server/shared/providerCatalogData.d.ts.map +1 -1
- package/build/server/shared/providerCatalogData.js +73 -36
- package/build/server/shared/providerCatalogData.js.map +1 -1
- package/build/server/shared/providerCatalogInstances.d.ts.map +1 -1
- package/build/server/shared/providerCatalogInstances.js +3 -0
- package/build/server/shared/providerCatalogInstances.js.map +1 -1
- package/build/server/shared/providerModelLabelRegistry.d.ts +29 -0
- package/build/server/shared/providerModelLabelRegistry.d.ts.map +1 -0
- package/build/server/shared/providerModelLabelRegistry.js +49 -0
- package/build/server/shared/providerModelLabelRegistry.js.map +1 -0
- package/build/server/shared/providerRegistryWarnings.d.ts +4 -0
- package/build/server/shared/providerRegistryWarnings.d.ts.map +1 -1
- package/build/server/shared/providerRegistryWarnings.js +7 -0
- package/build/server/shared/providerRegistryWarnings.js.map +1 -1
- package/build/server/shared/providerSelection.d.ts.map +1 -1
- package/build/server/shared/providerSelection.js +10 -13
- package/build/server/shared/providerSelection.js.map +1 -1
- package/build/server/shared/runtimeSetup.d.ts +17 -4
- package/build/server/shared/runtimeSetup.d.ts.map +1 -1
- package/build/server/shared/runtimeStatusPresentation.js +1 -1
- package/build/server/shared/runtimeStatusPresentation.js.map +1 -1
- package/package.json +32 -3
- package/packages/app-sdk/browser.d.ts +51 -0
- package/packages/app-sdk/browser.js +48 -0
- package/packages/app-sdk/package.d.ts +14 -0
- package/packages/app-sdk/package.js +131 -0
- package/packages/app-sdk/package.json +7 -0
- package/packages/provider-setup/manager.d.ts +79 -0
- package/packages/provider-setup/manager.js +441 -0
- package/scripts/README.md +66 -26
- package/scripts/build-desktop-installer.mjs +139 -16
- package/scripts/build-test-ui.mjs +1 -1
- package/scripts/bundle-server.mjs +23 -10
- package/scripts/linux/build-desktop-package.sh +6 -6
- package/scripts/linux/install-antigravity.sh +0 -0
- package/scripts/linux/install-devin.sh +0 -0
- package/scripts/linux/install-github-cli.sh +5 -0
- package/scripts/linux/install-meta-cli.sh +8 -0
- package/scripts/linux/install-node.sh +9 -3
- package/scripts/linux/node-cli-common.sh +87 -48
- package/scripts/linux/provider-cli-common.sh +178 -130
- package/scripts/linux/provider-version-common.sh +247 -0
- package/scripts/linux/sync-agent-skills.sh +27 -5
- package/scripts/linux/test-linux-package-smoke.sh +6 -3
- package/scripts/linux/upgrade-cli-tools.sh +1 -1
- package/scripts/linux/verified-npm-update.sh +20 -0
- package/scripts/macos/build-desktop-package.sh +5 -5
- package/scripts/macos/install-antigravity.sh +0 -0
- package/scripts/macos/install-devin.sh +0 -0
- package/scripts/macos/install-github-cli.sh +5 -0
- package/scripts/macos/install-meta-cli.sh +8 -0
- package/scripts/macos/install-node.sh +9 -3
- package/scripts/macos/node-cli-common.sh +87 -48
- package/scripts/macos/provider-cli-common.sh +178 -130
- package/scripts/macos/provider-version-common.sh +247 -0
- package/scripts/macos/sync-agent-skills.sh +27 -5
- package/scripts/macos/test-macos-package-smoke.sh +6 -3
- package/scripts/macos/upgrade-cli-tools.sh +1 -1
- package/scripts/macos/verified-npm-update.sh +20 -0
- package/scripts/package-desktop.mjs +15 -2
- package/scripts/testing/check-usage-app.mts +266 -0
- package/scripts/testing/conversation-navigation-smoke-electron.cjs +134 -0
- package/scripts/testing/conversation-navigation-smoke-renderer.tsx +102 -0
- package/scripts/testing/conversation-navigation-smoke.mjs +67 -0
- package/scripts/testing/usage-app-smoke-electron.cjs +10 -0
- package/scripts/testing/usage-app-smoke-renderer.tsx +8 -0
- package/scripts/validate-release-assets.mjs +4 -1
- package/scripts/verify-desktop-app-bundle.mjs +108 -0
- package/scripts/windows/Build-DesktopPackage.ps1 +9 -6
- package/scripts/windows/Install-Antigravity.ps1 +26 -3
- package/scripts/windows/Install-ClaudeCode.ps1 +25 -7
- package/scripts/windows/Install-CursorAgent.ps1 +45 -30
- package/scripts/windows/Install-Devin.ps1 +16 -47
- package/scripts/windows/Install-GitHubCli.ps1 +4 -0
- package/scripts/windows/Install-Goose.ps1 +18 -1
- package/scripts/windows/Install-Grok.ps1 +14 -1
- package/scripts/windows/Install-Junie.ps1 +32 -11
- package/scripts/windows/Install-KiroCli.ps1 +37 -13
- package/scripts/windows/Install-MetaCli.ps1 +463 -0
- package/scripts/windows/Install-Node.ps1 +6 -1
- package/scripts/windows/Install-Ollama.ps1 +4 -1
- package/scripts/windows/Setup-NodeGlobalPrefix.ps1 +10 -0
- package/scripts/windows/Sync-AgentSkills.ps1 +29 -6
- package/scripts/windows/Test-WindowsInstallerSmoke.ps1 +4 -1
- package/scripts/windows/_HiddenProcess.ps1 +14 -3
- package/scripts/windows/_NativeInstallerSupport.ps1 +308 -0
- package/scripts/windows/_NpmCliInstaller.ps1 +35 -14
- package/scripts/windows/_PackagedUninstall.ps1 +9 -1
- package/scripts/windows/_VerifiedNpmUpdate.ps1 +25 -0
- package/build/desktop/updateNotifications.d.ts +0 -64
- package/build/desktop/updateNotifications.d.ts.map +0 -1
- package/build/desktop/updateNotifications.js +0 -143
- package/build/desktop/updateNotifications.js.map +0 -1
- package/build/renderer/assets/ActiveSessionPermissionChip-DImsuR9T.js +0 -1
- package/build/renderer/assets/App-BfOvMP2m.js +0 -1
- package/build/renderer/assets/App-DGwkRFZl.css +0 -1
- package/build/renderer/assets/App-DWd7I3Z2.js +0 -2
- package/build/renderer/assets/WorkspaceAppRoutes-CrbTA9En.js +0 -1
- package/build/renderer/assets/app-BTww3Hl4.js +0 -43
- package/build/renderer/assets/app-CPxWQwLA.css +0 -1
- package/build/renderer/assets/conversationSidebarRecentEntries-QuaOPxCb.js +0 -6
- package/build/server/app/renderer/settings/runtimeLifecycleHelpers.d.ts +0 -48
- package/build/server/app/renderer/settings/runtimeLifecycleHelpers.d.ts.map +0 -1
- package/build/server/app/renderer/settings/runtimeLifecycleHelpers.js +0 -535
- package/build/server/app/renderer/settings/runtimeLifecycleHelpers.js.map +0 -1
- package/build/server/design/components/useProviderRegistryAutoRecheck.d.ts +0 -13
- package/build/server/design/components/useProviderRegistryAutoRecheck.d.ts.map +0 -1
- package/build/server/design/components/useProviderRegistryAutoRecheck.js +0 -63
- package/build/server/design/components/useProviderRegistryAutoRecheck.js.map +0 -1
- package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.d.ts +0 -19
- package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.d.ts.map +0 -1
- package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.js +0 -53
- package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.js.map +0 -1
- package/build/server/products/shared/renderer/api/providers.d.ts +0 -17
- package/build/server/products/shared/renderer/api/providers.d.ts.map +0 -1
- package/build/server/products/shared/renderer/api/providers.js +0 -50
- package/build/server/products/shared/renderer/api/providers.js.map +0 -1
- package/scripts/linux/install-aider.sh +0 -8
- package/scripts/macos/install-aider.sh +0 -8
- package/scripts/windows/Install-Aider.ps1 +0 -368
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { isKnownProvider, listProductProviders, } from '../../shared/providerCatalog.js';
|
|
1
|
+
import { isKnownProvider, providerInstanceTarget, listProductProviders, } from '../../shared/providerCatalog.js';
|
|
2
|
+
import { resolveSelectedProviderInstance } from '../../shared/providerSelection.js';
|
|
2
3
|
import { createEmptyProviderSnapshot, loadProviderSnapshot, writeProviderSnapshot, } from './providerSnapshotStore.js';
|
|
3
4
|
const PROVIDER_SNAPSHOT_DEBOUNCE_MS = 1_000;
|
|
4
5
|
const PROVIDER_SNAPSHOT_FLUSH_INFLIGHT_TIMEOUT_MS = 2_000;
|
|
5
|
-
const PROVIDER_CACHE_STALE_IF_ERROR_MS = 10 * 60_000;
|
|
6
6
|
const PROVIDER_CACHE_ERROR_BACKOFF_MS = 30_000;
|
|
7
7
|
const TRUTHFUL_SELECTOR_CACHE_TTL_MS = 30_000;
|
|
8
8
|
const TRUTHFUL_SELECTOR_STALE_WINDOW_MS = 15_000;
|
|
9
|
-
const TRUTHFUL_SELECTOR_CONFIG_ENRICHMENT_BUDGET_MS = 500;
|
|
10
9
|
const PROVIDER_MODEL_CATALOG_CACHE_TTL_MS = 60_000;
|
|
11
10
|
const PROVIDER_MODEL_CATALOG_STALE_WINDOW_MS = 5 * 60_000;
|
|
12
11
|
export const PROVIDER_TARGETS_CACHE_REFRESH_WARNING_PREFIX = 'Using cached provider targets because runtime refresh failed:';
|
|
@@ -190,13 +189,11 @@ function seedTruthfulProviderRegistryFromSnapshot(runtimeClient, snapshot) {
|
|
|
190
189
|
if (cacheState.entries.has(cacheKey)) {
|
|
191
190
|
return;
|
|
192
191
|
}
|
|
193
|
-
const now = Date.now();
|
|
194
192
|
cacheState.entries.set(cacheKey, {
|
|
195
193
|
lifecycle: 'error_backoff',
|
|
196
194
|
value: snapshot.registry,
|
|
197
195
|
freshUntilMs: 0,
|
|
198
196
|
staleUntilMs: 0,
|
|
199
|
-
staleIfErrorUntilMs: now + PROVIDER_CACHE_STALE_IF_ERROR_MS,
|
|
200
197
|
cacheRefreshWarning: {
|
|
201
198
|
kind: 'provider-targets',
|
|
202
199
|
message: 'Using last saved provider targets while cats-runtime reconnects.',
|
|
@@ -208,7 +205,6 @@ function seedProviderCatalogsFromSnapshot(runtimeClient, snapshot) {
|
|
|
208
205
|
return;
|
|
209
206
|
}
|
|
210
207
|
const cacheState = getProviderCatalogCacheState(runtimeClient);
|
|
211
|
-
const now = Date.now();
|
|
212
208
|
for (const entry of snapshot.catalogs) {
|
|
213
209
|
const cacheKey = buildProviderCatalogCacheKey({
|
|
214
210
|
provider: entry.provider,
|
|
@@ -220,7 +216,6 @@ function seedProviderCatalogsFromSnapshot(runtimeClient, snapshot) {
|
|
|
220
216
|
value: entry.models,
|
|
221
217
|
freshUntilMs: 0,
|
|
222
218
|
staleUntilMs: 0,
|
|
223
|
-
staleIfErrorUntilMs: now + PROVIDER_CACHE_STALE_IF_ERROR_MS,
|
|
224
219
|
cacheRefreshWarning: {
|
|
225
220
|
kind: 'model-catalog',
|
|
226
221
|
message: 'Using last saved model catalog while cats-runtime reconnects.',
|
|
@@ -233,7 +228,6 @@ function seedProviderCatalogsFromSnapshot(runtimeClient, snapshot) {
|
|
|
233
228
|
value: entry.advanced,
|
|
234
229
|
freshUntilMs: 0,
|
|
235
230
|
staleUntilMs: 0,
|
|
236
|
-
staleIfErrorUntilMs: now + PROVIDER_CACHE_STALE_IF_ERROR_MS,
|
|
237
231
|
cacheRefreshWarning: {
|
|
238
232
|
kind: 'model-catalog',
|
|
239
233
|
message: 'Using last saved model catalog while cats-runtime reconnects.',
|
|
@@ -266,10 +260,7 @@ export async function warmProviderSelectorCache(runtimeClient) {
|
|
|
266
260
|
}
|
|
267
261
|
const catalogCacheState = getProviderCatalogCacheState(runtimeClient);
|
|
268
262
|
await Promise.allSettled(registry.providers.map(async (provider) => {
|
|
269
|
-
const defaultInstanceId = provider
|
|
270
|
-
?? provider.instances.find((candidate) => candidate.default)?.id
|
|
271
|
-
?? provider.instances[0]?.id
|
|
272
|
-
?? null;
|
|
263
|
+
const defaultInstanceId = resolveSelectedProviderInstance(provider, '') || null;
|
|
273
264
|
if (!defaultInstanceId) {
|
|
274
265
|
return;
|
|
275
266
|
}
|
|
@@ -311,7 +302,7 @@ function listSelectableDiagnosticsForProvider(payload, providerId) {
|
|
|
311
302
|
.filter((entry) => isSelectableAvailabilityStatus(entry.availability.status));
|
|
312
303
|
}
|
|
313
304
|
function findInstanceDiagnostic(entries, instanceId, backend) {
|
|
314
|
-
return entries.find((entry) => entry.instance === instanceId)
|
|
305
|
+
return entries.find((entry) => entry.instance === instanceId && entry.backend === backend)
|
|
315
306
|
?? entries.find((entry) => entry.instance === null
|
|
316
307
|
&& backend !== null
|
|
317
308
|
&& entry.backend === backend)
|
|
@@ -332,7 +323,7 @@ function mergeTruthfulProviderRegistryFromRuntimeConfig(provider, runtimeConfig,
|
|
|
332
323
|
label: instance.target ?? instance.id,
|
|
333
324
|
target: instance.target,
|
|
334
325
|
backend: instance.backend,
|
|
335
|
-
default: runtimeProvider.defaultInstance === instance.id,
|
|
326
|
+
default: runtimeProvider.defaultInstance === instance.id && runtimeProvider.defaultBackend === instance.backend,
|
|
336
327
|
eventCapabilities: instance.eventCapabilities,
|
|
337
328
|
}));
|
|
338
329
|
if (instances.length === 0) {
|
|
@@ -352,65 +343,6 @@ function mergeTruthfulProviderRegistryFromRuntimeConfig(provider, runtimeConfig,
|
|
|
352
343
|
instances,
|
|
353
344
|
};
|
|
354
345
|
}
|
|
355
|
-
function resolveDiagnosticsInstanceId(entry) {
|
|
356
|
-
return entry.instance?.trim()
|
|
357
|
-
|| entry.backend?.trim()
|
|
358
|
-
|| 'default';
|
|
359
|
-
}
|
|
360
|
-
function resolveDiagnosticsInstanceTarget(entry) {
|
|
361
|
-
const instanceId = entry.instance?.trim() || '';
|
|
362
|
-
const backend = entry.backend?.trim() || '';
|
|
363
|
-
if (instanceId) {
|
|
364
|
-
if (instanceId.includes('/')) {
|
|
365
|
-
return instanceId;
|
|
366
|
-
}
|
|
367
|
-
return backend ? `${backend}/${instanceId}` : instanceId;
|
|
368
|
-
}
|
|
369
|
-
return backend ? `${backend}/default` : null;
|
|
370
|
-
}
|
|
371
|
-
function resolveDiagnosticsInstanceLabel(entry) {
|
|
372
|
-
return resolveDiagnosticsInstanceTarget(entry)
|
|
373
|
-
?? entry.backend?.trim()
|
|
374
|
-
?? 'default';
|
|
375
|
-
}
|
|
376
|
-
function buildDiagnosticsOnlyProviderDescriptor(provider, diagnosticsEntries) {
|
|
377
|
-
const instancesById = new Map();
|
|
378
|
-
for (const entry of diagnosticsEntries) {
|
|
379
|
-
const instanceId = resolveDiagnosticsInstanceId(entry);
|
|
380
|
-
const staticInstance = provider.instances.find((candidate) => candidate.id === instanceId
|
|
381
|
-
|| (candidate.target !== null
|
|
382
|
-
&& candidate.target === resolveDiagnosticsInstanceTarget(entry)));
|
|
383
|
-
const target = staticInstance?.target ?? resolveDiagnosticsInstanceTarget(entry);
|
|
384
|
-
instancesById.set(instanceId, {
|
|
385
|
-
id: instanceId,
|
|
386
|
-
label: staticInstance?.label ?? resolveDiagnosticsInstanceLabel(entry),
|
|
387
|
-
target,
|
|
388
|
-
backend: staticInstance?.backend ?? entry.backend,
|
|
389
|
-
default: entry.defaultTarget,
|
|
390
|
-
eventCapabilities: staticInstance?.eventCapabilities ?? null,
|
|
391
|
-
});
|
|
392
|
-
}
|
|
393
|
-
const instances = [...instancesById.values()];
|
|
394
|
-
if (instances.length === 0) {
|
|
395
|
-
return null;
|
|
396
|
-
}
|
|
397
|
-
const defaultInstance = instances.find((instance) => instance.default)?.id
|
|
398
|
-
?? instances.find((instance) => instance.id === provider.defaultInstance)?.id
|
|
399
|
-
?? instances[0]?.id
|
|
400
|
-
?? null;
|
|
401
|
-
const defaultBackend = instances.find((instance) => instance.id === defaultInstance)?.backend
|
|
402
|
-
?? instances[0]?.backend
|
|
403
|
-
?? provider.defaultBackend;
|
|
404
|
-
return {
|
|
405
|
-
...provider,
|
|
406
|
-
defaultInstance,
|
|
407
|
-
defaultBackend,
|
|
408
|
-
instances: instances.map((instance) => ({
|
|
409
|
-
...instance,
|
|
410
|
-
default: instance.id === defaultInstance,
|
|
411
|
-
})),
|
|
412
|
-
};
|
|
413
|
-
}
|
|
414
346
|
function mergeTruthfulProviderRegistry(productProviders, runtimeConfig, diagnostics) {
|
|
415
347
|
return productProviders.flatMap((provider) => {
|
|
416
348
|
const diagnosticsEntries = listSelectableDiagnosticsForProvider(diagnostics, provider.id);
|
|
@@ -423,8 +355,7 @@ function mergeTruthfulProviderRegistry(productProviders, runtimeConfig, diagnost
|
|
|
423
355
|
if (merged) {
|
|
424
356
|
return [merged];
|
|
425
357
|
}
|
|
426
|
-
|
|
427
|
-
return diagnosticsOnly ? [diagnosticsOnly] : [];
|
|
358
|
+
return [];
|
|
428
359
|
});
|
|
429
360
|
}
|
|
430
361
|
function getTruthfulProviderRegistryCacheState(runtimeClient) {
|
|
@@ -440,12 +371,9 @@ function getTruthfulProviderRegistryCacheState(runtimeClient) {
|
|
|
440
371
|
}
|
|
441
372
|
const TRUTHFUL_PROVIDER_REGISTRY_CACHE_KEY = '*';
|
|
442
373
|
function shouldCacheTruthfulProviderRegistry(value) {
|
|
443
|
-
//
|
|
444
|
-
//
|
|
445
|
-
|
|
446
|
-
// 'runtime_unreachable' is the explicit failure state. Both fall through
|
|
447
|
-
// to the stale-fallback / short-backoff path below.
|
|
448
|
-
return value.state === 'ready';
|
|
374
|
+
// A successful empty read is authoritative too. Only transport failure
|
|
375
|
+
// retains the previous observation; elapsed time does not authorize it.
|
|
376
|
+
return value.state !== 'runtime_unreachable';
|
|
449
377
|
}
|
|
450
378
|
function appendProviderCacheWarning(warnings, warning) {
|
|
451
379
|
const existing = Array.isArray(warnings) ? warnings : [];
|
|
@@ -475,7 +403,6 @@ function writeProviderCacheErrorBackoff(cached, cacheRefreshWarning, appendWarni
|
|
|
475
403
|
lifecycle: 'error_backoff',
|
|
476
404
|
freshUntilMs: now + PROVIDER_CACHE_ERROR_BACKOFF_MS,
|
|
477
405
|
staleUntilMs: Math.max(cached.staleUntilMs, now + PROVIDER_CACHE_ERROR_BACKOFF_MS),
|
|
478
|
-
staleIfErrorUntilMs: cached.staleIfErrorUntilMs,
|
|
479
406
|
cacheRefreshWarning,
|
|
480
407
|
});
|
|
481
408
|
return appendWarning(cached.value, cacheRefreshWarning.message);
|
|
@@ -512,6 +439,7 @@ function deriveTruthfulProviderRegistryForProvider(source, providerId) {
|
|
|
512
439
|
const provider = source.providers.find((entry) => entry.id === providerId);
|
|
513
440
|
if (!provider) {
|
|
514
441
|
return {
|
|
442
|
+
revision: source.revision,
|
|
515
443
|
state: 'no_usable_targets',
|
|
516
444
|
providers: [],
|
|
517
445
|
recovery: {
|
|
@@ -523,12 +451,10 @@ function deriveTruthfulProviderRegistryForProvider(source, providerId) {
|
|
|
523
451
|
return {
|
|
524
452
|
state: 'ready',
|
|
525
453
|
providers: [provider],
|
|
454
|
+
revision: source.revision,
|
|
526
455
|
...(source.warnings ? { warnings: [...source.warnings] } : {}),
|
|
527
456
|
};
|
|
528
457
|
}
|
|
529
|
-
async function readProviderConfig(dependencies) {
|
|
530
|
-
return dependencies.runtimeClient.getProviderConfig({ selector: true });
|
|
531
|
-
}
|
|
532
458
|
async function readProviderDiagnostics(dependencies, options = {}) {
|
|
533
459
|
return dependencies.runtimeClient.getProviderDiagnostics({
|
|
534
460
|
...(options.provider?.trim() ? { provider: options.provider.trim() } : {}),
|
|
@@ -536,25 +462,15 @@ async function readProviderDiagnostics(dependencies, options = {}) {
|
|
|
536
462
|
});
|
|
537
463
|
}
|
|
538
464
|
async function readProviderConfigBestEffort(dependencies) {
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
}));
|
|
547
|
-
const timeoutToken = Symbol('selector-config-timeout');
|
|
548
|
-
const winner = await Promise.race([
|
|
549
|
-
task,
|
|
550
|
-
new Promise((resolve) => {
|
|
551
|
-
setTimeout(() => resolve(timeoutToken), TRUTHFUL_SELECTOR_CONFIG_ENRICHMENT_BUDGET_MS);
|
|
552
|
-
}),
|
|
553
|
-
]);
|
|
554
|
-
if (winner === timeoutToken) {
|
|
465
|
+
try {
|
|
466
|
+
// Topology is required to establish the first usable selector snapshot.
|
|
467
|
+
// Let the Runtime client's request deadline bound this read; a shorter
|
|
468
|
+
// enrichment race discards healthy slow responses on every cold retry.
|
|
469
|
+
return await dependencies.runtimeClient.getProviderConfig({ selector: true });
|
|
470
|
+
}
|
|
471
|
+
catch {
|
|
555
472
|
return null;
|
|
556
473
|
}
|
|
557
|
-
return winner.status === 'fulfilled' ? winner.value : null;
|
|
558
474
|
}
|
|
559
475
|
async function loadTruthfulProviderRegistryFromRuntime(dependencies, options = {}) {
|
|
560
476
|
const requestedProvider = options.provider?.trim() || null;
|
|
@@ -589,7 +505,11 @@ async function loadTruthfulProviderRegistryFromRuntime(dependencies, options = {
|
|
|
589
505
|
};
|
|
590
506
|
}
|
|
591
507
|
const runtimeConfig = await configTask;
|
|
592
|
-
|
|
508
|
+
if (!runtimeConfig) {
|
|
509
|
+
return { state: 'runtime_unreachable', providers: [], recovery: { retryable: true },
|
|
510
|
+
warnings: ['Runtime provider configuration is unavailable.'] };
|
|
511
|
+
}
|
|
512
|
+
const providers = mergeTruthfulProviderRegistry(configuredProductProviders, runtimeConfig, diagnostics);
|
|
593
513
|
if (providers.length === 0) {
|
|
594
514
|
return {
|
|
595
515
|
state: 'no_usable_targets',
|
|
@@ -604,7 +524,52 @@ async function loadTruthfulProviderRegistryFromRuntime(dependencies, options = {
|
|
|
604
524
|
providers,
|
|
605
525
|
};
|
|
606
526
|
}
|
|
527
|
+
function syncProviderSelectionCache(client, selection) {
|
|
528
|
+
const state = getTruthfulProviderRegistryCacheState(client);
|
|
529
|
+
if (state.revision !== selection.revision) {
|
|
530
|
+
state.entries.clear();
|
|
531
|
+
state.inflight.clear();
|
|
532
|
+
providerCatalogCache.delete(client);
|
|
533
|
+
state.revision = selection.revision;
|
|
534
|
+
}
|
|
535
|
+
return state;
|
|
536
|
+
}
|
|
537
|
+
function projectSelectedProviders(value, selection) {
|
|
538
|
+
const selected = new Set(selection.targets.map((target) => JSON.stringify([target.provider, target.backend, target.instance])));
|
|
539
|
+
const providers = value.providers.flatMap((provider) => {
|
|
540
|
+
const instances = provider.instances.filter((instance) => selected.has(JSON.stringify([provider.id, instance.backend, instance.id])));
|
|
541
|
+
if (!instances.length)
|
|
542
|
+
return [];
|
|
543
|
+
const defaultTarget = instances.find((instance) => instance.default) ?? instances[0];
|
|
544
|
+
return [{ ...provider, instances: instances.map((instance) => ({ ...instance, default: instance === defaultTarget })),
|
|
545
|
+
defaultInstance: defaultTarget.id, defaultBackend: defaultTarget.backend }];
|
|
546
|
+
});
|
|
547
|
+
return { ...value, revision: selection.revision, providers,
|
|
548
|
+
state: providers.length ? 'ready' : value.state === 'runtime_unreachable' ? value.state : 'no_usable_targets',
|
|
549
|
+
...(providers.length ? {} : { recovery: { openRuntimeSetupPath: '/runtime/setup' } }) };
|
|
550
|
+
}
|
|
551
|
+
async function currentSelection(dependencies) {
|
|
552
|
+
const { selection } = await dependencies.runtimeClient.getSetupState();
|
|
553
|
+
if (!selection || !Array.isArray(selection.targets))
|
|
554
|
+
throw new Error('Runtime provider selection is unavailable.');
|
|
555
|
+
syncProviderSelectionCache(dependencies.runtimeClient, selection);
|
|
556
|
+
return selection;
|
|
557
|
+
}
|
|
558
|
+
function unavailableSelection() {
|
|
559
|
+
return { state: 'runtime_unreachable', providers: [], recovery: { retryable: true },
|
|
560
|
+
warnings: ['Cannot verify the connected Runtime provider selection.'] };
|
|
561
|
+
}
|
|
607
562
|
async function refreshTruthfulProviderRegistry(dependencies, cacheState, options = {}) {
|
|
563
|
+
let selection;
|
|
564
|
+
try {
|
|
565
|
+
selection = await currentSelection(dependencies);
|
|
566
|
+
}
|
|
567
|
+
catch {
|
|
568
|
+
return unavailableSelection();
|
|
569
|
+
}
|
|
570
|
+
if (selection.state !== 'selected') {
|
|
571
|
+
return projectSelectedProviders({ state: 'no_usable_targets', providers: [] }, selection);
|
|
572
|
+
}
|
|
608
573
|
const cacheKey = TRUTHFUL_PROVIDER_REGISTRY_CACHE_KEY;
|
|
609
574
|
if (!options.force) {
|
|
610
575
|
const inflight = cacheState.inflight.get(cacheKey);
|
|
@@ -614,7 +579,18 @@ async function refreshTruthfulProviderRegistry(dependencies, cacheState, options
|
|
|
614
579
|
}
|
|
615
580
|
let refreshPromise;
|
|
616
581
|
refreshPromise = loadTruthfulProviderRegistryFromRuntime(dependencies)
|
|
617
|
-
.then((
|
|
582
|
+
.then(async (loaded) => {
|
|
583
|
+
let latest;
|
|
584
|
+
try {
|
|
585
|
+
latest = await currentSelection(dependencies);
|
|
586
|
+
}
|
|
587
|
+
catch {
|
|
588
|
+
return unavailableSelection();
|
|
589
|
+
}
|
|
590
|
+
if (latest.revision !== selection.revision) {
|
|
591
|
+
return projectSelectedProviders({ state: 'no_usable_targets', providers: [] }, latest);
|
|
592
|
+
}
|
|
593
|
+
const value = projectSelectedProviders(loaded, latest);
|
|
618
594
|
// Stale-probe guard: if a parallel forced refresh has replaced us as
|
|
619
595
|
// the current inflight probe (or already finished and cleaned up), our
|
|
620
596
|
// value is stale by definition. Don't write it to the cache — that
|
|
@@ -634,13 +610,12 @@ async function refreshTruthfulProviderRegistry(dependencies, cacheState, options
|
|
|
634
610
|
value,
|
|
635
611
|
freshUntilMs: now + TRUTHFUL_SELECTOR_CACHE_TTL_MS,
|
|
636
612
|
staleUntilMs: now + TRUTHFUL_SELECTOR_CACHE_TTL_MS + TRUTHFUL_SELECTOR_STALE_WINDOW_MS,
|
|
637
|
-
staleIfErrorUntilMs: now + PROVIDER_CACHE_STALE_IF_ERROR_MS,
|
|
638
613
|
});
|
|
639
614
|
notifyProviderCacheUpdated(dependencies.runtimeClient);
|
|
640
615
|
return value;
|
|
641
616
|
}
|
|
642
617
|
const cached = cacheState.entries.get(cacheKey);
|
|
643
|
-
if (cached
|
|
618
|
+
if (cached) {
|
|
644
619
|
return writeTruthfulProviderRegistryErrorBackoff(cacheState, cacheKey, cached, value);
|
|
645
620
|
}
|
|
646
621
|
// With no prior ready baseline, do not turn a cold runtime failure into
|
|
@@ -660,14 +635,24 @@ async function refreshTruthfulProviderRegistry(dependencies, cacheState, options
|
|
|
660
635
|
return refreshPromise;
|
|
661
636
|
}
|
|
662
637
|
async function readTruthfulProviderRegistry(dependencies, options = {}) {
|
|
638
|
+
let selection;
|
|
639
|
+
try {
|
|
640
|
+
selection = await currentSelection(dependencies);
|
|
641
|
+
}
|
|
642
|
+
catch {
|
|
643
|
+
return unavailableSelection();
|
|
644
|
+
}
|
|
645
|
+
if (selection.state !== 'selected') {
|
|
646
|
+
return projectSelectedProviders({ state: 'no_usable_targets', providers: [] }, selection);
|
|
647
|
+
}
|
|
663
648
|
const cacheState = getTruthfulProviderRegistryCacheState(dependencies.runtimeClient);
|
|
664
649
|
const cacheKey = TRUTHFUL_PROVIDER_REGISTRY_CACHE_KEY;
|
|
665
650
|
const now = Date.now();
|
|
666
651
|
const cached = cacheState.entries.get(cacheKey);
|
|
667
652
|
const requestedProvider = options.provider?.trim() || null;
|
|
668
653
|
const project = (value) => requestedProvider
|
|
669
|
-
? deriveTruthfulProviderRegistryForProvider(value, requestedProvider)
|
|
670
|
-
: value;
|
|
654
|
+
? deriveTruthfulProviderRegistryForProvider(projectSelectedProviders(value, selection), requestedProvider)
|
|
655
|
+
: projectSelectedProviders(value, selection);
|
|
671
656
|
if (cached && cached.freshUntilMs > now) {
|
|
672
657
|
return project(readProviderCacheValue(cached, appendTruthfulProviderRegistryWarning));
|
|
673
658
|
}
|
|
@@ -675,7 +660,9 @@ async function readTruthfulProviderRegistry(dependencies, options = {}) {
|
|
|
675
660
|
void refreshTruthfulProviderRegistry(dependencies, cacheState).catch(() => { });
|
|
676
661
|
return project(readProviderCacheValue(cached, appendTruthfulProviderRegistryWarning));
|
|
677
662
|
}
|
|
678
|
-
|
|
663
|
+
// Expiry triggers refresh, not loss of the last successful result. The
|
|
664
|
+
// selection check above invalidates all entries when intent changes.
|
|
665
|
+
if (cached) {
|
|
679
666
|
void refreshTruthfulProviderRegistry(dependencies, cacheState).catch(() => { });
|
|
680
667
|
return project(appendTruthfulProviderRegistryWarning(readProviderCacheValue(cached, appendTruthfulProviderRegistryWarning), PROVIDER_TARGETS_CACHE_REVALIDATION_WARNING));
|
|
681
668
|
}
|
|
@@ -687,7 +674,12 @@ async function readTruthfulProviderRegistry(dependencies, options = {}) {
|
|
|
687
674
|
// slots ahead of the scoped request and recreate the 8s timeout risk.
|
|
688
675
|
const scopedRegistry = await loadTruthfulProviderRegistryFromRuntime(dependencies, { provider: requestedProvider });
|
|
689
676
|
void refreshTruthfulProviderRegistry(dependencies, cacheState).catch(() => { });
|
|
690
|
-
|
|
677
|
+
const latest = await currentSelection(dependencies).catch(() => null);
|
|
678
|
+
if (!latest)
|
|
679
|
+
return unavailableSelection();
|
|
680
|
+
return latest.revision === selection.revision
|
|
681
|
+
? project(scopedRegistry)
|
|
682
|
+
: projectSelectedProviders({ state: 'no_usable_targets', providers: [] }, latest);
|
|
691
683
|
}
|
|
692
684
|
return project(await refreshTruthfulProviderRegistry(dependencies, cacheState));
|
|
693
685
|
}
|
|
@@ -732,7 +724,6 @@ function writeProviderCatalogCacheEntry(cacheState, cacheKey, value) {
|
|
|
732
724
|
staleUntilMs: now
|
|
733
725
|
+ PROVIDER_MODEL_CATALOG_CACHE_TTL_MS
|
|
734
726
|
+ PROVIDER_MODEL_CATALOG_STALE_WINDOW_MS,
|
|
735
|
-
staleIfErrorUntilMs: now + PROVIDER_CACHE_STALE_IF_ERROR_MS,
|
|
736
727
|
});
|
|
737
728
|
}
|
|
738
729
|
function writeProviderCatalogErrorBackoff(cacheState, cacheKey, cached, error) {
|
|
@@ -741,13 +732,6 @@ function writeProviderCatalogErrorBackoff(cacheState, cacheKey, cached, error) {
|
|
|
741
732
|
message: `${MODEL_CATALOG_CACHE_REFRESH_WARNING_PREFIX} ${readRuntimeFailureMessage(error, 'Runtime catalog unavailable.')}`,
|
|
742
733
|
}, appendProviderCatalogWarning, (entry) => cacheState.entries.set(cacheKey, entry));
|
|
743
734
|
}
|
|
744
|
-
function pruneExpiredProviderCatalogCacheEntries(cacheState, now) {
|
|
745
|
-
for (const [cacheKey, cached] of cacheState.entries) {
|
|
746
|
-
if (cached.staleIfErrorUntilMs <= now && !cacheState.inflight.has(cacheKey)) {
|
|
747
|
-
cacheState.entries.delete(cacheKey);
|
|
748
|
-
}
|
|
749
|
-
}
|
|
750
|
-
}
|
|
751
735
|
function refreshProviderCatalogCacheEntry(cacheState, cacheKey, load, runtimeClient) {
|
|
752
736
|
const inflight = cacheState.inflight.get(cacheKey);
|
|
753
737
|
if (inflight) {
|
|
@@ -764,8 +748,7 @@ function refreshProviderCatalogCacheEntry(cacheState, cacheKey, load, runtimeCli
|
|
|
764
748
|
.catch((error) => {
|
|
765
749
|
const cached = readProviderCatalogCacheEntry(cacheState, cacheKey);
|
|
766
750
|
if (shouldServeStaleProviderCatalogForError(error)
|
|
767
|
-
&& cached
|
|
768
|
-
&& cached.staleIfErrorUntilMs > Date.now()) {
|
|
751
|
+
&& cached) {
|
|
769
752
|
return writeProviderCatalogErrorBackoff(cacheState, cacheKey, cached, error);
|
|
770
753
|
}
|
|
771
754
|
throw error;
|
|
@@ -779,7 +762,6 @@ function refreshProviderCatalogCacheEntry(cacheState, cacheKey, load, runtimeCli
|
|
|
779
762
|
async function readProviderCatalogCached(input) {
|
|
780
763
|
const cacheKey = buildProviderCatalogCacheKey(input);
|
|
781
764
|
const now = Date.now();
|
|
782
|
-
pruneExpiredProviderCatalogCacheEntries(input.cacheState, now);
|
|
783
765
|
const cached = readProviderCatalogCacheEntry(input.cacheState, cacheKey);
|
|
784
766
|
if (cached && cached.freshUntilMs > now) {
|
|
785
767
|
return readProviderCacheValue(cached, appendProviderCatalogWarning);
|
|
@@ -788,7 +770,7 @@ async function readProviderCatalogCached(input) {
|
|
|
788
770
|
void refreshProviderCatalogCacheEntry(input.cacheState, cacheKey, input.load, input.runtimeClient).catch(() => { });
|
|
789
771
|
return readProviderCacheValue(cached, appendProviderCatalogWarning);
|
|
790
772
|
}
|
|
791
|
-
if (cached
|
|
773
|
+
if (cached) {
|
|
792
774
|
void refreshProviderCatalogCacheEntry(input.cacheState, cacheKey, input.load, input.runtimeClient).catch(() => { });
|
|
793
775
|
return appendProviderCatalogWarning(readProviderCacheValue(cached, appendProviderCatalogWarning), MODEL_CATALOG_CACHE_REVALIDATION_WARNING);
|
|
794
776
|
}
|
|
@@ -834,8 +816,8 @@ export async function handleProviderModels(response, dependencies, provider, ins
|
|
|
834
816
|
sendRestError(response, 409, 'provider_target_unavailable', `No usable ${provider} target is currently available in cats-runtime.`, { provider, instance: instance ?? null });
|
|
835
817
|
return;
|
|
836
818
|
}
|
|
837
|
-
const normalizedInstance = instance
|
|
838
|
-
if (
|
|
819
|
+
const normalizedInstance = resolveRequestedInstance(providerDescriptor, instance);
|
|
820
|
+
if (!normalizedInstance) {
|
|
839
821
|
sendRestError(response, 409, 'provider_target_unavailable', `${provider} instance "${normalizedInstance}" is not currently usable in cats-runtime.`, { provider, instance: normalizedInstance });
|
|
840
822
|
return;
|
|
841
823
|
}
|
|
@@ -848,7 +830,12 @@ export async function handleProviderModels(response, dependencies, provider, ins
|
|
|
848
830
|
load: () => dependencies.runtimeClient.getProviderModels(provider, normalizedInstance),
|
|
849
831
|
runtimeClient: dependencies.runtimeClient,
|
|
850
832
|
});
|
|
851
|
-
|
|
833
|
+
const latest = await currentSelection(dependencies);
|
|
834
|
+
if (latest.revision !== registry.revision) {
|
|
835
|
+
sendRestError(response, 409, 'provider_selection_changed', 'Provider selection changed. Refresh the provider list.');
|
|
836
|
+
return;
|
|
837
|
+
}
|
|
838
|
+
sendJson(response, 200, { catalog: { ...catalog, instance: normalizedInstance } });
|
|
852
839
|
}
|
|
853
840
|
catch (error) {
|
|
854
841
|
const runtimeError = error;
|
|
@@ -859,6 +846,13 @@ export async function handleProviderModels(response, dependencies, provider, ins
|
|
|
859
846
|
sendRestError(response, 503, 'provider_catalog_unavailable', error instanceof Error ? error.message : 'Runtime catalog unavailable.', { provider, instance: normalizedInstance });
|
|
860
847
|
}
|
|
861
848
|
}
|
|
849
|
+
function resolveRequestedInstance(provider, instance) {
|
|
850
|
+
const requested = instance?.trim();
|
|
851
|
+
if (!requested)
|
|
852
|
+
return resolveSelectedProviderInstance(provider, '') || null;
|
|
853
|
+
const matches = provider.instances.filter((target) => providerInstanceTarget(target) === requested || target.id === requested);
|
|
854
|
+
return matches.length === 1 ? providerInstanceTarget(matches[0]) : null;
|
|
855
|
+
}
|
|
862
856
|
export async function handleAdvancedProviderModels(response, dependencies, provider, instance) {
|
|
863
857
|
if (!isKnownProvider(provider)) {
|
|
864
858
|
sendRestError(response, 404, 'provider_not_found', `Provider not found: ${provider}`);
|
|
@@ -874,8 +868,8 @@ export async function handleAdvancedProviderModels(response, dependencies, provi
|
|
|
874
868
|
sendRestError(response, 409, 'provider_target_unavailable', `No usable ${provider} target is currently available in cats-runtime.`, { provider, instance: instance ?? null });
|
|
875
869
|
return;
|
|
876
870
|
}
|
|
877
|
-
const normalizedInstance = instance
|
|
878
|
-
if (
|
|
871
|
+
const normalizedInstance = resolveRequestedInstance(providerDescriptor, instance);
|
|
872
|
+
if (!normalizedInstance) {
|
|
879
873
|
sendRestError(response, 409, 'provider_target_unavailable', `${provider} instance "${normalizedInstance}" is not currently usable in cats-runtime.`, { provider, instance: normalizedInstance });
|
|
880
874
|
return;
|
|
881
875
|
}
|
|
@@ -888,7 +882,12 @@ export async function handleAdvancedProviderModels(response, dependencies, provi
|
|
|
888
882
|
load: () => dependencies.runtimeClient.getAdvancedProviderModels(provider, normalizedInstance),
|
|
889
883
|
runtimeClient: dependencies.runtimeClient,
|
|
890
884
|
});
|
|
891
|
-
|
|
885
|
+
const latest = await currentSelection(dependencies);
|
|
886
|
+
if (latest.revision !== registry.revision) {
|
|
887
|
+
sendRestError(response, 409, 'provider_selection_changed', 'Provider selection changed. Refresh the provider list.');
|
|
888
|
+
return;
|
|
889
|
+
}
|
|
890
|
+
sendJson(response, 200, { catalog: { ...catalog, instance: normalizedInstance } });
|
|
892
891
|
}
|
|
893
892
|
catch (error) {
|
|
894
893
|
const runtimeError = error;
|
|
@@ -913,10 +912,13 @@ async function refreshProviderCatalogsInternal(dependencies) {
|
|
|
913
912
|
const task = (async () => {
|
|
914
913
|
try {
|
|
915
914
|
const [models, advanced] = await Promise.all([
|
|
916
|
-
dependencies.runtimeClient.getProviderModels(provider.id, instance
|
|
917
|
-
dependencies.runtimeClient.getAdvancedProviderModels(provider.id, instance
|
|
915
|
+
dependencies.runtimeClient.getProviderModels(provider.id, providerInstanceTarget(instance), { forceRefresh: true }),
|
|
916
|
+
dependencies.runtimeClient.getAdvancedProviderModels(provider.id, providerInstanceTarget(instance), { forceRefresh: true }),
|
|
918
917
|
]);
|
|
919
|
-
const
|
|
918
|
+
const latest = await currentSelection(dependencies);
|
|
919
|
+
if (latest.revision !== registry.revision)
|
|
920
|
+
throw new Error('Provider selection changed during catalog refresh.');
|
|
921
|
+
const cacheKey = buildProviderCatalogCacheKey({ provider: provider.id, instance: providerInstanceTarget(instance) });
|
|
920
922
|
writeProviderCatalogCacheEntry(cacheState.models, cacheKey, models);
|
|
921
923
|
writeProviderCatalogCacheEntry(cacheState.advanced, cacheKey, advanced);
|
|
922
924
|
notifyProviderCacheUpdated(dependencies.runtimeClient);
|