@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
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
<#
|
|
2
|
+
.SYNOPSIS
|
|
3
|
+
Shared native installer version gates, isolated child execution and observed results.
|
|
4
|
+
.DESCRIPTION
|
|
5
|
+
Dot-source from the packaged native helpers. Metadata parsing is adapted from
|
|
6
|
+
environment-bootstrap at 752dc13; no query occurs during check-only actions.
|
|
7
|
+
Vendor scripts execute in a hidden child so an upstream exit cannot end our JSON response.
|
|
8
|
+
.EXAMPLE
|
|
9
|
+
. "$PSScriptRoot\_NativeInstallerSupport.ps1"
|
|
10
|
+
Test-CatsNativeUpgrade -Provider grok -InstalledVersion '1.0.0'
|
|
11
|
+
#>
|
|
12
|
+
. (Join-Path $PSScriptRoot '_HiddenProcess.ps1')
|
|
13
|
+
|
|
14
|
+
function Get-CatsNativeLatestVersion {
|
|
15
|
+
param([string]$Provider)
|
|
16
|
+
try {
|
|
17
|
+
switch ($Provider) {
|
|
18
|
+
antigravity { return Get-AntigravityLatestVersion }
|
|
19
|
+
cursor { return Get-CursorAgentLatestVersion -InstallerText (Invoke-RestMethod 'https://cursor.com/install?win32=true' -TimeoutSec 20 -UseBasicParsing) }
|
|
20
|
+
junie { return Get-JunieLatestBuild }
|
|
21
|
+
devin { return Get-DevinLatestVersion }
|
|
22
|
+
grok { return Get-GrokLatestVersion }
|
|
23
|
+
kiro { return [string](Invoke-RestMethod 'https://prod.download.cli.kiro.dev/stable/latest/manifest.json' -TimeoutSec 20 -UseBasicParsing).version }
|
|
24
|
+
goose { return [string](Invoke-RestMethod 'https://api.github.com/repos/aaif-goose/goose/releases/latest' -TimeoutSec 20 -UseBasicParsing -Headers @{ 'User-Agent' = 'Cats-Desktop'; Accept = 'application/vnd.github+json' }).tag_name }
|
|
25
|
+
default { return $null }
|
|
26
|
+
}
|
|
27
|
+
} catch { return $null }
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function Get-CatsNativeVersionToken {
|
|
31
|
+
param([string]$Provider, [string]$Version)
|
|
32
|
+
if ($Provider -eq 'junie') {
|
|
33
|
+
$match = [regex]::Match($Version, '\((\d+(?:\.\d+)+)\)')
|
|
34
|
+
if ($match.Success) { return $match.Groups[1].Value }
|
|
35
|
+
return ''
|
|
36
|
+
}
|
|
37
|
+
return [regex]::Match($Version, '\d+(?:\.\d+)+(?:-[a-zA-Z0-9.]+)?').Value
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function Test-CatsNativeUpgrade {
|
|
41
|
+
param([string]$Provider, [string]$InstalledVersion, [AllowNull()][string]$LatestVersion = $null)
|
|
42
|
+
if (-not $PSBoundParameters.ContainsKey('LatestVersion')) { $LatestVersion = Get-CatsNativeLatestVersion $Provider }
|
|
43
|
+
$current = Get-CatsNativeVersionToken $Provider $InstalledVersion
|
|
44
|
+
$comparison = Compare-ToolVersion -Installed $current -Latest $LatestVersion
|
|
45
|
+
$known = $null -ne $comparison
|
|
46
|
+
$currentRelease = $known -and ($comparison -ge 0)
|
|
47
|
+
if ($Provider -eq 'cursor' -and $comparison -eq 0 -and $current -ne $LatestVersion) { $currentRelease = $false }
|
|
48
|
+
return [pscustomobject]@{ shouldInstall = -not $currentRelease; latestVersion = $LatestVersion; known = $known }
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function Invoke-CatsRemoteInstaller {
|
|
52
|
+
param([Parameter(Mandatory)][string]$ScriptText, [switch]$RetrySharingViolation)
|
|
53
|
+
$temporary = Join-Path ([System.IO.Path]::GetTempPath()) ('cats-native-' + [guid]::NewGuid().ToString('N') + '.ps1')
|
|
54
|
+
try {
|
|
55
|
+
if ([string]::IsNullOrWhiteSpace($ScriptText)) { throw 'Vendor returned an empty installer.' }
|
|
56
|
+
$ast = [System.Management.Automation.Language.Parser]::ParseInput($ScriptText, [ref]$null, [ref]$null)
|
|
57
|
+
$offsets = @(0)
|
|
58
|
+
if ($ast.ParamBlock) { $offsets += $ast.ParamBlock.Extent.EndOffset }
|
|
59
|
+
foreach ($usingStatement in $ast.UsingStatements) { $offsets += $usingStatement.Extent.EndOffset }
|
|
60
|
+
$offset = ($offsets | Measure-Object -Maximum).Maximum
|
|
61
|
+
$prologue = '$env:PSModulePath = (@([System.Environment]::GetEnvironmentVariable(''PSModulePath'',''User''), [System.Environment]::GetEnvironmentVariable(''PSModulePath'',''Machine''), (Join-Path $PSHOME ''Modules'')) | Where-Object { $_ }) -join '';'''
|
|
62
|
+
$body = $ScriptText.Insert($offset, "`n$prologue`n")
|
|
63
|
+
if ($RetrySharingViolation) {
|
|
64
|
+
$encoded = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($body))
|
|
65
|
+
$body = @'
|
|
66
|
+
$ErrorActionPreference = 'Stop'
|
|
67
|
+
$installer = [scriptblock]::Create([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('__SOURCE__')))
|
|
68
|
+
for ($attempt = 1; $attempt -le 3; $attempt++) {
|
|
69
|
+
try { & $installer; exit 0 }
|
|
70
|
+
catch {
|
|
71
|
+
$exception = $_.Exception
|
|
72
|
+
while ($exception.InnerException) { $exception = $exception.InnerException }
|
|
73
|
+
if ($attempt -eq 3 -or -not ($exception -is [IO.IOException]) -or ($exception.HResult -band 0xffff) -ne 32) { throw }
|
|
74
|
+
Start-Sleep -Seconds 5
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
'@
|
|
78
|
+
$body = $body.Replace('__SOURCE__', $encoded)
|
|
79
|
+
}
|
|
80
|
+
[IO.File]::WriteAllText($temporary, $body, [Text.UTF8Encoding]::new($true))
|
|
81
|
+
$hostExe = Join-Path $env:SystemRoot 'System32\WindowsPowerShell\v1.0\powershell.exe'
|
|
82
|
+
$result = Invoke-HiddenCommand -FileName $hostExe -ArgumentList @('-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-File', $temporary)
|
|
83
|
+
return [pscustomobject]@{ skipped = $false; success = $result.ExitCode -eq 0; exitCode = $result.ExitCode; stderr = $result.ErrorOutput; stdout = $result.Output }
|
|
84
|
+
} catch {
|
|
85
|
+
return [pscustomobject]@{ skipped = $false; success = $false; exitCode = -1; stderr = [string]$_.Exception.Message }
|
|
86
|
+
} finally {
|
|
87
|
+
# This is one uniquely-created file; never recursively remove a computed directory.
|
|
88
|
+
Remove-Item -LiteralPath $temporary -Force -ErrorAction SilentlyContinue
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function Add-CatsNativeObservation {
|
|
93
|
+
param([pscustomobject]$Result, [AllowNull()]$Before, [bool]$Attempted, [bool]$Skipped)
|
|
94
|
+
if ($Result.mode -in @('check', 'uninstall') -or $null -eq $Before) { return }
|
|
95
|
+
$change = if ($Result.status -eq 'failed') { 'failed' }
|
|
96
|
+
elseif ($Skipped -or $Result.status -eq 'preview' -or -not $Attempted) { 'unchanged' }
|
|
97
|
+
elseif (-not $Result.installed) { 'failed' }
|
|
98
|
+
elseif (-not $Before.installed) { 'installed' }
|
|
99
|
+
elseif ($Before.detectedVersion -and $Result.detectedVersion -and $Before.detectedVersion -ne $Result.detectedVersion) {
|
|
100
|
+
$comparison = Compare-ToolVersion -Installed $Result.detectedVersion -Latest $Before.detectedVersion
|
|
101
|
+
if ($comparison -gt 0) { 'upgraded' } elseif ($comparison -lt 0) { 'downgraded' } else { 'version_changed' }
|
|
102
|
+
}
|
|
103
|
+
else { 'unchanged' }
|
|
104
|
+
if ($Result.mode -in @('upgrade', 'force') -and -not $Skipped -and $Result.status -ne 'preview' -and $change -ne 'failed' -and $Result.installed -and $Result.detectedVersion) {
|
|
105
|
+
$provider = $Result.helper -replace '^windows-', '' -replace '-native-installer$', ''
|
|
106
|
+
if ($provider -in @('cursor', 'devin', 'junie')) {
|
|
107
|
+
try { Remove-CatsStaleNativeVersions -Provider $provider -Version $Result.detectedVersion } catch { Write-Warning 'Old-version cleanup was skipped.' }
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
$Result | Add-Member -NotePropertyName observedChange -NotePropertyValue $change -Force
|
|
111
|
+
$Result | Add-Member -NotePropertyName previousVersion -NotePropertyValue $Before.detectedVersion -Force
|
|
112
|
+
$description = "$change"
|
|
113
|
+
if ($change -in @('upgraded', 'downgraded', 'version_changed')) { $description += ": $($Before.detectedVersion) -> $($Result.detectedVersion)" }
|
|
114
|
+
elseif ($Result.detectedVersion) { $description += ": $($Result.detectedVersion)" }
|
|
115
|
+
$Result | Add-Member -NotePropertyName summary -NotePropertyValue $description -Force
|
|
116
|
+
if ($change -in @('failed', 'unchanged')) { $Result.appliedChanges = @() }
|
|
117
|
+
else { $Result.appliedChanges = @("${change}_native_installation") }
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function Write-CatsNativePreview {
|
|
121
|
+
param([string]$Helper, [string]$Mode, $Detected, [string[]]$Actions, [bool]$EmitJson)
|
|
122
|
+
$result = [pscustomobject]@{
|
|
123
|
+
helper = $Helper; mode = $Mode; status = 'preview'; installed = [bool]$Detected.installed
|
|
124
|
+
detectedVersion = $Detected.detectedVersion; commandPath = $Detected.commandPath
|
|
125
|
+
restartRequired = $false; plannedActions = @($Actions); appliedChanges = @()
|
|
126
|
+
warnings = @(); manualSteps = @(); interruptions = @(); observedChange = 'unchanged'
|
|
127
|
+
}
|
|
128
|
+
if ($EmitJson) { $result | ConvertTo-Json -Depth 10 } else { Write-Host "Preview: $($Actions -join ', ')" }
|
|
129
|
+
exit 0
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function Get-CatsShimVersionText {
|
|
133
|
+
param([string]$Path)
|
|
134
|
+
if (-not (Test-Path -LiteralPath $Path -PathType Leaf)) { return '' }
|
|
135
|
+
$literal = "'" + $Path.Replace("'", "''") + "'"
|
|
136
|
+
$script = "& $literal --version; exit " + '$LASTEXITCODE'
|
|
137
|
+
$encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($script))
|
|
138
|
+
$hostExe = Join-Path $env:SystemRoot 'System32\WindowsPowerShell\v1.0\powershell.exe'
|
|
139
|
+
$result = Invoke-HiddenCommand -FileName $hostExe -ArgumentList @('-NoProfile', '-NonInteractive', '-EncodedCommand', $encoded) -TimeoutMs 15000
|
|
140
|
+
if ($result.ExitCode -ne 0) { return '' }
|
|
141
|
+
return $result.Output.Trim()
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function Remove-CatsStaleNativeVersions {
|
|
145
|
+
param([string]$Provider, [string]$Version)
|
|
146
|
+
$keep = Get-CatsNativeVersionToken $Provider $Version
|
|
147
|
+
if (-not $keep) { return }
|
|
148
|
+
$data = switch ($Provider) {
|
|
149
|
+
cursor { Join-Path $env:LOCALAPPDATA 'cursor-agent' }
|
|
150
|
+
devin { Join-Path $env:LOCALAPPDATA 'devin\cli' }
|
|
151
|
+
junie {
|
|
152
|
+
if ($env:JUNIE_DATA_DIR) { $env:JUNIE_DATA_DIR } else { Join-Path $env:USERPROFILE '.local\share\junie' }
|
|
153
|
+
}
|
|
154
|
+
default { return }
|
|
155
|
+
}
|
|
156
|
+
$versions = [IO.Path]::GetFullPath((Join-Path $data $(if ($Provider -eq 'devin') { '_versions' } else { 'versions' })))
|
|
157
|
+
if ($Provider -eq 'junie') {
|
|
158
|
+
if (Test-Path -LiteralPath (Join-Path $data 'updates\pending-update.json')) { return }
|
|
159
|
+
$currentFile = Join-Path $data 'current'
|
|
160
|
+
if (-not (Test-Path -LiteralPath $currentFile -PathType Leaf)) { return }
|
|
161
|
+
if ((Get-Content -LiteralPath $currentFile -Raw).Trim() -ne $keep) { return }
|
|
162
|
+
}
|
|
163
|
+
# Only known user roots; do not follow a junction in any ancestor or delete
|
|
164
|
+
# current/newer/pending builds. A custom directory outside those roots is kept.
|
|
165
|
+
if (-not (Test-PackagedProviderPathRemovable $versions)) { return }
|
|
166
|
+
$ancestor = Get-Item -LiteralPath $versions
|
|
167
|
+
while ($ancestor) {
|
|
168
|
+
if ($ancestor.Attributes -band [IO.FileAttributes]::ReparsePoint) { return }
|
|
169
|
+
$ancestor = $ancestor.Parent
|
|
170
|
+
}
|
|
171
|
+
foreach ($directory in (Get-ChildItem -LiteralPath $versions -Directory)) {
|
|
172
|
+
if ($directory.Attributes -band [IO.FileAttributes]::ReparsePoint) { continue }
|
|
173
|
+
if ($directory.Name -notmatch '^\d+(\.\d+)+(-[a-zA-Z0-9]+)?$') { continue }
|
|
174
|
+
if ((Compare-ToolVersion -Installed $directory.Name -Latest $keep) -ne -1) { continue }
|
|
175
|
+
$resolved = [IO.Path]::GetFullPath($directory.FullName)
|
|
176
|
+
if (-not $resolved.StartsWith($versions.TrimEnd('\') + '\', [StringComparison]::OrdinalIgnoreCase)) { continue }
|
|
177
|
+
if (Get-ChildItem -LiteralPath $resolved -Recurse -Force | Where-Object { $_.Attributes -band [IO.FileAttributes]::ReparsePoint } | Select-Object -First 1) { continue }
|
|
178
|
+
try { Remove-Item -LiteralPath $resolved -Recurse -Force -ErrorAction Stop } catch { Write-Warning "Could not remove old $Provider version $($directory.Name)." }
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function ConvertTo-ComparableVersion {
|
|
182
|
+
param([string]$Version)
|
|
183
|
+
|
|
184
|
+
if ([string]::IsNullOrWhiteSpace($Version)) { return $null }
|
|
185
|
+
|
|
186
|
+
# 第一個版本樣式的 token;額外吃下 Git for Windows 的 .windows.N 尾段
|
|
187
|
+
$match = [regex]::Match($Version, '\d+(?:\.\d+)+(?:\.windows\.\d+)?')
|
|
188
|
+
if (-not $match.Success) { return $null }
|
|
189
|
+
|
|
190
|
+
$parts = ($match.Value -replace '\.windows\.', '.') -split '\.' |
|
|
191
|
+
Select-Object -First 4
|
|
192
|
+
|
|
193
|
+
while ($parts.Count -lt 4) { $parts += '0' }
|
|
194
|
+
|
|
195
|
+
try {
|
|
196
|
+
return [version]($parts -join '.')
|
|
197
|
+
} catch {
|
|
198
|
+
return $null
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function Compare-ToolVersion {
|
|
203
|
+
param(
|
|
204
|
+
[string]$Installed,
|
|
205
|
+
[string]$Latest
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
$installedVersion = ConvertTo-ComparableVersion $Installed
|
|
209
|
+
$latestVersion = ConvertTo-ComparableVersion $Latest
|
|
210
|
+
|
|
211
|
+
if (-not $installedVersion -or -not $latestVersion) { return $null }
|
|
212
|
+
|
|
213
|
+
return $installedVersion.CompareTo($latestVersion)
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
function Get-AntigravityLatestVersion {
|
|
217
|
+
param([string]$InstallerText)
|
|
218
|
+
|
|
219
|
+
$baseUrl = 'https://antigravity-cli-auto-updater-974169037036.us-central1.run.app'
|
|
220
|
+
if ($InstallerText) {
|
|
221
|
+
$m = [regex]::Match($InstallerText, '\$DOWNLOAD_BASE_URL\s*=\s*"(https://[^"]+)"')
|
|
222
|
+
if ($m.Success) { $baseUrl = $m.Groups[1].Value }
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
$arch = if ($env:PROCESSOR_ARCHITEW6432) { $env:PROCESSOR_ARCHITEW6432 } else { $env:PROCESSOR_ARCHITECTURE }
|
|
226
|
+
$platform = if ($arch -eq 'ARM64') { 'windows_arm64' } else { 'windows_amd64' }
|
|
227
|
+
|
|
228
|
+
try {
|
|
229
|
+
$manifest = Invoke-RestMethod -Uri "$baseUrl/manifests/$platform.json" -TimeoutSec 20 -UseBasicParsing -ErrorAction Stop
|
|
230
|
+
if (-not $manifest.version) { return $null }
|
|
231
|
+
return "$($manifest.version)"
|
|
232
|
+
} catch {
|
|
233
|
+
return $null
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function Get-CursorAgentLatestVersion {
|
|
238
|
+
param(
|
|
239
|
+
[Parameter(Mandatory=$true)]
|
|
240
|
+
[string]$InstallerText
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
$m = [regex]::Match($InstallerText, "(?m)^\s*\`$version\s*=\s*'([^']+)'")
|
|
244
|
+
if (-not $m.Success) { return $null }
|
|
245
|
+
return $m.Groups[1].Value
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
function Get-JunieLatestBuild {
|
|
249
|
+
$archName = if ($env:PROCESSOR_ARCHITECTURE -eq 'ARM64' -or $env:PROCESSOR_ARCHITEW6432 -eq 'ARM64') { 'aarch64' } else { 'amd64' }
|
|
250
|
+
$platform = "windows-$archName"
|
|
251
|
+
|
|
252
|
+
try {
|
|
253
|
+
$jsonl = Invoke-RestMethod -Uri 'https://raw.githubusercontent.com/jetbrains-junie/junie/main/update-info.jsonl' `
|
|
254
|
+
-TimeoutSec 20 -UseBasicParsing -ErrorAction Stop
|
|
255
|
+
} catch {
|
|
256
|
+
return $null
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
$best = $null
|
|
260
|
+
foreach ($line in ("$jsonl" -split "`n")) {
|
|
261
|
+
if ($line -notmatch "`"platform`":`"$platform`"") { continue }
|
|
262
|
+
try { $entry = $line | ConvertFrom-Json } catch { continue }
|
|
263
|
+
if (-not $entry.version) { continue }
|
|
264
|
+
$candidate = ConvertTo-ComparableVersion "$($entry.version)"
|
|
265
|
+
if (-not $candidate) { continue }
|
|
266
|
+
if ($null -eq $best -or $candidate -gt $best.Comparable) {
|
|
267
|
+
$best = @{ Build = "$($entry.version)"; Comparable = $candidate }
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
if ($null -eq $best) { return $null }
|
|
272
|
+
return $best.Build
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
function Get-DevinLatestVersion {
|
|
276
|
+
try {
|
|
277
|
+
$manifest = Invoke-RestMethod -Uri 'https://static.devin.ai/cli/current/manifest.json' -TimeoutSec 20 -UseBasicParsing -ErrorAction Stop
|
|
278
|
+
if (-not $manifest.version) { return $null }
|
|
279
|
+
return "$($manifest.version)"
|
|
280
|
+
} catch {
|
|
281
|
+
return $null
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
function Get-GrokLatestVersion {
|
|
286
|
+
param([string]$Channel)
|
|
287
|
+
|
|
288
|
+
if (-not $Channel) {
|
|
289
|
+
$Channel = if ($env:GROK_CHANNEL) { $env:GROK_CHANNEL } else { 'stable' }
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
$urls = @(
|
|
293
|
+
"https://x.ai/cli/$Channel",
|
|
294
|
+
"https://storage.googleapis.com/grok-build-public-artifacts/cli/$Channel"
|
|
295
|
+
)
|
|
296
|
+
foreach ($url in $urls) {
|
|
297
|
+
try {
|
|
298
|
+
$text = Invoke-RestMethod -Uri $url -TimeoutSec 20 -UseBasicParsing -ErrorAction Stop
|
|
299
|
+
} catch {
|
|
300
|
+
continue
|
|
301
|
+
}
|
|
302
|
+
$line = @("$text" -split "`r?`n")[0]
|
|
303
|
+
if ($null -eq $line) { continue }
|
|
304
|
+
$line = $line.Trim()
|
|
305
|
+
if ($line -match '^\d+\.\d+\.\d+(-[A-Za-z0-9._]+)?$') { return $line }
|
|
306
|
+
}
|
|
307
|
+
return $null
|
|
308
|
+
}
|
|
@@ -23,6 +23,8 @@
|
|
|
23
23
|
can run it explicitly when needed.
|
|
24
24
|
#>
|
|
25
25
|
|
|
26
|
+
. (Join-Path $PSScriptRoot '_VerifiedNpmUpdate.ps1')
|
|
27
|
+
|
|
26
28
|
function Test-NpmCliInstallerAdminGuard {
|
|
27
29
|
param(
|
|
28
30
|
[Parameter(Mandatory = $true)]
|
|
@@ -163,11 +165,16 @@ function Test-NpmCliPackageOutdated {
|
|
|
163
165
|
[string]$PackageName
|
|
164
166
|
)
|
|
165
167
|
|
|
166
|
-
$
|
|
167
|
-
if ([
|
|
168
|
-
|
|
169
|
-
}
|
|
170
|
-
|
|
168
|
+
$latest = ((& npm view "$PackageName@latest" version --fetch-retries=0 --fetch-timeout=10000 --loglevel=error) | Out-String).Trim()
|
|
169
|
+
if ($LASTEXITCODE -ne 0 -or $latest -notmatch '^\d+\.\d+\.\d+(-[a-zA-Z0-9._-]+)?$') { throw 'Provider version query failed; update status is unknown.' }
|
|
170
|
+
$installed = Get-NpmCliPackageVersion -PackageName $PackageName
|
|
171
|
+
if (-not $installed) { return $true }
|
|
172
|
+
$currentBase = [version]($installed -split '-')[0]
|
|
173
|
+
$latestBase = [version]($latest -split '-')[0]
|
|
174
|
+
# Preserve a newer local/pre-release build. Equal numeric prerelease advances
|
|
175
|
+
# to the stable release; Repair remains the explicit reinstall action.
|
|
176
|
+
return $currentBase -lt $latestBase -or ($currentBase -eq $latestBase -and $installed.Contains('-') -and -not $latest.Contains('-'))
|
|
177
|
+
|
|
171
178
|
}
|
|
172
179
|
|
|
173
180
|
function Resolve-NpmCliCommandPath {
|
|
@@ -216,6 +223,7 @@ function Remove-SupersededNpmPackages {
|
|
|
216
223
|
|
|
217
224
|
Write-Host "Removing superseded package $legacy (replaced by $PackageName)."
|
|
218
225
|
& npm uninstall -g $legacy 2>$null | Out-Null
|
|
226
|
+
if ($LASTEXITCODE -ne 0) { throw "Could not remove superseded package $legacy." }
|
|
219
227
|
if ($AppliedChanges) {
|
|
220
228
|
$AppliedChanges.Add("${legacy}:removed-superseded") | Out-Null
|
|
221
229
|
}
|
|
@@ -315,6 +323,12 @@ function Invoke-PackagedNpmCliInstall {
|
|
|
315
323
|
$null
|
|
316
324
|
}
|
|
317
325
|
$commandPath = if ($installed) { Resolve-NpmCliCommandPath -CommandName $CommandName } else { $null }
|
|
326
|
+
if ($installed -and -not $detectedVersion -and -not $SkipNpmInvocation) {
|
|
327
|
+
foreach ($legacy in (Get-SupersededNpmPackages -PackageName $PackageName)) {
|
|
328
|
+
& npm list -g --depth=0 $legacy 2>$null | Out-Null
|
|
329
|
+
if ($LASTEXITCODE -eq 0) { $installed = $false; break }
|
|
330
|
+
}
|
|
331
|
+
}
|
|
318
332
|
|
|
319
333
|
$plannedActions = [System.Collections.Generic.List[string]]::new()
|
|
320
334
|
$appliedChanges = [System.Collections.Generic.List[string]]::new()
|
|
@@ -444,6 +458,17 @@ function Invoke-PackagedNpmCliInstall {
|
|
|
444
458
|
exit 0
|
|
445
459
|
}
|
|
446
460
|
|
|
461
|
+
if ($DryRun -and -not $CheckOnly) {
|
|
462
|
+
$preview = [pscustomobject]@{
|
|
463
|
+
helper = $HelperId; mode = $mode; status = 'preview'; installed = [bool]$installed
|
|
464
|
+
detectedVersion = $detectedVersion; commandPath = $commandPath; restartRequired = $false
|
|
465
|
+
plannedActions = @("${PackageName}:${mode}"); appliedChanges = @(); warnings = @(); manualSteps = @(); interruptions = @()
|
|
466
|
+
}
|
|
467
|
+
if ($Json) { $preview | ConvertTo-Json -Depth 10 } else { Write-Host "Preview: ${PackageName}:${mode}" }
|
|
468
|
+
exit 0
|
|
469
|
+
}
|
|
470
|
+
if ($Upgrade -and -not $CheckOnly -and -not $SkipNpmInvocation) { Update-CatsNpm }
|
|
471
|
+
|
|
447
472
|
$isOutdated = if (-not $Upgrade -and -not $Force) {
|
|
448
473
|
$false
|
|
449
474
|
} else {
|
|
@@ -565,15 +590,9 @@ function Invoke-PackagedNpmCliInstall {
|
|
|
565
590
|
# Without it, packages like @openai/codex skip their platform-specific
|
|
566
591
|
# binaries (codex-win32-x64, codex-darwin-arm64, ...), leaving a shim that
|
|
567
592
|
# silently exits when invoked. Pure-JS CLIs such as copilot don't notice.
|
|
568
|
-
$
|
|
569
|
-
if ($
|
|
570
|
-
|
|
571
|
-
} else {
|
|
572
|
-
$arguments += $PackageName
|
|
573
|
-
}
|
|
574
|
-
if ($plannedAction -eq 'reinstall') {
|
|
575
|
-
$arguments += '--force'
|
|
576
|
-
}
|
|
593
|
+
$expectedVersion = ((& npm view "$PackageName@latest" version --fetch-retries=0 --fetch-timeout=10000 --loglevel=error) | Out-String).Trim()
|
|
594
|
+
if ($LASTEXITCODE -ne 0 -or $expectedVersion -notmatch '^\d+\.\d+\.\d+(-[a-zA-Z0-9._-]+)?$') { throw 'Could not resolve the provider version before installing.' }
|
|
595
|
+
$arguments = @('install', '-g', '--include=optional', '--engine-strict', '--fetch-retries=0', '--fetch-timeout=30000', "$PackageName@$expectedVersion")
|
|
577
596
|
|
|
578
597
|
& npm @arguments | Out-Null
|
|
579
598
|
if ($LASTEXITCODE -ne 0) {
|
|
@@ -585,6 +604,8 @@ function Invoke-PackagedNpmCliInstall {
|
|
|
585
604
|
$finalCommandPath = if ($finalInstalled) { Resolve-NpmCliCommandPath -CommandName $CommandName } else { $null }
|
|
586
605
|
$finalVersion = if ($finalInstalled) { Get-NpmCliPackageVersion -PackageName $PackageName } else { $null }
|
|
587
606
|
|
|
607
|
+
if (-not $finalInstalled -or -not $finalCommandPath -or $finalVersion -ne $expectedVersion) { throw 'Provider installation verification failed. Check npm prefix and command PATH.' }
|
|
608
|
+
|
|
588
609
|
$result = [pscustomobject]@{
|
|
589
610
|
helper = $HelperId
|
|
590
611
|
mode = $mode
|
|
@@ -24,7 +24,15 @@ if (-not (Get-Module -ListAvailable -Name Microsoft.PowerShell.Utility)) {
|
|
|
24
24
|
function Test-PackagedProviderPathRemovable {
|
|
25
25
|
param([string]$Path)
|
|
26
26
|
if ([string]::IsNullOrWhiteSpace($Path)) { return $false }
|
|
27
|
-
|
|
27
|
+
$fullPath = [IO.Path]::GetFullPath($Path).TrimEnd('\', '/')
|
|
28
|
+
$withinUserRoot = $false
|
|
29
|
+
foreach ($base in @($env:USERPROFILE, $env:LOCALAPPDATA)) {
|
|
30
|
+
if (-not $base) { continue }
|
|
31
|
+
$root = [IO.Path]::GetFullPath($base).TrimEnd('\', '/') + '\'
|
|
32
|
+
if ($fullPath.StartsWith($root, [StringComparison]::OrdinalIgnoreCase)) { $withinUserRoot = $true }
|
|
33
|
+
}
|
|
34
|
+
if (-not $withinUserRoot) { return $false }
|
|
35
|
+
return (Test-Path -LiteralPath $fullPath)
|
|
28
36
|
}
|
|
29
37
|
|
|
30
38
|
function Test-DetectedPathInPlannedRemovals {
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<#
|
|
2
|
+
.SYNOPSIS
|
|
3
|
+
Update npm in its current prefix with bounded queries and post-install verification.
|
|
4
|
+
.DESCRIPTION
|
|
5
|
+
Dot-source and invoke Update-CatsNpm only for an explicit upgrade action.
|
|
6
|
+
Adapted from environment-bootstrap 4690075. Never changes prefix or bypasses engines.
|
|
7
|
+
.EXAMPLE
|
|
8
|
+
Update-CatsNpm
|
|
9
|
+
#>
|
|
10
|
+
function Update-CatsNpm {
|
|
11
|
+
$current = ((& npm --version) | Out-String).Trim()
|
|
12
|
+
if ($LASTEXITCODE -ne 0) { throw 'Could not read npm version.' }
|
|
13
|
+
$latest = ((& npm view npm@latest version --fetch-retries=0 --fetch-timeout=10000 --loglevel=error) | Out-String).Trim()
|
|
14
|
+
if ($LASTEXITCODE -ne 0 -or $latest -notmatch '^\d+\.\d+\.\d+$') { throw 'npm version query failed or returned an invalid version.' }
|
|
15
|
+
if ($current -eq $latest) { return }
|
|
16
|
+
if ([version]$current -gt [version]$latest) { return }
|
|
17
|
+
& npm install -g "npm@$latest" --engine-strict --fetch-retries=0 --fetch-timeout=30000 | Out-Null
|
|
18
|
+
if ($LASTEXITCODE -ne 0) { throw 'npm update failed. Check network, permissions and Node.js compatibility.' }
|
|
19
|
+
$installed = ((& npm --version) | Out-String).Trim()
|
|
20
|
+
if ($LASTEXITCODE -ne 0 -or $installed -ne $latest) { throw 'npm command version verification failed. Check PATH and prefix.' }
|
|
21
|
+
$root = ((& npm root -g) | Out-String).Trim()
|
|
22
|
+
if ($LASTEXITCODE -ne 0 -or -not $root) { throw 'Could not verify the npm installation prefix.' }
|
|
23
|
+
$package = Get-Content -LiteralPath (Join-Path $root 'npm/package.json') -Raw -Encoding UTF8 | ConvertFrom-Json
|
|
24
|
+
if ($package.version -ne $latest) { throw 'npm package version does not match its active command.' }
|
|
25
|
+
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import type { DesktopUpdateErrorCode, DesktopUpdateSnapshot } from './contracts.js';
|
|
2
|
-
import { type DesktopTrayLocale } from './trayMenu.js';
|
|
3
|
-
/**
|
|
4
|
-
* Native update notifications.
|
|
5
|
-
*
|
|
6
|
-
* SPEC-111 section 5 requires a check started outside Settings to report its
|
|
7
|
-
* result somewhere the user is actually looking. This module owns that policy;
|
|
8
|
-
* `main.ts` only constructs the native notification the policy asks for, so the
|
|
9
|
-
* rules stay testable without Electron.
|
|
10
|
-
*/
|
|
11
|
-
/** Where the check that produced the result came from. */
|
|
12
|
-
export declare const DESKTOP_UPDATE_NOTIFICATION_ORIGINS: readonly ["tray", "settings", "startup"];
|
|
13
|
-
export type DesktopUpdateNotificationOrigin = typeof DESKTOP_UPDATE_NOTIFICATION_ORIGINS[number];
|
|
14
|
-
export declare const DESKTOP_UPDATE_SETTINGS_PATH = "/settings/desktop";
|
|
15
|
-
export interface DesktopUpdateNotification {
|
|
16
|
-
title: string;
|
|
17
|
-
body: string;
|
|
18
|
-
/** Where activating the notification shall land the user. */
|
|
19
|
-
navigatePath: typeof DESKTOP_UPDATE_SETTINGS_PATH;
|
|
20
|
-
}
|
|
21
|
-
export interface DesktopUpdateAnnouncement {
|
|
22
|
-
notification: DesktopUpdateNotification | null;
|
|
23
|
-
/**
|
|
24
|
-
* Where to open the main window when no notification reaches the user —
|
|
25
|
-
* either because the platform has none or because showing it failed.
|
|
26
|
-
*
|
|
27
|
-
* Null when the result does not justify pulling a window forward. Set
|
|
28
|
-
* independently of `notification` so the caller never has to re-derive the
|
|
29
|
-
* policy after a failed `show()`.
|
|
30
|
-
*/
|
|
31
|
-
fallbackNavigatePath: typeof DESKTOP_UPDATE_SETTINGS_PATH | null;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Error copy for notifications, in the same two locales the tray uses.
|
|
35
|
-
*
|
|
36
|
-
* These strings are duplicated from the renderer i18n catalogs because the
|
|
37
|
-
* main process has no translator. `settings-desktop-update-labels.test.tsx`
|
|
38
|
-
* asserts they stay identical to the catalog entries, so the duplication cannot
|
|
39
|
-
* drift silently.
|
|
40
|
-
*/
|
|
41
|
-
export declare const DESKTOP_UPDATE_NOTIFICATION_ERROR_COPY: Record<DesktopTrayLocale, Record<DesktopUpdateErrorCode, string>>;
|
|
42
|
-
export interface ResolveDesktopUpdateAnnouncementInput {
|
|
43
|
-
origin: DesktopUpdateNotificationOrigin;
|
|
44
|
-
snapshot: DesktopUpdateSnapshot;
|
|
45
|
-
locale?: string | null;
|
|
46
|
-
/** `Notification.isSupported()`, resolved by the caller. */
|
|
47
|
-
notificationsSupported: boolean;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Decides what a finished check should tell the user, and how.
|
|
51
|
-
*
|
|
52
|
-
* A result is announced only when the user cannot already see it:
|
|
53
|
-
*
|
|
54
|
-
* - `settings` never announces. The section shows the state directly and
|
|
55
|
-
* routes manual results through the shared toast system, so a native
|
|
56
|
-
* notification would report the same check twice.
|
|
57
|
-
* - `tray` announces up-to-date, available, and failed. The menu closes on
|
|
58
|
-
* click, so without this the command looks like it did nothing.
|
|
59
|
-
* - `startup` announces only an available update. The user did not ask for
|
|
60
|
-
* that check, so an up-to-date or offline result has nothing to say and
|
|
61
|
-
* would nag on every launch.
|
|
62
|
-
*/
|
|
63
|
-
export declare function resolveDesktopUpdateAnnouncement(input: ResolveDesktopUpdateAnnouncementInput): DesktopUpdateAnnouncement;
|
|
64
|
-
//# sourceMappingURL=updateNotifications.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"updateNotifications.d.ts","sourceRoot":"","sources":["../../desktop/host/updateNotifications.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAC;AAEvB;;;;;;;GAOG;AAEH,0DAA0D;AAC1D,eAAO,MAAM,mCAAmC,0CAA2C,CAAC;AAC5F,MAAM,MAAM,+BAA+B,GACzC,OAAO,mCAAmC,CAAC,MAAM,CAAC,CAAC;AAErD,eAAO,MAAM,4BAA4B,sBAAsB,CAAC;AAEhE,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,YAAY,EAAE,OAAO,4BAA4B,CAAC;CACnD;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC/C;;;;;;;OAOG;IACH,oBAAoB,EAAE,OAAO,4BAA4B,GAAG,IAAI,CAAC;CAClE;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,sCAAsC,EAAE,MAAM,CACzD,iBAAiB,EACjB,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC,CA0BvC,CAAC;AAmCF,MAAM,WAAW,qCAAqC;IACpD,MAAM,EAAE,+BAA+B,CAAC;IACxC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,4DAA4D;IAC5D,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,qCAAqC,GAC3C,yBAAyB,CA2B3B"}
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
// Locale normalization is shared with the tray rather than duplicated. The
|
|
2
|
-
// main process has no i18n runtime, so both surfaces resolve their own copy
|
|
3
|
-
// from the same two-locale rule.
|
|
4
|
-
import { normalizeDesktopTrayLocale, } from './trayMenu.js';
|
|
5
|
-
/**
|
|
6
|
-
* Native update notifications.
|
|
7
|
-
*
|
|
8
|
-
* SPEC-111 section 5 requires a check started outside Settings to report its
|
|
9
|
-
* result somewhere the user is actually looking. This module owns that policy;
|
|
10
|
-
* `main.ts` only constructs the native notification the policy asks for, so the
|
|
11
|
-
* rules stay testable without Electron.
|
|
12
|
-
*/
|
|
13
|
-
/** Where the check that produced the result came from. */
|
|
14
|
-
export const DESKTOP_UPDATE_NOTIFICATION_ORIGINS = ['tray', 'settings', 'startup'];
|
|
15
|
-
export const DESKTOP_UPDATE_SETTINGS_PATH = '/settings/desktop';
|
|
16
|
-
/**
|
|
17
|
-
* Error copy for notifications, in the same two locales the tray uses.
|
|
18
|
-
*
|
|
19
|
-
* These strings are duplicated from the renderer i18n catalogs because the
|
|
20
|
-
* main process has no translator. `settings-desktop-update-labels.test.tsx`
|
|
21
|
-
* asserts they stay identical to the catalog entries, so the duplication cannot
|
|
22
|
-
* drift silently.
|
|
23
|
-
*/
|
|
24
|
-
export const DESKTOP_UPDATE_NOTIFICATION_ERROR_COPY = {
|
|
25
|
-
en: {
|
|
26
|
-
offline: 'Cats could not reach the update service.',
|
|
27
|
-
timeout: 'The update service did not respond in time.',
|
|
28
|
-
provider_rejected: 'The update service rejected the request.',
|
|
29
|
-
metadata_invalid: 'The update information could not be read.',
|
|
30
|
-
checksum_mismatch: 'The downloaded update failed its integrity check.',
|
|
31
|
-
signature_rejected: 'The downloaded update failed its signature check.',
|
|
32
|
-
unsupported_package: 'This installation cannot update itself.',
|
|
33
|
-
download_cancelled: 'The update download was cancelled.',
|
|
34
|
-
install_handoff_failed: 'Cats could not open the installer.',
|
|
35
|
-
unknown: 'The update could not be completed.',
|
|
36
|
-
},
|
|
37
|
-
'zh-TW': {
|
|
38
|
-
offline: 'Cats 無法連線到更新服務。',
|
|
39
|
-
timeout: '更新服務未在時限內回應。',
|
|
40
|
-
provider_rejected: '更新服務拒絕了這次請求。',
|
|
41
|
-
metadata_invalid: '無法讀取更新資訊。',
|
|
42
|
-
checksum_mismatch: '下載的更新未通過完整性檢查。',
|
|
43
|
-
signature_rejected: '下載的更新未通過簽章檢查。',
|
|
44
|
-
unsupported_package: '這個安裝方式無法自我更新。',
|
|
45
|
-
download_cancelled: '更新下載已取消。',
|
|
46
|
-
install_handoff_failed: 'Cats 無法開啟安裝程式。',
|
|
47
|
-
unknown: '更新無法完成。',
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
const NOTIFICATION_COPY = {
|
|
51
|
-
en: {
|
|
52
|
-
upToDateTitle: 'Cats is up to date',
|
|
53
|
-
upToDateBody: (version) => `Cats ${version} is the latest version.`,
|
|
54
|
-
availableTitle: 'Update available',
|
|
55
|
-
availableBody: (version) => `Cats ${version} is available to download.`,
|
|
56
|
-
failedTitle: 'Update check failed',
|
|
57
|
-
previewSuffix: ' (preview)',
|
|
58
|
-
},
|
|
59
|
-
'zh-TW': {
|
|
60
|
-
upToDateTitle: 'Cats 已是最新版本',
|
|
61
|
-
upToDateBody: (version) => `Cats ${version} 已是最新版本。`,
|
|
62
|
-
availableTitle: '有可用更新',
|
|
63
|
-
availableBody: (version) => `Cats ${version} 已可下載。`,
|
|
64
|
-
failedTitle: '更新檢查失敗',
|
|
65
|
-
previewSuffix: '(預覽)',
|
|
66
|
-
},
|
|
67
|
-
};
|
|
68
|
-
const NOTHING_TO_ANNOUNCE = {
|
|
69
|
-
notification: null,
|
|
70
|
-
fallbackNavigatePath: null,
|
|
71
|
-
};
|
|
72
|
-
/**
|
|
73
|
-
* Decides what a finished check should tell the user, and how.
|
|
74
|
-
*
|
|
75
|
-
* A result is announced only when the user cannot already see it:
|
|
76
|
-
*
|
|
77
|
-
* - `settings` never announces. The section shows the state directly and
|
|
78
|
-
* routes manual results through the shared toast system, so a native
|
|
79
|
-
* notification would report the same check twice.
|
|
80
|
-
* - `tray` announces up-to-date, available, and failed. The menu closes on
|
|
81
|
-
* click, so without this the command looks like it did nothing.
|
|
82
|
-
* - `startup` announces only an available update. The user did not ask for
|
|
83
|
-
* that check, so an up-to-date or offline result has nothing to say and
|
|
84
|
-
* would nag on every launch.
|
|
85
|
-
*/
|
|
86
|
-
export function resolveDesktopUpdateAnnouncement(input) {
|
|
87
|
-
const { origin, snapshot, notificationsSupported } = input;
|
|
88
|
-
if (origin === 'settings') {
|
|
89
|
-
return NOTHING_TO_ANNOUNCE;
|
|
90
|
-
}
|
|
91
|
-
// A build that cannot check cannot have produced a result worth reporting,
|
|
92
|
-
// and must never imply that an update path exists.
|
|
93
|
-
if (!snapshot.capability.canCheck) {
|
|
94
|
-
return NOTHING_TO_ANNOUNCE;
|
|
95
|
-
}
|
|
96
|
-
const locale = normalizeDesktopTrayLocale(input.locale);
|
|
97
|
-
const notification = resolveNotification(origin, snapshot, locale);
|
|
98
|
-
if (notification === null) {
|
|
99
|
-
return NOTHING_TO_ANNOUNCE;
|
|
100
|
-
}
|
|
101
|
-
// SPEC-111 section 5.5: a tray-originated result always becomes visible, so
|
|
102
|
-
// it falls back to opening Settings. A startup check was never requested, so
|
|
103
|
-
// pulling a window forward unasked would be worse than staying quiet.
|
|
104
|
-
const fallbackNavigatePath = origin === 'tray' ? DESKTOP_UPDATE_SETTINGS_PATH : null;
|
|
105
|
-
return {
|
|
106
|
-
notification: notificationsSupported ? notification : null,
|
|
107
|
-
fallbackNavigatePath,
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
function resolveNotification(origin, snapshot, locale) {
|
|
111
|
-
const copy = NOTIFICATION_COPY[locale];
|
|
112
|
-
// A preview self-updates from an unsigned prerelease feed. A tester who
|
|
113
|
-
// cannot tell that apart from a supported release cannot report usefully.
|
|
114
|
-
const suffix = snapshot.capability.distribution === 'preview_packaged'
|
|
115
|
-
? copy.previewSuffix
|
|
116
|
-
: '';
|
|
117
|
-
const announce = (title, body) => ({
|
|
118
|
-
title: `${title}${suffix}`,
|
|
119
|
-
body,
|
|
120
|
-
navigatePath: DESKTOP_UPDATE_SETTINGS_PATH,
|
|
121
|
-
});
|
|
122
|
-
switch (snapshot.status) {
|
|
123
|
-
case 'up_to_date':
|
|
124
|
-
return origin === 'tray'
|
|
125
|
-
? announce(copy.upToDateTitle, copy.upToDateBody(snapshot.currentVersion))
|
|
126
|
-
: null;
|
|
127
|
-
case 'update_available':
|
|
128
|
-
// The manager rejects an available update without a version, so this
|
|
129
|
-
// guard is only here to keep a version-less body unreachable.
|
|
130
|
-
return snapshot.availableVersion === null
|
|
131
|
-
? null
|
|
132
|
-
: announce(copy.availableTitle, copy.availableBody(snapshot.availableVersion));
|
|
133
|
-
case 'failed':
|
|
134
|
-
return origin === 'tray' && snapshot.error !== null
|
|
135
|
-
? announce(copy.failedTitle, DESKTOP_UPDATE_NOTIFICATION_ERROR_COPY[locale][snapshot.error.code])
|
|
136
|
-
: null;
|
|
137
|
-
default:
|
|
138
|
-
// Every other status is either in flight or the result of an action the
|
|
139
|
-
// user took in Settings, where the surface already reports it.
|
|
140
|
-
return null;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
//# sourceMappingURL=updateNotifications.js.map
|