@xopcai/xopc 0.0.331 → 0.0.333

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 (388) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-B0BtF24E.js → agent-avatar-dicebear-DiI2O7lC.js} +1 -1
  4. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CVp3J969.js +1 -0
  5. package/dist/gateway/static/root/assets/{agent-plugin-dialog-DbvLXQO2.js → agent-plugin-dialog-CacyndrS.js} +1 -1
  6. package/dist/gateway/static/root/assets/agents-DXYZSuUV.js +70 -0
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-fwzTRJfP.js → app-management-settings-panel-BcszTlqr.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-v_GGe8UZ.js → appearance-settings-B1XPe8qz.js} +1 -1
  9. package/dist/gateway/static/root/assets/{apps-page-C9ZMEuuA.js → apps-page-ZqANbUZv.js} +1 -1
  10. package/dist/gateway/static/root/assets/{archive-plugin-B6EgADeH.js → archive-plugin-MjUsJcNb.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-B4H_IFeX.js → attachment-load-DHa-BI9a.js} +1 -1
  12. package/dist/gateway/static/root/assets/{automations-page-UlVCvg4r.js → automations-page-Dsjivdxs.js} +1 -1
  13. package/dist/gateway/static/root/assets/automations-workspace-B37vs5tk.js +7 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-BxTSx30f.js → binary-plugins-DQYcuBHP.js} +1 -1
  15. package/dist/gateway/static/root/assets/{block-editor-CVzdrpjl.js → block-editor-Bx0uXbJP.js} +3 -3
  16. package/dist/gateway/static/root/assets/{browser-automation-inputs-C5s1yHOu.js → browser-automation-inputs-1ZIPGDeq.js} +1 -1
  17. package/dist/gateway/static/root/assets/{browser-automations-page-CBVD8k6O.js → browser-automations-page-CCjYipHc.js} +2 -2
  18. package/dist/gateway/static/root/assets/browser-settings-page-CSv4rvmx.js +3 -0
  19. package/dist/gateway/static/root/assets/capabilities-BnO9LV7U.js +1 -0
  20. package/dist/gateway/static/root/assets/{capabilities-page-BAT7Vvb8.js → capabilities-page-BfvDvIY1.js} +2 -2
  21. package/dist/gateway/static/root/assets/capabilities-settings-panel-CoW7-ESq.js +8 -0
  22. package/dist/gateway/static/root/assets/{capability-header-actions-EETjXmkG.js → capability-header-actions-D_hbWRRF.js} +1 -1
  23. package/dist/gateway/static/root/assets/channels-BhMaRh1x.js +1 -0
  24. package/dist/gateway/static/root/assets/{chat-terminal-dock-DCqm9j9W.js → chat-terminal-dock-Fnum_IEm.js} +1 -1
  25. package/dist/gateway/static/root/assets/{computer-settings-page-CxFWdovV.js → computer-settings-page-DI1zfCTA.js} +1 -1
  26. package/dist/gateway/static/root/assets/{connector-service-page-wxsEhmlU.js → connector-service-page-CiGDAubm.js} +1 -1
  27. package/dist/gateway/static/root/assets/connectors-page-Ono0Pha1.js +2 -0
  28. package/dist/gateway/static/root/assets/{date-picker-h_OS6uBR.js → date-picker-D-JhzZyW.js} +1 -1
  29. package/dist/gateway/static/root/assets/{dependency-picker-DNgSSH3z.js → dependency-picker-DpD3xaEB.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-CflvPnB-.js → desktop-pet-CCoDxKqh.js} +1 -1
  31. package/dist/gateway/static/root/assets/{desktop-pet-settings-CXy0X5Js.js → desktop-pet-settings-GxndKfCx.js} +1 -1
  32. package/dist/gateway/static/root/assets/{device-pairing-wizard-BDMiJcsK.js → device-pairing-wizard-B71w3ptm.js} +1 -1
  33. package/dist/gateway/static/root/assets/{directory-picker-path-field-BqkOh13m.js → directory-picker-path-field-CUzjJvjs.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-debug-page-VT4s-9pK.js → extension-debug-page-BtDY8ntX.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-page-CBSeGhGA.js → extension-page-D9_XF-XC.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-settings-page-DRB6uOo8.js → extension-settings-page-CjhUFAaC.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-config-swr-cR-tz7-Q.js → gateway-config-swr-CgIjCxM8.js} +1 -1
  38. package/dist/gateway/static/root/assets/{gateway-settings-lF-FpnZy.js → gateway-settings-BWaCnwT1.js} +1 -1
  39. package/dist/gateway/static/root/assets/{gateway-startup-retry-6jLRcQsu.js → gateway-startup-retry-i-1lTrwY.js} +1 -1
  40. package/dist/gateway/static/root/assets/home-page-BTjGLngn.js +1 -0
  41. package/dist/gateway/static/root/assets/{image-generation-api-CSSkwsyC.js → image-generation-api-gilc-u7M.js} +1 -1
  42. package/dist/gateway/static/root/assets/{imports-page-DGkOijwE.js → imports-page-BEtq5BRU.js} +1 -1
  43. package/dist/gateway/static/root/assets/index-DHL16aYZ.js +121 -0
  44. package/dist/gateway/static/root/assets/index-N1e6PDwx.css +1 -0
  45. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-iU6c2zg1.js → keyboard-shortcuts-settings-JUYY_18v.js} +1 -1
  46. package/dist/gateway/static/root/assets/local-app-workbench-page-uI7mtoVz.js +1 -0
  47. package/dist/gateway/static/root/assets/{local-apps-page-C0BWC8D2.js → local-apps-page-BlYESNqz.js} +1 -1
  48. package/dist/gateway/static/root/assets/{locale-store-wNXWkWu5.js → locale-store-BY30D6tg.js} +1 -1
  49. package/dist/gateway/static/root/assets/{logs-page-Dpoi-r-_.js → logs-page-BbLQreeN.js} +2 -2
  50. package/dist/gateway/static/root/assets/management-settings-c4krhYU7.js +1 -0
  51. package/dist/gateway/static/root/assets/{markdown-view-DlT9KqwF.js → markdown-view-BEeXMfDw.js} +1 -1
  52. package/dist/gateway/static/root/assets/{media-plugins-C8E_F2F_.js → media-plugins-DEFN1I73.js} +1 -1
  53. package/dist/gateway/static/root/assets/messages-_6IXbP2u.js +3 -0
  54. package/dist/gateway/static/root/assets/note-detail-panel--09xGxyE.js +5 -0
  55. package/dist/gateway/static/root/assets/notes-page-DsxcVBXF.js +8 -0
  56. package/dist/gateway/static/root/assets/{page-context-capture-button-qqWG_gs_.js → page-context-capture-button-D43aVpCj.js} +1 -1
  57. package/dist/gateway/static/root/assets/{page-tabs-b3lheKy4.js → page-tabs-BhYBCqls.js} +1 -1
  58. package/dist/gateway/static/root/assets/{preview-open-alternatives-0Q4rTfGX.js → preview-open-alternatives-CP8agNlc.js} +1 -1
  59. package/dist/gateway/static/root/assets/{product-open-page-jnJZCrKQ.js → product-open-page-CU7fRhfT.js} +1 -1
  60. package/dist/gateway/static/root/assets/project-detail-page-U-EdDfAW.js +1 -0
  61. package/dist/gateway/static/root/assets/{projects-page-r96k_2wB.js → projects-page-DUOKZLt7.js} +1 -1
  62. package/dist/gateway/static/root/assets/{registry-api-BIpltJ47.js → registry-api-BvVx0G1o.js} +1 -1
  63. package/dist/gateway/static/root/assets/{remote-access-hub-B1d8pB_y.js → remote-access-hub-fVPQe5YS.js} +1 -1
  64. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Do_iF13W.js → runtime-tools-settings-panel-Czvzsuj_.js} +2 -2
  65. package/dist/gateway/static/root/assets/scenes-page-C0-WHOY3.js +2 -0
  66. package/dist/gateway/static/root/assets/{schema-form-Cfft26Je.js → schema-form-B9Ni5O93.js} +1 -1
  67. package/dist/gateway/static/root/assets/sessions-page-DdXvW09N.js +1 -0
  68. package/dist/gateway/static/root/assets/settings-advanced-gate-BtF83fBY.js +1 -0
  69. package/dist/gateway/static/root/assets/{settings-form-section-iI0MTyuU.js → settings-form-section-jquf1P7n.js} +1 -1
  70. package/dist/gateway/static/root/assets/{settings-page-C2Ka9oJm.js → settings-page-DPomsvba.js} +1 -1
  71. package/dist/gateway/static/root/assets/{setup-status-panel-nnmS_p5h.js → setup-status-panel-BvVlqpHf.js} +1 -1
  72. package/dist/gateway/static/root/assets/{share-preview-page-D0Knvtlp.js → share-preview-page-b9DI0N1J.js} +1 -1
  73. package/dist/gateway/static/root/assets/shares-settings-R_qwc4DN.js +1 -0
  74. package/dist/gateway/static/root/assets/{skill-api-BuZKcy9b.js → skill-api-Bu7-3w-L.js} +1 -1
  75. package/dist/gateway/static/root/assets/skill-reload-api-CNJAQ_e-.js +1 -0
  76. package/dist/gateway/static/root/assets/{skills-page-DcxWxIrR.js → skills-page-D7XPEQu_.js} +1 -1
  77. package/dist/gateway/static/root/assets/{system-settings-panel-CMG0ZAsd.js → system-settings-panel-BwFR0Uci.js} +1 -1
  78. package/dist/gateway/static/root/assets/task-detail-page-PFjGW2g1.js +1 -0
  79. package/dist/gateway/static/root/assets/{tunnel-api-DGYA6GyO.js → tunnel-api-PfucxMP3.js} +1 -1
  80. package/dist/gateway/static/root/assets/usage-page-t_zdQHcy.js +1 -0
  81. package/dist/gateway/static/root/assets/{use-autosave-CDemMoSX.js → use-autosave-DLyy2wHz.js} +1 -1
  82. package/dist/gateway/static/root/assets/user-model-page-OyfPVfB9.js +2 -0
  83. package/dist/gateway/static/root/assets/{voice-api-key-field-CXArY4t5.js → voice-api-key-field-CQDY5EBK.js} +1 -1
  84. package/dist/gateway/static/root/assets/{voice-config-api-ujEySjyc.js → voice-config-api-Bwy3Al3J.js} +1 -1
  85. package/dist/gateway/static/root/assets/{work-discovery-overlay-Dk5KsKOm.js → work-discovery-overlay-CJzqJ47I.js} +1 -1
  86. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DNpdaI-2.js → workflow-run-setup-panel-sCOk-esV.js} +2 -2
  87. package/dist/gateway/static/root/assets/workflows-page-DYBGjN7C.js +6 -0
  88. package/dist/gateway/static/root/index.html +9 -9
  89. package/dist/package.js +1 -1
  90. package/dist/packages/gateway-contract/src/automations.js +59 -14
  91. package/dist/packages/gateway-contract/src/capabilities.js +106 -8
  92. package/dist/packages/gateway-contract/src/index.js +2 -0
  93. package/dist/packages/gateway-contract/src/scenes.js +7 -6
  94. package/dist/packages/gateway-contract/src/sessions.js +2 -1
  95. package/dist/packages/gateway-contract/src/usage.js +6 -0
  96. package/dist/src/agent/agent-manager.js +13 -7
  97. package/dist/src/agent/background-review/run-background-review.js +7 -2
  98. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +1 -1
  99. package/dist/src/agent/embedded/run-turn.js +7 -1
  100. package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
  101. package/dist/src/agent/external-tools/gateway-tools.d.ts +2 -1
  102. package/dist/src/agent/external-tools/gateway-tools.js +44 -11
  103. package/dist/src/agent/external-tools/index.js +1 -1
  104. package/dist/src/agent/image/tool-model-config.js +1 -1
  105. package/dist/src/agent/image/understanding/pi-ai-provider.js +1 -1
  106. package/dist/src/agent/memory/compaction.js +4 -0
  107. package/dist/src/agent/orchestration/agent-orchestrator.js +0 -21
  108. package/dist/src/agent/service/btw-query.js +8 -2
  109. package/dist/src/agent/service.js +3 -3
  110. package/dist/src/agent/skills/filesystem-watcher.js +1 -1
  111. package/dist/src/agent/skills/hub-pull.js +2 -2
  112. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +1 -1
  113. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +1 -1
  114. package/dist/src/agent/tasks/task-judge-service.js +4 -0
  115. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  116. package/dist/src/agent/tool-manuals/xopc-use.js +5 -4
  117. package/dist/src/agent/tools/automation-tool.d.ts +4 -1
  118. package/dist/src/agent/tools/automation-tool.js +42 -4
  119. package/dist/src/agent/tools/session-search-tool.js +1 -1
  120. package/dist/src/agent/tools/web-extract.js +1 -1
  121. package/dist/src/agent/tools/xopc-use-tool.js +50 -9
  122. package/dist/src/agent-catalog/capabilities.js +2 -2
  123. package/dist/src/ai-assist/text-assist.js +5 -1
  124. package/dist/src/auth/credentials.js +1 -1
  125. package/dist/src/auth/oauth-provider-lock.js +1 -1
  126. package/dist/src/auth/sync-provider-auth.js +1 -1
  127. package/dist/src/automations/api/routes.js +65 -0
  128. package/dist/src/automations/capabilities/drafts.js +1 -1
  129. package/dist/src/automations/capabilities/read.js +24 -0
  130. package/dist/src/automations/capabilities/write.d.ts +69 -14
  131. package/dist/src/automations/capabilities/write.js +78 -5
  132. package/dist/src/automations/delivery/delivery-router.d.ts +50 -0
  133. package/dist/src/automations/delivery/delivery-router.js +318 -0
  134. package/dist/src/automations/delivery/index.d.ts +1 -0
  135. package/dist/src/automations/delivery/index.js +2 -0
  136. package/dist/src/automations/domain/defaults.d.ts +0 -1
  137. package/dist/src/automations/domain/defaults.js +2 -2
  138. package/dist/src/automations/domain/index.js +2 -2
  139. package/dist/src/automations/domain/types.d.ts +180 -7
  140. package/dist/src/automations/domain/validation.d.ts +172 -22
  141. package/dist/src/automations/domain/validation.js +82 -13
  142. package/dist/src/automations/draft/automation-draft-prompt.js +3 -4
  143. package/dist/src/automations/draft/automation-draft-service.js +6 -0
  144. package/dist/src/automations/draft/automation-draft-validator.d.ts +31 -3
  145. package/dist/src/automations/draft/automation-draft-validator.js +5 -4
  146. package/dist/src/automations/events/event-catalog.d.ts +14 -0
  147. package/dist/src/automations/events/event-catalog.js +117 -0
  148. package/dist/src/automations/events/event-dispatcher.d.ts +27 -0
  149. package/dist/src/automations/events/event-dispatcher.js +140 -0
  150. package/dist/src/automations/events/event-repository.d.ts +59 -0
  151. package/dist/src/automations/events/event-repository.js +361 -0
  152. package/dist/src/automations/events/index.d.ts +3 -0
  153. package/dist/src/automations/events/index.js +4 -0
  154. package/dist/src/automations/index.d.ts +3 -1
  155. package/dist/src/automations/index.js +9 -3
  156. package/dist/src/automations/service/action-executor.d.ts +20 -1
  157. package/dist/src/automations/service/action-executor.js +80 -24
  158. package/dist/src/automations/service/automation-service.d.ts +21 -4
  159. package/dist/src/automations/service/automation-service.js +150 -100
  160. package/dist/src/automations/storage/automation-repository.js +7 -7
  161. package/dist/src/automations/storage/automation-run-repository.d.ts +1 -0
  162. package/dist/src/automations/storage/automation-run-repository.js +26 -1
  163. package/dist/src/automations/storage/index.js +2 -2
  164. package/dist/src/automations/webhook-secrets.d.ts +1 -0
  165. package/dist/src/automations/webhook-secrets.js +16 -0
  166. package/dist/src/bootstrap/application-state.js +1 -1
  167. package/dist/src/capabilities/runtime/dispatcher.js +1 -1
  168. package/dist/src/capabilities/runtime/product.js +1 -1
  169. package/dist/src/capabilities/store-connector.d.ts +17 -1
  170. package/dist/src/capabilities/store-connector.js +69 -3
  171. package/dist/src/chat-commands/agent-edit.js +1 -1
  172. package/dist/src/chat-commands/builtins/config.js +1 -1
  173. package/dist/src/cli/commands/agent.js +1 -1
  174. package/dist/src/cli/commands/agents.js +1 -1
  175. package/dist/src/cli/commands/connectors.js +4 -3
  176. package/dist/src/cli/commands/doctor/checks/automation-integrity.d.ts +2 -0
  177. package/dist/src/cli/commands/doctor/checks/automation-integrity.js +55 -0
  178. package/dist/src/cli/commands/doctor/checks/database-relations.d.ts +2 -0
  179. package/dist/src/cli/commands/doctor/checks/database-relations.js +81 -0
  180. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  181. package/dist/src/cli/commands/doctor/flow.js +5 -1
  182. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  183. package/dist/src/cli/commands/models.js +1 -1
  184. package/dist/src/cli/commands/onboard/model.js +2 -2
  185. package/dist/src/cli/commands/skills.js +1 -1
  186. package/dist/src/cli/utils/init-workspace-core.js +1 -1
  187. package/dist/src/config/index.js +4 -4
  188. package/dist/src/config/loader.js +2 -2
  189. package/dist/src/config/models-json.js +1 -1
  190. package/dist/src/config/schema.d.ts +4 -0
  191. package/dist/src/config/schema.js +5 -1
  192. package/dist/src/connectors/approval-resume.js +1 -1
  193. package/dist/src/connectors/cli/store.js +1 -1
  194. package/dist/src/connectors/composio-backends.js +14 -4
  195. package/dist/src/connectors/composio-managed-events.d.ts +5 -2
  196. package/dist/src/connectors/composio-managed-events.js +4 -1
  197. package/dist/src/connectors/connection-recovery-service.d.ts +2 -1
  198. package/dist/src/connectors/connection-recovery-service.js +89 -4
  199. package/dist/src/discussions/analyzer.js +4 -4
  200. package/dist/src/extensions/agent-plugins/validation.js +1 -1
  201. package/dist/src/extensions/update.js +1 -1
  202. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  203. package/dist/src/gateway/agents-admin.js +2 -2
  204. package/dist/src/gateway/file-path-classifier.js +1 -1
  205. package/dist/src/gateway/home-intelligence-automation-reconciler.d.ts +3 -0
  206. package/dist/src/gateway/home-intelligence-automation-reconciler.js +52 -0
  207. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  208. package/dist/src/gateway/hono/routes/capabilities.js +1 -1
  209. package/dist/src/gateway/hono/routes/config-patch/misc.js +18 -4
  210. package/dist/src/gateway/hono/routes/connection-waits.js +3 -2
  211. package/dist/src/gateway/hono/routes/home.js +0 -1
  212. package/dist/src/gateway/hono/routes/lazy-bundles.js +14 -1
  213. package/dist/src/gateway/hono/routes/notes.js +2 -2
  214. package/dist/src/gateway/hono/routes/projects.js +2 -2
  215. package/dist/src/gateway/hono/routes/public-gateway.js +93 -3
  216. package/dist/src/gateway/hono/routes/scenes.js +57 -41
  217. package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
  218. package/dist/src/gateway/hono/routes/sessions.js +15 -0
  219. package/dist/src/gateway/hono/routes/tasks.js +1 -1
  220. package/dist/src/gateway/hono/routes/update.js +6 -1
  221. package/dist/src/gateway/hono/routes/usage.d.ts +3 -0
  222. package/dist/src/gateway/hono/routes/usage.js +61 -0
  223. package/dist/src/gateway/hono/routes/voice.js +1 -1
  224. package/dist/src/gateway/image-generation-setup.js +2 -2
  225. package/dist/src/gateway/lock.js +1 -1
  226. package/dist/src/gateway/memory-maintenance-automation-reconciler.js +21 -15
  227. package/dist/src/gateway/scenes/host.js +27 -14
  228. package/dist/src/gateway/scenes/slackThreadSource.d.ts +2 -2
  229. package/dist/src/gateway/security/gateway-scopes.js +1 -0
  230. package/dist/src/gateway/service/active-execution.d.ts +19 -0
  231. package/dist/src/gateway/service/active-execution.js +16 -0
  232. package/dist/src/gateway/service/agent-runner.d.ts +4 -0
  233. package/dist/src/gateway/service/agent-runner.js +19 -1
  234. package/dist/src/gateway/service/marketplace-service.js +2 -2
  235. package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -0
  236. package/dist/src/gateway/service/run-gateway-agent.js +9 -1
  237. package/dist/src/gateway/service/sessions-api.d.ts +13 -0
  238. package/dist/src/gateway/service/sessions-api.js +23 -0
  239. package/dist/src/gateway/service.d.ts +7 -3
  240. package/dist/src/gateway/service.js +108 -89
  241. package/dist/src/gateway/side-chat/run-service.js +10 -7
  242. package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
  243. package/dist/src/home-intelligence/generator.js +4 -1
  244. package/dist/src/home-intelligence/host.d.ts +1 -1
  245. package/dist/src/home-intelligence/host.js +2 -10
  246. package/dist/src/home-intelligence/notification.js +1 -1
  247. package/dist/src/home-intelligence/repository.d.ts +1 -1
  248. package/dist/src/infra/domain-outbox-dispatcher.d.ts +0 -3
  249. package/dist/src/infra/domain-outbox-dispatcher.js +15 -7
  250. package/dist/src/infra/update-check.d.ts +8 -4
  251. package/dist/src/infra/update-check.js +43 -41
  252. package/dist/src/infra/update-startup.d.ts +7 -1
  253. package/dist/src/infra/update-startup.js +15 -6
  254. package/dist/src/local-apps/service.js +2 -2
  255. package/dist/src/memory-maintenance/index.js +2 -2
  256. package/dist/src/memory-maintenance/schedule.d.ts +0 -3
  257. package/dist/src/memory-maintenance/schedule.js +1 -8
  258. package/dist/src/notes/service.js +2 -3
  259. package/dist/src/projects/project-service.js +1 -2
  260. package/dist/src/projects/project-skill-service.js +2 -2
  261. package/dist/src/providers/model-call.d.ts +3 -2
  262. package/dist/src/providers/model-call.js +30 -5
  263. package/dist/src/providers/model-catalog-persistence.js +1 -1
  264. package/dist/src/scenes/activationAdapter.d.ts +19 -0
  265. package/dist/src/scenes/activationAdapter.js +1 -0
  266. package/dist/src/scenes/agentExecutor.js +3 -10
  267. package/dist/src/scenes/contracts.d.ts +3 -9
  268. package/dist/src/scenes/contracts.js +1 -0
  269. package/dist/src/scenes/execution.d.ts +9 -3
  270. package/dist/src/scenes/execution.js +12 -11
  271. package/dist/src/scenes/httpServices.d.ts +5 -2
  272. package/dist/src/scenes/mailContext.d.ts +4 -0
  273. package/dist/src/scenes/mailContext.js +9 -0
  274. package/dist/src/scenes/maintenance.js +1 -5
  275. package/dist/src/scenes/metrics.d.ts +0 -6
  276. package/dist/src/scenes/metrics.js +0 -11
  277. package/dist/src/scenes/registry.d.ts +11 -0
  278. package/dist/src/scenes/registry.js +28 -0
  279. package/dist/src/scenes/repository.d.ts +6 -3
  280. package/dist/src/scenes/repository.js +43 -5
  281. package/dist/src/scenes/service.d.ts +2 -1
  282. package/dist/src/scenes/service.js +9 -7
  283. package/dist/src/scenes/taskFollowUp/contracts.d.ts +37 -7
  284. package/dist/src/scenes/taskFollowUp/contracts.js +36 -17
  285. package/dist/src/scenes/taskFollowUp/service.d.ts +35 -7
  286. package/dist/src/scenes/taskFollowUp/service.js +86 -28
  287. package/dist/src/scenes/templates.d.ts +2 -2
  288. package/dist/src/scenes/userNotes.d.ts +3 -0
  289. package/dist/src/scenes/userNotes.js +6 -0
  290. package/dist/src/session/client-history.d.ts +3 -0
  291. package/dist/src/session/client-history.js +10 -5
  292. package/dist/src/session/manager.d.ts +1 -0
  293. package/dist/src/session/resolve-session.js +4 -3
  294. package/dist/src/session/session-title.js +1 -1
  295. package/dist/src/session/store.d.ts +1 -0
  296. package/dist/src/session/store.js +3 -2
  297. package/dist/src/storage/sqlite/ai-usage-repository.d.ts +137 -0
  298. package/dist/src/storage/sqlite/ai-usage-repository.js +175 -0
  299. package/dist/src/storage/sqlite/connector-account-repository.js +7 -5
  300. package/dist/src/storage/sqlite/connector-repository.js +36 -34
  301. package/dist/src/storage/sqlite/index.d.ts +2 -2
  302. package/dist/src/storage/sqlite/index.js +3 -3
  303. package/dist/src/storage/sqlite/migrations/208_automation_management.sql +2 -0
  304. package/dist/src/storage/sqlite/migrations/209_automation_event_hub.sql +48 -0
  305. package/dist/src/storage/sqlite/migrations/210_remove_legacy_automation_timeout.sql +14 -0
  306. package/dist/src/storage/sqlite/migrations/211_automation_result_deliveries.sql +16 -0
  307. package/dist/src/storage/sqlite/migrations/212_automation_delivery_policy.sql +30 -0
  308. package/dist/src/storage/sqlite/migrations/213_automation_reliability_contract.sql +188 -0
  309. package/dist/src/storage/sqlite/migrations/214_ai_usage_ledger.sql +41 -0
  310. package/dist/src/storage/sqlite/migrations/215_scene_execution_adapters.sql +6 -0
  311. package/dist/src/storage/sqlite/migrations/216_remove_scene_model_usage.sql +1 -0
  312. package/dist/src/storage/sqlite/migrations/217_remove_legacy_memory_tables.sql +4 -0
  313. package/dist/src/storage/sqlite/migrations/218_core_relation_indexes.sql +26 -0
  314. package/dist/src/storage/sqlite/migrations/219_json_contracts.sql +123 -0
  315. package/dist/src/storage/sqlite/migrations/220_normalize_timestamps.sql +339 -0
  316. package/dist/src/storage/sqlite/migrations/221_ai_usage_retention_index.sql +2 -0
  317. package/dist/src/storage/sqlite/migrations/222_session_config_authority.sql +13 -0
  318. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  319. package/dist/src/storage/sqlite/migrations/runner.js +4 -4
  320. package/dist/src/storage/sqlite/row-mappers.d.ts +3 -7
  321. package/dist/src/storage/sqlite/row-mappers.js +6 -6
  322. package/dist/src/storage/sqlite/scenes-schema.d.ts +1 -1
  323. package/dist/src/storage/sqlite/scenes-schema.js +0 -1
  324. package/dist/src/storage/sqlite/schema.js +1 -1
  325. package/dist/src/storage/sqlite/schema.sql +0 -52
  326. package/dist/src/storage/sqlite/schemas/scenes.sql +0 -7
  327. package/dist/src/storage/sqlite/session-input-repository.d.ts +8 -0
  328. package/dist/src/storage/sqlite/session-input-repository.js +18 -1
  329. package/dist/src/storage/sqlite/session-read-repository.d.ts +1 -1
  330. package/dist/src/storage/sqlite/session-read-repository.js +0 -1
  331. package/dist/src/storage/sqlite/session-repository.d.ts +0 -4
  332. package/dist/src/storage/sqlite/session-repository.js +8 -18
  333. package/dist/src/storage/sqlite/timestamps.d.ts +4 -0
  334. package/dist/src/storage/sqlite/timestamps.js +20 -0
  335. package/dist/src/storage/sqlite/transcript-repository.d.ts +1 -0
  336. package/dist/src/storage/sqlite/transcript-repository.js +23 -15
  337. package/dist/src/storage/sqlite/user-trust-repository.js +4 -2
  338. package/dist/src/tasks/capabilities/read.js +2 -2
  339. package/dist/src/tasks/capabilities/write.d.ts +1 -1
  340. package/dist/src/tasks/home-query-service.js +4 -3
  341. package/dist/src/tasks/task-contract-planner.js +1 -1
  342. package/dist/src/tui/backends/embedded-backend.js +2 -2
  343. package/dist/src/tui/tui-commands.js +1 -1
  344. package/dist/src/tui/tui-startup-resources.js +1 -1
  345. package/dist/src/tui/tui.js +1 -1
  346. package/dist/src/usage/cost.d.ts +4 -0
  347. package/dist/src/usage/cost.js +28 -0
  348. package/dist/src/usage/recorder.d.ts +13 -0
  349. package/dist/src/usage/recorder.js +117 -0
  350. package/dist/src/usage/scenario-registry.d.ts +8 -0
  351. package/dist/src/usage/scenario-registry.js +117 -0
  352. package/dist/src/usage/types.d.ts +55 -0
  353. package/dist/src/usage/types.js +1 -0
  354. package/dist/src/user-context/config.d.ts +9 -0
  355. package/dist/src/user-context/config.js +13 -4
  356. package/dist/src/voice/realtime/persona-context.js +1 -1
  357. package/dist/src/voice/tts/summarize.js +1 -1
  358. package/dist/src/work-discovery/analyzer.js +2 -2
  359. package/dist/src/work-discovery/investigator.js +1 -1
  360. package/dist/src/workflows/service/workflow-run-service.js +15 -2
  361. package/package.json +6 -6
  362. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DgP5DEJF.js +0 -1
  363. package/dist/gateway/static/root/assets/agents-Bh4XNLyk.js +0 -70
  364. package/dist/gateway/static/root/assets/automations-workspace-C7VS-yb7.js +0 -7
  365. package/dist/gateway/static/root/assets/browser-settings-page-CC43CC43.js +0 -3
  366. package/dist/gateway/static/root/assets/capabilities-sAZT4brT.js +0 -1
  367. package/dist/gateway/static/root/assets/capabilities-settings-panel-DPETQOfF.js +0 -8
  368. package/dist/gateway/static/root/assets/channels-CwA619os.js +0 -1
  369. package/dist/gateway/static/root/assets/connectors-page-l7goF6QS.js +0 -2
  370. package/dist/gateway/static/root/assets/home-page-DSaXXoLm.js +0 -1
  371. package/dist/gateway/static/root/assets/index-BEw0xrde.css +0 -1
  372. package/dist/gateway/static/root/assets/index-D99vN3es.js +0 -121
  373. package/dist/gateway/static/root/assets/local-app-workbench-page-rH33N8I9.js +0 -1
  374. package/dist/gateway/static/root/assets/management-settings-RFDLaquR.js +0 -1
  375. package/dist/gateway/static/root/assets/messages-fmf0dnr4.js +0 -3
  376. package/dist/gateway/static/root/assets/note-detail-panel-DI7CIjmM.js +0 -5
  377. package/dist/gateway/static/root/assets/notes-page-BkqnU-Jh.js +0 -8
  378. package/dist/gateway/static/root/assets/project-detail-page-BvvcTH2F.js +0 -1
  379. package/dist/gateway/static/root/assets/scenes-page-DK316w9a.js +0 -2
  380. package/dist/gateway/static/root/assets/sessions-page-EIk8iJTK.js +0 -1
  381. package/dist/gateway/static/root/assets/settings-advanced-gate-DcOsdz78.js +0 -1
  382. package/dist/gateway/static/root/assets/shares-settings-BcaxGQLC.js +0 -1
  383. package/dist/gateway/static/root/assets/skill-reload-api-Cb_CUL-U.js +0 -1
  384. package/dist/gateway/static/root/assets/task-detail-page-Cvr1qUTW.js +0 -1
  385. package/dist/gateway/static/root/assets/user-model-page-VXfz3rE7.js +0 -2
  386. package/dist/gateway/static/root/assets/workflows-page-DDNDLdId.js +0 -6
  387. package/dist/src/automations/product-events.d.ts +0 -5
  388. package/dist/src/automations/product-events.js +0 -19
