@xopcai/xopc 0.0.332 → 0.0.334

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 (465) hide show
  1. package/dist/browser-ext/dist/assets/{auth-DocRzRlS.js → auth-Cjj5SuoT.js} +49 -39
  2. package/dist/browser-ext/dist/background.js +1 -1
  3. package/dist/browser-ext/dist/sidepanel.html +1 -1
  4. package/dist/browser-ext/dist/sidepanel.js +240 -36
  5. package/dist/browser-ext/manifest.json +1 -1
  6. package/dist/extensions/telegram/xopc.extension.json +1 -1
  7. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-C2wg3xC_.js → agent-avatar-dicebear-B73q7mlz.js} +1 -1
  8. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-B9L2YIXz.js +1 -0
  9. package/dist/gateway/static/root/assets/{agent-plugin-dialog-BeNnu1Ts.js → agent-plugin-dialog-COOjsvea.js} +1 -1
  10. package/dist/gateway/static/root/assets/agents-CCj1JnLu.js +70 -0
  11. package/dist/gateway/static/root/assets/agents-admin-api-Cuqi5xZn.js +2 -0
  12. package/dist/gateway/static/root/assets/{app-link-C6gA5Nck.js → app-link-DRL0YnPs.js} +1 -1
  13. package/dist/gateway/static/root/assets/{app-management-settings-panel-etFSkfzl.js → app-management-settings-panel-CckioKud.js} +1 -1
  14. package/dist/gateway/static/root/assets/{appearance-settings-DKmU2VAP.js → appearance-settings-DDiPIr_Q.js} +1 -1
  15. package/dist/gateway/static/root/assets/apps-page-Azqy8vfo.js +1 -0
  16. package/dist/gateway/static/root/assets/{archive-plugin-D0z_Fr2G.js → archive-plugin-Dtyr0RhX.js} +1 -1
  17. package/dist/gateway/static/root/assets/attachment-load-qjPpQzYY.js +1 -0
  18. package/dist/gateway/static/root/assets/attachment-utils-core-BIOUBrpT.js +1 -0
  19. package/dist/gateway/static/root/assets/{automations-page-B7_C-p66.js → automations-page-g3SrFkTC.js} +1 -1
  20. package/dist/gateway/static/root/assets/automations-workspace-B0nW2nZD.js +7 -0
  21. package/dist/gateway/static/root/assets/binary-plugins-BwKQVxsU.js +2 -0
  22. package/dist/gateway/static/root/assets/{block-editor-ChWW8Z9L.js → block-editor-DD9d5pCt.js} +29 -29
  23. package/dist/gateway/static/root/assets/{browser-automation-inputs-C5s1yHOu.js → browser-automation-inputs-D2gNdS3e.js} +1 -1
  24. package/dist/gateway/static/root/assets/{browser-automations-page-BV00BXRb.js → browser-automations-page-BKqqJR7P.js} +2 -2
  25. package/dist/gateway/static/root/assets/{browser-settings-page-xwTmuZjS.js → browser-settings-page-BZH9bZbk.js} +2 -2
  26. package/dist/gateway/static/root/assets/capabilities-CHk4RZl4.js +1 -0
  27. package/dist/gateway/static/root/assets/capabilities-page-CfWaVH-6.js +2 -0
  28. package/dist/gateway/static/root/assets/capabilities-settings-panel-C5FcWsSe.js +8 -0
  29. package/dist/gateway/static/root/assets/capability-header-actions-Bd66yEOa.js +1 -0
  30. package/dist/gateway/static/root/assets/channels-DIU5Gq4o.js +1 -0
  31. package/dist/gateway/static/root/assets/{chat-terminal-dock-C41mXCAi.js → chat-terminal-dock-B0nPDJyj.js} +2 -2
  32. package/dist/gateway/static/root/assets/{computer-settings-page-BJkqok2G.js → computer-settings-page-D7PxxaoG.js} +1 -1
  33. package/dist/gateway/static/root/assets/{connector-service-page-BKCZMmwm.js → connector-service-page-BZH4SeQg.js} +1 -1
  34. package/dist/gateway/static/root/assets/connectors-page-BC81R_fz.js +2 -0
  35. package/dist/gateway/static/root/assets/{turn-outcome-D0SnyZ3Z.js → constants-Co2_smKQ.js} +1 -1
  36. package/dist/gateway/static/root/assets/date-picker-CDEVYjXI.js +1 -0
  37. package/dist/gateway/static/root/assets/{dependency-picker-CqADAHZp.js → dependency-picker-AInmpSwC.js} +1 -1
  38. package/dist/gateway/static/root/assets/{desktop-pet-Bab-iWED.js → desktop-pet-Sjgnlq8M.js} +1 -1
  39. package/dist/gateway/static/root/assets/{desktop-pet-settings-BqgzLOdi.js → desktop-pet-settings-BWn0rrhr.js} +1 -1
  40. package/dist/gateway/static/root/assets/{device-pairing-wizard-DFg7FDPf.js → device-pairing-wizard-BtW837_d.js} +1 -1
  41. package/dist/gateway/static/root/assets/{directory-picker-path-field-hqJ9sFCR.js → directory-picker-path-field-2CpmDx_D.js} +1 -1
  42. package/dist/gateway/static/root/assets/dist-CKkafhaS.js +1 -0
  43. package/dist/gateway/static/root/assets/dist-io9jFpN72.js +1 -0
  44. package/dist/gateway/static/root/assets/{extension-debug-page-DX3PFhRE.js → extension-debug-page-WWJFj9Z5.js} +1 -1
  45. package/dist/gateway/static/root/assets/{extension-page-DkREdHLs.js → extension-page-DL00dFRr.js} +1 -1
  46. package/dist/gateway/static/root/assets/{extension-settings-page-wF-HNTM-.js → extension-settings-page-CN-agjPk.js} +1 -1
  47. package/dist/gateway/static/root/assets/{files-BK6enEvD.js → files-Bw4SBGdM.js} +1 -1
  48. package/dist/gateway/static/root/assets/{gateway-config-swr-cR-tz7-Q.js → gateway-config-swr-CgIjCxM8.js} +1 -1
  49. package/dist/gateway/static/root/assets/gateway-realtime-Ciq4c7KT.js +1 -0
  50. package/dist/gateway/static/root/assets/gateway-realtime-store-BHeHN26R.js +1 -0
  51. package/dist/gateway/static/root/assets/gateway-settings-4oD6fhAm.js +1 -0
  52. package/dist/gateway/static/root/assets/{gateway-startup-retry-6jLRcQsu.js → gateway-startup-retry-i-1lTrwY.js} +1 -1
  53. package/dist/gateway/static/root/assets/home-page-nEpyJUBY.js +1 -0
  54. package/dist/gateway/static/root/assets/{image-generation-api-CSSkwsyC.js → image-generation-api-gilc-u7M.js} +1 -1
  55. package/dist/gateway/static/root/assets/{imports-page-B80Cv043.js → imports-page-BivdeiQ5.js} +1 -1
  56. package/dist/gateway/static/root/assets/index-BioG1pRD.js +106 -0
  57. package/dist/gateway/static/root/assets/index-DbLEkdNg.css +1 -0
  58. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BgoFaTwv.js → keyboard-shortcuts-settings-B_8AJTFr.js} +1 -1
  59. package/dist/gateway/static/root/assets/local-app-workbench-page-CRtZQrmz.js +1 -0
  60. package/dist/gateway/static/root/assets/{local-apps-page-HO6OQlQT.js → local-apps-page-DclxpoqR.js} +1 -1
  61. package/dist/gateway/static/root/assets/{local-apps-Bpja8nC6.js → local-apps-yys1VChX.js} +1 -1
  62. package/dist/gateway/static/root/assets/local-session-drafts-DkolHmyp.js +1 -0
  63. package/dist/gateway/static/root/assets/{locale-store-wNXWkWu5.js → locale-store-BY30D6tg.js} +1 -1
  64. package/dist/gateway/static/root/assets/logs-page-DX8TxkRl.js +2 -0
  65. package/dist/gateway/static/root/assets/management-settings-5WFufZ4g.js +1 -0
  66. package/dist/gateway/static/root/assets/{markdown-view-DlT9KqwF.js → markdown-view-DYJnwlDr.js} +1 -1
  67. package/dist/gateway/static/root/assets/media-plugins-DlJDvwLK.js +1 -0
  68. package/dist/gateway/static/root/assets/messages-_6IXbP2u.js +3 -0
  69. package/dist/gateway/static/root/assets/note-detail-panel-GF5Q9Fqy.js +5 -0
  70. package/dist/gateway/static/root/assets/notes-page-E8o4_Ty9.js +8 -0
  71. package/dist/gateway/static/root/assets/page-context-capture-button-CiCmfRTw.js +1 -0
  72. package/dist/gateway/static/root/assets/{page-tabs-vqI30Yrg.js → page-tabs-Cwp3fGVM.js} +1 -1
  73. package/dist/gateway/static/root/assets/popover-select-0p9PIHRy.js +1 -0
  74. package/dist/gateway/static/root/assets/{preview-open-alternatives-B-mwPBJW.js → preview-open-alternatives-DJ5xqGeu.js} +1 -1
  75. package/dist/gateway/static/root/assets/{product-delivery-bv3z8Xkh.js → product-delivery-BAks11S4.js} +1 -1
  76. package/dist/gateway/static/root/assets/{product-open-page-D--sj_uN.js → product-open-page-CcGwNePw.js} +1 -1
  77. package/dist/gateway/static/root/assets/project-detail-page-6hhRBkmC.js +1 -0
  78. package/dist/gateway/static/root/assets/projects-page-DUOzRaFI.js +1 -0
  79. package/dist/gateway/static/root/assets/{registry-api-BIpltJ47.js → registry-api-BvVx0G1o.js} +1 -1
  80. package/dist/gateway/static/root/assets/remote-access-hub-BWpWUXiE.js +1 -0
  81. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CAnb0PNY.js → runtime-tools-settings-panel-C6eDCNHz.js} +2 -2
  82. package/dist/gateway/static/root/assets/scenes-page-pF7Lmqnk.js +2 -0
  83. package/dist/gateway/static/root/assets/{schema-form-BKj6wIMb.js → schema-form-D8W8q_ez.js} +1 -1
  84. package/dist/gateway/static/root/assets/{schemas-88fK3zzl.js → schemas-CObaziC7.js} +3 -3
  85. package/dist/gateway/static/root/assets/session-api-BAyUr97V.js +1 -0
  86. package/dist/gateway/static/root/assets/session-manager-BAy2sR2Q.js +16 -0
  87. package/dist/gateway/static/root/assets/sessions-page-BDKDqqf9.js +1 -0
  88. package/dist/gateway/static/root/assets/settings-advanced-gate-C9cJWlAq.js +1 -0
  89. package/dist/gateway/static/root/assets/{settings-form-section-78ycUHfv.js → settings-form-section-B0cAj0nq.js} +1 -1
  90. package/dist/gateway/static/root/assets/{settings-page-BOdxIVzo.js → settings-page-DZVVTFxs.js} +1 -1
  91. package/dist/gateway/static/root/assets/setup-status-panel-DZCPVx9c.js +1 -0
  92. package/dist/gateway/static/root/assets/share-preview-page-BkPNyV8c.js +2 -0
  93. package/dist/gateway/static/root/assets/shares-settings-Bqlv5JBi.js +1 -0
  94. package/dist/gateway/static/root/assets/{skill-api-CiBGQ0Jg.js → skill-api-C0dufzQC.js} +1 -1
  95. package/dist/gateway/static/root/assets/skill-reload-api-3JF2OTBz.js +1 -0
  96. package/dist/gateway/static/root/assets/skills-page-DB4lR4om.js +2 -0
  97. package/dist/gateway/static/root/assets/{system-settings-panel-CyJUeREH.js → system-settings-panel-xjrlhdUz.js} +1 -1
  98. package/dist/gateway/static/root/assets/task-detail-page-CB6M7wSs.js +1 -0
  99. package/dist/gateway/static/root/assets/{tasks-CDR_RVbQ.js → tasks-QQJXsiER.js} +1 -1
  100. package/dist/gateway/static/root/assets/{tunnel-api-Day9zhKi.js → tunnel-api--68MQEWM.js} +1 -1
  101. package/dist/gateway/static/root/assets/usage-page-OLZ00eqD.js +1 -0
  102. package/dist/gateway/static/root/assets/{use-autosave-Bj9hC6ML.js → use-autosave-DsnHYpTv.js} +1 -1
  103. package/dist/gateway/static/root/assets/user-model-page-CoePFpHD.js +2 -0
  104. package/dist/gateway/static/root/assets/{voice-api-key-field-fWRD6B8r.js → voice-api-key-field-CvIXutQp.js} +1 -1
  105. package/dist/gateway/static/root/assets/{voice-config-api-ujEySjyc.js → voice-config-api-Bwy3Al3J.js} +1 -1
  106. package/dist/gateway/static/root/assets/{work-discovery-overlay-CnxdvIk8.js → work-discovery-overlay-By5_7MLR.js} +1 -1
  107. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DlWNN1VA.js → workflow-run-setup-panel-HSMDxDXV.js} +2 -2
  108. package/dist/gateway/static/root/assets/workflows-page-DElQ47Da.js +6 -0
  109. package/dist/gateway/static/root/index.html +27 -21
  110. package/dist/package.js +1 -1
  111. package/dist/packages/gateway-contract/src/automations.js +44 -14
  112. package/dist/packages/gateway-contract/src/capabilities.js +120 -10
  113. package/dist/packages/gateway-contract/src/index.js +8 -2
  114. package/dist/packages/gateway-contract/src/scenes.js +7 -6
  115. package/dist/packages/gateway-contract/src/session-command-rejection.js +19 -0
  116. package/dist/packages/gateway-contract/src/session-input-command.js +109 -0
  117. package/dist/packages/gateway-contract/src/sessions.js +2 -7
  118. package/dist/packages/gateway-contract/src/usage.js +6 -0
  119. package/dist/src/agent/agent-manager.js +15 -9
  120. package/dist/src/agent/background-review/run-background-review.js +8 -3
  121. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +1 -1
  122. package/dist/src/agent/embedded/model-runtime.js +1 -1
  123. package/dist/src/agent/embedded/run-for-session.js +1 -1
  124. package/dist/src/agent/embedded/run-turn.js +7 -1
  125. package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
  126. package/dist/src/agent/external-tools/gateway-tools.d.ts +2 -1
  127. package/dist/src/agent/external-tools/gateway-tools.js +45 -11
  128. package/dist/src/agent/external-tools/index.js +1 -1
  129. package/dist/src/agent/image/tool-model-config.js +2 -2
  130. package/dist/src/agent/image/understanding/pi-ai-provider.js +1 -1
  131. package/dist/src/agent/memory/compaction.js +4 -0
  132. package/dist/src/agent/service/btw-query.js +8 -2
  133. package/dist/src/agent/service/process-direct-streaming.js +4 -2
  134. package/dist/src/agent/service.js +5 -5
  135. package/dist/src/agent/session/session-inspector.js +1 -1
  136. package/dist/src/agent/skills/filesystem-watcher.js +1 -1
  137. package/dist/src/agent/skills/hub-pull.js +2 -2
  138. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +1 -1
  139. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +1 -1
  140. package/dist/src/agent/tasks/task-judge-service.js +7 -3
  141. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  142. package/dist/src/agent/tool-manuals/xopc-use.js +5 -4
  143. package/dist/src/agent/tools/automation-tool.d.ts +4 -1
  144. package/dist/src/agent/tools/automation-tool.js +42 -4
  145. package/dist/src/agent/tools/session-search-tool.js +1 -1
  146. package/dist/src/agent/tools/web-extract.js +1 -1
  147. package/dist/src/agent/tools/xopc-use-tool.js +50 -9
  148. package/dist/src/agent-catalog/capabilities.js +2 -2
  149. package/dist/src/ai-assist/text-assist.js +6 -2
  150. package/dist/src/auth/credentials.js +1 -1
  151. package/dist/src/auth/oauth-provider-lock.js +1 -1
  152. package/dist/src/auth/sync-provider-auth.js +1 -1
  153. package/dist/src/automations/api/routes.js +65 -0
  154. package/dist/src/automations/capabilities/drafts.js +1 -1
  155. package/dist/src/automations/capabilities/read.js +24 -0
  156. package/dist/src/automations/capabilities/write.d.ts +52 -14
  157. package/dist/src/automations/capabilities/write.js +52 -3
  158. package/dist/src/automations/delivery/delivery-router.d.ts +50 -0
  159. package/dist/src/automations/delivery/delivery-router.js +318 -0
  160. package/dist/src/automations/delivery/index.d.ts +1 -0
  161. package/dist/src/automations/delivery/index.js +2 -0
  162. package/dist/src/automations/domain/defaults.d.ts +0 -1
  163. package/dist/src/automations/domain/defaults.js +1 -1
  164. package/dist/src/automations/domain/index.js +2 -2
  165. package/dist/src/automations/domain/types.d.ts +158 -7
  166. package/dist/src/automations/domain/validation.d.ts +104 -22
  167. package/dist/src/automations/domain/validation.js +66 -13
  168. package/dist/src/automations/draft/automation-draft-prompt.js +3 -4
  169. package/dist/src/automations/draft/automation-draft-service.js +6 -0
  170. package/dist/src/automations/draft/automation-draft-validator.d.ts +22 -3
  171. package/dist/src/automations/draft/automation-draft-validator.js +4 -4
  172. package/dist/src/automations/events/event-catalog.d.ts +14 -0
  173. package/dist/src/automations/events/event-catalog.js +117 -0
  174. package/dist/src/automations/events/event-dispatcher.d.ts +27 -0
  175. package/dist/src/automations/events/event-dispatcher.js +140 -0
  176. package/dist/src/automations/events/event-repository.d.ts +59 -0
  177. package/dist/src/automations/events/event-repository.js +361 -0
  178. package/dist/src/automations/events/index.d.ts +3 -0
  179. package/dist/src/automations/events/index.js +4 -0
  180. package/dist/src/automations/index.d.ts +3 -1
  181. package/dist/src/automations/index.js +9 -3
  182. package/dist/src/automations/service/action-executor.d.ts +20 -1
  183. package/dist/src/automations/service/action-executor.js +80 -40
  184. package/dist/src/automations/service/automation-service.d.ts +21 -4
  185. package/dist/src/automations/service/automation-service.js +150 -100
  186. package/dist/src/automations/storage/automation-repository.js +4 -5
  187. package/dist/src/automations/storage/automation-run-repository.d.ts +1 -0
  188. package/dist/src/automations/storage/automation-run-repository.js +26 -1
  189. package/dist/src/automations/storage/index.js +2 -2
  190. package/dist/src/automations/webhook-secrets.d.ts +1 -0
  191. package/dist/src/automations/webhook-secrets.js +16 -0
  192. package/dist/src/bootstrap/application-state.js +1 -1
  193. package/dist/src/capabilities/runtime/dispatcher.js +1 -1
  194. package/dist/src/capabilities/runtime/product.js +1 -1
  195. package/dist/src/capabilities/store-connector.d.ts +17 -1
  196. package/dist/src/capabilities/store-connector.js +69 -3
  197. package/dist/src/channels/attachments/voice-stt-webchat.js +1 -1
  198. package/dist/src/chat-commands/agent-edit.js +1 -1
  199. package/dist/src/chat-commands/builtins/config.js +1 -1
  200. package/dist/src/cli/commands/agent.js +1 -1
  201. package/dist/src/cli/commands/agents.js +1 -1
  202. package/dist/src/cli/commands/connectors.js +4 -3
  203. package/dist/src/cli/commands/doctor/checks/automation-integrity.d.ts +2 -0
  204. package/dist/src/cli/commands/doctor/checks/automation-integrity.js +55 -0
  205. package/dist/src/cli/commands/doctor/checks/database-relations.d.ts +2 -0
  206. package/dist/src/cli/commands/doctor/checks/database-relations.js +81 -0
  207. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  208. package/dist/src/cli/commands/doctor/checks/provider-auth.js +2 -2
  209. package/dist/src/cli/commands/doctor/flow.js +5 -1
  210. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  211. package/dist/src/cli/commands/models.js +1 -1
  212. package/dist/src/cli/commands/onboard/model.js +2 -2
  213. package/dist/src/cli/commands/skills.js +1 -1
  214. package/dist/src/cli/utils/init-workspace-core.js +1 -1
  215. package/dist/src/computer/runtime.js +1 -1
  216. package/dist/src/config/index.js +5 -5
  217. package/dist/src/config/loader.js +2 -2
  218. package/dist/src/config/models-json.js +1 -1
  219. package/dist/src/config/schema.js +1 -1
  220. package/dist/src/connectors/approval-resume.js +1 -1
  221. package/dist/src/connectors/cli/authorization.d.ts +1 -1
  222. package/dist/src/connectors/cli/store.d.ts +1 -1
  223. package/dist/src/connectors/cli/store.js +1 -1
  224. package/dist/src/connectors/composio-backends.js +14 -4
  225. package/dist/src/connectors/composio-managed-events.d.ts +5 -2
  226. package/dist/src/connectors/composio-managed-events.js +4 -1
  227. package/dist/src/connectors/connection-candidates.js +53 -15
  228. package/dist/src/connectors/connection-capabilities.js +5 -1
  229. package/dist/src/connectors/connection-recovery-service.d.ts +2 -1
  230. package/dist/src/connectors/connection-recovery-service.js +89 -4
  231. package/dist/src/discussions/analyzer.js +4 -4
  232. package/dist/src/execution-environments/local-worktree-manager.js +10 -1
  233. package/dist/src/execution-environments/session-environment-service.d.ts +3 -0
  234. package/dist/src/execution-environments/session-environment-service.js +28 -4
  235. package/dist/src/extensions/agent-plugins/validation.js +1 -1
  236. package/dist/src/extensions/update.js +1 -1
  237. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  238. package/dist/src/gateway/agents-admin.js +2 -2
  239. package/dist/src/gateway/file-path-classifier.js +1 -1
  240. package/dist/src/gateway/home-intelligence-automation-reconciler.js +4 -1
  241. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  242. package/dist/src/gateway/hono/routes/agent-stream.js +6 -2
  243. package/dist/src/gateway/hono/routes/browser-session.js +4 -2
  244. package/dist/src/gateway/hono/routes/capabilities.js +1 -1
  245. package/dist/src/gateway/hono/routes/commands-skills.js +9 -2
  246. package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -2
  247. package/dist/src/gateway/hono/routes/connection-waits.js +3 -2
  248. package/dist/src/gateway/hono/routes/files.js +3 -0
  249. package/dist/src/gateway/hono/routes/lazy-bundles.js +14 -1
  250. package/dist/src/gateway/hono/routes/models.js +17 -1
  251. package/dist/src/gateway/hono/routes/notes.js +2 -4
  252. package/dist/src/gateway/hono/routes/projects.js +2 -2
  253. package/dist/src/gateway/hono/routes/public-gateway.js +93 -3
  254. package/dist/src/gateway/hono/routes/scenes.js +57 -41
  255. package/dist/src/gateway/hono/routes/session-command-handler.d.ts +5 -0
  256. package/dist/src/gateway/hono/routes/session-command-handler.js +189 -0
  257. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +14 -2
  258. package/dist/src/gateway/hono/routes/session-input-handler.js +2 -2
  259. package/dist/src/gateway/hono/routes/sessions.js +15 -168
  260. package/dist/src/gateway/hono/routes/tasks.js +1 -1
  261. package/dist/src/gateway/hono/routes/tui.js +2 -1
  262. package/dist/src/gateway/hono/routes/usage.d.ts +3 -0
  263. package/dist/src/gateway/hono/routes/usage.js +61 -0
  264. package/dist/src/gateway/hono/routes/voice.js +10 -1
  265. package/dist/src/gateway/image-generation-setup.js +2 -2
  266. package/dist/src/gateway/lock.js +1 -1
  267. package/dist/src/gateway/memory-maintenance-automation-reconciler.js +5 -2
  268. package/dist/src/gateway/resolve-webchat-session-key.d.ts +1 -1
  269. package/dist/src/gateway/resolve-webchat-session-key.js +2 -2
  270. package/dist/src/gateway/scenes/host.js +27 -14
  271. package/dist/src/gateway/scenes/slackThreadSource.d.ts +2 -2
  272. package/dist/src/gateway/security/gateway-scopes.js +1 -0
  273. package/dist/src/gateway/service/active-execution.d.ts +19 -0
  274. package/dist/src/gateway/service/active-execution.js +16 -0
  275. package/dist/src/gateway/service/agent-runner.d.ts +4 -0
  276. package/dist/src/gateway/service/agent-runner.js +19 -1
  277. package/dist/src/gateway/service/marketplace-service.js +2 -2
  278. package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -0
  279. package/dist/src/gateway/service/run-gateway-agent.js +10 -2
  280. package/dist/src/gateway/service/session-command-service.d.ts +34 -0
  281. package/dist/src/gateway/service/session-command-service.js +81 -0
  282. package/dist/src/gateway/service/session-input-coordinator.d.ts +21 -0
  283. package/dist/src/gateway/service/session-input-coordinator.js +41 -0
  284. package/dist/src/gateway/service/session-preparation-worker.d.ts +15 -0
  285. package/dist/src/gateway/service/session-preparation-worker.js +125 -0
  286. package/dist/src/gateway/service/sessions-api.d.ts +13 -0
  287. package/dist/src/gateway/service/sessions-api.js +23 -0
  288. package/dist/src/gateway/service.d.ts +30 -3
  289. package/dist/src/gateway/service.js +89 -79
  290. package/dist/src/gateway/side-chat/promotion-service.js +0 -1
  291. package/dist/src/gateway/side-chat/run-service.js +10 -7
  292. package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
  293. package/dist/src/home-intelligence/generator.js +5 -2
  294. package/dist/src/infra/domain-outbox-dispatcher.d.ts +0 -3
  295. package/dist/src/infra/domain-outbox-dispatcher.js +15 -7
  296. package/dist/src/local-apps/service.js +2 -2
  297. package/dist/src/mcp/channel-bridge.js +12 -2
  298. package/dist/src/notes/capabilities/read.js +2 -2
  299. package/dist/src/notes/service.d.ts +4 -1
  300. package/dist/src/notes/service.js +13 -11
  301. package/dist/src/projects/project-service.js +1 -2
  302. package/dist/src/projects/project-skill-service.js +2 -2
  303. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  304. package/dist/src/providers/index.js +2 -2
  305. package/dist/src/providers/model-call.d.ts +3 -2
  306. package/dist/src/providers/model-call.js +30 -5
  307. package/dist/src/providers/model-catalog-persistence.js +1 -1
  308. package/dist/src/providers/register-runtime-providers.js +1 -1
  309. package/dist/src/scenes/activationAdapter.d.ts +19 -0
  310. package/dist/src/scenes/activationAdapter.js +1 -0
  311. package/dist/src/scenes/agentExecutor.js +3 -10
  312. package/dist/src/scenes/contracts.d.ts +3 -9
  313. package/dist/src/scenes/contracts.js +1 -0
  314. package/dist/src/scenes/execution.d.ts +9 -3
  315. package/dist/src/scenes/execution.js +12 -11
  316. package/dist/src/scenes/httpServices.d.ts +5 -2
  317. package/dist/src/scenes/mailContext.d.ts +4 -0
  318. package/dist/src/scenes/mailContext.js +9 -0
  319. package/dist/src/scenes/maintenance.js +1 -5
  320. package/dist/src/scenes/metrics.d.ts +0 -6
  321. package/dist/src/scenes/metrics.js +0 -11
  322. package/dist/src/scenes/registry.d.ts +11 -0
  323. package/dist/src/scenes/registry.js +28 -0
  324. package/dist/src/scenes/repository.d.ts +6 -3
  325. package/dist/src/scenes/repository.js +43 -5
  326. package/dist/src/scenes/service.d.ts +2 -1
  327. package/dist/src/scenes/service.js +9 -7
  328. package/dist/src/scenes/taskFollowUp/contracts.d.ts +37 -7
  329. package/dist/src/scenes/taskFollowUp/contracts.js +36 -17
  330. package/dist/src/scenes/taskFollowUp/service.d.ts +35 -7
  331. package/dist/src/scenes/taskFollowUp/service.js +86 -28
  332. package/dist/src/scenes/templates.d.ts +2 -2
  333. package/dist/src/scenes/userNotes.d.ts +3 -0
  334. package/dist/src/scenes/userNotes.js +6 -0
  335. package/dist/src/session/client-history.d.ts +3 -0
  336. package/dist/src/session/client-history.js +10 -5
  337. package/dist/src/session/manager.d.ts +1 -0
  338. package/dist/src/session/resolve-session.js +4 -3
  339. package/dist/src/session/session-title.js +1 -1
  340. package/dist/src/session/store.d.ts +1 -0
  341. package/dist/src/session/store.js +3 -3
  342. package/dist/src/storage/sqlite/ai-usage-repository.d.ts +137 -0
  343. package/dist/src/storage/sqlite/ai-usage-repository.js +175 -0
  344. package/dist/src/storage/sqlite/connector-account-repository.js +7 -5
  345. package/dist/src/storage/sqlite/connector-repository.js +36 -34
  346. package/dist/src/storage/sqlite/index.d.ts +2 -2
  347. package/dist/src/storage/sqlite/index.js +3 -3
  348. package/dist/src/storage/sqlite/migrations/209_automation_event_hub.sql +48 -0
  349. package/dist/src/storage/sqlite/migrations/210_remove_legacy_automation_timeout.sql +14 -0
  350. package/dist/src/storage/sqlite/migrations/211_automation_result_deliveries.sql +16 -0
  351. package/dist/src/storage/sqlite/migrations/212_automation_delivery_policy.sql +30 -0
  352. package/dist/src/storage/sqlite/migrations/213_automation_reliability_contract.sql +188 -0
  353. package/dist/src/storage/sqlite/migrations/214_ai_usage_ledger.sql +41 -0
  354. package/dist/src/storage/sqlite/migrations/215_scene_execution_adapters.sql +6 -0
  355. package/dist/src/storage/sqlite/migrations/216_remove_scene_model_usage.sql +1 -0
  356. package/dist/src/storage/sqlite/migrations/217_remove_legacy_memory_tables.sql +4 -0
  357. package/dist/src/storage/sqlite/migrations/218_core_relation_indexes.sql +26 -0
  358. package/dist/src/storage/sqlite/migrations/219_json_contracts.sql +123 -0
  359. package/dist/src/storage/sqlite/migrations/220_normalize_timestamps.sql +339 -0
  360. package/dist/src/storage/sqlite/migrations/221_ai_usage_retention_index.sql +2 -0
  361. package/dist/src/storage/sqlite/migrations/222_session_config_authority.sql +13 -0
  362. package/dist/src/storage/sqlite/migrations/223_session_creation_receipts.sql +59 -0
  363. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  364. package/dist/src/storage/sqlite/migrations/runner.js +4 -4
  365. package/dist/src/storage/sqlite/row-mappers.d.ts +3 -7
  366. package/dist/src/storage/sqlite/row-mappers.js +6 -6
  367. package/dist/src/storage/sqlite/scenes-schema.d.ts +1 -1
  368. package/dist/src/storage/sqlite/scenes-schema.js +0 -1
  369. package/dist/src/storage/sqlite/schema.js +1 -1
  370. package/dist/src/storage/sqlite/schema.sql +0 -52
  371. package/dist/src/storage/sqlite/schemas/scenes.sql +0 -7
  372. package/dist/src/storage/sqlite/session-creation-repository.d.ts +50 -0
  373. package/dist/src/storage/sqlite/session-creation-repository.js +166 -0
  374. package/dist/src/storage/sqlite/session-input-repository.d.ts +12 -2
  375. package/dist/src/storage/sqlite/session-input-repository.js +25 -2
  376. package/dist/src/storage/sqlite/session-read-repository.d.ts +1 -1
  377. package/dist/src/storage/sqlite/session-read-repository.js +0 -1
  378. package/dist/src/storage/sqlite/session-repository.d.ts +0 -4
  379. package/dist/src/storage/sqlite/session-repository.js +8 -18
  380. package/dist/src/storage/sqlite/timestamps.d.ts +4 -0
  381. package/dist/src/storage/sqlite/timestamps.js +20 -0
  382. package/dist/src/storage/sqlite/transcript-repository.d.ts +1 -0
  383. package/dist/src/storage/sqlite/transcript-repository.js +23 -15
  384. package/dist/src/storage/sqlite/user-trust-repository.js +4 -2
  385. package/dist/src/tasks/capabilities/read.js +2 -2
  386. package/dist/src/tasks/capabilities/write.d.ts +1 -1
  387. package/dist/src/tasks/home-query-service.js +3 -3
  388. package/dist/src/tasks/task-contract-planner.js +1 -1
  389. package/dist/src/tui/backends/embedded-backend.d.ts +5 -0
  390. package/dist/src/tui/backends/embedded-backend.js +266 -20
  391. package/dist/src/tui/backends/embedded-drafts.d.ts +22 -0
  392. package/dist/src/tui/backends/embedded-drafts.js +53 -0
  393. package/dist/src/tui/backends/gateway-realtime-backend.d.ts +10 -0
  394. package/dist/src/tui/backends/gateway-realtime-backend.js +214 -33
  395. package/dist/src/tui/tui-backend.d.ts +1 -1
  396. package/dist/src/tui/tui-chat-input-state.d.ts +1 -0
  397. package/dist/src/tui/tui-commands.js +1 -1
  398. package/dist/src/tui/tui-session-format.js +0 -1
  399. package/dist/src/tui/tui-startup-resources.d.ts +1 -0
  400. package/dist/src/tui/tui-startup-resources.js +2 -2
  401. package/dist/src/tui/tui-types.d.ts +0 -1
  402. package/dist/src/tui/tui.js +69 -29
  403. package/dist/src/usage/cost.d.ts +4 -0
  404. package/dist/src/usage/cost.js +28 -0
  405. package/dist/src/usage/recorder.d.ts +13 -0
  406. package/dist/src/usage/recorder.js +117 -0
  407. package/dist/src/usage/scenario-registry.d.ts +8 -0
  408. package/dist/src/usage/scenario-registry.js +117 -0
  409. package/dist/src/usage/types.d.ts +55 -0
  410. package/dist/src/usage/types.js +1 -0
  411. package/dist/src/voice/realtime/persona-context.js +1 -1
  412. package/dist/src/voice/tts/summarize.js +1 -1
  413. package/dist/src/work-discovery/analyzer.js +2 -2
  414. package/dist/src/work-discovery/investigator.js +1 -1
  415. package/dist/src/work-discovery/service.js +3 -6
  416. package/dist/src/workflows/service/workflow-run-service.js +16 -3
  417. package/package.json +3 -3
  418. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Se1Z72VG.js +0 -1
  419. package/dist/gateway/static/root/assets/agents-udIitwV8.js +0 -70
  420. package/dist/gateway/static/root/assets/apps-page-DVNySL58.js +0 -1
  421. package/dist/gateway/static/root/assets/attachment-load-DNCDbeOX.js +0 -1
  422. package/dist/gateway/static/root/assets/automations-workspace-BMgJvdcv.js +0 -7
  423. package/dist/gateway/static/root/assets/binary-plugins-BYn2hScX.js +0 -2
  424. package/dist/gateway/static/root/assets/capabilities-CHA-sTAZ.js +0 -1
  425. package/dist/gateway/static/root/assets/capabilities-page-v0WkhV5o.js +0 -2
  426. package/dist/gateway/static/root/assets/capabilities-settings-panel-DefBGjhV.js +0 -8
  427. package/dist/gateway/static/root/assets/capability-header-actions-vmx35sbu.js +0 -1
  428. package/dist/gateway/static/root/assets/channels-Eo4ONF5X.js +0 -1
  429. package/dist/gateway/static/root/assets/connectors-page-DZYgogQw.js +0 -2
  430. package/dist/gateway/static/root/assets/conversation-identity-Cw0n9uzK.js +0 -1
  431. package/dist/gateway/static/root/assets/date-picker-CrOV4Ynd.js +0 -1
  432. package/dist/gateway/static/root/assets/dist-3h6cXXhT.js +0 -1
  433. package/dist/gateway/static/root/assets/dist-Che_jiQF.js +0 -1
  434. package/dist/gateway/static/root/assets/gateway-settings-Du-Dos9O.js +0 -1
  435. package/dist/gateway/static/root/assets/home-page-D7YoMHq4.js +0 -1
  436. package/dist/gateway/static/root/assets/index-BEw0xrde.css +0 -1
  437. package/dist/gateway/static/root/assets/index-DalslRUx.js +0 -121
  438. package/dist/gateway/static/root/assets/local-app-workbench-page-BKL5UZAj.js +0 -1
  439. package/dist/gateway/static/root/assets/logs-page-CjzR9Rpj.js +0 -2
  440. package/dist/gateway/static/root/assets/management-settings-Dk_gTJb9.js +0 -1
  441. package/dist/gateway/static/root/assets/media-plugins-Dlj6TD3M.js +0 -1
  442. package/dist/gateway/static/root/assets/messages-fmf0dnr4.js +0 -3
  443. package/dist/gateway/static/root/assets/note-detail-panel-BebJPjjk.js +0 -5
  444. package/dist/gateway/static/root/assets/notes-page-CmS_hvz8.js +0 -8
  445. package/dist/gateway/static/root/assets/page-context-capture-button-BArPtqp5.js +0 -1
  446. package/dist/gateway/static/root/assets/popover-select-DcsFzD_i.js +0 -1
  447. package/dist/gateway/static/root/assets/project-detail-page-BFUdtWXF.js +0 -1
  448. package/dist/gateway/static/root/assets/projects-page-DBsBwAQ6.js +0 -1
  449. package/dist/gateway/static/root/assets/remote-access-hub-BurdDY0m.js +0 -1
  450. package/dist/gateway/static/root/assets/scenes-page-Cj8xtr5t.js +0 -2
  451. package/dist/gateway/static/root/assets/sessions-page-BCsjgkCs.js +0 -1
  452. package/dist/gateway/static/root/assets/settings-advanced-gate-BLL7csOJ.js +0 -1
  453. package/dist/gateway/static/root/assets/setup-status-panel-CbKHBjrU.js +0 -1
  454. package/dist/gateway/static/root/assets/share-preview-page-DyLfktib.js +0 -2
  455. package/dist/gateway/static/root/assets/shares-settings-BzvSNouj.js +0 -1
  456. package/dist/gateway/static/root/assets/skill-reload-api-BHnru0F5.js +0 -1
  457. package/dist/gateway/static/root/assets/skills-page-C35VKjhb.js +0 -2
  458. package/dist/gateway/static/root/assets/task-detail-page-Bd1_Fguk.js +0 -1
  459. package/dist/gateway/static/root/assets/user-model-page-DuYzuR1T.js +0 -2
  460. package/dist/gateway/static/root/assets/workflows-page-B45YDiEw.js +0 -6
  461. package/dist/src/automations/product-events.d.ts +0 -5
  462. package/dist/src/automations/product-events.js +0 -19
  463. package/dist/src/tui/tui-empty-session-cleanup.d.ts +0 -9
  464. package/dist/src/tui/tui-empty-session-cleanup.js +0 -19
  465. /package/dist/gateway/static/root/assets/{dist-CI_fqRk-.js → dist-CI_fqRk-2.js} +0 -0
