@cats-inc/cats-platform 0.1.21 → 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 (448) hide show
  1. package/.env.example +3 -7
  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 +114 -34
  8. package/build/desktop/bootstrapPage.js.map +1 -1
  9. package/build/desktop/cliInventoryProbe.d.ts +5 -2
  10. package/build/desktop/cliInventoryProbe.d.ts.map +1 -1
  11. package/build/desktop/cliInventoryProbe.js +14 -11
  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 +10 -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 +144 -249
  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 +14 -33
  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/updateDialog.d.ts +27 -1
  51. package/build/desktop/updateDialog.d.ts.map +1 -1
  52. package/build/desktop/updateDialog.js +85 -5
  53. package/build/desktop/updateDialog.js.map +1 -1
  54. package/build/renderer/assets/{ActiveSessionPermissionChip-DImsuR9T.js → ActiveSessionPermissionChip-CAgN-tXv.js} +1 -1
  55. package/build/renderer/assets/App-BZA23O2J.js +2 -0
  56. package/build/renderer/assets/App-DxsV-tKS.css +1 -0
  57. package/build/renderer/assets/{App-DKOSn0o_.js → App-YqprEL2n.js} +1 -1
  58. package/build/renderer/assets/App-rGw9J8PZ.js +1 -0
  59. package/build/renderer/assets/WorkspaceAppRoutes-BCHCikmJ.js +1 -0
  60. package/build/renderer/assets/app-BV3UAQkR.css +1 -0
  61. package/build/renderer/assets/app-CVPqqfZo.js +45 -0
  62. package/build/renderer/assets/conversationSidebarRecentEntries-iqaLqA1n.js +6 -0
  63. package/build/renderer/assets/{useDraftSessionChips-DCIId0eY.js → useDraftSessionChips-D9BX6X92.js} +1 -1
  64. package/build/renderer/index.html +2 -2
  65. package/build/server/app/renderer/providerCatalogClient.d.ts.map +1 -1
  66. package/build/server/app/renderer/providerCatalogClient.js +15 -6
  67. package/build/server/app/renderer/providerCatalogClient.js.map +1 -1
  68. package/build/server/app/renderer/providerRegistryClient.d.ts +1 -1
  69. package/build/server/app/renderer/providerRegistryClient.d.ts.map +1 -1
  70. package/build/server/app/renderer/providerRegistryClient.js +23 -41
  71. package/build/server/app/renderer/providerRegistryClient.js.map +1 -1
  72. package/build/server/app/server/appPackageRoutes.d.ts +2 -0
  73. package/build/server/app/server/appPackageRoutes.d.ts.map +1 -1
  74. package/build/server/app/server/appPackageRoutes.js +105 -0
  75. package/build/server/app/server/appPackageRoutes.js.map +1 -1
  76. package/build/server/app/server/authGatePolicy.js +7 -1
  77. package/build/server/app/server/authGatePolicy.js.map +1 -1
  78. package/build/server/app/server/contracts.d.ts +15 -0
  79. package/build/server/app/server/contracts.d.ts.map +1 -1
  80. package/build/server/app/server/dependencies.d.ts.map +1 -1
  81. package/build/server/app/server/dependencies.js +42 -1
  82. package/build/server/app/server/dependencies.js.map +1 -1
  83. package/build/server/app/server/goldenPathStartupResume.d.ts +55 -0
  84. package/build/server/app/server/goldenPathStartupResume.d.ts.map +1 -0
  85. package/build/server/app/server/goldenPathStartupResume.js +109 -0
  86. package/build/server/app/server/goldenPathStartupResume.js.map +1 -0
  87. package/build/server/app/server/platformSetupRoutes.d.ts.map +1 -1
  88. package/build/server/app/server/platformSetupRoutes.js +1 -13
  89. package/build/server/app/server/platformSetupRoutes.js.map +1 -1
  90. package/build/server/app/server/polling.d.ts.map +1 -1
  91. package/build/server/app/server/polling.js +2 -0
  92. package/build/server/app/server/polling.js.map +1 -1
  93. package/build/server/app/server/requestRouter.d.ts.map +1 -1
  94. package/build/server/app/server/requestRouter.js +30 -0
  95. package/build/server/app/server/requestRouter.js.map +1 -1
  96. package/build/server/app/server/runtimeSurfaceProxy.d.ts.map +1 -1
  97. package/build/server/app/server/runtimeSurfaceProxy.js +4 -2
  98. package/build/server/app/server/runtimeSurfaceProxy.js.map +1 -1
  99. package/build/server/app/server/startupRecovery.d.ts.map +1 -1
  100. package/build/server/app/server/startupRecovery.js +5 -0
  101. package/build/server/app/server/startupRecovery.js.map +1 -1
  102. package/build/server/app/server/telegramCommandSurface.d.ts +29 -0
  103. package/build/server/app/server/telegramCommandSurface.d.ts.map +1 -0
  104. package/build/server/app/server/telegramCommandSurface.js +123 -0
  105. package/build/server/app/server/telegramCommandSurface.js.map +1 -0
  106. package/build/server/app/server/transportWorkGoldenPath.d.ts +82 -0
  107. package/build/server/app/server/transportWorkGoldenPath.d.ts.map +1 -0
  108. package/build/server/app/server/transportWorkGoldenPath.js +307 -0
  109. package/build/server/app/server/transportWorkGoldenPath.js.map +1 -0
  110. package/build/server/config.d.ts +21 -0
  111. package/build/server/config.d.ts.map +1 -1
  112. package/build/server/config.js +12 -0
  113. package/build/server/config.js.map +1 -1
  114. package/build/server/design/components/providerModelFieldsSupport.d.ts +3 -3
  115. package/build/server/design/components/providerModelFieldsSupport.d.ts.map +1 -1
  116. package/build/server/design/components/providerModelFieldsSupport.js +37 -38
  117. package/build/server/design/components/providerModelFieldsSupport.js.map +1 -1
  118. package/build/server/design/components/useProviderCatalogState.d.ts +1 -0
  119. package/build/server/design/components/useProviderCatalogState.d.ts.map +1 -1
  120. package/build/server/design/components/useProviderCatalogState.js +1 -0
  121. package/build/server/design/components/useProviderCatalogState.js.map +1 -1
  122. package/build/server/design/components/useProviderRegistryAutoRecheck.d.ts.map +1 -1
  123. package/build/server/design/components/useProviderRegistryAutoRecheck.js +20 -13
  124. package/build/server/design/components/useProviderRegistryAutoRecheck.js.map +1 -1
  125. package/build/server/design/components/useProviderRegistryState.d.ts.map +1 -1
  126. package/build/server/design/components/useProviderRegistryState.js +12 -25
  127. package/build/server/design/components/useProviderRegistryState.js.map +1 -1
  128. package/build/server/design/components/useProviderTargetReconciliation.d.ts.map +1 -1
  129. package/build/server/design/components/useProviderTargetReconciliation.js +2 -1
  130. package/build/server/design/components/useProviderTargetReconciliation.js.map +1 -1
  131. package/build/server/index.js +4 -0
  132. package/build/server/index.js.map +1 -1
  133. package/build/server/platform/apps/packageInstaller.d.ts +19 -0
  134. package/build/server/platform/apps/packageInstaller.d.ts.map +1 -0
  135. package/build/server/platform/apps/packageInstaller.js +92 -0
  136. package/build/server/platform/apps/packageInstaller.js.map +1 -0
  137. package/build/server/platform/apps/registry.d.ts +6 -0
  138. package/build/server/platform/apps/registry.d.ts.map +1 -1
  139. package/build/server/platform/apps/registry.js +24 -0
  140. package/build/server/platform/apps/registry.js.map +1 -1
  141. package/build/server/platform/apps/renderer.d.ts +6 -0
  142. package/build/server/platform/apps/renderer.d.ts.map +1 -0
  143. package/build/server/platform/apps/renderer.js +18 -0
  144. package/build/server/platform/apps/renderer.js.map +1 -0
  145. package/build/server/platform/runtime/deliveryClient.d.ts +111 -0
  146. package/build/server/platform/runtime/deliveryClient.d.ts.map +1 -0
  147. package/build/server/platform/runtime/deliveryClient.js +289 -0
  148. package/build/server/platform/runtime/deliveryClient.js.map +1 -0
  149. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.d.ts +1 -0
  150. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.d.ts.map +1 -1
  151. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.js +10 -0
  152. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.js.map +1 -1
  153. package/build/server/platform/supervision/runtimeBoundary.d.ts +11 -1
  154. package/build/server/platform/supervision/runtimeBoundary.d.ts.map +1 -1
  155. package/build/server/platform/supervision/runtimeBoundary.js +2 -2
  156. package/build/server/platform/supervision/runtimeBoundary.js.map +1 -1
  157. package/build/server/platform/transports/telegram/bridge.d.ts +18 -0
  158. package/build/server/platform/transports/telegram/bridge.d.ts.map +1 -1
  159. package/build/server/platform/transports/telegram/bridge.js +176 -0
  160. package/build/server/platform/transports/telegram/bridge.js.map +1 -1
  161. package/build/server/platform/transports/telegram/commandPort.d.ts +40 -0
  162. package/build/server/platform/transports/telegram/commandPort.d.ts.map +1 -0
  163. package/build/server/platform/transports/telegram/commandPort.js +17 -0
  164. package/build/server/platform/transports/telegram/commandPort.js.map +1 -0
  165. package/build/server/platform/transports/telegram/commandRouter.d.ts +22 -0
  166. package/build/server/platform/transports/telegram/commandRouter.d.ts.map +1 -1
  167. package/build/server/platform/transports/telegram/commandRouter.js.map +1 -1
  168. package/build/server/platform/transports/telegram/commands/index.d.ts.map +1 -1
  169. package/build/server/platform/transports/telegram/commands/index.js +38 -0
  170. package/build/server/platform/transports/telegram/commands/index.js.map +1 -1
  171. package/build/server/platform/transports/telegram/ingressDispatch.d.ts +56 -0
  172. package/build/server/platform/transports/telegram/ingressDispatch.d.ts.map +1 -0
  173. package/build/server/platform/transports/telegram/ingressDispatch.js +93 -0
  174. package/build/server/platform/transports/telegram/ingressDispatch.js.map +1 -0
  175. package/build/server/platform/transports/telegram/polling.d.ts +34 -0
  176. package/build/server/platform/transports/telegram/polling.d.ts.map +1 -1
  177. package/build/server/platform/transports/telegram/polling.js +86 -9
  178. package/build/server/platform/transports/telegram/polling.js.map +1 -1
  179. package/build/server/platform/transports/telegram/relay/index.d.ts +3 -0
  180. package/build/server/platform/transports/telegram/relay/index.d.ts.map +1 -1
  181. package/build/server/platform/transports/telegram/relay/index.js +5 -1
  182. package/build/server/platform/transports/telegram/relay/index.js.map +1 -1
  183. package/build/server/platform/transports/telegram/relay/ingress.d.ts +2 -0
  184. package/build/server/platform/transports/telegram/relay/ingress.d.ts.map +1 -1
  185. package/build/server/platform/transports/telegram/relay/ingress.js +1 -1
  186. package/build/server/platform/transports/telegram/relay/ingress.js.map +1 -1
  187. package/build/server/platform/transports/work-delivery/actionTokens.d.ts +66 -0
  188. package/build/server/platform/transports/work-delivery/actionTokens.d.ts.map +1 -0
  189. package/build/server/platform/transports/work-delivery/actionTokens.js +145 -0
  190. package/build/server/platform/transports/work-delivery/actionTokens.js.map +1 -0
  191. package/build/server/platform/transports/work-delivery/contracts.d.ts +172 -0
  192. package/build/server/platform/transports/work-delivery/contracts.d.ts.map +1 -0
  193. package/build/server/platform/transports/work-delivery/contracts.js +26 -0
  194. package/build/server/platform/transports/work-delivery/contracts.js.map +1 -0
  195. package/build/server/platform/transports/work-delivery/deliveryGates.d.ts +32 -0
  196. package/build/server/platform/transports/work-delivery/deliveryGates.d.ts.map +1 -0
  197. package/build/server/platform/transports/work-delivery/deliveryGates.js +45 -0
  198. package/build/server/platform/transports/work-delivery/deliveryGates.js.map +1 -0
  199. package/build/server/platform/transports/work-delivery/inboundClassification.d.ts +31 -0
  200. package/build/server/platform/transports/work-delivery/inboundClassification.d.ts.map +1 -0
  201. package/build/server/platform/transports/work-delivery/inboundClassification.js +52 -0
  202. package/build/server/platform/transports/work-delivery/inboundClassification.js.map +1 -0
  203. package/build/server/platform/transports/work-delivery/outbox.d.ts +84 -0
  204. package/build/server/platform/transports/work-delivery/outbox.d.ts.map +1 -0
  205. package/build/server/platform/transports/work-delivery/outbox.js +270 -0
  206. package/build/server/platform/transports/work-delivery/outbox.js.map +1 -0
  207. package/build/server/platform/transports/work-delivery/permissionEnvelope.d.ts +57 -0
  208. package/build/server/platform/transports/work-delivery/permissionEnvelope.d.ts.map +1 -0
  209. package/build/server/platform/transports/work-delivery/permissionEnvelope.js +74 -0
  210. package/build/server/platform/transports/work-delivery/permissionEnvelope.js.map +1 -0
  211. package/build/server/platform/transports/work-delivery/port.d.ts +60 -0
  212. package/build/server/platform/transports/work-delivery/port.d.ts.map +1 -0
  213. package/build/server/platform/transports/work-delivery/port.js +15 -0
  214. package/build/server/platform/transports/work-delivery/port.js.map +1 -0
  215. package/build/server/platform/transports/work-delivery/proposal.d.ts +31 -0
  216. package/build/server/platform/transports/work-delivery/proposal.d.ts.map +1 -0
  217. package/build/server/platform/transports/work-delivery/proposal.js +59 -0
  218. package/build/server/platform/transports/work-delivery/proposal.js.map +1 -0
  219. package/build/server/platform/transports/work-delivery/readiness.d.ts +61 -0
  220. package/build/server/platform/transports/work-delivery/readiness.d.ts.map +1 -0
  221. package/build/server/platform/transports/work-delivery/readiness.js +123 -0
  222. package/build/server/platform/transports/work-delivery/readiness.js.map +1 -0
  223. package/build/server/platform/transports/work-delivery/stageProjection.d.ts +43 -0
  224. package/build/server/platform/transports/work-delivery/stageProjection.d.ts.map +1 -0
  225. package/build/server/platform/transports/work-delivery/stageProjection.js +132 -0
  226. package/build/server/platform/transports/work-delivery/stageProjection.js.map +1 -0
  227. package/build/server/platform/transports/work-delivery/stateStore.d.ts +21 -0
  228. package/build/server/platform/transports/work-delivery/stateStore.d.ts.map +1 -0
  229. package/build/server/platform/transports/work-delivery/stateStore.js +193 -0
  230. package/build/server/platform/transports/work-delivery/stateStore.js.map +1 -0
  231. package/build/server/platform/transports/work-delivery/telemetry.d.ts +49 -0
  232. package/build/server/platform/transports/work-delivery/telemetry.d.ts.map +1 -0
  233. package/build/server/platform/transports/work-delivery/telemetry.js +80 -0
  234. package/build/server/platform/transports/work-delivery/telemetry.js.map +1 -0
  235. package/build/server/products/chat/api/contracts.d.ts +10 -0
  236. package/build/server/products/chat/api/contracts.d.ts.map +1 -1
  237. package/build/server/products/chat/api/resources/channelRoutes.d.ts.map +1 -1
  238. package/build/server/products/chat/api/resources/channelRoutes.js +27 -1
  239. package/build/server/products/chat/api/resources/channelRoutes.js.map +1 -1
  240. package/build/server/products/chat/api/routeSupport.d.ts +8 -0
  241. package/build/server/products/chat/api/routeSupport.d.ts.map +1 -1
  242. package/build/server/products/chat/api/routeSupport.js +5 -4
  243. package/build/server/products/chat/api/routeSupport.js.map +1 -1
  244. package/build/server/products/chat/api/setupRoutes.d.ts.map +1 -1
  245. package/build/server/products/chat/api/setupRoutes.js +23 -8
  246. package/build/server/products/chat/api/setupRoutes.js.map +1 -1
  247. package/build/server/products/chat/state/model/channelExecutionTargets.d.ts +15 -0
  248. package/build/server/products/chat/state/model/channelExecutionTargets.d.ts.map +1 -1
  249. package/build/server/products/chat/state/model/channelExecutionTargets.js +25 -0
  250. package/build/server/products/chat/state/model/channelExecutionTargets.js.map +1 -1
  251. package/build/server/products/chat/state/model/index.d.ts +1 -1
  252. package/build/server/products/chat/state/model/index.d.ts.map +1 -1
  253. package/build/server/products/chat/state/model/index.js +1 -1
  254. package/build/server/products/chat/state/model/index.js.map +1 -1
  255. package/build/server/products/code/api/relayRoutes.d.ts.map +1 -1
  256. package/build/server/products/code/api/relayRoutes.js +36 -7
  257. package/build/server/products/code/api/relayRoutes.js.map +1 -1
  258. package/build/server/products/code/state/relayState.d.ts +2 -1
  259. package/build/server/products/code/state/relayState.d.ts.map +1 -1
  260. package/build/server/products/code/state/relayState.js +7 -7
  261. package/build/server/products/code/state/relayState.js.map +1 -1
  262. package/build/server/products/shared/api/workspaceContracts.d.ts +5 -0
  263. package/build/server/products/shared/api/workspaceContracts.d.ts.map +1 -1
  264. package/build/server/products/work/api/goldenPathProjection.d.ts +156 -0
  265. package/build/server/products/work/api/goldenPathProjection.d.ts.map +1 -0
  266. package/build/server/products/work/api/goldenPathProjection.js +252 -0
  267. package/build/server/products/work/api/goldenPathProjection.js.map +1 -0
  268. package/build/server/products/work/api/index.d.ts +54 -1
  269. package/build/server/products/work/api/index.d.ts.map +1 -1
  270. package/build/server/products/work/api/index.js +182 -4
  271. package/build/server/products/work/api/index.js.map +1 -1
  272. package/build/server/products/work/api/projection.d.ts +7 -1
  273. package/build/server/products/work/api/projection.d.ts.map +1 -1
  274. package/build/server/products/work/api/projection.js +7 -1
  275. package/build/server/products/work/api/projection.js.map +1 -1
  276. package/build/server/products/work/shared/apiPaths.d.ts +8 -0
  277. package/build/server/products/work/shared/apiPaths.d.ts.map +1 -1
  278. package/build/server/products/work/shared/apiPaths.js +8 -0
  279. package/build/server/products/work/shared/apiPaths.js.map +1 -1
  280. package/build/server/products/work/shared/workGoldenPathMessages.d.ts +83 -0
  281. package/build/server/products/work/shared/workGoldenPathMessages.d.ts.map +1 -0
  282. package/build/server/products/work/shared/workGoldenPathMessages.js +211 -0
  283. package/build/server/products/work/shared/workGoldenPathMessages.js.map +1 -0
  284. package/build/server/products/work/shared/workGoldenPathMetadata.d.ts +45 -0
  285. package/build/server/products/work/shared/workGoldenPathMetadata.d.ts.map +1 -0
  286. package/build/server/products/work/shared/workGoldenPathMetadata.js +122 -0
  287. package/build/server/products/work/shared/workGoldenPathMetadata.js.map +1 -0
  288. package/build/server/products/work/state/workCompletionEvidence.d.ts +42 -0
  289. package/build/server/products/work/state/workCompletionEvidence.d.ts.map +1 -0
  290. package/build/server/products/work/state/workCompletionEvidence.js +59 -0
  291. package/build/server/products/work/state/workCompletionEvidence.js.map +1 -0
  292. package/build/server/products/work/state/workExecutionTaskDelegate.d.ts +16 -0
  293. package/build/server/products/work/state/workExecutionTaskDelegate.d.ts.map +1 -1
  294. package/build/server/products/work/state/workExecutionTaskDelegate.js +91 -68
  295. package/build/server/products/work/state/workExecutionTaskDelegate.js.map +1 -1
  296. package/build/server/products/work/state/workGoldenPathAdmission.d.ts +78 -0
  297. package/build/server/products/work/state/workGoldenPathAdmission.d.ts.map +1 -0
  298. package/build/server/products/work/state/workGoldenPathAdmission.js +249 -0
  299. package/build/server/products/work/state/workGoldenPathAdmission.js.map +1 -0
  300. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.d.ts +33 -0
  301. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.d.ts.map +1 -0
  302. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.js +161 -0
  303. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.js.map +1 -0
  304. package/build/server/products/work/state/workGoldenPathIntake.d.ts +34 -0
  305. package/build/server/products/work/state/workGoldenPathIntake.d.ts.map +1 -0
  306. package/build/server/products/work/state/workGoldenPathIntake.js +50 -0
  307. package/build/server/products/work/state/workGoldenPathIntake.js.map +1 -0
  308. package/build/server/products/work/state/workGoldenPathLifecycle.d.ts +44 -0
  309. package/build/server/products/work/state/workGoldenPathLifecycle.d.ts.map +1 -0
  310. package/build/server/products/work/state/workGoldenPathLifecycle.js +146 -0
  311. package/build/server/products/work/state/workGoldenPathLifecycle.js.map +1 -0
  312. package/build/server/products/work/state/workGoldenPathPublish.d.ts +84 -0
  313. package/build/server/products/work/state/workGoldenPathPublish.d.ts.map +1 -0
  314. package/build/server/products/work/state/workGoldenPathPublish.js +488 -0
  315. package/build/server/products/work/state/workGoldenPathPublish.js.map +1 -0
  316. package/build/server/products/work/state/workGoldenPathRunner.d.ts +121 -0
  317. package/build/server/products/work/state/workGoldenPathRunner.d.ts.map +1 -0
  318. package/build/server/products/work/state/workGoldenPathRunner.js +447 -0
  319. package/build/server/products/work/state/workGoldenPathRunner.js.map +1 -0
  320. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.d.ts +74 -0
  321. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.d.ts.map +1 -0
  322. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.js +239 -0
  323. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.js.map +1 -0
  324. package/build/server/products/work/state/workGoldenPathService.d.ts +152 -0
  325. package/build/server/products/work/state/workGoldenPathService.d.ts.map +1 -0
  326. package/build/server/products/work/state/workGoldenPathService.js +1057 -0
  327. package/build/server/products/work/state/workGoldenPathService.js.map +1 -0
  328. package/build/server/products/work/state/workGoldenPathTelegramPort.d.ts +87 -0
  329. package/build/server/products/work/state/workGoldenPathTelegramPort.d.ts.map +1 -0
  330. package/build/server/products/work/state/workGoldenPathTelegramPort.js +220 -0
  331. package/build/server/products/work/state/workGoldenPathTelegramPort.js.map +1 -0
  332. package/build/server/runtime/client.d.ts +13 -0
  333. package/build/server/runtime/client.d.ts.map +1 -1
  334. package/build/server/runtime/client.js +39 -0
  335. package/build/server/runtime/client.js.map +1 -1
  336. package/build/server/runtime/setup.d.ts +10 -4
  337. package/build/server/runtime/setup.d.ts.map +1 -1
  338. package/build/server/runtime/setup.js +14 -18
  339. package/build/server/runtime/setup.js.map +1 -1
  340. package/build/server/runtime/usageSnapshot.d.ts +3 -0
  341. package/build/server/runtime/usageSnapshot.d.ts.map +1 -0
  342. package/build/server/runtime/usageSnapshot.js +69 -0
  343. package/build/server/runtime/usageSnapshot.js.map +1 -0
  344. package/build/server/server/routes/providerCapabilityBootstrap.d.ts +69 -0
  345. package/build/server/server/routes/providerCapabilityBootstrap.d.ts.map +1 -0
  346. package/build/server/server/routes/providerCapabilityBootstrap.js +165 -0
  347. package/build/server/server/routes/providerCapabilityBootstrap.js.map +1 -0
  348. package/build/server/server/routes/providers.d.ts.map +1 -1
  349. package/build/server/server/routes/providers.js +112 -81
  350. package/build/server/server/routes/providers.js.map +1 -1
  351. package/build/server/server/routes/telegram.d.ts +9 -0
  352. package/build/server/server/routes/telegram.d.ts.map +1 -1
  353. package/build/server/server/routes/telegram.js +79 -72
  354. package/build/server/server/routes/telegram.js.map +1 -1
  355. package/build/server/shared/catsAppManifest.d.ts +3 -1
  356. package/build/server/shared/catsAppManifest.d.ts.map +1 -1
  357. package/build/server/shared/catsAppManifest.js +2 -0
  358. package/build/server/shared/catsAppManifest.js.map +1 -1
  359. package/build/server/shared/executionLabel.d.ts.map +1 -1
  360. package/build/server/shared/executionLabel.js +8 -1
  361. package/build/server/shared/executionLabel.js.map +1 -1
  362. package/build/server/shared/i18n/catalogs/en.d.ts.map +1 -1
  363. package/build/server/shared/i18n/catalogs/en.js +198 -3
  364. package/build/server/shared/i18n/catalogs/en.js.map +1 -1
  365. package/build/server/shared/i18n/catalogs/zh-TW.d.ts.map +1 -1
  366. package/build/server/shared/i18n/catalogs/zh-TW.js +197 -3
  367. package/build/server/shared/i18n/catalogs/zh-TW.js.map +1 -1
  368. package/build/server/shared/i18n/index.d.ts +192 -0
  369. package/build/server/shared/i18n/index.d.ts.map +1 -1
  370. package/build/server/shared/i18n/messageKeys.d.ts +192 -0
  371. package/build/server/shared/i18n/messageKeys.d.ts.map +1 -1
  372. package/build/server/shared/i18n/messageKeys.js +192 -0
  373. package/build/server/shared/i18n/messageKeys.js.map +1 -1
  374. package/build/server/shared/platformSetupOperation.d.ts +2 -0
  375. package/build/server/shared/platformSetupOperation.d.ts.map +1 -0
  376. package/build/server/shared/platformSetupOperation.js +9 -0
  377. package/build/server/shared/platformSetupOperation.js.map +1 -0
  378. package/build/server/shared/providerCatalog.d.ts +5 -2
  379. package/build/server/shared/providerCatalog.d.ts.map +1 -1
  380. package/build/server/shared/providerCatalog.js +6 -0
  381. package/build/server/shared/providerCatalog.js.map +1 -1
  382. package/build/server/shared/providerCatalogData.d.ts +28 -22
  383. package/build/server/shared/providerCatalogData.d.ts.map +1 -1
  384. package/build/server/shared/providerCatalogData.js +22 -10
  385. package/build/server/shared/providerCatalogData.js.map +1 -1
  386. package/build/server/shared/providerCatalogInstances.d.ts.map +1 -1
  387. package/build/server/shared/providerCatalogInstances.js +3 -0
  388. package/build/server/shared/providerCatalogInstances.js.map +1 -1
  389. package/build/server/shared/providerModelLabelRegistry.d.ts +29 -0
  390. package/build/server/shared/providerModelLabelRegistry.d.ts.map +1 -0
  391. package/build/server/shared/providerModelLabelRegistry.js +49 -0
  392. package/build/server/shared/providerModelLabelRegistry.js.map +1 -0
  393. package/build/server/shared/providerSelection.d.ts.map +1 -1
  394. package/build/server/shared/providerSelection.js +10 -13
  395. package/build/server/shared/providerSelection.js.map +1 -1
  396. package/build/server/shared/runtimeSetup.d.ts +17 -4
  397. package/build/server/shared/runtimeSetup.d.ts.map +1 -1
  398. package/build/server/shared/runtimeStatusPresentation.js +1 -1
  399. package/build/server/shared/runtimeStatusPresentation.js.map +1 -1
  400. package/package.json +23 -1
  401. package/packages/app-sdk/browser.d.ts +51 -0
  402. package/packages/app-sdk/browser.js +48 -0
  403. package/packages/app-sdk/package.d.ts +14 -0
  404. package/packages/app-sdk/package.js +131 -0
  405. package/packages/app-sdk/package.json +7 -0
  406. package/scripts/README.md +43 -26
  407. package/scripts/build-desktop-installer.mjs +15 -0
  408. package/scripts/build-test-ui.mjs +1 -1
  409. package/scripts/bundle-server.mjs +23 -10
  410. package/scripts/linux/build-desktop-package.sh +6 -6
  411. package/scripts/linux/install-antigravity.sh +0 -0
  412. package/scripts/linux/install-devin.sh +0 -0
  413. package/scripts/linux/install-meta-cli.sh +8 -0
  414. package/scripts/linux/provider-cli-common.sh +103 -30
  415. package/scripts/linux/sync-agent-skills.sh +27 -5
  416. package/scripts/linux/test-linux-package-smoke.sh +4 -3
  417. package/scripts/linux/upgrade-cli-tools.sh +1 -1
  418. package/scripts/macos/build-desktop-package.sh +5 -5
  419. package/scripts/macos/install-antigravity.sh +0 -0
  420. package/scripts/macos/install-devin.sh +0 -0
  421. package/scripts/macos/install-meta-cli.sh +8 -0
  422. package/scripts/macos/provider-cli-common.sh +103 -30
  423. package/scripts/macos/sync-agent-skills.sh +27 -5
  424. package/scripts/macos/test-macos-package-smoke.sh +4 -3
  425. package/scripts/macos/upgrade-cli-tools.sh +1 -1
  426. package/scripts/package-desktop.mjs +15 -2
  427. package/scripts/testing/check-usage-app.mts +266 -0
  428. package/scripts/testing/usage-app-smoke-electron.cjs +10 -0
  429. package/scripts/testing/usage-app-smoke-renderer.tsx +8 -0
  430. package/scripts/verify-desktop-app-bundle.mjs +108 -0
  431. package/scripts/windows/Build-DesktopPackage.ps1 +9 -6
  432. package/scripts/windows/{Install-Aider.ps1 → Install-MetaCli.ps1} +180 -92
  433. package/scripts/windows/Install-Ollama.ps1 +4 -1
  434. package/scripts/windows/Sync-AgentSkills.ps1 +29 -6
  435. package/scripts/windows/Test-WindowsInstallerSmoke.ps1 +2 -1
  436. package/build/desktop/updateNotifications.d.ts +0 -64
  437. package/build/desktop/updateNotifications.d.ts.map +0 -1
  438. package/build/desktop/updateNotifications.js +0 -143
  439. package/build/desktop/updateNotifications.js.map +0 -1
  440. package/build/renderer/assets/App-BfOvMP2m.js +0 -1
  441. package/build/renderer/assets/App-DGwkRFZl.css +0 -1
  442. package/build/renderer/assets/App-DWd7I3Z2.js +0 -2
  443. package/build/renderer/assets/WorkspaceAppRoutes-CrbTA9En.js +0 -1
  444. package/build/renderer/assets/app-BTww3Hl4.js +0 -43
  445. package/build/renderer/assets/app-CPxWQwLA.css +0 -1
  446. package/build/renderer/assets/conversationSidebarRecentEntries-QuaOPxCb.js +0 -6
  447. package/scripts/linux/install-aider.sh +0 -8
  448. package/scripts/macos/install-aider.sh +0 -8