@@ -1,10 +1,65 @@
1
1
  import { getCliAdapter } from "../connectors/cli/adapterRegistry.js";
2
- import { downloadConnectorStoreZipBuffer, fetchStoreConnectorPackageDetail, listConnectorPackages, resolveSkillsStoreBaseUrl } from "../agent/skills/marketplace/adapters/store/store-api-client.js";
2
+ import { listConnectorInstances } from "../connectors/instances.js";
3
3
  import { installConnectorDefinition } from "../connectors/install.js";
4
+ import { downloadConnectorStoreZipBuffer, fetchStoreConnectorPackageDetail, listConnectorPackages, resolveSkillsStoreBaseUrl } from "../agent/skills/marketplace/adapters/store/store-api-client.js";
4
5
  import { createHash } from "node:crypto";
5
6
  import { isIP } from "node:net";
6
7
  import AdmZip from "adm-zip";
7
8
  //#region src/capabilities/store-connector.ts
9
+ const STORE_CONNECTOR_CANDIDATE_PREFIX = "store-connector:";
10
+ function storeConnectorCandidateRef(packageName, version) {
11
+ return `${STORE_CONNECTOR_CANDIDATE_PREFIX}${encodeURIComponent(packageName)}:${encodeURIComponent(version)}`;
12
+ }
13
+ function parseStoreConnectorCandidateRef(ref) {
14
+ if (!ref.startsWith(STORE_CONNECTOR_CANDIDATE_PREFIX)) return void 0;
15
+ const parts = ref.slice(16).split(":");
16
+ if (parts.length !== 2) return void 0;
17
+ try {
18
+ const packageName = decodeURIComponent(parts[0]);
19
+ const version = decodeURIComponent(parts[1]);
20
+ return packageName && version ? {
21
+ packageName,
22
+ version
23
+ } : void 0;
24
+ } catch {
25
+ return;
26
+ }
27
+ }
28
+ function manifestCapabilities(value) {
29
+ if (!value || typeof value !== "object" || Array.isArray(value)) return ["connector.tools"];
30
+ const manifest = value;
31
+ if (!Array.isArray(manifest.provides)) return ["connector.tools"];
32
+ const values = manifest.provides.flatMap((entry) => {
33
+ if (typeof entry === "string" && entry.trim()) return [entry.trim()];
34
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) return [];
35
+ const id = entry.id;
36
+ return typeof id === "string" && id.trim() ? [id.trim()] : [];
37
+ });
38
+ return values.length ? [...new Set(values)].slice(0, 20) : ["connector.tools"];
39
+ }
40
+ async function searchStoreConnectorInstallCandidates(config, query, limit = 5) {
41
+ const result = await listStoreConnectors(config, {
42
+ q: query,
43
+ page: 1,
44
+ pageSize: Math.min(10, Math.max(1, limit)),
45
+ sort: "downloads"
46
+ });
47
+ const installed = new Set(listConnectorInstances(config).map((instance) => instance.connectorId));
48
+ return result.items.filter((item) => item.type === "connector" && !installed.has(item.name) && typeof item.latestVersion === "string" && item.latestVersion).slice(0, limit).map((item) => ({
49
+ candidateRef: storeConnectorCandidateRef(item.name, item.latestVersion),
50
+ source: "store",
51
+ packageName: item.name,
52
+ version: item.latestVersion,
53
+ label: (() => {
54
+ const manifest = item.connectorManifest;
55
+ if (!manifest || typeof manifest !== "object" || Array.isArray(manifest)) return item.name;
56
+ const displayName = manifest.displayName;
57
+ return typeof displayName === "string" && displayName.trim() ? displayName.trim() : item.name;
58
+ })(),
59
+ summary: item.description,
60
+ capabilities: manifestCapabilities(item.connectorManifest)
61
+ }));
62
+ }
8
63
  function asRecord(value, label) {
9
64
  if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error(`${label} must be an object.`);
10
65
  return value;
@@ -308,15 +363,26 @@ async function getStoreConnectorInstallPlan(config, packageName, version) {
308
363
  version: detail.latestVersion.version,
309
364
  permissions: definition.permissions ?? {},
310
365
  requiresRestart: false,
366
+ reviewHash: createHash("sha256").update(JSON.stringify({
367
+ packageName: detail.name,
368
+ version: detail.latestVersion.version,
369
+ sha256: actualSha256,
370
+ permissions: definition.permissions ?? {},
371
+ capabilities: definition.capabilities,
372
+ auth: definition.auth,
373
+ setup: definition.setup,
374
+ runtime: definition.runtime
375
+ })).digest("hex"),
311
376
  definition
312
377
  };
313
378
  }
