@cats-inc/cats-platform 0.1.21 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (548) hide show
  1. package/.env.example +3 -7
  2. package/README.md +35 -0
  3. package/build/desktop/bootstrapNavigation.d.ts.map +1 -1
  4. package/build/desktop/bootstrapNavigation.js +6 -13
  5. package/build/desktop/bootstrapNavigation.js.map +1 -1
  6. package/build/desktop/bootstrapPage.d.ts.map +1 -1
  7. package/build/desktop/bootstrapPage.js +63 -86
  8. package/build/desktop/bootstrapPage.js.map +1 -1
  9. package/build/desktop/cliInventoryProbe.d.ts +11 -2
  10. package/build/desktop/cliInventoryProbe.d.ts.map +1 -1
  11. package/build/desktop/cliInventoryProbe.js +19 -13
  12. package/build/desktop/cliInventoryProbe.js.map +1 -1
  13. package/build/desktop/config.d.ts +0 -4
  14. package/build/desktop/config.d.ts.map +1 -1
  15. package/build/desktop/config.js +1 -6
  16. package/build/desktop/config.js.map +1 -1
  17. package/build/desktop/contracts.d.ts +12 -2
  18. package/build/desktop/contracts.d.ts.map +1 -1
  19. package/build/desktop/contracts.js +1 -2
  20. package/build/desktop/contracts.js.map +1 -1
  21. package/build/desktop/hostVersion.d.ts.map +1 -1
  22. package/build/desktop/hostVersion.js +3 -5
  23. package/build/desktop/hostVersion.js.map +1 -1
  24. package/build/desktop/main.js +205 -256
  25. package/build/desktop/main.js.map +1 -1
  26. package/build/desktop/packaging.d.ts +2 -0
  27. package/build/desktop/packaging.d.ts.map +1 -1
  28. package/build/desktop/packaging.js +34 -14
  29. package/build/desktop/packaging.js.map +1 -1
  30. package/build/desktop/preload.cjs +9 -0
  31. package/build/desktop/preload.cjs.map +1 -1
  32. package/build/desktop/processSupervisor.d.ts.map +1 -1
  33. package/build/desktop/processSupervisor.js +3 -0
  34. package/build/desktop/processSupervisor.js.map +1 -1
  35. package/build/desktop/providerManager.d.ts +46 -0
  36. package/build/desktop/providerManager.d.ts.map +1 -0
  37. package/build/desktop/providerManager.js +220 -0
  38. package/build/desktop/providerManager.js.map +1 -0
  39. package/build/desktop/providerSelection.d.ts +38 -0
  40. package/build/desktop/providerSelection.d.ts.map +1 -0
  41. package/build/desktop/providerSelection.js +118 -0
  42. package/build/desktop/providerSelection.js.map +1 -0
  43. package/build/desktop/readiness.d.ts +2 -0
  44. package/build/desktop/readiness.d.ts.map +1 -1
  45. package/build/desktop/readiness.js +14 -33
  46. package/build/desktop/readiness.js.map +1 -1
  47. package/build/desktop/setupAssets.d.ts.map +1 -1
  48. package/build/desktop/setupAssets.js +28 -14
  49. package/build/desktop/setupAssets.js.map +1 -1
  50. package/build/desktop/setupAudit.d.ts +4 -3
  51. package/build/desktop/setupAudit.d.ts.map +1 -1
  52. package/build/desktop/setupAudit.js +18 -34
  53. package/build/desktop/setupAudit.js.map +1 -1
  54. package/build/desktop/setupBridge.js +1 -1
  55. package/build/desktop/setupBridge.js.map +1 -1
  56. package/build/desktop/setupPrerequisites.d.ts +11 -0
  57. package/build/desktop/setupPrerequisites.d.ts.map +1 -0
  58. package/build/desktop/setupPrerequisites.js +47 -0
  59. package/build/desktop/setupPrerequisites.js.map +1 -0
  60. package/build/desktop/updateDialog.d.ts +27 -1
  61. package/build/desktop/updateDialog.d.ts.map +1 -1
  62. package/build/desktop/updateDialog.js +85 -5
  63. package/build/desktop/updateDialog.js.map +1 -1
  64. package/build/renderer/assets/ActiveSessionPermissionChip-B49WcZBJ.js +1 -0
  65. package/build/renderer/assets/App-BpxZB5ym.js +2 -0
  66. package/build/renderer/assets/App-DYTUfAl6.js +1 -0
  67. package/build/renderer/assets/App-DxsV-tKS.css +1 -0
  68. package/build/renderer/assets/{App-DKOSn0o_.js → App-boB4WrmU.js} +1 -1
  69. package/build/renderer/assets/WorkspaceAppRoutes-CPqz85iw.js +1 -0
  70. package/build/renderer/assets/app-C52wwCGz.js +85 -0
  71. package/build/renderer/assets/app-CqnsY5ed.css +1 -0
  72. package/build/renderer/assets/{client-BdGHAUoK.js → client-DREGSZqQ.js} +1 -1
  73. package/build/renderer/assets/conversationSidebarRecentEntries-DK0iWS73.js +6 -0
  74. package/build/renderer/assets/{screenshotOverlay-DfBcolX-.js → screenshotOverlay-EF07cXvw.js} +1 -1
  75. package/build/renderer/assets/{useDraftSessionChips-DCIId0eY.js → useDraftSessionChips-BdZ_B1gy.js} +1 -1
  76. package/build/renderer/desktop/overlay/index.html +2 -2
  77. package/build/renderer/index.html +3 -3
  78. package/build/server/app/renderer/auth/api.d.ts.map +1 -1
  79. package/build/server/app/renderer/auth/api.js +4 -1
  80. package/build/server/app/renderer/auth/api.js.map +1 -1
  81. package/build/server/app/renderer/providerCatalogClient.d.ts.map +1 -1
  82. package/build/server/app/renderer/providerCatalogClient.js +34 -12
  83. package/build/server/app/renderer/providerCatalogClient.js.map +1 -1
  84. package/build/server/app/renderer/providerClientInvalidation.d.ts +6 -0
  85. package/build/server/app/renderer/providerClientInvalidation.d.ts.map +1 -0
  86. package/build/server/app/renderer/providerClientInvalidation.js +12 -0
  87. package/build/server/app/renderer/providerClientInvalidation.js.map +1 -0
  88. package/build/server/app/renderer/providerReadLoop.d.ts +5 -0
  89. package/build/server/app/renderer/providerReadLoop.d.ts.map +1 -0
  90. package/build/server/app/renderer/providerReadLoop.js +52 -0
  91. package/build/server/app/renderer/providerReadLoop.js.map +1 -0
  92. package/build/server/app/renderer/providerRegistryClient.d.ts +3 -2
  93. package/build/server/app/renderer/providerRegistryClient.d.ts.map +1 -1
  94. package/build/server/app/renderer/providerRegistryClient.js +51 -53
  95. package/build/server/app/renderer/providerRegistryClient.js.map +1 -1
  96. package/build/server/app/server/appPackageRoutes.d.ts +2 -0
  97. package/build/server/app/server/appPackageRoutes.d.ts.map +1 -1
  98. package/build/server/app/server/appPackageRoutes.js +105 -0
  99. package/build/server/app/server/appPackageRoutes.js.map +1 -1
  100. package/build/server/app/server/authGatePolicy.js +14 -1
  101. package/build/server/app/server/authGatePolicy.js.map +1 -1
  102. package/build/server/app/server/contracts.d.ts +15 -0
  103. package/build/server/app/server/contracts.d.ts.map +1 -1
  104. package/build/server/app/server/dependencies.d.ts.map +1 -1
  105. package/build/server/app/server/dependencies.js +42 -1
  106. package/build/server/app/server/dependencies.js.map +1 -1
  107. package/build/server/app/server/goldenPathStartupResume.d.ts +55 -0
  108. package/build/server/app/server/goldenPathStartupResume.d.ts.map +1 -0
  109. package/build/server/app/server/goldenPathStartupResume.js +109 -0
  110. package/build/server/app/server/goldenPathStartupResume.js.map +1 -0
  111. package/build/server/app/server/platformSetupRoutes.d.ts.map +1 -1
  112. package/build/server/app/server/platformSetupRoutes.js +1 -13
  113. package/build/server/app/server/platformSetupRoutes.js.map +1 -1
  114. package/build/server/app/server/polling.d.ts.map +1 -1
  115. package/build/server/app/server/polling.js +2 -0
  116. package/build/server/app/server/polling.js.map +1 -1
  117. package/build/server/app/server/requestRouter.d.ts.map +1 -1
  118. package/build/server/app/server/requestRouter.js +30 -0
  119. package/build/server/app/server/requestRouter.js.map +1 -1
  120. package/build/server/app/server/runtimeSurfaceProxy.d.ts.map +1 -1
  121. package/build/server/app/server/runtimeSurfaceProxy.js +4 -2
  122. package/build/server/app/server/runtimeSurfaceProxy.js.map +1 -1
  123. package/build/server/app/server/startupRecovery.d.ts.map +1 -1
  124. package/build/server/app/server/startupRecovery.js +5 -0
  125. package/build/server/app/server/startupRecovery.js.map +1 -1
  126. package/build/server/app/server/subscribeRoutes.d.ts.map +1 -1
  127. package/build/server/app/server/subscribeRoutes.js +5 -3
  128. package/build/server/app/server/subscribeRoutes.js.map +1 -1
  129. package/build/server/app/server/telegramCommandSurface.d.ts +29 -0
  130. package/build/server/app/server/telegramCommandSurface.d.ts.map +1 -0
  131. package/build/server/app/server/telegramCommandSurface.js +123 -0
  132. package/build/server/app/server/telegramCommandSurface.js.map +1 -0
  133. package/build/server/app/server/transportWorkGoldenPath.d.ts +82 -0
  134. package/build/server/app/server/transportWorkGoldenPath.d.ts.map +1 -0
  135. package/build/server/app/server/transportWorkGoldenPath.js +307 -0
  136. package/build/server/app/server/transportWorkGoldenPath.js.map +1 -0
  137. package/build/server/config.d.ts +21 -0
  138. package/build/server/config.d.ts.map +1 -1
  139. package/build/server/config.js +12 -0
  140. package/build/server/config.js.map +1 -1
  141. package/build/server/design/components/providerModelFieldsSupport.d.ts +5 -24
  142. package/build/server/design/components/providerModelFieldsSupport.d.ts.map +1 -1
  143. package/build/server/design/components/providerModelFieldsSupport.js +65 -70
  144. package/build/server/design/components/providerModelFieldsSupport.js.map +1 -1
  145. package/build/server/design/components/useProviderCatalogState.d.ts +2 -2
  146. package/build/server/design/components/useProviderCatalogState.d.ts.map +1 -1
  147. package/build/server/design/components/useProviderCatalogState.js +71 -151
  148. package/build/server/design/components/useProviderCatalogState.js.map +1 -1
  149. package/build/server/design/components/useProviderModelFieldActions.js +2 -2
  150. package/build/server/design/components/useProviderModelFieldActions.js.map +1 -1
  151. package/build/server/design/components/useProviderRegistryState.d.ts +1 -7
  152. package/build/server/design/components/useProviderRegistryState.d.ts.map +1 -1
  153. package/build/server/design/components/useProviderRegistryState.js +41 -104
  154. package/build/server/design/components/useProviderRegistryState.js.map +1 -1
  155. package/build/server/design/components/useProviderTargetReconciliation.d.ts +1 -0
  156. package/build/server/design/components/useProviderTargetReconciliation.d.ts.map +1 -1
  157. package/build/server/design/components/useProviderTargetReconciliation.js +3 -2
  158. package/build/server/design/components/useProviderTargetReconciliation.js.map +1 -1
  159. package/build/server/index.js +4 -0
  160. package/build/server/index.js.map +1 -1
  161. package/build/server/platform/apps/packageInstaller.d.ts +19 -0
  162. package/build/server/platform/apps/packageInstaller.d.ts.map +1 -0
  163. package/build/server/platform/apps/packageInstaller.js +92 -0
  164. package/build/server/platform/apps/packageInstaller.js.map +1 -0
  165. package/build/server/platform/apps/registry.d.ts +6 -0
  166. package/build/server/platform/apps/registry.d.ts.map +1 -1
  167. package/build/server/platform/apps/registry.js +24 -0
  168. package/build/server/platform/apps/registry.js.map +1 -1
  169. package/build/server/platform/apps/renderer.d.ts +6 -0
  170. package/build/server/platform/apps/renderer.d.ts.map +1 -0
  171. package/build/server/platform/apps/renderer.js +18 -0
  172. package/build/server/platform/apps/renderer.js.map +1 -0
  173. package/build/server/platform/orchestration/entitySubscriptions/channel.d.ts +2 -1
  174. package/build/server/platform/orchestration/entitySubscriptions/channel.d.ts.map +1 -1
  175. package/build/server/platform/orchestration/entitySubscriptions/channel.js +3 -18
  176. package/build/server/platform/orchestration/entitySubscriptions/channel.js.map +1 -1
  177. package/build/server/platform/orchestration/entitySubscriptions/index.d.ts +1 -0
  178. package/build/server/platform/orchestration/entitySubscriptions/index.d.ts.map +1 -1
  179. package/build/server/platform/orchestration/entitySubscriptions/index.js.map +1 -1
  180. package/build/server/platform/runtime/deliveryClient.d.ts +111 -0
  181. package/build/server/platform/runtime/deliveryClient.d.ts.map +1 -0
  182. package/build/server/platform/runtime/deliveryClient.js +289 -0
  183. package/build/server/platform/runtime/deliveryClient.js.map +1 -0
  184. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.d.ts +1 -0
  185. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.d.ts.map +1 -1
  186. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.js +10 -0
  187. package/build/server/platform/supervision/providerCapabilityBootstrapYaml.js.map +1 -1
  188. package/build/server/platform/supervision/runtimeBoundary.d.ts +11 -1
  189. package/build/server/platform/supervision/runtimeBoundary.d.ts.map +1 -1
  190. package/build/server/platform/supervision/runtimeBoundary.js +2 -2
  191. package/build/server/platform/supervision/runtimeBoundary.js.map +1 -1
  192. package/build/server/platform/transports/telegram/bridge.d.ts +18 -0
  193. package/build/server/platform/transports/telegram/bridge.d.ts.map +1 -1
  194. package/build/server/platform/transports/telegram/bridge.js +176 -0
  195. package/build/server/platform/transports/telegram/bridge.js.map +1 -1
  196. package/build/server/platform/transports/telegram/commandPort.d.ts +40 -0
  197. package/build/server/platform/transports/telegram/commandPort.d.ts.map +1 -0
  198. package/build/server/platform/transports/telegram/commandPort.js +17 -0
  199. package/build/server/platform/transports/telegram/commandPort.js.map +1 -0
  200. package/build/server/platform/transports/telegram/commandRouter.d.ts +22 -0
  201. package/build/server/platform/transports/telegram/commandRouter.d.ts.map +1 -1
  202. package/build/server/platform/transports/telegram/commandRouter.js.map +1 -1
  203. package/build/server/platform/transports/telegram/commands/index.d.ts.map +1 -1
  204. package/build/server/platform/transports/telegram/commands/index.js +38 -0
  205. package/build/server/platform/transports/telegram/commands/index.js.map +1 -1
  206. package/build/server/platform/transports/telegram/ingressDispatch.d.ts +56 -0
  207. package/build/server/platform/transports/telegram/ingressDispatch.d.ts.map +1 -0
  208. package/build/server/platform/transports/telegram/ingressDispatch.js +93 -0
  209. package/build/server/platform/transports/telegram/ingressDispatch.js.map +1 -0
  210. package/build/server/platform/transports/telegram/polling.d.ts +34 -0
  211. package/build/server/platform/transports/telegram/polling.d.ts.map +1 -1
  212. package/build/server/platform/transports/telegram/polling.js +86 -9
  213. package/build/server/platform/transports/telegram/polling.js.map +1 -1
  214. package/build/server/platform/transports/telegram/relay/index.d.ts +3 -0
  215. package/build/server/platform/transports/telegram/relay/index.d.ts.map +1 -1
  216. package/build/server/platform/transports/telegram/relay/index.js +5 -1
  217. package/build/server/platform/transports/telegram/relay/index.js.map +1 -1
  218. package/build/server/platform/transports/telegram/relay/ingress.d.ts +2 -0
  219. package/build/server/platform/transports/telegram/relay/ingress.d.ts.map +1 -1
  220. package/build/server/platform/transports/telegram/relay/ingress.js +1 -1
  221. package/build/server/platform/transports/telegram/relay/ingress.js.map +1 -1
  222. package/build/server/platform/transports/work-delivery/actionTokens.d.ts +66 -0
  223. package/build/server/platform/transports/work-delivery/actionTokens.d.ts.map +1 -0
  224. package/build/server/platform/transports/work-delivery/actionTokens.js +145 -0
  225. package/build/server/platform/transports/work-delivery/actionTokens.js.map +1 -0
  226. package/build/server/platform/transports/work-delivery/contracts.d.ts +172 -0
  227. package/build/server/platform/transports/work-delivery/contracts.d.ts.map +1 -0
  228. package/build/server/platform/transports/work-delivery/contracts.js +26 -0
  229. package/build/server/platform/transports/work-delivery/contracts.js.map +1 -0
  230. package/build/server/platform/transports/work-delivery/deliveryGates.d.ts +32 -0
  231. package/build/server/platform/transports/work-delivery/deliveryGates.d.ts.map +1 -0
  232. package/build/server/platform/transports/work-delivery/deliveryGates.js +45 -0
  233. package/build/server/platform/transports/work-delivery/deliveryGates.js.map +1 -0
  234. package/build/server/platform/transports/work-delivery/inboundClassification.d.ts +31 -0
  235. package/build/server/platform/transports/work-delivery/inboundClassification.d.ts.map +1 -0
  236. package/build/server/platform/transports/work-delivery/inboundClassification.js +52 -0
  237. package/build/server/platform/transports/work-delivery/inboundClassification.js.map +1 -0
  238. package/build/server/platform/transports/work-delivery/outbox.d.ts +84 -0
  239. package/build/server/platform/transports/work-delivery/outbox.d.ts.map +1 -0
  240. package/build/server/platform/transports/work-delivery/outbox.js +270 -0
  241. package/build/server/platform/transports/work-delivery/outbox.js.map +1 -0
  242. package/build/server/platform/transports/work-delivery/permissionEnvelope.d.ts +57 -0
  243. package/build/server/platform/transports/work-delivery/permissionEnvelope.d.ts.map +1 -0
  244. package/build/server/platform/transports/work-delivery/permissionEnvelope.js +74 -0
  245. package/build/server/platform/transports/work-delivery/permissionEnvelope.js.map +1 -0
  246. package/build/server/platform/transports/work-delivery/port.d.ts +60 -0
  247. package/build/server/platform/transports/work-delivery/port.d.ts.map +1 -0
  248. package/build/server/platform/transports/work-delivery/port.js +15 -0
  249. package/build/server/platform/transports/work-delivery/port.js.map +1 -0
  250. package/build/server/platform/transports/work-delivery/proposal.d.ts +31 -0
  251. package/build/server/platform/transports/work-delivery/proposal.d.ts.map +1 -0
  252. package/build/server/platform/transports/work-delivery/proposal.js +59 -0
  253. package/build/server/platform/transports/work-delivery/proposal.js.map +1 -0
  254. package/build/server/platform/transports/work-delivery/readiness.d.ts +61 -0
  255. package/build/server/platform/transports/work-delivery/readiness.d.ts.map +1 -0
  256. package/build/server/platform/transports/work-delivery/readiness.js +123 -0
  257. package/build/server/platform/transports/work-delivery/readiness.js.map +1 -0
  258. package/build/server/platform/transports/work-delivery/stageProjection.d.ts +43 -0
  259. package/build/server/platform/transports/work-delivery/stageProjection.d.ts.map +1 -0
  260. package/build/server/platform/transports/work-delivery/stageProjection.js +132 -0
  261. package/build/server/platform/transports/work-delivery/stageProjection.js.map +1 -0
  262. package/build/server/platform/transports/work-delivery/stateStore.d.ts +21 -0
  263. package/build/server/platform/transports/work-delivery/stateStore.d.ts.map +1 -0
  264. package/build/server/platform/transports/work-delivery/stateStore.js +193 -0
  265. package/build/server/platform/transports/work-delivery/stateStore.js.map +1 -0
  266. package/build/server/platform/transports/work-delivery/telemetry.d.ts +49 -0
  267. package/build/server/platform/transports/work-delivery/telemetry.d.ts.map +1 -0
  268. package/build/server/platform/transports/work-delivery/telemetry.js +80 -0
  269. package/build/server/platform/transports/work-delivery/telemetry.js.map +1 -0
  270. package/build/server/products/chat/api/contracts.d.ts +10 -0
  271. package/build/server/products/chat/api/contracts.d.ts.map +1 -1
  272. package/build/server/products/chat/api/resources/channelRoutes.d.ts.map +1 -1
  273. package/build/server/products/chat/api/resources/channelRoutes.js +27 -1
  274. package/build/server/products/chat/api/resources/channelRoutes.js.map +1 -1
  275. package/build/server/products/chat/api/routeSupport.d.ts +17 -1
  276. package/build/server/products/chat/api/routeSupport.d.ts.map +1 -1
  277. package/build/server/products/chat/api/routeSupport.js +27 -4
  278. package/build/server/products/chat/api/routeSupport.js.map +1 -1
  279. package/build/server/products/chat/api/setupRoutes.d.ts.map +1 -1
  280. package/build/server/products/chat/api/setupRoutes.js +23 -8
  281. package/build/server/products/chat/api/setupRoutes.js.map +1 -1
  282. package/build/server/products/chat/state/model/channelExecutionTargets.d.ts +15 -0
  283. package/build/server/products/chat/state/model/channelExecutionTargets.d.ts.map +1 -1
  284. package/build/server/products/chat/state/model/channelExecutionTargets.js +25 -0
  285. package/build/server/products/chat/state/model/channelExecutionTargets.js.map +1 -1
  286. package/build/server/products/chat/state/model/index.d.ts +1 -1
  287. package/build/server/products/chat/state/model/index.d.ts.map +1 -1
  288. package/build/server/products/chat/state/model/index.js +1 -1
  289. package/build/server/products/chat/state/model/index.js.map +1 -1
  290. package/build/server/products/chat/state/model/readModels.d.ts +1 -0
  291. package/build/server/products/chat/state/model/readModels.d.ts.map +1 -1
  292. package/build/server/products/chat/state/model/readModels.js +2 -1
  293. package/build/server/products/chat/state/model/readModels.js.map +1 -1
  294. package/build/server/products/code/api/relayRoutes.d.ts.map +1 -1
  295. package/build/server/products/code/api/relayRoutes.js +36 -7
  296. package/build/server/products/code/api/relayRoutes.js.map +1 -1
  297. package/build/server/products/code/state/relayState.d.ts +2 -1
  298. package/build/server/products/code/state/relayState.d.ts.map +1 -1
  299. package/build/server/products/code/state/relayState.js +7 -7
  300. package/build/server/products/code/state/relayState.js.map +1 -1
  301. package/build/server/products/shared/api/workspaceContracts.d.ts +5 -0
  302. package/build/server/products/shared/api/workspaceContracts.d.ts.map +1 -1
  303. package/build/server/products/shared/renderer/api/appShell.d.ts +1 -0
  304. package/build/server/products/shared/renderer/api/appShell.d.ts.map +1 -1
  305. package/build/server/products/shared/renderer/api/appShell.js +9 -0
  306. package/build/server/products/shared/renderer/api/appShell.js.map +1 -1
  307. package/build/server/products/work/api/goldenPathProjection.d.ts +156 -0
  308. package/build/server/products/work/api/goldenPathProjection.d.ts.map +1 -0
  309. package/build/server/products/work/api/goldenPathProjection.js +252 -0
  310. package/build/server/products/work/api/goldenPathProjection.js.map +1 -0
  311. package/build/server/products/work/api/index.d.ts +54 -1
  312. package/build/server/products/work/api/index.d.ts.map +1 -1
  313. package/build/server/products/work/api/index.js +182 -4
  314. package/build/server/products/work/api/index.js.map +1 -1
  315. package/build/server/products/work/api/projection.d.ts +7 -1
  316. package/build/server/products/work/api/projection.d.ts.map +1 -1
  317. package/build/server/products/work/api/projection.js +7 -1
  318. package/build/server/products/work/api/projection.js.map +1 -1
  319. package/build/server/products/work/shared/apiPaths.d.ts +8 -0
  320. package/build/server/products/work/shared/apiPaths.d.ts.map +1 -1
  321. package/build/server/products/work/shared/apiPaths.js +8 -0
  322. package/build/server/products/work/shared/apiPaths.js.map +1 -1
  323. package/build/server/products/work/shared/workGoldenPathMessages.d.ts +83 -0
  324. package/build/server/products/work/shared/workGoldenPathMessages.d.ts.map +1 -0
  325. package/build/server/products/work/shared/workGoldenPathMessages.js +211 -0
  326. package/build/server/products/work/shared/workGoldenPathMessages.js.map +1 -0
  327. package/build/server/products/work/shared/workGoldenPathMetadata.d.ts +45 -0
  328. package/build/server/products/work/shared/workGoldenPathMetadata.d.ts.map +1 -0
  329. package/build/server/products/work/shared/workGoldenPathMetadata.js +122 -0
  330. package/build/server/products/work/shared/workGoldenPathMetadata.js.map +1 -0
  331. package/build/server/products/work/state/workCompletionEvidence.d.ts +42 -0
  332. package/build/server/products/work/state/workCompletionEvidence.d.ts.map +1 -0
  333. package/build/server/products/work/state/workCompletionEvidence.js +59 -0
  334. package/build/server/products/work/state/workCompletionEvidence.js.map +1 -0
  335. package/build/server/products/work/state/workExecutionTaskDelegate.d.ts +16 -0
  336. package/build/server/products/work/state/workExecutionTaskDelegate.d.ts.map +1 -1
  337. package/build/server/products/work/state/workExecutionTaskDelegate.js +91 -68
  338. package/build/server/products/work/state/workExecutionTaskDelegate.js.map +1 -1
  339. package/build/server/products/work/state/workGoldenPathAdmission.d.ts +78 -0
  340. package/build/server/products/work/state/workGoldenPathAdmission.d.ts.map +1 -0
  341. package/build/server/products/work/state/workGoldenPathAdmission.js +249 -0
  342. package/build/server/products/work/state/workGoldenPathAdmission.js.map +1 -0
  343. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.d.ts +33 -0
  344. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.d.ts.map +1 -0
  345. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.js +161 -0
  346. package/build/server/products/work/state/workGoldenPathDeliveryEvidence.js.map +1 -0
  347. package/build/server/products/work/state/workGoldenPathIntake.d.ts +34 -0
  348. package/build/server/products/work/state/workGoldenPathIntake.d.ts.map +1 -0
  349. package/build/server/products/work/state/workGoldenPathIntake.js +50 -0
  350. package/build/server/products/work/state/workGoldenPathIntake.js.map +1 -0
  351. package/build/server/products/work/state/workGoldenPathLifecycle.d.ts +44 -0
  352. package/build/server/products/work/state/workGoldenPathLifecycle.d.ts.map +1 -0
  353. package/build/server/products/work/state/workGoldenPathLifecycle.js +146 -0
  354. package/build/server/products/work/state/workGoldenPathLifecycle.js.map +1 -0
  355. package/build/server/products/work/state/workGoldenPathPublish.d.ts +84 -0
  356. package/build/server/products/work/state/workGoldenPathPublish.d.ts.map +1 -0
  357. package/build/server/products/work/state/workGoldenPathPublish.js +488 -0
  358. package/build/server/products/work/state/workGoldenPathPublish.js.map +1 -0
  359. package/build/server/products/work/state/workGoldenPathRunner.d.ts +121 -0
  360. package/build/server/products/work/state/workGoldenPathRunner.d.ts.map +1 -0
  361. package/build/server/products/work/state/workGoldenPathRunner.js +447 -0
  362. package/build/server/products/work/state/workGoldenPathRunner.js.map +1 -0
  363. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.d.ts +74 -0
  364. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.d.ts.map +1 -0
  365. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.js +239 -0
  366. package/build/server/products/work/state/workGoldenPathRuntimeExecutor.js.map +1 -0
  367. package/build/server/products/work/state/workGoldenPathService.d.ts +152 -0
  368. package/build/server/products/work/state/workGoldenPathService.d.ts.map +1 -0
  369. package/build/server/products/work/state/workGoldenPathService.js +1057 -0
  370. package/build/server/products/work/state/workGoldenPathService.js.map +1 -0
  371. package/build/server/products/work/state/workGoldenPathTelegramPort.d.ts +87 -0
  372. package/build/server/products/work/state/workGoldenPathTelegramPort.d.ts.map +1 -0
  373. package/build/server/products/work/state/workGoldenPathTelegramPort.js +220 -0
  374. package/build/server/products/work/state/workGoldenPathTelegramPort.js.map +1 -0
  375. package/build/server/runtime/client.d.ts +13 -0
  376. package/build/server/runtime/client.d.ts.map +1 -1
  377. package/build/server/runtime/client.js +44 -1
  378. package/build/server/runtime/client.js.map +1 -1
  379. package/build/server/runtime/setup.d.ts +14 -4
  380. package/build/server/runtime/setup.d.ts.map +1 -1
  381. package/build/server/runtime/setup.js +17 -19
  382. package/build/server/runtime/setup.js.map +1 -1
  383. package/build/server/runtime/usageSnapshot.d.ts +3 -0
  384. package/build/server/runtime/usageSnapshot.d.ts.map +1 -0
  385. package/build/server/runtime/usageSnapshot.js +69 -0
  386. package/build/server/runtime/usageSnapshot.js.map +1 -0
  387. package/build/server/server/routes/providerCapabilityBootstrap.d.ts +69 -0
  388. package/build/server/server/routes/providerCapabilityBootstrap.d.ts.map +1 -0
  389. package/build/server/server/routes/providerCapabilityBootstrap.js +165 -0
  390. package/build/server/server/routes/providerCapabilityBootstrap.js.map +1 -0
  391. package/build/server/server/routes/providers.d.ts.map +1 -1
  392. package/build/server/server/routes/providers.js +133 -131
  393. package/build/server/server/routes/providers.js.map +1 -1
  394. package/build/server/server/routes/telegram.d.ts +9 -0
  395. package/build/server/server/routes/telegram.d.ts.map +1 -1
  396. package/build/server/server/routes/telegram.js +79 -72
  397. package/build/server/server/routes/telegram.js.map +1 -1
  398. package/build/server/shared/catsAppManifest.d.ts +3 -1
  399. package/build/server/shared/catsAppManifest.d.ts.map +1 -1
  400. package/build/server/shared/catsAppManifest.js +2 -0
  401. package/build/server/shared/catsAppManifest.js.map +1 -1
  402. package/build/server/shared/desktopRecoveryBridge.d.ts +2 -1
  403. package/build/server/shared/desktopRecoveryBridge.d.ts.map +1 -1
  404. package/build/server/shared/desktopRecoveryBridge.js.map +1 -1
  405. package/build/server/shared/executionLabel.d.ts.map +1 -1
  406. package/build/server/shared/executionLabel.js +8 -1
  407. package/build/server/shared/executionLabel.js.map +1 -1
  408. package/build/server/shared/i18n/catalogs/en.d.ts.map +1 -1
  409. package/build/server/shared/i18n/catalogs/en.js +198 -3
  410. package/build/server/shared/i18n/catalogs/en.js.map +1 -1
  411. package/build/server/shared/i18n/catalogs/zh-TW.d.ts.map +1 -1
  412. package/build/server/shared/i18n/catalogs/zh-TW.js +197 -3
  413. package/build/server/shared/i18n/catalogs/zh-TW.js.map +1 -1
  414. package/build/server/shared/i18n/index.d.ts +192 -0
  415. package/build/server/shared/i18n/index.d.ts.map +1 -1
  416. package/build/server/shared/i18n/messageKeys.d.ts +192 -0
  417. package/build/server/shared/i18n/messageKeys.d.ts.map +1 -1
  418. package/build/server/shared/i18n/messageKeys.js +192 -0
  419. package/build/server/shared/i18n/messageKeys.js.map +1 -1
  420. package/build/server/shared/platformSetupOperation.d.ts +2 -0
  421. package/build/server/shared/platformSetupOperation.d.ts.map +1 -0
  422. package/build/server/shared/platformSetupOperation.js +9 -0
  423. package/build/server/shared/platformSetupOperation.js.map +1 -0
  424. package/build/server/shared/providerCatalog.d.ts +5 -2
  425. package/build/server/shared/providerCatalog.d.ts.map +1 -1
  426. package/build/server/shared/providerCatalog.js +6 -0
  427. package/build/server/shared/providerCatalog.js.map +1 -1
  428. package/build/server/shared/providerCatalogData.d.ts +154 -77
  429. package/build/server/shared/providerCatalogData.d.ts.map +1 -1
  430. package/build/server/shared/providerCatalogData.js +73 -36
  431. package/build/server/shared/providerCatalogData.js.map +1 -1
  432. package/build/server/shared/providerCatalogInstances.d.ts.map +1 -1
  433. package/build/server/shared/providerCatalogInstances.js +3 -0
  434. package/build/server/shared/providerCatalogInstances.js.map +1 -1
  435. package/build/server/shared/providerModelLabelRegistry.d.ts +29 -0
  436. package/build/server/shared/providerModelLabelRegistry.d.ts.map +1 -0
  437. package/build/server/shared/providerModelLabelRegistry.js +49 -0
  438. package/build/server/shared/providerModelLabelRegistry.js.map +1 -0
  439. package/build/server/shared/providerRegistryWarnings.d.ts +4 -0
  440. package/build/server/shared/providerRegistryWarnings.d.ts.map +1 -1
  441. package/build/server/shared/providerRegistryWarnings.js +7 -0
  442. package/build/server/shared/providerRegistryWarnings.js.map +1 -1
  443. package/build/server/shared/providerSelection.d.ts.map +1 -1
  444. package/build/server/shared/providerSelection.js +10 -13
  445. package/build/server/shared/providerSelection.js.map +1 -1
  446. package/build/server/shared/runtimeSetup.d.ts +17 -4
  447. package/build/server/shared/runtimeSetup.d.ts.map +1 -1
  448. package/build/server/shared/runtimeStatusPresentation.js +1 -1
  449. package/build/server/shared/runtimeStatusPresentation.js.map +1 -1
  450. package/package.json +32 -3
  451. package/packages/app-sdk/browser.d.ts +51 -0
  452. package/packages/app-sdk/browser.js +48 -0
  453. package/packages/app-sdk/package.d.ts +14 -0
  454. package/packages/app-sdk/package.js +131 -0
  455. package/packages/app-sdk/package.json +7 -0
  456. package/packages/provider-setup/manager.d.ts +79 -0
  457. package/packages/provider-setup/manager.js +441 -0
  458. package/scripts/README.md +66 -26
  459. package/scripts/build-desktop-installer.mjs +139 -16
  460. package/scripts/build-test-ui.mjs +1 -1
  461. package/scripts/bundle-server.mjs +23 -10
  462. package/scripts/linux/build-desktop-package.sh +6 -6
  463. package/scripts/linux/install-antigravity.sh +0 -0
  464. package/scripts/linux/install-devin.sh +0 -0
  465. package/scripts/linux/install-github-cli.sh +5 -0
  466. package/scripts/linux/install-meta-cli.sh +8 -0
  467. package/scripts/linux/install-node.sh +9 -3
  468. package/scripts/linux/node-cli-common.sh +87 -48
  469. package/scripts/linux/provider-cli-common.sh +178 -130
  470. package/scripts/linux/provider-version-common.sh +247 -0
  471. package/scripts/linux/sync-agent-skills.sh +27 -5
  472. package/scripts/linux/test-linux-package-smoke.sh +6 -3
  473. package/scripts/linux/upgrade-cli-tools.sh +1 -1
  474. package/scripts/linux/verified-npm-update.sh +20 -0
  475. package/scripts/macos/build-desktop-package.sh +5 -5
  476. package/scripts/macos/install-antigravity.sh +0 -0
  477. package/scripts/macos/install-devin.sh +0 -0
  478. package/scripts/macos/install-github-cli.sh +5 -0
  479. package/scripts/macos/install-meta-cli.sh +8 -0
  480. package/scripts/macos/install-node.sh +9 -3
  481. package/scripts/macos/node-cli-common.sh +87 -48
  482. package/scripts/macos/provider-cli-common.sh +178 -130
  483. package/scripts/macos/provider-version-common.sh +247 -0
  484. package/scripts/macos/sync-agent-skills.sh +27 -5
  485. package/scripts/macos/test-macos-package-smoke.sh +6 -3
  486. package/scripts/macos/upgrade-cli-tools.sh +1 -1
  487. package/scripts/macos/verified-npm-update.sh +20 -0
  488. package/scripts/package-desktop.mjs +15 -2
  489. package/scripts/testing/check-usage-app.mts +266 -0
  490. package/scripts/testing/conversation-navigation-smoke-electron.cjs +134 -0
  491. package/scripts/testing/conversation-navigation-smoke-renderer.tsx +102 -0
  492. package/scripts/testing/conversation-navigation-smoke.mjs +67 -0
  493. package/scripts/testing/usage-app-smoke-electron.cjs +10 -0
  494. package/scripts/testing/usage-app-smoke-renderer.tsx +8 -0
  495. package/scripts/validate-release-assets.mjs +4 -1
  496. package/scripts/verify-desktop-app-bundle.mjs +108 -0
  497. package/scripts/windows/Build-DesktopPackage.ps1 +9 -6
  498. package/scripts/windows/Install-Antigravity.ps1 +26 -3
  499. package/scripts/windows/Install-ClaudeCode.ps1 +25 -7
  500. package/scripts/windows/Install-CursorAgent.ps1 +45 -30
  501. package/scripts/windows/Install-Devin.ps1 +16 -47
  502. package/scripts/windows/Install-GitHubCli.ps1 +4 -0
  503. package/scripts/windows/Install-Goose.ps1 +18 -1
  504. package/scripts/windows/Install-Grok.ps1 +14 -1
  505. package/scripts/windows/Install-Junie.ps1 +32 -11
  506. package/scripts/windows/Install-KiroCli.ps1 +37 -13
  507. package/scripts/windows/Install-MetaCli.ps1 +463 -0
  508. package/scripts/windows/Install-Node.ps1 +6 -1
  509. package/scripts/windows/Install-Ollama.ps1 +4 -1
  510. package/scripts/windows/Setup-NodeGlobalPrefix.ps1 +10 -0
  511. package/scripts/windows/Sync-AgentSkills.ps1 +29 -6
  512. package/scripts/windows/Test-WindowsInstallerSmoke.ps1 +4 -1
  513. package/scripts/windows/_HiddenProcess.ps1 +14 -3
  514. package/scripts/windows/_NativeInstallerSupport.ps1 +308 -0
  515. package/scripts/windows/_NpmCliInstaller.ps1 +35 -14
  516. package/scripts/windows/_PackagedUninstall.ps1 +9 -1
  517. package/scripts/windows/_VerifiedNpmUpdate.ps1 +25 -0
  518. package/build/desktop/updateNotifications.d.ts +0 -64
  519. package/build/desktop/updateNotifications.d.ts.map +0 -1
  520. package/build/desktop/updateNotifications.js +0 -143
  521. package/build/desktop/updateNotifications.js.map +0 -1
  522. package/build/renderer/assets/ActiveSessionPermissionChip-DImsuR9T.js +0 -1
  523. package/build/renderer/assets/App-BfOvMP2m.js +0 -1
  524. package/build/renderer/assets/App-DGwkRFZl.css +0 -1
  525. package/build/renderer/assets/App-DWd7I3Z2.js +0 -2
  526. package/build/renderer/assets/WorkspaceAppRoutes-CrbTA9En.js +0 -1
  527. package/build/renderer/assets/app-BTww3Hl4.js +0 -43
  528. package/build/renderer/assets/app-CPxWQwLA.css +0 -1
  529. package/build/renderer/assets/conversationSidebarRecentEntries-QuaOPxCb.js +0 -6
  530. package/build/server/app/renderer/settings/runtimeLifecycleHelpers.d.ts +0 -48
  531. package/build/server/app/renderer/settings/runtimeLifecycleHelpers.d.ts.map +0 -1
  532. package/build/server/app/renderer/settings/runtimeLifecycleHelpers.js +0 -535
  533. package/build/server/app/renderer/settings/runtimeLifecycleHelpers.js.map +0 -1
  534. package/build/server/design/components/useProviderRegistryAutoRecheck.d.ts +0 -13
  535. package/build/server/design/components/useProviderRegistryAutoRecheck.d.ts.map +0 -1
  536. package/build/server/design/components/useProviderRegistryAutoRecheck.js +0 -63
  537. package/build/server/design/components/useProviderRegistryAutoRecheck.js.map +0 -1
  538. package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.d.ts +0 -19
  539. package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.d.ts.map +0 -1
  540. package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.js +0 -53
  541. package/build/server/products/shared/renderer/api/providerCatalogRefreshStore.js.map +0 -1
  542. package/build/server/products/shared/renderer/api/providers.d.ts +0 -17
  543. package/build/server/products/shared/renderer/api/providers.d.ts.map +0 -1
  544. package/build/server/products/shared/renderer/api/providers.js +0 -50
  545. package/build/server/products/shared/renderer/api/providers.js.map +0 -1
  546. package/scripts/linux/install-aider.sh +0 -8
  547. package/scripts/macos/install-aider.sh +0 -8
  548. package/scripts/windows/Install-Aider.ps1 +0 -368
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Transport golden-path authorization/admission (SPEC-114 FR-20..FR-27).
3
+ *
4
+ * One product-owned command turns a *later* explicit owner event over an
5
+ * already-visible scope revision into exactly one approved Task and one queued
6
+ * supervised Run. ADR-112 section 4 forbids the transport from editing Core
7
+ * records itself, so Telegram calls this and nothing else.
8
+ *
9
+ * Atomicity is the reason this is a single `updateCore` mutator rather than a
10
+ * sequence of delegate calls: a crash between "Task approved" and "Run queued"
11
+ * would otherwise leave a half-admitted scope that a retry turns into a second
12
+ * Run.
13
+ */
14
+ import { createHash } from 'node:crypto';
15
+ import { appendCoreActivity, upsertCoreRun, writeApprovalDecision, } from '../../../core/model/index.js';
16
+ import { applyWorkExecutionTaskCreation } from './workExecutionTaskDelegate.js';
17
+ import { readWorkGoldenPathMetadata, WORK_GOLDEN_PATH_METADATA_KEY, } from '../shared/workGoldenPathMetadata.js';
18
+ function isRecord(value) {
19
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
20
+ }
21
+ /** Reads the run-scoped execution envelope defensively during restart recovery. */
22
+ export function readWorkGoldenPathExecutionSnapshot(metadata) {
23
+ if (!isRecord(metadata)) {
24
+ return { executionTarget: null, toolScope: 'none', workspaceHeadOid: null };
25
+ }
26
+ const goldenPath = metadata[WORK_GOLDEN_PATH_METADATA_KEY];
27
+ if (!isRecord(goldenPath) || !isRecord(goldenPath.execution)) {
28
+ return { executionTarget: null, toolScope: 'none', workspaceHeadOid: null };
29
+ }
30
+ const execution = goldenPath.execution;
31
+ const rawTarget = isRecord(execution.target) ? execution.target : null;
32
+ const provider = rawTarget && typeof rawTarget.provider === 'string'
33
+ ? rawTarget.provider.trim()
34
+ : '';
35
+ const rawScope = execution.toolScope;
36
+ const toolScope = rawScope === 'read_only'
37
+ || rawScope === 'narrow_write'
38
+ || rawScope === 'broad_write'
39
+ ? rawScope
40
+ : 'none';
41
+ return {
42
+ executionTarget: provider === '' ? null : {
43
+ provider,
44
+ instance: rawTarget && typeof rawTarget.instance === 'string'
45
+ ? rawTarget.instance
46
+ : null,
47
+ model: rawTarget && typeof rawTarget.model === 'string' ? rawTarget.model : null,
48
+ },
49
+ toolScope,
50
+ workspaceHeadOid: typeof execution.workspaceHeadOid === 'string'
51
+ ? execution.workspaceHeadOid
52
+ : null,
53
+ };
54
+ }
55
+ /**
56
+ * Stable admission key over binding, work item, revision, and action.
57
+ *
58
+ * Deliberately excludes `ownerEventRef`: a replayed callback carries a *new*
59
+ * Telegram callback id but authorizes the same scope, and must land on the same
60
+ * Task and Run.
61
+ */
62
+ export function buildWorkGoldenPathAdmissionKey(input) {
63
+ return [
64
+ 'wgp-admit',
65
+ input.bindingId,
66
+ input.workItemId,
67
+ String(input.proposalRevision),
68
+ input.proposalDigest,
69
+ ].join(':');
70
+ }
71
+ /**
72
+ * Deterministic Run id for an admission key.
73
+ *
74
+ * Exported so a caller can tell "this scope is already admitted" apart from
75
+ * "this action is not allowed here" before it rejects a replayed button.
76
+ */
77
+ export function resolveWorkGoldenPathRunId(admissionKey) {
78
+ return `run-wgp-${createHash('sha256').update(admissionKey).digest('hex').slice(0, 20)}`;
79
+ }
80
+ function admissionActivityId(admissionKey) {
81
+ return `activity-wgp-${createHash('sha256').update(admissionKey).digest('hex').slice(0, 20)}`;
82
+ }
83
+ function blocked(admissionKey, workItemId, reason, message) {
84
+ return {
85
+ status: 'blocked',
86
+ reason,
87
+ message,
88
+ admissionKey,
89
+ workItemId,
90
+ taskId: null,
91
+ runId: null,
92
+ };
93
+ }
94
+ class AdmissionBlockedError extends Error {
95
+ reason;
96
+ constructor(reason, message) {
97
+ super(message);
98
+ this.reason = reason;
99
+ this.name = 'AdmissionBlockedError';
100
+ }
101
+ }
102
+ function verifyScope(workItem, input) {
103
+ const metadata = readWorkGoldenPathMetadata(workItem.metadata);
104
+ if (metadata === null || metadata.proposal === null || metadata.origin === null) {
105
+ throw new AdmissionBlockedError('proposal_missing', `Work Item ${workItem.id} has no versioned golden-path proposal to authorize.`);
106
+ }
107
+ if (metadata.origin.bindingId !== input.bindingId) {
108
+ throw new AdmissionBlockedError('origin_mismatch', 'Authorization arrived on a different binding than the one that captured this work.');
109
+ }
110
+ if (metadata.proposal.revision !== input.proposalRevision) {
111
+ throw new AdmissionBlockedError('stale_revision', `Proposal revision ${input.proposalRevision} is stale; current revision is `
112
+ + `${metadata.proposal.revision}.`);
113
+ }
114
+ if (metadata.proposal.digest !== input.proposalDigest) {
115
+ throw new AdmissionBlockedError('digest_mismatch', 'The proposal changed after this action was offered; confirm the refreshed scope.');
116
+ }
117
+ return { proposal: metadata.proposal, origin: metadata.origin };
118
+ }
119
+ /**
120
+ * Finds an already-queued Run for this admission key.
121
+ *
122
+ * Both the deterministic id and the metadata key are checked so recovery works
123
+ * whether the previous attempt got as far as writing the Run or not.
124
+ */
125
+ function findAdmittedRun(core, admissionKey) {
126
+ const runId = resolveWorkGoldenPathRunId(admissionKey);
127
+ return core.runs.find((run) => run.id === runId) ?? null;
128
+ }
129
+ export async function admitTransportWorkExecution(coreStore, input, now = () => new Date()) {
130
+ const admissionKey = buildWorkGoldenPathAdmissionKey(input);
131
+ if (!input.readiness.ready) {
132
+ return blocked(admissionKey, input.workItemId, 'not_ready', `Delegation readiness is incomplete: ${input.readiness.blockers
133
+ .map((entry) => entry.reason)
134
+ .join(', ')}.`);
135
+ }
136
+ const createdAt = now();
137
+ let resolvedTask = null;
138
+ let resolvedRun = null;
139
+ let alreadyAdmitted = false;
140
+ try {
141
+ await coreStore.updateCore((core) => {
142
+ const workItem = core.workItems.find((candidate) => candidate.id === input.workItemId)
143
+ ?? null;
144
+ if (workItem === null) {
145
+ throw new AdmissionBlockedError('work_item_not_found', `No Work Item found for id ${input.workItemId}.`);
146
+ }
147
+ const { proposal } = verifyScope(workItem, input);
148
+ const existingRun = findAdmittedRun(core, admissionKey);
149
+ if (existingRun !== null) {
150
+ // Replay: the same owner event already produced this Run.
151
+ alreadyAdmitted = true;
152
+ resolvedRun = existingRun;
153
+ resolvedTask = core.tasks.find((task) => task.id === existingRun.taskId) ?? null;
154
+ return core;
155
+ }
156
+ // 1. Task. Reuses the phase-scoped Work tool mutation so the intake
157
+ // boundary invariant (FR-25) is enforced by the same code path that
158
+ // enforces it for the agent-facing tool.
159
+ const taskWrite = applyWorkExecutionTaskCreation(core, {
160
+ workItemId: workItem.id,
161
+ title: proposal.goal,
162
+ summary: workItem.summary ?? undefined,
163
+ approvalNote: `Telegram owner authorization for revision ${proposal.revision}.`,
164
+ }, { actorRef: input.actorRef, actionId: input.ownerEventRef }, createdAt);
165
+ // 2. Owner approval. This is the later explicit owner event, recorded
166
+ // with its transport provenance so Desktop can show FR-24 evidence.
167
+ const approvalWrite = writeApprovalDecision(taskWrite.core, {
168
+ taskId: taskWrite.task.id,
169
+ status: 'approved',
170
+ action: 'approve',
171
+ decidedByActorId: input.ownerActorId,
172
+ notes: `Authorized from Telegram binding ${input.bindingId}, revision `
173
+ + `${proposal.revision}.`,
174
+ taskStatus: 'approved',
175
+ }, createdAt);
176
+ // 3. Supervised Run, queued. Deterministic id keyed by the admission key
177
+ // is what makes a concurrent double-tap converge instead of forking.
178
+ const runWrite = upsertCoreRun(approvalWrite.core, {
179
+ id: resolveWorkGoldenPathRunId(admissionKey),
180
+ title: proposal.goal,
181
+ status: 'queued',
182
+ conversationId: workItem.conversationId,
183
+ taskId: approvalWrite.task.id,
184
+ orchestratorActorId: input.actorRef,
185
+ summary: workItem.summary,
186
+ metadata: {
187
+ [WORK_GOLDEN_PATH_METADATA_KEY]: {
188
+ schemaVersion: 1,
189
+ admissionKey,
190
+ bindingId: input.bindingId,
191
+ workItemId: workItem.id,
192
+ proposalRevision: proposal.revision,
193
+ proposalDigest: proposal.digest,
194
+ deliveryMode: proposal.deliveryMode,
195
+ acceptanceCriteria: proposal.acceptanceCriteria,
196
+ ownerEventRef: input.ownerEventRef,
197
+ authorizedByActorId: input.ownerActorId,
198
+ authorizedAt: createdAt.toISOString(),
199
+ execution: {
200
+ target: input.executionTarget ?? null,
201
+ toolScope: input.toolScope ?? 'none',
202
+ workspaceHeadOid: input.workspaceHeadOid ?? null,
203
+ },
204
+ },
205
+ },
206
+ }, createdAt);
207
+ const activityWrite = appendCoreActivity(runWrite.core, {
208
+ id: admissionActivityId(admissionKey),
209
+ kind: 'approval_decided',
210
+ actorId: input.ownerActorId,
211
+ projectId: workItem.projectId,
212
+ workItemId: workItem.id,
213
+ conversationId: workItem.conversationId,
214
+ taskId: approvalWrite.task.id,
215
+ runId: runWrite.run.id,
216
+ message: `Owner authorized execution from Telegram for "${proposal.goal}".`,
217
+ metadata: {
218
+ [WORK_GOLDEN_PATH_METADATA_KEY]: {
219
+ schemaVersion: 1,
220
+ phase: 'execution_authorization',
221
+ admissionKey,
222
+ bindingId: input.bindingId,
223
+ proposalRevision: proposal.revision,
224
+ proposalDigest: proposal.digest,
225
+ },
226
+ },
227
+ }, createdAt);
228
+ resolvedTask = approvalWrite.task;
229
+ resolvedRun = runWrite.run;
230
+ return activityWrite.core;
231
+ });
232
+ }
233
+ catch (error) {
234
+ if (error instanceof AdmissionBlockedError) {
235
+ return blocked(admissionKey, input.workItemId, error.reason, error.message);
236
+ }
237
+ return blocked(admissionKey, input.workItemId, 'task_precheck_failed', error instanceof Error ? error.message : 'Golden-path admission failed.');
238
+ }
239
+ const task = resolvedTask;
240
+ const run = resolvedRun;
241
+ return {
242
+ status: alreadyAdmitted ? 'already_admitted' : 'admitted',
243
+ admissionKey,
244
+ workItemId: input.workItemId,
245
+ taskId: task?.id ?? null,
246
+ runId: run?.id ?? null,
247
+ };
248
+ }
249
+ //# sourceMappingURL=workGoldenPathAdmission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workGoldenPathAdmission.js","sourceRoot":"","sources":["../../../../../src/products/work/state/workGoldenPathAdmission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Acceptance-evidence collection for the golden path (SPEC-114 FR-31, FR-39).
3
+ *
4
+ * This is where a model's account of its own work stops mattering. Everything
5
+ * returned here is something Cats caused and observed through the runtime
6
+ * delivery API: a commit that actually landed, a worktree that is actually
7
+ * clean afterwards, artifacts the session actually registered.
8
+ *
9
+ * The one thing Cats cannot verify mechanically is a free-text acceptance
10
+ * criterion. Those stay *claims*, carried separately, so the result message can
11
+ * show what was verified and what was merely asserted.
12
+ */
13
+ import type { RuntimeDeliveryClient } from '../../../platform/runtime/deliveryClient.js';
14
+ import type { WorkGoldenPathEvidenceCollector } from './workGoldenPathRuntimeExecutor.js';
15
+ export interface CreateRuntimeEvidenceCollectorInput {
16
+ deliveryClient: RuntimeDeliveryClient;
17
+ }
18
+ /**
19
+ * The evidence collector the runtime executor plugs into.
20
+ *
21
+ * A collection failure is deliberately swallowed into "no evidence": the run
22
+ * then continues or ends unmet, which is safer than treating an unreachable
23
+ * delivery endpoint as proof of delivery.
24
+ */
25
+ export declare function createRuntimeEvidenceCollector(input: CreateRuntimeEvidenceCollectorInput): WorkGoldenPathEvidenceCollector;
26
+ /**
27
+ * Parses the bounded claim lines the opening instruction asks for.
28
+ *
29
+ * Deliberately strict: an unparsed response yields no claims, so a run
30
+ * continues rather than completing on prose that merely sounds finished.
31
+ */
32
+ export declare function parseClaimedCriteria(responseText: string): string[];
33
+ //# sourceMappingURL=workGoldenPathDeliveryEvidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workGoldenPathDeliveryEvidence.d.ts","sourceRoot":"","sources":["../../../../../src/products/work/state/workGoldenPathDeliveryEvidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,6CAA6C,CAAC;AAGrD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAC;AAW1F,MAAM,WAAW,mCAAmC;IAClD,cAAc,EAAE,qBAAqB,CAAC;CACvC;AAoGD;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,mCAAmC,GACzC,+BAA+B,CAkDjC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CASnE"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Acceptance-evidence collection for the golden path (SPEC-114 FR-31, FR-39).
3
+ *
4
+ * This is where a model's account of its own work stops mattering. Everything
5
+ * returned here is something Cats caused and observed through the runtime
6
+ * delivery API: a commit that actually landed, a worktree that is actually
7
+ * clean afterwards, artifacts the session actually registered.
8
+ *
9
+ * The one thing Cats cannot verify mechanically is a free-text acceptance
10
+ * criterion. Those stay *claims*, carried separately, so the result message can
11
+ * show what was verified and what was merely asserted.
12
+ */
13
+ /**
14
+ * The post-commit check Cats performs itself.
15
+ *
16
+ * Named for exactly what it verifies. It proves the commit captured the work
17
+ * and left nothing behind; it does not claim the change is *correct*, and the
18
+ * label must not imply otherwise.
19
+ */
20
+ const POST_COMMIT_CHECK = 'runtime repo status: worktree clean at the new HEAD';
21
+ function buildCommitMessage(context) {
22
+ // Conventional Commits, per the repository convention. Bounded so a long goal
23
+ // cannot produce an unreadable subject line.
24
+ const subject = context.goal.trim().replace(/\s+/gu, ' ').slice(0, 68);
25
+ return `feat: ${subject}`;
26
+ }
27
+ function hasPendingChanges(snapshot) {
28
+ if (snapshot.clean === false) {
29
+ return true;
30
+ }
31
+ return snapshot.stagedCount + snapshot.modifiedCount + snapshot.untrackedCount > 0;
32
+ }
33
+ /**
34
+ * Collects evidence for every repository-backed delivery mode.
35
+ *
36
+ * Returns nothing when the agent has not changed anything, which is what makes
37
+ * an idle run loop and then fail honestly instead of committing an empty tree
38
+ * and calling it delivery.
39
+ */
40
+ async function collectCommitEvidence(input) {
41
+ const before = await input.deliveryClient.inspectRepo({
42
+ sessionId: input.sessionId,
43
+ });
44
+ if (!before.supported || !before.repository) {
45
+ return null;
46
+ }
47
+ // A different HEAD means something else changed the repository after the
48
+ // owner admitted this run. Refuse to commit across that ownership boundary.
49
+ if (input.baselineHeadOid !== null && before.headOid !== input.baselineHeadOid) {
50
+ return null;
51
+ }
52
+ // This is the runtime-managed isolated worktree created for the run, so every
53
+ // change since the clean baseline belongs to this execution.
54
+ if (!hasPendingChanges(before)) {
55
+ return null;
56
+ }
57
+ const changeSummary = [
58
+ `${before.stagedCount} staged`,
59
+ `${before.modifiedCount} modified`,
60
+ `${before.untrackedCount} untracked`,
61
+ ].join(', ');
62
+ const commit = await input.deliveryClient.createCommit({
63
+ sessionId: input.sessionId,
64
+ message: buildCommitMessage({ goal: input.goal }),
65
+ });
66
+ if (commit.state !== 'completed' || commit.commitId === null) {
67
+ return null;
68
+ }
69
+ // Verify the post-condition rather than trusting the commit response: the
70
+ // worktree must be clean and HEAD must have moved.
71
+ const after = await input.deliveryClient.inspectRepo({
72
+ sessionId: input.sessionId,
73
+ });
74
+ const landed = !hasPendingChanges(after) && after.headOid !== before.headOid;
75
+ return {
76
+ commitId: commit.commitId,
77
+ changeSummary,
78
+ validation: { command: POST_COMMIT_CHECK, passed: landed },
79
+ deliveryWorkspacePath: input.deliveryWorkspacePath,
80
+ deliverySessionId: input.sessionId,
81
+ };
82
+ }
83
+ async function collectArtifactEvidence(input) {
84
+ const artifacts = await input.deliveryClient.previewArtifacts({
85
+ sessionId: input.sessionId,
86
+ });
87
+ const first = artifacts[0];
88
+ if (first === undefined) {
89
+ return null;
90
+ }
91
+ return {
92
+ title: first.label ?? first.id,
93
+ path: first.path,
94
+ mimeType: first.mediaType,
95
+ deliveryWorkspacePath: input.deliveryWorkspacePath,
96
+ deliverySessionId: input.sessionId,
97
+ };
98
+ }
99
+ /**
100
+ * The evidence collector the runtime executor plugs into.
101
+ *
102
+ * A collection failure is deliberately swallowed into "no evidence": the run
103
+ * then continues or ends unmet, which is safer than treating an unreachable
104
+ * delivery endpoint as proof of delivery.
105
+ */
106
+ export function createRuntimeEvidenceCollector(input) {
107
+ return async ({ sessionId, goal, deliveryMode, workspacePath, deliveryWorkspacePath, acceptanceCriteria, claimedCriteria, baselineHeadOid, }) => {
108
+ // Only criteria the proposal actually stated can be claimed; an agent
109
+ // cannot invent a criterion and then satisfy it.
110
+ const satisfiedCriteria = acceptanceCriteria.filter((criterion) => claimedCriteria.some((entry) => entry.trim().toLowerCase() === criterion.trim().toLowerCase()));
111
+ try {
112
+ if (deliveryMode !== 'artifact_only') {
113
+ if (workspacePath === null) {
114
+ return { satisfiedCriteria, artifact: null, commit: null };
115
+ }
116
+ return {
117
+ satisfiedCriteria,
118
+ artifact: null,
119
+ commit: await collectCommitEvidence({
120
+ deliveryClient: input.deliveryClient,
121
+ workspacePath,
122
+ sessionId,
123
+ goal,
124
+ baselineHeadOid,
125
+ deliveryWorkspacePath: deliveryWorkspacePath ?? workspacePath,
126
+ }),
127
+ };
128
+ }
129
+ return {
130
+ satisfiedCriteria,
131
+ artifact: await collectArtifactEvidence({
132
+ deliveryClient: input.deliveryClient,
133
+ workspacePath,
134
+ sessionId,
135
+ deliveryWorkspacePath: deliveryWorkspacePath ?? workspacePath,
136
+ }),
137
+ commit: null,
138
+ };
139
+ }
140
+ catch {
141
+ return { satisfiedCriteria, artifact: null, commit: null };
142
+ }
143
+ };
144
+ }
145
+ /**
146
+ * Parses the bounded claim lines the opening instruction asks for.
147
+ *
148
+ * Deliberately strict: an unparsed response yields no claims, so a run
149
+ * continues rather than completing on prose that merely sounds finished.
150
+ */
151
+ export function parseClaimedCriteria(responseText) {
152
+ const claims = [];
153
+ for (const line of responseText.split('\n')) {
154
+ const match = /^\s*CRITERIA-MET:\s*(.+?)\s*$/u.exec(line);
155
+ if (match) {
156
+ claims.push(match[1]);
157
+ }
158
+ }
159
+ return claims;
160
+ }
161
+ //# sourceMappingURL=workGoldenPathDeliveryEvidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workGoldenPathDeliveryEvidence.js","sourceRoot":"","sources":["../../../../../src/products/work/state/workGoldenPathDeliveryEvidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Golden-path intake (SPEC-114 FR-7, FR-8, FR-10).
3
+ *
4
+ * `/work <goal>` goes through the existing product-intent capture tool rather
5
+ * than a Telegram-only shortcut, so the golden path inherits its idempotency
6
+ * key and its intake-boundary marker. That marker is what later makes the
7
+ * authorization command provably a *separate* owner event (FR-20, FR-25): the
8
+ * capture records the update ref that produced it, and admission arrives with a
9
+ * different one.
10
+ */
11
+ import type { CoreStore } from '../../../core/store.js';
12
+ import type { CoreWorkItemRecord } from '../../../core/types.js';
13
+ export interface GoldenPathIntakeInput {
14
+ goal: string;
15
+ bindingId: string;
16
+ conversationId: string;
17
+ externalMessageRef: string | null;
18
+ /** Opaque transport update reference; also the intake boundary action id. */
19
+ externalUpdateRef: string;
20
+ }
21
+ export interface GoldenPathIntakeContext {
22
+ actorRef: string;
23
+ }
24
+ export type GoldenPathIntakeResult = {
25
+ status: 'captured';
26
+ workItemId: string;
27
+ workItem: CoreWorkItemRecord;
28
+ created: boolean;
29
+ } | {
30
+ status: 'rejected';
31
+ message: string;
32
+ };
33
+ export declare function captureGoldenPathWorkItem(coreStore: CoreStore, input: GoldenPathIntakeInput, context: GoldenPathIntakeContext, now?: () => Date): Promise<GoldenPathIntakeResult>;
34
+ //# sourceMappingURL=workGoldenPathIntake.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workGoldenPathIntake.d.ts","sourceRoot":"","sources":["../../../../../src/products/work/state/workGoldenPathIntake.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,6EAA6E;IAC7E,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC1F;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5C,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,qBAAqB,EAC5B,OAAO,EAAE,uBAAuB,EAChC,GAAG,GAAE,MAAM,IAAuB,GACjC,OAAO,CAAC,sBAAsB,CAAC,CA6CjC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Golden-path intake (SPEC-114 FR-7, FR-8, FR-10).
3
+ *
4
+ * `/work <goal>` goes through the existing product-intent capture tool rather
5
+ * than a Telegram-only shortcut, so the golden path inherits its idempotency
6
+ * key and its intake-boundary marker. That marker is what later makes the
7
+ * authorization command provably a *separate* owner event (FR-20, FR-25): the
8
+ * capture records the update ref that produced it, and admission arrives with a
9
+ * different one.
10
+ */
11
+ import { createWorkIntakeDelegate } from './workIntakeDelegate.js';
12
+ export async function captureGoldenPathWorkItem(coreStore, input, context, now = () => new Date()) {
13
+ const delegate = createWorkIntakeDelegate({ coreStore, now });
14
+ const captured = await delegate.capture({
15
+ title: input.goal.trim(),
16
+ status: 'planned',
17
+ source: {
18
+ surface: 'telegram',
19
+ conversationId: input.conversationId,
20
+ transportBindingId: input.bindingId,
21
+ sourceMessageId: input.externalMessageRef ?? input.externalUpdateRef,
22
+ sourceText: input.goal.trim(),
23
+ },
24
+ }, {
25
+ actorRef: context.actorRef,
26
+ // Binding the intake boundary to the originating update is what stops the
27
+ // same owner message from both capturing and authorizing work.
28
+ actionId: input.externalUpdateRef,
29
+ });
30
+ if (captured.status !== 'applied') {
31
+ return {
32
+ status: 'rejected',
33
+ message: captured.status === 'rejected'
34
+ ? captured.error.message
35
+ : 'Work capture did not apply.',
36
+ };
37
+ }
38
+ const core = await coreStore.readCore();
39
+ const workItem = core.workItems.find((candidate) => candidate.id === captured.result.workItemId) ?? null;
40
+ if (workItem === null) {
41
+ return { status: 'rejected', message: 'Captured Work Item was not found after write.' };
42
+ }
43
+ return {
44
+ status: 'captured',
45
+ workItemId: workItem.id,
46
+ workItem,
47
+ created: captured.result.created,
48
+ };
49
+ }
50
+ //# sourceMappingURL=workGoldenPathIntake.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workGoldenPathIntake.js","sourceRoot":"","sources":["../../../../../src/products/work/state/workGoldenPathIntake.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAmBnE,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,SAAoB,EACpB,KAA4B,EAC5B,OAAgC,EAChC,MAAkB,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;IAElC,MAAM,QAAQ,GAAG,wBAAwB,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CACrC;QACE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;QACxB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE;YACN,OAAO,EAAE,UAAU;YACnB,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,kBAAkB,EAAE,KAAK,CAAC,SAAS;YACnC,eAAe,EAAE,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,iBAAiB;YACpE,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;SAC9B;KACF,EACD;QACE,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,0EAA0E;QAC1E,+DAA+D;QAC/D,QAAQ,EAAE,KAAK,CAAC,iBAAiB;KAClC,CACF,CAAC;IAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,QAAQ,CAAC,MAAM,KAAK,UAAU;gBACrC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO;gBACxB,CAAC,CAAC,6BAA6B;SAClC,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAClC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,MAAM,CAAC,UAAU,CAC3D,IAAI,IAAI,CAAC;IACV,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,+CAA+C,EAAE,CAAC;IAC1F,CAAC;IAED,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,QAAQ;QACR,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO;KACjC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Run lifecycle actions for the golden path (SPEC-114 FR-29, FR-35).
3
+ *
4
+ * Timeout, retry, and resume all reduce to one question: may this Run be
5
+ * driven again, and what does the authoritative record say happened? Core's
6
+ * `CoreRunStatus` stays the answer — these transitions move it, record why, and
7
+ * refuse the moves that would resurrect finished work.
8
+ *
9
+ * Retry and resume are deliberately different. Retry says "that attempt did not
10
+ * work, start the loop again" and is only valid from a stuck state. Resume says
11
+ * "nothing is driving this any more" — the usual cause being a host restart
12
+ * while the Run was mid-flight — and is only valid from a live one.
13
+ */
14
+ import type { CoreStore } from '../../../core/store.js';
15
+ import type { CoreRunStatus } from '../../../core/types.js';
16
+ export declare const WORK_GOLDEN_PATH_LIFECYCLE_METADATA_KEY = "workGoldenPathLifecycle";
17
+ export type WorkGoldenPathLifecycleAction = 'retry' | 'resume' | 'timeout';
18
+ export type WorkGoldenPathLifecycleStatus = 'redrivable' | 'recorded' | 'refused';
19
+ export interface WorkGoldenPathLifecycleResult {
20
+ status: WorkGoldenPathLifecycleStatus;
21
+ action: WorkGoldenPathLifecycleAction;
22
+ runId: string | null;
23
+ runStatus: CoreRunStatus | null;
24
+ reason: string | null;
25
+ }
26
+ export interface ApplyWorkGoldenPathLifecycleInput {
27
+ workItemId: string;
28
+ action: WorkGoldenPathLifecycleAction;
29
+ actorRef: string;
30
+ /** Who asked. Absent for `timeout`, which nobody asks for. */
31
+ ownerActorId?: string | null;
32
+ /** Free-text cause, recorded on the Run for `timeout`. */
33
+ detail?: string | null;
34
+ }
35
+ /**
36
+ * Applies one lifecycle action to a golden-path Run.
37
+ *
38
+ * `redrivable` means the caller should start the runner again; `recorded` means
39
+ * the state changed but nothing should be driven (a timeout waits for the
40
+ * owner); `refused` means the action was invalid for the current state and
41
+ * nothing was written.
42
+ */
43
+ export declare function applyWorkGoldenPathLifecycleAction(coreStore: CoreStore, input: ApplyWorkGoldenPathLifecycleInput, now?: () => Date): Promise<WorkGoldenPathLifecycleResult>;
44
+ //# sourceMappingURL=workGoldenPathLifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workGoldenPathLifecycle.d.ts","sourceRoot":"","sources":["../../../../../src/products/work/state/workGoldenPathLifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG3E,eAAO,MAAM,uCAAuC,4BAA4B,CAAC;AAEjF,MAAM,MAAM,6BAA6B,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE3E,MAAM,MAAM,6BAA6B,GACrC,YAAY,GACZ,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,6BAA6B,CAAC;IACtC,MAAM,EAAE,6BAA6B,CAAC;IACtC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,aAAa,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,iCAAiC;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,6BAA6B,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAoDD;;;;;;;GAOG;AACH,wBAAsB,kCAAkC,CACtD,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,iCAAiC,EACxC,GAAG,GAAE,MAAM,IAAuB,GACjC,OAAO,CAAC,6BAA6B,CAAC,CAkGxC"}