@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
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Injected by the host before the app. No credentials or general HTTP proxy.
|
|
2
|
+
(() => {
|
|
3
|
+
'use strict';
|
|
4
|
+
const boot = globalThis.__CATS_APP_BOOT__;
|
|
5
|
+
delete globalThis.__CATS_APP_BOOT__;
|
|
6
|
+
const pending = new Map();
|
|
7
|
+
let nextId = 0;
|
|
8
|
+
let port;
|
|
9
|
+
let resolveReady;
|
|
10
|
+
const ready = new Promise((resolve) => { resolveReady = resolve; });
|
|
11
|
+
const connect = (event) => {
|
|
12
|
+
if (event.source !== parent || event.data?.type !== 'cats.app.connect'
|
|
13
|
+
|| event.data?.nonce !== boot.nonce || !event.ports[0] || port) return;
|
|
14
|
+
port = event.ports[0];
|
|
15
|
+
window.removeEventListener('message', connect);
|
|
16
|
+
port.onmessage = ({ data }) => {
|
|
17
|
+
const request = pending.get(data?.id);
|
|
18
|
+
if (!request) return;
|
|
19
|
+
pending.delete(data.id);
|
|
20
|
+
clearTimeout(request.timer);
|
|
21
|
+
if (data.ok) request.resolve(data.value);
|
|
22
|
+
else request.reject(new Error(data.error || 'App bridge request failed.'));
|
|
23
|
+
};
|
|
24
|
+
port.start();
|
|
25
|
+
resolveReady();
|
|
26
|
+
};
|
|
27
|
+
window.addEventListener('message', connect);
|
|
28
|
+
parent.postMessage({ type: 'cats.app.ready', nonce: boot.nonce }, '*');
|
|
29
|
+
const request = async (method, params) => {
|
|
30
|
+
await Promise.race([ready, new Promise((_, reject) => setTimeout(() => reject(new Error('App host is unavailable.')), 5000))]);
|
|
31
|
+
if (pending.size >= 4) throw new Error('Too many pending app requests.');
|
|
32
|
+
return new Promise((resolve, reject) => {
|
|
33
|
+
const id = ++nextId;
|
|
34
|
+
const timer = setTimeout(() => { pending.delete(id); reject(new Error('App bridge timed out.')); }, method === 'usage.refreshQuota' ? 15000 : 12000);
|
|
35
|
+
pending.set(id, { resolve, reject, timer });
|
|
36
|
+
port.postMessage({ id, method, params });
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(globalThis, 'catsApp', { value: Object.freeze({
|
|
40
|
+
sdkVersion: '1.2.0', appId: boot.appId, version: boot.version,
|
|
41
|
+
locale: boot.locale, theme: boot.theme,
|
|
42
|
+
usage: Object.freeze({
|
|
43
|
+
getSnapshot: () => request('usage.snapshot'),
|
|
44
|
+
refreshQuota: (target) => request('usage.refreshQuota', target),
|
|
45
|
+
}),
|
|
46
|
+
openLobby: () => request('navigation.lobby'),
|
|
47
|
+
}), writable: false, configurable: false });
|
|
48
|
+
})();
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const APP_SDK_VERSION: string;
|
|
2
|
+
export const PLATFORM_VERSION: string;
|
|
3
|
+
export const MAX_PACKAGE_BYTES: number;
|
|
4
|
+
export interface AppPin { id: string; version: string; sha256: string; artifact: string }
|
|
5
|
+
export interface ResolvedAppPin extends AppPin { bytes: Buffer; manifest: Record<string, any> }
|
|
6
|
+
export function sha256(bytes: Uint8Array): string;
|
|
7
|
+
export function readBrowserSdk(): Promise<string>;
|
|
8
|
+
export function supportsVersion(version: string, range: string): boolean;
|
|
9
|
+
export function decodeAppPackage(bytes: Uint8Array, expected?: Pick<AppPin, 'id' | 'version' | 'sha256'>): {
|
|
10
|
+
manifest: Record<string, any>; files: { path: string; data: Buffer }[]; sha256: string;
|
|
11
|
+
};
|
|
12
|
+
export function parseAppLock(value: unknown): { schemaVersion: 1; apps: AppPin[] };
|
|
13
|
+
export function resolveAppLock(lockPath: string): Promise<ResolvedAppPin[]>;
|
|
14
|
+
export function materializeAppSelection(apps: ResolvedAppPin[]): Promise<string>;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { gunzipSync } from 'node:zlib';
|
|
3
|
+
import { readFile, stat, mkdtemp, writeFile } from 'node:fs/promises';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { tmpdir } from 'node:os';
|
|
6
|
+
import { createRequire } from 'node:module';
|
|
7
|
+
|
|
8
|
+
export const APP_SDK_VERSION = '1.2.0';
|
|
9
|
+
export const PLATFORM_VERSION = createRequire(import.meta.url)('../../package.json').version;
|
|
10
|
+
export const MAX_PACKAGE_BYTES = 8 * 1024 * 1024;
|
|
11
|
+
const MAX_EXPANDED_BYTES = 24 * 1024 * 1024;
|
|
12
|
+
const ID = /^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$/;
|
|
13
|
+
const VERSION = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/;
|
|
14
|
+
const HASH = /^[a-f0-9]{64}$/;
|
|
15
|
+
const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
16
|
+
export const sha256 = (bytes) => createHash('sha256').update(bytes).digest('hex');
|
|
17
|
+
export const readBrowserSdk = () => readFile(new URL('./browser.js', import.meta.url), 'utf8');
|
|
18
|
+
|
|
19
|
+
// v1 deliberately supports exact versions, ^x.y.z, x.y.x and x.x only.
|
|
20
|
+
// Reject rather than guess at unsupported semver expressions / prereleases.
|
|
21
|
+
export function supportsVersion(version, range) {
|
|
22
|
+
if (typeof version !== 'string' || typeof range !== 'string' || !VERSION.test(version)) return false;
|
|
23
|
+
const v = version.split('.').map(Number);
|
|
24
|
+
if (VERSION.test(range)) return range === version;
|
|
25
|
+
const wildcard = /^(0|[1-9]\d*)\.(?:(0|[1-9]\d*)\.)?x$/.exec(range);
|
|
26
|
+
if (wildcard) return v[0] === Number(wildcard[1]) && (wildcard[2] === undefined || v[1] === Number(wildcard[2]));
|
|
27
|
+
if (!range.startsWith('^') || !VERSION.test(range.slice(1))) return false;
|
|
28
|
+
const r = range.slice(1).split('.').map(Number);
|
|
29
|
+
const compare = v[0] - r[0] || v[1] - r[1] || v[2] - r[2];
|
|
30
|
+
if (compare < 0 || v[0] !== r[0]) return false;
|
|
31
|
+
return r[0] > 0 || (v[1] === r[1] && (r[1] > 0 || v[2] === r[2]));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function assertIdentity(id, version) {
|
|
35
|
+
if (typeof id !== 'string' || id.length > 100 || !ID.test(id)
|
|
36
|
+
|| typeof version !== 'string' || !VERSION.test(version)) throw new Error('Invalid app ID or stable version.');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function decodeAppPackage(bytes, expected) {
|
|
40
|
+
if (bytes.length > MAX_PACKAGE_BYTES) throw new Error('App package exceeds compressed size limit.');
|
|
41
|
+
const digest = sha256(bytes);
|
|
42
|
+
if (expected && (!HASH.test(expected.sha256) || digest !== expected.sha256)) throw new Error('App package SHA-256 mismatch.');
|
|
43
|
+
const envelope = JSON.parse(gunzipSync(bytes, { maxOutputLength: MAX_EXPANDED_BYTES }).toString('utf8'));
|
|
44
|
+
if (!object(envelope) || envelope.schemaVersion !== 1 || envelope.kind !== 'cats-app'
|
|
45
|
+
|| !object(envelope.manifest) || !Array.isArray(envelope.files)) throw new Error('Invalid Cats App v1 archive.');
|
|
46
|
+
const { manifest } = envelope;
|
|
47
|
+
assertIdentity(manifest.id, manifest.version);
|
|
48
|
+
if (expected && (manifest.id !== expected.id || manifest.version !== expected.version)) throw new Error('App package identity/version mismatch.');
|
|
49
|
+
if (envelope.files.length === 0 || envelope.files.length > 128) throw new Error('Invalid app file count.');
|
|
50
|
+
const seen = new Set();
|
|
51
|
+
const files = envelope.files.map((file) => {
|
|
52
|
+
// Portable, case-insensitive namespace. No symlinks, executable hooks, or device names.
|
|
53
|
+
if (!object(file) || typeof file.path !== 'string' || file.path.length > 180
|
|
54
|
+
|| !/^[a-zA-Z0-9_./-]+$/.test(file.path)
|
|
55
|
+
|| file.path.split('/').some((part) => !part || part === '.' || part === '..'
|
|
56
|
+
|| /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(?:\.|$)/i.test(part) || part.endsWith('.'))
|
|
57
|
+
|| ['cats.app.json', '.package.json'].includes(file.path.toLowerCase())
|
|
58
|
+
|| seen.has(file.path.toLowerCase()) || typeof file.base64 !== 'string'
|
|
59
|
+
|| !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(file.base64)) {
|
|
60
|
+
throw new Error('Unsafe, duplicate, or invalid app file.');
|
|
61
|
+
}
|
|
62
|
+
seen.add(file.path.toLowerCase());
|
|
63
|
+
const data = Buffer.from(file.base64, 'base64');
|
|
64
|
+
if (data.length > 8 * 1024 * 1024 || data.toString('base64') !== file.base64) throw new Error('Invalid app file payload.');
|
|
65
|
+
return { path: file.path, data };
|
|
66
|
+
});
|
|
67
|
+
if (typeof manifest.entrypoints?.renderer !== 'string'
|
|
68
|
+
|| !files.some((file) => file.path === manifest.entrypoints.renderer)
|
|
69
|
+
|| !manifest.entrypoints.renderer.endsWith('.html')
|
|
70
|
+
|| manifest.entrypoints.server || manifest.entrypoints.worker) throw new Error('v1 packages require a self-contained HTML renderer; server/worker execution is unsupported.');
|
|
71
|
+
return { manifest, files, sha256: digest };
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function parseAppLock(value) {
|
|
75
|
+
if (!object(value) || value.schemaVersion !== 1 || !Array.isArray(value.apps) || value.apps.length > 64) throw new Error('Invalid app bundle lock.');
|
|
76
|
+
const seen = new Set();
|
|
77
|
+
return { schemaVersion: 1, apps: value.apps.map((entry) => {
|
|
78
|
+
if (!object(entry)) throw new Error('Invalid app pin.');
|
|
79
|
+
assertIdentity(entry.id, entry.version);
|
|
80
|
+
if (seen.has(entry.id) || !HASH.test(entry.sha256) || typeof entry.artifact !== 'string' || !entry.artifact.trim()) throw new Error('Duplicate or incomplete app pin.');
|
|
81
|
+
seen.add(entry.id);
|
|
82
|
+
return { id: entry.id, version: entry.version, sha256: entry.sha256, artifact: entry.artifact };
|
|
83
|
+
}) };
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export async function resolveAppLock(lockPath) {
|
|
87
|
+
const lock = parseAppLock(JSON.parse(await readFile(lockPath, 'utf8')));
|
|
88
|
+
const resolved = [];
|
|
89
|
+
for (const pin of lock.apps) {
|
|
90
|
+
let bytes;
|
|
91
|
+
if (/^https:/i.test(pin.artifact)) {
|
|
92
|
+
const url = new URL(pin.artifact);
|
|
93
|
+
const parts = url.pathname.split('/');
|
|
94
|
+
if (url.hostname !== 'github.com' || url.port || url.username || url.password || url.search || url.hash
|
|
95
|
+
|| parts.length !== 7 || parts[3] !== 'releases' || parts[4] !== 'download'
|
|
96
|
+
|| /latest|nightly|current/i.test(parts[5])) throw new Error('App URL must be a pinned GitHub release asset, not a moving alias.');
|
|
97
|
+
const response = await fetch(url, { signal: AbortSignal.timeout(60_000) });
|
|
98
|
+
if (!response.ok || !response.body) throw new Error(`Cannot download pinned app: HTTP ${response.status}.`);
|
|
99
|
+
const chunks = []; let size = 0;
|
|
100
|
+
for await (const chunk of response.body) {
|
|
101
|
+
size += chunk.length;
|
|
102
|
+
if (size > MAX_PACKAGE_BYTES) { await response.body.cancel().catch(() => {}); throw new Error('App download exceeds size limit.'); }
|
|
103
|
+
chunks.push(chunk);
|
|
104
|
+
}
|
|
105
|
+
bytes = Buffer.concat(chunks);
|
|
106
|
+
} else {
|
|
107
|
+
if (/^[a-z]+:\/\//i.test(pin.artifact)) throw new Error('Unsupported app artifact URL.');
|
|
108
|
+
const artifactPath = path.resolve(path.dirname(lockPath), pin.artifact);
|
|
109
|
+
if ((await stat(artifactPath)).size > MAX_PACKAGE_BYTES) throw new Error('App package exceeds size limit.');
|
|
110
|
+
bytes = await readFile(artifactPath);
|
|
111
|
+
}
|
|
112
|
+
const decoded = decodeAppPackage(bytes, pin);
|
|
113
|
+
resolved.push({ ...pin, bytes, manifest: decoded.manifest });
|
|
114
|
+
}
|
|
115
|
+
return resolved;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export async function materializeAppSelection(apps) {
|
|
119
|
+
parseAppLock({ schemaVersion: 1, apps });
|
|
120
|
+
for (const app of apps) decodeAppPackage(app.bytes, app);
|
|
121
|
+
const directory = await mkdtemp(path.join(tmpdir(), 'cats-desktop-apps-'));
|
|
122
|
+
const pins = [];
|
|
123
|
+
for (const app of apps) {
|
|
124
|
+
const artifact = `${app.id}-${app.version}.catsapp`;
|
|
125
|
+
await writeFile(path.join(directory, artifact), app.bytes, { flag: 'wx' });
|
|
126
|
+
pins.push({ id: app.id, version: app.version, sha256: app.sha256, artifact });
|
|
127
|
+
}
|
|
128
|
+
const lockPath = path.join(directory, 'bundle.lock.json');
|
|
129
|
+
await writeFile(lockPath, `${JSON.stringify({ schemaVersion: 1, apps: pins }, null, 2)}\n`, { flag: 'wx' });
|
|
130
|
+
return lockPath;
|
|
131
|
+
}
|
package/scripts/README.md
CHANGED
|
@@ -143,7 +143,8 @@ discovery paths do not depend on bootstrap submodules:
|
|
|
143
143
|
- `scripts/linux/sync-agent-skills.sh`
|
|
144
144
|
- `scripts/macos/sync-agent-skills.sh`
|
|
145
145
|
|
|
146
|
-
These scripts
|
|
146
|
+
These scripts recursively discover packages under developer `skills/` and copy
|
|
147
|
+
their complete resources into `.claude/skills` and `.agents/skills`, and
|
|
147
148
|
support:
|
|
148
149
|
|
|
149
150
|
- `--clean` / `-Clean`
|
|
@@ -153,6 +154,10 @@ Antigravity CLI is intentionally not a skill sync target yet. Its repo/project
|
|
|
153
154
|
skill discovery path has not been verified, so these helpers do not create an
|
|
154
155
|
`.antigravity/skills` convention.
|
|
155
156
|
|
|
157
|
+
Skill discovery stops at package roots and rejects duplicate leaf names before
|
|
158
|
+
writing. It skips pending `*.bootstrap` directories. Desktop packaging obtains
|
|
159
|
+
product skills separately from `cats-runtime/runtime-skills/`.
|
|
160
|
+
|
|
156
161
|
## Self-Hosted npm Package Helpers
|
|
157
162
|
|
|
158
163
|
`cats-platform` now also ships repo-owned npm pack/install smoke helpers on
|
|
@@ -187,7 +192,7 @@ packaging and installer flows.
|
|
|
187
192
|
- `scripts/windows/Install-Antigravity.ps1`
|
|
188
193
|
- `scripts/windows/Install-Grok.ps1`
|
|
189
194
|
- `scripts/windows/Install-Devin.ps1`
|
|
190
|
-
- `scripts/windows/Install-
|
|
195
|
+
- `scripts/windows/Install-MetaCli.ps1`
|
|
191
196
|
- `scripts/windows/Install-Copilot.ps1`
|
|
192
197
|
- `scripts/windows/Install-OpenCode.ps1`
|
|
193
198
|
- `scripts/windows/Install-KiloCli.ps1`
|
|
@@ -253,28 +258,40 @@ still owed after a successful install: run `devin auth login` once and check
|
|
|
253
258
|
with `devin auth status`. Uninstall removes the versioned tree under
|
|
254
259
|
`%LOCALAPPDATA%\devin\cli` as well as the entry point.
|
|
255
260
|
|
|
256
|
-
`Install-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
261
|
+
`Install-MetaCli.ps1` and `install-meta-cli.sh` wrap Meta's Muse installer.
|
|
262
|
+
What that installer places is a *launcher*, not the agent: it downloads
|
|
263
|
+
`muse-bin-<version>` beside itself and records the version in `.muse-version`.
|
|
264
|
+
Two things follow from that.
|
|
265
|
+
|
|
266
|
+
Detection requires the agent build, not the entry point. The installer writes
|
|
267
|
+
the shim and launcher first and downloads the agent last, so a run that fails in
|
|
268
|
+
between leaves an entry point with nothing behind it; reporting that as
|
|
269
|
+
installed would skip the reinstall that repairs it. Uninstall removes every
|
|
270
|
+
`muse-bin-*` build and `.muse-*` state file in the install directory, not just
|
|
271
|
+
the entry point.
|
|
272
|
+
|
|
273
|
+
The version is read from `.muse-version` and the helpers never execute `muse`.
|
|
274
|
+
The launcher forwards every argument straight to the agent binary, so a flag
|
|
275
|
+
that binary does not recognise opens the interactive TUI instead of failing —
|
|
276
|
+
in a packaged setup step with no console a prompt can reach, that is an
|
|
277
|
+
unbounded hang rather than an error. On Windows the installer runs under
|
|
278
|
+
Windows PowerShell 5.1 for the same reason the launcher does: a `PSModulePath`
|
|
279
|
+
inherited from PowerShell 7 breaks the launcher's download step.
|
|
280
|
+
|
|
281
|
+
Install directories differ by platform: `%LOCALAPPDATA%\Programs\muse` on Windows
|
|
282
|
+
(entry point `muse.cmd`) and `~/.local/bin` on macOS and Linux. `MUSE_INSTALL_DIR`
|
|
283
|
+
overrides both, matching the official installer.
|
|
284
|
+
|
|
285
|
+
Cats installs and detects Devin but does not run its sessions through the CLI
|
|
286
|
+
backend. Devin has no machine-readable CLI output and executes through the
|
|
287
|
+
`agent/acp` backend instead, so it has no `cli/native` entry in the product
|
|
288
|
+
execution catalog.
|
|
289
|
+
|
|
290
|
+
`Check-WindowsSetupReadiness.ps1` remains an explicit operator utility for an
|
|
291
|
+
aggregate audit. Packaged Desktop runs individual checks only for Runtime-selected
|
|
292
|
+
native targets: shared Node/npm prerequisites and selected local Ollama. It does
|
|
293
|
+
not invoke the aggregate audit during startup. WSL/Docker variants remain
|
|
294
|
+
operator-configured and are outside the native Desktop helper editor.
|
|
278
295
|
|
|
279
296
|
OpenClaw is intentionally not part of this local readiness audit because the
|
|
280
297
|
provider catalog models it as an `agent/gateway` backend, not a repo-owned
|
|
@@ -296,7 +313,7 @@ runtime:
|
|
|
296
313
|
- `scripts/linux/install-antigravity.sh`
|
|
297
314
|
- `scripts/linux/install-grok.sh`
|
|
298
315
|
- `scripts/linux/install-devin.sh`
|
|
299
|
-
- `scripts/linux/install-
|
|
316
|
+
- `scripts/linux/install-meta-cli.sh`
|
|
300
317
|
- `scripts/linux/install-copilot.sh`
|
|
301
318
|
- `scripts/linux/install-opencode.sh`
|
|
302
319
|
- `scripts/linux/install-kilo.sh`
|
|
@@ -317,7 +334,7 @@ runtime:
|
|
|
317
334
|
- `scripts/macos/install-antigravity.sh`
|
|
318
335
|
- `scripts/macos/install-grok.sh`
|
|
319
336
|
- `scripts/macos/install-devin.sh`
|
|
320
|
-
- `scripts/macos/install-
|
|
337
|
+
- `scripts/macos/install-meta-cli.sh`
|
|
321
338
|
- `scripts/macos/install-copilot.sh`
|
|
322
339
|
- `scripts/macos/install-opencode.sh`
|
|
323
340
|
- `scripts/macos/install-kilo.sh`
|
|
@@ -410,3 +427,33 @@ from the packaged setup wizard/bootstrap flow for now.
|
|
|
410
427
|
Pass `--include-local-models` to the Unix `check-installation.sh` helpers when
|
|
411
428
|
you also want the optional Ollama local-model check in the audit output.
|
|
412
429
|
Pass `--serial` when you need those Unix audits to avoid background fan-out.
|
|
430
|
+
|
|
431
|
+
## Merged-Branch Sweep
|
|
432
|
+
|
|
433
|
+
- `scripts/windows/Remove-MergedBranches.ps1`
|
|
434
|
+
|
|
435
|
+
This project squash-merges and lets GitHub delete the head branch, so every
|
|
436
|
+
landed PR leaves a local branch behind. Because a squashed commit has a
|
|
437
|
+
different SHA than the branch it came from, `git branch -d` reports "not fully
|
|
438
|
+
merged" and refuses. The script keys off upstream state instead: a branch counts
|
|
439
|
+
as merged once it had an upstream and that upstream is gone.
|
|
440
|
+
|
|
441
|
+
```powershell
|
|
442
|
+
.\scripts\windows\Remove-MergedBranches.ps1 -WhatIf
|
|
443
|
+
.\scripts\windows\Remove-MergedBranches.ps1 -ReturnToDefault
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
It refuses to run on a dirty working tree, never sweeps a branch that was never
|
|
447
|
+
pushed, and skips branches checked out in another worktree. Run
|
|
448
|
+
`git config --global fetch.prune true` once so the `gone` markers it reads
|
|
449
|
+
appear without remembering `--prune`.
|
|
450
|
+
|
|
451
|
+
Three copies of this script exist and are meant to stay in step:
|
|
452
|
+
|
|
453
|
+
- here
|
|
454
|
+
- `cats-runtime` at the same path
|
|
455
|
+
- `project-bootstrap` at `templates/base/scripts/windows/`, which is where new
|
|
456
|
+
projects inherit it from, alongside `linux/` and `macos/` bash equivalents
|
|
457
|
+
|
|
458
|
+
The template copy is the one to treat as canonical when they disagree, since it
|
|
459
|
+
has to work in a repository whose default branch and remote are unknown.
|
|
@@ -8,6 +8,7 @@ import { spawn } from 'node:child_process';
|
|
|
8
8
|
|
|
9
9
|
import { parseStableReleaseTag } from './validate-release-version.mjs';
|
|
10
10
|
import { DESCRIPTOR_RELATIVE_PATH } from './generate-desktop-release-descriptor.mjs';
|
|
11
|
+
import { resolveAppLock, materializeAppSelection } from '#cats-app-package';
|
|
11
12
|
|
|
12
13
|
const SCRIPT_PATH = fileURLToPath(import.meta.url);
|
|
13
14
|
const PROJECT_ROOT = resolve(dirname(SCRIPT_PATH), '..');
|
|
@@ -32,6 +33,7 @@ Options:
|
|
|
32
33
|
--format <nsis|dmg|pkg|zip|AppImage|deb|tar.gz>
|
|
33
34
|
Override the configured installer formats.
|
|
34
35
|
--sidecar-layout <split|bundle> Choose loose-file or bundled sidecars for both app/runtime.
|
|
36
|
+
--apps-lock <path> Bundle the exact ID/version/SHA-256 selection in this lock.
|
|
35
37
|
--skip-mobile Skip the mobile bundle (\`expo export\`). Also honored via
|
|
36
38
|
CATS_SKIP_MOBILE=1 in the environment or .env.
|
|
37
39
|
--release Build an official release package: embed the release
|
|
@@ -102,6 +104,7 @@ export function parseArgs(argv, env = process.env) {
|
|
|
102
104
|
// cannot override anything in the GITHUB_ namespace, and a preview run is
|
|
103
105
|
// dispatched from a branch, so the tag has to arrive as an explicit input.
|
|
104
106
|
let tag = (env.CATS_DESKTOP_RELEASE_TAG ?? env.GITHUB_REF_NAME ?? '').trim();
|
|
107
|
+
let appsLock = env.CATS_DESKTOP_APPS_LOCK?.trim() || null;
|
|
105
108
|
|
|
106
109
|
for (let index = 0; index < argv.length; index += 1) {
|
|
107
110
|
const value = argv[index];
|
|
@@ -117,12 +120,18 @@ export function parseArgs(argv, env = process.env) {
|
|
|
117
120
|
previewMode,
|
|
118
121
|
publish,
|
|
119
122
|
tag,
|
|
123
|
+
...(appsLock ? { appsLock } : {}),
|
|
120
124
|
};
|
|
121
125
|
}
|
|
122
126
|
if (value === '--release') {
|
|
123
127
|
releaseMode = true;
|
|
124
128
|
continue;
|
|
125
129
|
}
|
|
130
|
+
if (value === '--apps-lock') {
|
|
131
|
+
appsLock = argv[++index];
|
|
132
|
+
if (!appsLock || appsLock.startsWith('--')) throw new Error('--apps-lock requires a path.');
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
126
135
|
if (value === '--no-release') {
|
|
127
136
|
releaseMode = false;
|
|
128
137
|
continue;
|
|
@@ -187,6 +196,7 @@ export function parseArgs(argv, env = process.env) {
|
|
|
187
196
|
previewMode,
|
|
188
197
|
publish,
|
|
189
198
|
tag,
|
|
199
|
+
...(appsLock ? { appsLock } : {}),
|
|
190
200
|
};
|
|
191
201
|
}
|
|
192
202
|
|
|
@@ -673,6 +683,10 @@ async function main() {
|
|
|
673
683
|
}
|
|
674
684
|
|
|
675
685
|
const resolvedTarget = resolveBuilderTarget(parsed.target);
|
|
686
|
+
// Resolve once before builds can clear build/. Stage an offline immutable copy
|
|
687
|
+
// in an OS temporary directory so retries never redownload a moving asset.
|
|
688
|
+
const selectedApps = parsed.appsLock ? await resolveAppLock(resolve(parsed.appsLock)) : null;
|
|
689
|
+
const appLockForBuild = selectedApps ? await materializeAppSelection(selectedApps) : null;
|
|
676
690
|
const envOptions = { releaseMode: parsed.releaseMode };
|
|
677
691
|
|
|
678
692
|
if (parsed.releaseMode && parsed.previewMode) {
|
|
@@ -762,6 +776,7 @@ async function main() {
|
|
|
762
776
|
resolvedTarget,
|
|
763
777
|
'--sidecar-layout',
|
|
764
778
|
parsed.sidecarLayout,
|
|
779
|
+
...(appLockForBuild ? ['--apps-lock', appLockForBuild] : []),
|
|
765
780
|
],
|
|
766
781
|
PROJECT_ROOT,
|
|
767
782
|
sidecarBuildEnv,
|
|
@@ -4,13 +4,26 @@ import { fileURLToPath } from 'node:url';
|
|
|
4
4
|
|
|
5
5
|
const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
bundle
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
7
|
+
export function bundleServer({
|
|
8
|
+
entryPoint = resolve(root, 'build', 'server', 'index.js'),
|
|
9
|
+
outfile = resolve(root, 'build', 'server-bundle', 'index.js'),
|
|
10
|
+
} = {}) {
|
|
11
|
+
return build({
|
|
12
|
+
entryPoints: [entryPoint],
|
|
13
|
+
bundle: true,
|
|
14
|
+
outfile,
|
|
15
|
+
platform: 'node',
|
|
16
|
+
target: 'node22',
|
|
17
|
+
format: 'esm',
|
|
18
|
+
sourcemap: true,
|
|
19
|
+
packages: 'external',
|
|
20
|
+
// Package-import aliases are otherwise inlined despite packages: external.
|
|
21
|
+
// Keep the SDK's import.meta.url beside its shipped browser.js resource.
|
|
22
|
+
external: ['#cats-app-package'],
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (resolve(process.argv[1] ?? '') === fileURLToPath(import.meta.url)) {
|
|
27
|
+
if (process.argv.includes('--help')) console.log('Usage: node scripts/bundle-server.mjs (after npm run build:server)');
|
|
28
|
+
else await bundleServer();
|
|
29
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Script: build-desktop-package.sh
|
|
4
4
|
# Description: Build staged desktop packaging outputs for Cats.
|
|
5
5
|
#
|
|
6
|
-
# Usage: ./scripts/linux/build-desktop-package.sh [all|windows|macos|linux] [output-dir]
|
|
6
|
+
# Usage: ./scripts/linux/build-desktop-package.sh [all|windows|macos|linux] [output-dir] [apps-lock]
|
|
7
7
|
#
|
|
8
8
|
# Arguments:
|
|
9
9
|
# [platform] Optional platform filter. Defaults to all.
|
|
@@ -20,11 +20,11 @@ SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
20
20
|
PROJECT_ROOT="$(cd -- "${SCRIPT_DIR}/../.." && pwd)"
|
|
21
21
|
PLATFORM="${1:-all}"
|
|
22
22
|
OUTPUT_DIR="${2:-}"
|
|
23
|
+
APPS_LOCK="${3:-}"
|
|
23
24
|
|
|
24
25
|
cd "${PROJECT_ROOT}"
|
|
25
26
|
npm run build
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
fi
|
|
27
|
+
package_args=(./scripts/package-desktop.mjs --platform "${PLATFORM}")
|
|
28
|
+
if [[ -n "${OUTPUT_DIR}" ]]; then package_args+=(--output-dir "${OUTPUT_DIR}"); fi
|
|
29
|
+
if [[ -n "${APPS_LOCK}" ]]; then package_args+=(--apps-lock "${APPS_LOCK}"); fi
|
|
30
|
+
node "${package_args[@]}"
|
|
File without changes
|
|
File without changes
|
|
@@ -766,10 +766,6 @@ run_self_hosted_installation_check() {
|
|
|
766
766
|
local prefix_status='missing'
|
|
767
767
|
local core_present=0
|
|
768
768
|
local core_missing=0
|
|
769
|
-
local native_present=0
|
|
770
|
-
local native_missing=0
|
|
771
|
-
local node_pack_present=0
|
|
772
|
-
local node_pack_missing=0
|
|
773
769
|
local local_model_present=0
|
|
774
770
|
local local_model_missing=0
|
|
775
771
|
local node_host_missing='false'
|
|
@@ -881,16 +877,12 @@ EOF
|
|
|
881
877
|
total_present=$((total_present + 1))
|
|
882
878
|
case "$check_kind" in
|
|
883
879
|
core) core_present=$((core_present + 1)) ;;
|
|
884
|
-
native) native_present=$((native_present + 1)) ;;
|
|
885
|
-
node) node_pack_present=$((node_pack_present + 1)) ;;
|
|
886
880
|
local_model) local_model_present=$((local_model_present + 1)) ;;
|
|
887
881
|
esac
|
|
888
882
|
else
|
|
889
883
|
total_missing=$((total_missing + 1))
|
|
890
884
|
case "$check_kind" in
|
|
891
885
|
core) core_missing=$((core_missing + 1)) ;;
|
|
892
|
-
native) native_missing=$((native_missing + 1)) ;;
|
|
893
|
-
node) node_pack_missing=$((node_pack_missing + 1)) ;;
|
|
894
886
|
local_model) local_model_missing=$((local_model_missing + 1)) ;;
|
|
895
887
|
esac
|
|
896
888
|
fi
|
|
@@ -909,9 +901,6 @@ EOF
|
|
|
909
901
|
|
|
910
902
|
append_check_row "$check_id" "$check_label" "$check_present" "$check_kind" "$check_scope" "$check_status"
|
|
911
903
|
case "$check_kind:$check_status" in
|
|
912
|
-
native:changes_required)
|
|
913
|
-
planned_actions+=("provider:install_${check_id}_native")
|
|
914
|
-
;;
|
|
915
904
|
local_model:not_installed)
|
|
916
905
|
planned_actions+=('local_model:install_ollama_local_model')
|
|
917
906
|
manual_steps+=('Install Ollama when you want local models on this host, then rerun the packaged setup check.')
|
|
@@ -954,26 +943,6 @@ EOF
|
|
|
954
943
|
fi
|
|
955
944
|
|
|
956
945
|
if [ "$collection_mode" = 'serial' ]; then
|
|
957
|
-
for provider in claude antigravity cursor goose junie kiro grok; do
|
|
958
|
-
if command_path="$(detect_provider_command "$platform" "$provider")"; then
|
|
959
|
-
handle_audited_check_result "$provider" "$(provider_display_name "$provider")" 'true' 'native' 'host' 'ready'
|
|
960
|
-
unset command_path
|
|
961
|
-
else
|
|
962
|
-
handle_audited_check_result "$provider" "$(provider_display_name "$provider")" 'false' 'native' 'host' 'changes_required'
|
|
963
|
-
fi
|
|
964
|
-
done
|
|
965
|
-
|
|
966
|
-
while IFS='|' read -r id command_name package_name display_name; do
|
|
967
|
-
[ -n "$id" ] || continue
|
|
968
|
-
if command -v "$command_name" >/dev/null 2>&1; then
|
|
969
|
-
handle_audited_check_result "$id" "$display_name" 'true' 'node' 'host' 'ready'
|
|
970
|
-
else
|
|
971
|
-
handle_audited_check_result "$id" "$display_name" 'false' 'node' 'host' 'changes_required'
|
|
972
|
-
fi
|
|
973
|
-
done <<EOF
|
|
974
|
-
$(node_cli_package_rows)
|
|
975
|
-
EOF
|
|
976
|
-
|
|
977
946
|
if [ "$include_local_models" = 'true' ]; then
|
|
978
947
|
if ollama_command="$(detect_ollama_command "$platform")"; then
|
|
979
948
|
if ollama_api_ready; then
|
|
@@ -987,36 +956,6 @@ EOF
|
|
|
987
956
|
fi
|
|
988
957
|
fi
|
|
989
958
|
else
|
|
990
|
-
for provider in claude antigravity cursor goose junie kiro grok; do
|
|
991
|
-
async_file="$(mktemp)"
|
|
992
|
-
async_files+=("$async_file")
|
|
993
|
-
(
|
|
994
|
-
if command_path="$(detect_provider_command "$platform" "$provider")"; then
|
|
995
|
-
printf '%s|%s|true|native|host|ready\n' "$provider" "$(provider_display_name "$provider")"
|
|
996
|
-
unset command_path
|
|
997
|
-
else
|
|
998
|
-
printf '%s|%s|false|native|host|changes_required\n' "$provider" "$(provider_display_name "$provider")"
|
|
999
|
-
fi
|
|
1000
|
-
) >"$async_file" 2>/dev/null &
|
|
1001
|
-
async_pids+=($!)
|
|
1002
|
-
done
|
|
1003
|
-
|
|
1004
|
-
while IFS='|' read -r id command_name package_name display_name; do
|
|
1005
|
-
[ -n "$id" ] || continue
|
|
1006
|
-
async_file="$(mktemp)"
|
|
1007
|
-
async_files+=("$async_file")
|
|
1008
|
-
(
|
|
1009
|
-
if command -v "$command_name" >/dev/null 2>&1; then
|
|
1010
|
-
printf '%s|%s|true|node|host|ready\n' "$id" "$display_name"
|
|
1011
|
-
else
|
|
1012
|
-
printf '%s|%s|false|node|host|changes_required\n' "$id" "$display_name"
|
|
1013
|
-
fi
|
|
1014
|
-
) >"$async_file" 2>/dev/null &
|
|
1015
|
-
async_pids+=($!)
|
|
1016
|
-
done <<EOF
|
|
1017
|
-
$(node_cli_package_rows)
|
|
1018
|
-
EOF
|
|
1019
|
-
|
|
1020
959
|
if [ "$include_local_models" = 'true' ]; then
|
|
1021
960
|
async_file="$(mktemp)"
|
|
1022
961
|
async_files+=("$async_file")
|
|
@@ -1052,10 +991,6 @@ EOF
|
|
|
1052
991
|
done
|
|
1053
992
|
fi
|
|
1054
993
|
|
|
1055
|
-
if [ $node_pack_missing -gt 0 ] && [ "$node_host_missing" = 'false' ] && [ "$npm_host_missing" = 'false' ]; then
|
|
1056
|
-
planned_actions+=('repair_native_cli_pack')
|
|
1057
|
-
fi
|
|
1058
|
-
|
|
1059
994
|
if [ "$total_missing" -gt 0 ]; then
|
|
1060
995
|
overall_status='changes_required'
|
|
1061
996
|
fi
|
|
@@ -1071,17 +1006,11 @@ EOF
|
|
|
1071
1006
|
json_string_array "${planned_actions[@]}"
|
|
1072
1007
|
printf ',"manualSteps":'
|
|
1073
1008
|
json_string_array "${manual_steps[@]}"
|
|
1074
|
-
printf ',"interruptions":[],"checks":[%s],"phases":[{"id":"core","label":"Core prerequisites","status":"%s","present":%s,"missing":%s}
|
|
1009
|
+
printf ',"interruptions":[],"checks":[%s],"phases":[{"id":"core","label":"Core prerequisites","status":"%s","present":%s,"missing":%s}' \
|
|
1075
1010
|
"$checks_json" \
|
|
1076
1011
|
"$(phase_status "$core_missing")" \
|
|
1077
1012
|
"$core_present" \
|
|
1078
|
-
"$core_missing"
|
|
1079
|
-
"$(phase_status "$native_missing")" \
|
|
1080
|
-
"$native_present" \
|
|
1081
|
-
"$native_missing" \
|
|
1082
|
-
"$(phase_status "$node_pack_missing")" \
|
|
1083
|
-
"$node_pack_present" \
|
|
1084
|
-
"$node_pack_missing"
|
|
1013
|
+
"$core_missing"
|
|
1085
1014
|
if [ "$include_local_models" = 'true' ]; then
|
|
1086
1015
|
printf ',{"id":"local_model_pack","label":"Local model pack","status":"%s","present":%s,"missing":%s}' \
|
|
1087
1016
|
"$(phase_status "$local_model_missing")" \
|
|
@@ -1093,8 +1022,6 @@ EOF
|
|
|
1093
1022
|
printf 'Status: %s\n' "$overall_status"
|
|
1094
1023
|
printf 'Collection mode: %s\n' "$collection_mode"
|
|
1095
1024
|
printf 'Core prerequisites: %s (present=%s missing=%s)\n' "$(phase_status "$core_missing")" "$core_present" "$core_missing"
|
|
1096
|
-
printf 'Native provider pack: %s (present=%s missing=%s)\n' "$(phase_status "$native_missing")" "$native_present" "$native_missing"
|
|
1097
|
-
printf 'Node CLI pack: %s (present=%s missing=%s)\n' "$(phase_status "$node_pack_missing")" "$node_pack_present" "$node_pack_missing"
|
|
1098
1025
|
if [ "$include_local_models" = 'true' ]; then
|
|
1099
1026
|
printf 'Local model pack: %s (present=%s missing=%s)\n' "$(phase_status "$local_model_missing")" "$local_model_present" "$local_model_missing"
|
|
1100
1027
|
fi
|