@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
@@ -0,0 +1,488 @@
1
+ /**
2
+ * Gated publication for the golden path (SPEC-114 FR-40..FR-42).
3
+ *
4
+ * Execution authorization and publication authorization are different risk
5
+ * boundaries. Confirming "Start work" said the owner accepted a *scope*; it
6
+ * never said they accepted a side effect that only became visible once the work
7
+ * ran. So a gated mode stops at `result_ready` and asks again.
8
+ *
9
+ * The publish decision is an ordinary Cats Core approval — a Task in
10
+ * `pending_approval` bound to the Run by a `release_gate` binding — which means
11
+ * it appears in the existing approval queue and Desktop surfaces for free, and
12
+ * no transport ever infers it.
13
+ */
14
+ import { createHash } from 'node:crypto';
15
+ import { appendCoreActivity, upsertCoreApprovalBinding, upsertCoreTask, writeApprovalDecision, } from '../../../core/model/index.js';
16
+ export const WORK_GOLDEN_PATH_PUBLISH_METADATA_KEY = 'workGoldenPathPublish';
17
+ /**
18
+ * External actions each mode performs at publish time, in order.
19
+ *
20
+ * This mirrors `deliveryActionsForMode` in `core/governance.ts`; that function
21
+ * declares what a mode *means*, this one is what actually runs.
22
+ */
23
+ const PUBLISH_ACTIONS = {
24
+ artifact_only: [],
25
+ commit_only: [],
26
+ push_branch: ['push_branch'],
27
+ pr_with_checks: ['push_branch', 'open_pull_request', 'wait_for_checks'],
28
+ deploy_preview: ['push_branch', 'publish_preview'],
29
+ };
30
+ /**
31
+ * Stable over the scope the owner is being asked to publish.
32
+ *
33
+ * Excludes the owner event, so a double tap converges on the same publish
34
+ * rather than performing the side effect twice (FR-42).
35
+ */
36
+ export function buildWorkGoldenPathPublishKey(input) {
37
+ return [
38
+ 'wgp-publish',
39
+ input.bindingId,
40
+ input.workItemId,
41
+ String(input.proposalRevision),
42
+ input.proposalDigest,
43
+ input.deliveryMode,
44
+ ].join(':');
45
+ }
46
+ function publishApprovalTaskId(publishKey) {
47
+ return `task-wgp-publish-${createHash('sha256').update(publishKey).digest('hex').slice(0, 20)}`;
48
+ }
49
+ function isRecord(value) {
50
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
51
+ }
52
+ function readPublishEnvelope(metadata) {
53
+ const envelope = isRecord(metadata)
54
+ ? metadata[WORK_GOLDEN_PATH_PUBLISH_METADATA_KEY]
55
+ : null;
56
+ if (!isRecord(envelope)) {
57
+ return null;
58
+ }
59
+ return {
60
+ publishKey: typeof envelope.publishKey === 'string' ? envelope.publishKey : null,
61
+ performedActions: Array.isArray(envelope.performedActions)
62
+ ? envelope.performedActions
63
+ : [],
64
+ reference: typeof envelope.reference === 'string' ? envelope.reference : null,
65
+ completedAt: typeof envelope.completedAt === 'string' ? envelope.completedAt : null,
66
+ pendingOperationId: typeof envelope.pendingOperationId === 'string'
67
+ ? envelope.pendingOperationId
68
+ : null,
69
+ };
70
+ }
71
+ /**
72
+ * Creates (or resolves) the pending publish approval.
73
+ *
74
+ * The approval Task carries the effective policy, the exact proposal revision,
75
+ * and the publish key, so an owner deciding it later is deciding the same thing
76
+ * they were shown (FR-42).
77
+ */
78
+ export async function requestWorkGoldenPathPublishApproval(coreStore, input, now = () => new Date()) {
79
+ const publishKey = buildWorkGoldenPathPublishKey({
80
+ bindingId: input.bindingId,
81
+ workItemId: input.workItemId,
82
+ proposalRevision: input.proposal.revision,
83
+ proposalDigest: input.proposal.digest,
84
+ deliveryMode: input.proposal.deliveryMode,
85
+ });
86
+ const approvalTaskId = publishApprovalTaskId(publishKey);
87
+ let created = false;
88
+ await coreStore.updateCore((core) => {
89
+ if (core.tasks.some((task) => task.id === approvalTaskId)) {
90
+ return core;
91
+ }
92
+ const taskWrite = upsertCoreTask(core, {
93
+ id: approvalTaskId,
94
+ title: `Publish: ${input.proposal.goal}`,
95
+ status: 'pending_approval',
96
+ conversationId: input.proposal.projectId === null ? null : null,
97
+ ownerActorId: input.ownerActorId,
98
+ orchestratorActorId: input.actorRef,
99
+ assignedActorIds: [],
100
+ summary: `Authorize ${input.proposal.deliveryMode} publication for `
101
+ + `"${input.proposal.goal}".`,
102
+ metadata: {
103
+ [WORK_GOLDEN_PATH_PUBLISH_METADATA_KEY]: {
104
+ schemaVersion: 1,
105
+ publishKey,
106
+ bindingId: input.bindingId,
107
+ workItemId: input.workItemId,
108
+ runId: input.runId,
109
+ executionTaskId: input.taskId,
110
+ proposalRevision: input.proposal.revision,
111
+ proposalDigest: input.proposal.digest,
112
+ deliveryMode: input.proposal.deliveryMode,
113
+ effectiveGates: [...input.outstandingGates],
114
+ requestedActions: PUBLISH_ACTIONS[input.proposal.deliveryMode] ?? null,
115
+ workspacePath: input.deliveryWorkspacePath,
116
+ sessionId: input.deliverySessionId,
117
+ },
118
+ },
119
+ }, now());
120
+ const approvalWrite = writeApprovalDecision(taskWrite.core, {
121
+ taskId: approvalTaskId,
122
+ status: 'pending',
123
+ requestedByActorId: input.actorRef,
124
+ notes: `Publication requires an owner decision: `
125
+ + `${input.outstandingGates.join(', ')}.`,
126
+ }, now());
127
+ const bindingWrite = upsertCoreApprovalBinding(approvalWrite.core, {
128
+ id: `approval-binding-${approvalTaskId}`,
129
+ // The gate is about releasing a result, not about starting work.
130
+ kind: 'release_gate',
131
+ approvalTaskId,
132
+ subjectKind: 'run',
133
+ subjectId: input.runId,
134
+ projectId: input.proposal.projectId,
135
+ workItemId: input.workItemId,
136
+ conversationId: null,
137
+ requestedByActorId: input.actorRef,
138
+ requestedForActorId: input.ownerActorId,
139
+ metadata: {
140
+ [WORK_GOLDEN_PATH_PUBLISH_METADATA_KEY]: { schemaVersion: 1, publishKey },
141
+ },
142
+ }, now());
143
+ created = true;
144
+ return appendCoreActivity(bindingWrite.core, {
145
+ id: `activity-wgp-publish-requested-${approvalTaskId}`,
146
+ kind: 'approval_requested',
147
+ actorId: input.actorRef,
148
+ projectId: input.proposal.projectId,
149
+ workItemId: input.workItemId,
150
+ conversationId: null,
151
+ taskId: approvalTaskId,
152
+ runId: input.runId,
153
+ message: `Publication approval requested for "${input.proposal.goal}".`,
154
+ metadata: {
155
+ [WORK_GOLDEN_PATH_PUBLISH_METADATA_KEY]: {
156
+ schemaVersion: 1,
157
+ publishKey,
158
+ gates: [...input.outstandingGates],
159
+ },
160
+ },
161
+ }, now()).core;
162
+ });
163
+ return { approvalTaskId, publishKey, created };
164
+ }
165
+ function findPendingPublishTask(core, workItemId) {
166
+ return core.tasks.find((task) => {
167
+ const envelope = readPublishEnvelope(task.metadata);
168
+ if (envelope === null) {
169
+ return false;
170
+ }
171
+ const raw = task.metadata[WORK_GOLDEN_PATH_PUBLISH_METADATA_KEY];
172
+ return isRecord(raw) && raw.workItemId === workItemId;
173
+ }) ?? null;
174
+ }
175
+ /**
176
+ * Performs the mode's external actions.
177
+ *
178
+ * Any blocked action stops the sequence: a half-published result (pushed but no
179
+ * pull request) is worse than one the owner can retry deliberately.
180
+ */
181
+ async function performPublishActions(input) {
182
+ const performed = [...input.alreadyPerformed];
183
+ let reference = null;
184
+ for (const action of input.actions) {
185
+ // Per-action idempotency. A wait that timed out must not re-push and
186
+ // re-open the pull request when the owner comes back to it.
187
+ if (performed.includes(action)) {
188
+ continue;
189
+ }
190
+ let outcome;
191
+ if (action === 'push_branch') {
192
+ outcome = await input.deliveryClient.pushBranch({
193
+ workspacePath: input.workspacePath,
194
+ sessionId: input.sessionId,
195
+ approvalRef: input.approvalRef,
196
+ });
197
+ }
198
+ else if (action === 'open_pull_request') {
199
+ outcome = await input.deliveryClient.openPullRequest({
200
+ workspacePath: input.workspacePath,
201
+ sessionId: input.sessionId,
202
+ approvalRef: input.approvalRef,
203
+ title: input.goal,
204
+ body: `Opened by Cats for "${input.goal}".`,
205
+ });
206
+ }
207
+ else if (action === 'wait_for_checks') {
208
+ outcome = await input.deliveryClient.waitForChecks({
209
+ workspacePath: input.workspacePath,
210
+ sessionId: input.sessionId,
211
+ approvalRef: input.approvalRef,
212
+ resumeOperationId: input.resumeOperationId,
213
+ });
214
+ }
215
+ else if (action === 'publish_preview') {
216
+ outcome = await input.deliveryClient.publishPreview({
217
+ workspacePath: input.workspacePath,
218
+ sessionId: input.sessionId,
219
+ approvalRef: input.approvalRef,
220
+ });
221
+ }
222
+ else {
223
+ return {
224
+ performed,
225
+ reference,
226
+ pendingOperationId: null,
227
+ blockedReasons: [`unsupported_publish_action:${action}`],
228
+ };
229
+ }
230
+ if (outcome.state === 'pending') {
231
+ // Nothing was refused and nothing more can be done yet. The actions that
232
+ // already landed stay landed.
233
+ return {
234
+ performed,
235
+ reference,
236
+ pendingOperationId: outcome.pendingOperationId,
237
+ blockedReasons: [],
238
+ };
239
+ }
240
+ if (outcome.state !== 'completed') {
241
+ return {
242
+ performed,
243
+ reference,
244
+ pendingOperationId: null,
245
+ blockedReasons: outcome.blockedReasons.length > 0
246
+ ? outcome.blockedReasons
247
+ : [`${action}_not_completed`],
248
+ };
249
+ }
250
+ performed.push(action);
251
+ reference = outcome.reference ?? reference;
252
+ }
253
+ return { performed, reference, pendingOperationId: null, blockedReasons: [] };
254
+ }
255
+ /**
256
+ * Applies the owner's publish decision.
257
+ *
258
+ * Approving twice returns the recorded result instead of pushing again: the
259
+ * approval Task's metadata is the idempotency record (FR-42).
260
+ */
261
+ export async function applyWorkGoldenPathPublishDecision(coreStore, input, now = () => new Date()) {
262
+ const core = await coreStore.readCore();
263
+ const approvalTask = findPendingPublishTask(core, input.workItemId);
264
+ if (approvalTask === null) {
265
+ return {
266
+ status: 'not_pending',
267
+ publishKey: '',
268
+ approvalTaskId: '',
269
+ performedActions: [],
270
+ reference: null,
271
+ pendingOperationId: null,
272
+ blockedReasons: ['no_publish_approval_pending'],
273
+ };
274
+ }
275
+ const raw = approvalTask.metadata[WORK_GOLDEN_PATH_PUBLISH_METADATA_KEY];
276
+ const envelope = isRecord(raw) ? raw : {};
277
+ const publishKey = typeof envelope.publishKey === 'string' ? envelope.publishKey : '';
278
+ const recorded = readPublishEnvelope(approvalTask.metadata);
279
+ if (recorded?.completedAt) {
280
+ return {
281
+ status: 'already_published',
282
+ publishKey,
283
+ approvalTaskId: approvalTask.id,
284
+ performedActions: recorded.performedActions,
285
+ reference: recorded.reference,
286
+ pendingOperationId: null,
287
+ blockedReasons: [],
288
+ };
289
+ }
290
+ if (input.decision === 'deny') {
291
+ await coreStore.updateCore((state) => {
292
+ const denied = writeApprovalDecision(state, {
293
+ taskId: approvalTask.id,
294
+ status: 'rejected',
295
+ action: 'reject',
296
+ decidedByActorId: input.ownerActorId,
297
+ notes: 'Owner declined publication.',
298
+ taskStatus: 'cancelled',
299
+ }, now());
300
+ return appendCoreActivity(denied.core, {
301
+ id: `activity-wgp-publish-denied-${approvalTask.id}`,
302
+ kind: 'approval_decided',
303
+ actorId: input.ownerActorId,
304
+ workItemId: input.workItemId,
305
+ taskId: approvalTask.id,
306
+ runId: typeof envelope.runId === 'string' ? envelope.runId : null,
307
+ message: 'Owner declined publication; the result stays unpublished.',
308
+ metadata: {
309
+ [WORK_GOLDEN_PATH_PUBLISH_METADATA_KEY]: { schemaVersion: 1, publishKey },
310
+ },
311
+ }, now()).core;
312
+ });
313
+ return {
314
+ status: 'denied',
315
+ publishKey,
316
+ approvalTaskId: approvalTask.id,
317
+ performedActions: [],
318
+ reference: null,
319
+ pendingOperationId: null,
320
+ blockedReasons: [],
321
+ };
322
+ }
323
+ const deliveryMode = envelope.deliveryMode;
324
+ const actions = deliveryMode ? PUBLISH_ACTIONS[deliveryMode] : undefined;
325
+ const workspacePath = typeof envelope.workspacePath === 'string'
326
+ ? envelope.workspacePath
327
+ : null;
328
+ const sessionId = typeof envelope.sessionId === 'string' ? envelope.sessionId : null;
329
+ if (actions === undefined) {
330
+ return {
331
+ status: 'blocked',
332
+ publishKey,
333
+ approvalTaskId: approvalTask.id,
334
+ performedActions: [],
335
+ reference: null,
336
+ pendingOperationId: null,
337
+ blockedReasons: [`unsupported_delivery_mode:${deliveryMode ?? 'unknown'}`],
338
+ };
339
+ }
340
+ // Actions a previous attempt already landed. A wait that timed out leaves the
341
+ // push and the pull request behind, and neither may happen twice.
342
+ let performed = recorded?.performedActions ?? [];
343
+ let reference = recorded?.reference ?? null;
344
+ let pendingOperationId = null;
345
+ let blockedReasons = [];
346
+ if (actions.length > 0) {
347
+ if (input.deliveryClient === undefined || (workspacePath === null && sessionId === null)) {
348
+ blockedReasons = ['publish_transport_unavailable'];
349
+ }
350
+ else {
351
+ try {
352
+ const outcome = await performPublishActions({
353
+ actions,
354
+ alreadyPerformed: performed,
355
+ deliveryClient: input.deliveryClient,
356
+ workspacePath,
357
+ sessionId,
358
+ // The Core approval id is the authorization the runtime records.
359
+ approvalRef: approvalTask.id,
360
+ goal: approvalTask.title.replace(/^Publish:\s*/u, ''),
361
+ resumeOperationId: recorded?.pendingOperationId ?? null,
362
+ });
363
+ performed = outcome.performed;
364
+ reference = outcome.reference ?? reference;
365
+ pendingOperationId = outcome.pendingOperationId;
366
+ blockedReasons = outcome.blockedReasons;
367
+ }
368
+ catch (error) {
369
+ blockedReasons = [error instanceof Error ? error.message : 'publish_failed'];
370
+ }
371
+ }
372
+ }
373
+ // Whatever landed is persisted before returning, blocked or not, so a later
374
+ // attempt resumes rather than restarts.
375
+ if (blockedReasons.length > 0 || pendingOperationId !== null) {
376
+ await stampPublishProgress(coreStore, {
377
+ approvalTask,
378
+ envelope,
379
+ performed,
380
+ reference,
381
+ pendingOperationId,
382
+ }, now);
383
+ }
384
+ if (pendingOperationId !== null) {
385
+ // The external work is under way and nothing was refused. The approval stays
386
+ // pending so the owner can come back to it, and nothing is delivered yet.
387
+ return {
388
+ status: 'pending_checks',
389
+ publishKey,
390
+ approvalTaskId: approvalTask.id,
391
+ performedActions: performed,
392
+ reference,
393
+ pendingOperationId,
394
+ blockedReasons: [],
395
+ };
396
+ }
397
+ if (blockedReasons.length > 0) {
398
+ // The approval stays pending so the owner can retry deliberately rather
399
+ // than having their decision consumed by a transport failure.
400
+ return {
401
+ status: 'blocked',
402
+ publishKey,
403
+ approvalTaskId: approvalTask.id,
404
+ performedActions: performed,
405
+ reference,
406
+ pendingOperationId: null,
407
+ blockedReasons,
408
+ };
409
+ }
410
+ const completedAt = now().toISOString();
411
+ await coreStore.updateCore((state) => {
412
+ const approved = writeApprovalDecision(state, {
413
+ taskId: approvalTask.id,
414
+ status: 'approved',
415
+ action: 'approve',
416
+ decidedByActorId: input.ownerActorId,
417
+ notes: 'Owner authorized publication.',
418
+ taskStatus: 'completed',
419
+ }, now());
420
+ const stamped = upsertCoreTask(approved.core, {
421
+ id: approvalTask.id,
422
+ title: approvalTask.title,
423
+ status: 'completed',
424
+ ownerActorId: approvalTask.ownerActorId,
425
+ metadata: {
426
+ ...approvalTask.metadata,
427
+ [WORK_GOLDEN_PATH_PUBLISH_METADATA_KEY]: {
428
+ ...envelope,
429
+ performedActions: performed,
430
+ reference,
431
+ completedAt,
432
+ decidedByActorId: input.ownerActorId,
433
+ },
434
+ },
435
+ }, now());
436
+ return appendCoreActivity(stamped.core, {
437
+ id: `activity-wgp-publish-approved-${approvalTask.id}`,
438
+ kind: 'approval_decided',
439
+ actorId: input.ownerActorId,
440
+ workItemId: input.workItemId,
441
+ taskId: approvalTask.id,
442
+ runId: typeof envelope.runId === 'string' ? envelope.runId : null,
443
+ message: performed.length > 0
444
+ ? `Owner authorized publication; performed ${performed.join(', ')}.`
445
+ : 'Owner authorized publication; no external action was required.',
446
+ metadata: {
447
+ [WORK_GOLDEN_PATH_PUBLISH_METADATA_KEY]: {
448
+ schemaVersion: 1,
449
+ publishKey,
450
+ performedActions: performed,
451
+ reference,
452
+ },
453
+ },
454
+ }, now()).core;
455
+ });
456
+ return {
457
+ status: 'published',
458
+ publishKey,
459
+ approvalTaskId: approvalTask.id,
460
+ performedActions: performed,
461
+ reference,
462
+ pendingOperationId: null,
463
+ blockedReasons: [],
464
+ };
465
+ }
466
+ /**
467
+ * Persists partial publish progress without deciding the approval.
468
+ *
469
+ * The approval stays `pending`: the owner has not been answered yet, and their
470
+ * decision must not be consumed by an unfinished wait.
471
+ */
472
+ async function stampPublishProgress(coreStore, input, now) {
473
+ await coreStore.updateCore((state) => upsertCoreTask(state, {
474
+ id: input.approvalTask.id,
475
+ title: input.approvalTask.title,
476
+ ownerActorId: input.approvalTask.ownerActorId,
477
+ metadata: {
478
+ ...input.approvalTask.metadata,
479
+ [WORK_GOLDEN_PATH_PUBLISH_METADATA_KEY]: {
480
+ ...input.envelope,
481
+ performedActions: input.performed,
482
+ reference: input.reference,
483
+ pendingOperationId: input.pendingOperationId,
484
+ },
485
+ },
486
+ }, now()).core);
487
+ }
488
+ //# sourceMappingURL=workGoldenPathPublish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workGoldenPathPublish.js","sourceRoot":"","sources":["../../../../../src/products/work/state/workGoldenPathPublish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * The supervised-run driver for the golden path (SPEC-114 FR-28..FR-31,
3
+ * PLAN-105 Phase 4).
4
+ *
5
+ * Before this module the run loop stopped after one provider response: the Run
6
+ * was marked `running`, a handoff decision was recorded, and nothing consumed
7
+ * it. That is the seam this closes.
8
+ *
9
+ * The controlling rule is FR-30. A provider step returning successfully is
10
+ * evidence that a *step* returned, never that the goal was met, so the provider
11
+ * is never allowed to declare completion. After every step Cats re-evaluates
12
+ * the acceptance criteria itself and either continues with the gaps as the next
13
+ * instruction, or accepts terminal evidence. That inversion is what stops
14
+ * "I have finished the task." from ending a run.
15
+ */
16
+ import type { CoreStore } from '../../../core/store.js';
17
+ import type { CoreDeliveryMode, ExecutionTargetSummary } from '../../../core/types.js';
18
+ import type { SupervisionToolScope } from '../../../platform/supervision/contracts.js';
19
+ import type { TransportWorkStage } from '../../../platform/transports/work-delivery/contracts.js';
20
+ import { type WorkCommitEvidence, type WorkCompletionEvidenceGap, type WorkCompletionEvidenceResult } from './workCompletionEvidence.js';
21
+ import type { WorkGoldenPathService } from './workGoldenPathService.js';
22
+ /** Where a refusal is recorded on the Run, for the Desktop read model. */
23
+ export declare const WORK_GOLDEN_PATH_DENIAL_METADATA_KEY = "workGoldenPathDenial";
24
+ export interface WorkGoldenPathArtifactEvidence {
25
+ title: string;
26
+ path: string | null;
27
+ mimeType: string | null;
28
+ /** Runtime-owned location from which a later gated publish must resume. */
29
+ deliveryWorkspacePath?: string | null;
30
+ /** Runtime session that materialized the artifact. */
31
+ deliverySessionId?: string | null;
32
+ }
33
+ export interface WorkGoldenPathStepContext {
34
+ runId: string;
35
+ taskId: string | null;
36
+ workItemId: string;
37
+ /** Zero-based; step 0 opens the session. */
38
+ stepIndex: number;
39
+ goal: string;
40
+ acceptanceCriteria: readonly string[];
41
+ deliveryMode: CoreDeliveryMode;
42
+ workspacePath: string | null;
43
+ executionTarget?: ExecutionTargetSummary | null;
44
+ toolScope?: SupervisionToolScope;
45
+ workspaceHeadOid?: string | null;
46
+ /**
47
+ * What was still missing after the previous step.
48
+ *
49
+ * This is the whole continuation signal: the executor turns it into the next
50
+ * instruction, so the agent is told what remains rather than asked again.
51
+ */
52
+ outstandingGaps: readonly WorkCompletionEvidenceGap[];
53
+ outstandingCriteria: readonly string[];
54
+ }
55
+ /**
56
+ * A step refused by the supervision boundary rather than by the provider.
57
+ *
58
+ * Kept distinct from a generic failure because the remedy is different: no
59
+ * amount of retrying helps until the owner widens the permission envelope, so
60
+ * the owner has to be told *what* to grant, not that "something went wrong".
61
+ */
62
+ export interface WorkGoldenPathPermissionDenial {
63
+ /** The supervised tool that was refused. */
64
+ toolName: string;
65
+ /** The boundary's rejection code, e.g. `E_TOOL_SCOPE_DENIED`. */
66
+ code: string;
67
+ }
68
+ export interface WorkGoldenPathStepResult {
69
+ /**
70
+ * `continue` and `claims_complete` are both non-terminal from Cats' point of
71
+ * view; only the evidence check can end a run successfully.
72
+ */
73
+ status: 'continue' | 'claims_complete' | 'blocked' | 'permission_denied' | 'failed';
74
+ summary: string;
75
+ /** Criteria the step claims to have satisfied. Verified, never trusted. */
76
+ satisfiedCriteria: readonly string[];
77
+ artifact: WorkGoldenPathArtifactEvidence | null;
78
+ commit: WorkCommitEvidence | null;
79
+ blockedReason: string | null;
80
+ /** Present only when `status` is `permission_denied`. */
81
+ denial?: WorkGoldenPathPermissionDenial | null;
82
+ }
83
+ export type WorkGoldenPathStepExecutor = (context: WorkGoldenPathStepContext) => Promise<WorkGoldenPathStepResult>;
84
+ export type WorkGoldenPathRunStatus = 'delivered' | 'result_ready' | 'blocked' | 'permission_denied' | 'timed_out' | 'failed' | 'cancelled' | 'not_runnable';
85
+ export interface WorkGoldenPathRunOutcome {
86
+ status: WorkGoldenPathRunStatus;
87
+ steps: number;
88
+ evidence: WorkCompletionEvidenceResult | null;
89
+ stage: TransportWorkStage | null;
90
+ reason: string | null;
91
+ }
92
+ export interface WorkGoldenPathRunnerOptions {
93
+ coreStore: CoreStore;
94
+ service: WorkGoldenPathService;
95
+ executeStep: WorkGoldenPathStepExecutor;
96
+ maxSteps?: number;
97
+ /**
98
+ * Wall-clock ceiling for a single step.
99
+ *
100
+ * A provider call cannot be cancelled from here, so a timed-out step is
101
+ * abandoned rather than killed: the Run is blocked for the owner and the
102
+ * terminal-state guard makes the late result harmless if it ever arrives.
103
+ */
104
+ stepTimeoutMs?: number;
105
+ now?: () => Date;
106
+ }
107
+ export interface WorkGoldenPathRunner {
108
+ /**
109
+ * Drives one Run to a terminal or owner-blocking state.
110
+ *
111
+ * Safe to call concurrently for the same Run: a second call joins the first
112
+ * rather than starting a second execution. Admission, an owner retry, and the
113
+ * startup sweep can all fire for one Run, and none of them can know about the
114
+ * others.
115
+ */
116
+ drive(input: {
117
+ runId: string;
118
+ }): Promise<WorkGoldenPathRunOutcome>;
119
+ }
120
+ export declare function createWorkGoldenPathRunner(options: WorkGoldenPathRunnerOptions): WorkGoldenPathRunner;
121
+ //# sourceMappingURL=workGoldenPathRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workGoldenPathRunner.d.ts","sourceRoot":"","sources":["../../../../../src/products/work/state/workGoldenPathRunner.ts"],"names":[],"mappings":"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"}