314
- async function installStoreConnector(config, packageName, input, version) {
379
+ async function installStoreConnector(config, packageName, input, version, reviewHash) {
315
380
  const plan = await getStoreConnectorInstallPlan(config, packageName, version);
381
+ if (!reviewHash || reviewHash !== plan.reviewHash) throw new Error(reviewHash ? "Connector package changed after review; inspect it again." : "Connector capability review is required.");
316
382
  return {
317
383
  instance: await installConnectorDefinition(config, plan.definition, input),
318
384
  plan
319
385
  };
320
386
  }
321
387
  //#endregion
322
- export { getStoreConnectorInstallPlan, installStoreConnector, listStoreConnectors };
388
+ export { getStoreConnectorInstallPlan, installStoreConnector, listStoreConnectors, parseStoreConnectorCandidateRef, searchStoreConnectorInstallCandidates, storeConnectorCandidateRef };
@@ -1,7 +1,7 @@
1
1
  import { normalizeAgentId } from "../agent-catalog/id.js";
2
2
  import { init_agent_scope, resolveAgentProfileDir } from "../agent/agent-scope.js";
3
- import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
4
3
  import { init_agent_session_key, resolveAgentIdFromConversationId } from "../routing/agent-session-key.js";
4
+ import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
5
5
  import { commandRegistry } from "./registry.js";
6
6
  import { join } from "node:path";
7
7
  import { readFile } from "node:fs/promises";
@@ -1,7 +1,7 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { init_paths, resolveConfigPath } from "../../config/paths.js";
4
3
  import { ConfigSchema, init_schema } from "../../config/schema.js";
4
+ import { init_paths, resolveConfigPath } from "../../config/paths.js";
5
5
  import { commandRegistry } from "../registry.js";
6
6
  import { parseConfigValue } from "../config-value.js";
7
7
  import { getConfigValueAtPath, parseConfigPath, setConfigValueAtPath, unsetConfigValueAtPath } from "../config-paths.js";
@@ -1,7 +1,7 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
4
3
  import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
4
+ import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
5
5
  import { init_agent_session_key, resolveAgentMainConversationId } from "../../routing/agent-session-key.js";
6
6
  import { ExtensionLoader } from "../../extensions/loader.js";
7
7
  import "../../extensions/index.js";
@@ -1,8 +1,8 @@
1
1
  import { normalizeAgentId, validateAgentIdForNewAgent } from "../../agent-catalog/id.js";
2
2
  import { AgentCatalogRepository, init_repository } from "../../agent-catalog/repository.js";
3
3
  import { init_agent_scope, resolveAgentDir, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../../agent/agent-scope.js";
4
- import { AgentCatalogService } from "../../agent-catalog/service.js";
5
4
  import { resolveEffectiveAgentConfigForAgent } from "../../config/agent-profile.js";
5
+ import { AgentCatalogService } from "../../agent-catalog/service.js";
6
6
  import { colors } from "../utils/colors.js";
7
7
  //#region src/cli/commands/agents.ts
8
8
  init_repository();
@@ -1,5 +1,5 @@
1
- import { loadConfig, saveConfig } from "../../config/loader.js";
2
1
  import { getStoreConnectorInstallPlan, installStoreConnector, listStoreConnectors } from "../../capabilities/store-connector.js";
2
+ import { loadConfig, saveConfig } from "../../config/loader.js";
3
3
  import { register } from "../registry.js";
4
4
  import { confirm } from "@inquirer/prompts";
5
5
  import { Command } from "commander";
@@ -52,7 +52,8 @@ function createConnectorsCommand(ctx) {
52
52
  command.command("install <packageName>").description("Verify and install a connector capability from xopc-store").option("--version <version>", "Install an exact version").option("--secret <KEY=VALUE>", "Provide a required secret; repeat for multiple values", (value, previous = []) => [...previous, value], []).option("--config-value <KEY=VALUE>", "Provide a connector config value; repeat for multiple values", (value, previous = []) => [...previous, value], []).option("-y, --yes", "Skip the interactive confirmation", false).action(async (packageName, options) => {
53
53
  try {
54
54
  const config = loadConfig(ctx.configPath);
55
- printPlan(await getStoreConnectorInstallPlan(config, packageName, options.version));
55
+ const plan = await getStoreConnectorInstallPlan(config, packageName, options.version);
56
+ printPlan(plan);
56
57
  if (!options.yes && process.stdin.isTTY) {
57
58
  if (!await confirm({
58
59
  message: "Install this connector?",
@@ -65,7 +66,7 @@ function createConnectorsCommand(ctx) {
65
66
  const { instance } = await installStoreConnector(config, packageName, {
66
67
  secrets: parsePairs(options.secret, "--secret"),
67
68
  config: parsePairs(options.configValue, "--config-value")
68
- }, options.version);
69
+ }, options.version, plan.reviewHash);
69
70
  await saveConfig(config, ctx.configPath);
70
71
  console.log(`Installed ${instance.displayName} (${instance.instanceId}).`);
71
72
  } catch (error) {
@@ -0,0 +1,2 @@
1
+ import type { CheckResult, DoctorContext } from '../types.js';
2
+ export declare function checkAutomationIntegrity(ctx: DoctorContext): Promise<CheckResult>;
@@ -0,0 +1,55 @@
1
+ import { requireXopcDatabase } from "../../../../storage/sqlite/connection.js";
2
+ import { getSqliteDatabase } from "../../../../storage/sqlite/transaction.js";
3
+ import { init_sqlite } from "../../../../storage/sqlite/index.js";
4
+ import { existsSync } from "node:fs";
5
+ //#region src/cli/commands/doctor/checks/automation-integrity.ts
6
+ init_sqlite();
7
+ async function checkAutomationIntegrity(ctx) {
8
+ if (!ctx.options.deep) return {
9
+ id: "automation-integrity",
10
+ label: "Automations",
11
+ status: "skip",
12
+ message: "Deep mode off; automation scan skipped.",
13
+ hints: ["Run: xopc doctor --deep"]
14
+ };
15
+ if (!existsSync(ctx.configPath)) return {
16
+ id: "automation-integrity",
17
+ label: "Automations",
18
+ status: "skip",
19
+ message: "No config file; skipped.",
20
+ hints: []
21
+ };
22
+ requireXopcDatabase();
23
+ const db = getSqliteDatabase();
24
+ const issues = [];
25
+ const orphanResults = db.prepare(`SELECT r.run_id FROM automation_results r
26
+ LEFT JOIN automation_runs ar ON ar.run_id = r.run_id WHERE ar.run_id IS NULL LIMIT 20`).all();
27
+ for (const row of orphanResults) issues.push(`orphan result ${row.run_id}`);
28
+ const orphanResultDeliveries = db.prepare(`SELECT d.run_id, d.destination_key FROM automation_result_deliveries d
29
+ LEFT JOIN automation_results r ON r.run_id = d.run_id WHERE r.run_id IS NULL LIMIT 20`).all();
30
+ for (const row of orphanResultDeliveries) issues.push(`orphan result delivery ${row.run_id}/${row.destination_key}`);
31
+ const orphanEventRuns = db.prepare(`SELECT d.event_id, d.automation_id, d.run_id FROM automation_event_deliveries d
32
+ LEFT JOIN automation_runs r ON r.run_id = d.run_id
33
+ WHERE d.run_id IS NOT NULL AND r.run_id IS NULL LIMIT 20`).all();
34
+ for (const row of orphanEventRuns) issues.push(`orphan event delivery run ${row.event_id}/${row.automation_id}/${row.run_id}`);
35
+ const expiredLeases = db.prepare(`SELECT
36
+ (SELECT COUNT(*) FROM automation_events WHERE projection_status = 'projecting' AND projection_lease_until_ms <= ?) +
37
+ (SELECT COUNT(*) FROM automation_event_deliveries WHERE lease_owner IS NOT NULL AND lease_until_ms <= ?) +
38
+ (SELECT COUNT(*) FROM automation_result_deliveries WHERE status = 'delivering' AND lease_until_ms <= ?) AS count`).get(Date.now(), Date.now(), Date.now());
39
+ if (expiredLeases.count > 0) issues.push(`${expiredLeases.count} expired automation lease(s) awaiting recovery`);
40
+ return issues.length === 0 ? {
41
+ id: "automation-integrity",
42
+ label: "Automations",
43
+ status: "pass",
44
+ message: "Automation state graph OK.",
45
+ hints: []
46
+ } : {
47
+ id: "automation-integrity",
48
+ label: "Automations",
49
+ status: "warn",
50
+ message: `${issues.length} automation integrity issue(s).`,
51
+ hints: issues
52
+ };
53
+ }
54
+ //#endregion
55
+ export { checkAutomationIntegrity };
@@ -0,0 +1,2 @@
1
+ import type { CheckResult, DoctorContext } from '../types.js';
2
+ export declare function checkDatabaseRelations(ctx: DoctorContext): Promise<CheckResult>;
@@ -0,0 +1,81 @@
1
+ import { requireXopcDatabase } from "../../../../storage/sqlite/connection.js";
2
+ import { getSqliteDatabase } from "../../../../storage/sqlite/transaction.js";
3
+ import { init_sqlite } from "../../../../storage/sqlite/index.js";
4
+ import { existsSync } from "node:fs";
5
+ //#region src/cli/commands/doctor/checks/database-relations.ts
6
+ init_sqlite();
7
+ const IMPLICIT_RELATION_CHECKS = [
8
+ ["session active transcript", `SELECT COUNT(*) AS count FROM sessions s
9
+ LEFT JOIN transcripts t ON t.transcript_id = s.active_transcript_id
10
+ WHERE t.transcript_id IS NULL`],
11
+ ["session project", `SELECT COUNT(*) AS count FROM sessions s
12
+ LEFT JOIN projects p ON p.project_id = s.project_id
13
+ WHERE s.project_id IS NOT NULL AND p.project_id IS NULL`],
14
+ ["queued session input", `SELECT COUNT(*) AS count FROM session_inputs i
15
+ LEFT JOIN sessions s ON s.conversation_id = i.conversation_id
16
+ WHERE s.conversation_id IS NULL`],
17
+ ["discussion action task", `SELECT COUNT(*) AS count FROM discussion_action_tasks a
18
+ LEFT JOIN tasks t ON t.task_id = a.task_id
19
+ WHERE t.task_id IS NULL`],
20
+ ["workflow event run", `SELECT COUNT(*) AS count FROM workflow_events e
21
+ LEFT JOIN workflow_runs r ON r.run_id = e.run_id
22
+ WHERE r.run_id IS NULL`],
23
+ ["local app active release", `SELECT COUNT(*) AS count FROM local_apps a
24
+ LEFT JOIN local_app_releases r ON r.release_id = a.active_release_id
25
+ WHERE a.active_release_id IS NOT NULL AND r.release_id IS NULL`],
26
+ ["automation run owner", `SELECT COUNT(*) AS count FROM automation_runs r
27
+ LEFT JOIN automations a ON a.automation_id = r.automation_id
28
+ WHERE a.automation_id IS NULL`],
29
+ ["automation run event", `SELECT COUNT(*) AS count FROM automation_run_events e
30
+ LEFT JOIN automation_runs r ON r.run_id = e.run_id
31
+ WHERE r.run_id IS NULL`],
32
+ ["automation event delivery owner", `SELECT COUNT(*) AS count FROM automation_event_deliveries d
33
+ LEFT JOIN automations a ON a.automation_id = d.automation_id
34
+ WHERE a.automation_id IS NULL`]
35
+ ];
36
+ async function checkDatabaseRelations(ctx) {
37
+ if (!ctx.options.deep) return {
38
+ id: "database-relations",
39
+ label: "Database relations",
40
+ status: "skip",
41
+ message: "Deep mode off; relation scan skipped.",
42
+ hints: ["Run: xopc doctor --deep"]
43
+ };
44
+ if (!existsSync(ctx.configPath)) return {
45
+ id: "database-relations",
46
+ label: "Database relations",
47
+ status: "skip",
48
+ message: "No config file; skipped.",
49
+ hints: []
50
+ };
51
+ requireXopcDatabase();
52
+ const db = getSqliteDatabase();
53
+ const issues = [];
54
+ const tables = new Set(db.prepare(`SELECT name FROM sqlite_master WHERE type = 'table'`).all().map((row) => row.name));
55
+ for (const table of tables) {
56
+ const escaped = table.replaceAll("\"", "\"\"");
57
+ const foreignKeys = db.prepare(`PRAGMA foreign_key_list("${escaped}")`).all();
58
+ for (const foreignKey of foreignKeys) if (!tables.has(foreignKey.table)) issues.push(`missing foreign-key target ${table} -> ${foreignKey.table}`);
59
+ }
60
+ const violations = db.prepare("PRAGMA foreign_key_check").all();
61
+ for (const violation of violations.slice(0, 20)) issues.push(`foreign-key violation ${violation.table} row ${violation.rowid ?? "?"} -> ${violation.parent}`);
62
+ for (const [label, sql] of IMPLICIT_RELATION_CHECKS) {
63
+ const row = db.prepare(sql).get();
64
+ if (row.count > 0) issues.push(`${row.count} orphan ${label} record(s)`);
65
+ }
66
+ return issues.length === 0 ? {
67
+ id: "database-relations",
68
+ label: "Database relations",
69
+ status: "pass",
70
+ message: "Foreign-key and core implicit relations OK.",
71
+ hints: []
72
+ } : {
73
+ id: "database-relations",
74
+ label: "Database relations",
75
+ status: "warn",
76
+ message: `${issues.length} database relation issue(s).`,
77
+ hints: issues.slice(0, 20)
78
+ };
79
+ }
80
+ //#endregion
81
+ export { checkDatabaseRelations };
@@ -53,7 +53,7 @@ async function checkDatabaseSchema(ctx) {
53
53
  id: "database-schema",
54
54
  label: "Database schema",
55
55
  status: "pass",
56
- message: `SQLite schema v${status.dbVersion} (current release v207).`,
56
+ message: `SQLite schema v${status.dbVersion} (current release v222).`,
57
57
  hints: []
58
58
  };
59
59
  }
@@ -3,6 +3,7 @@ import { checkNodeVersion } from "./checks/node-version.js";
3
3
  import { checkConfigHealth } from "./checks/config-health.js";
4
4
  import { checkStateIntegrity } from "./checks/state-integrity.js";
5
5
  import { checkDatabaseSchema } from "./checks/database-schema.js";
6
+ import { checkDatabaseRelations } from "./checks/database-relations.js";
6
7
  import { checkProviderAuth } from "./checks/provider-auth.js";
7
8
  import { checkChannelConfig } from "./checks/channel-config.js";
8
9
  import { checkChannelPairingPending } from "./checks/channel-pairing-pending.js";
@@ -16,6 +17,7 @@ import { checkChannelPlugins } from "./checks/channel-plugins.js";
16
17
  import { checkMigrations } from "./checks/migrations.js";
17
18
  import { checkImageProviders } from "./checks/image-providers.js";
18
19
  import { checkToolRuntimes } from "./checks/tool-runtimes.js";
20
+ import { checkAutomationIntegrity } from "./checks/automation-integrity.js";
19
21
  //#region src/cli/commands/doctor/flow.ts
20
22
  const DOCTOR_CHECKS = [
21
23
  checkVersionUpdate,
@@ -25,6 +27,7 @@ const DOCTOR_CHECKS = [
25
27
  checkConfigHealth,
26
28
  checkStateIntegrity,
27
29
  checkDatabaseSchema,
30
+ checkDatabaseRelations,
28
31
  checkProviderAuth,
29
32
  checkImageProviders,
30
33
  checkChannelConfig,
@@ -33,7 +36,8 @@ const DOCTOR_CHECKS = [
33
36
  checkWorkspaceStatus,
34
37
  checkGatewayService,
35
38
  checkGatewayHealth,
36
- checkSessionIntegrity
39
+ checkSessionIntegrity,
40
+ checkAutomationIntegrity
37
41
  ];
38
42
  /**
39
43
  * Headless data collection — used by both CLI and gateway API.
@@ -1,7 +1,7 @@
1
1
  import { init_paths, resolveExtensionsDir } from "../../config/paths.js";
2
+ import { downloadExtensionStoreZipBuffer, resolveExtensionZipDownloadUrl, resolveExtensionsStoreBaseUrl, verifyStoreArtifactSha256 } from "../../agent/skills/marketplace/adapters/store/store-api-client.js";
2
3
  import { computeExtensionDirectoryIntegrity, getExtensionLockfileManager } from "../../extensions/lockfile.js";
3
4
  import { AgentPluginStore } from "../../extensions/agent-plugins/store.js";
4
- import { downloadExtensionStoreZipBuffer, resolveExtensionZipDownloadUrl, resolveExtensionsStoreBaseUrl, verifyStoreArtifactSha256 } from "../../agent/skills/marketplace/adapters/store/store-api-client.js";
5
5
  import { loadConfig } from "../../config/loader.js";
6
6
  import { getContextWithOpts } from "../context.js";
7
7
  import { peekExtensionManifestFromStoreZip } from "../../extensions/install.js";
@@ -1,8 +1,8 @@
1
1
  import { AgentCatalogRepository, init_repository } from "../../agent-catalog/repository.js";
2
- import { AgentCatalogService } from "../../agent-catalog/service.js";
3
2
  import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
4
3
  import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
5
4
  import { getAllModels, getAvailableModels, getConfiguredProviders, getProviderAuthState, getProviderDisplayName, init_providers, isProviderConfigured, providerSupportsApiKey, providerSupportsOAuth, resolveModel } from "../../providers/index.js";
5
+ import { AgentCatalogService } from "../../agent-catalog/service.js";
6
6
  import { loadConfig } from "../../config/loader.js";
7
7
  import { formatExamples, register } from "../registry.js";
8
8
  import { getContextWithOpts } from "../context.js";
@@ -1,12 +1,12 @@
1
1
  import { AgentCatalogRepository, init_repository } from "../../../agent-catalog/repository.js";
2
- import { resolveModelsJsonPath } from "../../../config/paths.js";
3
- import { AgentCatalogService } from "../../../agent-catalog/service.js";
4
2
  import { getAgentDefaultModelRef, init_schema } from "../../../config/schema.js";
3
+ import { resolveModelsJsonPath } from "../../../config/paths.js";
5
4
  import { init_models_json, loadModelsJson, saveModelsJson } from "../../../config/models-json.js";
6
5
  import { getApiKeyFromEnv } from "../../../providers/env-keys.js";
7
6
  import { getModelRegistry } from "../../../providers/model-registry.js";
8
7
  import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
9
8
  import { getAllProviders, getModelsByProvider, getProviderDisplayName, init_providers, providerSupportsApiKey, providerSupportsOAuth } from "../../../providers/index.js";
9
+ import { AgentCatalogService } from "../../../agent-catalog/service.js";
10
10
  import { prepareUpdateGlobalDefaults } from "../../../gateway/global-defaults-admin.js";
11
11
  import { discoverProviderModels, isProviderApiDiscoverable } from "../../../providers/model-discovery.js";
12
12
  import { getXopcCloudCatalogCoordinator } from "../../../providers/xopc-cloud-catalog-coordinator.js";
@@ -1,10 +1,10 @@
1
1
  import { resolveStateDir } from "../../config/paths-state.js";
2
2
  import { init_paths, resolveBundledSkillsDir, resolveSkillsLockPath } from "../../config/paths.js";
3
+ import { loadSkillsLock } from "../../agent/skills/hub-lock.js";
3
4
  import { findInstallSpec, hasBinary, installSkill } from "../../agent/skills/installer.js";
4
5
  import { createSkillConfigManager, isSkillEnabled } from "../../agent/skills/config.js";
5
6
  import { formatScanSummary, scanSkillDirectory } from "../../agent/skills/scanner.js";
6
7
  import { createSkillLoader } from "../../agent/skills/index.js";
7
- import { loadSkillsLock } from "../../agent/skills/hub-lock.js";
8
8
  import { pullSkillFromSource, updateSkillFromLock } from "../../agent/skills/hub-pull.js";
9
9
  import { ProjectTrustStore } from "../../project-trust/trust-store.js";
10
10
  import { loadConfig } from "../../config/loader.js";
@@ -1,6 +1,6 @@
1
1
  import { AgentCatalogRepository, init_repository } from "../../agent-catalog/repository.js";
2
- import { AgentCatalogService } from "../../agent-catalog/service.js";
3
2
  import { ConfigSchema, init_schema } from "../../config/schema.js";
3
+ import { AgentCatalogService } from "../../agent-catalog/service.js";
4
4
  import { assertConfigRewriteSafeForRunningGateway, saveConfig } from "../../config/loader.js";
5
5
  import { ensureStarterAgentsInitialized } from "../../agent/starter-agents.js";
6
6
  import { bootstrapApplicationStateSync } from "../../bootstrap/application-state.js";
@@ -1,13 +1,13 @@
1
1
  import { ENV_VARS, XOPC_DB_FILENAME, resolveHomeDir, resolveStateDir, resolveXopcCloudCatalogCachePath, resolveXopcDatabasePath } from "./paths-state.js";
2
- import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
3
- import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
4
- import { resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
5
- import { FILENAMES, WORKSPACE_FILES, existsSync, hasBundledExtensionManifest, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMcpOAuthPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
6
2
  import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
7
3
  import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
8
4
  import { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewayScenesConfigSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GatewayWebchatConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpOAuthConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelCatalogConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, RuntimeToolsConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
9
5
  import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
6
+ import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
7
+ import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
8
+ import { resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
10
9
  import { extractProfileAgentId, resolveEffectiveAgentConfigForAgent, resolveEffectiveAgentConfigForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
10
+ import { FILENAMES, WORKSPACE_FILES, existsSync, hasBundledExtensionManifest, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMcpOAuthPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
11
11
  import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
12
12
  import { CustomModelSchema, ImageGenerationCapabilitiesSchema, ImageGenerationModelSchema, ImageGenerationProviderSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
13
13
  import { canonicalizeConfiguredMcpServer, isKnownCliMcpTypeAlias, normalizeConfiguredMcpServers, resolveXopcMcpTransportAlias } from "./mcp-config-normalize.js";
@@ -1,9 +1,9 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
- import { init_paths, resolveConfigPath } from "./paths.js";
4
- import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
5
3
  import { ConfigSchema, init_schema } from "./schema.js";
4
+ import { init_paths, resolveConfigPath } from "./paths.js";
6
5
  import { init_resolution, setActivePlatformDiscovery } from "../platform/resolution.js";
6
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
7
7
  import { assertChannelPluginConfigs } from "./validate-channel-configs.js";
8
8
  import { isGatewayConfigLockedByAnotherProcessSync } from "../gateway/lock.js";
9
9
  import { dirname } from "path";
@@ -1,7 +1,7 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { init_paths, resolveModelsJsonPath } from "./paths.js";
3
- import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
4
3
  import { ComputerProfileSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
4
+ import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
5
5
  import { init_model_policy, isComputerModel } from "../computer/model-policy.js";
6
6
  import { existsSync, readFileSync } from "fs";
7
7
  import { z } from "zod";
@@ -1360,6 +1360,10 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
1360
1360
  postCompactionSections: z.ZodDefault<z.ZodArray<z.ZodString>>;
1361
1361
  }, z.core.$strict>>;
1362
1362
  }, z.core.$strict>>;
1363
+ homeIntelligence: z.ZodDefault<z.ZodObject<{
1364
+ enabled: z.ZodDefault<z.ZodBoolean>;
1365
+ refreshOnContextChange: z.ZodDefault<z.ZodBoolean>;
1366
+ }, z.core.$strict>>;
1363
1367
  }, z.core.$strict>>;
1364
1368
  session: z.ZodDefault<z.ZodObject<{
1365
1369
  scope: z.ZodDefault<z.ZodEnum<{
@@ -1,9 +1,9 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
+ import { ComputerConfigSchema, init_config } from "../computer/config.js";
2
3
  import { AgentModelsOverrideSchema, ImageGenerationRouteSchema, ModelRouteSchema } from "../agent-config/schema.js";
3
4
  import { resolveEffectiveAgentConfig } from "../agent-config/resolver.js";
4
5
  import { init_agent_config } from "../agent-config/index.js";
5
6
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
6
- import { ComputerConfigSchema, init_config } from "../computer/config.js";
7
7
  import { DEFAULT_CONTEXT_COMPACTION_POLICY, UserContextConfigSchema, init_config as init_config$1 } from "../user-context/config.js";
8
8
  import { init_public_url, validatePublicUrl } from "./public-url.js";
9
9
  import { PlatformConfigSchema, init_contracts } from "../platform/contracts.js";
@@ -1052,6 +1052,10 @@ workDiscoveryOnboarding: z.boolean().default(true) }).strict().default({ workDis
1052
1052
  maxKnowledge: 12,
1053
1053
  maxChars: 6e3,
1054
1054
  compaction: DEFAULT_CONTEXT_COMPACTION_POLICY
1055
+ },
1056
+ homeIntelligence: {
1057
+ enabled: true,
1058
+ refreshOnContextChange: true
1055
1059
  }
1056
1060
  },
1057
1061
  session: {
@@ -9,7 +9,7 @@ async function resumeApprovedConnectorAction(approval, recovery) {
9
9
  if (!wait || wait.id !== approval.waitId || wait.principalId !== approval.principalId || wait.agentId !== approval.agentId || wait.status !== "open") return false;
10
10
  try {
11
11
  return (await recovery.act(wait.conversationId, {
12
- action: "continue",
12
+ action: "check",
13
13
  waitId: wait.id,
14
14
  expectedTranscriptId: wait.transcriptId,
15
15
  expectedVersion: wait.version,
@@ -93,7 +93,7 @@ function commitCliIdentity(attempt, identity) {
93
93
  }
94
94
  });
95
95
  db.prepare(`UPDATE connector_accounts SET runtime_instance_id = ?, identity_key = ?, identity_json = ?,
96
- enabled = 1, label = COALESCE(label, ?), current_connection_id = ?, updated_at = ? WHERE id = ?`).run(attempt.instance_id, identity.key, JSON.stringify(identity.identity), identity.label, connectionId, (/* @__PURE__ */ new Date()).toISOString(), accountId);
96
+ enabled = 1, label = COALESCE(label, ?), current_connection_id = ?, updated_at = ? WHERE id = ?`).run(attempt.instance_id, identity.key, JSON.stringify(identity.identity), identity.label, connectionId, Date.now(), accountId);
97
97
  db.prepare("UPDATE connector_connections SET status = 'disabled' WHERE account_id = ? AND id <> ? AND provider = 'cli'").run(accountId, connectionId);
98
98
  updateCliAuthorization(attempt.id, {
99
99
  phase: "succeeded",
@@ -1,19 +1,29 @@
1
1
  import { getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
2
+ import { init_timestamps, optionalTimestampToIso, timestampToIso } from "../storage/sqlite/timestamps.js";
2
3
  import { CredentialResolver, init_credentials } from "../auth/credentials.js";
3
4
  import { randomUUID } from "node:crypto";
4
5
  //#region src/connectors/composio-backends.ts
5
6
  init_credentials();
7
+ init_timestamps();
6
8
  init_transaction();
9
+ function fromRow(row) {
10
+ return {
11
+ ...row,
12
+ verified_at: optionalTimestampToIso(row.verified_at) ?? null,
13
+ created_at: timestampToIso(row.created_at)
14
+ };
15
+ }
7
16
  function listComposioBackends() {
8
- return getSqliteDatabase().prepare("SELECT * FROM connector_backends ORDER BY created_at").all();
17
+ return getSqliteDatabase().prepare("SELECT * FROM connector_backends ORDER BY created_at").all().map(fromRow);
9
18
  }
10
19
  function getComposioBackend(id) {
11
- return id ? getSqliteDatabase().prepare("SELECT * FROM connector_backends WHERE id = ?").get(id) : getSqliteDatabase().prepare("SELECT * FROM connector_backends WHERE active = 1").get();
20
+ const row = id ? getSqliteDatabase().prepare("SELECT * FROM connector_backends WHERE id = ?").get(id) : getSqliteDatabase().prepare("SELECT * FROM connector_backends WHERE active = 1").get();
21
+ return row ? fromRow(row) : void 0;
12
22
  }
13
23
  function addComposioBackend(input) {
14
24
  const id = input.id ?? randomUUID();
15
25
  getSqliteDatabase().prepare(`INSERT INTO connector_backends(id, mode, label, credential_ref, credential_source, created_at)
16
- VALUES (?, ?, ?, ?, ?, ?)`).run(id, input.mode, input.label, input.credentialRef ?? null, input.credentialSource ?? "stored", (/* @__PURE__ */ new Date()).toISOString());
26
+ VALUES (?, ?, ?, ?, ?, ?)`).run(id, input.mode, input.label, input.credentialRef ?? null, input.credentialSource ?? "stored", Date.now());
17
27
  return getComposioBackend(id);
18
28
  }
19
29
  function activateComposioBackend(id) {
@@ -59,7 +69,7 @@ async function resolveBackendKey(backend, resolver = new CredentialResolver()) {
59
69
  return null;
60
70
  }
61
71
  function markComposioBackendVerified(id) {
62
- getSqliteDatabase().prepare("UPDATE connector_backends SET verified_at = ? WHERE id = ?").run((/* @__PURE__ */ new Date()).toISOString(), id);
72
+ getSqliteDatabase().prepare("UPDATE connector_backends SET verified_at = ? WHERE id = ?").run(Date.now(), id);
63
73
  }
64
74
  //#endregion
65
75
  export { activateComposioBackend, addComposioBackend, ensureComposioBackend, getComposioBackend, listComposioBackends, markComposioBackendVerified, removeComposioBackend, resolveBackendKey };
@@ -21,11 +21,14 @@ export declare class ManagedComposioEventPoller {
21
21
  private syncing?;
22
22
  constructor(input: {
23
23
  getConfig: () => Config;
24
- triggerAutomation: (event: {
24
+ ingestEvent: (event: {
25
+ id: string;
25
26
  type: string;
26
27
  source: string;
27
28
  payload: Record<string, unknown>;
28
- }) => Promise<unknown>;
29
+ dedupeKey: string;
30
+ trust: 'connector';
31
+ }) => unknown;
29
32
  requestLearning: (toolkit: string) => void;
30
33
  setLearningPaused: (connectionId: string, paused: boolean) => void;
31
34
  client?: ManagedEventClient;
@@ -89,9 +89,12 @@ var ManagedComposioEventPoller = class {
89
89
  await appendComposioTriggerEvent(config, payload);
90
90
  const toolkit = normalized.toolkit ?? event.toolkit;
91
91
  if (toolkit) this.input.requestLearning(toolkit);
92
- await this.input.triggerAutomation({
92
+ this.input.ingestEvent({
93
+ id: `connector:composio:${event.id}`,
93
94
  type: `connector.${normalized.trigger ?? normalized.type}`,
94
95
  source: toolkit ? `composio:${toolkit}` : "composio",
96
+ dedupeKey: event.id,
97
+ trust: "connector",
95
98
  payload: {
96
99
  ...normalized.data,
97
100
  connectorId: toolkit ? `composio-${toolkit}` : "composio",
@@ -8,11 +8,12 @@ export type ConnectionAction = {
8
8
  expectedTranscriptId: string;
9
9
  expectedVersion: number;
10
10
  idempotencyKey: string;
11
- action: 'connect' | 'check' | 'continue' | 'skip' | 'cancel' | 'select_account' | 'confirm_scope' | 'replace_source' | 'submit_callback';
11
+ action: 'install_complete' | 'connect' | 'check' | 'skip' | 'cancel' | 'select_account' | 'confirm_scope' | 'replace_source' | 'submit_callback';
12
12
  needKey?: string;
13
13
  accountId?: string;
14
14
  candidateRef?: string;
15
15
  callbackUrl?: string;
16
+ instanceId?: string;
16
17
  };
17
18
  /** Authorization lives at click time. Chat history contains only immutable explanations. */
18
19
  export declare class ConnectionRecoveryService {