@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
@@ -17,7 +17,7 @@ import { sceneContentHash } from "../contracts.js";
17
17
  import { SceneConflictError, SceneNotFoundError, SceneRepository } from "../repository.js";
18
18
  import { SceneSetupError } from "../service.js";
19
19
  import { ScenePreferenceService } from "../preferences.js";
20
- import { sourceIdentity, taskFollowUpInputSchema, taskFollowUpTemplate } from "./contracts.js";
20
+ import { sourceIdentity, taskFollowUpInputSchema } from "./contracts.js";
21
21
  import { FollowUpAgentExecutor } from "./agentExecutor.js";
22
22
  import { VerificationTerminationUnknownError, verifyTaskWorkspace } from "../../agent/commands/approved-verification.js";
23
23
  import { TaskResources } from "./resources.js";
@@ -39,7 +39,8 @@ const delegationHash = (input) => {
39
39
  });
40
40
  };
41
41
  /** Scene orchestration owns source cursors, not a second Task/TaskRun lifecycle. */
42
- var TaskFollowUpService = class {
42
+ var SceneTaskExecutionService = class {
43
+ id = "task";
43
44
  branches;
44
45
  scenes;
45
46
  tasks = new TaskRepository();
@@ -59,21 +60,12 @@ var TaskFollowUpService = class {
59
60
  this.deps = deps;
60
61
  this.scenes = new SceneRepository(db);
61
62
  this.branches = new TaskBranchInventory(db);
62
- this.scenes.installTemplate(taskFollowUpTemplate);
63
63
  this.executor = deps.executor ?? new FollowUpAgentExecutor(() => resolveModel(resolveModelSelector(deps.config(), resolveDefaultAgentId(), "@reasoning")), deps.config);
64
64
  this.sources = deps.sources;
65
65
  this.resources = new TaskResources({
66
66
  stateDir: deps.stateDir,
67
67
  worktrees: deps.worktrees
68
68
  });
69
- for (const row of db.prepare(`SELECT b.* FROM scene_task_bindings b JOIN scene_activations a ON a.id = b.activation_id
70
- WHERE a.template_key = 'slack-development'`).all()) {
71
- const input = taskFollowUpInputSchema.parse(JSON.parse(row.input_json));
72
- db.prepare("UPDATE scene_task_bindings SET source_key = ? WHERE activation_id = ?").run(sourceIdentity(this.principal(row.activation_id), input.source), row.activation_id);
73
- db.prepare("UPDATE scene_activations SET template_key = 'task-follow-up', template_version = '1.0.0' WHERE id = ?").run(row.activation_id);
74
- }
75
- db.prepare(`DELETE FROM scene_template_versions WHERE template_key = 'slack-development'
76
- AND NOT EXISTS (SELECT 1 FROM scene_activations WHERE template_key = 'slack-development')`).run();
77
69
  }
78
70
  binding(id) {
79
71
  const row = this.db.prepare("SELECT * FROM scene_task_bindings WHERE activation_id = ?").get(id);
@@ -109,9 +101,11 @@ var TaskFollowUpService = class {
109
101
  return false;
110
102
  }
111
103
  }
112
- async preflight(principal, value) {
104
+ async preflight(principal, template, value) {
105
+ if (template.execution.kind !== this.id || template.contextProviders.length !== 1 || template.contextProviders[0] !== "connected_source" || !template.triggers.some((trigger) => trigger.type === "event" && trigger.eventType === "source.changed") || !template.allowedOutcomeKinds.includes("receipt")) throw new SceneConflictError("Template is incompatible with the task execution adapter");
113
106
  const input = this.parse(value);
114
107
  const missing = [];
108
+ if (input.capabilities.some((capability) => capability !== "workspace.read" && !template.allowedEffectHandlers.includes(capability))) missing.push("capability_not_allowed");
115
109
  if (!this.source(input).authorized(principal, input.source.reference)) missing.push("source_read_permission");
116
110
  const project = input.projectId ? new ProjectStore().get(input.projectId) : void 0;
117
111
  if (input.projectId && (!project || project.ownerId && project.ownerId !== principal.ownerId)) missing.push("project_access");
@@ -150,28 +144,30 @@ var TaskFollowUpService = class {
150
144
  missing
151
145
  };
152
146
  }
153
- async create(principal, value) {
147
+ async create(principal, template, value) {
154
148
  const input = this.parse(value);
155
149
  const key = sourceIdentity(principal, input.source);
156
- const existing = this.db.prepare("SELECT activation_id, input_json FROM scene_task_bindings WHERE source_key = ?").get(key);
150
+ const existing = this.db.prepare(`SELECT b.activation_id, b.input_json, a.template_key, a.template_version
151
+ FROM scene_task_bindings b JOIN scene_activations a ON a.id = b.activation_id WHERE b.source_key = ?`).get(key);
157
152
  if (existing) {
158
- if (delegationHash(JSON.parse(String(existing.input_json))) !== delegationHash(input)) throw new SceneConflictError("This source is already delegated with a different goal or project");
153
+ if (existing.template_key !== template.key || existing.template_version !== template.version || delegationHash(JSON.parse(String(existing.input_json))) !== delegationHash(input)) throw new SceneConflictError("This source is already delegated with a different template, goal or project");
159
154
  return this.get(principal, String(existing.activation_id));
160
155
  }
161
- const readiness = await this.preflight(principal, input);
156
+ const readiness = await this.preflight(principal, template, input);
162
157
  if (!readiness.ready) throw new SceneSetupError(readiness.missing);
163
158
  const snapshot = await this.source(input).read(principal, input.source.reference, AbortSignal.any([this.stopController.signal, AbortSignal.timeout(3e4)]));
164
159
  this.stopController.signal.throwIfAborted();
165
160
  if (!this.source(input).authorized(principal, input.source.reference)) throw new SceneSetupError(["source_read_permission"]);
166
161
  const id = runSqliteWriteTransaction(() => {
167
- const concurrent = this.db.prepare("SELECT activation_id, input_json FROM scene_task_bindings WHERE source_key = ?").get(key);
162
+ const concurrent = this.db.prepare(`SELECT b.activation_id, b.input_json, a.template_key, a.template_version
163
+ FROM scene_task_bindings b JOIN scene_activations a ON a.id = b.activation_id WHERE b.source_key = ?`).get(key);
168
164
  if (concurrent) {
169
- if (delegationHash(JSON.parse(String(concurrent.input_json))) !== delegationHash(input)) throw new SceneConflictError("This source is already delegated with a different goal or project");
165
+ if (concurrent.template_key !== template.key || concurrent.template_version !== template.version || delegationHash(JSON.parse(String(concurrent.input_json))) !== delegationHash(input)) throw new SceneConflictError("This source is already delegated with a different template, goal or project");
170
166
  return String(concurrent.activation_id);
171
167
  }
172
168
  const activation = this.scenes.createActivation(principal, {
173
- templateKey: taskFollowUpTemplate.key,
174
- templateVersion: taskFollowUpTemplate.version,
169
+ templateKey: template.key,
170
+ templateVersion: template.version,
175
171
  goal: input.goal,
176
172
  scope: input.projectId ? {
177
173
  kind: "project",
@@ -184,7 +180,7 @@ var TaskFollowUpService = class {
184
180
  }
185
181
  }, key);
186
182
  const created = this.application.create({
187
- idempotencyKey: `scene-task-follow-up:${key}`,
183
+ idempotencyKey: `scene-task-execution:${key}`,
188
184
  title: input.goal.slice(0, 200),
189
185
  projectId: input.projectId,
190
186
  ownerId: principal.ownerId,
@@ -263,6 +259,12 @@ var TaskFollowUpService = class {
263
259
  JOIN scene_activations a ON a.id = b.activation_id JOIN scene_preferences p ON p.owner_id = a.owner_id AND p.workspace_id = a.workspace_id
264
260
  WHERE b.task_id = ? AND json_extract(p.preferences_json, '$.notificationsMuted') = 1`).get(taskId);
265
261
  }
262
+ listProjectBranches(principal, projectId) {
263
+ return this.branches.list(principal, projectId);
264
+ }
265
+ associateBranch(principal, input) {
266
+ return this.branches.associate(principal, input);
267
+ }
266
268
  async configure(principal, id, expectedRevision, value) {
267
269
  const activation = this.scenes.getActivation(principal, id);
268
270
  const row = this.binding(id);
@@ -271,7 +273,8 @@ var TaskFollowUpService = class {
271
273
  const task = this.tasks.require(row.task_id);
272
274
  if (activation.status !== "paused" || task.phase === "closed" || row.executing_run_id || this.runs.getActiveRoot(task.id)) throw new SceneConflictError("Pause and wait for the current run before changing instructions or permissions");
273
275
  if (sourceIdentity(principal, old.source) !== sourceIdentity(principal, input.source) || old.projectId !== input.projectId || old.resource !== input.resource) throw new SceneConflictError("Source and resource identity cannot change on an existing task");
274
- const readiness = await this.preflight(principal, input);
276
+ const template = this.scenes.getTemplate(activation.templateKey, activation.templateVersion);
277
+ const readiness = await this.preflight(principal, template, input);
275
278
  if (!readiness.ready) throw new SceneSetupError(readiness.missing);
276
279
  runSqliteWriteTransaction(() => {
277
280
  if (this.binding(id).executing_run_id || this.runs.getActiveRoot(task.id)) throw new SceneConflictError("Task started while changing permissions");
@@ -352,7 +355,7 @@ var TaskFollowUpService = class {
352
355
  },
353
356
  actor: {
354
357
  kind: "system",
355
- id: "scene-task-follow-up"
358
+ id: "scene-task-execution"
356
359
  }
357
360
  }).ok) throw new Error("Task contract revision failed");
358
361
  }
@@ -390,7 +393,7 @@ var TaskFollowUpService = class {
390
393
  },
391
394
  actor: {
392
395
  kind: "system",
393
- id: "scene-task-follow-up"
396
+ id: "scene-task-execution"
394
397
  }
395
398
  });
396
399
  }
@@ -479,8 +482,10 @@ var TaskFollowUpService = class {
479
482
  if (!raw) return false;
480
483
  const id = String(raw.activation_id);
481
484
  if (this.active.has(id)) throw new SceneConflictError("Task follow-up already has a writer");
485
+ const intentId = this.executionIntent(id, runId);
486
+ const sceneRun = this.scenes.claimIntentForAdapter(this.principal(id), id, intentId, this.id, `task:${runId}`, Date.now(), 31e4);
482
487
  const controller = new AbortController();
483
- const promise = this.execute(id, runId, conversationId, AbortSignal.any([
488
+ const promise = this.execute(id, runId, conversationId, sceneRun, AbortSignal.any([
484
489
  controller.signal,
485
490
  this.stopController.signal,
486
491
  AbortSignal.timeout(3e5)
@@ -494,9 +499,40 @@ var TaskFollowUpService = class {
494
499
  await promise;
495
500
  return true;
496
501
  }
497
- async execute(id, runId, conversationId, signal) {
502
+ executionIntent(id, taskRunId) {
503
+ const principal = this.principal(id);
504
+ const activation = this.scenes.getActivation(principal, id);
505
+ const trigger = this.scenes.getTemplate(activation.templateKey, activation.templateVersion).triggers.find((item) => item.type === "event" && item.eventType === "source.changed");
506
+ if (!trigger) throw new SceneConflictError("Scene has no source change trigger");
507
+ const row = this.binding(id);
508
+ const revision = this.db.prepare("SELECT source_hash, observed_at FROM scene_task_revisions WHERE activation_id = ? AND revision = ?").get(id, row.observed_revision);
509
+ if (!revision) throw new SceneConflictError("Scene source revision is unavailable");
510
+ const input = taskFollowUpInputSchema.parse(JSON.parse(row.input_json));
511
+ const occurrenceKey = sceneContentHash({
512
+ activationRevision: activation.revision,
513
+ sourceRevision: row.observed_revision,
514
+ taskRunId
515
+ });
516
+ const accountIds = this.source(input).accountIds(input.source.reference);
517
+ const now = Date.now();
518
+ return this.scenes.acceptTrigger(principal, id, {
519
+ triggerKey: trigger.id,
520
+ occurrenceKey,
521
+ dueAt: now,
522
+ event: {
523
+ source: input.source.provider,
524
+ sourceEventId: revision.source_hash,
525
+ eventType: trigger.eventType,
526
+ subjectId: row.source_key,
527
+ occurredAt: revision.observed_at,
528
+ ...accountIds.length === 1 ? { accountId: accountIds[0] } : {}
529
+ }
530
+ }, now);
531
+ }
532
+ async execute(id, runId, conversationId, sceneRun, signal) {
498
533
  const row = this.binding(id);
499
534
  const activation = this.scenes.getActivation(this.principal(id), id);
535
+ const template = this.scenes.getTemplate(activation.templateKey, activation.templateVersion);
500
536
  const input = taskFollowUpInputSchema.parse(JSON.parse(row.input_json));
501
537
  const revision = row.observed_revision;
502
538
  const contractVersion = this.runs.require(runId).contractVersion;
@@ -508,6 +544,7 @@ var TaskFollowUpService = class {
508
544
  const guard = () => {
509
545
  if (terminationUnknown) throw new VerificationTerminationUnknownError("Verification termination is unknown");
510
546
  signal.throwIfAborted();
547
+ if (!this.scenes.getRunInput(sceneRun, Date.now())) throw new Error("Scene execution lease changed");
511
548
  resource?.assertLive();
512
549
  const current = this.binding(id);
513
550
  const task = this.tasks.require(row.task_id);
@@ -521,6 +558,7 @@ var TaskFollowUpService = class {
521
558
  owner: leaseOwner,
522
559
  leaseMs: 6e4
523
560
  });
561
+ this.scenes.renewLease(sceneRun, Date.now(), 31e4);
524
562
  }, 15e3);
525
563
  heartbeat.unref();
526
564
  try {
@@ -578,7 +616,7 @@ var TaskFollowUpService = class {
578
616
  runId,
579
617
  conversationId,
580
618
  workspace: resource?.rootPath ?? this.principal(id).workspaceId,
581
- goal: `${activation.goal}\nCurrent task contract (within the original authority): ${JSON.stringify(this.tasks.require(row.task_id).contract)}\nUser decisions: ${JSON.stringify(answers).slice(0, 8e3)}`,
619
+ goal: `${template.execution.instruction}\nUser goal: ${activation.goal}\nCurrent task contract (within the original authority): ${JSON.stringify(this.tasks.require(row.task_id).contract)}\nUser decisions: ${JSON.stringify(answers).slice(0, 8e3)}`,
582
620
  instruction: input.instruction,
583
621
  evidence,
584
622
  capabilities: input.capabilities,
@@ -643,6 +681,25 @@ var TaskFollowUpService = class {
643
681
  completionVerdict: "partial"
644
682
  }
645
683
  }).ok) throw new SceneConflictError("Task run changed before the result was recorded");
684
+ if (!this.scenes.finishAdapterRun(sceneRun, {
685
+ kind: "receipt",
686
+ summary: result.summary,
687
+ taskId: row.task_id,
688
+ taskRunId: runId,
689
+ sourceRevision: revision,
690
+ verification: { status: verification.passed ? "passed" : "unverified" },
691
+ remainingWork,
692
+ needsUser,
693
+ changes: resource ? [{
694
+ title: "Task workspace",
695
+ summary: `Resource: ${input.resource}; fingerprint: ${fingerprint}`,
696
+ uri: resource.rootPath
697
+ }] : [],
698
+ evidence: verification.output || verification.passed ? [{
699
+ title: "Approved verification",
700
+ summary: verification.output || "Exit code 0"
701
+ }] : []
702
+ }, Date.now())) throw new SceneConflictError("Scene run changed before the result was recorded");
646
703
  this.db.prepare("UPDATE scene_task_bindings SET processed_revision = ?, continuation_requested = ? WHERE activation_id = ?").run(revision, continueAutomatically && !needsUser ? 1 : 0, id);
647
704
  if (needsUser) this.runs.createWait({
648
705
  taskId: row.task_id,
@@ -677,6 +734,7 @@ var TaskFollowUpService = class {
677
734
  completionVerdict: "not_achieved"
678
735
  }
679
736
  });
737
+ this.scenes.failRun(sceneRun, Date.now(), changed ? "execution_cancelled" : "execution_failed");
680
738
  if (!changed) this.fail(current, error instanceof Error ? error.message : "Task execution failed");
681
739
  } finally {
682
740
  clearInterval(heartbeat);
@@ -709,4 +767,4 @@ var TaskFollowUpService = class {
709
767
  }
710
768
  };
711
769
  //#endregion
712
- export { TaskFollowUpService };
770
+ export { SceneTaskExecutionService };
@@ -18,7 +18,7 @@ export declare const mailFollowUpTemplate: {
18
18
  type: "schedule";
19
19
  })[];
20
20
  execution: {
21
- kind: "agent";
21
+ kind: string;
22
22
  instruction: string;
23
23
  limits: {
24
24
  timeoutSeconds: number;
@@ -50,7 +50,7 @@ export declare const familyPlanTemplate: {
50
50
  type: "schedule";
51
51
  })[];
52
52
  execution: {
53
- kind: "agent";
53
+ kind: string;
54
54
  instruction: string;
55
55
  limits: {
56
56
  timeoutSeconds: number;
@@ -1,10 +1,13 @@
1
1
  import type { DatabaseSync } from 'node:sqlite';
2
2
  import type { SceneContextProvider, SceneEvidence } from './execution.js';
3
+ import type { SceneActivation } from './contracts.js';
3
4
  /** Explicit notes belong to one delegation, not an implicit family-wide data grant. */
4
5
  export declare class SceneUserNotesProvider implements SceneContextProvider {
5
6
  private readonly db;
6
7
  private readonly clock;
7
8
  readonly id = "user_notes";
8
9
  constructor(db: DatabaseSync, clock?: () => number);
10
+ setupIssues(activation: SceneActivation): string[];
11
+ authorization(activation: SceneActivation): string[] | null;
9
12
  read(input: Parameters<SceneContextProvider['read']>[0]): Promise<SceneEvidence[]>;
10
13
  }
@@ -7,6 +7,12 @@ var SceneUserNotesProvider = class {
7
7
  this.db = db;
8
8
  this.clock = clock;
9
9
  }
10
+ setupIssues(activation) {
11
+ return activation.scope.kind === "personal" ? [] : ["personal_notes_scope"];
12
+ }
13
+ authorization(activation) {
14
+ return activation.scope.kind === "personal" ? [] : null;
15
+ }
10
16
  async read(input) {
11
17
  input.signal.throwIfAborted();
12
18
  if (!input.permissions.contextProviders.includes(this.id) || input.activation.scope.kind !== "personal") throw new Error("Personal notes permission is required");
@@ -14,6 +14,8 @@ export interface ClientHistoryMessage {
14
14
  timestamp?: number;
15
15
  /** Whitelisted display metadata; never includes source snapshot text. */
16
16
  metadata?: {
17
+ /** Stable client-generated id used to reconcile optimistic sends exactly. */
18
+ clientMessageId?: string;
17
19
  sourceContexts?: Array<{
18
20
  refId?: string;
19
21
  kind: 'note' | 'task' | 'file' | 'session' | 'browser_tab' | 'browser_page' | 'mcp_resource';
@@ -77,4 +79,5 @@ export declare function transcriptRowsToClientHistory(rows: TranscriptStoredRow[
77
79
  limit?: number;
78
80
  startRowNumber?: number;
79
81
  endRowNumber?: number;
82
+ rowNumberOffset?: number;
80
83
  }): ClientHistoryMessage[];
@@ -8,9 +8,13 @@ init_src();
8
8
  function sourceContextDisplayMetadata(metadata) {
9
9
  if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) return void 0;
10
10
  const record = metadata;
11
+ const clientMessageId = typeof record.clientMessageId === "string" && record.clientMessageId.trim() ? record.clientMessageId : void 0;
11
12
  const rows = record.sourceContexts;
12
13
  const userTurnDocument = isUserTurnDocument(record.userTurnDocument) ? record.userTurnDocument : void 0;
13
- if (!Array.isArray(rows)) return userTurnDocument ? { userTurnDocument } : void 0;
14
+ if (!Array.isArray(rows)) return clientMessageId || userTurnDocument ? {
15
+ ...clientMessageId ? { clientMessageId } : {},
16
+ ...userTurnDocument ? { userTurnDocument } : {}
17
+ } : void 0;
14
18
  const sourceContexts = rows.flatMap((value) => {
15
19
  if (!value || typeof value !== "object" || Array.isArray(value)) return [];
16
20
  const row = value;
@@ -29,7 +33,8 @@ function sourceContextDisplayMetadata(metadata) {
29
33
  ...row.kind === "file" && (row.fileKind === "file" || row.fileKind === "directory") ? { fileKind: row.fileKind } : {}
30
34
  }];
31
35
  });
32
- return sourceContexts.length || userTurnDocument ? {
36
+ return clientMessageId || sourceContexts.length || userTurnDocument ? {
37
+ ...clientMessageId ? { clientMessageId } : {},
33
38
  ...sourceContexts.length ? { sourceContexts } : {},
34
39
  ...userTurnDocument ? { userTurnDocument } : {}
35
40
  } : void 0;
@@ -367,9 +372,9 @@ function transcriptRowsToClientHistory(rows, opts) {
367
372
  const out = [];
368
373
  const reviewTraceToolById = /* @__PURE__ */ new Map();
369
374
  for (const [offset, row] of slice.entries()) {
370
- const rowNumber = startIndex + offset + 1;
371
- const id = `row-${rowNumber}`;
372
- const displayIndex = displayIndexByRowNumber.get(rowNumber);
375
+ const localRowNumber = startIndex + offset + 1;
376
+ const id = `row-${(opts?.rowNumberOffset ?? 0) + localRowNumber}`;
377
+ const displayIndex = displayIndexByRowNumber.get(localRowNumber);
373
378
  if (isCompactionRow(row)) {
374
379
  out.push({
375
380
  id,
@@ -43,6 +43,7 @@ export declare class SessionIndex extends EventEmitter {
43
43
  hasMore: boolean;
44
44
  before?: string;
45
45
  nextBeforeCursor?: string;
46
+ revision?: number;
46
47
  };
47
48
  } | null>;
48
49
  /**
@@ -2,7 +2,8 @@ import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { requireXopcDatabase } from "../storage/sqlite/connection.js";
4
4
  import { getSessionMetadata } from "../storage/sqlite/session-read-repository.js";
5
- import { findConversationIdByTranscriptId, getSessionPersistedLevels } from "../storage/sqlite/session-repository.js";
5
+ import { findConversationIdByTranscriptId } from "../storage/sqlite/session-repository.js";
6
+ import { getSessionConfig } from "../storage/sqlite/config-repository.js";
6
7
  import { init_sqlite } from "../storage/sqlite/index.js";
7
8
  import { SessionConfigSchema, init_schema } from "../config/schema.js";
8
9
  import { normalizeThinkLevel, normalizeVerboseLevel } from "../agent/transcript/thinking-types.js";
@@ -69,8 +70,8 @@ async function resolveSession(opts) {
69
70
  conversationId,
70
71
  sessionMetadata,
71
72
  isNewSession,
72
- persistedThinking: fresh && conversationId ? normalizeThinkLevel(getSessionPersistedLevels(conversationId)?.thinkingLevel ?? void 0) : void 0,
73
- persistedVerbose: fresh && conversationId ? normalizeVerboseLevel(getSessionPersistedLevels(conversationId)?.verboseLevel ?? void 0) : void 0
73
+ persistedThinking: fresh && conversationId ? normalizeThinkLevel(getSessionConfig(conversationId)?.thinkingLevel) : void 0,
74
+ persistedVerbose: fresh && conversationId ? normalizeVerboseLevel(getSessionConfig(conversationId)?.verboseLevel) : void 0
74
75
  };
75
76
  }
76
77
  //#endregion
@@ -170,7 +170,7 @@ Title:`,
170
170
  maxTokens: 64,
171
171
  temperature: .35,
172
172
  signal
173
- });
173
+ }, void 0, { operation: "session.generate_title" });
174
174
  let text = "";
175
175
  if (Array.isArray(result.content)) {
176
176
  for (const c of result.content) if (c && typeof c === "object" && c.type === "text") text += String(c.text || "");
@@ -101,6 +101,7 @@ export declare class SessionStore {
101
101
  hasMore: boolean;
102
102
  before?: string;
103
103
  nextBeforeCursor?: string;
104
+ revision?: number;
104
105
  };
105
106
  } | null>;
106
107
  private buildSessionDetail;
@@ -188,9 +188,9 @@ var SessionStore = class {
188
188
  beforeIndex: hasBeforeCursor ? parsedBefore : void 0,
189
189
  includeContext: true
190
190
  });
191
- const messages = transcriptRowsToClientHistory(page.rows);
192
191
  const endIndex = hasBeforeCursor ? Math.min(page.total, Math.max(0, parsedBefore)) : Math.max(0, page.total - offset);
193
192
  const startIndex = Math.max(0, endIndex - page.rows.length);
193
+ const messages = transcriptRowsToClientHistory(page.rows, { rowNumberOffset: startIndex });
194
194
  const session = {
195
195
  ...metadata,
196
196
  messages,
@@ -205,7 +205,8 @@ var SessionStore = class {
205
205
  offset,
206
206
  hasMore: hasBeforeCursor ? startIndex > 0 : offset + limit < page.total,
207
207
  ...hasBeforeCursor ? { before: String(endIndex) } : {},
208
- ...nextBeforeCursor ? { nextBeforeCursor } : {}
208
+ ...nextBeforeCursor ? { nextBeforeCursor } : {},
209
+ revision: page.revision
209
210
  }
210
211
  };
211
212
  }
@@ -793,7 +794,6 @@ var SessionStore = class {
793
794
  customData: {
794
795
  ...sourceMetadata.customData ?? {},
795
796
  ...options.targetMetadata.customData ?? {},
796
- genericNewChatShell: false,
797
797
  forkedFromConversationId: sourceKey,
798
798
  forkedFromTranscriptId: sourceMetadata.transcriptId,
799
799
  forkedFromSessionName: sourceMetadata.name,
@@ -0,0 +1,137 @@
1
+ import type { AiUsageEvent, AiUsageFinish } from '../../usage/types.js';
2
+ export declare const AI_USAGE_RETENTION_MS: number;
3
+ export declare function insertAiUsageEvent(event: AiUsageEvent): void;
4
+ export declare function finishAiUsageEvent(id: string, finish: AiUsageFinish & {
5
+ estimatedCostMicrousd?: number;
6
+ }): void;
7
+ export declare function markStaleAiUsageEventsUnknown(cutoffMs: number, now?: number): number;
8
+ export declare function pruneAiUsageEvents(cutoffMs: number): number;
9
+ export declare function getAiUsageEvent(id: string): Record<string, unknown> | undefined;
10
+ export type AiUsageQuery = {
11
+ from: number;
12
+ to: number;
13
+ category?: string;
14
+ provider?: string;
15
+ model?: string;
16
+ agentId?: string;
17
+ conversationId?: string;
18
+ };
19
+ export type AiUsageTotals = {
20
+ calls: number;
21
+ succeededCalls: number;
22
+ failedCalls: number;
23
+ unknownCostCalls: number;
24
+ inputTokens: number;
25
+ outputTokens: number;
26
+ cacheReadTokens: number;
27
+ cacheWriteTokens: number;
28
+ totalTokens: number;
29
+ knownCostUsd: string;
30
+ costCompleteness: 'complete' | 'partial' | 'unknown';
31
+ };
32
+ export declare function summarizeAiUsage(query: AiUsageQuery): {
33
+ totals: AiUsageTotals;
34
+ byCategory: Array<{
35
+ key: string;
36
+ totals: AiUsageTotals;
37
+ }>;
38
+ byModel: Array<{
39
+ key: string;
40
+ provider: string;
41
+ model: string;
42
+ totals: AiUsageTotals;
43
+ }>;
44
+ };
45
+ export declare function listAiUsageEvents(query: AiUsageQuery & {
46
+ limit?: number;
47
+ before?: {
48
+ startedAt: number;
49
+ id: string;
50
+ };
51
+ }): {
52
+ items: {
53
+ id: string;
54
+ traceId: string;
55
+ parentEventId: string;
56
+ conversationId: string;
57
+ runId: string;
58
+ agentId: string;
59
+ category: string;
60
+ operation: string;
61
+ trigger: string;
62
+ reasonKey: string;
63
+ provider: string;
64
+ model: string;
65
+ status: string;
66
+ startedAt: number;
67
+ finishedAt: number;
68
+ durationMs: number;
69
+ inputTokens: number;
70
+ outputTokens: number;
71
+ cacheReadTokens: number;
72
+ cacheWriteTokens: number;
73
+ reasoningTokens: number;
74
+ totalTokens: number;
75
+ estimatedCostUsd: string;
76
+ costSource: string;
77
+ pricingSnapshot: Record<string, number>;
78
+ errorSummary: string;
79
+ }[];
80
+ nextCursor: string;
81
+ };
82
+ export declare function getAiUsageEventView(id: string): {
83
+ id: string;
84
+ traceId: string;
85
+ parentEventId: string;
86
+ conversationId: string;
87
+ runId: string;
88
+ agentId: string;
89
+ category: string;
90
+ operation: string;
91
+ trigger: string;
92
+ reasonKey: string;
93
+ provider: string;
94
+ model: string;
95
+ status: string;
96
+ startedAt: number;
97
+ finishedAt: number;
98
+ durationMs: number;
99
+ inputTokens: number;
100
+ outputTokens: number;
101
+ cacheReadTokens: number;
102
+ cacheWriteTokens: number;
103
+ reasoningTokens: number;
104
+ totalTokens: number;
105
+ estimatedCostUsd: string;
106
+ costSource: string;
107
+ pricingSnapshot: Record<string, number>;
108
+ errorSummary: string;
109
+ };
110
+ export declare function listAiUsageTrace(traceId: string): {
111
+ id: string;
112
+ traceId: string;
113
+ parentEventId: string;
114
+ conversationId: string;
115
+ runId: string;
116
+ agentId: string;
117
+ category: string;
118
+ operation: string;
119
+ trigger: string;
120
+ reasonKey: string;
121
+ provider: string;
122
+ model: string;
123
+ status: string;
124
+ startedAt: number;
125
+ finishedAt: number;
126
+ durationMs: number;
127
+ inputTokens: number;
128
+ outputTokens: number;
129
+ cacheReadTokens: number;
130
+ cacheWriteTokens: number;
131
+ reasoningTokens: number;
132
+ totalTokens: number;
133
+ estimatedCostUsd: string;
134
+ costSource: string;
135
+ pricingSnapshot: Record<string, number>;
136
+ errorSummary: string;
137
+ }[];