@cats-inc/cats-platform 0.1.10 → 0.2.8
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 +9 -16
- package/README.md +18 -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 +264 -77
- package/build/desktop/bootstrapPage.js.map +1 -1
- package/build/desktop/cliInventoryProbe.d.ts +23 -2
- package/build/desktop/cliInventoryProbe.d.ts.map +1 -1
- package/build/desktop/cliInventoryProbe.js +54 -9
- 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 +19 -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 +177 -201
- 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 +7 -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/providerSelection.d.ts +37 -0
- package/build/desktop/providerSelection.d.ts.map +1 -0
- package/build/desktop/providerSelection.js +112 -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 +49 -35
- package/build/desktop/readiness.js.map +1 -1
- package/build/desktop/setupAssets.d.ts.map +1 -1
- package/build/desktop/setupAssets.js +16 -14
- package/build/desktop/setupAssets.js.map +1 -1
- package/build/desktop/setupAudit.d.ts +2 -3
- package/build/desktop/setupAudit.d.ts.map +1 -1
- package/build/desktop/setupAudit.js +14 -34
- package/build/desktop/setupAudit.js.map +1 -1
- package/build/desktop/tray.d.ts +1 -1
- package/build/desktop/tray.d.ts.map +1 -1
- package/build/desktop/tray.js +2 -7
- package/build/desktop/tray.js.map +1 -1
- package/build/desktop/trayMenu.d.ts +23 -2
- package/build/desktop/trayMenu.d.ts.map +1 -1
- package/build/desktop/trayMenu.js +24 -30
- package/build/desktop/trayMenu.js.map +1 -1
- package/build/desktop/updateDialog.d.ts +66 -0
- package/build/desktop/updateDialog.d.ts.map +1 -0
- package/build/desktop/updateDialog.js +258 -0
- package/build/desktop/updateDialog.js.map +1 -0
- package/build/desktop/updaterAdapter.d.ts +1 -0
- package/build/desktop/updaterAdapter.d.ts.map +1 -1
- package/build/desktop/updaterAdapter.js +13 -1
- package/build/desktop/updaterAdapter.js.map +1 -1
- package/build/renderer/assets/{ActiveSessionPermissionChip-Dl2UOFgh.js → ActiveSessionPermissionChip-CAgN-tXv.js} +1 -1
- package/build/renderer/assets/App-BZA23O2J.js +2 -0
- package/build/renderer/assets/App-DxsV-tKS.css +1 -0
- package/build/renderer/assets/{App-ChvP0G9X.js → App-YqprEL2n.js} +1 -1
- package/build/renderer/assets/App-rGw9J8PZ.js +1 -0
- package/build/renderer/assets/WorkspaceAppRoutes-BCHCikmJ.js +1 -0
- package/build/renderer/assets/app-BV3UAQkR.css +1 -0
- package/build/renderer/assets/app-CVPqqfZo.js +45 -0
- package/build/renderer/assets/conversationSidebarRecentEntries-iqaLqA1n.js +6 -0
- package/build/renderer/assets/{useDraftSessionChips-By3XXabI.js → useDraftSessionChips-D9BX6X92.js} +1 -1
- package/build/renderer/index.html +2 -2
- package/build/server/app/renderer/auth/api.d.ts +28 -2
- package/build/server/app/renderer/auth/api.d.ts.map +1 -1
- package/build/server/app/renderer/auth/api.js +29 -4
- 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 +15 -6
- package/build/server/app/renderer/providerCatalogClient.js.map +1 -1
- package/build/server/app/renderer/providerRegistryClient.d.ts +1 -1
- package/build/server/app/renderer/providerRegistryClient.d.ts.map +1 -1
- package/build/server/app/renderer/providerRegistryClient.js +23 -41
- package/build/server/app/renderer/providerRegistryClient.js.map +1 -1
- package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.d.ts +11 -4
- package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.d.ts.map +1 -1
- package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.js +25 -5
- package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.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 +8 -3
- package/build/server/app/server/authGatePolicy.js.map +1 -1
- package/build/server/app/server/authRoutes.d.ts +14 -1
- package/build/server/app/server/authRoutes.d.ts.map +1 -1
- package/build/server/app/server/authRoutes.js +395 -76
- package/build/server/app/server/authRoutes.js.map +1 -1
- package/build/server/app/server/contracts.d.ts +19 -1
- 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 +48 -2
- 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 +2 -1
- package/build/server/app/server/platformSetupRoutes.d.ts.map +1 -1
- package/build/server/app/server/platformSetupRoutes.js +117 -64
- 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 +33 -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 +16 -19
- 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/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 +22 -3
- package/build/server/config.d.ts.map +1 -1
- package/build/server/config.js +14 -13
- package/build/server/config.js.map +1 -1
- package/build/server/design/components/providerModelFieldsSupport.d.ts +3 -3
- package/build/server/design/components/providerModelFieldsSupport.d.ts.map +1 -1
- package/build/server/design/components/providerModelFieldsSupport.js +40 -38
- package/build/server/design/components/providerModelFieldsSupport.js.map +1 -1
- package/build/server/design/components/useProviderCatalogState.d.ts +1 -0
- package/build/server/design/components/useProviderCatalogState.d.ts.map +1 -1
- package/build/server/design/components/useProviderCatalogState.js +1 -0
- package/build/server/design/components/useProviderCatalogState.js.map +1 -1
- package/build/server/design/components/useProviderRegistryAutoRecheck.d.ts.map +1 -1
- package/build/server/design/components/useProviderRegistryAutoRecheck.js +20 -13
- package/build/server/design/components/useProviderRegistryAutoRecheck.js.map +1 -1
- package/build/server/design/components/useProviderRegistryState.d.ts.map +1 -1
- package/build/server/design/components/useProviderRegistryState.js +12 -25
- package/build/server/design/components/useProviderRegistryState.js.map +1 -1
- package/build/server/design/components/useProviderTargetReconciliation.d.ts.map +1 -1
- package/build/server/design/components/useProviderTargetReconciliation.js +5 -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/auth/actionGrant.d.ts +61 -0
- package/build/server/platform/auth/actionGrant.d.ts.map +1 -0
- package/build/server/platform/auth/actionGrant.js +108 -0
- package/build/server/platform/auth/actionGrant.js.map +1 -0
- package/build/server/platform/auth/adminCredentials.d.ts +37 -0
- package/build/server/platform/auth/adminCredentials.d.ts.map +1 -0
- package/build/server/platform/auth/adminCredentials.js +63 -0
- package/build/server/platform/auth/adminCredentials.js.map +1 -0
- package/build/server/platform/auth/bootstrap.d.ts +14 -0
- package/build/server/platform/auth/bootstrap.d.ts.map +1 -1
- package/build/server/platform/auth/bootstrap.js +29 -4
- package/build/server/platform/auth/bootstrap.js.map +1 -1
- package/build/server/platform/auth/config.d.ts.map +1 -1
- package/build/server/platform/auth/config.js +1 -1
- package/build/server/platform/auth/config.js.map +1 -1
- package/build/server/platform/auth/errorCodes.d.ts +2 -0
- package/build/server/platform/auth/errorCodes.d.ts.map +1 -1
- package/build/server/platform/auth/errorCodes.js +2 -0
- package/build/server/platform/auth/errorCodes.js.map +1 -1
- package/build/server/platform/auth/googleAccount.d.ts +40 -13
- package/build/server/platform/auth/googleAccount.d.ts.map +1 -1
- package/build/server/platform/auth/googleAccount.js +89 -70
- package/build/server/platform/auth/googleAccount.js.map +1 -1
- package/build/server/platform/auth/index.d.ts +4 -0
- package/build/server/platform/auth/index.d.ts.map +1 -1
- package/build/server/platform/auth/index.js +4 -0
- package/build/server/platform/auth/index.js.map +1 -1
- package/build/server/platform/auth/localLogin.d.ts +10 -0
- package/build/server/platform/auth/localLogin.d.ts.map +1 -1
- package/build/server/platform/auth/localLogin.js +17 -0
- package/build/server/platform/auth/localLogin.js.map +1 -1
- package/build/server/platform/auth/loginMethods.d.ts +18 -0
- package/build/server/platform/auth/loginMethods.d.ts.map +1 -0
- package/build/server/platform/auth/loginMethods.js +19 -0
- package/build/server/platform/auth/loginMethods.js.map +1 -0
- package/build/server/platform/auth/securityEvents.d.ts +31 -0
- package/build/server/platform/auth/securityEvents.d.ts.map +1 -0
- package/build/server/platform/auth/securityEvents.js +45 -0
- package/build/server/platform/auth/securityEvents.js.map +1 -0
- 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 -8
- 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 +8 -0
- package/build/server/products/chat/api/routeSupport.d.ts.map +1 -1
- package/build/server/products/chat/api/routeSupport.js +5 -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 +24 -91
- 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/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 -8
- package/build/server/products/shared/api/workspaceContracts.d.ts.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 +24 -0
- package/build/server/runtime/client.d.ts.map +1 -1
- package/build/server/runtime/client.js +62 -1
- package/build/server/runtime/client.js.map +1 -1
- package/build/server/runtime/setup.d.ts +10 -4
- package/build/server/runtime/setup.d.ts.map +1 -1
- package/build/server/runtime/setup.js +14 -18
- 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 +112 -81
- 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/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 +238 -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 +236 -3
- package/build/server/shared/i18n/catalogs/zh-TW.js.map +1 -1
- package/build/server/shared/i18n/index.d.ts +231 -0
- package/build/server/shared/i18n/index.d.ts.map +1 -1
- package/build/server/shared/i18n/messageKeys.d.ts +231 -0
- package/build/server/shared/i18n/messageKeys.d.ts.map +1 -1
- package/build/server/shared/i18n/messageKeys.js +231 -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 +6 -2
- package/build/server/shared/providerCatalog.d.ts.map +1 -1
- package/build/server/shared/providerCatalog.js +15 -1
- package/build/server/shared/providerCatalog.js.map +1 -1
- package/build/server/shared/providerCatalogData.d.ts +38 -22
- package/build/server/shared/providerCatalogData.d.ts.map +1 -1
- package/build/server/shared/providerCatalogData.js +31 -10
- 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 +6 -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/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 +23 -1
- 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/scripts/README.md +73 -26
- package/scripts/build-desktop-installer.mjs +15 -0
- 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-meta-cli.sh +8 -0
- package/scripts/linux/node-cli-common.sh +2 -75
- package/scripts/linux/provider-cli-common.sh +103 -30
- package/scripts/linux/sync-agent-skills.sh +27 -5
- package/scripts/linux/test-linux-package-smoke.sh +4 -3
- package/scripts/linux/upgrade-cli-tools.sh +1 -1
- 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-meta-cli.sh +8 -0
- package/scripts/macos/node-cli-common.sh +2 -75
- package/scripts/macos/provider-cli-common.sh +103 -30
- package/scripts/macos/sync-agent-skills.sh +27 -5
- package/scripts/macos/test-macos-package-smoke.sh +4 -3
- package/scripts/macos/upgrade-cli-tools.sh +1 -1
- package/scripts/package-desktop.mjs +15 -2
- package/scripts/testing/check-usage-app.mts +266 -0
- package/scripts/testing/usage-app-smoke-electron.cjs +10 -0
- package/scripts/testing/usage-app-smoke-renderer.tsx +8 -0
- package/scripts/verify-desktop-app-bundle.mjs +108 -0
- package/scripts/windows/Build-DesktopPackage.ps1 +9 -6
- package/scripts/windows/Check-WindowsSetupReadiness.ps1 +14 -443
- package/scripts/windows/{Install-Aider.ps1 → Install-MetaCli.ps1} +180 -92
- package/scripts/windows/Install-Ollama.ps1 +4 -1
- package/scripts/windows/Remove-MergedBranches.ps1 +229 -0
- package/scripts/windows/Sync-AgentSkills.ps1 +29 -6
- package/scripts/windows/Test-WindowsInstallerSmoke.ps1 +2 -1
- 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/App-C57f4p8k.js +0 -2
- package/build/renderer/assets/App-CPqGDXVi.js +0 -1
- package/build/renderer/assets/App-DGwkRFZl.css +0 -1
- package/build/renderer/assets/WorkspaceAppRoutes-DYg2vnjz.js +0 -1
- package/build/renderer/assets/app-DVN9Ghrk.js +0 -43
- package/build/renderer/assets/app-XnXwkcD2.css +0 -1
- package/build/renderer/assets/conversationSidebarRecentEntries-XZVCnMLw.js +0 -6
- package/scripts/linux/install-aider.sh +0 -8
- package/scripts/macos/install-aider.sh +0 -8
package/build/desktop/main.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { dirname, join } from 'node:path';
|
|
2
|
-
import { app, BrowserWindow,
|
|
2
|
+
import { app, BrowserWindow, dialog, ipcMain, session, shell, systemPreferences, } from 'electron';
|
|
3
3
|
import { buildDesktopBootstrapPage } from './bootstrapPage.js';
|
|
4
4
|
import { resolveDesktopBootstrapNavigation, shouldRevealDesktopBootstrapRecovery, shouldNavigateDesktopBootstrap, resolveDesktopWindowRevealNavigation, shouldAllowDesktopBootstrapWindowNavigation, } from './bootstrapNavigation.js';
|
|
5
5
|
import { resolveCatsHomeDir, resolveDesktopHostConfig, resolveDesktopUserDataDir, } from './config.js';
|
|
@@ -12,10 +12,12 @@ import { buildDesktopBootstrapSnapshot, fetchJson, } from './readiness.js';
|
|
|
12
12
|
import { isDesktopAppOriginUrl, isDesktopHostActionId, resolveDesktopBrowserHandoffUrl, validateDesktopUrl, } from './security.js';
|
|
13
13
|
import { assertMainWindowIpcSender } from './ipcSecurity.js';
|
|
14
14
|
import { readPersistedSetupCompletionState, } from './persistedSetupState.js';
|
|
15
|
-
import { buildDesktopSetupSnapshot, createEmptyDesktopSetupState, runDesktopSetupHelper,
|
|
15
|
+
import { buildDesktopSetupSnapshot, createEmptyDesktopSetupState, runDesktopSetupHelper, } from './setupBridge.js';
|
|
16
16
|
import { isDesktopBootstrapLoadingPhase, resolveDesktopBootstrapError, shouldAttemptDesktopLateReadyRecovery, } from './startupRecovery.js';
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
17
|
+
import { runDesktopUpdateDialog } from './updateDialog.js';
|
|
18
|
+
import { resolveSelectedSetupAuditActions } from './setupAudit.js';
|
|
19
|
+
import { pauseSelectedSetupHelpers, retryPendingSetupOperationReleases, targetsForSetupHelper, withSelectedSetupTargets } from './providerSelection.js';
|
|
20
|
+
import { buildDesktopCliInventoryFromRuntime, probeContradictsCachedBootstrapState, } from './cliInventoryProbe.js';
|
|
19
21
|
import { createDesktopTrayController, } from './tray.js';
|
|
20
22
|
import { buildDesktopTrayMenuState as buildElectronTrayMenuState, buildDesktopTrayQuittingMenuState, } from './trayMenu.js';
|
|
21
23
|
import { applyDesktopHostPlatformShellUpdate, normalizePlatformShellSetupState, parseDesktopHostPlatformShellUpdate, } from './platformShellUpdate.js';
|
|
@@ -26,7 +28,6 @@ import { createDesktopUpdateCapability, createDesktopUpdateManager, createUnavai
|
|
|
26
28
|
import { configureElectronUpdater, createElectronUpdaterAdapter, resolveAutoUpdaterExport, } from './updaterAdapter.js';
|
|
27
29
|
import { createDesktopUpdateIpcHandlers, createDesktopUpdateSnapshotBroadcast, } from './updateIpc.js';
|
|
28
30
|
import { withDesktopInstallHandoff } from './updateInstallHandoff.js';
|
|
29
|
-
import { DESKTOP_UPDATE_SETTINGS_PATH, resolveDesktopUpdateAnnouncement, } from './updateNotifications.js';
|
|
30
31
|
import { applyDesktopWindowChrome, resolveDesktopWindowChromeOptions, } from './windowChrome.js';
|
|
31
32
|
import { resolveDesktopWindowIconPath } from './windowIcon.js';
|
|
32
33
|
import { readDesktopStartupPreferences, resolveDesktopStartupLaunchContext, syncDesktopStartupPreferences, updateDesktopStartupPreferences, DESKTOP_LAUNCH_AT_LOGIN_ARG, } from './desktopStartup.js';
|
|
@@ -72,6 +73,7 @@ let runtimeCliInventoryPollTimer = null;
|
|
|
72
73
|
let runtimeCliInventoryScanPending = false;
|
|
73
74
|
let shuttingDown = false;
|
|
74
75
|
let shutdownPromise = null;
|
|
76
|
+
let setupHelperDrain = null;
|
|
75
77
|
let exitingAfterShutdown = false;
|
|
76
78
|
let trayController = null;
|
|
77
79
|
let stateStore = null;
|
|
@@ -118,12 +120,25 @@ function isRuntimeCliInventoryScanActive(probe) {
|
|
|
118
120
|
function isRuntimeCliInventoryScanErrored(probe) {
|
|
119
121
|
return probe?.state?.status === 'error';
|
|
120
122
|
}
|
|
123
|
+
// Refreshing only when the probe and the cached health payload disagree keeps
|
|
124
|
+
// this off the steady-state path: it fires once, on the transition that
|
|
125
|
+
// actually happened, rather than putting GET /health on a timer.
|
|
126
|
+
function probeContradictsCachedRuntimeHealth(probe) {
|
|
127
|
+
if (!latestRuntimeHealthPayload) {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
const cached = normalizeRuntimeHealthPayload(latestRuntimeHealthPayload);
|
|
131
|
+
return probeContradictsCachedBootstrapState(probe, cached.readiness?.bootstrapRequired === true || cached.startup?.bootstrapRequired === true);
|
|
132
|
+
}
|
|
121
133
|
function rememberRuntimeCliInventoryProbe(probe) {
|
|
122
134
|
if (!probe) {
|
|
123
135
|
return false;
|
|
124
136
|
}
|
|
125
|
-
if (probe.
|
|
126
|
-
|
|
137
|
+
if (latestCliInventoryProbe?.selection?.revision !== probe.selection?.revision) {
|
|
138
|
+
latestProviderDiagnosticsPayload = null;
|
|
139
|
+
}
|
|
140
|
+
latestCliInventoryProbe = probe;
|
|
141
|
+
if (probe.selection?.state !== 'selected' || (probe.scan && !isRuntimeCliInventoryScanActive(probe))) {
|
|
127
142
|
runtimeCliInventoryScanPending = false;
|
|
128
143
|
clearCliInventoryError();
|
|
129
144
|
return true;
|
|
@@ -736,13 +751,31 @@ function buildTrayControllerOptions() {
|
|
|
736
751
|
void shutdownHost();
|
|
737
752
|
},
|
|
738
753
|
canInteract: () => !shuttingDown,
|
|
739
|
-
|
|
740
|
-
|
|
754
|
+
// One item, one handler, whatever state the host is in. The tray closes on
|
|
755
|
+
// click, so the dialog is where every answer lives -- progress included.
|
|
756
|
+
onOpenUpdateDialog: async () => {
|
|
757
|
+
if (shuttingDown || !updateManager) {
|
|
741
758
|
return;
|
|
742
759
|
}
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
760
|
+
await runDesktopUpdateDialog({
|
|
761
|
+
manager: updateManager,
|
|
762
|
+
platform: process.platform,
|
|
763
|
+
locale: app.getLocale(),
|
|
764
|
+
isShuttingDown: () => shuttingDown,
|
|
765
|
+
showDialog: async (dialogSpec) => {
|
|
766
|
+
const choice = await dialog.showMessageBox({
|
|
767
|
+
type: dialogSpec.action === 'none' ? 'info' : 'question',
|
|
768
|
+
title: dialogSpec.title,
|
|
769
|
+
message: dialogSpec.message,
|
|
770
|
+
detail: dialogSpec.detail,
|
|
771
|
+
buttons: dialogSpec.buttons,
|
|
772
|
+
defaultId: 0,
|
|
773
|
+
cancelId: dialogSpec.buttons.length - 1,
|
|
774
|
+
noLink: true,
|
|
775
|
+
});
|
|
776
|
+
return choice.response;
|
|
777
|
+
},
|
|
778
|
+
});
|
|
746
779
|
},
|
|
747
780
|
};
|
|
748
781
|
}
|
|
@@ -797,11 +830,26 @@ async function getSetupSnapshot() {
|
|
|
797
830
|
if (!hostConfig) {
|
|
798
831
|
throw new Error('Desktop host is not initialized.');
|
|
799
832
|
}
|
|
800
|
-
|
|
833
|
+
const snapshot = await buildDesktopSetupSnapshot({
|
|
801
834
|
config: hostConfig,
|
|
802
835
|
packaging: resolveCurrentPackagingPlan(hostConfig),
|
|
803
836
|
state: setupState ?? createEmptyDesktopSetupState(),
|
|
804
837
|
});
|
|
838
|
+
const probe = await fetchRuntimeCliInventoryProbe(hostConfig.runtimeBaseUrl);
|
|
839
|
+
snapshot.helpers = snapshot.helpers.filter((helper) => {
|
|
840
|
+
if (!probe?.selection)
|
|
841
|
+
return false;
|
|
842
|
+
try {
|
|
843
|
+
return targetsForSetupHelper(helper.id, probe.selection).length > 0;
|
|
844
|
+
}
|
|
845
|
+
catch {
|
|
846
|
+
return false;
|
|
847
|
+
}
|
|
848
|
+
});
|
|
849
|
+
if (snapshot.resumeAction && !snapshot.helpers.some((helper) => helper.id === snapshot.resumeAction.helperId)) {
|
|
850
|
+
snapshot.resumeAction = null;
|
|
851
|
+
}
|
|
852
|
+
return snapshot;
|
|
805
853
|
}
|
|
806
854
|
async function fetchWithTimeout(url, init, timeoutMs) {
|
|
807
855
|
const controller = new AbortController();
|
|
@@ -831,80 +879,39 @@ async function fetchJsonWithTimeout(url, init, timeoutMs) {
|
|
|
831
879
|
}
|
|
832
880
|
return await response.json();
|
|
833
881
|
}
|
|
834
|
-
function shouldRefreshRuntimeCliInventoryProbe(probe, options) {
|
|
835
|
-
if (options.triggerScanIfMissing !== true) {
|
|
836
|
-
return false;
|
|
837
|
-
}
|
|
838
|
-
if (runtimeCliInventoryScanPending || isRuntimeCliInventoryScanActive(probe)) {
|
|
839
|
-
return false;
|
|
840
|
-
}
|
|
841
|
-
if (!probe?.scan) {
|
|
842
|
-
return true;
|
|
843
|
-
}
|
|
844
|
-
return !probe.scan.providers.some((provider) => provider.available === true);
|
|
845
|
-
}
|
|
846
882
|
async function fetchRuntimeCliInventoryProbe(baseUrl, options = {}) {
|
|
847
|
-
|
|
848
|
-
const
|
|
849
|
-
let probe
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
}, setupStateTimeoutMs);
|
|
856
|
-
}
|
|
857
|
-
catch {
|
|
858
|
-
if (options.triggerScanIfMissing !== true) {
|
|
859
|
-
return null;
|
|
860
|
-
}
|
|
861
|
-
}
|
|
862
|
-
if (probe?.scan || isRuntimeCliInventoryScanActive(probe)) {
|
|
863
|
-
return probe;
|
|
864
|
-
}
|
|
865
|
-
if (runtimeCliInventoryScanPending) {
|
|
866
|
-
return probe;
|
|
867
|
-
}
|
|
868
|
-
if (!options.forceRescan && !shouldRefreshRuntimeCliInventoryProbe(probe, options)) {
|
|
869
|
-
return probe;
|
|
870
|
-
}
|
|
883
|
+
await retryPendingSetupOperationReleases();
|
|
884
|
+
const timeout = options.setupStateTimeoutMs ?? RUNTIME_SETUP_STATE_TIMEOUT_MS;
|
|
885
|
+
let probe;
|
|
886
|
+
try {
|
|
887
|
+
probe = await fetchJsonWithTimeout(`${baseUrl}/setup-state`, { method: 'GET' }, timeout);
|
|
888
|
+
}
|
|
889
|
+
catch {
|
|
890
|
+
return null;
|
|
871
891
|
}
|
|
872
|
-
//
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
892
|
+
// A forced scan still needs a current, nonempty declared selection.
|
|
893
|
+
if (probe.selection?.state !== 'selected')
|
|
894
|
+
return probe;
|
|
895
|
+
if (runtimeCliInventoryScanPending || isRuntimeCliInventoryScanActive(probe))
|
|
896
|
+
return probe;
|
|
897
|
+
if (!options.forceRescan && (probe.scan || !options.triggerScanIfMissing))
|
|
898
|
+
return probe;
|
|
876
899
|
try {
|
|
877
900
|
runtimeCliInventoryScanPending = true;
|
|
878
|
-
const
|
|
901
|
+
const response = await fetchWithTimeout(`${baseUrl}/setup-scan`, {
|
|
879
902
|
method: 'POST',
|
|
880
903
|
headers: { 'content-type': 'application/json', accept: 'application/json' },
|
|
881
|
-
body: JSON.stringify({ manual:
|
|
882
|
-
}, scanTimeoutMs);
|
|
883
|
-
if (!
|
|
904
|
+
body: JSON.stringify({ manual: options.forceRescan === true, targets: probe.selection.targets }),
|
|
905
|
+
}, options.scanTimeoutMs ?? RUNTIME_SETUP_SCAN_TIMEOUT_MS);
|
|
906
|
+
if (!response.ok)
|
|
884
907
|
runtimeCliInventoryScanPending = false;
|
|
885
|
-
|
|
886
|
-
}
|
|
887
|
-
}
|
|
888
|
-
catch {
|
|
889
|
-
return probe;
|
|
890
|
-
}
|
|
891
|
-
try {
|
|
892
|
-
return await fetchJsonWithTimeout(`${baseUrl}/setup-state`, {
|
|
893
|
-
method: 'GET',
|
|
894
|
-
}, setupStateTimeoutMs);
|
|
908
|
+
return await fetchJsonWithTimeout(`${baseUrl}/setup-state`, { method: 'GET' }, timeout);
|
|
895
909
|
}
|
|
896
910
|
catch {
|
|
911
|
+
runtimeCliInventoryScanPending = false;
|
|
897
912
|
return probe;
|
|
898
913
|
}
|
|
899
914
|
}
|
|
900
|
-
function isCliMissingBootstrapSnapshot(snapshot) {
|
|
901
|
-
if (hostConfig?.bootstrap.onboardingMode !== 'cli_inventory_gate') {
|
|
902
|
-
return false;
|
|
903
|
-
}
|
|
904
|
-
return Boolean(snapshot.phase === 'needs_prerequisites'
|
|
905
|
-
&& snapshot.prerequisites?.cliInventory?.source === 'runtime'
|
|
906
|
-
&& snapshot.prerequisites.cliInventory.total === 0);
|
|
907
|
-
}
|
|
908
915
|
function buildSnapshot(lastError) {
|
|
909
916
|
if (!hostConfig || !supervisor) {
|
|
910
917
|
throw new Error('Desktop host is not initialized.');
|
|
@@ -927,6 +934,8 @@ function buildSnapshot(lastError) {
|
|
|
927
934
|
packaging: packagingState ?? undefined,
|
|
928
935
|
setup: setupState ?? undefined,
|
|
929
936
|
hostStatePath: hostConfig.paths.hostStatePath,
|
|
937
|
+
providerSelection: latestCliInventoryProbe?.selection ?? null,
|
|
938
|
+
providerCatalog: latestCliInventoryProbe?.universe ?? [],
|
|
930
939
|
cliInventory: resolveSnapshotCliInventory(),
|
|
931
940
|
cliInventoryError: latestCliInventoryError,
|
|
932
941
|
});
|
|
@@ -951,7 +960,7 @@ async function refreshBootstrapSnapshot(persistedSetup = null) {
|
|
|
951
960
|
?? await readPersistedSetupCompletionState(hostConfig.paths.appStatePath);
|
|
952
961
|
latestPersistedSetupState = effectivePersistedSetup;
|
|
953
962
|
const setupCompleted = Boolean(effectivePersistedSetup.setupCompleteAt || effectivePersistedSetup.productSetupCompleted);
|
|
954
|
-
const shouldReadCliInventory =
|
|
963
|
+
const shouldReadCliInventory = true;
|
|
955
964
|
// /diagnostics/providers is intentionally NOT fetched on the boot critical
|
|
956
965
|
// path — it's not authoritative for any phase decision before setup, and
|
|
957
966
|
// for setup-complete users we kick it off in the background (see
|
|
@@ -1006,6 +1015,8 @@ async function refreshBootstrapSnapshot(persistedSetup = null) {
|
|
|
1006
1015
|
packaging: packagingState ?? undefined,
|
|
1007
1016
|
setup: setupState ?? undefined,
|
|
1008
1017
|
hostStatePath: hostConfig.paths.hostStatePath,
|
|
1018
|
+
providerSelection: latestCliInventoryProbe?.selection ?? null,
|
|
1019
|
+
providerCatalog: latestCliInventoryProbe?.universe ?? [],
|
|
1009
1020
|
cliInventory: resolveSnapshotCliInventory(),
|
|
1010
1021
|
cliInventoryError: latestCliInventoryError,
|
|
1011
1022
|
});
|
|
@@ -1017,28 +1028,20 @@ function hasPersistedProductSetupCompletion(persistedSetup = null) {
|
|
|
1017
1028
|
const productEvents = diagnosticsState?.product?.events ?? [];
|
|
1018
1029
|
return productEvents.some((event) => event.kind === 'setup_completed' && event.status === 'ok');
|
|
1019
1030
|
}
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
}
|
|
1024
|
-
if (!shouldAutoRunSetupAudit(setupState, {
|
|
1025
|
-
setupCompleteAt: snapshot.app.setupCompleteAt ?? persistedSetup?.setupCompleteAt ?? null,
|
|
1026
|
-
productSetupCompleted: hasPersistedProductSetupCompletion(persistedSetup),
|
|
1027
|
-
})) {
|
|
1028
|
-
return;
|
|
1029
|
-
}
|
|
1030
|
-
const setupAuditAction = resolveDefaultSetupAuditAction(hostConfig);
|
|
1031
|
-
if (!setupAuditAction) {
|
|
1031
|
+
const auditedSetupHelpers = new Set();
|
|
1032
|
+
async function maybePrimeSetupAudit(_snapshot, _persistedSetup = null) {
|
|
1033
|
+
if (!hostConfig)
|
|
1032
1034
|
return;
|
|
1035
|
+
const selection = latestCliInventoryProbe?.selection ?? null;
|
|
1036
|
+
for (const action of resolveSelectedSetupAuditActions(selection)) {
|
|
1037
|
+
const key = `${selection.revision}:${action.helperId}`;
|
|
1038
|
+
if (auditedSetupHelpers.has(key))
|
|
1039
|
+
continue;
|
|
1040
|
+
auditedSetupHelpers.add(key);
|
|
1041
|
+
await runSetupAction({ helperId: action.helperId, mode: 'check' }, {
|
|
1042
|
+
publishMode: 'bootstrap-only', refreshBootstrap: false,
|
|
1043
|
+
});
|
|
1033
1044
|
}
|
|
1034
|
-
await runSetupAction({
|
|
1035
|
-
helperId: setupAuditAction.helperId,
|
|
1036
|
-
mode: 'check',
|
|
1037
|
-
extraArguments: setupAuditAction.extraArguments,
|
|
1038
|
-
}, {
|
|
1039
|
-
publishMode: 'bootstrap-only',
|
|
1040
|
-
refreshBootstrap: false,
|
|
1041
|
-
});
|
|
1042
1045
|
}
|
|
1043
1046
|
function scheduleBackgroundSetupAudit(snapshot, persistedSetup = null) {
|
|
1044
1047
|
if (isDesktopBootstrapLoadingPhase(snapshot.phase) || backgroundSetupAuditPromise) {
|
|
@@ -1074,8 +1077,9 @@ async function pollRuntimeCliInventory(options) {
|
|
|
1074
1077
|
? RUNTIME_SETUP_SCAN_TIMEOUT_MS
|
|
1075
1078
|
: RUNTIME_BOOTSTRAP_SETUP_SCAN_TIMEOUT_MS,
|
|
1076
1079
|
});
|
|
1080
|
+
const staleRuntimeHealth = probeContradictsCachedRuntimeHealth(probe);
|
|
1077
1081
|
if (rememberRuntimeCliInventoryProbe(probe)) {
|
|
1078
|
-
const snapshot = publishSnapshot(buildSnapshot());
|
|
1082
|
+
const snapshot = publishSnapshot(staleRuntimeHealth ? await refreshBootstrapSnapshot() : buildSnapshot());
|
|
1079
1083
|
scheduleBackgroundSetupAudit(snapshot, latestPersistedSetupState);
|
|
1080
1084
|
await maybeOpenApp(snapshot);
|
|
1081
1085
|
return;
|
|
@@ -1086,6 +1090,13 @@ async function pollRuntimeCliInventory(options) {
|
|
|
1086
1090
|
scheduleBackgroundSetupAudit(snapshot, latestPersistedSetupState);
|
|
1087
1091
|
return;
|
|
1088
1092
|
}
|
|
1093
|
+
if (staleRuntimeHealth) {
|
|
1094
|
+
// No scan snapshot to publish, but the runtime has still moved on. Pick the
|
|
1095
|
+
// change up rather than republishing a phase built from the stale payload.
|
|
1096
|
+
// Deliberately falls through to the reschedule below: this branch is the
|
|
1097
|
+
// one that keeps waiting for a scan, and it must not stop doing that.
|
|
1098
|
+
publishSnapshot(await refreshBootstrapSnapshot());
|
|
1099
|
+
}
|
|
1089
1100
|
scheduleRuntimeCliInventoryPoll(options);
|
|
1090
1101
|
}
|
|
1091
1102
|
async function retryCliInventoryScanInBackground(options) {
|
|
@@ -1107,9 +1118,12 @@ async function retryCliInventoryScanInBackground(options) {
|
|
|
1107
1118
|
catch {
|
|
1108
1119
|
probe = null;
|
|
1109
1120
|
}
|
|
1121
|
+
const staleRuntimeHealth = probeContradictsCachedRuntimeHealth(probe);
|
|
1110
1122
|
if (rememberRuntimeCliInventoryProbe(probe)) {
|
|
1111
1123
|
try {
|
|
1112
|
-
|
|
1124
|
+
// This path returns without scheduling a poll, so a stale cached health
|
|
1125
|
+
// payload would survive here until the app restarts.
|
|
1126
|
+
const snapshot = publishSnapshot(staleRuntimeHealth ? await refreshBootstrapSnapshot() : buildSnapshot());
|
|
1113
1127
|
scheduleBackgroundSetupAudit(snapshot, latestPersistedSetupState);
|
|
1114
1128
|
await maybeOpenApp(snapshot);
|
|
1115
1129
|
}
|
|
@@ -1123,7 +1137,7 @@ async function retryCliInventoryScanInBackground(options) {
|
|
|
1123
1137
|
await new Promise((resolve) => setTimeout(resolve, wait));
|
|
1124
1138
|
}
|
|
1125
1139
|
}
|
|
1126
|
-
if (
|
|
1140
|
+
if (runtimeCliInventoryScanPending || isRuntimeCliInventoryScanActive(latestCliInventoryProbe)) {
|
|
1127
1141
|
scheduleRuntimeCliInventoryPoll({
|
|
1128
1142
|
setupCompleted: options.setupCompleted,
|
|
1129
1143
|
});
|
|
@@ -1152,21 +1166,16 @@ function scheduleBackgroundBootstrapWork(snapshot, persistedSetup) {
|
|
|
1152
1166
|
const setupCompleted = Boolean(snapshot.app.setupCompleteAt
|
|
1153
1167
|
?? persistedSetup?.setupCompleteAt
|
|
1154
1168
|
?? persistedSetup?.productSetupCompleted);
|
|
1155
|
-
//
|
|
1156
|
-
// the packaged readiness audit, not in cats-runtime's CLI inventory probe.
|
|
1157
|
-
// Fresh users without Node need this signal so the recovery panel can
|
|
1158
|
-
// surface install_node_lts before they fail an Install action.
|
|
1169
|
+
// Run shared Node and local-model checks only for eligible selected targets.
|
|
1159
1170
|
scheduleBackgroundSetupAudit(snapshot, persistedSetup);
|
|
1160
|
-
//
|
|
1161
|
-
//
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
});
|
|
1169
|
-
}
|
|
1171
|
+
// Inventory observes the saved selection; missing/invalid/empty selections
|
|
1172
|
+
// never launch a provider scan. Availability does not gate product onboarding.
|
|
1173
|
+
void retryCliInventoryScanInBackground({
|
|
1174
|
+
forceRescan: false,
|
|
1175
|
+
setupCompleted,
|
|
1176
|
+
}).catch((error) => {
|
|
1177
|
+
process.stderr.write(`Background CLI inventory rescan failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
1178
|
+
});
|
|
1170
1179
|
// Provider diagnostics — only meaningful after setup is applied. Best
|
|
1171
1180
|
// effort, single-shot; failures fall back to "Cats can still open".
|
|
1172
1181
|
if (setupCompleted) {
|
|
@@ -1297,7 +1306,17 @@ async function createUpdateManagerForLaunch(config, initialLastCheckedAt = null)
|
|
|
1297
1306
|
// supervisor-lifetime environment snapshot populated during the first
|
|
1298
1307
|
// bootstrap, including the Desktop-provisioned platform auth secret.
|
|
1299
1308
|
exitingAfterShutdown = false;
|
|
1300
|
-
|
|
1309
|
+
try {
|
|
1310
|
+
await supervisor?.startAll();
|
|
1311
|
+
}
|
|
1312
|
+
finally {
|
|
1313
|
+
// A failed recovery leaves Runtime unavailable, not helper admission
|
|
1314
|
+
// permanently paused after a later successful Retry.
|
|
1315
|
+
if (!shuttingDown) {
|
|
1316
|
+
setupHelperDrain?.resume();
|
|
1317
|
+
setupHelperDrain = null;
|
|
1318
|
+
}
|
|
1319
|
+
}
|
|
1301
1320
|
await syncTrayController();
|
|
1302
1321
|
},
|
|
1303
1322
|
exitAfterUncertainHandoff: async () => {
|
|
@@ -1328,77 +1347,6 @@ async function createUpdateManagerForLaunch(config, initialLastCheckedAt = null)
|
|
|
1328
1347
|
},
|
|
1329
1348
|
});
|
|
1330
1349
|
}
|
|
1331
|
-
async function openDesktopUpdateSettings() {
|
|
1332
|
-
if (shuttingDown || !hostConfig) {
|
|
1333
|
-
return;
|
|
1334
|
-
}
|
|
1335
|
-
await showMainWindow(`${hostConfig.appBaseUrl}${DESKTOP_UPDATE_SETTINGS_PATH}`);
|
|
1336
|
-
}
|
|
1337
|
-
/**
|
|
1338
|
-
* Shows a native notification, reporting whether the user will actually see it.
|
|
1339
|
-
*
|
|
1340
|
-
* A false return sends the caller to the navigation fallback. Notifying is not
|
|
1341
|
-
* worth failing a check over, so a throwing platform is treated the same as one
|
|
1342
|
-
* without notification support.
|
|
1343
|
-
*/
|
|
1344
|
-
function showDesktopUpdateNotification(notification) {
|
|
1345
|
-
try {
|
|
1346
|
-
const native = new Notification({
|
|
1347
|
-
title: notification.title,
|
|
1348
|
-
body: notification.body,
|
|
1349
|
-
});
|
|
1350
|
-
native.on('click', () => {
|
|
1351
|
-
void openDesktopUpdateSettings();
|
|
1352
|
-
});
|
|
1353
|
-
native.show();
|
|
1354
|
-
return true;
|
|
1355
|
-
}
|
|
1356
|
-
catch (error) {
|
|
1357
|
-
process.stderr.write('[desktop-update] native notification unavailable: '
|
|
1358
|
-
+ `${error instanceof Error ? error.message : String(error)}\n`);
|
|
1359
|
-
return false;
|
|
1360
|
-
}
|
|
1361
|
-
}
|
|
1362
|
-
function areNativeNotificationsSupported() {
|
|
1363
|
-
try {
|
|
1364
|
-
return Notification.isSupported();
|
|
1365
|
-
}
|
|
1366
|
-
catch {
|
|
1367
|
-
return false;
|
|
1368
|
-
}
|
|
1369
|
-
}
|
|
1370
|
-
async function announceDesktopUpdateResult(origin, snapshot) {
|
|
1371
|
-
if (!snapshot || shuttingDown) {
|
|
1372
|
-
return;
|
|
1373
|
-
}
|
|
1374
|
-
const announcement = resolveDesktopUpdateAnnouncement({
|
|
1375
|
-
origin,
|
|
1376
|
-
snapshot,
|
|
1377
|
-
locale: app.getLocale(),
|
|
1378
|
-
notificationsSupported: areNativeNotificationsSupported(),
|
|
1379
|
-
});
|
|
1380
|
-
if (announcement.notification && showDesktopUpdateNotification(announcement.notification)) {
|
|
1381
|
-
return;
|
|
1382
|
-
}
|
|
1383
|
-
if (announcement.fallbackNavigatePath) {
|
|
1384
|
-
await openDesktopUpdateSettings();
|
|
1385
|
-
}
|
|
1386
|
-
}
|
|
1387
|
-
/**
|
|
1388
|
-
* Runs a check and reports its result to whoever asked for it.
|
|
1389
|
-
*
|
|
1390
|
-
* The origin is required rather than defaulted: it decides whether the result
|
|
1391
|
-
* is announced at all, and a new caller silently inheriting another surface's
|
|
1392
|
-
* policy is the failure this signature exists to prevent.
|
|
1393
|
-
*/
|
|
1394
|
-
async function refreshUpdateState(origin) {
|
|
1395
|
-
if (!updateManager) {
|
|
1396
|
-
return null;
|
|
1397
|
-
}
|
|
1398
|
-
updateState = await updateManager.checkForUpdates();
|
|
1399
|
-
await announceDesktopUpdateResult(origin, updateState);
|
|
1400
|
-
return updateState;
|
|
1401
|
-
}
|
|
1402
1350
|
async function bootstrapDesktopHost(restartServices = false) {
|
|
1403
1351
|
if (!hostConfig || !supervisor) {
|
|
1404
1352
|
throw new Error('Desktop host is not initialized.');
|
|
@@ -1406,7 +1354,9 @@ async function bootstrapDesktopHost(restartServices = false) {
|
|
|
1406
1354
|
if (bootstrapPromise) {
|
|
1407
1355
|
return bootstrapPromise;
|
|
1408
1356
|
}
|
|
1357
|
+
const helperPause = restartServices ? pauseSelectedSetupHelpers() : null;
|
|
1409
1358
|
bootstrapPromise = (async () => {
|
|
1359
|
+
await helperPause?.drained;
|
|
1410
1360
|
latestBootstrapError = null;
|
|
1411
1361
|
latestCliInventoryError = null;
|
|
1412
1362
|
runtimeCliInventoryScanPending = false;
|
|
@@ -1442,6 +1392,7 @@ async function bootstrapDesktopHost(restartServices = false) {
|
|
|
1442
1392
|
const snapshot = publishSnapshot(buildSnapshot());
|
|
1443
1393
|
return maybeOpenApp(snapshot).then(() => snapshot);
|
|
1444
1394
|
}).finally(() => {
|
|
1395
|
+
helperPause?.resume();
|
|
1445
1396
|
bootstrapPromise = null;
|
|
1446
1397
|
});
|
|
1447
1398
|
return bootstrapPromise;
|
|
@@ -1472,17 +1423,15 @@ async function runHostAction(actionId) {
|
|
|
1472
1423
|
}
|
|
1473
1424
|
if (actionId === 'open_setup') {
|
|
1474
1425
|
const snapshot = latestSnapshot ?? await refreshBootstrapSnapshot();
|
|
1475
|
-
if (
|
|
1426
|
+
if (!latestCliInventoryProbe?.selection || ['missing', 'invalid'].includes(latestCliInventoryProbe.selection.state))
|
|
1476
1427
|
return snapshot;
|
|
1477
|
-
}
|
|
1478
1428
|
await showMainWindow(`${hostConfig.appBaseUrl}/setup`);
|
|
1479
1429
|
return snapshot;
|
|
1480
1430
|
}
|
|
1481
1431
|
if (actionId === 'open_chat') {
|
|
1482
1432
|
const snapshot = latestSnapshot ?? await refreshBootstrapSnapshot();
|
|
1483
|
-
if (
|
|
1433
|
+
if (!latestCliInventoryProbe?.selection || ['missing', 'invalid'].includes(latestCliInventoryProbe.selection.state))
|
|
1484
1434
|
return snapshot;
|
|
1485
|
-
}
|
|
1486
1435
|
await showMainWindow(`${hostConfig.appBaseUrl}${snapshot.app.entryPath}`);
|
|
1487
1436
|
return snapshot;
|
|
1488
1437
|
}
|
|
@@ -1497,10 +1446,9 @@ async function runSetupAction(action, options = {}) {
|
|
|
1497
1446
|
throw new Error('Desktop host is not initialized.');
|
|
1498
1447
|
}
|
|
1499
1448
|
const packaging = resolveCurrentPackagingPlan(hostConfig);
|
|
1500
|
-
const result = await
|
|
1501
|
-
|
|
1502
|
-
packaging,
|
|
1503
|
-
action,
|
|
1449
|
+
const result = await withSelectedSetupTargets({
|
|
1450
|
+
baseUrl: hostConfig.runtimeBaseUrl, helperId: action.helperId,
|
|
1451
|
+
run: () => runDesktopSetupHelper({ config: hostConfig, packaging, action }),
|
|
1504
1452
|
});
|
|
1505
1453
|
packagingState = packaging;
|
|
1506
1454
|
setupState = {
|
|
@@ -1539,8 +1487,7 @@ async function runSetupAction(action, options = {}) {
|
|
|
1539
1487
|
// depend on the helper's runState — the rescan itself is authoritative.
|
|
1540
1488
|
const setupCompleted = hasPersistedSetupCompletion();
|
|
1541
1489
|
const shouldRefreshCliInventory = action.mode !== 'check'
|
|
1542
|
-
&& shouldRefreshCliInventoryAfterSetupAction(action.helperId)
|
|
1543
|
-
&& (setupCompleted || hostConfig.bootstrap.onboardingMode === 'cli_inventory_gate');
|
|
1490
|
+
&& shouldRefreshCliInventoryAfterSetupAction(action.helperId);
|
|
1544
1491
|
if (shouldRefreshCliInventory) {
|
|
1545
1492
|
const refreshedProbe = await fetchRuntimeCliInventoryProbe(hostConfig.runtimeBaseUrl, {
|
|
1546
1493
|
forceRescan: true,
|
|
@@ -1669,6 +1616,9 @@ function waitForShutdownDeadline(ms) {
|
|
|
1669
1616
|
* surviving sidecar may still hold.
|
|
1670
1617
|
*/
|
|
1671
1618
|
async function drainManagedServices() {
|
|
1619
|
+
setupHelperDrain ??= pauseSelectedSetupHelpers();
|
|
1620
|
+
// Installer completion is outside the sidecar shutdown watchdog budget.
|
|
1621
|
+
await setupHelperDrain.drained;
|
|
1672
1622
|
const drain = supervisor?.stopAll() ?? Promise.resolve();
|
|
1673
1623
|
const shutdownWatchdogMs = hostConfig
|
|
1674
1624
|
? resolveShutdownWatchdogMs(hostConfig, supervisor?.getManagedServiceCount() ?? 0)
|
|
@@ -1692,8 +1642,10 @@ async function shutdownHost() {
|
|
|
1692
1642
|
return shutdownPromise;
|
|
1693
1643
|
}
|
|
1694
1644
|
shuttingDown = true;
|
|
1645
|
+
setupHelperDrain ??= pauseSelectedSetupHelpers();
|
|
1695
1646
|
clearRuntimeCliInventoryPoll();
|
|
1696
1647
|
shutdownPromise = (async () => {
|
|
1648
|
+
await setupHelperDrain.drained;
|
|
1697
1649
|
let shutdownExitCode = 0;
|
|
1698
1650
|
let forcedStopAttempted = false;
|
|
1699
1651
|
const activeTrayController = trayController;
|
|
@@ -1738,11 +1690,8 @@ async function main() {
|
|
|
1738
1690
|
return;
|
|
1739
1691
|
}
|
|
1740
1692
|
app.setPath('userData', resolveDesktopUserDataDir(app.getPath('appData')));
|
|
1741
|
-
//
|
|
1742
|
-
//
|
|
1743
|
-
// that shortcut with the electron-builder appId, so claiming it here is what
|
|
1744
|
-
// makes update notifications visible at all. Unpackaged runs have no such
|
|
1745
|
-
// shortcut, so the claim would buy nothing.
|
|
1693
|
+
// Keep the packaged process identity aligned with the installer-created
|
|
1694
|
+
// Windows shortcuts and taskbar grouping.
|
|
1746
1695
|
if (process.platform === 'win32' && app.isPackaged && DESKTOP_APP_USER_MODEL_ID) {
|
|
1747
1696
|
app.setAppUserModelId(DESKTOP_APP_USER_MODEL_ID);
|
|
1748
1697
|
}
|
|
@@ -1858,6 +1807,33 @@ async function main() {
|
|
|
1858
1807
|
}
|
|
1859
1808
|
return await runHostAction(actionId);
|
|
1860
1809
|
});
|
|
1810
|
+
ipcMain.handle('cats-host:save-provider-selection', async (event, payload) => {
|
|
1811
|
+
assertMainWindowIpcSender(event, mainWindow, 'Provider selection is only available to the main Cats window.');
|
|
1812
|
+
if (!hostConfig || !payload || typeof payload !== 'object')
|
|
1813
|
+
throw new Error('Invalid provider selection.');
|
|
1814
|
+
const body = payload;
|
|
1815
|
+
if ((!Array.isArray(body.targets) && body.reload !== true) || typeof body.expectedRevision !== 'string') {
|
|
1816
|
+
throw new Error('Invalid provider selection.');
|
|
1817
|
+
}
|
|
1818
|
+
await retryPendingSetupOperationReleases();
|
|
1819
|
+
const response = await fetchWithTimeout(`${hostConfig.runtimeBaseUrl}/setup-selection${body.reload === true ? '/reload' : ''}`, {
|
|
1820
|
+
method: body.reload === true ? 'POST' : 'PUT',
|
|
1821
|
+
headers: { 'content-type': 'application/json' },
|
|
1822
|
+
body: JSON.stringify({ targets: body.targets, expectedRevision: body.expectedRevision }),
|
|
1823
|
+
}, RUNTIME_SETUP_STATE_TIMEOUT_MS);
|
|
1824
|
+
if (!response.ok) {
|
|
1825
|
+
const result = await response.json();
|
|
1826
|
+
throw new Error(result.error || 'Could not save provider selection.');
|
|
1827
|
+
}
|
|
1828
|
+
latestProviderDiagnosticsPayload = null;
|
|
1829
|
+
latestCliInventoryError = null;
|
|
1830
|
+
runtimeCliInventoryScanPending = false;
|
|
1831
|
+
const snapshot = await refreshBootstrapSnapshot();
|
|
1832
|
+
publishSnapshot(snapshot);
|
|
1833
|
+
scheduleBackgroundBootstrapWork(snapshot, latestPersistedSetupState);
|
|
1834
|
+
await maybeOpenApp(snapshot);
|
|
1835
|
+
return snapshot;
|
|
1836
|
+
});
|
|
1861
1837
|
ipcMain.handle('cats-host:run-setup-helper', async (_event, payload) => {
|
|
1862
1838
|
if (typeof payload !== 'object'
|
|
1863
1839
|
|| payload === null
|
|
@@ -2054,7 +2030,7 @@ async function main() {
|
|
|
2054
2030
|
// SPEC-111 section 6: at most one silent check per launch, and only when the
|
|
2055
2031
|
// build actually has update capability.
|
|
2056
2032
|
if (hostConfig.update.checkOnStartup && updateManager?.getSnapshot().capability.canCheck) {
|
|
2057
|
-
void
|
|
2033
|
+
void updateManager.checkForUpdates();
|
|
2058
2034
|
}
|
|
2059
2035
|
}
|
|
2060
2036
|
void main().catch((error) => {
|