@xopcai/xopc 0.0.313 → 0.0.314

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 (672) hide show
  1. package/dist/browser-ext/dist/assets/{auth-C3yV1y_l.js → auth-DKo-NMUY.js} +18 -1
  2. package/dist/browser-ext/dist/background.js +68 -2
  3. package/dist/browser-ext/dist/sidepanel.html +1 -1
  4. package/dist/browser-ext/dist/sidepanel.js +1 -1
  5. package/dist/browser-ext/manifest.json +1 -1
  6. package/dist/extensions/feishu/src/adapters/cli-login.js +3 -3
  7. package/dist/extensions/feishu/src/outbound/media-load.js +2 -2
  8. package/dist/extensions/telegram/src/inbound-processor.js +1 -1
  9. package/dist/extensions/telegram/src/outbound-sender.js +1 -1
  10. package/dist/extensions/telegram/src/plugin.js +3 -3
  11. package/dist/extensions/telegram/xopc.extension.json +1 -1
  12. package/dist/extensions/weixin/src/api/api.js +2 -2
  13. package/dist/extensions/weixin/src/auth/accounts.js +12 -12
  14. package/dist/extensions/weixin/src/messaging/debug-mode.js +5 -5
  15. package/dist/extensions/weixin/src/messaging/inbound.js +11 -11
  16. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-C73s_EYF.js → agent-avatar-dicebear-BFkjfurL.js} +1 -1
  17. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BdOZ6q8Z.js +1 -0
  18. package/dist/gateway/static/root/assets/{agents-Bspu1pT2.js → agents-CCcavsHq.js} +1 -1
  19. package/dist/gateway/static/root/assets/{api-Com7kQuw.js → api-BYhRsTAc.js} +1 -1
  20. package/dist/gateway/static/root/assets/{app-link-CKueEVbT.js → app-link-nL8iPwEr.js} +1 -1
  21. package/dist/gateway/static/root/assets/{app-management-settings-panel-DSo_SV6G.js → app-management-settings-panel-B4kihr-A.js} +1 -1
  22. package/dist/gateway/static/root/assets/appearance-settings-N9sYmNOx.js +1 -0
  23. package/dist/gateway/static/root/assets/apps-page-BMcy10_s.js +1 -0
  24. package/dist/gateway/static/root/assets/{archive-plugin-BWueu3Qt.js → archive-plugin-k_SuYWyV.js} +1 -1
  25. package/dist/gateway/static/root/assets/{attachment-load-DYV25sAC.js → attachment-load-DRv5QWUK.js} +1 -1
  26. package/dist/gateway/static/root/assets/{automations-page-Du8AkHrH.js → automations-page-CkJV3DN0.js} +1 -1
  27. package/dist/gateway/static/root/assets/automations-workspace-BEa2doeR.js +7 -0
  28. package/dist/gateway/static/root/assets/{binary-plugins-rahoUE_-.js → binary-plugins-Dg3h3TA7.js} +1 -1
  29. package/dist/gateway/static/root/assets/{block-editor-CVbiuQ90.js → block-editor-DVhdHntT.js} +29 -29
  30. package/dist/gateway/static/root/assets/{browser-automation-inputs-CAC4w9KM.js → browser-automation-inputs-BMRYUW8_.js} +1 -1
  31. package/dist/gateway/static/root/assets/{browser-automations-page-B3-fdrAr.js → browser-automations-page-Byv6-FY2.js} +2 -2
  32. package/dist/gateway/static/root/assets/browser-settings-page-DRCHGFpO.js +3 -0
  33. package/dist/gateway/static/root/assets/capabilities-D0S3DuAD.js +1 -0
  34. package/dist/gateway/static/root/assets/capabilities-settings-panel-mxRP0gl0.js +8 -0
  35. package/dist/gateway/static/root/assets/channels-settings-DBt_6GsB.js +1 -0
  36. package/dist/gateway/static/root/assets/{chat-terminal-dock-98GzKJ0K.js → chat-terminal-dock-D4AHa51o.js} +2 -2
  37. package/dist/gateway/static/root/assets/{computer-settings-page-CB3mySQb.js → computer-settings-page-eXPe500D.js} +1 -1
  38. package/dist/gateway/static/root/assets/{connector-service-page-ZlbIXdey.js → connector-service-page-BQTFlq_k.js} +1 -1
  39. package/dist/gateway/static/root/assets/connectors-page-BKeBWwcI.js +2 -0
  40. package/dist/gateway/static/root/assets/conversation-identity-Cw0n9uzK.js +1 -0
  41. package/dist/gateway/static/root/assets/{date-picker-WW3fY-ng.js → date-picker-7MtovynY.js} +1 -1
  42. package/dist/gateway/static/root/assets/{dependency-picker-D1QgzM_s.js → dependency-picker-Bj_xkXID.js} +1 -1
  43. package/dist/gateway/static/root/assets/{desktop-pet-D0MtbTwu.js → desktop-pet-CTmba9zH.js} +1 -1
  44. package/dist/gateway/static/root/assets/desktop-pet-settings-DNM_BlWN.js +1 -0
  45. package/dist/gateway/static/root/assets/device-pairing-wizard-C2XE0QhT.js +1 -0
  46. package/dist/gateway/static/root/assets/{extension-debug-page-BOtWAAGM.js → extension-debug-page-J_olaL7e.js} +1 -1
  47. package/dist/gateway/static/root/assets/{extension-page-FULvawj8.js → extension-page-pK5RvqN8.js} +1 -1
  48. package/dist/gateway/static/root/assets/{extension-settings-page-Dzh6lE26.js → extension-settings-page-BwroEN08.js} +1 -1
  49. package/dist/gateway/static/root/assets/files-BK6enEvD.js +1 -0
  50. package/dist/gateway/static/root/assets/{gateway-config-swr-D7SG_ECs.js → gateway-config-swr-FuJTIg_a.js} +1 -1
  51. package/dist/gateway/static/root/assets/gateway-settings-CLLDp23J.js +1 -0
  52. package/dist/gateway/static/root/assets/{gateway-startup-retry-CrHz00-9.js → gateway-startup-retry-CKg_gu8_.js} +1 -1
  53. package/dist/gateway/static/root/assets/home-page-B5Epb1PH.js +1 -0
  54. package/dist/gateway/static/root/assets/{image-generation-api-DGiHzeLb.js → image-generation-api-Bo6NZ7zb.js} +1 -1
  55. package/dist/gateway/static/root/assets/{imports-page-DiJrgu9D.js → imports-page-C8-hX8gS.js} +1 -1
  56. package/dist/gateway/static/root/assets/index-14F1yGJI.js +89 -0
  57. package/dist/gateway/static/root/assets/index-cB7rWIDY.css +1 -0
  58. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DZ60sucF.js → keyboard-shortcuts-settings-BkBEjUZD.js} +1 -1
  59. package/dist/gateway/static/root/assets/local-app-workbench-page-6jC3vQpY.js +2 -0
  60. package/dist/gateway/static/root/assets/{local-apps-page-Cx2YuI8E.js → local-apps-page-CrbKIixo.js} +1 -1
  61. package/dist/gateway/static/root/assets/{locale-store-vZTDIqJB.js → locale-store-CvGwNbml.js} +1 -1
  62. package/dist/gateway/static/root/assets/logs-page-DBHlZts9.js +2 -0
  63. package/dist/gateway/static/root/assets/management-settings-DsUWLu5m.js +1 -0
  64. package/dist/gateway/static/root/assets/{markdown-view-DJfzcZCW.js → markdown-view-nXo5nrsv.js} +1 -1
  65. package/dist/gateway/static/root/assets/{media-plugins-COpQGcN3.js → media-plugins-upxXJ-4l.js} +1 -1
  66. package/dist/gateway/static/root/assets/messages-B_AwRroN.js +3 -0
  67. package/dist/gateway/static/root/assets/note-detail-panel-0Q9TOtJG.js +5 -0
  68. package/dist/gateway/static/root/assets/notes-page-D0NmcwNw.js +8 -0
  69. package/dist/gateway/static/root/assets/page-context-capture-button-DUyA-K4L.js +1 -0
  70. package/dist/gateway/static/root/assets/{page-tabs-nARdLZcP.js → page-tabs-Cl-NFPNr.js} +1 -1
  71. package/dist/gateway/static/root/assets/{preview-open-alternatives-BEJg3fTq.js → preview-open-alternatives-DX81PwJ3.js} +1 -1
  72. package/dist/gateway/static/root/assets/product-delivery-chCjIpvu.js +1 -0
  73. package/dist/gateway/static/root/assets/{product-open-page-CR4Lehku.js → product-open-page-CrfIGwm8.js} +1 -1
  74. package/dist/gateway/static/root/assets/project-detail-page-BVfVrYmn.js +1 -0
  75. package/dist/gateway/static/root/assets/projects-page-nM9a9XNS.js +1 -0
  76. package/dist/gateway/static/root/assets/{registry-api-CF-nJ5MG.js → registry-api-CHxgohY0.js} +1 -1
  77. package/dist/gateway/static/root/assets/remote-access-hub-C8b_k88G.js +1 -0
  78. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-D3dLOW04.js +5 -0
  79. package/dist/gateway/static/root/assets/scenes-page-DEowreZV.js +2 -0
  80. package/dist/gateway/static/root/assets/{schema-form-DOsDKbWU.js → schema-form-ZxuIvD2_.js} +1 -1
  81. package/dist/gateway/static/root/assets/schemas-88fK3zzl.js +64 -0
  82. package/dist/gateway/static/root/assets/sessions-page-B_nPhera.js +1 -0
  83. package/dist/gateway/static/root/assets/settings-advanced-gate-BqhIOuus.js +1 -0
  84. package/dist/gateway/static/root/assets/{settings-form-section-kIV5M-9G.js → settings-form-section-TZRfg4yo.js} +1 -1
  85. package/dist/gateway/static/root/assets/{settings-page-C2TS9mvq.js → settings-page-a8qcJpdZ.js} +1 -1
  86. package/dist/gateway/static/root/assets/{settings-page-layout-B39PogyD.js → settings-page-layout-BfvlRT9q.js} +1 -1
  87. package/dist/gateway/static/root/assets/setup-status-panel-CRj5Ruqn.js +1 -0
  88. package/dist/gateway/static/root/assets/{share-preview-page-CMbgRZ7w.js → share-preview-page-DCt1pTWB.js} +1 -1
  89. package/dist/gateway/static/root/assets/shares-settings-BNbXPk--.js +1 -0
  90. package/dist/gateway/static/root/assets/skill-reload-api-CNMCLbav.js +1 -0
  91. package/dist/gateway/static/root/assets/{skills-page-DV4FX1ev.js → skills-page-BIOcg44X.js} +1 -1
  92. package/dist/gateway/static/root/assets/{skills-page.utils-C-2lmZHk.js → skills-page.utils-CgZdzT4I.js} +1 -1
  93. package/dist/gateway/static/root/assets/{system-settings-panel-CQ1Z6i28.js → system-settings-panel-_YaRncA6.js} +1 -1
  94. package/dist/gateway/static/root/assets/task-detail-page-CAcfAG-c.js +1 -0
  95. package/dist/gateway/static/root/assets/tasks-CDR_RVbQ.js +1 -0
  96. package/dist/gateway/static/root/assets/{tunnel-api-tn6H0D44.js → tunnel-api-uOupJOoS.js} +1 -1
  97. package/dist/gateway/static/root/assets/turn-outcome-D0SnyZ3Z.js +1 -0
  98. package/dist/gateway/static/root/assets/{use-autosave-CkEM9tXu.js → use-autosave-BezzHBLE.js} +1 -1
  99. package/dist/gateway/static/root/assets/user-model-page-BFFeneDq.js +2 -0
  100. package/dist/gateway/static/root/assets/{voice-api-key-field-d0Fawetf.js → voice-api-key-field-BmYifdwL.js} +1 -1
  101. package/dist/gateway/static/root/assets/{voice-config-api-D_8zU7Li.js → voice-config-api-D_5Q2_A3.js} +1 -1
  102. package/dist/gateway/static/root/assets/{work-discovery-overlay-C5FFSieF.js → work-discovery-overlay-4DmyEckJ.js} +1 -1
  103. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-q5ammR4k.js → workflow-run-setup-panel-DeZe8bTZ.js} +2 -2
  104. package/dist/gateway/static/root/assets/workflows-page-Sv4hEc6W.js +6 -0
  105. package/dist/gateway/static/root/index.html +16 -16
  106. package/dist/package.js +1 -1
  107. package/dist/packages/computer-control-contract/src/index.js +10 -1
  108. package/dist/packages/gateway-contract/src/app-context.js +55 -0
  109. package/dist/packages/gateway-contract/src/automations.js +16 -17
  110. package/dist/packages/gateway-contract/src/capabilities.js +1078 -0
  111. package/dist/packages/gateway-contract/src/extension-capabilities.js +26 -0
  112. package/dist/packages/gateway-contract/src/home.js +3 -3
  113. package/dist/packages/gateway-contract/src/index.js +8 -0
  114. package/dist/packages/gateway-contract/src/product-delivery.js +19 -4
  115. package/dist/packages/gateway-contract/src/scenes.js +199 -0
  116. package/dist/packages/gateway-contract/src/task-runs.js +8 -4
  117. package/dist/packages/gateway-contract/src/tasks.js +5 -4
  118. package/dist/packages/realtime-client/src/index.js +17 -4
  119. package/dist/src/agent/agent-manager.d.ts +1 -0
  120. package/dist/src/agent/agent-manager.js +19 -18
  121. package/dist/src/agent/agent-scope.js +2 -2
  122. package/dist/src/agent/background-review/run-background-review.js +4 -4
  123. package/dist/src/agent/child-agent-factory.d.ts +2 -0
  124. package/dist/src/agent/child-agent-factory.js +5 -0
  125. package/dist/src/agent/coding/repository-instructions.js +1 -1
  126. package/dist/src/agent/commands/approved-verification.d.ts +14 -0
  127. package/dist/src/agent/commands/approved-verification.js +48 -0
  128. package/dist/src/agent/context/coordinator.js +2 -2
  129. package/dist/src/agent/context/execution-context.js +4 -4
  130. package/dist/src/agent/context/execution-scope.js +4 -3
  131. package/dist/src/agent/context/project-context.js +5 -4
  132. package/dist/src/agent/data-acquisition/service.js +1 -1
  133. package/dist/src/agent/embedded/index.js +2 -2
  134. package/dist/src/agent/embedded/model-runtime.js +1 -1
  135. package/dist/src/agent/embedded/run-for-session.js +4 -4
  136. package/dist/src/agent/embedded/run-turn.js +4 -4
  137. package/dist/src/agent/embedded/session-tool-result-guard.js +3 -3
  138. package/dist/src/agent/embedded/tool-result-truncation.js +1 -1
  139. package/dist/src/agent/external-tools/cliProvider.js +126 -78
  140. package/dist/src/agent/external-tools/composio-provider.d.ts +1 -1
  141. package/dist/src/agent/external-tools/composio-provider.js +73 -15
  142. package/dist/src/agent/external-tools/endpoint-provider.js +14 -1
  143. package/dist/src/agent/external-tools/gateway-tools.js +1 -1
  144. package/dist/src/agent/external-tools/mcp-provider.js +2 -2
  145. package/dist/src/agent/image/generation/openai-images-provider.js +1 -1
  146. package/dist/src/agent/image/generation/providers/dashscope.js +1 -1
  147. package/dist/src/agent/image/generation/providers/fal.js +1 -1
  148. package/dist/src/agent/image/generation/providers/google.js +1 -1
  149. package/dist/src/agent/image/generation/runtime.js +1 -1
  150. package/dist/src/agent/image/index.js +1 -1
  151. package/dist/src/agent/image/load-image-media.js +1 -1
  152. package/dist/src/agent/image/tool-model-config.js +1 -1
  153. package/dist/src/agent/inbound/attachment-pipeline.js +1 -1
  154. package/dist/src/agent/inbound/inbound-loop.js +2 -2
  155. package/dist/src/agent/inbound/turn-dispatcher.d.ts +2 -0
  156. package/dist/src/agent/inbound/turn-dispatcher.js +2 -1
  157. package/dist/src/agent/index.js +1 -1
  158. package/dist/src/agent/mcp/bundle-mcp-gateway.js +1 -1
  159. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  160. package/dist/src/agent/mcp/index.js +2 -2
  161. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  162. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
  163. package/dist/src/agent/memory/compaction-chunks.d.ts +6 -1
  164. package/dist/src/agent/memory/compaction-chunks.js +16 -3
  165. package/dist/src/agent/memory/compaction-ledger.d.ts +3 -1
  166. package/dist/src/agent/memory/compaction-ledger.js +31 -18
  167. package/dist/src/agent/memory/compaction-request.d.ts +2 -0
  168. package/dist/src/agent/memory/compaction-request.js +6 -1
  169. package/dist/src/agent/memory/compaction.d.ts +19 -1
  170. package/dist/src/agent/memory/compaction.js +112 -30
  171. package/dist/src/agent/memory/context-recovery.js +1 -1
  172. package/dist/src/agent/memory/index.js +2 -2
  173. package/dist/src/agent/orchestration/agent-orchestrator.js +5 -5
  174. package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
  175. package/dist/src/agent/sandbox/exec-policy.js +1 -1
  176. package/dist/src/agent/service/direct-turn-helpers.js +5 -5
  177. package/dist/src/agent/service/process-direct-one-shot.js +1 -1
  178. package/dist/src/agent/service/process-direct-streaming.d.ts +3 -0
  179. package/dist/src/agent/service/process-direct-streaming.js +21 -12
  180. package/dist/src/agent/service/webchat-tts.js +1 -1
  181. package/dist/src/agent/service.js +22 -21
  182. package/dist/src/agent/service.types.d.ts +1 -0
  183. package/dist/src/agent/session/session-inspector.js +1 -1
  184. package/dist/src/agent/skills/config.js +2 -0
  185. package/dist/src/agent/skills/filesystem-watcher.js +1 -1
  186. package/dist/src/agent/skills/format-skills-prompt.js +14 -1
  187. package/dist/src/agent/skills/hub-lock.js +1 -1
  188. package/dist/src/agent/skills/hub-pull.js +3 -3
  189. package/dist/src/agent/skills/index.js +16 -8
  190. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +1 -1
  191. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +1 -1
  192. package/dist/src/agent/skills/types.d.ts +1 -1
  193. package/dist/src/agent/source-context/app-context.d.ts +4 -0
  194. package/dist/src/agent/source-context/app-context.js +36 -0
  195. package/dist/src/agent/source-context/injector.js +1 -0
  196. package/dist/src/agent/source-context/types.d.ts +5 -1
  197. package/dist/src/agent/tasks/task-judge-service.js +6 -5
  198. package/dist/src/agent/tool-manuals/computer.d.ts +1 -1
  199. package/dist/src/agent/tool-manuals/computer.js +1 -1
  200. package/dist/src/agent/tools/automation-tool.d.ts +12 -1
  201. package/dist/src/agent/tools/automation-tool.js +106 -32
  202. package/dist/src/agent/tools/create-share-tool.js +4 -4
  203. package/dist/src/agent/tools/dataBatch.js +1 -1
  204. package/dist/src/agent/tools/delegate-tool.js +3 -3
  205. package/dist/src/agent/tools/delegation-parent-policy.js +1 -1
  206. package/dist/src/agent/tools/executor.js +1 -1
  207. package/dist/src/agent/tools/factory.d.ts +1 -0
  208. package/dist/src/agent/tools/factory.js +22 -17
  209. package/dist/src/agent/tools/fetch-text.js +1 -1
  210. package/dist/src/agent/tools/image-generate-tool.js +3 -3
  211. package/dist/src/agent/tools/index.js +6 -6
  212. package/dist/src/agent/tools/list-dir.js +1 -1
  213. package/dist/src/agent/tools/publish-artifacts.js +2 -2
  214. package/dist/src/agent/tools/read.js +2 -2
  215. package/dist/src/agent/tools/review-workspace.js +1 -1
  216. package/dist/src/agent/tools/scoped-workspace-tools.d.ts +8 -0
  217. package/dist/src/agent/tools/scoped-workspace-tools.js +81 -0
  218. package/dist/src/agent/tools/send-media.js +2 -2
  219. package/dist/src/agent/tools/skills-tools.js +1 -1
  220. package/dist/src/agent/tools/user-context-tool.js +1 -1
  221. package/dist/src/agent/tools/write.js +2 -2
  222. package/dist/src/agent/tools/xopc-use-tool.d.ts +6 -3
  223. package/dist/src/agent/tools/xopc-use-tool.js +997 -908
  224. package/dist/src/agent/workflow/subagent-runner.js +2 -1
  225. package/dist/src/agent-config/index.js +2 -2
  226. package/dist/src/agent-config/schema.d.ts +5 -0
  227. package/dist/src/agent-config/schema.js +14 -10
  228. package/dist/src/ai-assist/text-assist.js +1 -1
  229. package/dist/src/auth/credentials.js +2 -2
  230. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  231. package/dist/src/auth/profiles/store.js +1 -1
  232. package/dist/src/auth/sync-provider-auth.js +2 -2
  233. package/dist/src/automations/api/routes.js +244 -164
  234. package/dist/src/automations/capabilities/drafts.d.ts +4 -0
  235. package/dist/src/automations/capabilities/drafts.js +95 -0
  236. package/dist/src/automations/capabilities/read.d.ts +4 -0
  237. package/dist/src/automations/capabilities/read.js +119 -0
  238. package/dist/src/automations/capabilities/write.d.ts +349 -0
  239. package/dist/src/automations/capabilities/write.js +172 -0
  240. package/dist/src/automations/domain/index.js +2 -2
  241. package/dist/src/automations/domain/validation.d.ts +77 -77
  242. package/dist/src/automations/domain/validation.js +9 -6
  243. package/dist/src/automations/draft/automation-draft-validator.d.ts +2 -2
  244. package/dist/src/automations/index.js +6 -6
  245. package/dist/src/automations/service/automation-service.d.ts +31 -0
  246. package/dist/src/automations/service/automation-service.js +213 -75
  247. package/dist/src/automations/service/index.js +2 -2
  248. package/dist/src/automations/storage/automation-repository.d.ts +2 -0
  249. package/dist/src/automations/storage/automation-repository.js +9 -1
  250. package/dist/src/automations/storage/automation-run-repository.d.ts +4 -1
  251. package/dist/src/automations/storage/automation-run-repository.js +16 -3
  252. package/dist/src/automations/storage/index.js +3 -3
  253. package/dist/src/browser/automations/schema.d.ts +1 -1
  254. package/dist/src/browser/automations/service.d.ts +1 -1
  255. package/dist/src/browser/observation/format.js +4 -0
  256. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  257. package/dist/src/capabilities/adapters/http.d.ts +4 -0
  258. package/dist/src/capabilities/adapters/http.js +44 -0
  259. package/dist/src/capabilities/readiness/from-config.js +11 -7
  260. package/dist/src/capabilities/runtime/app-context.d.ts +3 -0
  261. package/dist/src/capabilities/runtime/app-context.js +72 -0
  262. package/dist/src/capabilities/runtime/atomic-operations.d.ts +11 -0
  263. package/dist/src/capabilities/runtime/atomic-operations.js +34 -0
  264. package/dist/src/capabilities/runtime/dispatcher.d.ts +67 -0
  265. package/dist/src/capabilities/runtime/dispatcher.js +170 -0
  266. package/dist/src/capabilities/runtime/errors.d.ts +6 -0
  267. package/dist/src/capabilities/runtime/errors.js +11 -0
  268. package/dist/src/capabilities/runtime/external-operations.d.ts +16 -0
  269. package/dist/src/capabilities/runtime/external-operations.js +92 -0
  270. package/dist/src/capabilities/runtime/product.d.ts +12 -0
  271. package/dist/src/capabilities/runtime/product.js +69 -0
  272. package/dist/src/capabilities/runtime/settings.d.ts +3 -0
  273. package/dist/src/capabilities/runtime/settings.js +27 -0
  274. package/dist/src/capabilities/store-connector.js +1 -1
  275. package/dist/src/channels/attachments/voice-stt-webchat.js +2 -2
  276. package/dist/src/channels/index.js +3 -3
  277. package/dist/src/channels/manager.js +1 -1
  278. package/dist/src/channels/pairing/allow-from-file.js +9 -9
  279. package/dist/src/channels/pairing/pairing-store.js +6 -6
  280. package/dist/src/chat-commands/agent-edit.js +1 -1
  281. package/dist/src/chat-commands/builtins/config.js +1 -1
  282. package/dist/src/chat-commands/builtins/review.js +1 -1
  283. package/dist/src/chat-commands/builtins/thinking.js +1 -1
  284. package/dist/src/chat-commands/builtins/tts.js +1 -1
  285. package/dist/src/chat-commands/builtins/understanding.js +1 -1
  286. package/dist/src/chat-commands/builtins/workflow.js +2 -2
  287. package/dist/src/chat-commands/context.js +2 -2
  288. package/dist/src/chat-commands/index.js +2 -2
  289. package/dist/src/cli/cli-log-level-preset.d.ts +2 -0
  290. package/dist/src/cli/cli-log-level-preset.js +4 -0
  291. package/dist/src/cli/command-catalog.js +4 -0
  292. package/dist/src/cli/command-loaders.js +1 -0
  293. package/dist/src/cli/command-manifest.js +4 -0
  294. package/dist/src/cli/commands/agent.js +7 -7
  295. package/dist/src/cli/commands/agents.js +1 -1
  296. package/dist/src/cli/commands/channels.js +1 -1
  297. package/dist/src/cli/commands/config.js +1 -1
  298. package/dist/src/cli/commands/connectors.js +1 -1
  299. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  300. package/dist/src/cli/commands/doctor/checks/provider-auth.js +3 -3
  301. package/dist/src/cli/commands/extension-dev.js +1 -1
  302. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  303. package/dist/src/cli/commands/extension.js +1 -1
  304. package/dist/src/cli/commands/gateway/shared.js +1 -1
  305. package/dist/src/cli/commands/gateway/token.js +1 -1
  306. package/dist/src/cli/commands/image.js +1 -1
  307. package/dist/src/cli/commands/init.js +1 -1
  308. package/dist/src/cli/commands/mcp.d.ts +1 -0
  309. package/dist/src/cli/commands/mcp.js +51 -0
  310. package/dist/src/cli/commands/models.js +2 -2
  311. package/dist/src/cli/commands/onboard.js +2 -2
  312. package/dist/src/cli/commands/project.js +2 -2
  313. package/dist/src/cli/commands/runtime.js +1 -1
  314. package/dist/src/cli/commands/skills.js +2 -2
  315. package/dist/src/cli/commands/tunnel.js +3 -3
  316. package/dist/src/cli/extension-cli-register.js +4 -4
  317. package/dist/src/cli/utils/gateway-client.js +1 -1
  318. package/dist/src/computer/broker.d.ts +0 -1
  319. package/dist/src/computer/broker.js +4 -6
  320. package/dist/src/computer/evaluation-harness.d.ts +45 -0
  321. package/dist/src/computer/evaluation-harness.js +108 -0
  322. package/dist/src/computer/model-adapter.d.ts +37 -2
  323. package/dist/src/computer/model-adapter.js +333 -42
  324. package/dist/src/computer/model-policy.d.ts +4 -1
  325. package/dist/src/computer/model-policy.js +11 -3
  326. package/dist/src/computer/release-gate.d.ts +22 -0
  327. package/dist/src/computer/release-gate.js +19 -0
  328. package/dist/src/computer/runtime.js +16 -12
  329. package/dist/src/computer/task-state.d.ts +1 -0
  330. package/dist/src/computer/task-state.js +1 -0
  331. package/dist/src/config/index.js +5 -5
  332. package/dist/src/config/loader.js +2 -2
  333. package/dist/src/config/models-json.d.ts +14 -8
  334. package/dist/src/config/models-json.js +3 -3
  335. package/dist/src/config/schema.d.ts +4 -0
  336. package/dist/src/config/schema.js +4 -10
  337. package/dist/src/connectors/cli/authorization.js +1 -1
  338. package/dist/src/connectors/cli/runtime.js +1 -1
  339. package/dist/src/connectors/composio-sessions.d.ts +4 -2
  340. package/dist/src/connectors/composio-sessions.js +11 -10
  341. package/dist/src/connectors/composio.js +11 -9
  342. package/dist/src/connectors/connected-source-understanding.js +2 -2
  343. package/dist/src/connectors/connection-recovery-service.js +5 -5
  344. package/dist/src/connectors/health.js +1 -1
  345. package/dist/src/discussions/action-tasks.js +2 -1
  346. package/dist/src/discussions/live-worker.js +1 -1
  347. package/dist/src/discussions/recording.js +1 -1
  348. package/dist/src/discussions/sealer.js +1 -1
  349. package/dist/src/execution-environments/local-worktree-manager.d.ts +1 -0
  350. package/dist/src/execution-environments/local-worktree-manager.js +13 -2
  351. package/dist/src/extensions/activation-context.js +3 -3
  352. package/dist/src/extensions/api.js +3 -3
  353. package/dist/src/extensions/bundled-extension-activation.js +1 -1
  354. package/dist/src/extensions/index.js +1 -1
  355. package/dist/src/extensions/loader.js +1 -1
  356. package/dist/src/extensions/lockfile.js +1 -1
  357. package/dist/src/extensions/normalize-manifest.js +6 -1
  358. package/dist/src/extensions/sdk/index.js +1 -1
  359. package/dist/src/extensions/sdk/media.js +1 -1
  360. package/dist/src/extensions/types/manifest.d.ts +3 -0
  361. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  362. package/dist/src/gateway/agents-admin.js +4 -4
  363. package/dist/src/gateway/device-routes.js +2 -2
  364. package/dist/src/gateway/file-path-classifier.js +2 -2
  365. package/dist/src/gateway/global-defaults-admin.js +1 -1
  366. package/dist/src/gateway/hono/app.js +3 -3
  367. package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -0
  368. package/dist/src/gateway/hono/lib/config-payload.js +3 -3
  369. package/dist/src/gateway/hono/middleware/scopes.js +1 -1
  370. package/dist/src/gateway/hono/routes/agents.js +1 -1
  371. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +6 -3
  372. package/dist/src/gateway/hono/routes/browser.js +1 -1
  373. package/dist/src/gateway/hono/routes/capability-operations.d.ts +3 -0
  374. package/dist/src/gateway/hono/routes/capability-operations.js +52 -0
  375. package/dist/src/gateway/hono/routes/commands-skills.js +3 -3
  376. package/dist/src/gateway/hono/routes/config-patch/gateway.js +1 -1
  377. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  378. package/dist/src/gateway/hono/routes/home.js +1 -1
  379. package/dist/src/gateway/hono/routes/imports.js +1 -1
  380. package/dist/src/gateway/hono/routes/lazy-bundles.js +16 -0
  381. package/dist/src/gateway/hono/routes/local-app-capabilities.d.ts +4 -0
  382. package/dist/src/gateway/hono/routes/local-app-capabilities.js +41 -0
  383. package/dist/src/gateway/hono/routes/local-apps.js +41 -9
  384. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  385. package/dist/src/gateway/hono/routes/media.js +1 -1
  386. package/dist/src/gateway/hono/routes/models.js +7 -7
  387. package/dist/src/gateway/hono/routes/notes.js +216 -147
  388. package/dist/src/gateway/hono/routes/projects.js +219 -376
  389. package/dist/src/gateway/hono/routes/scenes.js +188 -75
  390. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +60 -16
  391. package/dist/src/gateway/hono/routes/session-input-handler.js +45 -3
  392. package/dist/src/gateway/hono/routes/sessions.js +18 -1
  393. package/dist/src/gateway/hono/routes/shares.js +3 -3
  394. package/dist/src/gateway/hono/routes/site-shares.js +1 -1
  395. package/dist/src/gateway/hono/routes/tasks.js +182 -326
  396. package/dist/src/gateway/hono/routes/user-model-refresh.js +1 -1
  397. package/dist/src/gateway/hono/routes/user-model.js +4 -4
  398. package/dist/src/gateway/hono/routes/voice.js +6 -6
  399. package/dist/src/gateway/hono/routes/workflows.js +3 -3
  400. package/dist/src/gateway/lock.js +11 -11
  401. package/dist/src/gateway/media-access.js +3 -2
  402. package/dist/src/gateway/mobile-privacy.js +2 -2
  403. package/dist/src/gateway/ports.js +6 -6
  404. package/dist/src/gateway/scenes/host.js +14 -3
  405. package/dist/src/gateway/scenes/mailContext.js +1 -1
  406. package/dist/src/gateway/scenes/slackThreadSource.d.ts +41 -0
  407. package/dist/src/gateway/scenes/slackThreadSource.js +168 -0
  408. package/dist/src/gateway/security/gateway-scopes.d.ts +1 -1
  409. package/dist/src/gateway/security/gateway-scopes.js +5 -0
  410. package/dist/src/gateway/server.js +1 -1
  411. package/dist/src/gateway/service/app-context-access.d.ts +11 -0
  412. package/dist/src/gateway/service/app-context-access.js +70 -0
  413. package/dist/src/gateway/service/config-coordinator.js +4 -4
  414. package/dist/src/gateway/service/marketplace-service.js +3 -3
  415. package/dist/src/gateway/service/run-gateway-agent.js +13 -4
  416. package/dist/src/gateway/service/session-input-coordinator.js +54 -15
  417. package/dist/src/gateway/service/sessions-api.d.ts +1 -0
  418. package/dist/src/gateway/service/sessions-api.js +4 -1
  419. package/dist/src/gateway/service/task-conversation-query-service.d.ts +3 -1
  420. package/dist/src/gateway/service/task-conversation-query-service.js +32 -3
  421. package/dist/src/gateway/service.d.ts +3 -0
  422. package/dist/src/gateway/service.js +92 -38
  423. package/dist/src/gateway/session-context-summary.js +3 -2
  424. package/dist/src/gateway/workspace-editor-path.js +2 -2
  425. package/dist/src/heartbeat/index.js +1 -1
  426. package/dist/src/i18n/share-tool-bundle.js +2 -2
  427. package/dist/src/imports/runtime.js +1 -1
  428. package/dist/src/{tasks/task-outbox-dispatcher.d.ts → infra/domain-outbox-dispatcher.d.ts} +2 -2
  429. package/dist/src/{tasks/task-outbox-dispatcher.js → infra/domain-outbox-dispatcher.js} +10 -9
  430. package/dist/src/infra/gateway-processes.js +2 -2
  431. package/dist/src/infra/operation-context.d.ts +2 -0
  432. package/dist/src/infra/operation-context.js +16 -0
  433. package/dist/src/infra/path-env.js +3 -3
  434. package/dist/src/infra/update-global.js +10 -10
  435. package/dist/src/local-apps/capabilities/contracts.d.ts +2 -0
  436. package/dist/src/local-apps/capabilities/contracts.js +32 -0
  437. package/dist/src/local-apps/capabilities/read.d.ts +3 -0
  438. package/dist/src/local-apps/capabilities/read.js +48 -0
  439. package/dist/src/local-apps/capabilities/runtime.d.ts +16 -0
  440. package/dist/src/local-apps/capabilities/runtime.js +66 -0
  441. package/dist/src/local-apps/capabilities/write.d.ts +3 -0
  442. package/dist/src/local-apps/capabilities/write.js +35 -0
  443. package/dist/src/local-apps/release-lock.d.ts +2 -0
  444. package/dist/src/local-apps/release-lock.js +20 -0
  445. package/dist/src/local-apps/runtime-entry.d.ts +0 -2
  446. package/dist/src/local-apps/runtime-entry.js +1 -14
  447. package/dist/src/local-apps/scaffold.js +4 -1
  448. package/dist/src/local-apps/service.d.ts +24 -1
  449. package/dist/src/local-apps/service.js +187 -44
  450. package/dist/src/local-apps/store.js +0 -2
  451. package/dist/src/mcp/capability-server.d.ts +4 -0
  452. package/dist/src/mcp/capability-server.js +96 -0
  453. package/dist/src/mcp/channel-bridge.js +1 -1
  454. package/dist/src/mcp/gateway-http-client.d.ts +7 -0
  455. package/dist/src/mcp/gateway-http-client.js +27 -5
  456. package/dist/src/media-understanding/openai-compatible-audio.js +1 -1
  457. package/dist/src/notes/agent-context.js +4 -4
  458. package/dist/src/notes/capabilities/read.d.ts +3 -0
  459. package/dist/src/notes/capabilities/read.js +96 -0
  460. package/dist/src/notes/capabilities/write.d.ts +7 -0
  461. package/dist/src/notes/capabilities/write.js +152 -0
  462. package/dist/src/notes/index.js +1 -1
  463. package/dist/src/notes/service.d.ts +12 -4
  464. package/dist/src/notes/service.js +188 -175
  465. package/dist/src/notes/store.d.ts +14 -9
  466. package/dist/src/notes/store.js +81 -21
  467. package/dist/src/notifications/service.d.ts +1 -0
  468. package/dist/src/notifications/service.js +5 -0
  469. package/dist/src/platform/client.d.ts +1 -1
  470. package/dist/src/platform/contracts.d.ts +1 -1
  471. package/dist/src/projects/capabilities/read.d.ts +3 -0
  472. package/dist/src/projects/capabilities/read.js +81 -0
  473. package/dist/src/projects/capabilities/write.d.ts +9 -0
  474. package/dist/src/projects/capabilities/write.js +260 -0
  475. package/dist/src/projects/index.js +2 -2
  476. package/dist/src/projects/project-change-events.d.ts +2 -0
  477. package/dist/src/projects/project-change-events.js +18 -0
  478. package/dist/src/projects/project-service.d.ts +11 -0
  479. package/dist/src/projects/project-service.js +121 -42
  480. package/dist/src/projects/project-skill-service.js +2 -2
  481. package/dist/src/projects/project-store.js +12 -2
  482. package/dist/src/projects/project-workspace-creation.d.ts +3 -0
  483. package/dist/src/projects/project-workspace-creation.js +45 -0
  484. package/dist/src/projects/workspace-project.js +6 -0
  485. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  486. package/dist/src/providers/index.js +2 -2
  487. package/dist/src/providers/model-catalog-persistence.js +1 -1
  488. package/dist/src/providers/model-catalog-types.d.ts +2 -1
  489. package/dist/src/providers/model-reference-auditor.js +5 -5
  490. package/dist/src/providers/model-registry.js +1 -1
  491. package/dist/src/providers/model-supplements.js +13 -3
  492. package/dist/src/providers/presentation.js +3 -3
  493. package/dist/src/providers/register-runtime-providers.js +1 -1
  494. package/dist/src/providers/xopc-cloud-model-source.js +4 -2
  495. package/dist/src/realtime/runtime.js +4 -0
  496. package/dist/src/remote-access/exposure-manager.js +1 -1
  497. package/dist/src/scenes/capabilities/read.d.ts +3 -0
  498. package/dist/src/scenes/capabilities/read.js +187 -0
  499. package/dist/src/scenes/capabilities/write.d.ts +3 -0
  500. package/dist/src/scenes/capabilities/write.js +151 -0
  501. package/dist/src/scenes/contracts.d.ts +2 -105
  502. package/dist/src/scenes/contracts.js +3 -88
  503. package/dist/src/scenes/execution.d.ts +1 -1
  504. package/dist/src/scenes/httpServices.d.ts +2 -0
  505. package/dist/src/scenes/inbox.d.ts +1 -0
  506. package/dist/src/scenes/inbox.js +7 -7
  507. package/dist/src/scenes/preferences.d.ts +3 -24
  508. package/dist/src/scenes/preferences.js +8 -30
  509. package/dist/src/scenes/repository.d.ts +1 -0
  510. package/dist/src/scenes/repository.js +7 -3
  511. package/dist/src/scenes/resultNotifications.js +2 -2
  512. package/dist/src/scenes/schedule.d.ts +1 -8
  513. package/dist/src/scenes/schedule.js +3 -15
  514. package/dist/src/scenes/service.d.ts +6 -0
  515. package/dist/src/scenes/service.js +29 -25
  516. package/dist/src/scenes/taskFollowUp/agentExecutor.d.ts +36 -0
  517. package/dist/src/scenes/taskFollowUp/agentExecutor.js +149 -0
  518. package/dist/src/scenes/taskFollowUp/branchInventory.d.ts +38 -0
  519. package/dist/src/scenes/taskFollowUp/branchInventory.js +70 -0
  520. package/dist/src/scenes/taskFollowUp/contracts.d.ts +91 -0
  521. package/dist/src/scenes/taskFollowUp/contracts.js +100 -0
  522. package/dist/src/scenes/taskFollowUp/resources.d.ts +19 -0
  523. package/dist/src/scenes/taskFollowUp/resources.js +97 -0
  524. package/dist/src/scenes/taskFollowUp/service.d.ts +810 -0
  525. package/dist/src/scenes/taskFollowUp/service.js +710 -0
  526. package/dist/src/scenes/taskFollowUp/workspaceFingerprint.d.ts +2 -0
  527. package/dist/src/scenes/taskFollowUp/workspaceFingerprint.js +46 -0
  528. package/dist/src/scenes/templates.d.ts +2 -2
  529. package/dist/src/scenes/templates.js +1 -1
  530. package/dist/src/session/index.js +2 -2
  531. package/dist/src/session/session-find.d.ts +17 -0
  532. package/dist/src/session/session-find.js +56 -0
  533. package/dist/src/session/session-title.js +1 -1
  534. package/dist/src/session/store.d.ts +4 -0
  535. package/dist/src/session/store.js +46 -10
  536. package/dist/src/session/thinking-resolve.js +1 -1
  537. package/dist/src/share/note-share-revocation.d.ts +3 -0
  538. package/dist/src/share/note-share-revocation.js +26 -0
  539. package/dist/src/share/share-store.js +1 -1
  540. package/dist/src/share/share-thumbnail.js +1 -1
  541. package/dist/src/share/site-proxy.js +1 -1
  542. package/dist/src/share/site-share-store.js +1 -1
  543. package/dist/src/storage/sqlite/connection.js +9 -9
  544. package/dist/src/storage/sqlite/migrations/190_scene_development.sql +37 -0
  545. package/dist/src/storage/sqlite/migrations/191_scene_task_follow_up.sql +27 -0
  546. package/dist/src/storage/sqlite/migrations/192_capability_operations.sql +20 -0
  547. package/dist/src/storage/sqlite/migrations/193_note_file_cleanup.sql +8 -0
  548. package/dist/src/storage/sqlite/migrations/194_capability_external_outcomes.sql +11 -0
  549. package/dist/src/storage/sqlite/migrations/195_automation_deleted_revisions.sql +4 -0
  550. package/dist/src/storage/sqlite/migrations/196_automation_run_requests.sql +23 -0
  551. package/dist/src/storage/sqlite/migrations/197_note_deletion_cleanup.sql +8 -0
  552. package/dist/src/storage/sqlite/migrations/198_project_workspace_creation.sql +7 -0
  553. package/dist/src/storage/sqlite/migrations/199_scene_resource_events.sql +488 -0
  554. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  555. package/dist/src/storage/sqlite/migrations/runner.js +6 -3
  556. package/dist/src/storage/sqlite/schema.js +1 -1
  557. package/dist/src/storage/sqlite/transaction.d.ts +5 -0
  558. package/dist/src/storage/sqlite/transaction.js +34 -3
  559. package/dist/src/tasks/capabilities/management.d.ts +195 -0
  560. package/dist/src/tasks/capabilities/management.js +111 -0
  561. package/dist/src/tasks/capabilities/read.d.ts +2 -0
  562. package/dist/src/tasks/capabilities/read.js +141 -0
  563. package/dist/src/tasks/capabilities/relations.d.ts +204 -0
  564. package/dist/src/tasks/capabilities/relations.js +140 -0
  565. package/dist/src/tasks/capabilities/runs.d.ts +2 -0
  566. package/dist/src/tasks/capabilities/runs.js +89 -0
  567. package/dist/src/tasks/capabilities/write.d.ts +207 -0
  568. package/dist/src/tasks/capabilities/write.js +107 -0
  569. package/dist/src/tasks/execution-context.js +1 -1
  570. package/dist/src/tasks/home-query-service.js +5 -4
  571. package/dist/src/tasks/index.d.ts +0 -1
  572. package/dist/src/tasks/index.js +9 -9
  573. package/dist/src/tasks/project-operating-view-service.js +2 -1
  574. package/dist/src/tasks/task-application-service.d.ts +1 -0
  575. package/dist/src/tasks/task-application-service.js +4 -3
  576. package/dist/src/tasks/task-change-events.js +5 -3
  577. package/dist/src/tasks/task-context-assembler.js +3 -2
  578. package/dist/src/tasks/task-deletion-service.js +2 -1
  579. package/dist/src/tasks/task-dependency-service.js +2 -1
  580. package/dist/src/tasks/task-handoff-service.js +3 -2
  581. package/dist/src/tasks/task-read-model-projector.js +2 -1
  582. package/dist/src/tasks/task-repository.d.ts +12 -7
  583. package/dist/src/tasks/task-repository.js +175 -154
  584. package/dist/src/tasks/task-run-coordinator.js +2 -1
  585. package/dist/src/tasks/task-run-dispatcher.js +2 -1
  586. package/dist/src/tasks/task-run-repository.d.ts +1 -0
  587. package/dist/src/tasks/task-run-repository.js +29 -14
  588. package/dist/src/tasks/task-signal-service.js +2 -1
  589. package/dist/src/tui/backends/embedded-backend.js +10 -10
  590. package/dist/src/tui/backends/gateway-realtime-backend.js +2 -2
  591. package/dist/src/tui/extension-host/load-extensions.js +1 -1
  592. package/dist/src/tui/tui-command-formatters.js +1 -1
  593. package/dist/src/tui/tui-commands.js +6 -6
  594. package/dist/src/tui/tui-picker-overlay.js +1 -1
  595. package/dist/src/tui/tui-skills-autocomplete.js +1 -1
  596. package/dist/src/tui/tui-startup-resources.js +4 -4
  597. package/dist/src/tui/tui.js +3 -3
  598. package/dist/src/tunnel/gateway-lifecycle.js +1 -1
  599. package/dist/src/user-context/config.d.ts +13 -0
  600. package/dist/src/user-context/config.js +2 -0
  601. package/dist/src/voice/local/runtime-worker.js +1 -1
  602. package/dist/src/voice/platform-catalog.d.ts +1 -1
  603. package/dist/src/voice/realtime/memory-context.js +3 -3
  604. package/dist/src/voice/realtime/runtime.js +3 -3
  605. package/dist/src/voice/stt/index.js +2 -2
  606. package/dist/src/voice/stt/preflight.js +1 -1
  607. package/dist/src/voice/stt/providers/alibaba-transcription.js +1 -1
  608. package/dist/src/voice/stt/providers/local-transcription.js +1 -1
  609. package/dist/src/voice/stt/providers/xopc-cloud-transcription.js +1 -1
  610. package/dist/src/voice/stt/transcribe-core.js +1 -1
  611. package/dist/src/voice/tts/audio.js +1 -1
  612. package/dist/src/voice/tts/factory.js +1 -1
  613. package/dist/src/voice/tts/index.js +1 -1
  614. package/dist/src/voice/tts/payload.js +1 -1
  615. package/dist/src/voice/tts/providers/xopc-cloud-speech.js +1 -1
  616. package/dist/src/work-discovery/incremental-repository.js +1 -1
  617. package/dist/src/work-discovery/index.js +1 -1
  618. package/dist/src/work-discovery/repository.d.ts +1 -1
  619. package/dist/src/work-discovery/repository.js +3 -2
  620. package/dist/src/work-discovery/service.d.ts +4 -0
  621. package/dist/src/work-discovery/service.js +40 -15
  622. package/dist/src/workflows/context/workflow-context.js +3 -2
  623. package/dist/src/workflows/service/workflow-run-service.js +7 -6
  624. package/dist/src/workflows/service/workflow-session-bridge.js +1 -1
  625. package/package.json +7 -3
  626. package/skills/THIRD_PARTY_NOTICES.md +2 -2
  627. package/skills/documents/xlsx/SKILL.md +5 -0
  628. package/skills/engineering/build-xopc-local-app/SKILL.md +2 -0
  629. package/skills/tools/find-skills/SKILL.md +3 -0
  630. package/dist/gateway/static/root/assets/activity-store-CS_SAPwP.js +0 -1
  631. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-9w_YVThL.js +0 -1
  632. package/dist/gateway/static/root/assets/appearance-settings-Jgvx-RKL.js +0 -1
  633. package/dist/gateway/static/root/assets/apps-page-403o57-3.js +0 -1
  634. package/dist/gateway/static/root/assets/automations-workspace-Dpju5KT_.js +0 -7
  635. package/dist/gateway/static/root/assets/browser-settings-page-C0HJrpr1.js +0 -3
  636. package/dist/gateway/static/root/assets/capabilities-settings-panel-BanM86OX.js +0 -8
  637. package/dist/gateway/static/root/assets/channels-settings-Bhh0F9pO.js +0 -1
  638. package/dist/gateway/static/root/assets/connectors-page-BTqjm6eD.js +0 -2
  639. package/dist/gateway/static/root/assets/desktop-pet-settings-BI_sQTR_.js +0 -1
  640. package/dist/gateway/static/root/assets/device-pairing-wizard-BoPCEIm5.js +0 -1
  641. package/dist/gateway/static/root/assets/files-Be5viEFY.js +0 -1
  642. package/dist/gateway/static/root/assets/gateway-realtime-mpOw3R4d.js +0 -1
  643. package/dist/gateway/static/root/assets/gateway-realtime-store-Z-ErSgkD.js +0 -1
  644. package/dist/gateway/static/root/assets/gateway-settings-Bq82yXVh.js +0 -1
  645. package/dist/gateway/static/root/assets/home-page-BD1v6Uee.js +0 -1
  646. package/dist/gateway/static/root/assets/index-Ah5XDhOL.js +0 -79
  647. package/dist/gateway/static/root/assets/index-CV5b1pD1.css +0 -1
  648. package/dist/gateway/static/root/assets/local-app-workbench-page-BF8x3bgh.js +0 -2
  649. package/dist/gateway/static/root/assets/logs-page-B4vMUM7D.js +0 -2
  650. package/dist/gateway/static/root/assets/management-settings-Cg0UjJpy.js +0 -1
  651. package/dist/gateway/static/root/assets/messages-CRH2my19.js +0 -3
  652. package/dist/gateway/static/root/assets/note-detail-panel-CWVIGctd.js +0 -5
  653. package/dist/gateway/static/root/assets/notes-page-CcTzMI1K.js +0 -8
  654. package/dist/gateway/static/root/assets/product-delivery-CrAI8ZEa.js +0 -1
  655. package/dist/gateway/static/root/assets/project-detail-page-BNYoV9Ac.js +0 -1
  656. package/dist/gateway/static/root/assets/projects-page-CcKnYQqm.js +0 -1
  657. package/dist/gateway/static/root/assets/remote-access-hub-HIvwD5Xn.js +0 -1
  658. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-CFE2oX_l.js +0 -5
  659. package/dist/gateway/static/root/assets/scenes-page-BGKdg4uS.js +0 -1
  660. package/dist/gateway/static/root/assets/schemas-BaskVM5g.js +0 -64
  661. package/dist/gateway/static/root/assets/sessions-page-tn99saMj.js +0 -1
  662. package/dist/gateway/static/root/assets/settings-advanced-gate-Cx_uvwqz.js +0 -1
  663. package/dist/gateway/static/root/assets/setup-status-panel-1kYYg3BH.js +0 -1
  664. package/dist/gateway/static/root/assets/shares-settings-Du7BfwId.js +0 -1
  665. package/dist/gateway/static/root/assets/skill-reload-api-BMhhXxRZ.js +0 -1
  666. package/dist/gateway/static/root/assets/task-detail-page-vFn3xdlZ.js +0 -1
  667. package/dist/gateway/static/root/assets/theme-store-DdURyZ1M.js +0 -1
  668. package/dist/gateway/static/root/assets/user-model-page-uK9sxPUH.js +0 -2
  669. package/dist/gateway/static/root/assets/workflows-page-DIyd5AC9.js +0 -6
  670. package/skills/creative/algorithmic-art/SKILL.md +0 -44
  671. package/skills/creative/algorithmic-art/templates/generator-template.js +0 -27
  672. package/skills/creative/algorithmic-art/templates/viewer.html +0 -27