@@ -0,0 +1,318 @@
1
+ import { createLogger } from "../../utils/logger/index.js";
2
+ import { init_logger } from "../../utils/logger.js";
3
+ import { getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "../../storage/sqlite/transaction.js";
4
+ import { getAutomationRun } from "../storage/automation-run-repository.js";
5
+ import "../storage/index.js";
6
+ import { getAutomationEventForRun } from "../events/event-repository.js";
7
+ import { assertUrlSafe } from "../../agent/tools/url-safety.js";
8
+ import "../events/index.js";
9
+ import { resolveAutomationWebhookSecret } from "../webhook-secrets.js";
10
+ import { createHmac, randomUUID } from "node:crypto";
11
+ //#region src/automations/delivery/delivery-router.ts
12
+ init_transaction();
13
+ init_logger();
14
+ const log = createLogger("AutomationDeliveryRouter");
15
+ const MAX_ATTEMPTS = 5;
16
+ const LEASE_MS = 45e3;
17
+ const MAX_INLINE_ARTIFACT_BYTES = 64 * 1024;
18
+ function listAutomationResultDeliveries(input = {}) {
19
+ const clauses = [];
20
+ const params = [];
21
+ if (input.runId) {
22
+ clauses.push("run_id = ?");
23
+ params.push(input.runId);
24
+ }
25
+ if (input.status) {
26
+ clauses.push("status = ?");
27
+ params.push(input.status);
28
+ }
29
+ params.push(Math.max(1, Math.min(200, Math.floor(input.limit ?? 50))));
30
+ return getSqliteDatabase().prepare(`SELECT delivery_id, run_id, destination_key, kind, status, config_json,
31
+ attempts, next_attempt_at_ms, last_error, created_at_ms, updated_at_ms
32
+ FROM automation_result_deliveries ${clauses.length ? `WHERE ${clauses.join(" AND ")}` : ""}
33
+ ORDER BY created_at_ms DESC, run_id DESC, destination_key LIMIT ?`).all(...params).map((row) => ({
34
+ runId: row.run_id,
35
+ destinationKey: row.destination_key,
36
+ kind: row.kind,
37
+ status: row.status,
38
+ attempts: row.attempts,
39
+ nextAttemptAtMs: row.next_attempt_at_ms,
40
+ ...row.last_error ? { lastError: row.last_error } : {},
41
+ createdAtMs: row.created_at_ms,
42
+ updatedAtMs: row.updated_at_ms
43
+ }));
44
+ }
45
+ function retryAutomationResultDelivery(runId, destinationKey) {
46
+ const now = Date.now();
47
+ return getSqliteDatabase().prepare(`UPDATE automation_result_deliveries
48
+ SET status = 'retrying', attempts = 0, next_attempt_at_ms = ?, last_error = NULL,
49
+ lease_owner = NULL, lease_until_ms = NULL, updated_at_ms = ?
50
+ WHERE run_id = ? AND destination_key = ? AND status = 'dead_letter'`).run(now, now, runId, destinationKey).changes === 1;
51
+ }
52
+ function getAutomationResultDeliveryMetrics() {
53
+ const now = Date.now();
54
+ const row = getSqliteDatabase().prepare(`SELECT
55
+ SUM(CASE WHEN status IN ('pending', 'retrying', 'delivering') THEN 1 ELSE 0 END) AS pending,
56
+ SUM(CASE WHEN status = 'dead_letter' THEN 1 ELSE 0 END) AS dead_letters,
57
+ SUM(CASE WHEN status = 'delivering' AND lease_until_ms > ? THEN 1 ELSE 0 END) AS active_leases
58
+ FROM automation_result_deliveries`).get(now);
59
+ return {
60
+ pending: row.pending ?? 0,
61
+ deadLetters: row.dead_letters ?? 0,
62
+ activeLeases: row.active_leases ?? 0
63
+ };
64
+ }
65
+ function assertArtifacts(artifacts) {
66
+ for (const artifact of artifacts) {
67
+ if (artifact.kind === "file") {
68
+ let uri;
69
+ try {
70
+ uri = new URL(artifact.uri);
71
+ } catch {
72
+ throw new Error(`Automation file artifact must use an authorized URI: ${artifact.id}`);
73
+ }
74
+ if (uri.protocol !== "xopc:" && uri.protocol !== "https:") throw new Error(`Automation file artifact URI is not allowed: ${artifact.id}`);
75
+ continue;
76
+ }
77
+ if (artifact.kind === "reference") continue;
78
+ if (Buffer.byteLength(JSON.stringify(artifact)) > MAX_INLINE_ARTIFACT_BYTES) throw new Error(`Automation artifact exceeds ${MAX_INLINE_ARTIFACT_BYTES} bytes: ${artifact.id}`);
79
+ }
80
+ }
81
+ function toResult(run, artifacts) {
82
+ if (run.endedAtMs === void 0 || ![
83
+ "succeeded",
84
+ "failed",
85
+ "cancelled",
86
+ "timeout"
87
+ ].includes(run.status)) throw new Error("Cannot deliver an unfinished automation run");
88
+ assertArtifacts(artifacts);
89
+ const event = getAutomationEventForRun(run.id);
90
+ return {
91
+ schemaVersion: 1,
92
+ resultId: `result:${run.id}`,
93
+ runId: run.id,
94
+ automationId: run.automationId,
95
+ status: run.status,
96
+ ...run.summary ? { summary: run.summary } : {},
97
+ ...run.error ? { error: {
98
+ code: `AUTOMATION_${run.status.toUpperCase()}`,
99
+ message: run.error,
100
+ retryable: false
101
+ } } : {},
102
+ artifacts,
103
+ correlationId: event?.correlationId ?? run.id,
104
+ rootEventId: event?.rootEventId ?? run.id,
105
+ createdAtMs: run.createdAtMs,
106
+ completedAtMs: run.endedAtMs
107
+ };
108
+ }
109
+ var AutomationDeliveryRouter = class {
110
+ active;
111
+ timer;
112
+ handlers = /* @__PURE__ */ new Map();
113
+ owner = `automation-delivery:${process.pid}:${randomUUID()}`;
114
+ abortController = new AbortController();
115
+ constructor(options = {}) {
116
+ this.options = options;
117
+ this.register("gateway_event", ({ run, config }) => this.options.deliverGatewayEvent?.(run, {
118
+ notificationPolicy: config.notificationPolicy,
119
+ requiresAttention: config.requiresAttention === true,
120
+ ...typeof config.projectId === "string" ? { projectId: config.projectId } : {}
121
+ }));
122
+ this.register("webhook", (input) => this.postWebhook(input));
123
+ }
124
+ register(kind, handler) {
125
+ if (this.handlers.has(kind)) throw new Error(`Automation delivery handler already registered: ${kind}`);
126
+ this.handlers.set(kind, handler);
127
+ }
128
+ validateArtifacts(artifacts) {
129
+ assertArtifacts(artifacts);
130
+ }
131
+ enqueue(run, automation, suppliedArtifacts = []) {
132
+ const now = Date.now();
133
+ const result = toResult(run, suppliedArtifacts.length > 0 ? suppliedArtifacts : run.summary ? [{
134
+ id: `summary:${run.id}`,
135
+ kind: "text",
136
+ text: run.summary,
137
+ mediaType: "text/plain"
138
+ }] : []);
139
+ runSqliteWriteTransaction((db) => {
140
+ db.prepare(`INSERT INTO automation_results (run_id, result_id, result_json, created_at_ms)
141
+ VALUES (?, ?, ?, ?)`).run(run.id, result.resultId, JSON.stringify(result), now);
142
+ const insert = db.prepare(`INSERT INTO automation_result_deliveries (
143
+ delivery_id, run_id, destination_key, kind, status, config_json, attempts,
144
+ next_attempt_at_ms, created_at_ms, updated_at_ms
145
+ ) VALUES (?, ?, ?, ?, 'pending', ?, 0, ?, ?, ?)`);
146
+ for (const destination of automation.delivery.destinations) {
147
+ const config = destination.kind === "gateway_event" ? {
148
+ ...destination,
149
+ notificationPolicy: automation.delivery.notificationPolicy,
150
+ requiresAttention: run.status !== "succeeded" || (automation.safety?.mode ?? "auto_apply") !== "auto_apply",
151
+ ...automation.projectId ? { projectId: automation.projectId } : {}
152
+ } : destination;
153
+ insert.run(randomUUID(), run.id, destination.key, destination.kind, JSON.stringify(config), now, now, now);
154
+ }
155
+ });
156
+ }
157
+ start() {
158
+ if (this.timer) return;
159
+ this.dispatch();
160
+ this.timer = setInterval(() => void this.dispatch(), 1e3);
161
+ this.timer.unref?.();
162
+ }
163
+ async stop() {
164
+ if (this.timer) clearInterval(this.timer);
165
+ this.timer = void 0;
166
+ this.abortController.abort(/* @__PURE__ */ new Error("Automation delivery router stopped"));
167
+ await this.active?.catch(() => void 0);
168
+ }
169
+ dispatch() {
170
+ this.active ??= this.runDispatch().finally(() => {
171
+ this.active = void 0;
172
+ });
173
+ return this.active;
174
+ }
175
+ claim(limit) {
176
+ const now = Date.now();
177
+ return runSqliteWriteTransaction((db) => {
178
+ const expiredCandidates = db.prepare(`SELECT delivery_id, run_id, destination_key
179
+ FROM automation_result_deliveries
180
+ WHERE status = 'delivering' AND lease_until_ms <= ? AND attempts >= ?`).all(now, MAX_ATTEMPTS);
181
+ const expire = db.prepare(`UPDATE automation_result_deliveries
182
+ SET status = 'dead_letter', last_error = 'Delivery lease expired after maximum attempts',
183
+ lease_owner = NULL, lease_until_ms = NULL, updated_at_ms = ?
184
+ WHERE delivery_id = ? AND status = 'delivering' AND lease_until_ms <= ? AND attempts >= ?`);
185
+ const expired = [];
186
+ for (const candidate of expiredCandidates) if (expire.run(now, candidate.delivery_id, now, MAX_ATTEMPTS).changes === 1) expired.push({
187
+ runId: candidate.run_id,
188
+ destinationKey: candidate.destination_key,
189
+ error: "Delivery lease expired after maximum attempts"
190
+ });
191
+ const candidates = db.prepare(`SELECT delivery_id, run_id, destination_key, kind, config_json, attempts
192
+ FROM automation_result_deliveries
193
+ WHERE attempts < ? AND (
194
+ (status IN ('pending', 'retrying') AND next_attempt_at_ms <= ?)
195
+ OR (status = 'delivering' AND lease_until_ms <= ?)
196
+ )
197
+ ORDER BY created_at_ms, run_id, destination_key LIMIT ?`).all(MAX_ATTEMPTS, now, now, limit);
198
+ const claimed = [];
199
+ const statement = db.prepare(`UPDATE automation_result_deliveries
200
+ SET status = 'delivering', attempts = attempts + 1, lease_owner = ?, lease_until_ms = ?, updated_at_ms = ?
201
+ WHERE delivery_id = ? AND attempts = ? AND (
202
+ (status IN ('pending', 'retrying') AND next_attempt_at_ms <= ?)
203
+ OR (status = 'delivering' AND lease_until_ms <= ?)
204
+ )`);
205
+ for (const candidate of candidates) if (statement.run(this.owner, now + LEASE_MS, now, candidate.delivery_id, candidate.attempts, now, now).changes === 1) claimed.push(candidate);
206
+ return {
207
+ rows: claimed,
208
+ expired
209
+ };
210
+ });
211
+ }
212
+ async runDispatch() {
213
+ const { rows, expired } = this.claim(100);
214
+ for (const item of expired) {
215
+ this.options.onDeadLetter?.({
216
+ phase: "result_delivery",
217
+ ...item
218
+ });
219
+ log.warn(item, "Automation result delivery moved to dead letter after lease expiry");
220
+ }
221
+ let delivered = 0;
222
+ for (const [index, row] of rows.entries()) {
223
+ if (this.abortController.signal.aborted) {
224
+ for (const remaining of rows.slice(index)) this.release(remaining);
225
+ break;
226
+ }
227
+ const run = getAutomationRun(row.run_id);
228
+ const resultRow = getSqliteDatabase().prepare("SELECT result_json FROM automation_results WHERE run_id = ?").get(row.run_id);
229
+ if (!run || !resultRow) {
230
+ this.fail(row, /* @__PURE__ */ new Error("Automation result is unavailable"), true);
231
+ continue;
232
+ }
233
+ try {
234
+ const handler = this.handlers.get(row.kind);
235
+ if (!handler) throw new Error(`Automation delivery handler is unavailable: ${row.kind}`);
236
+ await handler({
237
+ deliveryId: row.delivery_id,
238
+ attempt: row.attempts + 1,
239
+ run,
240
+ result: JSON.parse(resultRow.result_json),
241
+ config: JSON.parse(row.config_json),
242
+ signal: this.abortController.signal
243
+ });
244
+ if (getSqliteDatabase().prepare(`UPDATE automation_result_deliveries
245
+ SET status = 'delivered', last_error = NULL, lease_owner = NULL, lease_until_ms = NULL, updated_at_ms = ?
246
+ WHERE delivery_id = ? AND status = 'delivering' AND lease_owner = ?`).run(Date.now(), row.delivery_id, this.owner).changes === 1) delivered += 1;
247
+ } catch (error) {
248
+ if (this.abortController.signal.aborted) this.release(row);
249
+ else this.fail(row, error, false);
250
+ }
251
+ }
252
+ return delivered;
253
+ }
254
+ release(row) {
255
+ getSqliteDatabase().prepare(`UPDATE automation_result_deliveries
256
+ SET status = 'retrying', attempts = MAX(0, attempts - 1), next_attempt_at_ms = ?,
257
+ lease_owner = NULL, lease_until_ms = NULL, updated_at_ms = ?
258
+ WHERE delivery_id = ? AND status = 'delivering' AND lease_owner = ?`).run(Date.now(), Date.now(), row.delivery_id, this.owner);
259
+ }
260
+ fail(row, error, permanent) {
261
+ const attempts = row.attempts + 1;
262
+ const terminal = permanent || attempts >= MAX_ATTEMPTS;
263
+ const delayMs = Math.min(10 * 6e4, 1e3 * 5 ** Math.max(0, attempts - 1));
264
+ if (getSqliteDatabase().prepare(`UPDATE automation_result_deliveries
265
+ SET status = ?, next_attempt_at_ms = ?, last_error = ?, lease_owner = NULL,
266
+ lease_until_ms = NULL, updated_at_ms = ?
267
+ WHERE delivery_id = ? AND status = 'delivering' AND lease_owner = ?`).run(terminal ? "dead_letter" : "retrying", Date.now() + delayMs, error instanceof Error ? error.message : String(error), Date.now(), row.delivery_id, this.owner).changes !== 1) return;
268
+ if (terminal) this.options.onDeadLetter?.({
269
+ phase: "result_delivery",
270
+ runId: row.run_id,
271
+ destinationKey: row.destination_key,
272
+ error: error instanceof Error ? error.message : String(error)
273
+ });
274
+ log.warn({
275
+ err: error,
276
+ runId: row.run_id,
277
+ deliveryKind: row.kind,
278
+ attempt: attempts
279
+ }, terminal ? "Automation result delivery moved to dead letter" : "Automation result delivery will retry");
280
+ }
281
+ async postWebhook(input) {
282
+ const endpoint = String(input.config.endpoint ?? "");
283
+ const secretId = String(input.config.secretId ?? "");
284
+ assertUrlSafe(endpoint);
285
+ const secret = resolveAutomationWebhookSecret(secretId);
286
+ if (!secret) throw new Error(`Automation webhook secret is unavailable: ${secretId}`);
287
+ const timestamp = String(Date.now());
288
+ const body = JSON.stringify(input.result);
289
+ const signature = createHmac("sha256", secret).update(`${timestamp}.${body}`).digest("hex");
290
+ const controller = new AbortController();
291
+ const onAbort = () => controller.abort(input.signal.reason);
292
+ input.signal.addEventListener("abort", onAbort, { once: true });
293
+ if (input.signal.aborted) onAbort();
294
+ const timer = setTimeout(() => controller.abort(/* @__PURE__ */ new Error("Automation delivery timed out")), 3e4);
295
+ try {
296
+ const response = await (this.options.fetch ?? fetch)(endpoint, {
297
+ method: "POST",
298
+ redirect: "manual",
299
+ headers: {
300
+ "content-type": "application/json",
301
+ "idempotency-key": `${input.result.runId}:${String(input.config.key)}`,
302
+ "x-xopc-delivery-id": input.deliveryId,
303
+ "x-xopc-delivery-attempt": String(input.attempt),
304
+ "x-xopc-timestamp": timestamp,
305
+ "x-xopc-signature": `sha256=${signature}`
306
+ },
307
+ body,
308
+ signal: controller.signal
309
+ });
310
+ if (!response.ok) throw new Error(`Automation delivery failed with HTTP ${response.status}`);
311
+ } finally {
312
+ clearTimeout(timer);
313
+ input.signal.removeEventListener("abort", onAbort);
314
+ }
315
+ }
316
+ };
317
+ //#endregion
318
+ export { AutomationDeliveryRouter, getAutomationResultDeliveryMetrics, listAutomationResultDeliveries, retryAutomationResultDelivery };
@@ -0,0 +1 @@
1
+ export * from './delivery-router.js';
@@ -0,0 +1,2 @@
1
+ import { AutomationDeliveryRouter, getAutomationResultDeliveryMetrics, listAutomationResultDeliveries, retryAutomationResultDelivery } from "./delivery-router.js";
2
+ export { AutomationDeliveryRouter, getAutomationResultDeliveryMetrics, listAutomationResultDeliveries, retryAutomationResultDelivery };
@@ -4,5 +4,4 @@ export declare const DEFAULT_BROWSER_AUTOMATION_TIMEOUT_SECONDS: number;
4
4
  export declare function defaultAutomationTimeoutSeconds(action: AutomationAction): number;
5
5
  export declare function resolveAutomationTimeoutSeconds(action: AutomationAction, reliability?: {
6
6
  executionTimeoutSeconds?: number;
7
- timeoutSeconds?: number;
8
7
  }): number;
@@ -5,7 +5,7 @@ function defaultAutomationTimeoutSeconds(action) {
5
5
  return action.kind === "system" ? 60 : action.kind === "browser_automation" ? 600 : DEFAULT_AUTOMATION_TIMEOUT_SECONDS;
6
6
  }
7
7
  function resolveAutomationTimeoutSeconds(action, reliability) {
8
- return reliability?.executionTimeoutSeconds ?? ("timeoutSeconds" in action ? action.timeoutSeconds : void 0) ?? reliability?.timeoutSeconds ?? defaultAutomationTimeoutSeconds(action);
8
+ return reliability?.executionTimeoutSeconds ?? ("timeoutSeconds" in action ? action.timeoutSeconds : void 0) ?? defaultAutomationTimeoutSeconds(action);
9
9
  }
10
10
  //#endregion
11
11
  export { DEFAULT_AUTOMATION_TIMEOUT_SECONDS, DEFAULT_BROWSER_AUTOMATION_TIMEOUT_SECONDS, defaultAutomationTimeoutSeconds, resolveAutomationTimeoutSeconds };
@@ -1,4 +1,4 @@
1
- import { AutomationActionSchema, AutomationManagementSchema, AutomationReliabilitySchema, AutomationSafetyPolicySchema, AutomationScheduleSchema, AutomationSchema, AutomationStateSchema, AutomationTriggerSchema, CreateAutomationSchema, UpdateAutomationSchema } from "./validation.js";
1
+ import { AutomationActionSchema, AutomationDeliveryPolicySchema, AutomationManagementSchema, AutomationReliabilitySchema, AutomationSafetyPolicySchema, AutomationScheduleSchema, AutomationSchema, AutomationStateSchema, AutomationTriggerSchema, CreateAutomationSchema, UpdateAutomationSchema } from "./validation.js";
2
2
  import { computeNextAutomationRunAtMs, computeNextScheduleRunAtMs, timerDelayUntil } from "./schedule.js";
3
3
  import { DEFAULT_AUTOMATION_TIMEOUT_SECONDS, DEFAULT_BROWSER_AUTOMATION_TIMEOUT_SECONDS, defaultAutomationTimeoutSeconds, resolveAutomationTimeoutSeconds } from "./defaults.js";
4
- export { AutomationActionSchema, AutomationManagementSchema, AutomationReliabilitySchema, AutomationSafetyPolicySchema, AutomationScheduleSchema, AutomationSchema, AutomationStateSchema, AutomationTriggerSchema, CreateAutomationSchema, DEFAULT_AUTOMATION_TIMEOUT_SECONDS, DEFAULT_BROWSER_AUTOMATION_TIMEOUT_SECONDS, UpdateAutomationSchema, computeNextAutomationRunAtMs, computeNextScheduleRunAtMs, defaultAutomationTimeoutSeconds, resolveAutomationTimeoutSeconds, timerDelayUntil };
4
+ export { AutomationActionSchema, AutomationDeliveryPolicySchema, AutomationManagementSchema, AutomationReliabilitySchema, AutomationSafetyPolicySchema, AutomationScheduleSchema, AutomationSchema, AutomationStateSchema, AutomationTriggerSchema, CreateAutomationSchema, DEFAULT_AUTOMATION_TIMEOUT_SECONDS, DEFAULT_BROWSER_AUTOMATION_TIMEOUT_SECONDS, UpdateAutomationSchema, computeNextAutomationRunAtMs, computeNextScheduleRunAtMs, defaultAutomationTimeoutSeconds, resolveAutomationTimeoutSeconds, timerDelayUntil };
@@ -67,15 +67,41 @@ export interface AutomationManagement {
67
67
  }
68
68
  export type AutomationConversationMode = 'new_session' | 'continuous';
69
69
  export type AutomationNotificationPolicy = 'attention' | 'all' | 'none';
70
+ export type AutomationDeliveryDestination = {
71
+ key: string;
72
+ kind: 'gateway_event';
73
+ } | {
74
+ key: string;
75
+ kind: 'webhook';
76
+ endpoint: string;
77
+ secretId: string;
78
+ } | {
79
+ key: string;
80
+ kind: 'file';
81
+ targetId: string;
82
+ pathTemplate: string;
83
+ } | {
84
+ key: string;
85
+ kind: 'card';
86
+ channelId: string;
87
+ templateId: string;
88
+ };
89
+ export interface AutomationDeliveryPolicy {
90
+ notificationPolicy: AutomationNotificationPolicy;
91
+ destinations: AutomationDeliveryDestination[];
92
+ }
93
+ export interface AutomationRunDeliveryContext {
94
+ notificationPolicy: AutomationNotificationPolicy;
95
+ requiresAttention: boolean;
96
+ projectId?: string;
97
+ }
70
98
  export interface AutomationReliability {
71
- /** Overall run deadline. `timeoutSeconds` remains a read-only legacy fallback. */
72
99
  executionTimeoutSeconds?: number;
73
- timeoutSeconds?: number;
74
100
  retryCount?: number;
75
101
  maxConcurrentRuns?: number;
76
102
  disableAfterConsecutiveFailures?: number;
77
103
  }
78
- export type AutomationRunPhase = 'queued' | 'action' | 'completion_hook' | 'cancelling' | 'completed';
104
+ export type AutomationRunPhase = 'queued' | 'action' | 'cancelling' | 'completed';
79
105
  export interface AutomationRunTermination {
80
106
  reason: 'completed' | 'failed' | 'user_cancelled' | 'deadline_exceeded';
81
107
  component?: 'automation' | 'agent_turn' | 'tool' | 'mcp' | 'process';
@@ -104,8 +130,7 @@ export interface Automation {
104
130
  action: AutomationAction;
105
131
  safety?: AutomationSafetyPolicy;
106
132
  conversationMode: AutomationConversationMode;
107
- notificationPolicy: AutomationNotificationPolicy;
108
- completionWebhookUrl?: string;
133
+ delivery: AutomationDeliveryPolicy;
109
134
  reliability?: AutomationReliability;
110
135
  management?: AutomationManagement;
111
136
  state: AutomationState;
@@ -142,7 +167,7 @@ export interface AutomationRun {
142
167
  rootRunId?: string;
143
168
  readAtMs?: number;
144
169
  }
145
- export type AutomationRunEventType = 'run.queued' | 'run.started' | 'run.deadline_resolved' | 'run.cancel_requested' | 'run.cancel_confirmed' | 'run.cancellation_unconfirmed' | 'run.recovered' | 'action.started' | 'action.retry_scheduled' | 'action.completed' | 'action.failed' | 'completion_hook.started' | 'completion_hook.completed' | 'completion_hook.failed' | 'run.completed';
170
+ export type AutomationRunEventType = 'run.queued' | 'run.started' | 'run.deadline_resolved' | 'run.cancel_requested' | 'run.cancel_confirmed' | 'run.cancellation_unconfirmed' | 'run.recovered' | 'action.started' | 'action.retry_scheduled' | 'action.completed' | 'action.failed' | 'run.completed';
146
171
  export interface AutomationRunEvent {
147
172
  id: string;
148
173
  runId: string;
@@ -157,10 +182,60 @@ export interface AutomationProductEventRun {
157
182
  triggerEvent: AutomationRunEvent;
158
183
  }
159
184
  export interface AutomationEvent {
185
+ id?: string;
160
186
  type: string;
161
187
  source?: string;
188
+ schemaVersion?: number;
189
+ subject?: {
190
+ kind: string;
191
+ id: string;
192
+ };
162
193
  payload?: Record<string, unknown>;
163
194
  occurredAtMs?: number;
195
+ correlationId?: string;
196
+ causationId?: string;
197
+ rootEventId?: string;
198
+ chainDepth?: number;
199
+ dedupeKey?: string;
200
+ trust?: 'system' | 'user' | 'connector' | 'untrusted_webhook';
201
+ }
202
+ export interface AutomationEventEnvelope extends AutomationEvent {
203
+ id: string;
204
+ source: string;
205
+ schemaVersion: number;
206
+ occurredAtMs: number;
207
+ ingestedAtMs: number;
208
+ correlationId: string;
209
+ rootEventId: string;
210
+ chainDepth: number;
211
+ trust: 'system' | 'user' | 'connector' | 'untrusted_webhook';
212
+ payload: Record<string, unknown>;
213
+ }
214
+ export type AutomationEventProjectionStatus = 'pending' | 'projecting' | 'retrying' | 'projected' | 'dead_letter';
215
+ export type AutomationEventDeliveryStatus = 'pending' | 'retrying' | 'queued' | 'completed' | 'failed' | 'cancelled' | 'skipped' | 'dead_letter';
216
+ export interface AutomationEventRecord {
217
+ event: AutomationEventEnvelope;
218
+ projectionStatus: AutomationEventProjectionStatus;
219
+ projectionAttempts: number;
220
+ projectionError?: string;
221
+ deliveries: Array<{
222
+ automationId: string;
223
+ status: AutomationEventDeliveryStatus;
224
+ runId?: string;
225
+ attempts: number;
226
+ lastError?: string;
227
+ }>;
228
+ }
229
+ export interface AutomationResultDeliveryRecord {
230
+ runId: string;
231
+ destinationKey: string;
232
+ kind: string;
233
+ status: 'pending' | 'delivering' | 'retrying' | 'delivered' | 'dead_letter';
234
+ attempts: number;
235
+ nextAttemptAtMs: number;
236
+ lastError?: string;
237
+ createdAtMs: number;
238
+ updatedAtMs: number;
164
239
  }
165
240
  export interface AutomationMetrics {
166
241
  totalAutomations: number;
@@ -172,7 +247,73 @@ export interface AutomationMetrics {
172
247
  name: string;
173
248
  runAtMs: number;
174
249
  };
250
+ pendingEvents: number;
251
+ oldestPendingEventAgeMs: number;
252
+ projectionDeadLetters: number;
253
+ pendingRunDeliveries: number;
254
+ runDeliveryDeadLetters: number;
255
+ pendingResultDeliveries: number;
256
+ resultDeliveryDeadLetters: number;
257
+ activeExecutions: number;
258
+ activeDeliveryLeases: number;
259
+ }
260
+ export type AutomationArtifact = {
261
+ id: string;
262
+ kind: 'text';
263
+ text: string;
264
+ mediaType: 'text/plain' | 'text/markdown';
265
+ } | {
266
+ id: string;
267
+ kind: 'json';
268
+ schema: string;
269
+ data: Record<string, unknown>;
270
+ } | {
271
+ id: string;
272
+ kind: 'file';
273
+ uri: string;
274
+ name: string;
275
+ mediaType: string;
276
+ bytes?: number;
277
+ sha256?: string;
278
+ } | {
279
+ id: string;
280
+ kind: 'card';
281
+ schema: string;
282
+ data: Record<string, unknown>;
283
+ } | {
284
+ id: string;
285
+ kind: 'reference';
286
+ resourceType: string;
287
+ resourceId: string;
288
+ url?: string;
289
+ };
290
+ export interface AutomationResultEnvelope {
291
+ schemaVersion: 1;
292
+ resultId: string;
293
+ runId: string;
294
+ automationId: string;
295
+ status: Extract<AutomationRunStatus, 'succeeded' | 'failed' | 'cancelled' | 'timeout'>;
296
+ summary?: string;
297
+ error?: {
298
+ code: string;
299
+ message: string;
300
+ retryable: boolean;
301
+ };
302
+ artifacts: AutomationArtifact[];
303
+ correlationId: string;
304
+ rootEventId: string;
305
+ createdAtMs: number;
306
+ completedAtMs: number;
175
307
  }
308
+ export type AutomationRetrySafety = {
309
+ mode: 'never';
310
+ } | {
311
+ mode: 'idempotent';
312
+ key: 'run_id';
313
+ } | {
314
+ mode: 'transient_only';
315
+ classify: (error: unknown) => boolean;
316
+ };
176
317
  export interface PrepareAutomationAgentSessionInput {
177
318
  automationName?: string;
178
319
  conversationId: string;
@@ -210,7 +351,16 @@ export interface AutomationDeps {
210
351
  error?: string;
211
352
  }>;
212
353
  };
213
- onRunCompleted?: (run: AutomationRun) => void;
354
+ onRunCompleted?: (run: AutomationRun, context: AutomationRunDeliveryContext) => void | Promise<void>;
355
+ onEvent?: (event: AutomationEventEnvelope, signal?: AbortSignal) => void | Promise<void>;
356
+ onReliabilityAttention?: (input: {
357
+ phase: 'event_projection' | 'event_delivery' | 'result_delivery';
358
+ eventId?: string;
359
+ automationId?: string;
360
+ runId?: string;
361
+ destinationKey?: string;
362
+ error: string;
363
+ }) => void;
214
364
  executeTaskCommand?: (input: {
215
365
  taskId: string;
216
366
  idempotencyKey: string;
@@ -242,6 +392,7 @@ export interface AutomationActionTask {
242
392
  model?: string;
243
393
  deadlineAtMs?: number;
244
394
  termination?: AutomationRunTermination;
395
+ artifacts?: AutomationArtifact[];
245
396
  }
246
397
  export interface AutomationActionExecutionHooks {
247
398
  onRunPatch?: (patch: Partial<AutomationRun>) => void | Promise<void>;