@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.
Files changed (516) hide show
  1. package/.env.example +9 -16
  2. package/README.md +18 -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 +264 -77
  8. package/build/desktop/bootstrapPage.js.map +1 -1
  9. package/build/desktop/cliInventoryProbe.d.ts +23 -2
  10. package/build/desktop/cliInventoryProbe.d.ts.map +1 -1
  11. package/build/desktop/cliInventoryProbe.js +54 -9
  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 +19 -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 +177 -201
  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 +7 -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/providerSelection.d.ts +37 -0
  36. package/build/desktop/providerSelection.d.ts.map +1 -0
  37. package/build/desktop/providerSelection.js +112 -0
  38. package/build/desktop/providerSelection.js.map +1 -0
  39. package/build/desktop/readiness.d.ts +2 -0
  40. package/build/desktop/readiness.d.ts.map +1 -1
  41. package/build/desktop/readiness.js +49 -35
  42. package/build/desktop/readiness.js.map +1 -1
  43. package/build/desktop/setupAssets.d.ts.map +1 -1
  44. package/build/desktop/setupAssets.js +16 -14
  45. package/build/desktop/setupAssets.js.map +1 -1
  46. package/build/desktop/setupAudit.d.ts +2 -3
  47. package/build/desktop/setupAudit.d.ts.map +1 -1
  48. package/build/desktop/setupAudit.js +14 -34
  49. package/build/desktop/setupAudit.js.map +1 -1
  50. package/build/desktop/tray.d.ts +1 -1
  51. package/build/desktop/tray.d.ts.map +1 -1
  52. package/build/desktop/tray.js +2 -7
  53. package/build/desktop/tray.js.map +1 -1
  54. package/build/desktop/trayMenu.d.ts +23 -2
  55. package/build/desktop/trayMenu.d.ts.map +1 -1
  56. package/build/desktop/trayMenu.js +24 -30
  57. package/build/desktop/trayMenu.js.map +1 -1
  58. package/build/desktop/updateDialog.d.ts +66 -0
  59. package/build/desktop/updateDialog.d.ts.map +1 -0
  60. package/build/desktop/updateDialog.js +258 -0
  61. package/build/desktop/updateDialog.js.map +1 -0
  62. package/build/desktop/updaterAdapter.d.ts +1 -0
  63. package/build/desktop/updaterAdapter.d.ts.map +1 -1
  64. package/build/desktop/updaterAdapter.js +13 -1
  65. package/build/desktop/updaterAdapter.js.map +1 -1
  66. package/build/renderer/assets/{ActiveSessionPermissionChip-Dl2UOFgh.js → ActiveSessionPermissionChip-CAgN-tXv.js} +1 -1
  67. package/build/renderer/assets/App-BZA23O2J.js +2 -0
  68. package/build/renderer/assets/App-DxsV-tKS.css +1 -0
  69. package/build/renderer/assets/{App-ChvP0G9X.js → App-YqprEL2n.js} +1 -1
  70. package/build/renderer/assets/App-rGw9J8PZ.js +1 -0
  71. package/build/renderer/assets/WorkspaceAppRoutes-BCHCikmJ.js +1 -0
  72. package/build/renderer/assets/app-BV3UAQkR.css +1 -0
  73. package/build/renderer/assets/app-CVPqqfZo.js +45 -0
  74. package/build/renderer/assets/conversationSidebarRecentEntries-iqaLqA1n.js +6 -0
  75. package/build/renderer/assets/{useDraftSessionChips-By3XXabI.js → useDraftSessionChips-D9BX6X92.js} +1 -1
  76. package/build/renderer/index.html +2 -2
  77. package/build/server/app/renderer/auth/api.d.ts +28 -2
  78. package/build/server/app/renderer/auth/api.d.ts.map +1 -1
  79. package/build/server/app/renderer/auth/api.js +29 -4
  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 +15 -6
  83. package/build/server/app/renderer/providerCatalogClient.js.map +1 -1
  84. package/build/server/app/renderer/providerRegistryClient.d.ts +1 -1
  85. package/build/server/app/renderer/providerRegistryClient.d.ts.map +1 -1
  86. package/build/server/app/renderer/providerRegistryClient.js +23 -41
  87. package/build/server/app/renderer/providerRegistryClient.js.map +1 -1
  88. package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.d.ts +11 -4
  89. package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.d.ts.map +1 -1
  90. package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.js +25 -5
  91. package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.js.map +1 -1
  92. package/build/server/app/server/appPackageRoutes.d.ts +2 -0
  93. package/build/server/app/server/appPackageRoutes.d.ts.map +1 -1
  94. package/build/server/app/server/appPackageRoutes.js +105 -0
  95. package/build/server/app/server/appPackageRoutes.js.map +1 -1
  96. package/build/server/app/server/authGatePolicy.js +8 -3
  97. package/build/server/app/server/authGatePolicy.js.map +1 -1
  98. package/build/server/app/server/authRoutes.d.ts +14 -1
  99. package/build/server/app/server/authRoutes.d.ts.map +1 -1
  100. package/build/server/app/server/authRoutes.js +395 -76
  101. package/build/server/app/server/authRoutes.js.map +1 -1
  102. package/build/server/app/server/contracts.d.ts +19 -1
  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 +48 -2
  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 +2 -1
  112. package/build/server/app/server/platformSetupRoutes.d.ts.map +1 -1
  113. package/build/server/app/server/platformSetupRoutes.js +117 -64
  114. package/build/server/app/server/platformSetupRoutes.js.map +1 -1
  115. package/build/server/app/server/polling.d.ts.map +1 -1
  116. package/build/server/app/server/polling.js +2 -0
  117. package/build/server/app/server/polling.js.map +1 -1
  118. package/build/server/app/server/requestRouter.d.ts.map +1 -1
  119. package/build/server/app/server/requestRouter.js +33 -0
  120. package/build/server/app/server/requestRouter.js.map +1 -1
  121. package/build/server/app/server/runtimeSurfaceProxy.d.ts.map +1 -1
  122. package/build/server/app/server/runtimeSurfaceProxy.js +16 -19
  123. package/build/server/app/server/runtimeSurfaceProxy.js.map +1 -1
  124. package/build/server/app/server/startupRecovery.d.ts.map +1 -1
  125. package/build/server/app/server/startupRecovery.js +5 -0
  126. package/build/server/app/server/startupRecovery.js.map +1 -1
  127. package/build/server/app/server/telegramCommandSurface.d.ts +29 -0
  128. package/build/server/app/server/telegramCommandSurface.d.ts.map +1 -0
  129. package/build/server/app/server/telegramCommandSurface.js +123 -0
  130. package/build/server/app/server/telegramCommandSurface.js.map +1 -0
  131. package/build/server/app/server/transportWorkGoldenPath.d.ts +82 -0
  132. package/build/server/app/server/transportWorkGoldenPath.d.ts.map +1 -0
  133. package/build/server/app/server/transportWorkGoldenPath.js +307 -0
  134. package/build/server/app/server/transportWorkGoldenPath.js.map +1 -0
  135. package/build/server/config.d.ts +22 -3
  136. package/build/server/config.d.ts.map +1 -1
  137. package/build/server/config.js +14 -13
  138. package/build/server/config.js.map +1 -1
  139. package/build/server/design/components/providerModelFieldsSupport.d.ts +3 -3
  140. package/build/server/design/components/providerModelFieldsSupport.d.ts.map +1 -1
  141. package/build/server/design/components/providerModelFieldsSupport.js +40 -38
  142. package/build/server/design/components/providerModelFieldsSupport.js.map +1 -1
  143. package/build/server/design/components/useProviderCatalogState.d.ts +1 -0
  144. package/build/server/design/components/useProviderCatalogState.d.ts.map +1 -1
  145. package/build/server/design/components/useProviderCatalogState.js +1 -0
  146. package/build/server/design/components/useProviderCatalogState.js.map +1 -1
  147. package/build/server/design/components/useProviderRegistryAutoRecheck.d.ts.map +1 -1
  148. package/build/server/design/components/useProviderRegistryAutoRecheck.js +20 -13
  149. package/build/server/design/components/useProviderRegistryAutoRecheck.js.map +1 -1
  150. package/build/server/design/components/useProviderRegistryState.d.ts.map +1 -1
  151. package/build/server/design/components/useProviderRegistryState.js +12 -25
  152. package/build/server/design/components/useProviderRegistryState.js.map +1 -1
  153. package/build/server/design/components/useProviderTargetReconciliation.d.ts.map +1 -1
  154. package/build/server/design/components/useProviderTargetReconciliation.js +5 -2
  155. package/build/server/design/components/useProviderTargetReconciliation.js.map +1 -1
  156. package/build/server/index.js +4 -0
  157. package/build/server/index.js.map +1 -1
  158. package/build/server/platform/apps/packageInstaller.d.ts +19 -0
  159. package/build/server/platform/apps/packageInstaller.d.ts.map +1 -0
  160. package/build/server/platform/apps/packageInstaller.js +92 -0
  161. package/build/server/platform/apps/packageInstaller.js.map +1 -0
  162. package/build/server/platform/apps/registry.d.ts +6 -0
  163. package/build/server/platform/apps/registry.d.ts.map +1 -1
  164. package/build/server/platform/apps/registry.js +24 -0
  165. package/build/server/platform/apps/registry.js.map +1 -1
  166. package/build/server/platform/apps/renderer.d.ts +6 -0
  167. package/build/server/platform/apps/renderer.d.ts.map +1 -0
  168. package/build/server/platform/apps/renderer.js +18 -0
  169. package/build/server/platform/apps/renderer.js.map +1 -0
  170. package/build/server/platform/auth/actionGrant.d.ts +61 -0
  171. package/build/server/platform/auth/actionGrant.d.ts.map +1 -0
  172. package/build/server/platform/auth/actionGrant.js +108 -0
  173. package/build/server/platform/auth/actionGrant.js.map +1 -0
  174. package/build/server/platform/auth/adminCredentials.d.ts +37 -0
  175. package/build/server/platform/auth/adminCredentials.d.ts.map +1 -0
  176. package/build/server/platform/auth/adminCredentials.js +63 -0
  177. package/build/server/platform/auth/adminCredentials.js.map +1 -0
  178. package/build/server/platform/auth/bootstrap.d.ts +14 -0
  179. package/build/server/platform/auth/bootstrap.d.ts.map +1 -1
  180. package/build/server/platform/auth/bootstrap.js +29 -4
  181. package/build/server/platform/auth/bootstrap.js.map +1 -1
  182. package/build/server/platform/auth/config.d.ts.map +1 -1
  183. package/build/server/platform/auth/config.js +1 -1
  184. package/build/server/platform/auth/config.js.map +1 -1
  185. package/build/server/platform/auth/errorCodes.d.ts +2 -0
  186. package/build/server/platform/auth/errorCodes.d.ts.map +1 -1
  187. package/build/server/platform/auth/errorCodes.js +2 -0
  188. package/build/server/platform/auth/errorCodes.js.map +1 -1
  189. package/build/server/platform/auth/googleAccount.d.ts +40 -13
  190. package/build/server/platform/auth/googleAccount.d.ts.map +1 -1
  191. package/build/server/platform/auth/googleAccount.js +89 -70
  192. package/build/server/platform/auth/googleAccount.js.map +1 -1
  193. package/build/server/platform/auth/index.d.ts +4 -0
  194. package/build/server/platform/auth/index.d.ts.map +1 -1
  195. package/build/server/platform/auth/index.js +4 -0
  196. package/build/server/platform/auth/index.js.map +1 -1
  197. package/build/server/platform/auth/localLogin.d.ts +10 -0
  198. package/build/server/platform/auth/localLogin.d.ts.map +1 -1
  199. package/build/server/platform/auth/localLogin.js +17 -0
  200. package/build/server/platform/auth/localLogin.js.map +1 -1
  201. package/build/server/platform/auth/loginMethods.d.ts +18 -0
  202. package/build/server/platform/auth/loginMethods.d.ts.map +1 -0
  203. package/build/server/platform/auth/loginMethods.js +19 -0
  204. package/build/server/platform/auth/loginMethods.js.map +1 -0
  205. package/build/server/platform/auth/securityEvents.d.ts +31 -0
  206. package/build/server/platform/auth/securityEvents.d.ts.map +1 -0
  207. package/build/server/platform/auth/securityEvents.js +45 -0
  208. package/build/server/platform/auth/securityEvents.js.map +1 -0
  209. package/build/server/platform/runtime/deliveryClient.d.ts +111 -0
  210. package/build/server/platform/runtime/deliveryClient.d.ts.map +1 -0
  211. package/build/server/platform/runtime/deliveryClient.js +289 -0
  212. package/build/server/platform/runtime/deliveryClient.js.map +1 -0
  213. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.d.ts +1 -0
  214. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.d.ts.map +1 -1
  215. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.js +10 -0
  216. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.js.map +1 -1
  217. package/build/server/platform/supervision/runtimeBoundary.d.ts +11 -1
  218. package/build/server/platform/supervision/runtimeBoundary.d.ts.map +1 -1
  219. package/build/server/platform/supervision/runtimeBoundary.js +2 -2
  220. package/build/server/platform/supervision/runtimeBoundary.js.map +1 -1
  221. package/build/server/platform/transports/telegram/bridge.d.ts +18 -0
  222. package/build/server/platform/transports/telegram/bridge.d.ts.map +1 -1
  223. package/build/server/platform/transports/telegram/bridge.js +176 -0
  224. package/build/server/platform/transports/telegram/bridge.js.map +1 -1
  225. package/build/server/platform/transports/telegram/commandPort.d.ts +40 -0
  226. package/build/server/platform/transports/telegram/commandPort.d.ts.map +1 -0
  227. package/build/server/platform/transports/telegram/commandPort.js +17 -0
  228. package/build/server/platform/transports/telegram/commandPort.js.map +1 -0
  229. package/build/server/platform/transports/telegram/commandRouter.d.ts +22 -0
  230. package/build/server/platform/transports/telegram/commandRouter.d.ts.map +1 -1
  231. package/build/server/platform/transports/telegram/commandRouter.js.map +1 -1
  232. package/build/server/platform/transports/telegram/commands/index.d.ts.map +1 -1
  233. package/build/server/platform/transports/telegram/commands/index.js +38 -0
  234. package/build/server/platform/transports/telegram/commands/index.js.map +1 -1
  235. package/build/server/platform/transports/telegram/ingressDispatch.d.ts +56 -0
  236. package/build/server/platform/transports/telegram/ingressDispatch.d.ts.map +1 -0
  237. package/build/server/platform/transports/telegram/ingressDispatch.js +93 -0
  238. package/build/server/platform/transports/telegram/ingressDispatch.js.map +1 -0
  239. package/build/server/platform/transports/telegram/polling.d.ts +34 -0
  240. package/build/server/platform/transports/telegram/polling.d.ts.map +1 -1
  241. package/build/server/platform/transports/telegram/polling.js +86 -9
  242. package/build/server/platform/transports/telegram/polling.js.map +1 -1
  243. package/build/server/platform/transports/telegram/relay/index.d.ts +3 -0
  244. package/build/server/platform/transports/telegram/relay/index.d.ts.map +1 -1
  245. package/build/server/platform/transports/telegram/relay/index.js +5 -1
  246. package/build/server/platform/transports/telegram/relay/index.js.map +1 -1
  247. package/build/server/platform/transports/telegram/relay/ingress.d.ts +2 -0
  248. package/build/server/platform/transports/telegram/relay/ingress.d.ts.map +1 -1
  249. package/build/server/platform/transports/telegram/relay/ingress.js +1 -1
  250. package/build/server/platform/transports/telegram/relay/ingress.js.map +1 -1
  251. package/build/server/platform/transports/work-delivery/actionTokens.d.ts +66 -0
  252. package/build/server/platform/transports/work-delivery/actionTokens.d.ts.map +1 -0
  253. package/build/server/platform/transports/work-delivery/actionTokens.js +145 -0
  254. package/build/server/platform/transports/work-delivery/actionTokens.js.map +1 -0
  255. package/build/server/platform/transports/work-delivery/contracts.d.ts +172 -0
  256. package/build/server/platform/transports/work-delivery/contracts.d.ts.map +1 -0
  257. package/build/server/platform/transports/work-delivery/contracts.js +26 -0
  258. package/build/server/platform/transports/work-delivery/contracts.js.map +1 -0
  259. package/build/server/platform/transports/work-delivery/deliveryGates.d.ts +32 -0
  260. package/build/server/platform/transports/work-delivery/deliveryGates.d.ts.map +1 -0
  261. package/build/server/platform/transports/work-delivery/deliveryGates.js +45 -0
  262. package/build/server/platform/transports/work-delivery/deliveryGates.js.map +1 -0
  263. package/build/server/platform/transports/work-delivery/inboundClassification.d.ts +31 -0
  264. package/build/server/platform/transports/work-delivery/inboundClassification.d.ts.map +1 -0
  265. package/build/server/platform/transports/work-delivery/inboundClassification.js +52 -0
  266. package/build/server/platform/transports/work-delivery/inboundClassification.js.map +1 -0
  267. package/build/server/platform/transports/work-delivery/outbox.d.ts +84 -0
  268. package/build/server/platform/transports/work-delivery/outbox.d.ts.map +1 -0
  269. package/build/server/platform/transports/work-delivery/outbox.js +270 -0
  270. package/build/server/platform/transports/work-delivery/outbox.js.map +1 -0
  271. package/build/server/platform/transports/work-delivery/permissionEnvelope.d.ts +57 -0
  272. package/build/server/platform/transports/work-delivery/permissionEnvelope.d.ts.map +1 -0
  273. package/build/server/platform/transports/work-delivery/permissionEnvelope.js +74 -0
  274. package/build/server/platform/transports/work-delivery/permissionEnvelope.js.map +1 -0
  275. package/build/server/platform/transports/work-delivery/port.d.ts +60 -0
  276. package/build/server/platform/transports/work-delivery/port.d.ts.map +1 -0
  277. package/build/server/platform/transports/work-delivery/port.js +15 -0
  278. package/build/server/platform/transports/work-delivery/port.js.map +1 -0
  279. package/build/server/platform/transports/work-delivery/proposal.d.ts +31 -0
  280. package/build/server/platform/transports/work-delivery/proposal.d.ts.map +1 -0
  281. package/build/server/platform/transports/work-delivery/proposal.js +59 -0
  282. package/build/server/platform/transports/work-delivery/proposal.js.map +1 -0
  283. package/build/server/platform/transports/work-delivery/readiness.d.ts +61 -0
  284. package/build/server/platform/transports/work-delivery/readiness.d.ts.map +1 -0
  285. package/build/server/platform/transports/work-delivery/readiness.js +123 -0
  286. package/build/server/platform/transports/work-delivery/readiness.js.map +1 -0
  287. package/build/server/platform/transports/work-delivery/stageProjection.d.ts +43 -0
  288. package/build/server/platform/transports/work-delivery/stageProjection.d.ts.map +1 -0
  289. package/build/server/platform/transports/work-delivery/stageProjection.js +132 -0
  290. package/build/server/platform/transports/work-delivery/stageProjection.js.map +1 -0
  291. package/build/server/platform/transports/work-delivery/stateStore.d.ts +21 -0
  292. package/build/server/platform/transports/work-delivery/stateStore.d.ts.map +1 -0
  293. package/build/server/platform/transports/work-delivery/stateStore.js +193 -0
  294. package/build/server/platform/transports/work-delivery/stateStore.js.map +1 -0
  295. package/build/server/platform/transports/work-delivery/telemetry.d.ts +49 -0
  296. package/build/server/platform/transports/work-delivery/telemetry.d.ts.map +1 -0
  297. package/build/server/platform/transports/work-delivery/telemetry.js +80 -0
  298. package/build/server/platform/transports/work-delivery/telemetry.js.map +1 -0
  299. package/build/server/products/chat/api/contracts.d.ts +10 -8
  300. package/build/server/products/chat/api/contracts.d.ts.map +1 -1
  301. package/build/server/products/chat/api/resources/channelRoutes.d.ts.map +1 -1
  302. package/build/server/products/chat/api/resources/channelRoutes.js +27 -1
  303. package/build/server/products/chat/api/resources/channelRoutes.js.map +1 -1
  304. package/build/server/products/chat/api/routeSupport.d.ts +8 -0
  305. package/build/server/products/chat/api/routeSupport.d.ts.map +1 -1
  306. package/build/server/products/chat/api/routeSupport.js +5 -4
  307. package/build/server/products/chat/api/routeSupport.js.map +1 -1
  308. package/build/server/products/chat/api/setupRoutes.d.ts.map +1 -1
  309. package/build/server/products/chat/api/setupRoutes.js +24 -91
  310. package/build/server/products/chat/api/setupRoutes.js.map +1 -1
  311. package/build/server/products/chat/state/model/channelExecutionTargets.d.ts +15 -0
  312. package/build/server/products/chat/state/model/channelExecutionTargets.d.ts.map +1 -1
  313. package/build/server/products/chat/state/model/channelExecutionTargets.js +25 -0
  314. package/build/server/products/chat/state/model/channelExecutionTargets.js.map +1 -1
  315. package/build/server/products/chat/state/model/index.d.ts +1 -1
  316. package/build/server/products/chat/state/model/index.d.ts.map +1 -1
  317. package/build/server/products/chat/state/model/index.js +1 -1
  318. package/build/server/products/chat/state/model/index.js.map +1 -1
  319. package/build/server/products/code/api/relayRoutes.d.ts.map +1 -1
  320. package/build/server/products/code/api/relayRoutes.js +36 -7
  321. package/build/server/products/code/api/relayRoutes.js.map +1 -1
  322. package/build/server/products/code/state/relayState.d.ts +2 -1
  323. package/build/server/products/code/state/relayState.d.ts.map +1 -1
  324. package/build/server/products/code/state/relayState.js +7 -7
  325. package/build/server/products/code/state/relayState.js.map +1 -1
  326. package/build/server/products/shared/api/workspaceContracts.d.ts +5 -8
  327. package/build/server/products/shared/api/workspaceContracts.d.ts.map +1 -1
  328. package/build/server/products/work/api/goldenPathProjection.d.ts +156 -0
  329. package/build/server/products/work/api/goldenPathProjection.d.ts.map +1 -0
  330. package/build/server/products/work/api/goldenPathProjection.js +252 -0
  331. package/build/server/products/work/api/goldenPathProjection.js.map +1 -0
  332. package/build/server/products/work/api/index.d.ts +54 -1
  333. package/build/server/products/work/api/index.d.ts.map +1 -1
  334. package/build/server/products/work/api/index.js +182 -4
  335. package/build/server/products/work/api/index.js.map +1 -1
  336. package/build/server/products/work/api/projection.d.ts +7 -1
  337. package/build/server/products/work/api/projection.d.ts.map +1 -1
  338. package/build/server/products/work/api/projection.js +7 -1
  339. package/build/server/products/work/api/projection.js.map +1 -1
  340. package/build/server/products/work/shared/apiPaths.d.ts +8 -0
  341. package/build/server/products/work/shared/apiPaths.d.ts.map +1 -1
  342. package/build/server/products/work/shared/apiPaths.js +8 -0
  343. package/build/server/products/work/shared/apiPaths.js.map +1 -1
  344. package/build/server/products/work/shared/workGoldenPathMessages.d.ts +83 -0
  345. package/build/server/products/work/shared/workGoldenPathMessages.d.ts.map +1 -0
  346. package/build/server/products/work/shared/workGoldenPathMessages.js +211 -0
  347. package/build/server/products/work/shared/workGoldenPathMessages.js.map +1 -0
  348. package/build/server/products/work/shared/workGoldenPathMetadata.d.ts +45 -0
  349. package/build/server/products/work/shared/workGoldenPathMetadata.d.ts.map +1 -0
  350. package/build/server/products/work/shared/workGoldenPathMetadata.js +122 -0
  351. package/build/server/products/work/shared/workGoldenPathMetadata.js.map +1 -0
  352. package/build/server/products/work/state/workCompletionEvidence.d.ts +42 -0
  353. package/build/server/products/work/state/workCompletionEvidence.d.ts.map +1 -0
  354. package/build/server/products/work/state/workCompletionEvidence.js +59 -0
  355. package/build/server/products/work/state/workCompletionEvidence.js.map +1 -0
  356. package/build/server/products/work/state/workExecutionTaskDelegate.d.ts +16 -0
  357. package/build/server/products/work/state/workExecutionTaskDelegate.d.ts.map +1 -1
  358. package/build/server/products/work/state/workExecutionTaskDelegate.js +91 -68
  359. package/build/server/products/work/state/workExecutionTaskDelegate.js.map +1 -1
  360. package/build/server/products/work/state/workGoldenPathAdmission.d.ts +78 -0
  361. package/build/server/products/work/state/workGoldenPathAdmission.d.ts.map +1 -0
  362. package/build/server/products/work/state/workGoldenPathAdmission.js +249 -0
  363. package/build/server/products/work/state/workGoldenPathAdmission.js.map +1 -0
  364. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.d.ts +33 -0
  365. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.d.ts.map +1 -0
  366. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.js +161 -0
  367. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.js.map +1 -0
  368. package/build/server/products/work/state/workGoldenPathIntake.d.ts +34 -0
  369. package/build/server/products/work/state/workGoldenPathIntake.d.ts.map +1 -0
  370. package/build/server/products/work/state/workGoldenPathIntake.js +50 -0
  371. package/build/server/products/work/state/workGoldenPathIntake.js.map +1 -0
  372. package/build/server/products/work/state/workGoldenPathLifecycle.d.ts +44 -0
  373. package/build/server/products/work/state/workGoldenPathLifecycle.d.ts.map +1 -0
  374. package/build/server/products/work/state/workGoldenPathLifecycle.js +146 -0
  375. package/build/server/products/work/state/workGoldenPathLifecycle.js.map +1 -0
  376. package/build/server/products/work/state/workGoldenPathPublish.d.ts +84 -0
  377. package/build/server/products/work/state/workGoldenPathPublish.d.ts.map +1 -0
  378. package/build/server/products/work/state/workGoldenPathPublish.js +488 -0
  379. package/build/server/products/work/state/workGoldenPathPublish.js.map +1 -0
  380. package/build/server/products/work/state/workGoldenPathRunner.d.ts +121 -0
  381. package/build/server/products/work/state/workGoldenPathRunner.d.ts.map +1 -0
  382. package/build/server/products/work/state/workGoldenPathRunner.js +447 -0
  383. package/build/server/products/work/state/workGoldenPathRunner.js.map +1 -0
  384. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.d.ts +74 -0
  385. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.d.ts.map +1 -0
  386. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.js +239 -0
  387. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.js.map +1 -0
  388. package/build/server/products/work/state/workGoldenPathService.d.ts +152 -0
  389. package/build/server/products/work/state/workGoldenPathService.d.ts.map +1 -0
  390. package/build/server/products/work/state/workGoldenPathService.js +1057 -0
  391. package/build/server/products/work/state/workGoldenPathService.js.map +1 -0
  392. package/build/server/products/work/state/workGoldenPathTelegramPort.d.ts +87 -0
  393. package/build/server/products/work/state/workGoldenPathTelegramPort.d.ts.map +1 -0
  394. package/build/server/products/work/state/workGoldenPathTelegramPort.js +220 -0
  395. package/build/server/products/work/state/workGoldenPathTelegramPort.js.map +1 -0
  396. package/build/server/runtime/client.d.ts +24 -0
  397. package/build/server/runtime/client.d.ts.map +1 -1
  398. package/build/server/runtime/client.js +62 -1
  399. package/build/server/runtime/client.js.map +1 -1
  400. package/build/server/runtime/setup.d.ts +10 -4
  401. package/build/server/runtime/setup.d.ts.map +1 -1
  402. package/build/server/runtime/setup.js +14 -18
  403. package/build/server/runtime/setup.js.map +1 -1
  404. package/build/server/runtime/usageSnapshot.d.ts +3 -0
  405. package/build/server/runtime/usageSnapshot.d.ts.map +1 -0
  406. package/build/server/runtime/usageSnapshot.js +69 -0
  407. package/build/server/runtime/usageSnapshot.js.map +1 -0
  408. package/build/server/server/routes/providerCapabilityBootstrap.d.ts +69 -0
  409. package/build/server/server/routes/providerCapabilityBootstrap.d.ts.map +1 -0
  410. package/build/server/server/routes/providerCapabilityBootstrap.js +165 -0
  411. package/build/server/server/routes/providerCapabilityBootstrap.js.map +1 -0
  412. package/build/server/server/routes/providers.d.ts.map +1 -1
  413. package/build/server/server/routes/providers.js +112 -81
  414. package/build/server/server/routes/providers.js.map +1 -1
  415. package/build/server/server/routes/telegram.d.ts +9 -0
  416. package/build/server/server/routes/telegram.d.ts.map +1 -1
  417. package/build/server/server/routes/telegram.js +79 -72
  418. package/build/server/server/routes/telegram.js.map +1 -1
  419. package/build/server/shared/catsAppManifest.d.ts +3 -1
  420. package/build/server/shared/catsAppManifest.d.ts.map +1 -1
  421. package/build/server/shared/catsAppManifest.js +2 -0
  422. package/build/server/shared/catsAppManifest.js.map +1 -1
  423. package/build/server/shared/executionLabel.d.ts.map +1 -1
  424. package/build/server/shared/executionLabel.js +8 -1
  425. package/build/server/shared/executionLabel.js.map +1 -1
  426. package/build/server/shared/i18n/catalogs/en.d.ts.map +1 -1
  427. package/build/server/shared/i18n/catalogs/en.js +238 -3
  428. package/build/server/shared/i18n/catalogs/en.js.map +1 -1
  429. package/build/server/shared/i18n/catalogs/zh-TW.d.ts.map +1 -1
  430. package/build/server/shared/i18n/catalogs/zh-TW.js +236 -3
  431. package/build/server/shared/i18n/catalogs/zh-TW.js.map +1 -1
  432. package/build/server/shared/i18n/index.d.ts +231 -0
  433. package/build/server/shared/i18n/index.d.ts.map +1 -1
  434. package/build/server/shared/i18n/messageKeys.d.ts +231 -0
  435. package/build/server/shared/i18n/messageKeys.d.ts.map +1 -1
  436. package/build/server/shared/i18n/messageKeys.js +231 -0
  437. package/build/server/shared/i18n/messageKeys.js.map +1 -1
  438. package/build/server/shared/platformSetupOperation.d.ts +2 -0
  439. package/build/server/shared/platformSetupOperation.d.ts.map +1 -0
  440. package/build/server/shared/platformSetupOperation.js +9 -0
  441. package/build/server/shared/platformSetupOperation.js.map +1 -0
  442. package/build/server/shared/providerCatalog.d.ts +6 -2
  443. package/build/server/shared/providerCatalog.d.ts.map +1 -1
  444. package/build/server/shared/providerCatalog.js +15 -1
  445. package/build/server/shared/providerCatalog.js.map +1 -1
  446. package/build/server/shared/providerCatalogData.d.ts +38 -22
  447. package/build/server/shared/providerCatalogData.d.ts.map +1 -1
  448. package/build/server/shared/providerCatalogData.js +31 -10
  449. package/build/server/shared/providerCatalogData.js.map +1 -1
  450. package/build/server/shared/providerCatalogInstances.d.ts.map +1 -1
  451. package/build/server/shared/providerCatalogInstances.js +6 -0
  452. package/build/server/shared/providerCatalogInstances.js.map +1 -1
  453. package/build/server/shared/providerModelLabelRegistry.d.ts +29 -0
  454. package/build/server/shared/providerModelLabelRegistry.d.ts.map +1 -0
  455. package/build/server/shared/providerModelLabelRegistry.js +49 -0
  456. package/build/server/shared/providerModelLabelRegistry.js.map +1 -0
  457. package/build/server/shared/providerSelection.d.ts.map +1 -1
  458. package/build/server/shared/providerSelection.js +10 -13
  459. package/build/server/shared/providerSelection.js.map +1 -1
  460. package/build/server/shared/runtimeSetup.d.ts +17 -4
  461. package/build/server/shared/runtimeSetup.d.ts.map +1 -1
  462. package/build/server/shared/runtimeStatusPresentation.js +1 -1
  463. package/build/server/shared/runtimeStatusPresentation.js.map +1 -1
  464. package/package.json +23 -1
  465. package/packages/app-sdk/browser.d.ts +51 -0
  466. package/packages/app-sdk/browser.js +48 -0
  467. package/packages/app-sdk/package.d.ts +14 -0
  468. package/packages/app-sdk/package.js +131 -0
  469. package/packages/app-sdk/package.json +7 -0
  470. package/scripts/README.md +73 -26
  471. package/scripts/build-desktop-installer.mjs +15 -0
  472. package/scripts/build-test-ui.mjs +1 -1
  473. package/scripts/bundle-server.mjs +23 -10
  474. package/scripts/linux/build-desktop-package.sh +6 -6
  475. package/scripts/linux/install-antigravity.sh +0 -0
  476. package/scripts/linux/install-devin.sh +0 -0
  477. package/scripts/linux/install-meta-cli.sh +8 -0
  478. package/scripts/linux/node-cli-common.sh +2 -75
  479. package/scripts/linux/provider-cli-common.sh +103 -30
  480. package/scripts/linux/sync-agent-skills.sh +27 -5
  481. package/scripts/linux/test-linux-package-smoke.sh +4 -3
  482. package/scripts/linux/upgrade-cli-tools.sh +1 -1
  483. package/scripts/macos/build-desktop-package.sh +5 -5
  484. package/scripts/macos/install-antigravity.sh +0 -0
  485. package/scripts/macos/install-devin.sh +0 -0
  486. package/scripts/macos/install-meta-cli.sh +8 -0
  487. package/scripts/macos/node-cli-common.sh +2 -75
  488. package/scripts/macos/provider-cli-common.sh +103 -30
  489. package/scripts/macos/sync-agent-skills.sh +27 -5
  490. package/scripts/macos/test-macos-package-smoke.sh +4 -3
  491. package/scripts/macos/upgrade-cli-tools.sh +1 -1
  492. package/scripts/package-desktop.mjs +15 -2
  493. package/scripts/testing/check-usage-app.mts +266 -0
  494. package/scripts/testing/usage-app-smoke-electron.cjs +10 -0
  495. package/scripts/testing/usage-app-smoke-renderer.tsx +8 -0
  496. package/scripts/verify-desktop-app-bundle.mjs +108 -0
  497. package/scripts/windows/Build-DesktopPackage.ps1 +9 -6
  498. package/scripts/windows/Check-WindowsSetupReadiness.ps1 +14 -443
  499. package/scripts/windows/{Install-Aider.ps1 → Install-MetaCli.ps1} +180 -92
  500. package/scripts/windows/Install-Ollama.ps1 +4 -1
  501. package/scripts/windows/Remove-MergedBranches.ps1 +229 -0
  502. package/scripts/windows/Sync-AgentSkills.ps1 +29 -6
  503. package/scripts/windows/Test-WindowsInstallerSmoke.ps1 +2 -1
  504. package/build/desktop/updateNotifications.d.ts +0 -64
  505. package/build/desktop/updateNotifications.d.ts.map +0 -1
  506. package/build/desktop/updateNotifications.js +0 -143
  507. package/build/desktop/updateNotifications.js.map +0 -1
  508. package/build/renderer/assets/App-C57f4p8k.js +0 -2
  509. package/build/renderer/assets/App-CPqGDXVi.js +0 -1
  510. package/build/renderer/assets/App-DGwkRFZl.css +0 -1
  511. package/build/renderer/assets/WorkspaceAppRoutes-DYg2vnjz.js +0 -1
  512. package/build/renderer/assets/app-DVN9Ghrk.js +0 -43
  513. package/build/renderer/assets/app-XnXwkcD2.css +0 -1
  514. package/build/renderer/assets/conversationSidebarRecentEntries-XZVCnMLw.js +0 -6
  515. package/scripts/linux/install-aider.sh +0 -8
  516. package/scripts/macos/install-aider.sh +0 -8