@@ -5,6 +5,10 @@ export declare class AutomationAlreadyRunningError extends Error {
5
5
  readonly runningRunId?: string;
6
6
  constructor(automationId: string, runningRunId?: string);
7
7
  }
8
+ export declare class AutomationAlreadyExistsError extends Error {
9
+ readonly automationId: string;
10
+ constructor(automationId: string);
11
+ }
8
12
  export declare class AutomationService {
9
13
  private readonly executor;
10
14
  private timer;
@@ -21,16 +25,37 @@ export declare class AutomationService {
21
25
  }): Promise<void>;
22
26
  stop(): Promise<void>;
23
27
  create(input: CreateAutomationInput): Promise<Automation>;
28
+ /** SQLite-only creation; scheduling starts after the caller commits. */
29
+ createAtomically(input: CreateAutomationInput): Automation;
30
+ private applyCreate;
24
31
  list(options?: {
25
32
  projectId?: string;
26
33
  }): Promise<Automation[]>;
27
34
  get(id: string): Promise<Automation | null>;
28
35
  update(id: string, patch: UpdateAutomationInput): Promise<Automation | null>;
36
+ /** SQLite-only mutation; callers must refresh scheduling after their outer transaction commits. */
37
+ updateAtomically(id: string, patch: UpdateAutomationInput): Automation | null;
38
+ refreshSchedule(): void;
39
+ private applyUpdate;
29
40
  remove(id: string): Promise<boolean>;