@@ -1,10 +1,23 @@
1
- export type RuntimeSetupStatus = 'ready' | 'ready_to_apply' | 'scan_required' | 'attention_required' | 'unavailable';
1
+ export type RuntimeSetupStatus = 'ready' | 'selection_required' | 'scan_required' | 'attention_required' | 'unavailable';
2
2
  export type RuntimeSetupStateStatus = 'pending' | 'scanning' | 'ready' | 'applied' | 'error' | 'unavailable';
3
3
  export interface RuntimeSetupProviderSummary {
4
4
  provider: string;
5
5
  family: string;
6
6
  remediationCount?: number;
7
7
  }
8
+ export interface RuntimeSelectedProviderTarget {
9
+ provider: string;
10
+ backend: 'cli' | 'api' | 'local' | 'agent';
11
+ instance: string;
12
+ }
13
+ export interface RuntimeProviderSelection {
14
+ state: 'missing' | 'invalid' | 'empty' | 'selected';
15
+ revision: string;
16
+ targets: RuntimeSelectedProviderTarget[];
17
+ nativeSetupTargets: RuntimeSelectedProviderTarget[];
18
+ diskChanged: boolean;
19
+ error: string | null;
20
+ }
8
21
  export interface RuntimeSetupSummary {
9
22
  source: 'runtime' | 'assumed_ready' | 'unavailable';
10
23
  bootstrapRequired: boolean;
@@ -16,11 +29,11 @@ export interface RuntimeSetupSummary {
16
29
  appliedAt: string | null;
17
30
  providerCount: number;
18
31
  availableCount: number;
19
- providersReadyToApply: RuntimeSetupProviderSummary[];
32
+ providersReady: RuntimeSetupProviderSummary[];
20
33
  providersNeedingAttention: RuntimeSetupProviderSummary[];
21
- suggestedProviders: string[];
34
+ selectedProviders: string[];
22
35
  canRunManualScan: boolean;
23
- canApply: boolean;
36
+ canManageSelection: boolean;
24
37
  error: string | null;
25
38
  }
26
39
  //# sourceMappingURL=runtimeSetup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeSetup.d.ts","sourceRoot":"","sources":["../../../src/shared/runtimeSetup.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP,gBAAgB,GAChB,eAAe,GACf,oBAAoB,GACpB,aAAa,CAAC;AAElB,MAAM,MAAM,uBAAuB,GAC/B,SAAS,GACT,UAAU,GACV,OAAO,GACP,SAAS,GACT,OAAO,GACP,aAAa,CAAC;AAElB,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,GAAG,eAAe,GAAG,aAAa,CAAC;IACpD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,uBAAuB,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,2BAA2B,EAAE,CAAC;IACrD,yBAAyB,EAAE,2BAA2B,EAAE,CAAC;IACzD,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB"}
1
+ {"version":3,"file":"runtimeSetup.d.ts","sourceRoot":"","sources":["../../../src/shared/runtimeSetup.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP,oBAAoB,GACpB,eAAe,GACf,oBAAoB,GACpB,aAAa,CAAC;AAElB,MAAM,MAAM,uBAAuB,GAC/B,SAAS,GACT,UAAU,GACV,OAAO,GACP,SAAS,GACT,OAAO,GACP,aAAa,CAAC;AAElB,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,6BAA6B,EAAE,CAAC;IACzC,kBAAkB,EAAE,6BAA6B,EAAE,CAAC;IACpD,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,GAAG,eAAe,GAAG,aAAa,CAAC;IACpD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,uBAAuB,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,2BAA2B,EAAE,CAAC;IAC9C,yBAAyB,EAAE,2BAA2B,EAAE,CAAC;IACzD,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB"}
@@ -51,7 +51,7 @@ export function resolveRuntimeDotClassName(status) {
51
51
  }
52
52
  }
53
53
  export function needsRuntimeSetupRecovery(runtimeSetupStatus) {
54
- return runtimeSetupStatus === 'ready_to_apply'
54
+ return runtimeSetupStatus === 'selection_required'
55
55
  || runtimeSetupStatus === 'scan_required'
56
56
  || runtimeSetupStatus === 'attention_required'
57
57
  || runtimeSetupStatus === 'unavailable';
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeStatusPresentation.js","sourceRoot":"","sources":["../../../src/shared/runtimeStatusPresentation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtimeStatusPresentation.js","sourceRoot":"","sources":["../../../src/shared/runtimeStatusPresentation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "@cats-inc/cats-platform",
3
- "version": "0.1.21",
3
+ "version": "0.2.8",
4
4
  "description": "Technical host package for the Cats platform, backed by cats-runtime.",
5
5
  "author": "Cats Inc. <sammykenny2@gmail.com>",
6
6
  "homepage": "https://github.com/cats-inc/cats-platform",
7
7
  "type": "module",
8
+ "imports": {
9
+ "#cats-app-package": "./packages/app-sdk/package.js"
10
+ },
8
11
  "bin": {
9
12
  "cats-platform": "build/server/index.js"
10
13
  },
@@ -14,6 +17,7 @@
14
17
  "build/server",
15
18
  "build/desktop",
16
19
  "scripts",
20
+ "packages/app-sdk",
17
21
  "config/provider-capability-bootstrap.yaml.example",
18
22
  ".env.example",
19
23
  "README.md",
@@ -126,12 +130,23 @@
126
130
  },
127
131
  "files": [
128
132
  "build/desktop/**/*",
133
+ "packages/app-sdk/**/*",
129
134
  "assets/build/icon.ico",
130
135
  "assets/build/icon.png",
131
136
  "assets/tray-icon*.png",
132
137
  "package.json"
133
138
  ],
134
139
  "extraResources": [
140
+ {
141
+ "from": "build/desktop-packaging/shared/official-apps",
142
+ "to": "app-sidecar/official-apps",
143
+ "filter": ["**/*"]
144
+ },
145
+ {
146
+ "from": "build/desktop-packaging/shared/app-sidecar/packages/app-sdk",
147
+ "to": "app-sidecar/packages/app-sdk",
148
+ "filter": ["**/*"]
149
+ },
135
150
  {
136
151
  "from": "build/desktop-packaging/shared/build/server",
137
152
  "to": "app-sidecar/build/server",
@@ -146,6 +161,13 @@
146
161
  "**/*"
147
162
  ]
148
163
  },
164
+ {
165
+ "from": "build/desktop-packaging/shared/cats-platform/config",
166
+ "to": "app-sidecar/config",
167
+ "filter": [
168
+ "**/*"
169
+ ]
170
+ },
149
171
  {
150
172
  "from": "build/desktop-packaging/shared/app-sidecar/package.json",
151
173
  "to": "app-sidecar/package.json"
@@ -0,0 +1,51 @@
1
+ /** Host-injected browser API. No imports, secrets, filesystem or general network proxy. */
2
+ export interface CatsAppBrowserSdkV1 {
3
+ readonly sdkVersion: '1.2.0';
4
+ readonly appId: string;
5
+ readonly version: string;
6
+ readonly locale: string;
7
+ readonly theme: 'light' | 'dark';
8
+ readonly usage: {
9
+ getSnapshot(): Promise<UsageSnapshotV1>;
10
+ refreshQuota(target: { provider: 'codex' | 'copilot' | 'claude' | 'antigravity'; instance: string }): Promise<UsageQuotaRefreshV1>;
11
+ };
12
+ openLobby(): Promise<void>;
13
+ }
14
+ export interface UsageTotalsV1 {
15
+ observations: number;
16
+ inputTokens: number | null;
17
+ outputTokens: number | null;
18
+ totalTokens: number | null;
19
+ costs: Array<{ currency: string; amount: number; observations: number }>;
20
+ confidence: { reported: number; aggregated: number; estimated: number; unknown: number };
21
+ lastObservedAt: string | null;
22
+ }
23
+ export interface UsageTargetV1 { provider: string; instance: string; backend: 'cli' | 'api' }
24
+ export interface UsageGuardrailV1 {
25
+ provider: string | null; instance: string | null; backend: 'cli' | 'api' | null;
26
+ outcome: string; scope: string; sessionId: string | null; observedAt: string; cooldownUntil: string | null;
27
+ }
28
+ export interface UsageSnapshotV1 {
29
+ schemaVersion: 1; generatedAt: string; runtime: { status: 'available'; epoch: string };
30
+ coverage: { mode: 'memory'; scope: 'runtime_observed_results'; startedAt: string;
31
+ firstRetainedAt: string | null; lastObservedAt: string | null; retainedRecords: number; droppedRecords: number;
32
+ droppedQuotaTargets: number; targetCount: number; sessionCount: number; truncated: boolean; historyAvailable: false };
33
+ totals: UsageTotalsV1;
34
+ targets: Array<UsageTargetV1 & { usage: UsageTotalsV1; guardrails: UsageGuardrailV1[]; quota: {
35
+ status: 'available' | 'unavailable' | 'unsupported'; freshness: 'fresh' | 'stale' | 'unknown';
36
+ source: string | null; observedAt: string | null; accountId: null; accountLinkage: 'unverified';
37
+ scope: 'provider_reported_during_runtime_execution' | 'provider_account_query'; automaticRefresh: false;
38
+ limitId: string | null;
39
+ refreshSupported: boolean;
40
+ windows: Array<{ id: string; unit: 'percent' | 'requests' | 'credits'; used: number | null; limit: number | null; remaining: number | null; unlimited: boolean; usedPercent: number | null; remainingPercent: number | null; resetsAt: string | null; windowMinutes: number | null }>;
41
+ } }>;
42
+ sessions: Array<UsageTargetV1 & { sessionId: string; usage: UsageTotalsV1 }>;
43
+ incidents: Array<UsageTargetV1 & { id: string; classification: string; scope: string; observedAt: string; retryAt: string | null }>;
44
+ guardrails: UsageGuardrailV1[];
45
+ }
46
+ declare global { var catsApp: CatsAppBrowserSdkV1; }
47
+ export interface UsageQuotaRefreshV1 {
48
+ status: 'updated' | 'cooldown' | 'busy' | 'auth_required' | 'unsupported' | 'unavailable' | 'timeout' | 'error';
49
+ nextRefreshAt: string | null;
50
+ snapshot: UsageSnapshotV1;
51
+ }
@@ -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`
@@ -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
+ }