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