41
+ /** Persist deletion and cancellation intent together; never abort within a transaction. */
42
+ removeAtomically(id: string): {
43
+ removed: boolean;
44
+ automation?: Automation;
45
+ cancelRunId?: string;
46
+ };
47
+ finishRemoval(cancelRunId?: string): void;
30
48
  pause(id: string): Promise<Automation | null>;
31
49
  resume(id: string): Promise<Automation | null>;
32
50
  runNow(id: string): Promise<AutomationRun>;
33
51
  rerunFromRun(runId: string): Promise<AutomationRun>;
52
+ queueRerunAtomically(runId: string): AutomationRun;
53
+ queueRunAtomically(id: string, opts?: {
54
+ manual: boolean;
55
+ event?: AutomationEvent;
56
+ }): AutomationRun;
57
+ /** Claim before invoking external work; replays never restart running or completed runs. */
58
+ dispatchQueuedRun(runId: string): void;
34
59
  triggerEvent(event: AutomationEvent): Promise<AutomationRun[]>;
35
60
  listRuns(options?: {
36
61
  automationId?: string;
@@ -51,11 +76,17 @@ export declare class AutomationService {
51
76
  projectId?: string;
52
77
  }): Promise<number>;
53
78
  cancelRun(runId: string): Promise<boolean>;
79
+ dispatchCancellation(runId: string): void;
80
+ cancelRunAtomically(runId: string): {
81
+ cancelled: boolean;
82
+ confirmed: boolean;
83
+ };
54
84
  getMetrics(): Promise<AutomationMetrics>;
55
85
  private recomputeNextRuns;
56
86
  private armTimer;
57
87
  private onTimer;
58
88
  private startRun;
89
+ private persistQueuedRun;
59
90
  private executeRun;
60
91
  private recoverInterruptedRuns;
61
92
  private waitForRetry;
@@ -1,12 +1,12 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { init_transaction, runSqliteWriteTransaction } from "../../storage/sqlite/transaction.js";
4
- import { computeNextAutomationRunAtMs, timerDelayUntil } from "../domain/schedule.js";
5
4
  import { AutomationSchema, CreateAutomationSchema, UpdateAutomationSchema } from "../domain/validation.js";
6
- import { AutomationActionExecutor } from "./action-executor.js";
7
- import { deleteAutomation, getAutomation, listAutomations, saveAutomation, saveAutomations } from "../storage/automation-repository.js";
8
- import { appendAutomationRunEvent, getAutomationRun, listAutomationRunEvents, listAutomationRuns, listAutomationRunsForProductEvent, markAllAutomationRunsRead, markAutomationRunRead, saveAutomationRun, touchAutomationRunLease } from "../storage/automation-run-repository.js";
5
+ import { deleteAutomation, getAutomation, getDeletedAutomationRevision, listAutomations, saveAutomation, saveAutomations } from "../storage/automation-repository.js";
6
+ import { appendAutomationRunEvent, getAutomationRun, getAutomationRunRequest, listAutomationRunEvents, listAutomationRuns, listAutomationRunsForProductEvent, listUnfinishedAutomationRuns, markAllAutomationRunsRead, markAutomationRunRead, saveAutomationRun, saveAutomationRunRequest, touchAutomationRunLease } from "../storage/automation-run-repository.js";
9
7
  import "../storage/index.js";
8
+ import { computeNextAutomationRunAtMs, timerDelayUntil } from "../domain/schedule.js";
9
+ import { AutomationActionExecutor } from "./action-executor.js";
10
10
  import { randomUUID } from "node:crypto";
11
11
  //#region src/automations/service/automation-service.ts
12
12
  init_logger();
@@ -31,6 +31,13 @@ var AutomationAlreadyRunningError = class extends Error {
31
31
  this.name = "AutomationAlreadyRunningError";
32
32
  }
33
33
  };