@@ -639,11 +639,11 @@ export function buildDesktopBootstrapPage() {
639
639
  'loading.ready': 'Ready.',
640
640
  'loading.retrying': 'Trying again\u2026',
641
641
  'loading.startingUp': 'Starting up\u2026',
642
- 'onboarding.headline': 'Welcome. Install a CLI now or continue into setup.',
642
+ 'onboarding.headline': 'Choose which providers Cats may use, then continue into setup.',
643
643
  'onboarding.installCli': 'Install a CLI',
644
644
  'onboarding.installNodeFirst': 'Install Node first',
645
645
  'onboarding.nodeLabel': 'Node.js / npm',
646
- 'onboarding.nodeStatus': 'Required by npm CLIs',
646
+ 'onboarding.ollamaLabel': 'Ollama',
647
647
  'onboarding.rescanClis': 'Detect again',
648
648
  'onboarding.scanClis': 'Detect installed CLIs',
649
649
  'onboarding.scanningClis': 'Detecting…',
@@ -657,7 +657,7 @@ export function buildDesktopBootstrapPage() {
657
657
  'recovery.summary.readyForSetup': 'Local helpers are running. Continue into setup to get started.',
658
658
  'recovery.title.failed': 'Cats needs a quick restart',
659
659
  'recovery.title.helperAttention': 'Cats can open, but one helper needs attention',
660
- 'recovery.title.installCliContinue': 'Install a CLI to continue using Cats',
660
+ 'recovery.title.installCliContinue': 'Choose providers to continue using Cats',
661
661
  'recovery.title.oneSetupFix': 'Cats needs one setup fix',
662
662
  'recovery.title.pickCli': 'Pick a CLI to get started',
663
663
  'recovery.title.readyForSetup': 'Cats is ready to set up',
@@ -669,6 +669,12 @@ export function buildDesktopBootstrapPage() {
669
669
  'section.setupFix': 'Setup fix',
670
670
  'section.whatNeedsAttention': 'What needs attention',
671
671
  'setup.noSummary': 'No summary recorded.',
672
+ 'selection.title': 'Choose your providers',
673
+ 'selection.description': 'Cats only checks and uses the providers you select. Save an empty selection to continue without a provider.',
674
+ 'selection.save': 'Save selection',
675
+ 'selection.reload': 'Reload edited configuration',
676
+ 'selection.reset': 'Discard unsaved changes',
677
+ 'selection.loading': 'Loading provider selection…',
672
678
  'setup.recommendedNextStep': 'Recommended next step',
673
679
  'setup.restartNeeded': 'A restart is needed before the next step.',
674
680
  'setupError.failedBeforeStructuredOutput': '{helperLabel} failed before emitting structured output.',
@@ -760,8 +766,10 @@ export function buildDesktopBootstrapPage() {
760
766
  'status.error': 'error',
761
767
  'status.failed': 'failed',
762
768
  'status.info': 'info',
769
+ 'status.checkingInstall': 'Checking…',
763
770
  'status.install': 'Install',
764
771
  'status.installed': 'Installed',
772
+ 'status.notInstalled': 'Not installed',
765
773
  'status.installedWithCheck': '\u2713 Installed',
766
774
  'status.installing': 'Installing\u2026',
767
775
  'status.notDetected': 'Not detected yet',
@@ -892,11 +900,11 @@ export function buildDesktopBootstrapPage() {
892
900
  'loading.ready': '已就緒。',
893
901
  'loading.retrying': '正在重試…',
894
902
  'loading.startingUp': '正在啟動…',
895
- 'onboarding.headline': '歡迎。你可以現在安裝 CLI,或繼續進入設定。',
903
+ 'onboarding.headline': '選擇 Cats 可以使用的 providers,再繼續設定。',
896
904
  'onboarding.installCli': '安裝 CLI',
897
905
  'onboarding.installNodeFirst': '請先安裝 Node',
898
906
  'onboarding.nodeLabel': 'Node.js / npm',
899
- 'onboarding.nodeStatus': 'npm CLI 需要此項',
907
+ 'onboarding.ollamaLabel': 'Ollama',
900
908
  'onboarding.rescanClis': '重新偵測',
901
909
  'onboarding.scanClis': '偵測已安裝的 CLI',
902
910
  'onboarding.scanningClis': '偵測中…',
@@ -910,7 +918,7 @@ export function buildDesktopBootstrapPage() {
910
918
  'recovery.summary.readyForSetup': '本機輔助程式已在執行。請繼續進入設定開始使用。',
911
919
  'recovery.title.failed': 'Cats 需要快速重新啟動',
912
920
  'recovery.title.helperAttention': 'Cats 可以開啟,但有一個本機輔助程式需要處理',
913
- 'recovery.title.installCliContinue': '安裝 CLI 以繼續使用 Cats',
921
+ 'recovery.title.installCliContinue': '選擇 providers 以繼續使用 Cats',
914
922
  'recovery.title.oneSetupFix': 'Cats 需要完成一項設定修復',
915
923
  'recovery.title.pickCli': '選一個 CLI 開始',
916
924
  'recovery.title.readyForSetup': 'Cats 已準備好進行設定',
@@ -922,6 +930,12 @@ export function buildDesktopBootstrapPage() {
922
930
  'section.setupFix': '設定修復',
923
931
  'section.whatNeedsAttention': '需要處理的項目',
924
932
  'setup.noSummary': '未記錄摘要。',
933
+ 'selection.title': '選擇你要使用的 providers',
934
+ 'selection.description': 'Cats 只會檢查與使用你選擇的 providers。也可以儲存空白選擇,稍後再設定。',
935
+ 'selection.save': '儲存選擇',
936
+ 'selection.reload': '重新載入已編輯的設定',
937
+ 'selection.reset': '捨棄尚未儲存的變更',
938
+ 'selection.loading': '正在載入 provider 選擇…',
925
939
  'setup.recommendedNextStep': '建議的下一步',
926
940
  'setup.restartNeeded': '下一步前需要重新啟動。',
927
941
  'setupError.failedBeforeStructuredOutput': '{helperLabel} 在輸出結構化結果前失敗。',
@@ -1013,8 +1027,10 @@ export function buildDesktopBootstrapPage() {
1013
1027
  'status.error': '錯誤',
1014
1028
  'status.failed': '失敗',
1015
1029
  'status.info': '資訊',
1030
+ 'status.checkingInstall': '檢查中…',
1016
1031
  'status.install': '安裝',
1017
1032
  'status.installed': '已安裝',
1033
+ 'status.notInstalled': '未安裝',
1018
1034
  'status.installedWithCheck': '\u2713 已安裝',
1019
1035
  'status.installing': '安裝中…',
1020
1036
  'status.notDetected': '尚未偵測',
@@ -1553,6 +1569,7 @@ export function buildDesktopBootstrapPage() {
1553
1569
  if (v == null || v === false) continue;
1554
1570
  if (k === 'class') e.className = v;
1555
1571
  else if (k === 'onclick') e.addEventListener('click', v);
1572
+ else if (k === 'onchange') e.addEventListener('change', v);
1556
1573
  else if (k === 'disabled') e.disabled = true;
1557
1574
  else e.setAttribute(k, String(v));
1558
1575
  }
@@ -1603,13 +1620,9 @@ export function buildDesktopBootstrapPage() {
1603
1620
  when the user explicitly continues into setup. */
1604
1621
  var onboardingActive = false;
1605
1622
 
1606
- function isCliMissing(snapshot) {
1607
- return Boolean(
1608
- snapshot && snapshot.phase === 'needs_prerequisites'
1609
- && snapshot.prerequisites && snapshot.prerequisites.cliInventory
1610
- && snapshot.prerequisites.cliInventory.source === 'runtime'
1611
- && snapshot.prerequisites.cliInventory.total === 0
1612
- );
1623
+ function isSelectionRequired(snapshot) {
1624
+ var selection = snapshot && snapshot.prerequisites && snapshot.prerequisites.providerSelection;
1625
+ return Boolean(selection && (selection.state === 'missing' || selection.state === 'invalid'));
1613
1626
  }
1614
1627
 
1615
1628
  function isSetupComplete(snapshot) {
@@ -1635,13 +1648,13 @@ export function buildDesktopBootstrapPage() {
1635
1648
  }
1636
1649
  if (
1637
1650
  usesSetupStatusOnboarding(snapshot)
1638
- && !setupComplete
1651
+ && (!setupComplete || isSelectionRequired(snapshot))
1639
1652
  && snapshot.phase === 'ready_for_setup'
1640
1653
  ) {
1641
1654
  return 'onboarding';
1642
1655
  }
1643
1656
  if (snapshot.phase === 'needs_prerequisites') {
1644
- if (isCliMissing(snapshot) && !setupComplete) {
1657
+ if (isSelectionRequired(snapshot) && !setupComplete) {
1645
1658
  return 'onboarding';
1646
1659
  }
1647
1660
  return 'recovery';
@@ -1652,21 +1665,25 @@ export function buildDesktopBootstrapPage() {
1652
1665
  /* CLI install card — used by onboarding mode AND the recovery accordion.
1653
1666
  First row favors CLIs that do not depend on Node/npm. Lower rows are
1654
1667
  collapsed until Show more is pressed, then npm prerequisites appear
1655
- before npm-based CLIs. */
1668
+ before npm-based CLIs.
1669
+
1670
+ Ollama is deliberately absent from these lists: it is a local model
1671
+ runtime, not a CLI provider, so the runtime scan never reports it. Its
1672
+ card is built from the readiness audit instead (see
1673
+ buildLocalModelCard). */
1656
1674
  var ONBOARDING_NATIVE_PROVIDER_ORDER = [
1657
1675
  'claude_code', 'antigravity', 'cursor_agent', 'kiro', 'junie',
1658
- 'goose', 'grok', 'cline', 'devin', 'aider', 'ollama'
1676
+ 'goose', 'grok', 'devin', 'muse'
1659
1677
  ];
1660
1678
  var ONBOARDING_NPM_PROVIDER_ORDER = [
1661
1679
  'codex', 'copilot', 'opencode',
1662
- 'kilo', 'auggie', 'pi'
1680
+ 'kilo', 'auggie', 'pi', 'cline'
1663
1681
  ];
1664
1682
  var ONBOARDING_NODE_HELPER_SUFFIX = '-node-host-installer';
1683
+ var ONBOARDING_LOCAL_MODEL_HELPER_SUFFIX = '-ollama-local-model-installer';
1665
1684
  var ONBOARDING_CARD_LABELS = {
1666
- node: tx('onboarding.nodeLabel')
1667
- };
1668
- var ONBOARDING_CARD_STATUS = {
1669
- node: tx('onboarding.nodeStatus')
1685
+ node: tx('onboarding.nodeLabel'),
1686
+ ollama: tx('onboarding.ollamaLabel')
1670
1687
  };
1671
1688
  var ONBOARDING_PROVIDER_LABELS = {
1672
1689
  claude_code: 'Claude',
@@ -1684,23 +1701,23 @@ export function buildDesktopBootstrapPage() {
1684
1701
  grok: 'Grok',
1685
1702
  cline: 'Cline',
1686
1703
  devin: 'Devin',
1687
- aider: 'Aider',
1688
- ollama: 'Ollama'
1704
+ muse: 'Meta Muse'
1689
1705
  };
1690
1706
  var cliInstallingState = Object.create(null);
1691
1707
  var cliScanInFlight = false;
1692
1708
  var onboardingExpanded = false;
1693
1709
 
1694
1710
  /* The runtime only fills in cliInventory after a setup scan has actually
1695
- run, and that scan is deliberately NOT part of the boot path it spawns
1696
- one where/which lookup per provider and would add seconds to startup.
1697
- Until then every candidate arrives as installed:false, which is
1711
+ run. The host now kicks that scan off in the background at startup, so
1712
+ this is a window of a few seconds rather than a state the user is parked
1713
+ in until they click Detect but the window still exists, and until it
1714
+ closes every candidate arrives as installed:false, which is
1698
1715
  indistinguishable from "we checked and it is missing". Render that as
1699
1716
  unknown instead of claiming the CLI is absent; the inventory's source
1700
1717
  field is the flag that tells the two apart. */
1701
1718
  function isCliInventoryScanned(snapshot) {
1702
1719
  var inv = snapshot && snapshot.prerequisites && snapshot.prerequisites.cliInventory;
1703
- return Boolean(inv && inv.source === 'runtime');
1720
+ return Boolean(inv && inv.source === 'runtime' && inv.scannedAt);
1704
1721
  }
1705
1722
 
1706
1723
  function pickInventoryCandidate(snapshot, providerId) {
@@ -1744,45 +1761,133 @@ export function buildDesktopBootstrapPage() {
1744
1761
  || planned.indexOf('install_node_lts_via_nvm') >= 0;
1745
1762
  }
1746
1763
 
1747
- function isNodePrerequisiteReady(setupSnap) {
1764
+ /* Last conclusive answer per audit-backed card.
1765
+ setupSnap carries only the single most recent setup action, so installing
1766
+ any CLI from this grid overwrites the audit result that these cards are
1767
+ built from. Without a memory the Node card would fall back to "unknown"
1768
+ every time the user installed something, which is the state it is least
1769
+ able to leave on its own -- the audit only re-runs on its own terms. */
1770
+ var lastKnownAuditState = { node: null, ollama: null };
1771
+
1772
+ function rememberAuditState(key, state) {
1773
+ if (state !== 'checking') {
1774
+ lastKnownAuditState[key] = state;
1775
+ }
1776
+ return state === 'checking' && lastKnownAuditState[key]
1777
+ ? lastKnownAuditState[key]
1778
+ : state;
1779
+ }
1780
+
1781
+ /* 'checking' | 'ready' | 'missing'.
1782
+ 'checking' and 'missing' were previously the same value, so a card that
1783
+ had not been looked at yet rendered exactly like one that had been looked
1784
+ at and found absent -- a Node card reading "Install" while Node was in
1785
+ fact installed. A failed audit resolves to 'missing' rather than
1786
+ 'checking': it is not coming back on its own, and an install button the
1787
+ user can press beats a spinner that never stops. */
1788
+ function resolveNodePrerequisiteState(setupSnap) {
1748
1789
  var action = setupSnap && setupSnap.state ? setupSnap.state.lastAction : null;
1749
- if (!action || action.runState === 'failed') return false;
1790
+ if (!action) return rememberAuditState('node', 'checking');
1791
+ if (action.runState === 'failed') return rememberAuditState('node', 'missing');
1750
1792
  if (isNodePrerequisiteHelperId(action.helperId)) {
1751
- return action.status === 'ready';
1793
+ return rememberAuditState('node', action.status === 'ready' ? 'ready' : 'missing');
1752
1794
  }
1753
1795
  if (isReadinessAuditAction(action)) {
1754
- return !plannedActionsIncludeNodeInstall(action);
1796
+ return rememberAuditState(
1797
+ 'node',
1798
+ plannedActionsIncludeNodeInstall(action) ? 'missing' : 'ready'
1799
+ );
1755
1800
  }
1756
- return false;
1801
+ /* Some other helper ran and says nothing about Node. */
1802
+ return rememberAuditState('node', 'checking');
1803
+ }
1804
+
1805
+ function buildAuditBackedCard(helper, label, state) {
1806
+ var ready = state === 'ready';
1807
+ return {
1808
+ helperId: helper ? helper.id : null,
1809
+ label: label,
1810
+ /* The status line carries a state in every card in this grid. It used
1811
+ to carry the reason the card exists -- why npm CLIs depend on it --
1812
+ which sits in the same place a state sits and therefore reads as one.
1813
+ The state it implied was "you need this and do not have it", which
1814
+ was wrong for the whole window before the audit reported. */
1815
+ statusText: tx('status.notInstalled'),
1816
+ installed: ready,
1817
+ auditPending: state === 'checking',
1818
+ available: helper ? helper.available : false,
1819
+ supported: helper ? helper.supported : true,
1820
+ supportsApply: ready || !helper ? false : helper.supportsApply
1821
+ };
1757
1822
  }
1758
1823
 
1759
1824
  function buildNodePrerequisiteCard(setupSnap) {
1760
1825
  var helper = pickNodePrerequisiteHelper(setupSnap);
1761
- if (!helper) {
1762
- if (!setupSnap) {
1763
- return {
1764
- helperId: null,
1765
- label: ONBOARDING_CARD_LABELS.node,
1766
- statusText: ' ',
1767
- installed: false,
1768
- available: false,
1769
- supported: true,
1770
- supportsApply: false,
1771
- checkingHint: 'spinner-in-status'
1772
- };
1773
- }
1826
+ if (!helper && setupSnap) {
1774
1827
  return null;
1775
1828
  }
1776
- var nodeReady = isNodePrerequisiteReady(setupSnap);
1777
- return {
1778
- helperId: helper.id,
1779
- label: ONBOARDING_CARD_LABELS.node,
1780
- statusText: ONBOARDING_CARD_STATUS.node,
1781
- installed: nodeReady,
1782
- available: helper.available,
1783
- supported: helper.supported,
1784
- supportsApply: nodeReady ? false : helper.supportsApply
1785
- };
1829
+ return buildAuditBackedCard(
1830
+ helper,
1831
+ ONBOARDING_CARD_LABELS.node,
1832
+ resolveNodePrerequisiteState(setupSnap)
1833
+ );
1834
+ }
1835
+
1836
+ function isLocalModelHelperId(helperId) {
1837
+ return Boolean(helperId && helperId.indexOf(ONBOARDING_LOCAL_MODEL_HELPER_SUFFIX) > 0);
1838
+ }
1839
+
1840
+ function pickLocalModelHelper(setupSnap) {
1841
+ return pickSetupHelper(setupSnap, function (candidate) {
1842
+ return candidate && isLocalModelHelperId(candidate.id);
1843
+ });
1844
+ }
1845
+
1846
+ function plannedActionsIncludeLocalModelInstall(action) {
1847
+ var planned = action && Array.isArray(action.plannedActions) ? action.plannedActions : [];
1848
+ return planned.indexOf('local_model:install_ollama_local_model') >= 0;
1849
+ }
1850
+
1851
+ /* The audit reports installation and API readiness as separate planned
1852
+ actions — start_ollama_local_model means the binary is already on disk,
1853
+ the service just is not up. This card only ever claims installation, so
1854
+ only the install action holds it back. A direct helper run reports the
1855
+ same split through its status, and everything except not_installed
1856
+ means the install itself landed. */
1857
+ function resolveLocalModelState(setupSnap) {
1858
+ var action = setupSnap && setupSnap.state ? setupSnap.state.lastAction : null;
1859
+ if (!action) return rememberAuditState('ollama', 'checking');
1860
+ if (action.runState === 'failed') return rememberAuditState('ollama', 'missing');
1861
+ if (isLocalModelHelperId(action.helperId)) {
1862
+ return rememberAuditState(
1863
+ 'ollama',
1864
+ action.status !== 'not_installed' ? 'ready' : 'missing'
1865
+ );
1866
+ }
1867
+ if (isReadinessAuditAction(action)) {
1868
+ return rememberAuditState(
1869
+ 'ollama',
1870
+ plannedActionsIncludeLocalModelInstall(action) ? 'missing' : 'ready'
1871
+ );
1872
+ }
1873
+ return rememberAuditState('ollama', 'checking');
1874
+ }
1875
+
1876
+ /* Ollama is not a CLI provider, so cats-runtime's setup scan has no entry
1877
+ for it and its inventory candidate is hardcoded to installed:false —
1878
+ a card driven from the inventory could never clear, not even right after
1879
+ a successful install from that very card. Build it from the readiness
1880
+ audit instead, exactly like the Node prerequisite card above. */
1881
+ function buildLocalModelCard(setupSnap) {
1882
+ var helper = pickLocalModelHelper(setupSnap);
1883
+ if (!helper && setupSnap) {
1884
+ return null;
1885
+ }
1886
+ return buildAuditBackedCard(
1887
+ helper,
1888
+ ONBOARDING_CARD_LABELS.ollama,
1889
+ resolveLocalModelState(setupSnap)
1890
+ );
1786
1891
  }
1787
1892
 
1788
1893
  function toProviderInstallCard(candidate, scanned) {
@@ -1858,6 +1963,14 @@ export function buildDesktopBootstrapPage() {
1858
1963
  statusClass = 'c-ok';
1859
1964
  statusContent = tx('status.installedWithCheck');
1860
1965
  btnContent = btnLabel;
1966
+ } else if (card.auditPending) {
1967
+ /* The readiness audit has not reported on this card yet. It runs
1968
+ itself, so there is nothing for the user to press -- and pressing
1969
+ Install here would act on an answer nobody has. */
1970
+ btnLabel = tx('status.checkingInstall');
1971
+ statusClass = '';
1972
+ statusContent = tx('status.checkingInstall');
1973
+ btnContent = spinnerEl();
1861
1974
  } else if (card.inventoryUnknown) {
1862
1975
  btnLabel = tx('status.detect');
1863
1976
  statusClass = '';
@@ -1868,11 +1981,6 @@ export function buildDesktopBootstrapPage() {
1868
1981
  statusClass = '';
1869
1982
  statusContent = card.statusText || ' ';
1870
1983
  btnContent = btnLabel;
1871
- if (card.checkingHint === 'spinner-in-status') {
1872
- statusContent = spinnerEl();
1873
- } else if (card.checkingHint === 'spinner-in-button') {
1874
- btnContent = spinnerEl();
1875
- }
1876
1984
  }
1877
1985
  var btn = el('button', {
1878
1986
  class: 'btn cli-card-btn',
@@ -1881,6 +1989,7 @@ export function buildDesktopBootstrapPage() {
1881
1989
  unknown — the CLI may well already be installed. */
1882
1990
  disabled: installing
1883
1991
  || cliScanInFlight
1992
+ || card.auditPending
1884
1993
  || !card.available
1885
1994
  || !card.supported
1886
1995
  || (!card.inventoryUnknown && card.supportsApply === false),
@@ -1914,11 +2023,8 @@ export function buildDesktopBootstrapPage() {
1914
2023
  if (!candidate || !candidate.available) continue;
1915
2024
  var card = toProviderInstallCard(candidate, scanned);
1916
2025
  if (options && options.waitForNodePrerequisite) {
1917
- card.statusText = options.nodePrerequisiteStatusText || tx('onboarding.installNodeFirst');
2026
+ card.statusText = tx('onboarding.installNodeFirst');
1918
2027
  card.supportsApply = false;
1919
- if (options.showCheckingSpinner) {
1920
- card.checkingHint = 'spinner-in-button';
1921
- }
1922
2028
  }
1923
2029
  card.collapsedSlot = ONBOARDING_COLLAPSED_PROVIDER_IDS.indexOf(providerId) !== -1;
1924
2030
  cards.push(card);
@@ -1930,17 +2036,26 @@ export function buildDesktopBootstrapPage() {
1930
2036
  var expanded = alwaysExpanded || onboardingExpanded;
1931
2037
  var entries = [];
1932
2038
  appendProviderCards(entries, snapshot, ONBOARDING_NATIVE_PROVIDER_ORDER);
2039
+ /* Tail of the native row, where Ollama used to sit as a provider card. */
2040
+ var localModelCard = pickInventoryCandidate(snapshot, 'ollama') ? buildLocalModelCard(setupSnap) : null;
2041
+ if (localModelCard) {
2042
+ entries.push(localModelCard);
2043
+ }
1933
2044
  entries.push({ kind: 'break' });
1934
- var nodeCard = buildNodePrerequisiteCard(setupSnap);
2045
+ var inventory = snapshot.prerequisites && snapshot.prerequisites.cliInventory;
2046
+ var needsNode = inventory && inventory.candidates.some(function (entry) { return ONBOARDING_NPM_PROVIDER_ORDER.indexOf(entry.providerId) >= 0; });
2047
+ var nodeCard = needsNode ? buildNodePrerequisiteCard(setupSnap) : null;
1935
2048
  if (nodeCard) {
1936
2049
  nodeCard.collapsedSlot = ONBOARDING_COLLAPSED_INCLUDES_NODE;
1937
2050
  entries.push(nodeCard);
1938
2051
  }
1939
- var nodeReady = isNodePrerequisiteReady(setupSnap);
2052
+ /* Only a Node we know is missing holds the npm group back. While the
2053
+ audit is still checking, these cards keep their own state: telling a
2054
+ user to install Node first -- and taking Reinstall away from a CLI
2055
+ they already have -- on the strength of an answer nobody has yet is
2056
+ the same mistake the Node card itself was making. */
1940
2057
  appendProviderCards(entries, snapshot, ONBOARDING_NPM_PROVIDER_ORDER, {
1941
- waitForNodePrerequisite: !nodeReady,
1942
- nodePrerequisiteStatusText: setupSnap ? tx('onboarding.installNodeFirst') : ' ',
1943
- showCheckingSpinner: !setupSnap
2058
+ waitForNodePrerequisite: resolveNodePrerequisiteState(setupSnap) === 'missing'
1944
2059
  });
1945
2060
 
1946
2061
  var elements = [];
@@ -2105,7 +2220,7 @@ export function buildDesktopBootstrapPage() {
2105
2220
  function recoveryTitle(snap) {
2106
2221
  if (snap.phase === 'failed') return tx('recovery.title.failed');
2107
2222
  if (snap.phase === 'needs_prerequisites') {
2108
- if (isCliMissing(snap)) {
2223
+ if (isSelectionRequired(snap)) {
2109
2224
  return snap.app && snap.app.setupCompleteAt
2110
2225
  ? tx('recovery.title.installCliContinue')
2111
2226
  : tx('recovery.title.pickCli');
@@ -2129,7 +2244,7 @@ export function buildDesktopBootstrapPage() {
2129
2244
  return tx('recovery.summary.failedHelper');
2130
2245
  }
2131
2246
  if (snap.phase === 'needs_prerequisites') {
2132
- if (isCliMissing(snap)) {
2247
+ if (isSelectionRequired(snap)) {
2133
2248
  return snap.app && snap.app.setupCompleteAt
2134
2249
  ? tx('recovery.summary.noCliAfterSetup')
2135
2250
  : tx('recovery.summary.noCliBeforeSetup');
@@ -2523,6 +2638,79 @@ export function buildDesktopBootstrapPage() {
2523
2638
  return 'retry';
2524
2639
  }
2525
2640
 
2641
+ var selectionDraft = null;
2642
+ var selectionDraftRevision = null;
2643
+ var selectionSaving = false;
2644
+ var selectionError = '';
2645
+ function providerTargetKey(target) {
2646
+ return JSON.stringify([target.provider, target.backend, target.instance]);
2647
+ }
2648
+ function hasSelectionDraftChanges(selection) {
2649
+ if (!selectionDraft) return false;
2650
+ var saved = selection.targets.map(providerTargetKey);
2651
+ return selectionDraftRevision !== selection.revision || saved.length !== selectionDraft.length
2652
+ || saved.some(function (key) { return selectionDraft.indexOf(key) < 0; });
2653
+ }
2654
+ function ProviderSelectionEditor(snap) {
2655
+ var prerequisites = snap.prerequisites || {};
2656
+ var selection = prerequisites.providerSelection;
2657
+ if (!selection) return el('p', {}, tx('selection.loading'));
2658
+ if (!selectionDraft) {
2659
+ selectionDraft = selection.targets.map(providerTargetKey);
2660
+ selectionDraftRevision = selection.revision;
2661
+ }
2662
+ var catalog = (prerequisites.providerCatalog || []).slice();
2663
+ selection.targets.forEach(function (target) {
2664
+ if (!catalog.some(function (entry) { return providerTargetKey(entry) === providerTargetKey(target); })) {
2665
+ catalog.push(Object.assign({ familyLabel: target.provider }, target));
2666
+ }
2667
+ });
2668
+ var choices = catalog.map(function (target) {
2669
+ var key = providerTargetKey(target);
2670
+ var checkbox = el('input', {
2671
+ type: 'checkbox', disabled: selectionSaving,
2672
+ onchange: function () {
2673
+ selectionDraft = selectionDraft.filter(function (value) { return value !== key; });
2674
+ if (this.checked) selectionDraft.push(key);
2675
+ doRender();
2676
+ }
2677
+ });
2678
+ checkbox.checked = selectionDraft.indexOf(key) >= 0;
2679
+ return el('label', { class: 'cli-card' }, checkbox,
2680
+ ' ' + target.familyLabel + ' (' + target.backend + '/' + target.instance + ')');
2681
+ });
2682
+ function saveSelection(reload) {
2683
+ selectionSaving = true;
2684
+ selectionError = '';
2685
+ doRender();
2686
+ bridge.saveProviderSelection({
2687
+ targets: selectionDraft.map(function (key) {
2688
+ var values = JSON.parse(key);
2689
+ return { provider: values[0], backend: values[1], instance: values[2] };
2690
+ }),
2691
+ expectedRevision: reload ? selection.revision : selectionDraftRevision,
2692
+ reload: reload
2693
+ }).then(function (next) {
2694
+ currentSnapshot = next;
2695
+ selectionDraft = null;
2696
+ selectionDraftRevision = null;
2697
+ }).catch(function (error) {
2698
+ selectionError = error && error.message ? error.message : String(error);
2699
+ }).finally(function () { selectionSaving = false; doRender(); });
2700
+ }
2701
+ return el('section', { class: 'selection-editor' },
2702
+ el('h2', {}, tx('selection.title')),
2703
+ el('p', {}, tx('selection.description')),
2704
+ el('div', { class: 'cli-grid' }, choices),
2705
+ el('div', { class: 'onboarding-actions' },
2706
+ el('button', { class: 'btn', disabled: selectionSaving, onclick: function () { saveSelection(false); } }, tx('selection.save')),
2707
+ selection.diskChanged ? el('button', { class: 'btn', disabled: selectionSaving, onclick: function () { saveSelection(true); } }, tx('selection.reload')) : null,
2708
+ hasSelectionDraftChanges(selection) ? el('button', { class: 'btn', disabled: selectionSaving, onclick: function () { selectionDraft = null; doRender(); } }, tx('selection.reset')) : null
2709
+ ),
2710
+ selectionError || selection.error ? el('p', { role: 'alert' }, selectionError || selection.error) : null
2711
+ );
2712
+ }
2713
+
2526
2714
  function showOnboarding(snap) {
2527
2715
  onboardingActive = true;
2528
2716
  splashEl.classList.add('hidden');
@@ -2533,10 +2721,8 @@ export function buildDesktopBootstrapPage() {
2533
2721
 
2534
2722
  onboardingEl.innerHTML = '';
2535
2723
 
2536
- var legacyCliGate = snap.app && snap.app.onboardingMode === 'cli_inventory_gate';
2537
- var inventory = (snap.prerequisites && snap.prerequisites.cliInventory) || {};
2538
- var installedCount = Array.isArray(inventory.installed) ? inventory.installed.length : 0;
2539
- var continueDisabled = legacyCliGate && installedCount === 0;
2724
+ var selection = snap.prerequisites && snap.prerequisites.providerSelection;
2725
+ var continueDisabled = !selection || selection.state === 'missing' || selection.state === 'invalid' || hasSelectionDraftChanges(selection);
2540
2726
 
2541
2727
  var continueBtn = el('button', {
2542
2728
  class: 'btn',
@@ -2563,7 +2749,7 @@ export function buildDesktopBootstrapPage() {
2563
2749
  : (isCliInventoryScanned(snap) ? tx('onboarding.rescanClis') : tx('onboarding.scanClis'));
2564
2750
  actions.push(el('button', {
2565
2751
  class: 'btn',
2566
- disabled: cliScanInFlight,
2752
+ disabled: cliScanInFlight || continueDisabled,
2567
2753
  onclick: handleCliScanClick
2568
2754
  }, scanLabel));
2569
2755
  if (cardSet.hasHiddenCards) {
@@ -2583,6 +2769,7 @@ export function buildDesktopBootstrapPage() {
2583
2769
  ),
2584
2770
  el('p', { class: 'onboarding-headline' },
2585
2771
  tx('onboarding.headline')),
2772
+ ProviderSelectionEditor(snap),
2586
2773
  el('div', { class: 'onboarding-actions' }, actions),
2587
2774
  el('div', { class: 'cli-grid' }, cardSet.elements)
2588
2775
  );
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrapPage.js","sourceRoot":"","sources":["../../desktop/host/bootstrapPage.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,yBAAyB;IACvC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAisFD,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"bootstrapPage.js","sourceRoot":"","sources":["../../desktop/host/bootstrapPage.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,yBAAyB;IACvC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA43FD,CAAC;AACT,CAAC"}
@@ -1,16 +1,37 @@
1
1
  import { type DesktopCliInventory } from './contracts.js';
2
+ import { type ProviderSelection, type ProviderSelectionCatalogEntry, type SelectedProviderTarget } from './providerSelection.js';
2
3
  export interface RuntimeCliInventoryProbe {
4
+ selection: ProviderSelection;
5
+ universe: ProviderSelectionCatalogEntry[];
6
+ bootstrapRequired?: boolean;
3
7
  state?: {
4
8
  status?: 'pending' | 'scanning' | 'ready' | 'applied' | 'error' | string;
5
9
  error?: string | null;
6
10
  } | null;
7
11
  scan: {
12
+ revision: string;
8
13
  scannedAt?: string | null;
9
- providers: Array<{
10
- provider: string;
14
+ providers: Array<SelectedProviderTarget & {
11
15
  available: boolean;
16
+ authStatus?: string;
12
17
  }>;
13
18
  } | null;
14
19
  }
20
+ /**
21
+ * True when the runtime's own bootstrap answer on a probe disagrees with the
22
+ * one the caller has cached.
23
+ *
24
+ * The desktop snapshot phase is derived from a cached GET /health payload that
25
+ * is only refetched at startup and on a few user actions, never on a timer.
26
+ * Applying a provider config takes the runtime out of bootstrap in-process, so
27
+ * nothing tells the host: it keeps republishing "Cats Runtime setup is still
28
+ * required" from a payload captured before the apply, until the app restarts.
29
+ *
30
+ * Every probe already carries the runtime's current answer, so the
31
+ * disagreement is visible without asking for anything extra. A caller that has
32
+ * no cached answer yet, or a runtime too old to send the field, reports no
33
+ * disagreement -- absence of a signal is not a claim that the state changed.
34
+ */
35
+ export declare function probeContradictsCachedBootstrapState(probe: RuntimeCliInventoryProbe | null, cachedBootstrapRequired: boolean | null): boolean;
15
36
  export declare function buildDesktopCliInventoryFromRuntime(probe: RuntimeCliInventoryProbe | null, platform?: NodeJS.Platform): DesktopCliInventory;
16
37
  //# sourceMappingURL=cliInventoryProbe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cliInventoryProbe.d.ts","sourceRoot":"","sources":["../../desktop/host/cliInventoryProbe.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EAGzB,MAAM,gBAAgB,CAAC;AAKxB,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;QACzE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,GAAG,IAAI,CAAC;IACT,IAAI,EAAE;QACJ,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,SAAS,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KAC5D,GAAG,IAAI,CAAC;CACV;AA8ED,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,wBAAwB,GAAG,IAAI,EACtC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,mBAAmB,CAsCrB"}
1
+ {"version":3,"file":"cliInventoryProbe.d.ts","sourceRoot":"","sources":["../../desktop/host/cliInventoryProbe.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EAGzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAgC,KAAK,iBAAiB,EAAE,KAAK,6BAA6B,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAK/J,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,EAAE,6BAA6B,EAAE,CAAC;IAK1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;QACzE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,GAAG,IAAI,CAAC;IACT,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,SAAS,EAAE,KAAK,CAAC,sBAAsB,GAAG;YAAE,SAAS,EAAE,OAAO,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACxF,GAAG,IAAI,CAAC;CACV;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,wBAAwB,GAAG,IAAI,EACtC,uBAAuB,EAAE,OAAO,GAAG,IAAI,GACtC,OAAO,CAKT;AA6FD,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,wBAAwB,GAAG,IAAI,EACtC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,mBAAmB,CAiDrB"}