@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.
Files changed (548) hide show
  1. package/.env.example +3 -7
  2. package/README.md +35 -0
  3. package/build/desktop/bootstrapNavigation.d.ts.map +1 -1
  4. package/build/desktop/bootstrapNavigation.js +6 -13
  5. package/build/desktop/bootstrapNavigation.js.map +1 -1
  6. package/build/desktop/bootstrapPage.d.ts.map +1 -1
  7. package/build/desktop/bootstrapPage.js +63 -86
  8. package/build/desktop/bootstrapPage.js.map +1 -1
  9. package/build/desktop/cliInventoryProbe.d.ts +11 -2
  10. package/build/desktop/cliInventoryProbe.d.ts.map +1 -1
  11. package/build/desktop/cliInventoryProbe.js +19 -13
  12. package/build/desktop/cliInventoryProbe.js.map +1 -1
  13. package/build/desktop/config.d.ts +0 -4
  14. package/build/desktop/config.d.ts.map +1 -1
  15. package/build/desktop/config.js +1 -6
  16. package/build/desktop/config.js.map +1 -1
  17. package/build/desktop/contracts.d.ts +12 -2
  18. package/build/desktop/contracts.d.ts.map +1 -1
  19. package/build/desktop/contracts.js +1 -2
  20. package/build/desktop/contracts.js.map +1 -1
  21. package/build/desktop/hostVersion.d.ts.map +1 -1
  22. package/build/desktop/hostVersion.js +3 -5
  23. package/build/desktop/hostVersion.js.map +1 -1
  24. package/build/desktop/main.js +205 -256
  25. package/build/desktop/main.js.map +1 -1
  26. package/build/desktop/packaging.d.ts +2 -0
  27. package/build/desktop/packaging.d.ts.map +1 -1
  28. package/build/desktop/packaging.js +34 -14
  29. package/build/desktop/packaging.js.map +1 -1
  30. package/build/desktop/preload.cjs +9 -0
  31. package/build/desktop/preload.cjs.map +1 -1
  32. package/build/desktop/processSupervisor.d.ts.map +1 -1
  33. package/build/desktop/processSupervisor.js +3 -0
  34. package/build/desktop/processSupervisor.js.map +1 -1
  35. package/build/desktop/providerManager.d.ts +46 -0
  36. package/build/desktop/providerManager.d.ts.map +1 -0
  37. package/build/desktop/providerManager.js +220 -0
  38. package/build/desktop/providerManager.js.map +1 -0
  39. package/build/desktop/providerSelection.d.ts +38 -0
  40. package/build/desktop/providerSelection.d.ts.map +1 -0
  41. package/build/desktop/providerSelection.js +118 -0
  42. package/build/desktop/providerSelection.js.map +1 -0
  43. package/build/desktop/readiness.d.ts +2 -0
  44. package/build/desktop/readiness.d.ts.map +1 -1
  45. package/build/desktop/readiness.js +14 -33
  46. package/build/desktop/readiness.js.map +1 -1
  47. package/build/desktop/setupAssets.d.ts.map +1 -1
  48. package/build/desktop/setupAssets.js +28 -14
  49. package/build/desktop/setupAssets.js.map +1 -1
  50. package/build/desktop/setupAudit.d.ts +4 -3
  51. package/build/desktop/setupAudit.d.ts.map +1 -1
  52. package/build/desktop/setupAudit.js +18 -34
  53. package/build/desktop/setupAudit.js.map +1 -1
  54. package/build/desktop/setupBridge.js +1 -1
  55. package/build/desktop/setupBridge.js.map +1 -1
  56. package/build/desktop/setupPrerequisites.d.ts +11 -0
  57. package/build/desktop/setupPrerequisites.d.ts.map +1 -0
  58. package/build/desktop/setupPrerequisites.js +47 -0
  59. package/build/desktop/setupPrerequisites.js.map +1 -0
  60. package/build/desktop/updateDialog.d.ts +27 -1
  61. package/build/desktop/updateDialog.d.ts.map +1 -1
  62. package/build/desktop/updateDialog.js +85 -5
  63. package/build/desktop/updateDialog.js.map +1 -1
  64. package/build/renderer/assets/ActiveSessionPermissionChip-B49WcZBJ.js +1 -0
  65. package/build/renderer/assets/App-BpxZB5ym.js +2 -0
  66. package/build/renderer/assets/App-DYTUfAl6.js +1 -0
  67. package/build/renderer/assets/App-DxsV-tKS.css +1 -0
  68. package/build/renderer/assets/{App-DKOSn0o_.js → App-boB4WrmU.js} +1 -1
  69. package/build/renderer/assets/WorkspaceAppRoutes-CPqz85iw.js +1 -0
  70. package/build/renderer/assets/app-C52wwCGz.js +85 -0
  71. package/build/renderer/assets/app-CqnsY5ed.css +1 -0
  72. package/build/renderer/assets/{client-BdGHAUoK.js → client-DREGSZqQ.js} +1 -1
  73. package/build/renderer/assets/conversationSidebarRecentEntries-DK0iWS73.js +6 -0
  74. package/build/renderer/assets/{screenshotOverlay-DfBcolX-.js → screenshotOverlay-EF07cXvw.js} +1 -1
  75. package/build/renderer/assets/{useDraftSessionChips-DCIId0eY.js → useDraftSessionChips-BdZ_B1gy.js} +1 -1
  76. package/build/renderer/desktop/overlay/index.html +2 -2
  77. package/build/renderer/index.html +3 -3
  78. package/build/server/app/renderer/auth/api.d.ts.map +1 -1
  79. package/build/server/app/renderer/auth/api.js +4 -1
  80. package/build/server/app/renderer/auth/api.js.map +1 -1
  81. package/build/server/app/renderer/providerCatalogClient.d.ts.map +1 -1
  82. package/build/server/app/renderer/providerCatalogClient.js +34 -12
  83. package/build/server/app/renderer/providerCatalogClient.js.map +1 -1
  84. package/build/server/app/renderer/providerClientInvalidation.d.ts +6 -0
  85. package/build/server/app/renderer/providerClientInvalidation.d.ts.map +1 -0
  86. package/build/server/app/renderer/providerClientInvalidation.js +12 -0
  87. package/build/server/app/renderer/providerClientInvalidation.js.map +1 -0
  88. package/build/server/app/renderer/providerReadLoop.d.ts +5 -0
  89. package/build/server/app/renderer/providerReadLoop.d.ts.map +1 -0
  90. package/build/server/app/renderer/providerReadLoop.js +52 -0
  91. package/build/server/app/renderer/providerReadLoop.js.map +1 -0
  92. package/build/server/app/renderer/providerRegistryClient.d.ts +3 -2
  93. package/build/server/app/renderer/providerRegistryClient.d.ts.map +1 -1
  94. package/build/server/app/renderer/providerRegistryClient.js +51 -53
  95. package/build/server/app/renderer/providerRegistryClient.js.map +1 -1
  96. package/build/server/app/server/appPackageRoutes.d.ts +2 -0
  97. package/build/server/app/server/appPackageRoutes.d.ts.map +1 -1
  98. package/build/server/app/server/appPackageRoutes.js +105 -0
  99. package/build/server/app/server/appPackageRoutes.js.map +1 -1
  100. package/build/server/app/server/authGatePolicy.js +14 -1
  101. package/build/server/app/server/authGatePolicy.js.map +1 -1
  102. package/build/server/app/server/contracts.d.ts +15 -0
  103. package/build/server/app/server/contracts.d.ts.map +1 -1
  104. package/build/server/app/server/dependencies.d.ts.map +1 -1
  105. package/build/server/app/server/dependencies.js +42 -1
  106. package/build/server/app/server/dependencies.js.map +1 -1
  107. package/build/server/app/server/goldenPathStartupResume.d.ts +55 -0
  108. package/build/server/app/server/goldenPathStartupResume.d.ts.map +1 -0
  109. package/build/server/app/server/goldenPathStartupResume.js +109 -0
  110. package/build/server/app/server/goldenPathStartupResume.js.map +1 -0
  111. package/build/server/app/server/platformSetupRoutes.d.ts.map +1 -1
  112. package/build/server/app/server/platformSetupRoutes.js +1 -13
  113. package/build/server/app/server/platformSetupRoutes.js.map +1 -1
  114. package/build/server/app/server/polling.d.ts.map +1 -1
  115. package/build/server/app/server/polling.js +2 -0
  116. package/build/server/app/server/polling.js.map +1 -1
  117. package/build/server/app/server/requestRouter.d.ts.map +1 -1
  118. package/build/server/app/server/requestRouter.js +30 -0
  119. package/build/server/app/server/requestRouter.js.map +1 -1
  120. package/build/server/app/server/runtimeSurfaceProxy.d.ts.map +1 -1
  121. package/build/server/app/server/runtimeSurfaceProxy.js +4 -2
  122. package/build/server/app/server/runtimeSurfaceProxy.js.map +1 -1
  123. package/build/server/app/server/startupRecovery.d.ts.map +1 -1
  124. package/build/server/app/server/startupRecovery.js +5 -0
  125. package/build/server/app/server/startupRecovery.js.map +1 -1
  126. package/build/server/app/server/subscribeRoutes.d.ts.map +1 -1
  127. package/build/server/app/server/subscribeRoutes.js +5 -3
  128. package/build/server/app/server/subscribeRoutes.js.map +1 -1
  129. package/build/server/app/server/telegramCommandSurface.d.ts +29 -0
  130. package/build/server/app/server/telegramCommandSurface.d.ts.map +1 -0
  131. package/build/server/app/server/telegramCommandSurface.js +123 -0
  132. package/build/server/app/server/telegramCommandSurface.js.map +1 -0
  133. package/build/server/app/server/transportWorkGoldenPath.d.ts +82 -0
  134. package/build/server/app/server/transportWorkGoldenPath.d.ts.map +1 -0
  135. package/build/server/app/server/transportWorkGoldenPath.js +307 -0
  136. package/build/server/app/server/transportWorkGoldenPath.js.map +1 -0
  137. package/build/server/config.d.ts +21 -0
  138. package/build/server/config.d.ts.map +1 -1
  139. package/build/server/config.js +12 -0
  140. package/build/server/config.js.map +1 -1
  141. package/build/server/design/components/providerModelFieldsSupport.d.ts +5 -24
  142. package/build/server/design/components/providerModelFieldsSupport.d.ts.map +1 -1
  143. package/build/server/design/components/providerModelFieldsSupport.js +65 -70
  144. package/build/server/design/components/providerModelFieldsSupport.js.map +1 -1
  145. package/build/server/design/components/useProviderCatalogState.d.ts +2 -2
  146. package/build/server/design/components/useProviderCatalogState.d.ts.map +1 -1
  147. package/build/server/design/components/useProviderCatalogState.js +71 -151
  148. package/build/server/design/components/useProviderCatalogState.js.map +1 -1
  149. package/build/server/design/components/useProviderModelFieldActions.js +2 -2
  150. package/build/server/design/components/useProviderModelFieldActions.js.map +1 -1
  151. package/build/server/design/components/useProviderRegistryState.d.ts +1 -7
  152. package/build/server/design/components/useProviderRegistryState.d.ts.map +1 -1
  153. package/build/server/design/components/useProviderRegistryState.js +41 -104
  154. package/build/server/design/components/useProviderRegistryState.js.map +1 -1
  155. package/build/server/design/components/useProviderTargetReconciliation.d.ts +1 -0
  156. package/build/server/design/components/useProviderTargetReconciliation.d.ts.map +1 -1
  157. package/build/server/design/components/useProviderTargetReconciliation.js +3 -2
  158. package/build/server/design/components/useProviderTargetReconciliation.js.map +1 -1
  159. package/build/server/index.js +4 -0
  160. package/build/server/index.js.map +1 -1
  161. package/build/server/platform/apps/packageInstaller.d.ts +19 -0
  162. package/build/server/platform/apps/packageInstaller.d.ts.map +1 -0
  163. package/build/server/platform/apps/packageInstaller.js +92 -0
  164. package/build/server/platform/apps/packageInstaller.js.map +1 -0
  165. package/build/server/platform/apps/registry.d.ts +6 -0
  166. package/build/server/platform/apps/registry.d.ts.map +1 -1
  167. package/build/server/platform/apps/registry.js +24 -0
  168. package/build/server/platform/apps/registry.js.map +1 -1
  169. package/build/server/platform/apps/renderer.d.ts +6 -0
  170. package/build/server/platform/apps/renderer.d.ts.map +1 -0
  171. package/build/server/platform/apps/renderer.js +18 -0
  172. package/build/server/platform/apps/renderer.js.map +1 -0
  173. package/build/server/platform/orchestration/entitySubscriptions/channel.d.ts +2 -1
  174. package/build/server/platform/orchestration/entitySubscriptions/channel.d.ts.map +1 -1
  175. package/build/server/platform/orchestration/entitySubscriptions/channel.js +3 -18
  176. package/build/server/platform/orchestration/entitySubscriptions/channel.js.map +1 -1
  177. package/build/server/platform/orchestration/entitySubscriptions/index.d.ts +1 -0
  178. package/build/server/platform/orchestration/entitySubscriptions/index.d.ts.map +1 -1
  179. package/build/server/platform/orchestration/entitySubscriptions/index.js.map +1 -1
  180. package/build/server/platform/runtime/deliveryClient.d.ts +111 -0
  181. package/build/server/platform/runtime/deliveryClient.d.ts.map +1 -0
  182. package/build/server/platform/runtime/deliveryClient.js +289 -0
  183. package/build/server/platform/runtime/deliveryClient.js.map +1 -0
  184. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.d.ts +1 -0
  185. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.d.ts.map +1 -1
  186. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.js +10 -0
  187. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.js.map +1 -1
  188. package/build/server/platform/supervision/runtimeBoundary.d.ts +11 -1
  189. package/build/server/platform/supervision/runtimeBoundary.d.ts.map +1 -1
  190. package/build/server/platform/supervision/runtimeBoundary.js +2 -2
  191. package/build/server/platform/supervision/runtimeBoundary.js.map +1 -1
  192. package/build/server/platform/transports/telegram/bridge.d.ts +18 -0
  193. package/build/server/platform/transports/telegram/bridge.d.ts.map +1 -1
  194. package/build/server/platform/transports/telegram/bridge.js +176 -0
  195. package/build/server/platform/transports/telegram/bridge.js.map +1 -1
  196. package/build/server/platform/transports/telegram/commandPort.d.ts +40 -0
  197. package/build/server/platform/transports/telegram/commandPort.d.ts.map +1 -0
  198. package/build/server/platform/transports/telegram/commandPort.js +17 -0
  199. package/build/server/platform/transports/telegram/commandPort.js.map +1 -0
  200. package/build/server/platform/transports/telegram/commandRouter.d.ts +22 -0
  201. package/build/server/platform/transports/telegram/commandRouter.d.ts.map +1 -1
  202. package/build/server/platform/transports/telegram/commandRouter.js.map +1 -1
  203. package/build/server/platform/transports/telegram/commands/index.d.ts.map +1 -1
  204. package/build/server/platform/transports/telegram/commands/index.js +38 -0
  205. package/build/server/platform/transports/telegram/commands/index.js.map +1 -1
  206. package/build/server/platform/transports/telegram/ingressDispatch.d.ts +56 -0
  207. package/build/server/platform/transports/telegram/ingressDispatch.d.ts.map +1 -0
  208. package/build/server/platform/transports/telegram/ingressDispatch.js +93 -0
  209. package/build/server/platform/transports/telegram/ingressDispatch.js.map +1 -0
  210. package/build/server/platform/transports/telegram/polling.d.ts +34 -0
  211. package/build/server/platform/transports/telegram/polling.d.ts.map +1 -1
  212. package/build/server/platform/transports/telegram/polling.js +86 -9
  213. package/build/server/platform/transports/telegram/polling.js.map +1 -1
  214. package/build/server/platform/transports/telegram/relay/index.d.ts +3 -0
  215. package/build/server/platform/transports/telegram/relay/index.d.ts.map +1 -1
  216. package/build/server/platform/transports/telegram/relay/index.js +5 -1
  217. package/build/server/platform/transports/telegram/relay/index.js.map +1 -1
  218. package/build/server/platform/transports/telegram/relay/ingress.d.ts +2 -0
  219. package/build/server/platform/transports/telegram/relay/ingress.d.ts.map +1 -1
  220. package/build/server/platform/transports/telegram/relay/ingress.js +1 -1
  221. package/build/server/platform/transports/telegram/relay/ingress.js.map +1 -1
  222. package/build/server/platform/transports/work-delivery/actionTokens.d.ts +66 -0
  223. package/build/server/platform/transports/work-delivery/actionTokens.d.ts.map +1 -0
  224. package/build/server/platform/transports/work-delivery/actionTokens.js +145 -0
  225. package/build/server/platform/transports/work-delivery/actionTokens.js.map +1 -0
  226. package/build/server/platform/transports/work-delivery/contracts.d.ts +172 -0
  227. package/build/server/platform/transports/work-delivery/contracts.d.ts.map +1 -0
  228. package/build/server/platform/transports/work-delivery/contracts.js +26 -0
  229. package/build/server/platform/transports/work-delivery/contracts.js.map +1 -0
  230. package/build/server/platform/transports/work-delivery/deliveryGates.d.ts +32 -0
  231. package/build/server/platform/transports/work-delivery/deliveryGates.d.ts.map +1 -0
  232. package/build/server/platform/transports/work-delivery/deliveryGates.js +45 -0
  233. package/build/server/platform/transports/work-delivery/deliveryGates.js.map +1 -0
  234. package/build/server/platform/transports/work-delivery/inboundClassification.d.ts +31 -0
  235. package/build/server/platform/transports/work-delivery/inboundClassification.d.ts.map +1 -0
  236. package/build/server/platform/transports/work-delivery/inboundClassification.js +52 -0
  237. package/build/server/platform/transports/work-delivery/inboundClassification.js.map +1 -0
  238. package/build/server/platform/transports/work-delivery/outbox.d.ts +84 -0
  239. package/build/server/platform/transports/work-delivery/outbox.d.ts.map +1 -0
  240. package/build/server/platform/transports/work-delivery/outbox.js +270 -0
  241. package/build/server/platform/transports/work-delivery/outbox.js.map +1 -0
  242. package/build/server/platform/transports/work-delivery/permissionEnvelope.d.ts +57 -0
  243. package/build/server/platform/transports/work-delivery/permissionEnvelope.d.ts.map +1 -0
  244. package/build/server/platform/transports/work-delivery/permissionEnvelope.js +74 -0
  245. package/build/server/platform/transports/work-delivery/permissionEnvelope.js.map +1 -0
  246. package/build/server/platform/transports/work-delivery/port.d.ts +60 -0
  247. package/build/server/platform/transports/work-delivery/port.d.ts.map +1 -0
  248. package/build/server/platform/transports/work-delivery/port.js +15 -0
  249. package/build/server/platform/transports/work-delivery/port.js.map +1 -0
  250. package/build/server/platform/transports/work-delivery/proposal.d.ts +31 -0
  251. package/build/server/platform/transports/work-delivery/proposal.d.ts.map +1 -0
  252. package/build/server/platform/transports/work-delivery/proposal.js +59 -0
  253. package/build/server/platform/transports/work-delivery/proposal.js.map +1 -0
  254. package/build/server/platform/transports/work-delivery/readiness.d.ts +61 -0
  255. package/build/server/platform/transports/work-delivery/readiness.d.ts.map +1 -0
  256. package/build/server/platform/transports/work-delivery/readiness.js +123 -0
  257. package/build/server/platform/transports/work-delivery/readiness.js.map +1 -0
  258. package/build/server/platform/transports/work-delivery/stageProjection.d.ts +43 -0
  259. package/build/server/platform/transports/work-delivery/stageProjection.d.ts.map +1 -0
  260. package/build/server/platform/transports/work-delivery/stageProjection.js +132 -0
  261. package/build/server/platform/transports/work-delivery/stageProjection.js.map +1 -0
  262. package/build/server/platform/transports/work-delivery/stateStore.d.ts +21 -0
  263. package/build/server/platform/transports/work-delivery/stateStore.d.ts.map +1 -0
  264. package/build/server/platform/transports/work-delivery/stateStore.js +193 -0
  265. package/build/server/platform/transports/work-delivery/stateStore.js.map +1 -0
  266. package/build/server/platform/transports/work-delivery/telemetry.d.ts +49 -0
  267. package/build/server/platform/transports/work-delivery/telemetry.d.ts.map +1 -0
  268. package/build/server/platform/transports/work-delivery/telemetry.js +80 -0
  269. package/build/server/platform/transports/work-delivery/telemetry.js.map +1 -0
  270. package/build/server/products/chat/api/contracts.d.ts +10 -0
  271. package/build/server/products/chat/api/contracts.d.ts.map +1 -1
  272. package/build/server/products/chat/api/resources/channelRoutes.d.ts.map +1 -1
  273. package/build/server/products/chat/api/resources/channelRoutes.js +27 -1
  274. package/build/server/products/chat/api/resources/channelRoutes.js.map +1 -1
  275. package/build/server/products/chat/api/routeSupport.d.ts +17 -1
  276. package/build/server/products/chat/api/routeSupport.d.ts.map +1 -1
  277. package/build/server/products/chat/api/routeSupport.js +27 -4
  278. package/build/server/products/chat/api/routeSupport.js.map +1 -1
  279. package/build/server/products/chat/api/setupRoutes.d.ts.map +1 -1
  280. package/build/server/products/chat/api/setupRoutes.js +23 -8
  281. package/build/server/products/chat/api/setupRoutes.js.map +1 -1
  282. package/build/server/products/chat/state/model/channelExecutionTargets.d.ts +15 -0
  283. package/build/server/products/chat/state/model/channelExecutionTargets.d.ts.map +1 -1
  284. package/build/server/products/chat/state/model/channelExecutionTargets.js +25 -0
  285. package/build/server/products/chat/state/model/channelExecutionTargets.js.map +1 -1
  286. package/build/server/products/chat/state/model/index.d.ts +1 -1
  287. package/build/server/products/chat/state/model/index.d.ts.map +1 -1
  288. package/build/server/products/chat/state/model/index.js +1 -1
  289. package/build/server/products/chat/state/model/index.js.map +1 -1
  290. package/build/server/products/chat/state/model/readModels.d.ts +1 -0
  291. package/build/server/products/chat/state/model/readModels.d.ts.map +1 -1
  292. package/build/server/products/chat/state/model/readModels.js +2 -1
  293. package/build/server/products/chat/state/model/readModels.js.map +1 -1
  294. package/build/server/products/code/api/relayRoutes.d.ts.map +1 -1
  295. package/build/server/products/code/api/relayRoutes.js +36 -7
  296. package/build/server/products/code/api/relayRoutes.js.map +1 -1
  297. package/build/server/products/code/state/relayState.d.ts +2 -1
  298. package/build/server/products/code/state/relayState.d.ts.map +1 -1
  299. package/build/server/products/code/state/relayState.js +7 -7
  300. package/build/server/products/code/state/relayState.js.map +1 -1
  301. package/build/server/products/shared/api/workspaceContracts.d.ts +5 -0
  302. package/build/server/products/shared/api/workspaceContracts.d.ts.map +1 -1
  303. package/build/server/products/shared/renderer/api/appShell.d.ts +1 -0
  304. package/build/server/products/shared/renderer/api/appShell.d.ts.map +1 -1
  305. package/build/server/products/shared/renderer/api/appShell.js +9 -0
  306. package/build/server/products/shared/renderer/api/appShell.js.map +1 -1
  307. package/build/server/products/work/api/goldenPathProjection.d.ts +156 -0
  308. package/build/server/products/work/api/goldenPathProjection.d.ts.map +1 -0
  309. package/build/server/products/work/api/goldenPathProjection.js +252 -0
  310. package/build/server/products/work/api/goldenPathProjection.js.map +1 -0
  311. package/build/server/products/work/api/index.d.ts +54 -1
  312. package/build/server/products/work/api/index.d.ts.map +1 -1
  313. package/build/server/products/work/api/index.js +182 -4
  314. package/build/server/products/work/api/index.js.map +1 -1
  315. package/build/server/products/work/api/projection.d.ts +7 -1
  316. package/build/server/products/work/api/projection.d.ts.map +1 -1
  317. package/build/server/products/work/api/projection.js +7 -1
  318. package/build/server/products/work/api/projection.js.map +1 -1
  319. package/build/server/products/work/shared/apiPaths.d.ts +8 -0
  320. package/build/server/products/work/shared/apiPaths.d.ts.map +1 -1
  321. package/build/server/products/work/shared/apiPaths.js +8 -0
  322. package/build/server/products/work/shared/apiPaths.js.map +1 -1
  323. package/build/server/products/work/shared/workGoldenPathMessages.d.ts +83 -0
  324. package/build/server/products/work/shared/workGoldenPathMessages.d.ts.map +1 -0
  325. package/build/server/products/work/shared/workGoldenPathMessages.js +211 -0
  326. package/build/server/products/work/shared/workGoldenPathMessages.js.map +1 -0
  327. package/build/server/products/work/shared/workGoldenPathMetadata.d.ts +45 -0
  328. package/build/server/products/work/shared/workGoldenPathMetadata.d.ts.map +1 -0
  329. package/build/server/products/work/shared/workGoldenPathMetadata.js +122 -0
  330. package/build/server/products/work/shared/workGoldenPathMetadata.js.map +1 -0
  331. package/build/server/products/work/state/workCompletionEvidence.d.ts +42 -0
  332. package/build/server/products/work/state/workCompletionEvidence.d.ts.map +1 -0
  333. package/build/server/products/work/state/workCompletionEvidence.js +59 -0
  334. package/build/server/products/work/state/workCompletionEvidence.js.map +1 -0
  335. package/build/server/products/work/state/workExecutionTaskDelegate.d.ts +16 -0
  336. package/build/server/products/work/state/workExecutionTaskDelegate.d.ts.map +1 -1
  337. package/build/server/products/work/state/workExecutionTaskDelegate.js +91 -68
  338. package/build/server/products/work/state/workExecutionTaskDelegate.js.map +1 -1
  339. package/build/server/products/work/state/workGoldenPathAdmission.d.ts +78 -0
  340. package/build/server/products/work/state/workGoldenPathAdmission.d.ts.map +1 -0
  341. package/build/server/products/work/state/workGoldenPathAdmission.js +249 -0
  342. package/build/server/products/work/state/workGoldenPathAdmission.js.map +1 -0
  343. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.d.ts +33 -0
  344. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.d.ts.map +1 -0
  345. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.js +161 -0
  346. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.js.map +1 -0
  347. package/build/server/products/work/state/workGoldenPathIntake.d.ts +34 -0
  348. package/build/server/products/work/state/workGoldenPathIntake.d.ts.map +1 -0
  349. package/build/server/products/work/state/workGoldenPathIntake.js +50 -0
  350. package/build/server/products/work/state/workGoldenPathIntake.js.map +1 -0
  351. package/build/server/products/work/state/workGoldenPathLifecycle.d.ts +44 -0
  352. package/build/server/products/work/state/workGoldenPathLifecycle.d.ts.map +1 -0
  353. package/build/server/products/work/state/workGoldenPathLifecycle.js +146 -0
  354. package/build/server/products/work/state/workGoldenPathLifecycle.js.map +1 -0
  355. package/build/server/products/work/state/workGoldenPathPublish.d.ts +84 -0
  356. package/build/server/products/work/state/workGoldenPathPublish.d.ts.map +1 -0
  357. package/build/server/products/work/state/workGoldenPathPublish.js +488 -0
  358. package/build/server/products/work/state/workGoldenPathPublish.js.map +1 -0
  359. package/build/server/products/work/state/workGoldenPathRunner.d.ts +121 -0
  360. package/build/server/products/work/state/workGoldenPathRunner.d.ts.map +1 -0
  361. package/build/server/products/work/state/workGoldenPathRunner.js +447 -0
  362. package/build/server/products/work/state/workGoldenPathRunner.js.map +1 -0
  363. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.d.ts +74 -0
  364. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.d.ts.map +1 -0
  365. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.js +239 -0
  366. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.js.map +1 -0
  367. package/build/server/products/work/state/workGoldenPathService.d.ts +152 -0
  368. package/build/server/products/work/state/workGoldenPathService.d.ts.map +1 -0
  369. package/build/server/products/work/state/workGoldenPathService.js +1057 -0
  370. package/build/server/products/work/state/workGoldenPathService.js.map +1 -0
  371. package/build/server/products/work/state/workGoldenPathTelegramPort.d.ts +87 -0
  372. package/build/server/products/work/state/workGoldenPathTelegramPort.d.ts.map +1 -0
  373. package/build/server/products/work/state/workGoldenPathTelegramPort.js +220 -0
  374. package/build/server/products/work/state/workGoldenPathTelegramPort.js.map +1 -0
  375. package/build/server/runtime/client.d.ts +13 -0
  376. package/build/server/runtime/client.d.ts.map +1 -1
  377. package/build/server/runtime/client.js +44 -1
  378. package/build/server/runtime/client.js.map +1 -1
  379. package/build/server/runtime/setup.d.ts +14 -4
  380. package/build/server/runtime/setup.d.ts.map +1 -1
  381. package/build/server/runtime/setup.js +17 -19
  382. package/build/server/runtime/setup.js.map +1 -1
  383. package/build/server/runtime/usageSnapshot.d.ts +3 -0
  384. package/build/server/runtime/usageSnapshot.d.ts.map +1 -0
  385. package/build/server/runtime/usageSnapshot.js +69 -0
  386. package/build/server/runtime/usageSnapshot.js.map +1 -0
  387. package/build/server/server/routes/providerCapabilityBootstrap.d.ts +69 -0
  388. package/build/server/server/routes/providerCapabilityBootstrap.d.ts.map +1 -0
  389. package/build/server/server/routes/providerCapabilityBootstrap.js +165 -0
  390. package/build/server/server/routes/providerCapabilityBootstrap.js.map +1 -0
  391. package/build/server/server/routes/providers.d.ts.map +1 -1
  392. package/build/server/server/routes/providers.js +133 -131
  393. package/build/server/server/routes/providers.js.map +1 -1
  394. package/build/server/server/routes/telegram.d.ts +9 -0
  395. package/build/server/server/routes/telegram.d.ts.map +1 -1
  396. package/build/server/server/routes/telegram.js +79 -72
  397. package/build/server/server/routes/telegram.js.map +1 -1
  398. package/build/server/shared/catsAppManifest.d.ts +3 -1
  399. package/build/server/shared/catsAppManifest.d.ts.map +1 -1
  400. package/build/server/shared/catsAppManifest.js +2 -0
  401. package/build/server/shared/catsAppManifest.js.map +1 -1
  402. package/build/server/shared/desktopRecoveryBridge.d.ts +2 -1
  403. package/build/server/shared/desktopRecoveryBridge.d.ts.map +1 -1
  404. package/build/server/shared/desktopRecoveryBridge.js.map +1 -1
  405. package/build/server/shared/executionLabel.d.ts.map +1 -1
  406. package/build/server/shared/executionLabel.js +8 -1
  407. package/build/server/shared/executionLabel.js.map +1 -1
  408. package/build/server/shared/i18n/catalogs/en.d.ts.map +1 -1
  409. package/build/server/shared/i18n/catalogs/en.js +198 -3
  410. package/build/server/shared/i18n/catalogs/en.js.map +1 -1
  411. package/build/server/shared/i18n/catalogs/zh-TW.d.ts.map +1 -1
  412. package/build/server/shared/i18n/catalogs/zh-TW.js +197 -3
  413. package/build/server/shared/i18n/catalogs/zh-TW.js.map +1 -1
  414. package/build/server/shared/i18n/index.d.ts +192 -0
  415. package/build/server/shared/i18n/index.d.ts.map +1 -1
  416. package/build/server/shared/i18n/messageKeys.d.ts +192 -0
  417. package/build/server/shared/i18n/messageKeys.d.ts.map +1 -1
  418. package/build/server/shared/i18n/messageKeys.js +192 -0
  419. package/build/server/shared/i18n/messageKeys.js.map +1 -1
  420. package/build/server/shared/platformSetupOperation.d.ts +2 -0
  421. package/build/server/shared/platformSetupOperation.d.ts.map +1 -0
  422. package/build/server/shared/platformSetupOperation.js +9 -0
  423. package/build/server/shared/platformSetupOperation.js.map +1 -0
  424. package/build/server/shared/providerCatalog.d.ts +5 -2
  425. package/build/server/shared/providerCatalog.d.ts.map +1 -1
  426. package/build/server/shared/providerCatalog.js +6 -0
  427. package/build/server/shared/providerCatalog.js.map +1 -1
  428. package/build/server/shared/providerCatalogData.d.ts +154 -77
  429. package/build/server/shared/providerCatalogData.d.ts.map +1 -1
  430. package/build/server/shared/providerCatalogData.js +73 -36
  431. package/build/server/shared/providerCatalogData.js.map +1 -1
  432. package/build/server/shared/providerCatalogInstances.d.ts.map +1 -1
  433. package/build/server/shared/providerCatalogInstances.js +3 -0
  434. package/build/server/shared/providerCatalogInstances.js.map +1 -1
  435. package/build/server/shared/providerModelLabelRegistry.d.ts +29 -0
  436. package/build/server/shared/providerModelLabelRegistry.d.ts.map +1 -0
  437. package/build/server/shared/providerModelLabelRegistry.js +49 -0
  438. package/build/server/shared/providerModelLabelRegistry.js.map +1 -0
  439. package/build/server/shared/providerRegistryWarnings.d.ts +4 -0
  440. package/build/server/shared/providerRegistryWarnings.d.ts.map +1 -1
  441. package/build/server/shared/providerRegistryWarnings.js +7 -0
  442. package/build/server/shared/providerRegistryWarnings.js.map +1 -1
  443. package/build/server/shared/providerSelection.d.ts.map +1 -1
  444. package/build/server/shared/providerSelection.js +10 -13
  445. package/build/server/shared/providerSelection.js.map +1 -1
  446. package/build/server/shared/runtimeSetup.d.ts +17 -4
  447. package/build/server/shared/runtimeSetup.d.ts.map +1 -1
  448. package/build/server/shared/runtimeStatusPresentation.js +1 -1
  449. package/build/server/shared/runtimeStatusPresentation.js.map +1 -1
  450. package/package.json +32 -3
  451. package/packages/app-sdk/browser.d.ts +51 -0
  452. package/packages/app-sdk/browser.js +48 -0
  453. package/packages/app-sdk/package.d.ts +14 -0
  454. package/packages/app-sdk/package.js +131 -0
  455. package/packages/app-sdk/package.json +7 -0
  456. package/packages/provider-setup/manager.d.ts +79 -0
  457. package/packages/provider-setup/manager.js +441 -0
  458. package/scripts/README.md +66 -26
  459. package/scripts/build-desktop-installer.mjs +139 -16
  460. package/scripts/build-test-ui.mjs +1 -1
  461. package/scripts/bundle-server.mjs +23 -10
  462. package/scripts/linux/build-desktop-package.sh +6 -6
  463. package/scripts/linux/install-antigravity.sh +0 -0
  464. package/scripts/linux/install-devin.sh +0 -0
  465. package/scripts/linux/install-github-cli.sh +5 -0
  466. package/scripts/linux/install-meta-cli.sh +8 -0
  467. package/scripts/linux/install-node.sh +9 -3
  468. package/scripts/linux/node-cli-common.sh +87 -48
  469. package/scripts/linux/provider-cli-common.sh +178 -130
  470. package/scripts/linux/provider-version-common.sh +247 -0
  471. package/scripts/linux/sync-agent-skills.sh +27 -5
  472. package/scripts/linux/test-linux-package-smoke.sh +6 -3
  473. package/scripts/linux/upgrade-cli-tools.sh +1 -1
  474. package/scripts/linux/verified-npm-update.sh +20 -0
  475. package/scripts/macos/build-desktop-package.sh +5 -5
  476. package/scripts/macos/install-antigravity.sh +0 -0
  477. package/scripts/macos/install-devin.sh +0 -0
  478. package/scripts/macos/install-github-cli.sh +5 -0
  479. package/scripts/macos/install-meta-cli.sh +8 -0
  480. package/scripts/macos/install-node.sh +9 -3
  481. package/scripts/macos/node-cli-common.sh +87 -48
  482. package/scripts/macos/provider-cli-common.sh +178 -130
  483. package/scripts/macos/provider-version-common.sh +247 -0
  484. package/scripts/macos/sync-agent-skills.sh +27 -5
  485. package/scripts/macos/test-macos-package-smoke.sh +6 -3
  486. package/scripts/macos/upgrade-cli-tools.sh +1 -1
  487. package/scripts/macos/verified-npm-update.sh +20 -0
  488. package/scripts/package-desktop.mjs +15 -2
  489. package/scripts/testing/check-usage-app.mts +266 -0
  490. package/scripts/testing/conversation-navigation-smoke-electron.cjs +134 -0
  491. package/scripts/testing/conversation-navigation-smoke-renderer.tsx +102 -0
  492. package/scripts/testing/conversation-navigation-smoke.mjs +67 -0
  493. package/scripts/testing/usage-app-smoke-electron.cjs +10 -0
  494. package/scripts/testing/usage-app-smoke-renderer.tsx +8 -0
  495. package/scripts/validate-release-assets.mjs +4 -1
  496. package/scripts/verify-desktop-app-bundle.mjs +108 -0
  497. package/scripts/windows/Build-DesktopPackage.ps1 +9 -6
  498. package/scripts/windows/Install-Antigravity.ps1 +26 -3
  499. package/scripts/windows/Install-ClaudeCode.ps1 +25 -7
  500. package/scripts/windows/Install-CursorAgent.ps1 +45 -30
  501. package/scripts/windows/Install-Devin.ps1 +16 -47
  502. package/scripts/windows/Install-GitHubCli.ps1 +4 -0
  503. package/scripts/windows/Install-Goose.ps1 +18 -1
  504. package/scripts/windows/Install-Grok.ps1 +14 -1
  505. package/scripts/windows/Install-Junie.ps1 +32 -11
  506. package/scripts/windows/Install-KiroCli.ps1 +37 -13
  507. package/scripts/windows/Install-MetaCli.ps1 +463 -0
  508. package/scripts/windows/Install-Node.ps1 +6 -1
  509. package/scripts/windows/Install-Ollama.ps1 +4 -1
  510. package/scripts/windows/Setup-NodeGlobalPrefix.ps1 +10 -0
  511. package/scripts/windows/Sync-AgentSkills.ps1 +29 -6
  512. package/scripts/windows/Test-WindowsInstallerSmoke.ps1 +4 -1
  513. package/scripts/windows/_HiddenProcess.ps1 +14 -3
  514. package/scripts/windows/_NativeInstallerSupport.ps1 +308 -0
  515. package/scripts/windows/_NpmCliInstaller.ps1 +35 -14
  516. package/scripts/windows/_PackagedUninstall.ps1 +9 -1
  517. package/scripts/windows/_VerifiedNpmUpdate.ps1 +25 -0
  518. package/build/desktop/updateNotifications.d.ts +0 -64
  519. package/build/desktop/updateNotifications.d.ts.map +0 -1
  520. package/build/desktop/updateNotifications.js +0 -143
  521. package/build/desktop/updateNotifications.js.map +0 -1
  522. package/build/renderer/assets/ActiveSessionPermissionChip-DImsuR9T.js +0 -1
  523. package/build/renderer/assets/App-BfOvMP2m.js +0 -1
  524. package/build/renderer/assets/App-DGwkRFZl.css +0 -1
  525. package/build/renderer/assets/App-DWd7I3Z2.js +0 -2
  526. package/build/renderer/assets/WorkspaceAppRoutes-CrbTA9En.js +0 -1
  527. package/build/renderer/assets/app-BTww3Hl4.js +0 -43
  528. package/build/renderer/assets/app-CPxWQwLA.css +0 -1
  529. package/build/renderer/assets/conversationSidebarRecentEntries-QuaOPxCb.js +0 -6
  530. package/build/server/app/renderer/settings/runtimeLifecycleHelpers.d.ts +0 -48
  531. package/build/server/app/renderer/settings/runtimeLifecycleHelpers.d.ts.map +0 -1
  532. package/build/server/app/renderer/settings/runtimeLifecycleHelpers.js +0 -535
  533. package/build/server/app/renderer/settings/runtimeLifecycleHelpers.js.map +0 -1
  534. package/build/server/design/components/useProviderRegistryAutoRecheck.d.ts +0 -13
  535. package/build/server/design/components/useProviderRegistryAutoRecheck.d.ts.map +0 -1
  536. package/build/server/design/components/useProviderRegistryAutoRecheck.js +0 -63
  537. package/build/server/design/components/useProviderRegistryAutoRecheck.js.map +0 -1
  538. package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.d.ts +0 -19
  539. package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.d.ts.map +0 -1
  540. package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.js +0 -53
  541. package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.js.map +0 -1
  542. package/build/server/products/shared/renderer/api/providers.d.ts +0 -17
  543. package/build/server/products/shared/renderer/api/providers.d.ts.map +0 -1
  544. package/build/server/products/shared/renderer/api/providers.js +0 -50
  545. package/build/server/products/shared/renderer/api/providers.js.map +0 -1
  546. package/scripts/linux/install-aider.sh +0 -8
  547. package/scripts/macos/install-aider.sh +0 -8
  548. package/scripts/windows/Install-Aider.ps1 +0 -368
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env node
2
+ // Verify the actual unpacked installer resources and offline App activation.
3
+ // Usage: node scripts/verify-desktop-app-bundle.mjs --release-root release --expect-lock config/desktop-apps.lock.json
4
+ // Alternatively pass --resources <resources-directory>. Uses only a temporary registry;
5
+ // does not start provider CLIs, download Apps, or touch the user's installed state.
6
+ import assert from 'node:assert/strict';
7
+ import { access, mkdtemp, readFile, readdir, rm } from 'node:fs/promises';
8
+ import { tmpdir } from 'node:os';
9
+ import path from 'node:path';
10
+ import { fileURLToPath, pathToFileURL } from 'node:url';
11
+ import { createRequire } from 'node:module';
12
+ import { resolveDesktopHostConfig } from '../build/desktop/config.js';
13
+ import { buildManagedServiceSpecs } from '../build/desktop/processSupervisor.js';
14
+ import { installBundledApps } from '../build/server/platform/apps/packageInstaller.js';
15
+ import { FileCatsAppRegistry } from '../build/server/platform/apps/registry.js';
16
+ import { readAppRenderer } from '../build/server/platform/apps/renderer.js';
17
+
18
+ const pins = (apps) => apps.map(({ id, version, sha256 }) => ({ id, version, sha256 }));
19
+
20
+ export async function verifyDesktopAppBundle(resourcesRoot, expectedLockPath) {
21
+ const root = await mkdtemp(path.join(tmpdir(), 'cats-packaged-app-check-'));
22
+ try {
23
+ const config = resolveDesktopHostConfig({
24
+ env: {}, packaged: true, resourcesPath: path.resolve(resourcesRoot),
25
+ userDataDir: path.join(root, 'desktop'), catsHomeDir: path.join(root, 'cats-home'),
26
+ });
27
+ const [, platform] = buildManagedServiceSpecs(config, {}, process.platform);
28
+ const sdk = await import(pathToFileURL(path.join(config.packageRoot, 'packages/app-sdk/package.js')).href);
29
+ const expected = sdk.parseAppLock(JSON.parse(await readFile(expectedLockPath, 'utf8')));
30
+ const bundledLock = platform.env.CATS_APP_BUNDLE_PATH;
31
+ assert.equal(bundledLock, path.join(config.packageRoot, 'official-apps/bundle.lock.json'));
32
+ assert.equal(config.paths.platformBundledConfigDir, path.join(config.packageRoot, 'config'));
33
+ await access(config.paths.appEntryScript);
34
+ await access(path.join(config.paths.platformBundledConfigDir, 'provider-capability-bootstrap.yaml.example'));
35
+ const bundled = sdk.parseAppLock(JSON.parse(await readFile(bundledLock, 'utf8')));
36
+ const plan = JSON.parse(await readFile(path.join(resourcesRoot, 'desktop-package-plan.json'), 'utf8'));
37
+ assert.deepEqual(pins(bundled.apps), pins(expected.apps), 'Installer must contain the selected exact App set');
38
+ assert.deepEqual(pins(plan.apps ?? []), pins(expected.apps), 'Packaging plan must retain the selected App set');
39
+ if (expected.apps.length > 0) {
40
+ assert.equal(createRequire(pathToFileURL(config.paths.appEntryScript)).resolve('#cats-app-package'),
41
+ path.join(config.packageRoot, 'packages/app-sdk/package.js'), 'Sidecar SDK alias must resolve to its shipped package');
42
+ if (plan.sidecarLayout?.app === 'bundle') {
43
+ const entry = await readFile(config.paths.appEntryScript, 'utf8');
44
+ assert.match(entry, /\bfrom\s+['"]#cats-app-package['"]/u,
45
+ 'Bundled sidecar must retain the SDK package import; inlining relocates browser.js');
46
+ }
47
+ }
48
+ assert.ok((await sdk.readBrowserSdk()).includes('getSnapshot'), 'Shipped browser SDK must be readable');
49
+ for (const app of bundled.apps) {
50
+ assert.equal(app.artifact, `${app.id}-${app.version}.catsapp`, 'Startup must use adjacent offline archives');
51
+ sdk.decodeAppPackage(await readFile(path.join(path.dirname(bundledLock), app.artifact)), app);
52
+ }
53
+ // Exercise the same installer invoked before the Platform HTTP server starts.
54
+ // These compiled modules come from this build; bytes and SDK above come from
55
+ // the actual installer resources, including bundled-sidecar builds.
56
+ await installBundledApps(config.paths.appStatePath, bundledLock);
57
+ await installBundledApps(config.paths.appStatePath, bundledLock);
58
+ const registry = new FileCatsAppRegistry({ registryPath: path.join(config.paths.platformDir, 'apps/registry.json') });
59
+ const installed = await registry.listInstalledApps();
60
+ assert.equal(installed.length, expected.apps.length);
61
+ for (const app of installed) {
62
+ assert.equal(app.enabled, true);
63
+ assert.equal(app.installState, 'enabled');
64
+ assert.equal(app.packageSource, 'desktop-bundle');
65
+ assert.ok(app.manifest.contributions.lobbyApps.length > 0);
66
+ assert.ok((await readAppRenderer(app)).html.includes('<head>'));
67
+ }
68
+ return { resources: path.resolve(resourcesRoot), apps: pins(bundled.apps), offlineActivation: true };
69
+ } finally {
70
+ await rm(root, { recursive: true, force: true });
71
+ }
72
+ }
73
+
74
+ async function findResources(directory, depth = 0) {
75
+ try {
76
+ await access(path.join(directory, 'desktop-package-plan.json'));
77
+ return [directory];
78
+ } catch { /* Look only through unpacked distribution directories below. */ }
79
+ if (depth >= 6) return [];
80
+ const entries = await readdir(directory, { withFileTypes: true });
81
+ const nested = await Promise.all(entries.filter((entry) => entry.isDirectory()
82
+ && !['node_modules', 'app-sidecar', 'cats-runtime'].includes(entry.name))
83
+ .map((entry) => findResources(path.join(directory, entry.name), depth + 1)));
84
+ return nested.flat();
85
+ }
86
+
87
+ async function main() {
88
+ const args = process.argv.slice(2);
89
+ if (args.includes('--help')) {
90
+ console.log('Usage: verify-desktop-app-bundle.mjs (--release-root <directory> | --resources <directory>) --expect-lock <lock>');
91
+ return;
92
+ }
93
+ const options = {};
94
+ for (let index = 0; index < args.length; index += 2) {
95
+ if (!['--resources', '--release-root', '--expect-lock'].includes(args[index])
96
+ || !args[index + 1] || args[index + 1].startsWith('--')) throw new Error('Invalid verifier arguments. Use --help.');
97
+ options[args[index]] = path.resolve(args[index + 1]);
98
+ }
99
+ assert.ok(options['--expect-lock'], '--expect-lock is required');
100
+ assert.ok(Boolean(options['--resources']) !== Boolean(options['--release-root']), 'Select resources or release-root');
101
+ const roots = options['--resources'] ? [options['--resources']] : await findResources(options['--release-root']);
102
+ assert.ok(roots.length > 0, 'No unpacked installer resources found');
103
+ for (const resources of roots) console.log(JSON.stringify(await verifyDesktopAppBundle(resources, options['--expect-lock']), null, 2));
104
+ }
105
+
106
+ if (path.resolve(process.argv[1] ?? '') === fileURLToPath(import.meta.url)) {
107
+ main().catch((error) => { console.error(error); process.exitCode = 1; });
108
+ }
@@ -13,6 +13,9 @@
13
13
  .PARAMETER OutputDir
14
14
  Optional override for the packaging output directory.
15
15
 
16
+ .PARAMETER AppsLock
17
+ App selection lock with exact IDs, versions and SHA-256 hashes.
18
+
16
19
  .EXAMPLE
17
20
  .\scripts\windows\Build-DesktopPackage.ps1 -Platform windows
18
21
  Build the staged Windows packaging outputs.
@@ -20,7 +23,8 @@
20
23
  param(
21
24
  [ValidateSet('all', 'windows', 'macos', 'linux')]
22
25
  [string]$Platform = 'all',
23
- [string]$OutputDir = ''
26
+ [string]$OutputDir = '',
27
+ [string]$AppsLock = ''
24
28
  )
25
29
 
26
30
  Set-StrictMode -Version Latest
@@ -34,11 +38,10 @@ try {
34
38
  if ($LASTEXITCODE -ne 0) {
35
39
  throw "npm run build failed with exit code $LASTEXITCODE"
36
40
  }
37
- if ($OutputDir) {
38
- node .\scripts\package-desktop.mjs --platform $Platform --output-dir $OutputDir
39
- } else {
40
- node .\scripts\package-desktop.mjs --platform $Platform
41
- }
41
+ $packageArguments = @('.\scripts\package-desktop.mjs', '--platform', $Platform)
42
+ if ($OutputDir) { $packageArguments += @('--output-dir', $OutputDir) }
43
+ if ($AppsLock) { $packageArguments += @('--apps-lock', $AppsLock) }
44
+ node @packageArguments
42
45
  if ($LASTEXITCODE -ne 0) {
43
46
  throw "desktop packaging failed with exit code $LASTEXITCODE"
44
47
  }
@@ -28,6 +28,7 @@ Set-StrictMode -Version Latest
28
28
  $ErrorActionPreference = 'Stop'
29
29
 
30
30
  . (Join-Path $PSScriptRoot '_HiddenProcess.ps1')
31
+ . (Join-Path $PSScriptRoot '_NativeInstallerSupport.ps1')
31
32
  . (Join-Path $PSScriptRoot '_PackagedUninstall.ps1')
32
33
 
33
34
  function Write-StructuredResult {
@@ -36,6 +37,10 @@ function Write-StructuredResult {
36
37
  [int]$ExitCode
37
38
  )
38
39
 
40
+ if (Get-Variable -Name catsInitialObservation -Scope Script -ErrorAction SilentlyContinue) {
41
+ Add-CatsNativeObservation -Result $Result -Before $script:catsInitialObservation -Attempted ([bool]$script:shouldInstall) -Skipped ([bool]$SkipInstaller)
42
+ }
43
+
39
44
  if ($Json) {
40
45
  $Result | ConvertTo-Json -Depth 10
41
46
  } else {
@@ -274,7 +279,15 @@ if ($CheckOnly) {
274
279
  Write-StructuredResult -Result $result -ExitCode 0
275
280
  }
276
281
 
282
+ $installFailed = $false
283
+ $catsInitialObservation = $detected.PSObject.Copy()
277
284
  $shouldInstall = $Force -or $Upgrade -or -not $detected.installed
285
+ if ($Upgrade -and -not $Force -and $detected.installed -and -not $SkipInstaller -and -not $DryRun) {
286
+ $versionGate = Test-CatsNativeUpgrade -Provider 'antigravity' -InstalledVersion $detected.detectedVersion
287
+ $shouldInstall = $versionGate.shouldInstall
288
+ if (-not $versionGate.known) { $warnings.Add('Could not compare the published version; the official installer will verify the update.') }
289
+ if (-not $shouldInstall) { $plannedActions.Clear() }
290
+ }
278
291
  $installFailed = $false
279
292
  $installSkipped = $false
280
293
  if ($shouldInstall) {
@@ -282,8 +295,11 @@ if ($shouldInstall) {
282
295
  $warnings.Add('Dry-run requested; Antigravity installer invocation was skipped.')
283
296
  $installSkipped = $true
284
297
  } else {
285
- if (($Force -or $Upgrade) -and (Test-Path -LiteralPath (Resolve-AntigravityExecutablePath) -PathType Leaf)) {
298
+ $previousBinary = $null
299
+ if (($Force -or $Upgrade) -and -not $SkipInstaller -and (Test-Path -LiteralPath (Resolve-AntigravityExecutablePath) -PathType Leaf)) {
286
300
  try {
301
+ $previousBinary = Join-Path ([IO.Path]::GetTempPath()) ('cats-agy-' + [guid]::NewGuid().ToString('N') + '.exe')
302
+ Copy-Item -LiteralPath (Resolve-AntigravityExecutablePath) -Destination $previousBinary -ErrorAction Stop
287
303
  Remove-Item -LiteralPath (Resolve-AntigravityExecutablePath) -Force -ErrorAction Stop
288
304
  } catch {
289
305
  $warnings.Add("Unable to remove existing agy.exe before refresh: $($_.Exception.Message)")
@@ -308,12 +324,19 @@ if ($shouldInstall) {
308
324
  }
309
325
 
310
326
  Start-Sleep -Seconds 2
311
- Add-AntigravityToUserPath
327
+ if (-not $SkipInstaller) { Add-AntigravityToUserPath }
312
328
  $detected = Detect-AntigravityInstall
313
329
  if (-not $detected.installed -and -not $installSkipped -and -not $installFailed) {
314
330
  $warnings.Add('Antigravity installation completed but agy.exe was not detected at the expected path.')
315
331
  $installFailed = $true
316
332
  }
333
+ if ($previousBinary) {
334
+ if ($installFailed) {
335
+ Copy-Item -LiteralPath $previousBinary -Destination (Resolve-AntigravityExecutablePath) -Force
336
+ $detected = Detect-AntigravityInstall
337
+ }
338
+ Remove-Item -LiteralPath $previousBinary -Force -ErrorAction SilentlyContinue
339
+ }
317
340
  }
318
341
 
319
342
  if ($installFailed -or ($DryRun -and $shouldInstall)) {
@@ -332,7 +355,7 @@ $interruptions = [System.Collections.Generic.List[object]]::new()
332
355
  if ($shouldInstall -and -not $installFailed -and -not $DryRun) {
333
356
  $interruptions.Add([pscustomobject]@{
334
357
  kind = 'relaunch_required'
335
- summary = 'Relaunch Cats Desktop Host after the Antigravity install step, then rerun the packaged setup check.'
358
+ summary = 'Run Detect Again after the Antigravity install step if the command is not visible yet.'
336
359
  resumable = $true
337
360
  requiresRestart = $false
338
361
  requiresElevation = $false
@@ -74,6 +74,7 @@ Set-StrictMode -Version Latest
74
74
  $ErrorActionPreference = 'Stop'
75
75
 
76
76
  . (Join-Path $PSScriptRoot '_HiddenProcess.ps1')
77
+ . (Join-Path $PSScriptRoot '_NativeInstallerSupport.ps1')
77
78
 
78
79
  function Write-StructuredResult {
79
80
  param(
@@ -81,6 +82,10 @@ function Write-StructuredResult {
81
82
  [int]$ExitCode
82
83
  )
83
84
 
85
+ if (Get-Variable -Name catsInitialObservation -Scope Script -ErrorAction SilentlyContinue) {
86
+ Add-CatsNativeObservation -Result $Result -Before $script:catsInitialObservation -Attempted ([bool]$script:shouldInstall) -Skipped ([bool]$SkipInstaller)
87
+ }
88
+
84
89
  if ($Json) {
85
90
  $Result | ConvertTo-Json -Depth 10
86
91
  } else {
@@ -250,7 +255,8 @@ function Invoke-ClaudeInstaller {
250
255
 
251
256
  try {
252
257
  $installScript = Invoke-RestMethod 'https://claude.ai/install.ps1'
253
- Invoke-Expression $installScript
258
+ $child = Invoke-CatsRemoteInstaller -ScriptText $installScript
259
+ if (-not $child.success) { throw $child.stderr }
254
260
  return [pscustomobject]@{
255
261
  usedWingetFallback = $false
256
262
  skipped = $false
@@ -493,6 +499,10 @@ if ($CheckOnly) {
493
499
  Write-StructuredResult -Result $result -ExitCode 0
494
500
  }
495
501
 
502
+ if ($DryRun) {
503
+ Write-CatsNativePreview -Helper 'windows-claude-native-installer' -Mode $executionMode -Detected $detected -Actions $plannedActions.ToArray() -EmitJson ([bool]$Json)
504
+ }
505
+
496
506
  $cleanedNpmShim = $false
497
507
  if ($npmShimPresent) {
498
508
  $cleanedNpmShim = Remove-ClaudeNpmShim
@@ -503,9 +513,16 @@ if ($npmShimPresent) {
503
513
  }
504
514
  }
505
515
 
516
+ $installFailed = $false
517
+ $catsInitialObservation = $detected.PSObject.Copy()
506
518
  $shouldInstall = $Force -or $Upgrade -or -not $detected.installed
519
+ $installFailed = $false
507
520
  if ($shouldInstall) {
508
- $installResult = Invoke-ClaudeInstaller
521
+ $installResult = try { Invoke-ClaudeInstaller } catch { [pscustomobject]@{ skipped = $false; success = $false; stderr = [string]$_.Exception.Message; usedPowerShell51Fallback = $false; usedWingetFallback = $false } }
522
+ if ($installResult.PSObject.Properties['success'] -and -not $installResult.success) {
523
+ $installFailed = $true
524
+ $warnings.Add($installResult.stderr)
525
+ }
509
526
  $usedWingetFallback = [bool]$installResult.usedWingetFallback
510
527
  if ($usedWingetFallback) {
511
528
  $warnings.Add('Claude Code installer required the winget fallback path.')
@@ -516,8 +533,9 @@ if ($shouldInstall) {
516
533
 
517
534
  Start-Sleep -Seconds 2
518
535
  $detected = Detect-ClaudeInstall
519
- if (-not $detected.installed -and -not $SkipInstaller) {
520
- throw 'Claude Code installation completed but claude was still not detected.'
536
+ if (-not $detected.installed -and -not $SkipInstaller -and -not $installFailed) {
537
+ $warnings.Add('Claude Code installation completed but claude was still not detected.')
538
+ $installFailed = $true
521
539
  }
522
540
 
523
541
  if ($Force) {
@@ -535,7 +553,7 @@ $interruptions = [System.Collections.Generic.List[object]]::new()
535
553
  if ($shouldInstall -or $cleanedNpmShim) {
536
554
  $interruptions.Add([pscustomobject]@{
537
555
  kind = 'relaunch_required'
538
- summary = 'Relaunch Cats Desktop Host after the Claude Code install step, then rerun the packaged setup check.'
556
+ summary = 'Run Detect Again after the Claude Code install step if the command is not visible yet.'
539
557
  resumable = $true
540
558
  requiresRestart = $false
541
559
  requiresElevation = $false
@@ -555,7 +573,7 @@ $restartRequired = $false
555
573
  $result = [pscustomobject]@{
556
574
  helper = 'windows-claude-native-installer'
557
575
  mode = $executionMode
558
- status = if ($interruptions.Count -gt 0) { [string]$interruptions[0].kind } else { 'ready' }
576
+ status = if ($installFailed) { 'failed' } elseif ($interruptions.Count -gt 0) { [string]$interruptions[0].kind } else { 'ready' }
559
577
  installed = [bool]$detected.installed
560
578
  detectedVersion = if ($detected.detectedVersion) { $detected.detectedVersion } else { $null }
561
579
  commandPath = $detected.commandPath
@@ -568,4 +586,4 @@ $result = [pscustomobject]@{
568
586
  cleanedNpmShim = $cleanedNpmShim
569
587
  usedWingetFallback = $usedWingetFallback
570
588
  }
571
- Write-StructuredResult -Result $result -ExitCode 0
589
+ Write-StructuredResult -Result $result -ExitCode $(if ($installFailed) { 1 } else { 0 })
@@ -59,6 +59,7 @@ Set-StrictMode -Version Latest
59
59
  $ErrorActionPreference = 'Stop'
60
60
 
61
61
  . (Join-Path $PSScriptRoot '_HiddenProcess.ps1')
62
+ . (Join-Path $PSScriptRoot '_NativeInstallerSupport.ps1')
62
63
  . (Join-Path $PSScriptRoot '_PackagedUninstall.ps1')
63
64
 
64
65
  function Write-StructuredResult {
@@ -67,6 +68,10 @@ function Write-StructuredResult {
67
68
  [int]$ExitCode
68
69
  )
69
70
 
71
+ if (Get-Variable -Name catsInitialObservation -Scope Script -ErrorAction SilentlyContinue) {
72
+ Add-CatsNativeObservation -Result $Result -Before $script:catsInitialObservation -Attempted ([bool]$script:shouldInstall) -Skipped ([bool]$SkipInstaller)
73
+ }
74
+
70
75
  if ($Json) {
71
76
  $Result | ConvertTo-Json -Depth 10
72
77
  } else {
@@ -88,7 +93,13 @@ function Write-StructuredResult {
88
93
  }
89
94
 
90
95
  function Resolve-CursorExecutablePath {
91
- return Join-Path $env:USERPROFILE '.local\bin\cursor-agent.exe'
96
+ foreach ($name in @('cursor-agent.exe', 'cursor-agent.cmd', 'agent.exe', 'agent.cmd')) {
97
+ $candidate = Join-Path $env:LOCALAPPDATA "cursor-agent\$name"
98
+ if (Test-Path -LiteralPath $candidate -PathType Leaf) { return $candidate }
99
+ }
100
+ $legacy = Join-Path $env:USERPROFILE '.local\bin\cursor-agent.exe'
101
+ if (Test-Path -LiteralPath $legacy -PathType Leaf) { return $legacy }
102
+ return Join-Path $env:LOCALAPPDATA 'cursor-agent\cursor-agent.cmd'
92
103
  }
93
104
 
94
105
  function Refresh-UserPath {
@@ -133,6 +144,10 @@ function Detect-CursorInstall {
133
144
  }
134
145
  }
135
146
 
147
+ if ($installed -and -not $version -and $commandPath -match '\.(cmd|bat)$') {
148
+ $version = Get-CatsShimVersionText -Path $commandPath
149
+ }
150
+
136
151
  return [pscustomobject]@{
137
152
  installed = $installed
138
153
  commandPath = $commandPath
@@ -161,30 +176,11 @@ function Invoke-CursorInstaller {
161
176
  }
162
177
  }
163
178
 
164
- try {
165
- $installScript = Invoke-RestMethod 'https://cursor.com/install?win32=true'
166
- Invoke-Expression $installScript
167
- return [pscustomobject]@{
168
- usedPowerShell51Fallback = $false
169
- skipped = $false
170
- }
171
- } catch {
172
- $isPowerShell7 = $PSVersionTable.PSVersion.Major -ge 7
173
- $ps51Path = Join-Path $env:SystemRoot 'System32\WindowsPowerShell\v1.0\powershell.exe'
174
- if (-not $isPowerShell7 -or -not (Test-Path -LiteralPath $ps51Path -PathType Leaf)) {
175
- throw
176
- }
177
-
178
- & $ps51Path -NoProfile -ExecutionPolicy Bypass -Command "irm 'https://cursor.com/install?win32=true' | iex"
179
- if ($LASTEXITCODE -ne 0) {
180
- throw 'Cursor Agent installer fallback via Windows PowerShell 5.1 failed.'
181
- }
179
+ $installScript = Invoke-RestMethod 'https://cursor.com/install?win32=true' -TimeoutSec 30 -UseBasicParsing
180
+ $result = Invoke-CatsRemoteInstaller -ScriptText $installScript
181
+ $result | Add-Member -NotePropertyName usedPowerShell51Fallback -NotePropertyValue $true
182
+ return $result
182
183
 
183
- return [pscustomobject]@{
184
- usedPowerShell51Fallback = $true
185
- skipped = $false
186
- }
187
- }
188
184
  }
189
185
 
190
186
  if (-not $CheckOnly -and -not $Apply -and -not $Upgrade -and -not $Force -and -not $Uninstall) {
@@ -219,6 +215,7 @@ if ($Uninstall) {
219
215
  Invoke-PackagedProviderUninstall `
220
216
  -HelperId 'windows-cursor-native-installer' `
221
217
  -UserBinaryPath (Resolve-CursorExecutablePath) `
218
+ -ExtraUserOwnedPaths @((Join-Path $env:LOCALAPPDATA 'cursor-agent')) `
222
219
  -RedetectCommand { Detect-CursorInstall } `
223
220
  -EmitJson:$Json `
224
221
  -DryRun:$DryRun
@@ -289,9 +286,26 @@ if ($CheckOnly) {
289
286
  Write-StructuredResult -Result $result -ExitCode 0
290
287
  }
291
288
 
289
+ if ($DryRun) {
290
+ Write-CatsNativePreview -Helper 'windows-cursor-native-installer' -Mode $executionMode -Detected $detected -Actions $plannedActions.ToArray() -EmitJson ([bool]$Json)
291
+ }
292
+
293
+ $installFailed = $false
294
+ $catsInitialObservation = $detected.PSObject.Copy()
292
295
  $shouldInstall = $Force -or $Upgrade -or -not $detected.installed
296
+ if ($Upgrade -and -not $Force -and $detected.installed -and -not $SkipInstaller -and -not $DryRun) {
297
+ $versionGate = Test-CatsNativeUpgrade -Provider 'cursor' -InstalledVersion $detected.detectedVersion
298
+ $shouldInstall = $versionGate.shouldInstall
299
+ if (-not $versionGate.known) { $warnings.Add('Could not compare the published version; the official installer will verify the update.') }
300
+ if (-not $shouldInstall) { $plannedActions.Clear() }
301
+ }
302
+ $installFailed = $false
293
303
  if ($shouldInstall) {
294
- $installResult = Invoke-CursorInstaller
304
+ $installResult = try { Invoke-CursorInstaller } catch { [pscustomobject]@{ skipped = $false; success = $false; stderr = [string]$_.Exception.Message; usedPowerShell51Fallback = $false; usedWingetFallback = $false } }
305
+ if ($installResult.PSObject.Properties['success'] -and -not $installResult.success) {
306
+ $installFailed = $true
307
+ $warnings.Add($installResult.stderr)
308
+ }
295
309
  $usedPowerShell51Fallback = [bool]$installResult.usedPowerShell51Fallback
296
310
  if ($usedPowerShell51Fallback) {
297
311
  $warnings.Add('Cursor installer required the Windows PowerShell 5.1 fallback.')
@@ -302,8 +316,9 @@ if ($shouldInstall) {
302
316
 
303
317
  Start-Sleep -Seconds 2
304
318
  $detected = Detect-CursorInstall
305
- if (-not $detected.installed -and -not $SkipInstaller) {
306
- throw 'Cursor Agent installation completed but cursor-agent was still not detected.'
319
+ if (-not $detected.installed -and -not $SkipInstaller -and -not $installFailed) {
320
+ $warnings.Add('Cursor Agent installation completed but cursor-agent was still not detected.')
321
+ $installFailed = $true
307
322
  }
308
323
 
309
324
  if ($Force) {
@@ -320,7 +335,7 @@ $interruptions = [System.Collections.Generic.List[object]]::new()
320
335
  if ($shouldInstall) {
321
336
  $interruptions.Add([pscustomobject]@{
322
337
  kind = 'relaunch_required'
323
- summary = 'Relaunch Cats Desktop Host after the Cursor Agent install step, then rerun the packaged setup check.'
338
+ summary = 'Run Detect Again after the Cursor Agent install step if the command is not visible yet.'
324
339
  resumable = $true
325
340
  requiresRestart = $false
326
341
  requiresElevation = $false
@@ -339,7 +354,7 @@ if (-not $authSatisfied) {
339
354
  $result = [pscustomobject]@{
340
355
  helper = 'windows-cursor-native-installer'
341
356
  mode = $executionMode
342
- status = if ($interruptions.Count -gt 0) { [string]$interruptions[0].kind } else { 'ready' }
357
+ status = if ($installFailed) { 'failed' } elseif ($interruptions.Count -gt 0) { [string]$interruptions[0].kind } else { 'ready' }
343
358
  installed = [bool]$detected.installed
344
359
  detectedVersion = if ($detected.detectedVersion) { $detected.detectedVersion } else { $null }
345
360
  commandPath = $detected.commandPath
@@ -350,4 +365,4 @@ $result = [pscustomobject]@{
350
365
  interruptions = $interruptions.ToArray()
351
366
  usedPowerShell51Fallback = $usedPowerShell51Fallback
352
367
  }
353
- Write-StructuredResult -Result $result -ExitCode 0
368
+ Write-StructuredResult -Result $result -ExitCode $(if ($installFailed) { 1 } else { 0 })
@@ -31,6 +31,7 @@ Set-StrictMode -Version Latest
31
31
  $ErrorActionPreference = 'Stop'
32
32
 
33
33
  . (Join-Path $PSScriptRoot '_HiddenProcess.ps1')
34
+ . (Join-Path $PSScriptRoot '_NativeInstallerSupport.ps1')
34
35
  . (Join-Path $PSScriptRoot '_PackagedUninstall.ps1')
35
36
 
36
37
  function Write-StructuredResult {
@@ -39,6 +40,10 @@ function Write-StructuredResult {
39
40
  [int]$ExitCode
40
41
  )
41
42
 
43
+ if (Get-Variable -Name catsInitialObservation -Scope Script -ErrorAction SilentlyContinue) {
44
+ Add-CatsNativeObservation -Result $Result -Before $script:catsInitialObservation -Attempted ([bool]$script:shouldInstall) -Skipped ([bool]$SkipInstaller)
45
+ }
46
+
42
47
  if ($Json) {
43
48
  $Result | ConvertTo-Json -Depth 10
44
49
  } else {
@@ -126,12 +131,6 @@ function Invoke-DevinInstaller {
126
131
  return [pscustomobject]@{ skipped = $true; success = $true; exitCode = 0; stderr = '' }
127
132
  }
128
133
 
129
- $tempScript = [System.IO.Path]::Combine(
130
- [System.IO.Path]::GetTempPath(),
131
- "cats-devin-install-$([System.Guid]::NewGuid().ToString('N')).ps1"
132
- )
133
- $stdoutPath = "$tempScript.stdout"
134
- $stderrPath = "$tempScript.stderr"
135
134
  # Devin's setup.ps1 ends by launching the interactive `devin setup` wizard.
136
135
  # Packaged setup runs with no console a prompt can reach, so an unstripped
137
136
  # installer would stall the step rather than fail.
@@ -174,46 +173,8 @@ function Invoke-DevinInstaller {
174
173
  }
175
174
  $bootstrap = ($patchedLines -join [Environment]::NewLine)
176
175
 
177
- try {
178
- [System.IO.File]::WriteAllText(
179
- $tempScript,
180
- $bootstrap,
181
- [System.Text.UTF8Encoding]::new($false)
182
- )
183
- $powerShellExe = if (Get-Command pwsh.exe -ErrorAction SilentlyContinue) {
184
- 'pwsh.exe'
185
- } else {
186
- 'powershell.exe'
187
- }
188
- $process = Start-Process -FilePath $powerShellExe `
189
- -ArgumentList @('-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', $tempScript) `
190
- -Wait -PassThru -NoNewWindow `
191
- -RedirectStandardOutput $stdoutPath `
192
- -RedirectStandardError $stderrPath
193
- $stderrRaw = if (Test-Path -LiteralPath $stderrPath -PathType Leaf) {
194
- Get-Content -LiteralPath $stderrPath -Raw -ErrorAction SilentlyContinue
195
- } else { $null }
176
+ return Invoke-CatsRemoteInstaller -ScriptText $bootstrap -RetrySharingViolation
196
177
 
197
- return [pscustomobject]@{
198
- skipped = $false
199
- success = ($process.ExitCode -eq 0)
200
- exitCode = $process.ExitCode
201
- stderr = if ($null -eq $stderrRaw) { '' } else { [string]$stderrRaw }
202
- }
203
- } catch {
204
- return [pscustomobject]@{
205
- skipped = $false
206
- success = $false
207
- exitCode = -1
208
- stderr = "Failed to invoke Devin installer: $($_.Exception.Message)"
209
- }
210
- } finally {
211
- foreach ($path in @($tempScript, $stdoutPath, $stderrPath)) {
212
- if (Test-Path -LiteralPath $path -PathType Leaf) {
213
- Remove-Item -LiteralPath $path -Force -ErrorAction SilentlyContinue
214
- }
215
- }
216
- }
217
178
  }
218
179
 
219
180
  if (-not $CheckOnly -and -not $Apply -and -not $Upgrade -and -not $Force -and -not $Uninstall) {
@@ -303,7 +264,15 @@ if ($CheckOnly) {
303
264
  }) -ExitCode 0
304
265
  }
305
266
 
267
+ $installFailed = $false
268
+ $catsInitialObservation = $detected.PSObject.Copy()
306
269
  $shouldInstall = $Force -or $Upgrade -or -not $detected.installed
270
+ if ($Upgrade -and -not $Force -and $detected.installed -and -not $SkipInstaller -and -not $DryRun) {
271
+ $versionGate = Test-CatsNativeUpgrade -Provider 'devin' -InstalledVersion $detected.detectedVersion
272
+ $shouldInstall = $versionGate.shouldInstall
273
+ if (-not $versionGate.known) { $warnings.Add('Could not compare the published version; the official installer will verify the update.') }
274
+ if (-not $shouldInstall) { $plannedActions.Clear() }
275
+ }
307
276
  $installFailed = $false
308
277
  $installSkipped = $false
309
278
  if ($shouldInstall) {
@@ -347,12 +316,12 @@ if ($shouldInstall) {
347
316
  }
348
317
  }
349
318
 
350
- $manualSteps.Add('Run `devin login` or set XAI_API_KEY before first use.')
319
+ $manualSteps.Add('Run `devin auth login` to authenticate; check with `devin auth status`. The interactive setup wizard is skipped.')
351
320
  $interruptions = [System.Collections.Generic.List[object]]::new()
352
321
  if ($shouldInstall -and -not $installFailed -and -not $DryRun) {
353
322
  $interruptions.Add([pscustomobject]@{
354
323
  kind = 'relaunch_required'
355
- summary = 'Relaunch Cats Desktop Host after the Devin install step, then rerun the packaged setup check.'
324
+ summary = 'Run Detect Again after the Devin install step if the command is not visible yet.'
356
325
  resumable = $true
357
326
  requiresRestart = $false
358
327
  requiresElevation = $false
@@ -179,6 +179,10 @@ $mode = if ($CheckOnly) {
179
179
  'apply'
180
180
  }
181
181
 
182
+ # Desktop can outlive an installation. A fresh check must include the registry
183
+ # PATH, while retaining caller-provided command locations in this process.
184
+ $env:Path = [System.Environment]::GetEnvironmentVariable('Path', 'Machine') + ';' +
185
+ [System.Environment]::GetEnvironmentVariable('Path', 'User') + ';' + $env:Path
182
186
  $installed = Test-GhInstalled
183
187
  $detected = Get-GhDetectedVersion -Override $DetectedVersion
184
188
  $commandPath = if ($SkipGhProbe) { '' } else { Resolve-GhCommandPath }
@@ -59,6 +59,7 @@ Set-StrictMode -Version Latest
59
59
  $ErrorActionPreference = 'Stop'
60
60
 
61
61
  . (Join-Path $PSScriptRoot '_HiddenProcess.ps1')
62
+ . (Join-Path $PSScriptRoot '_NativeInstallerSupport.ps1')
62
63
  . (Join-Path $PSScriptRoot '_PackagedUninstall.ps1')
63
64
 
64
65
  function Write-StructuredResult {
@@ -67,6 +68,10 @@ function Write-StructuredResult {
67
68
  [int]$ExitCode
68
69
  )
69
70
 
71
+ if (Get-Variable -Name catsInitialObservation -Scope Script -ErrorAction SilentlyContinue) {
72
+ Add-CatsNativeObservation -Result $Result -Before $script:catsInitialObservation -Attempted ([bool]$script:shouldInstall) -Skipped ([bool]$SkipInstaller)
73
+ }
74
+
70
75
  if ($Json) {
71
76
  $Result | ConvertTo-Json -Depth 10
72
77
  } else {
@@ -364,7 +369,19 @@ if ($CheckOnly) {
364
369
  Write-StructuredResult -Result $result -ExitCode 0
365
370
  }
366
371
 
372
+ if ($DryRun) {
373
+ Write-CatsNativePreview -Helper 'windows-goose-native-installer' -Mode $executionMode -Detected $detected -Actions $plannedActions.ToArray() -EmitJson ([bool]$Json)
374
+ }
375
+
376
+ $installFailed = $false
377
+ $catsInitialObservation = $detected.PSObject.Copy()
367
378
  $shouldInstall = $Force -or $Upgrade -or -not $detected.installed
379
+ if ($Upgrade -and -not $Force -and $detected.installed -and -not $SkipInstaller -and -not $DryRun) {
380
+ $versionGate = Test-CatsNativeUpgrade -Provider 'goose' -InstalledVersion $detected.detectedVersion
381
+ $shouldInstall = $versionGate.shouldInstall
382
+ if (-not $versionGate.known) { $warnings.Add('Could not compare the published version; the official installer will verify the update.') }
383
+ if (-not $shouldInstall) { $plannedActions.Clear() }
384
+ }
368
385
  $installFailed = $false
369
386
  $installSkipped = $false
370
387
  if ($shouldInstall) {
@@ -410,7 +427,7 @@ $interruptions = [System.Collections.Generic.List[object]]::new()
410
427
  if ($shouldInstall -and -not $installFailed) {
411
428
  $interruptions.Add([pscustomobject]@{
412
429
  kind = 'relaunch_required'
413
- summary = 'Relaunch Cats Desktop Host after the Goose install step, then rerun the packaged setup check.'
430
+ summary = 'Run Detect Again after the Goose install step if the command is not visible yet.'
414
431
  resumable = $true
415
432
  requiresRestart = $false
416
433
  requiresElevation = $false