34
+ var AutomationAlreadyExistsError = class extends Error {
35
+ constructor(automationId) {
36
+ super(`Automation already exists: ${automationId}`);
37
+ this.automationId = automationId;
38
+ this.name = "AutomationAlreadyExistsError";
39
+ }
40
+ };
34
41
  var AutomationService = class {
35
42
  executor = new AutomationActionExecutor();
36
43
  timer = null;
@@ -68,6 +75,15 @@ var AutomationService = class {
68
75
  log.info("Automation service stopped");
69
76
  }
70
77
  async create(input) {
78
+ const automation = this.createAtomically(input);
79
+ this.refreshSchedule();
80
+ return automation;
81
+ }
82
+ /** SQLite-only creation; scheduling starts after the caller commits. */
83
+ createAtomically(input) {
84
+ return runSqliteWriteTransaction(() => this.applyCreate(input));
85
+ }
86
+ applyCreate(input) {
71
87
  const parsed = CreateAutomationSchema.parse(input);
72
88
  const now = Date.now();
73
89
  const automation = AutomationSchema.parse({
@@ -81,9 +97,10 @@ var AutomationService = class {
81
97
  createdAtMs: now,
82
98
  updatedAtMs: now
83
99
  });
100
+ if (getAutomation(automation.id)) throw new AutomationAlreadyExistsError(automation.id);
101
+ automation.updatedAtMs = Math.max(automation.updatedAtMs, (getDeletedAutomationRevision(automation.id) ?? -1) + 1);
84
102
  automation.state.nextRunAtMs = computeNextAutomationRunAtMs(automation, now);
85
103
  saveAutomation(automation);
86
- this.armTimer();
87
104
  return automation;
88
105
  }
89
106
  async list(options) {
@@ -93,6 +110,18 @@ var AutomationService = class {
93
110
  return getAutomation(id);
94
111
  }
95
112
  async update(id, patch) {
113
+ const automation = this.updateAtomically(id, patch);
114
+ this.refreshSchedule();
115
+ return automation;
116
+ }
117
+ /** SQLite-only mutation; callers must refresh scheduling after their outer transaction commits. */
118
+ updateAtomically(id, patch) {
119
+ return runSqliteWriteTransaction(() => this.applyUpdate(id, patch));
120
+ }
121
+ refreshSchedule() {
122
+ this.armTimer();
123
+ }
124
+ applyUpdate(id, patch) {
96
125
  const parsed = UpdateAutomationSchema.parse(patch);
97
126
  const current = getAutomation(id);
98
127
  if (!current) return null;
@@ -102,7 +131,7 @@ var AutomationService = class {
102
131
  ...parsed,
103
132
  id: current.id,
104
133
  createdAtMs: current.createdAtMs,
105
- updatedAtMs: now,
134
+ updatedAtMs: Math.max(now, current.updatedAtMs + 1),
106
135
  state: {
107
136
  ...current.state,
108
137
  ...parsed.state ?? {}
@@ -110,15 +139,47 @@ var AutomationService = class {
110
139
  });
111
140
  if ("enabled" in parsed || "trigger" in parsed) next.state.nextRunAtMs = computeNextAutomationRunAtMs(next, now);
112
141
  saveAutomation(next);
113
- this.armTimer();
114
142
  return next;
115
143
  }
116
144
  async remove(id) {
117
- const automation = getAutomation(id);
118
- if (automation?.state.runningRunId) this.activeRuns.get(automation.state.runningRunId)?.abort();
119
- const removed = deleteAutomation(id);
120
- if (removed) this.armTimer();
121
- return removed;
145
+ const result = this.removeAtomically(id);
146
+ this.finishRemoval(result.cancelRunId);
147
+ return result.removed;
148
+ }
149
+ /** Persist deletion and cancellation intent together; never abort within a transaction. */
150
+ removeAtomically(id) {
151
+ return runSqliteWriteTransaction(() => {
152
+ const automation = getAutomation(id);
153
+ if (!automation) return { removed: false };
154
+ const run = automation.state.runningRunId ? getAutomationRun(automation.state.runningRunId) : null;
155
+ let cancelRunId;
156
+ if (run?.automationId === id && [
157
+ "queued",
158
+ "running",
159
+ "cancelling"
160
+ ].includes(run.status)) {
161
+ cancelRunId = run.id;
162
+ if (run.status !== "cancelling") {
163
+ const cancelling = {
164
+ ...run,
165
+ status: "cancelling",
166
+ currentPhase: "cancelling",
167
+ cancelRequestedAtMs: Date.now()
168
+ };
169
+ saveAutomationRun(cancelling);
170
+ this.appendRunEvent(cancelling, "run.cancel_requested", "Automation deletion requested cancellation", { reason: "automation_deleted" });
171
+ }
172
+ }
173
+ return {
174
+ removed: deleteAutomation(id),
175
+ automation,
176
+ cancelRunId
177
+ };
178
+ });
179
+ }
180
+ finishRemoval(cancelRunId) {
181
+ if (cancelRunId) this.activeRuns.get(cancelRunId)?.abort(/* @__PURE__ */ new Error("Automation was deleted by the user"));
182
+ this.refreshSchedule();
122
183
  }
123
184
  async pause(id) {
124
185
  return this.update(id, { enabled: false });
@@ -127,22 +188,66 @@ var AutomationService = class {
127
188
  return this.update(id, { enabled: true });
128
189
  }
129
190
  async runNow(id) {
130
- const automation = getAutomation(id);
131
- if (!automation) throw new Error(`Automation not found: ${id}`);
132
- if (automation.state.runningRunId) throw new AutomationAlreadyRunningError(id, automation.state.runningRunId);
133
- return this.startRun(automation, { manual: true });
191
+ const run = this.queueRunAtomically(id);
192
+ this.dispatchQueuedRun(run.id);
193
+ return run;
134
194
  }
135
195
  async rerunFromRun(runId) {
136
- const previous = getAutomationRun(runId);
137
- if (!previous) throw new Error(`Automation run not found: ${runId}`);
138
- const automation = getAutomation(previous.automationId);
139
- if (!automation) throw new Error(`Automation not found: ${previous.automationId}`);
140
- if (automation.state.runningRunId) throw new AutomationAlreadyRunningError(automation.id, automation.state.runningRunId);
141
- const triggerEvent = listAutomationRunEvents(runId).map((event) => readAutomationEventFromRunEvent(event)).find((event) => event !== null);
142
- return this.startRun(automation, triggerEvent ? {
143
- manual: false,
144
- event: triggerEvent
145
- } : { manual: true });
196
+ const run = this.queueRerunAtomically(runId);
197
+ this.dispatchQueuedRun(run.id);
198
+ return run;
199
+ }
200
+ queueRerunAtomically(runId) {
201
+ return runSqliteWriteTransaction(() => {
202
+ const previous = getAutomationRun(runId);
203
+ if (!previous) throw new Error(`Automation run not found: ${runId}`);
204
+ const event = listAutomationRunEvents(runId).map(readAutomationEventFromRunEvent).find((item) => item !== null);
205
+ return this.queueRunAtomically(previous.automationId, event ? {
206
+ manual: false,
207
+ event
208
+ } : { manual: true });
209
+ });
210
+ }
211
+ queueRunAtomically(id, opts = { manual: true }) {
212
+ return runSqliteWriteTransaction(() => {
213
+ const automation = getAutomation(id);
214
+ if (!automation) throw new Error(`Automation not found: ${id}`);
215
+ if (automation.state.runningRunId) throw new AutomationAlreadyRunningError(id, automation.state.runningRunId);
216
+ return this.persistQueuedRun(automation, opts);
217
+ });
218
+ }
219
+ /** Claim before invoking external work; replays never restart running or completed runs. */
220
+ dispatchQueuedRun(runId) {
221
+ const claimed = runSqliteWriteTransaction(() => {
222
+ const run = getAutomationRun(runId);
223
+ if (!run || run.status !== "queued") return null;
224
+ const current = getAutomation(run.automationId);
225
+ if (!current || current.state.runningRunId !== run.id) return null;
226
+ const automation = getAutomationRunRequest(run.id);
227
+ if (!automation) throw new Error(`Execution configuration is missing for run: ${run.id}`);
228
+ const now = Date.now();
229
+ const next = {
230
+ ...run,
231
+ status: "running",
232
+ startedAtMs: now,
233
+ currentPhase: "action",
234
+ heartbeatAtMs: now,
235
+ leaseOwner: this.leaseOwner,
236
+ leaseExpiresAtMs: now + RUN_LEASE_DURATION_MS
237
+ };
238
+ saveAutomationRun(next);
239
+ return {
240
+ automation,
241
+ run: next
242
+ };
243
+ });
244
+ if (!claimed) return;
245
+ this.executeRun(claimed.automation, claimed.run).catch((err) => {
246
+ log.error({
247
+ err,
248
+ runId
249
+ }, "Queued automation run failed");
250
+ });
146
251
  }
147
252
  async triggerEvent(event) {
148
253
  const normalized = {
@@ -177,22 +282,65 @@ var AutomationService = class {
177
282
  return markAllAutomationRunsRead(options);
178
283
  }
179
284
  async cancelRun(runId) {
180
- const controller = this.activeRuns.get(runId);
181
- if (!controller) return false;
182
- const now = Date.now();
183
- const current = getAutomationRun(runId);
184
- if (current && current.status === "running") {
185
- const cancelling = {
285
+ const result = this.cancelRunAtomically(runId);
286
+ if (result.cancelled) this.dispatchCancellation(runId);
287
+ return result.cancelled;
288
+ }
289
+ dispatchCancellation(runId) {
290
+ this.activeRuns.get(runId)?.abort(/* @__PURE__ */ new Error("Automation run was cancelled by the user"));
291
+ this.refreshSchedule();
292
+ }
293
+ cancelRunAtomically(runId) {
294
+ return runSqliteWriteTransaction(() => {
295
+ const current = getAutomationRun(runId);
296
+ if (!current || ![
297
+ "queued",
298
+ "running",
299
+ "cancelling"
300
+ ].includes(current.status)) return {
301
+ cancelled: false,
302
+ confirmed: false
303
+ };
304
+ const now = Date.now();
305
+ if (current.status !== "queued") {
306
+ if (current.status === "running") {
307
+ const cancelling = {
308
+ ...current,
309
+ status: "cancelling",
310
+ currentPhase: "cancelling",
311
+ cancelRequestedAtMs: now
312
+ };
313
+ saveAutomationRun(cancelling);
314
+ this.appendRunEvent(cancelling, "run.cancel_requested", "Automation cancellation requested", { reason: "user_cancelled" });
315
+ }
316
+ return {
317
+ cancelled: true,
318
+ confirmed: false
319
+ };
320
+ }
321
+ const cancelled = {
186
322
  ...current,
187
- status: "cancelling",
188
- currentPhase: "cancelling",
189
- cancelRequestedAtMs: now
323
+ status: "cancelled",
324
+ currentPhase: "completed",
325
+ endedAtMs: now,
326
+ cancelRequestedAtMs: now,
327
+ cancelConfirmedAtMs: now,
328
+ termination: {
329
+ reason: "user_cancelled",
330
+ component: "automation",
331
+ cancellationConfirmed: true
332
+ }
190
333
  };
191
- saveAutomationRun(cancelling);
192
- this.appendRunEvent(cancelling, "run.cancel_requested", "Automation cancellation requested", { reason: "user_cancelled" });
193
- }
194
- controller.abort(/* @__PURE__ */ new Error("Automation run was cancelled by the user"));
195
- return true;
334
+ saveAutomationRun(cancelled);
335
+ this.appendRunEvent(cancelled, "run.cancel_requested", "Queued automation cancellation requested");
336
+ this.appendRunEvent(cancelled, "run.cancel_confirmed", "Queued automation cancelled before execution");
337
+ this.appendRunEvent(cancelled, "run.completed", "Automation run cancelled", { status: "cancelled" });
338
+ this.finishAutomationRun(current.automationId, runId, "cancelled", void 0, now);
339
+ return {
340
+ cancelled: true,
341
+ confirmed: true
342
+ };
343
+ });
196
344
  }
197
345
  async getMetrics() {
198
346
  const automations = listAutomations();
@@ -235,7 +383,7 @@ var AutomationService = class {
235
383
  clearTimeout(this.timer);
236
384
  this.timer = null;
237
385
  }
238
- const next = listAutomations().filter((automation) => automation.enabled && automation.state.nextRunAtMs != null).toSorted((a, b) => (a.state.nextRunAtMs ?? 0) - (b.state.nextRunAtMs ?? 0))[0];
386
+ const next = listAutomations().filter((automation) => automation.enabled && automation.state.nextRunAtMs != null && !automation.state.runningRunId).toSorted((a, b) => (a.state.nextRunAtMs ?? 0) - (b.state.nextRunAtMs ?? 0))[0];
239
387
  if (!next?.state.nextRunAtMs) return;
240
388
  this.timer = setTimeout(() => {
241
389
  this.onTimer();
@@ -259,6 +407,11 @@ var AutomationService = class {
259
407
  }
260
408
  }
261
409
  async startRun(automation, opts) {
410
+ const run = this.queueRunAtomically(automation.id, opts);
411
+ this.dispatchQueuedRun(run.id);
412
+ return run;
413
+ }
414
+ persistQueuedRun(automation, opts) {
262
415
  const now = Date.now();
263
416
  const run = {
264
417
  id: randomUUID(),
@@ -279,27 +432,20 @@ var AutomationService = class {
279
432
  safety: automation.safety ?? { mode: "auto_apply" },
280
433
  event: opts.event
281
434
  });
282
- const nextAutomation = {
435
+ saveAutomation({
283
436
  ...automation,
284
437
  state: {
285
438
  ...automation.state,
286
439
  runningRunId: run.id
287
440
  }
288
- };
289
- saveAutomation(nextAutomation);
290
- this.executeRun(nextAutomation, run).catch((err) => {
291
- log.error({
292
- err,
293
- automationId: automation.id,
294
- runId: run.id
295
- }, `Automation run failed: ${err instanceof Error ? err.message : String(err)}`);
296
441
  });
442
+ saveAutomationRunRequest(run.id, automation);
297
443
  return run;
298
444
  }
299
445
  async executeRun(automation, initialRun) {
300
446
  const controller = new AbortController();
301
447
  this.activeRuns.set(initialRun.id, controller);
302
- const startedAtMs = Date.now();
448
+ const startedAtMs = initialRun.startedAtMs ?? Date.now();
303
449
  let run = {
304
450
  ...initialRun,
305
451
  status: "running",
@@ -400,7 +546,7 @@ var AutomationService = class {
400
546
  };
401
547
  this.appendRunEvent(run, task.termination.cancellationConfirmed ? "run.cancel_confirmed" : "run.cancellation_unconfirmed", task.termination.cancellationConfirmed ? "Automation cancellation confirmed" : "Automation cancellation was not confirmed within the cleanup grace period", { termination: task.termination });
402
548
  }
403
- if (status === "timeout" || status === "cancelled") {} else if ((automation.safety?.mode ?? "auto_apply") !== "auto_apply" && automation.completionWebhookUrl) this.appendRunEvent(run, "completion_hook.completed", "Completion webhook skipped by safety mode", { safety: automation.safety ?? { mode: "auto_apply" } });
549
+ if (controller.signal.aborted || status === "timeout" || status === "cancelled") {} else if ((automation.safety?.mode ?? "auto_apply") !== "auto_apply" && automation.completionWebhookUrl) this.appendRunEvent(run, "completion_hook.completed", "Completion webhook skipped by safety mode", { safety: automation.safety ?? { mode: "auto_apply" } });
404
550
  else if (automation.completionWebhookUrl) {
405
551
  activePhase = "completion_hook";
406
552
  run = {
@@ -413,6 +559,11 @@ var AutomationService = class {
413
559
  this.appendRunEvent(run, "completion_hook.completed", "Completion webhook completed");
414
560
  }
415
561
  } catch (err) {
562
+ const persistedRun = getAutomationRun(run.id);
563
+ if (persistedRun) run = {
564
+ ...run,
565
+ ...persistedRun
566
+ };
416
567
  error = err instanceof Error ? err.message : String(err);
417
568
  const deadlineExceeded = err instanceof AutomationDeadlineExceededError || run.deadlineAtMs !== void 0 && Date.now() >= run.deadlineAtMs;
418
569
  status = controller.signal.aborted ? "cancelled" : deadlineExceeded ? "timeout" : "failed";
@@ -453,8 +604,9 @@ var AutomationService = class {
453
604
  durationMs: run.durationMs,
454
605
  error
455
606
  });
456
- this.finishAutomationRun(automation.id, status, error, endedAtMs);
607
+ this.finishAutomationRun(automation.id, run.id, status, error, endedAtMs);
457
608
  });
609
+ this.refreshSchedule();
458
610
  try {
459
611
  this.deps.onRunCompleted?.(run);
460
612
  } catch (err) {
@@ -467,25 +619,12 @@ var AutomationService = class {
467
619
  }
468
620
  }
469
621
  async recoverInterruptedRuns() {
470
- const recoverable = listAutomationRuns({ limit: 500 }).filter((run) => run.status === "queued" || run.status === "running" || run.status === "cancelling");
622
+ const recoverable = listUnfinishedAutomationRuns();
471
623
  for (const run of recoverable) {
472
624
  const automation = getAutomation(run.automationId);
473
- if (run.status === "queued" && automation) {
474
- const claimed = {
475
- ...automation,
476
- state: {
477
- ...automation.state,
478
- runningRunId: run.id
479
- }
480
- };
481
- saveAutomation(claimed);
625
+ if (run.status === "queued" && automation?.state.runningRunId === run.id && getAutomationRunRequest(run.id)) {
482
626
  this.appendRunEvent(run, "run.recovered", "Queued automation run recovered after restart", { previousLeaseOwner: run.leaseOwner });
483
- this.executeRun(claimed, run).catch((err) => {
484
- log.error({
485
- err,
486
- runId: run.id
487
- }, "Recovered automation run failed");
488
- });
627
+ this.dispatchQueuedRun(run.id);
489
628
  continue;
490
629
  }
491
630
  const now = Date.now();
@@ -516,7 +655,7 @@ var AutomationService = class {
516
655
  status,
517
656
  error
518
657
  });
519
- if (automation) this.finishAutomationRun(automation.id, status, error, now);
658
+ if (automation) this.finishAutomationRun(automation.id, run.id, status, error, now);
520
659
  }
521
660
  }
522
661
  waitForRetry(delayMs, signal) {
@@ -544,9 +683,9 @@ var AutomationService = class {
544
683
  createdAtMs: Date.now()
545
684
  });
546
685
  }
547
- finishAutomationRun(automationId, status, error, finishedAtMs) {
686
+ finishAutomationRun(automationId, runId, status, error, finishedAtMs) {
548
687
  const current = getAutomation(automationId);
549
- if (!current) return;
688
+ if (!current || current.state.runningRunId !== runId) return;
550
689
  const consecutiveFailures = status === "failed" || status === "timeout" ? (current.state.consecutiveFailures ?? 0) + 1 : 0;
551
690
  const disableAfter = current.reliability?.disableAfterConsecutiveFailures;
552
691
  const shouldDisable = disableAfter != null && consecutiveFailures >= disableAfter;
@@ -560,12 +699,11 @@ var AutomationService = class {
560
699
  lastError: error,
561
700
  consecutiveFailures
562
701
  },
563
- updatedAtMs: shouldDisable ? finishedAtMs : current.updatedAtMs
702
+ updatedAtMs: shouldDisable ? Math.max(finishedAtMs, current.updatedAtMs + 1) : current.updatedAtMs
564
703
  };
565
704
  delete next.state.runningRunId;
566
705
  next.state.nextRunAtMs = computeNextAutomationRunAtMs(next, finishedAtMs);
567
706
  saveAutomation(next);
568
- this.armTimer();
569
707
  }
570
708
  async postCompletionWebhook(url, run, signal) {
571
709
  const remainingMs = run.deadlineAtMs === void 0 ? 3e4 : Math.max(1, run.deadlineAtMs - Date.now());
@@ -611,4 +749,4 @@ function readAutomationEventFromRunEvent(event) {
611
749
  };
612
750
  }
613
751
  //#endregion
614
- export { AutomationAlreadyRunningError, AutomationService };
752
+ export { AutomationAlreadyExistsError, AutomationAlreadyRunningError, AutomationService };
@@ -1,3 +1,3 @@
1
1
  import { AutomationActionExecutor } from "./action-executor.js";
2
- import { AutomationAlreadyRunningError, AutomationService } from "./automation-service.js";
3
- export { AutomationActionExecutor, AutomationAlreadyRunningError, AutomationService };
2
+ import { AutomationAlreadyExistsError, AutomationAlreadyRunningError, AutomationService } from "./automation-service.js";
3
+ export { AutomationActionExecutor, AutomationAlreadyExistsError, AutomationAlreadyRunningError, AutomationService };
@@ -6,3 +6,5 @@ export declare function getAutomation(automationId: string): Automation | null;
6
6
  export declare function saveAutomation(automation: Automation): void;
7
7
  export declare function saveAutomations(automations: Automation[]): void;
8
8
  export declare function deleteAutomation(automationId: string): boolean;
9
+ /** Keep revisions distinct when a caller recreates a previously deleted identity. */
10
+ export declare function getDeletedAutomationRevision(automationId: string): number | undefined;
@@ -59,8 +59,16 @@ function saveAutomations(automations) {
59
59
  }
60
60
  function deleteAutomation(automationId) {
61
61
  return runSqliteWriteTransaction((db) => {
62
+ db.prepare(`INSERT INTO automation_deleted_revisions (automation_id, revision)
63
+ SELECT automation_id, updated_at_ms FROM automations WHERE automation_id = ?
64
+ ON CONFLICT(automation_id) DO UPDATE SET revision = MAX(revision, excluded.revision)`).run(automationId);
62
65
  return db.prepare(`DELETE FROM automations WHERE automation_id = ?`).run(automationId).changes > 0;
63
66
  });
64
67
  }
68
+ /** Keep revisions distinct when a caller recreates a previously deleted identity. */
69
+ function getDeletedAutomationRevision(automationId) {
70
+ const row = getSqliteDatabase().prepare("SELECT revision FROM automation_deleted_revisions WHERE automation_id = ?").get(automationId);
71
+ return row ? Number(row.revision) : void 0;
72
+ }
65
73
  //#endregion
66
- export { deleteAutomation, getAutomation, listAutomations, saveAutomation, saveAutomations };
74
+ export { deleteAutomation, getAutomation, getDeletedAutomationRevision, listAutomations, saveAutomation, saveAutomations };
@@ -1,4 +1,7 @@
1
- import type { AutomationProductEventRun, AutomationRun, AutomationRunEvent } from '../domain/types.js';
1
+ import type { Automation, AutomationProductEventRun, AutomationRun, AutomationRunEvent } from '../domain/types.js';
2
+ export declare function saveAutomationRunRequest(runId: string, automation: Automation): void;
3
+ export declare function getAutomationRunRequest(runId: string): Automation | null;
4
+ export declare function listUnfinishedAutomationRuns(): AutomationRun[];
2
5
  export declare function appendAutomationRunEvent(event: AutomationRunEvent): void;
3
6
  export declare function saveAutomationRun(run: AutomationRun): void;
4
7
  export declare function touchAutomationRunLease(runId: string, leaseOwner: string, heartbeatAtMs: number, leaseExpiresAtMs: number): void;
@@ -1,4 +1,5 @@
1
1
  import { getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "../../storage/sqlite/transaction.js";
2
+ import { AutomationSchema } from "../domain/validation.js";
2
3
  //#region src/automations/storage/automation-run-repository.ts
3
4
  init_transaction();
4
5
  const MAX_RUNS_PER_AUTOMATION = 2e3;
@@ -48,13 +49,24 @@ function rowToEvent(row) {
48
49
  function trimRuns(db, automationId) {
49
50
  const countRow = db.prepare(`SELECT COUNT(*) AS count FROM automation_runs WHERE automation_id = ?`).get(automationId);
50
51
  if (countRow.count <= MAX_RUNS_PER_AUTOMATION) return;
51
- const staleRunIds = db.prepare(`SELECT run_id FROM automation_runs WHERE automation_id = ?
52
+ const staleRunIds = db.prepare(`SELECT run_id FROM automation_runs WHERE automation_id = ? AND status NOT IN ('queued', 'running', 'cancelling')
52
53
  ORDER BY created_at_ms ASC LIMIT ?`).all(automationId, countRow.count - TRIM_TO_RUNS);
53
54
  for (const { run_id: runId } of staleRunIds) {
55
+ db.prepare("DELETE FROM automation_run_requests WHERE run_id = ?").run(runId);
54
56
  db.prepare(`DELETE FROM automation_run_events WHERE run_id = ?`).run(runId);
55
57
  db.prepare(`DELETE FROM automation_runs WHERE run_id = ?`).run(runId);
56
58
  }
57
59
  }
60
+ function saveAutomationRunRequest(runId, automation) {
61
+ getSqliteDatabase().prepare("INSERT INTO automation_run_requests (run_id, automation_json) VALUES (?, ?)").run(runId, JSON.stringify(automation));
62
+ }
63
+ function getAutomationRunRequest(runId) {
64
+ const row = getSqliteDatabase().prepare("SELECT automation_json FROM automation_run_requests WHERE run_id = ?").get(runId);
65
+ return row ? AutomationSchema.parse(JSON.parse(String(row.automation_json))) : null;
66
+ }
67
+ function listUnfinishedAutomationRuns() {
68
+ return getSqliteDatabase().prepare("SELECT * FROM automation_runs WHERE status IN ('queued', 'running', 'cancelling') ORDER BY created_at_ms ASC").all().map(rowToRun);
69
+ }
58
70
  function appendAutomationRunEvent(event) {
59
71
  runSqliteWriteTransaction((db) => {
60
72
  db.prepare(`INSERT INTO automation_run_events (
@@ -163,12 +175,13 @@ function listAutomationRunsForProductEvent(options) {
163
175
  }
164
176
  function deleteAutomationRunsForAutomation(automationId) {
165
177
  runSqliteWriteTransaction((db) => {
178
+ db.prepare("DELETE FROM automation_run_requests WHERE run_id IN (SELECT run_id FROM automation_runs WHERE automation_id = ?)").run(automationId);
166
179
  db.prepare(`DELETE FROM automation_run_events WHERE automation_id = ?`).run(automationId);
167
180
  db.prepare(`DELETE FROM automation_runs WHERE automation_id = ?`).run(automationId);
168
181
  });
169
182
  }
170
183
  function markAutomationRunRead(runId, readAtMs = Date.now()) {
171
- return getSqliteDatabase().prepare(`UPDATE automation_runs SET read_at_ms = ? WHERE run_id = ? AND ended_at_ms IS NOT NULL`).run(readAtMs, runId).changes > 0;
184
+ return getSqliteDatabase().prepare(`UPDATE automation_runs SET read_at_ms = COALESCE(read_at_ms, ?) WHERE run_id = ? AND ended_at_ms IS NOT NULL`).run(readAtMs, runId).changes > 0;
172
185
  }
173
186
  function markAllAutomationRunsRead(options) {
174
187
  const projectId = options?.projectId?.trim();
@@ -183,4 +196,4 @@ function markAllAutomationRunsRead(options) {
183
196
  return Number(result.changes);
184
197
  }
185
198
  //#endregion
186
- export { appendAutomationRunEvent, deleteAutomationRunsForAutomation, getAutomationRun, listAutomationRunEvents, listAutomationRuns, listAutomationRunsForProductEvent, markAllAutomationRunsRead, markAutomationRunRead, saveAutomationRun, touchAutomationRunLease };
199
+ export { appendAutomationRunEvent, deleteAutomationRunsForAutomation, getAutomationRun, getAutomationRunRequest, listAutomationRunEvents, listAutomationRuns, listAutomationRunsForProductEvent, listUnfinishedAutomationRuns, markAllAutomationRunsRead, markAutomationRunRead, saveAutomationRun, saveAutomationRunRequest, touchAutomationRunLease };
@@ -1,3 +1,3 @@
1
- import { deleteAutomation, getAutomation, listAutomations, saveAutomation, saveAutomations } from "./automation-repository.js";
2
- import { appendAutomationRunEvent, deleteAutomationRunsForAutomation, getAutomationRun, listAutomationRunEvents, listAutomationRuns, listAutomationRunsForProductEvent, markAllAutomationRunsRead, markAutomationRunRead, saveAutomationRun, touchAutomationRunLease } from "./automation-run-repository.js";
3
- export { appendAutomationRunEvent, deleteAutomation, deleteAutomationRunsForAutomation, getAutomation, getAutomationRun, listAutomationRunEvents, listAutomationRuns, listAutomationRunsForProductEvent, listAutomations, markAllAutomationRunsRead, markAutomationRunRead, saveAutomation, saveAutomationRun, saveAutomations, touchAutomationRunLease };
1
+ import { deleteAutomation, getAutomation, getDeletedAutomationRevision, listAutomations, saveAutomation, saveAutomations } from "./automation-repository.js";
2
+ import { appendAutomationRunEvent, deleteAutomationRunsForAutomation, getAutomationRun, getAutomationRunRequest, listAutomationRunEvents, listAutomationRuns, listAutomationRunsForProductEvent, listUnfinishedAutomationRuns, markAllAutomationRunsRead, markAutomationRunRead, saveAutomationRun, saveAutomationRunRequest, touchAutomationRunLease } from "./automation-run-repository.js";
3
+ export { appendAutomationRunEvent, deleteAutomation, deleteAutomationRunsForAutomation, getAutomation, getAutomationRun, getAutomationRunRequest, getDeletedAutomationRevision, listAutomationRunEvents, listAutomationRuns, listAutomationRunsForProductEvent, listAutomations, listUnfinishedAutomationRuns, markAllAutomationRunsRead, markAutomationRunRead, saveAutomation, saveAutomationRun, saveAutomationRunRequest, saveAutomations, touchAutomationRunLease };
@@ -7,8 +7,8 @@ export declare const BrowserAutomationDefinitionSchema: z.ZodObject<{
7
7
  risk: z.ZodEnum<{
8
8
  read: "read";
9
9
  draft: "draft";
10
- sensitive: "sensitive";
11
10
  destructive: "destructive";
11
+ sensitive: "sensitive";
12
12
  external_effect: "external_effect";
13
13
  }>;
14
14
  inputs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
@@ -25,7 +25,7 @@ export declare class BrowserAutomationService {
25
25
  id: string;
26
26
  name: string;
27
27
  allowedDomains: string[];
28
- risk: "read" | "draft" | "sensitive" | "destructive" | "external_effect";
28
+ risk: "read" | "draft" | "destructive" | "sensitive" | "external_effect";
29
29
  inputs: Record<string, {
30
30
  type: "string" | "number" | "boolean";
31
31
  required?: boolean;
@@ -15,6 +15,10 @@ function formatBrowserObservation(observation) {
15
15
  const { added, changed, removed } = observation.changes;
16
16
  if (added.length || changed.length || removed.length) lines.push(`Changes: +${added.length} ~${changed.length} -${removed.length}`);
17
17
  if (observation.visual) lines.push("Visual screenshot attached.");
18
+ if (observation.truncation) {
19
+ const omitted = observation.truncation.omittedNodeCount;
20
+ lines.push(`Transport note: observation was reduced for delivery${omitted ? `; ${omitted} interactive elements omitted` : ""}.`);
21
+ }
18
22
  return lines.join("\n");
19
23
  }
20
24
  function formatNode(node) {