@xopcai/xopc 0.0.211 → 0.0.213

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 (212) 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/{activity-store-BzjFoSr0.js → activity-store-Xw-pOm9A.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DTfjhfVE.js → agent-avatar-dicebear-Ca1bciiK.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents-DD3TqNrC.js +68 -0
  6. package/dist/gateway/static/root/assets/{api-D269PnU9.js → api-CZK-lRew.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-BFpfQDWc.js → app-management-settings-panel-BLFIG09j.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-DLxFdqhY.js → appearance-settings-BsTWUq1i.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-cJkDKn72.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-DPlH4dnc.js → archive-plugin-B9LsFfEx.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-xqfLLd0I.js → attachment-load-CsWiFfmN.js} +1 -1
  12. package/dist/gateway/static/root/assets/automations-page-CbjU2e75.js +1 -0
  13. package/dist/gateway/static/root/assets/automations-workspace-C4xyo0c4.js +6 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-C0tuoPXk.js → binary-plugins-DbqhT_JB.js} +1 -1
  15. package/dist/gateway/static/root/assets/{block-editor-Deyphj1o.js → block-editor-BGpHwxZ5.js} +47 -47
  16. package/dist/gateway/static/root/assets/browser-settings-page-CrhpQl-e.js +8 -0
  17. package/dist/gateway/static/root/assets/{browser-workflow-inputs-CYEbXyRF.js → browser-workflow-inputs-BXlon_hL.js} +1 -1
  18. package/dist/gateway/static/root/assets/{browser-workflows-page-Bf0tPbGi.js → browser-workflows-page-B3BBDM_r.js} +2 -2
  19. package/dist/gateway/static/root/assets/capabilities-settings-panel-B9MoPW9u.js +7 -0
  20. package/dist/gateway/static/root/assets/{capability-presets-api-DPkFA_-R.js → capability-presets-api-BqvMm6UW.js} +1 -1
  21. package/dist/gateway/static/root/assets/capability-presets-settings-panel-BmwldV9R.js +3 -0
  22. package/dist/gateway/static/root/assets/{channel-recipient-api-DqKaAcnZ.js → channel-recipient-api-9uca5kDa.js} +1 -1
  23. package/dist/gateway/static/root/assets/channels-settings-CwLqWcy_.js +1 -0
  24. package/dist/gateway/static/root/assets/channels-status-swr-DeBw3du9.js +1 -0
  25. package/dist/gateway/static/root/assets/{chat-terminal-dock-CTDRZa7e.js → chat-terminal-dock-DJjYT3WX.js} +2 -2
  26. package/dist/gateway/static/root/assets/{chunk-KS7C4IRE-BMhrPKJC.js → chunk-KS7C4IRE-BaASWQor.js} +1 -1
  27. package/dist/gateway/static/root/assets/{connectors-api-Buu8fif8.js → connectors-api-XCLfuDrN.js} +1 -1
  28. package/dist/gateway/static/root/assets/connectors-page-CVkGtcMS.js +2 -0
  29. package/dist/gateway/static/root/assets/{cron-expression-DTLR82NB.js → cron-expression-DzQN7zBR.js} +1 -1
  30. package/dist/gateway/static/root/assets/{date-picker-DyNogHQH.js → date-picker-B-r5O5qd.js} +1 -1
  31. package/dist/gateway/static/root/assets/{dependency-picker-BpnCuo7B.js → dependency-picker-Ch2XBU2s.js} +1 -1
  32. package/dist/gateway/static/root/assets/{desktop-pet-CDKI4gVB.js → desktop-pet-BdjX8jde.js} +1 -1
  33. package/dist/gateway/static/root/assets/{desktop-pet-settings-DjT5C2a3.js → desktop-pet-settings-CzjjgMMn.js} +1 -1
  34. package/dist/gateway/static/root/assets/directory-picker-path-field-BCTgGTk4.js +1 -0
  35. package/dist/gateway/static/root/assets/{extension-debug-page-DWf2z7q5.js → extension-debug-page-6OGgOucD.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-page-Dorx0kf9.js → extension-page-Cf6MUfCF.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-settings-page-B1wU9ZOB.js → extension-settings-page-pSY_ZvQZ.js} +1 -1
  38. package/dist/gateway/static/root/assets/{gateway-config-api-B1lG4dNr.js → gateway-config-api-CFJMng9v.js} +1 -1
  39. package/dist/gateway/static/root/assets/{gateway-config-swr-BIxuwPQi.js → gateway-config-swr-DpiY6aub.js} +1 -1
  40. package/dist/gateway/static/root/assets/{gateway-settings-DqIOqJjM.js → gateway-settings-aQYxNePf.js} +1 -1
  41. package/dist/gateway/static/root/assets/{gateway-startup-retry-BpZgd4U-.js → gateway-startup-retry-BZ_6ChP4.js} +1 -1
  42. package/dist/gateway/static/root/assets/{heartbeat-settings-DG4Kmgkc.js → heartbeat-settings-CI33q9i1.js} +1 -1
  43. package/dist/gateway/static/root/assets/home-page-CAIaWs6r.js +1 -0
  44. package/dist/gateway/static/root/assets/{image-generation-api-PkhYohDa.js → image-generation-api-DPndEWOU.js} +1 -1
  45. package/dist/gateway/static/root/assets/index-BhstAl5i.js +108 -0
  46. package/dist/gateway/static/root/assets/index-DQzjgIkQ.css +2 -0
  47. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-6OQT3gQF.js → keyboard-shortcuts-settings-CbLJRGXR.js} +1 -1
  48. package/dist/gateway/static/root/assets/local-app-workbench-page-BqFnCaKT.js +2 -0
  49. package/dist/gateway/static/root/assets/{local-apps-page-DfruRAmE.js → local-apps-page-Crf6c3SK.js} +1 -1
  50. package/dist/gateway/static/root/assets/{locale-store-C5MK9WcP.js → locale-store-BYSRjM6g.js} +1 -1
  51. package/dist/gateway/static/root/assets/logs-page-BpfLQWex.js +2 -0
  52. package/dist/gateway/static/root/assets/{management-settings-L1VYkywO.js → management-settings-mxyYWKgM.js} +1 -1
  53. package/dist/gateway/static/root/assets/{markdown-split-oqgHbqt-.js → markdown-split-kZaPrUTM.js} +1 -1
  54. package/dist/gateway/static/root/assets/{markdown-view-V4rcPPH0.js → markdown-view-DlsczsQ1.js} +1 -1
  55. package/dist/gateway/static/root/assets/{media-plugins-Bb6gSX2o.js → media-plugins-Dk67jaG6.js} +1 -1
  56. package/dist/gateway/static/root/assets/messages-DyM8OOVG.js +3 -0
  57. package/dist/gateway/static/root/assets/notes-api-DaeeQw8A.js +1 -0
  58. package/dist/gateway/static/root/assets/{notes-page-B1rOXjpT.js → notes-page-CQDzw8fX.js} +1 -1
  59. package/dist/gateway/static/root/assets/notes-workbench-BYiROmRJ.js +4 -0
  60. package/dist/gateway/static/root/assets/{page-tabs-CBuCKeyy.js → page-tabs-C4UkhX2U.js} +1 -1
  61. package/dist/gateway/static/root/assets/{preview-open-alternatives-BQ0tLfPO.js → preview-open-alternatives-nzcjh6y0.js} +1 -1
  62. package/dist/gateway/static/root/assets/{product-open-page-DPeFn7Hu.js → product-open-page-3FvW5cHm.js} +1 -1
  63. package/dist/gateway/static/root/assets/project-detail-page-p45i1sMj.js +1 -0
  64. package/dist/gateway/static/root/assets/projects-page-Y9yXB4DX.js +1 -0
  65. package/dist/gateway/static/root/assets/registry-api-Bu6OGEY2.js +2 -0
  66. package/dist/gateway/static/root/assets/remote-access-hub-CNsGY0VS.js +1 -0
  67. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BCfQNzjG.js → runtime-tools-settings-panel-CVqPSfUb.js} +2 -2
  68. package/dist/gateway/static/root/assets/{schema-form-Bo7YbHYN.js → schema-form-Dz6eZpqv.js} +1 -1
  69. package/dist/gateway/static/root/assets/sessions-page-BAtpgb1t.js +1 -0
  70. package/dist/gateway/static/root/assets/settings-advanced-gate-pgBQ21Oe.js +1 -0
  71. package/dist/gateway/static/root/assets/{settings-form-section-B9dnKr3M.js → settings-form-section-BaWFAZv4.js} +1 -1
  72. package/dist/gateway/static/root/assets/{settings-loading-skeleton-CYDV2JtY.js → settings-loading-skeleton-BWmdZfNg.js} +1 -1
  73. package/dist/gateway/static/root/assets/{settings-page-DbrIYfS9.js → settings-page-Btcb-Dc8.js} +1 -1
  74. package/dist/gateway/static/root/assets/setup-status-panel-BNllZUFP.js +1 -0
  75. package/dist/gateway/static/root/assets/{share-preview-page-olgr7LLN.js → share-preview-page-CGzY3S0N.js} +1 -1
  76. package/dist/gateway/static/root/assets/shares-settings-CncwbTHY.js +1 -0
  77. package/dist/gateway/static/root/assets/skill-reload-api-CcW2dhSW.js +1 -0
  78. package/dist/gateway/static/root/assets/{skills-page-PE16CNw5.js → skills-page-Bi2IWpU0.js} +1 -1
  79. package/dist/gateway/static/root/assets/{skills-page.utils-nXmBcBxt.js → skills-page.utils-BancvwN2.js} +1 -1
  80. package/dist/gateway/static/root/assets/{system-settings-panel-C3qPwAdY.js → system-settings-panel-CihjIzWx.js} +1 -1
  81. package/dist/gateway/static/root/assets/task-detail-page-SSNFtY-d.js +1 -0
  82. package/dist/gateway/static/root/assets/{theme-store-KR5Otp5w.js → theme-store-D1_t_31B.js} +1 -1
  83. package/dist/gateway/static/root/assets/{typed-models-lib-lMZodtDF.js → typed-models-lib-C2LhiQq5.js} +1 -1
  84. package/dist/gateway/static/root/assets/{use-autosave-CKpatP3S.js → use-autosave-tf_8rxAK.js} +1 -1
  85. package/dist/gateway/static/root/assets/user-context-page-BnPTFEar.js +1 -0
  86. package/dist/gateway/static/root/assets/{voice-api-key-field-CDcv0Wbh.js → voice-api-key-field-DN-y7Zfe.js} +1 -1
  87. package/dist/gateway/static/root/assets/work-discovery-overlay-bqqH4aZ9.js +1 -0
  88. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BAHYNlQt.js → workflow-run-setup-panel-2H33iXOB.js} +2 -2
  89. package/dist/gateway/static/root/assets/workflows-page-BnfxRf1q.js +5 -0
  90. package/dist/gateway/static/root/index.html +12 -10
  91. package/dist/package.js +1 -1
  92. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  93. package/dist/src/cli/commands/connectors.js +1 -1
  94. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  95. package/dist/src/cli/commands/tunnel.js +3 -3
  96. package/dist/src/config/agent-profile.js +1 -1
  97. package/dist/src/connectors/composio-managed-client.d.ts +60 -0
  98. package/dist/src/connectors/composio-managed-client.js +135 -0
  99. package/dist/src/connectors/composio-managed-events.d.ts +41 -0
  100. package/dist/src/connectors/composio-managed-events.js +105 -0
  101. package/dist/src/connectors/composio-sessions.d.ts +2 -1
  102. package/dist/src/connectors/composio-sessions.js +13 -7
  103. package/dist/src/connectors/composio.js +2 -1
  104. package/dist/src/connectors/connected-source-ingestion.js +67 -25
  105. package/dist/src/connectors/health.js +1 -1
  106. package/dist/src/connectors/learning-recipes.js +2 -0
  107. package/dist/src/connectors/runtime-adapter-registry.js +2 -2
  108. package/dist/src/discussions/sealer.js +2 -2
  109. package/dist/src/discussions/service.js +6 -2
  110. package/dist/src/discussions/transcript.d.ts +2 -0
  111. package/dist/src/discussions/transcript.js +16 -3
  112. package/dist/src/extensions/install.d.ts +10 -0
  113. package/dist/src/extensions/install.js +111 -14
  114. package/dist/src/extensions/loader.js +22 -18
  115. package/dist/src/gateway/agents-admin.js +1 -1
  116. package/dist/src/gateway/heartbeat/service.js +1 -1
  117. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  118. package/dist/src/gateway/hono/middleware/auth.js +2 -2
  119. package/dist/src/gateway/hono/middleware/logger.js +1 -1
  120. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +1 -1
  121. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  122. package/dist/src/gateway/hono/routes/connectors.js +11 -4
  123. package/dist/src/gateway/hono/routes/exposure.js +1 -1
  124. package/dist/src/gateway/hono/routes/home.d.ts +1 -1
  125. package/dist/src/gateway/hono/routes/home.js +2 -2
  126. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  127. package/dist/src/gateway/hono/routes/shares.js +1 -1
  128. package/dist/src/gateway/hono/routes/tunnel.js +3 -3
  129. package/dist/src/gateway/hono/routes/workflows.js +69 -0
  130. package/dist/src/gateway/index.js +2 -2
  131. package/dist/src/gateway/runtime-config.js +2 -2
  132. package/dist/src/gateway/security/audit.js +2 -2
  133. package/dist/src/gateway/service/config-coordinator.js +1 -1
  134. package/dist/src/gateway/service.d.ts +1 -0
  135. package/dist/src/gateway/service.js +25 -10
  136. package/dist/src/heartbeat/index.js +1 -1
  137. package/dist/src/notes/note-attachment-sync.js +1 -1
  138. package/dist/src/notes/service.d.ts +1 -0
  139. package/dist/src/notes/service.js +2 -1
  140. package/dist/src/notes/types.d.ts +2 -0
  141. package/dist/src/providers/model-catalog-persistence.d.ts +1 -1
  142. package/dist/src/providers/model-catalog-store.d.ts +2 -60
  143. package/dist/src/providers/model-catalog-types.d.ts +60 -0
  144. package/dist/src/providers/model-catalog-types.js +1 -0
  145. package/dist/src/providers/provider-disconnect-core.d.ts +11 -0
  146. package/dist/src/providers/provider-disconnect-core.js +35 -0
  147. package/dist/src/providers/provider-disconnect.d.ts +2 -10
  148. package/dist/src/providers/provider-disconnect.js +4 -26
  149. package/dist/src/providers/xopc-cloud-catalog-coordinator.js +2 -2
  150. package/dist/src/storage/sqlite/migrations/124_workflow_context_snapshots.sql +15 -0
  151. package/dist/src/storage/sqlite/migrations/125_project_workflow_presets.sql +12 -0
  152. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  153. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  154. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  155. package/dist/src/storage/sqlite/schema.js +1 -1
  156. package/dist/src/tasks/home-query-service.d.ts +12 -127
  157. package/dist/src/tasks/home-query-service.js +73 -271
  158. package/dist/src/tasks/index.js +2 -2
  159. package/dist/src/tui/tui-startup-resources.js +1 -1
  160. package/dist/src/tui/xopc-tui-keybindings.d.ts +2 -2
  161. package/dist/src/tunnel/index.js +2 -2
  162. package/dist/src/voice/audio/normalize.d.ts +1 -0
  163. package/dist/src/voice/audio/normalize.js +24 -4
  164. package/dist/src/voice/local/wav.d.ts +3 -0
  165. package/dist/src/voice/local/wav.js +10 -4
  166. package/dist/src/work-discovery/service.js +6 -8
  167. package/dist/src/work-discovery/types.d.ts +2 -0
  168. package/dist/src/workflows/context/workflow-context-snapshot-repository.d.ts +21 -0
  169. package/dist/src/workflows/context/workflow-context-snapshot-repository.js +40 -0
  170. package/dist/src/workflows/context/workflow-context.d.ts +18 -0
  171. package/dist/src/workflows/context/workflow-context.js +159 -0
  172. package/dist/src/workflows/domain/run.d.ts +10 -1
  173. package/dist/src/workflows/engine/workflow-engine.d.ts +1 -0
  174. package/dist/src/workflows/engine/workflow-engine.js +2 -0
  175. package/dist/src/workflows/project-presets/project-workflow-preset-repository.d.ts +20 -0
  176. package/dist/src/workflows/project-presets/project-workflow-preset-repository.js +38 -0
  177. package/dist/src/workflows/service/workflow-run-service.d.ts +1 -0
  178. package/dist/src/workflows/service/workflow-run-service.js +107 -22
  179. package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -0
  180. package/dist/src/workflows/service/workflow-writeback-service.d.ts +9 -0
  181. package/dist/src/workflows/service/workflow-writeback-service.js +106 -0
  182. package/package.json +6 -6
  183. package/dist/gateway/static/root/assets/agents-CjhgfuVJ.js +0 -68
  184. package/dist/gateway/static/root/assets/apps-page-CjmlGB5V.js +0 -1
  185. package/dist/gateway/static/root/assets/automations-page-4m6Ey6wG.js +0 -6
  186. package/dist/gateway/static/root/assets/browser-settings-page-CAGCYx8U.js +0 -8
  187. package/dist/gateway/static/root/assets/capabilities-settings-panel-CKfLsxTI.js +0 -7
  188. package/dist/gateway/static/root/assets/capability-presets-settings-panel-CpipKNqX.js +0 -3
  189. package/dist/gateway/static/root/assets/channels-settings-Bvq-O4pt.js +0 -1
  190. package/dist/gateway/static/root/assets/channels-status-swr-CrMld2l7.js +0 -1
  191. package/dist/gateway/static/root/assets/connectors-page-CSQRzaVn.js +0 -2
  192. package/dist/gateway/static/root/assets/directory-picker-path-field-DlJY90TM.js +0 -1
  193. package/dist/gateway/static/root/assets/home-page-BhqItS_s.js +0 -1
  194. package/dist/gateway/static/root/assets/index-DLhvsU9B.css +0 -2
  195. package/dist/gateway/static/root/assets/index-_cuTcWjB.js +0 -107
  196. package/dist/gateway/static/root/assets/local-app-workbench-page-DWjTmzxw.js +0 -2
  197. package/dist/gateway/static/root/assets/logs-page-BA5efZ8B.js +0 -2
  198. package/dist/gateway/static/root/assets/messages-ctG2e-ix.js +0 -3
  199. package/dist/gateway/static/root/assets/notes-workbench-CkHXVmKP.js +0 -4
  200. package/dist/gateway/static/root/assets/project-detail-page-DCqet9-L.js +0 -1
  201. package/dist/gateway/static/root/assets/projects-page-D0t_AjzG.js +0 -1
  202. package/dist/gateway/static/root/assets/remote-access-hub-BUWPoBvw.js +0 -1
  203. package/dist/gateway/static/root/assets/sessions-page-vLhrrM3m.js +0 -1
  204. package/dist/gateway/static/root/assets/settings-advanced-gate-OP1y0Y8M.js +0 -1
  205. package/dist/gateway/static/root/assets/setup-status-panel-Cxc-Ejl5.js +0 -1
  206. package/dist/gateway/static/root/assets/shares-settings-ZOqC6-aA.js +0 -1
  207. package/dist/gateway/static/root/assets/skill-reload-api-DwvC3Iuf.js +0 -1
  208. package/dist/gateway/static/root/assets/task-detail-page-DCRB-5q-.js +0 -1
  209. package/dist/gateway/static/root/assets/user-context-page-CoiedRuA.js +0 -1
  210. package/dist/gateway/static/root/assets/work-discovery-overlay-CGdT22un.js +0 -1
  211. package/dist/gateway/static/root/assets/work-discovery-page-BwaU1RqI.js +0 -1
  212. package/dist/gateway/static/root/assets/workflows-page-DHYmh9G7.js +0 -5
@@ -28,11 +28,6 @@ import "../automations/index.js";
28
28
  import { ProjectService } from "../projects/project-service.js";
29
29
  import { resolveProjectAgentId } from "../projects/project-agent.js";
30
30
  import "../projects/index.js";
31
- import { sanitizeTunnelConfig } from "../tunnel/tunnel-config.js";
32
- import { wireTunnelEventsToGateway } from "../tunnel/gateway-lifecycle.js";
33
- import { buckets } from "./rate-limit/buckets.js";
34
- import { isGatewayStrictSecurityEnabled } from "./rate-limit/env-flags.js";
35
- import "./rate-limit/index.js";
36
31
  import { TaskApplicationService } from "../tasks/task-application-service.js";
37
32
  import { ProactiveScenarioService } from "../proactive/scenarios/service.js";
38
33
  import { TaskOutboxDispatcher } from "../tasks/task-outbox-dispatcher.js";
@@ -55,17 +50,18 @@ import { registerClarifyBridge } from "./clarify-runtime.js";
55
50
  import { ChannelManager } from "../channels/manager.js";
56
51
  import { getWorkspacePath } from "../config/workspace-path-helpers.js";
57
52
  import "../config/index.js";
58
- import { startConnectedKnowledgeCoordinator } from "../knowledge/coordinator.js";
59
- import "../knowledge/index.js";
60
- import { startConnectorLearningCoordinator } from "../connectors/learning-coordinator.js";
61
- import { ConnectedSourceChangePublisher } from "../connectors/source-change-publisher.js";
62
- import { startConnectorSupervisor } from "../connectors/supervisor.js";
63
53
  import { DiscussionService } from "../discussions/service.js";
64
54
  import { DiscussionOrganizer } from "../discussions/organizer.js";
65
55
  import { DiscussionLiveWorker } from "../discussions/live-worker.js";
66
56
  import { DiscussionOrganizerWorker } from "../discussions/organizer-worker.js";
67
57
  import { DiscussionSealer } from "../discussions/sealer.js";
68
58
  import "../discussions/index.js";
59
+ import { ManagedComposioEventPoller } from "../connectors/composio-managed-events.js";
60
+ import { startConnectedKnowledgeCoordinator } from "../knowledge/coordinator.js";
61
+ import "../knowledge/index.js";
62
+ import { startConnectorLearningCoordinator } from "../connectors/learning-coordinator.js";
63
+ import { ConnectedSourceChangePublisher } from "../connectors/source-change-publisher.js";
64
+ import { startConnectorSupervisor } from "../connectors/supervisor.js";
69
65
  import { EndpointToolRuntime } from "../endpoint-tools/runtime.js";
70
66
  import "../endpoint-tools/index.js";
71
67
  import { assertGatewayAuthConfigured, extractToken, resolveGatewayAuth, validateToken } from "./auth.js";
@@ -83,9 +79,14 @@ import "./heartbeat/index.js";
83
79
  import { EphemeralSideChatManager } from "./side-chat/manager.js";
84
80
  import { SideChatRunService } from "./side-chat/run-service.js";
85
81
  import "./side-chat/index.js";
82
+ import { wireTunnelEventsToGateway } from "../tunnel/gateway-lifecycle.js";
86
83
  import { stopTailscaleExposure } from "./tailscale-lifecycle.js";
87
84
  import { getExposureManager } from "../remote-access/exposure-manager.js";
85
+ import { sanitizeTunnelConfig } from "../tunnel/tunnel-config.js";
88
86
  import { assertGatewayAuthNotKnownWeak } from "./security/known-weak-secrets.js";
87
+ import { buckets } from "./rate-limit/buckets.js";
88
+ import { isGatewayStrictSecurityEnabled } from "./rate-limit/env-flags.js";
89
+ import "./rate-limit/index.js";
89
90
  import { assertGatewayRuntimeConfig } from "./runtime-config.js";
90
91
  import { auditGatewayConfig } from "./security/audit.js";
91
92
  import { getXopcCloudCatalogCoordinator } from "../providers/xopc-cloud-catalog-coordinator.js";
@@ -183,6 +184,7 @@ var GatewayService = class {
183
184
  workflowRunServiceInstance = null;
184
185
  taskRunDispatcher = null;
185
186
  taskRunDispatchTimer = null;
187
+ managedComposioEventPoller;
186
188
  mobileNotifications = null;
187
189
  connectorSupervisor = null;
188
190
  connectorLearningCoordinator = null;
@@ -941,6 +943,17 @@ var GatewayService = class {
941
943
  getMemoryManager: () => this.agentService.getMemoryManager(),
942
944
  emit: (type, payload) => this.emit(type, payload)
943
945
  });
946
+ this.managedComposioEventPoller = new ManagedComposioEventPoller({
947
+ getConfig: () => this.config,
948
+ triggerAutomation: (event) => this.automationService.triggerEvent(event),
949
+ requestLearning: (toolkit) => {
950
+ this.requestConnectorLearningForToolkit(toolkit);
951
+ },
952
+ setLearningPaused: (connectionId, paused) => {
953
+ this.setConnectorLearningPaused(connectionId, paused);
954
+ }
955
+ });
956
+ this.managedComposioEventPoller.start();
944
957
  this.connectedSourceChangePublisher = new ConnectedSourceChangePublisher(this.proactive);
945
958
  this.connectedSourceChangePublisher.start();
946
959
  this.connectedKnowledgeCoordinator = startConnectedKnowledgeCoordinator({ resolvePipelineOptions: () => ({
@@ -1096,6 +1109,8 @@ var GatewayService = class {
1096
1109
  this.connectorSupervisor = null;
1097
1110
  this.connectorLearningCoordinator?.stop();
1098
1111
  this.connectorLearningCoordinator = null;
1112
+ this.managedComposioEventPoller?.stop();
1113
+ this.managedComposioEventPoller = void 0;
1099
1114
  this.connectedSourceChangePublisher?.stop();
1100
1115
  this.connectedSourceChangePublisher = null;
1101
1116
  this.connectedKnowledgeCoordinator?.stop();
@@ -1,6 +1,6 @@
1
1
  import { DEFAULT_ACK_MAX_CHARS, HEARTBEAT_OK, NO_REPLY, shouldSilence, stripHeartbeatToken } from "./tokens.js";
2
+ import { appendCronEventLines } from "./event-prompt.js";
2
3
  import { isWithinActiveHours } from "./active-hours.js";
3
4
  import { isHeartbeatContentEmpty } from "./content-check.js";
4
- import { appendCronEventLines } from "./event-prompt.js";
5
5
  import { createHeartbeatWake } from "./wake.js";
6
6
  export { DEFAULT_ACK_MAX_CHARS, HEARTBEAT_OK, NO_REPLY, appendCronEventLines, createHeartbeatWake, isHeartbeatContentEmpty, isWithinActiveHours, shouldSilence, stripHeartbeatToken };
@@ -8,7 +8,7 @@ function partitionAttachmentsByReference(note) {
8
8
  const attachments = note.attachments ?? [];
9
9
  const kept = [];
10
10
  const removed = [];
11
- for (const attachment of attachments) if (referenced.has(attachment.id)) kept.push(attachment);
11
+ for (const attachment of attachments) if (attachment.retainWithoutReference || referenced.has(attachment.id)) kept.push(attachment);
12
12
  else removed.push(attachment);
13
13
  return {
14
14
  kept,
@@ -48,6 +48,7 @@ export declare class NotesService {
48
48
  buffer: Buffer;
49
49
  mimeType: string;
50
50
  duration?: number;
51
+ retainWithoutReference?: boolean;
51
52
  }): Promise<NoteAttachment | null>;
52
53
  removeAttachment(noteId: string, attachmentId: string): Promise<boolean>;
53
54
  getAttachmentPath(noteId: string, attachmentId: string): Promise<{
@@ -474,7 +474,8 @@ var NotesService = class {
474
474
  fileName: file.name,
475
475
  size,
476
476
  relativePath,
477
- duration: file.duration
477
+ duration: file.duration,
478
+ retainWithoutReference: file.retainWithoutReference
478
479
  };
479
480
  const attachments = [...note.attachments || [], attachment];
480
481
  const kind = note.kind === "thought" && attachment.type === "audio" ? "voice" : note.kind === "thought" ? "media" : note.kind;
@@ -45,6 +45,8 @@ export interface NoteAttachment {
45
45
  relativePath: string;
46
46
  transcript?: string;
47
47
  duration?: number;
48
+ /** Retained by a structured note feature even when absent from user-owned Markdown. */
49
+ retainWithoutReference?: boolean;
48
50
  }
49
51
  export interface NoteAiMeta {
50
52
  summary?: string;
@@ -1,4 +1,4 @@
1
- import type { CatalogSource } from './model-catalog-store.js';
1
+ import type { CatalogSource } from './model-catalog-types.js';
2
2
  export declare class ModelCatalogPersistence {
3
3
  private readonly path;
4
4
  constructor(path?: string);
@@ -1,63 +1,5 @@
1
- export interface CatalogModel {
2
- id: string;
3
- name: string;
4
- availability: 'available' | 'unavailable';
5
- kind: 'language' | 'image' | 'stt' | 'tts';
6
- input: Array<'text' | 'image' | 'audio'>;
7
- output: Array<'text' | 'image' | 'audio'>;
8
- operations: Array<'chat.completions' | 'responses' | 'images.generate' | 'images.edit' | 'audio.transcription' | 'audio.speech'>;
9
- reasoning: boolean;
10
- contextWindow: number;
11
- maxOutputTokens: number | null;
12
- stability?: 'stable' | 'preview' | 'deprecated';
13
- priority?: number;
14
- tier?: string;
15
- bestEffort?: boolean;
16
- imageGeneration?: {
17
- maxCount: number;
18
- sizes: string[];
19
- aspectRatios?: string[];
20
- qualities: Array<'low' | 'medium' | 'high' | 'auto'>;
21
- formats: Array<'png' | 'jpeg' | 'webp'>;
22
- backgrounds: Array<'transparent' | 'opaque' | 'auto'>;
23
- maxInputImages: number;
24
- };
25
- stt?: {
26
- inputFormats: string[];
27
- maxBytes: number;
28
- maxDurationSeconds: number;
29
- languages: string[];
30
- languageHint: boolean;
31
- prompt: boolean;
32
- timestamps: Array<'segment' | 'word'>;
33
- diarization: boolean;
34
- };
35
- tts?: {
36
- maxCharacters: number;
37
- languages: string[];
38
- outputFormats: Array<'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm'>;
39
- streaming: boolean;
40
- speed: boolean;
41
- pitch: boolean;
42
- instructions: boolean;
43
- defaultVoice?: string;
44
- };
45
- }
46
- export interface CatalogSource {
47
- providerId: string;
48
- baseUrl: string;
49
- api: 'openai-completions' | 'openai-responses';
50
- etag: string | null;
51
- recommendedModel: string | null;
52
- recommended?: Partial<Record<'vision' | 'image-generation' | 'stt' | 'tts', string>>;
53
- lastSuccessAt: number;
54
- models: CatalogModel[];
55
- }
56
- export interface ModelCatalogSnapshot {
57
- sources: Record<string, CatalogSource>;
58
- }
59
- export type CatalogSourceOrigin = 'memory' | 'disk' | 'network';
60
- export type AvailableCatalogModel = Omit<CatalogModel, 'availability'>;
1
+ import type { AvailableCatalogModel, CatalogSource, CatalogSourceOrigin, ModelCatalogSnapshot } from './model-catalog-types.js';
2
+ export type { AvailableCatalogModel, CatalogModel, CatalogSource, CatalogSourceOrigin, ModelCatalogSnapshot, } from './model-catalog-types.js';
61
3
  export declare class ModelCatalogStore {
62
4
  private sources;
63
5
  private origins;
@@ -0,0 +1,60 @@
1
+ export interface CatalogModel {
2
+ id: string;
3
+ name: string;
4
+ availability: 'available' | 'unavailable';
5
+ kind: 'language' | 'image' | 'stt' | 'tts';
6
+ input: Array<'text' | 'image' | 'audio'>;
7
+ output: Array<'text' | 'image' | 'audio'>;
8
+ operations: Array<'chat.completions' | 'responses' | 'images.generate' | 'images.edit' | 'audio.transcription' | 'audio.speech'>;
9
+ reasoning: boolean;
10
+ contextWindow: number;
11
+ maxOutputTokens: number | null;
12
+ stability?: 'stable' | 'preview' | 'deprecated';
13
+ priority?: number;
14
+ tier?: string;
15
+ bestEffort?: boolean;
16
+ imageGeneration?: {
17
+ maxCount: number;
18
+ sizes: string[];
19
+ aspectRatios?: string[];
20
+ qualities: Array<'low' | 'medium' | 'high' | 'auto'>;
21
+ formats: Array<'png' | 'jpeg' | 'webp'>;
22
+ backgrounds: Array<'transparent' | 'opaque' | 'auto'>;
23
+ maxInputImages: number;
24
+ };
25
+ stt?: {
26
+ inputFormats: string[];
27
+ maxBytes: number;
28
+ maxDurationSeconds: number;
29
+ languages: string[];
30
+ languageHint: boolean;
31
+ prompt: boolean;
32
+ timestamps: Array<'segment' | 'word'>;
33
+ diarization: boolean;
34
+ };
35
+ tts?: {
36
+ maxCharacters: number;
37
+ languages: string[];
38
+ outputFormats: Array<'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm'>;
39
+ streaming: boolean;
40
+ speed: boolean;
41
+ pitch: boolean;
42
+ instructions: boolean;
43
+ defaultVoice?: string;
44
+ };
45
+ }
46
+ export interface CatalogSource {
47
+ providerId: string;
48
+ baseUrl: string;
49
+ api: 'openai-completions' | 'openai-responses';
50
+ etag: string | null;
51
+ recommendedModel: string | null;
52
+ recommended?: Partial<Record<'vision' | 'image-generation' | 'stt' | 'tts', string>>;
53
+ lastSuccessAt: number;
54
+ models: CatalogModel[];
55
+ }
56
+ export interface ModelCatalogSnapshot {
57
+ sources: Record<string, CatalogSource>;
58
+ }
59
+ export type CatalogSourceOrigin = 'memory' | 'disk' | 'network';
60
+ export type AvailableCatalogModel = Omit<CatalogModel, 'availability'>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ import { CredentialResolver } from '../auth/credentials.js';
2
+ export interface ProviderDisconnectOptions {
3
+ resolver?: Pick<CredentialResolver, 'deleteProviderCredential'>;
4
+ invalidateAuth?: () => void;
5
+ clearCloudCatalog?: () => Promise<void>;
6
+ refreshModels?: () => void;
7
+ evictRunners?: () => void;
8
+ withLock?: <T>(providerId: string, operation: () => Promise<T>) => Promise<T>;
9
+ }
10
+ /** Low-level disconnect operation. Cloud callers must inject catalog cleanup. */
11
+ export declare function disconnectProviderCore(providerId: string, options?: ProviderDisconnectOptions): Promise<void>;
@@ -0,0 +1,35 @@
1
+ import { createLogger } from "../utils/logger/index.js";
2
+ import { init_logger } from "../utils/logger.js";
3
+ import { getModelRegistry, init_model_registry } from "./model-registry.js";
4
+ import { init_oauth_provider_lock, withOAuthProviderLock } from "../auth/oauth-provider-lock.js";
5
+ import { CredentialResolver, init_credentials } from "../auth/credentials.js";
6
+ import { getProviderAuthService, init_provider_auth_service } from "./provider-auth-service.js";
7
+ import { evictAllEmbeddedSessionRunners } from "../agent/embedded/session-runner.js";
8
+ //#region src/providers/provider-disconnect-core.ts
9
+ init_credentials();
10
+ init_oauth_provider_lock();
11
+ init_logger();
12
+ init_model_registry();
13
+ init_provider_auth_service();
14
+ const log = createLogger("ProviderDisconnect");
15
+ /** Low-level disconnect operation. Cloud callers must inject catalog cleanup. */
16
+ async function disconnectProviderCore(providerId, options = {}) {
17
+ const provider = providerId.trim().toLowerCase();
18
+ if (!provider) throw new Error("Provider id is required");
19
+ const resolver = options.resolver ?? new CredentialResolver();
20
+ await (options.withLock ?? ((id, operation) => withOAuthProviderLock(id, operation)))(provider, async () => {
21
+ await resolver.deleteProviderCredential(provider);
22
+ (options.invalidateAuth ?? (() => getProviderAuthService().invalidate()))();
23
+ if (provider === "xopc-cloud") {
24
+ if (!options.clearCloudCatalog) throw new Error("XOPC Cloud disconnect requires a catalog cleanup hook");
25
+ await options.clearCloudCatalog();
26
+ } else (options.refreshModels ?? (() => getModelRegistry().refresh()))();
27
+ (options.evictRunners ?? (() => evictAllEmbeddedSessionRunners("provider_disconnected")))();
28
+ });
29
+ log.info({
30
+ provider,
31
+ phase: "provider_revoked"
32
+ }, `Disconnected provider: ${provider}`);
33
+ }
34
+ //#endregion
35
+ export { disconnectProviderCore };
@@ -1,11 +1,3 @@
1
- import { CredentialResolver } from '../auth/credentials.js';
2
- interface ProviderDisconnectOptions {
3
- resolver?: Pick<CredentialResolver, 'deleteProviderCredential'>;
4
- invalidateAuth?: () => void;
5
- clearCloudCatalog?: () => Promise<void>;
6
- refreshModels?: () => void;
7
- evictRunners?: () => void;
8
- withLock?: <T>(providerId: string, operation: () => Promise<T>) => Promise<T>;
9
- }
1
+ import { type ProviderDisconnectOptions } from './provider-disconnect-core.js';
2
+ export type { ProviderDisconnectOptions } from './provider-disconnect-core.js';
10
3
  export declare function disconnectProvider(providerId: string, options?: ProviderDisconnectOptions): Promise<void>;
11
- export {};
@@ -1,33 +1,11 @@
1
- import { createLogger } from "../utils/logger/index.js";
2
- import { init_logger } from "../utils/logger.js";
3
- import { getModelRegistry, init_model_registry } from "./model-registry.js";
4
- import { init_oauth_provider_lock, withOAuthProviderLock } from "../auth/oauth-provider-lock.js";
5
- import { CredentialResolver, init_credentials } from "../auth/credentials.js";
6
- import { getProviderAuthService, init_provider_auth_service } from "./provider-auth-service.js";
7
- import { evictAllEmbeddedSessionRunners } from "../agent/embedded/session-runner.js";
1
+ import { disconnectProviderCore } from "./provider-disconnect-core.js";
8
2
  import { getXopcCloudCatalogCoordinator } from "./xopc-cloud-catalog-coordinator.js";
9
3
  //#region src/providers/provider-disconnect.ts
10
- init_credentials();
11
- init_oauth_provider_lock();
12
- init_logger();
13
- init_model_registry();
14
- init_provider_auth_service();
15
- const log = createLogger("ProviderDisconnect");
16
4
  async function disconnectProvider(providerId, options = {}) {
17
- const provider = providerId.trim().toLowerCase();
18
- if (!provider) throw new Error("Provider id is required");
19
- const resolver = options.resolver ?? new CredentialResolver();
20
- await (options.withLock ?? ((id, operation) => withOAuthProviderLock(id, operation)))(provider, async () => {
21
- await resolver.deleteProviderCredential(provider);
22
- (options.invalidateAuth ?? (() => getProviderAuthService().invalidate()))();
23
- if (provider === "xopc-cloud") await (options.clearCloudCatalog ?? (() => getXopcCloudCatalogCoordinator().clear("revoke")))();
24
- else (options.refreshModels ?? (() => getModelRegistry().refresh()))();
25
- (options.evictRunners ?? (() => evictAllEmbeddedSessionRunners("provider_disconnected")))();
5
+ return disconnectProviderCore(providerId, {
6
+ ...options,
7
+ clearCloudCatalog: options.clearCloudCatalog ?? (() => getXopcCloudCatalogCoordinator().clear("revoke"))
26
8
  });
27
- log.info({
28
- provider,
29
- phase: "provider_revoked"
30
- }, `Disconnected provider: ${provider}`);
31
9
  }
32
10
  //#endregion
33
11
  export { disconnectProvider };
@@ -5,6 +5,7 @@ import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-
5
5
  import { getModelRegistry, init_model_registry } from "./model-registry.js";
6
6
  import { init_oauth_provider_lock, withOAuthProviderLock } from "../auth/oauth-provider-lock.js";
7
7
  import { reloadImageGenerationProviders } from "../agent/image/generation/provider-registry.js";
8
+ import { disconnectProviderCore } from "./provider-disconnect-core.js";
8
9
  import { XopcCloudModelSource } from "./xopc-cloud-model-source.js";
9
10
  //#region src/providers/xopc-cloud-catalog-coordinator.ts
10
11
  init_oauth_provider_lock();
@@ -36,8 +37,7 @@ var XopcCloudCatalogCoordinator = class {
36
37
  this.reloadImageProviders = options.reloadImageProviders ?? reloadImageGenerationProviders;
37
38
  this.withLock = options.withLock ?? ((operation) => withOAuthProviderLock("xopc-cloud", operation));
38
39
  this.onPermanentAuthFailure = options.onPermanentAuthFailure ?? (async () => {
39
- const { disconnectProvider } = await import("./provider-disconnect.js");
40
- await disconnectProvider("xopc-cloud");
40
+ await disconnectProviderCore("xopc-cloud", { clearCloudCatalog: () => this.clear("invalid-grant") });
41
41
  });
42
42
  }
43
43
  async hydrate() {
@@ -0,0 +1,15 @@
1
+ CREATE TABLE workflow_context_snapshots (
2
+ snapshot_id TEXT PRIMARY KEY,
3
+ trace_id TEXT NOT NULL UNIQUE,
4
+ run_id TEXT NOT NULL,
5
+ project_id TEXT,
6
+ selected_items_json TEXT NOT NULL,
7
+ estimated_tokens INTEGER NOT NULL DEFAULT 0,
8
+ content_hash TEXT NOT NULL,
9
+ created_at INTEGER NOT NULL
10
+ );
11
+
12
+ CREATE INDEX idx_workflow_context_snapshots_run
13
+ ON workflow_context_snapshots(run_id, created_at DESC);
14
+ CREATE INDEX idx_workflow_context_snapshots_project
15
+ ON workflow_context_snapshots(project_id, created_at DESC);
@@ -0,0 +1,12 @@
1
+ CREATE TABLE project_workflow_presets (
2
+ project_id TEXT NOT NULL,
3
+ definition_id TEXT NOT NULL,
4
+ context_refs_json TEXT NOT NULL DEFAULT '[]',
5
+ created_at INTEGER NOT NULL,
6
+ updated_at INTEGER NOT NULL,
7
+ PRIMARY KEY (project_id, definition_id),
8
+ FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE
9
+ );
10
+
11
+ CREATE INDEX idx_project_workflow_presets_updated
12
+ ON project_workflow_presets(project_id, updated_at DESC);
@@ -3,7 +3,7 @@ import type { ApplyMigrationsOptions } from './types.js';
3
3
  /** Baseline schema version applied from schema.sql on first open. */
4
4
  export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
5
5
  /** Latest schema version this release supports (increment when adding migrations). */
6
- export declare const XOPC_DB_SCHEMA_VERSION = 123;
6
+ export declare const XOPC_DB_SCHEMA_VERSION = 125;
7
7
  export declare function resolveMigrationsDir(override?: string): string;
8
8
  /**
9
9
  * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
@@ -12,7 +12,7 @@ const log = createLogger("Sqlite:Migrations");
12
12
  /** Baseline schema version applied from schema.sql on first open. */
13
13
  const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
14
14
  /** Latest schema version this release supports (increment when adding migrations). */
15
- const XOPC_DB_SCHEMA_VERSION = 123;
15
+ const XOPC_DB_SCHEMA_VERSION = 125;
16
16
  const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
17
17
  function backupBeforeTaskCutover(db, databasePath) {
18
18
  db.exec("PRAGMA wal_checkpoint(FULL)");
@@ -57,7 +57,7 @@ function applySingleMigration(db, migration) {
57
57
  * Each step runs in its own transaction and updates schema_meta on success.
58
58
  */
59
59
  function applyPendingMigrations(db, options = {}) {
60
- const targetVersion = options.targetVersion ?? 123;
60
+ const targetVersion = options.targetVersion ?? 125;
61
61
  let currentVersion = readSchemaVersion(db);
62
62
  if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
63
63
  if (currentVersion >= targetVersion) return currentVersion;
@@ -94,7 +94,7 @@ function applyPendingMigrations(db, options = {}) {
94
94
  }
95
95
  /** Inspect schema version without mutating the database. */
96
96
  function inspectSchemaMigrationStatus(db, options = {}) {
97
- const appVersion = options.targetVersion ?? 123;
97
+ const appVersion = options.targetVersion ?? 125;
98
98
  const dbVersion = readSchemaVersion(db);
99
99
  if (dbVersion > appVersion) return {
100
100
  dbVersion,
@@ -19,7 +19,7 @@ const log = createLogger('Sqlite:Migrations');
19
19
  export const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
20
20
 
21
21
  /** Latest schema version this release supports (increment when adding migrations). */
22
- export const XOPC_DB_SCHEMA_VERSION = 123;
22
+ export const XOPC_DB_SCHEMA_VERSION = 125;
23
23
 
24
24
  const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
25
25
 
@@ -32,7 +32,7 @@ function ensureXopcDatabaseSchema(db, options = {}) {
32
32
  currentVersion = 11;
33
33
  }
34
34
  applyPendingMigrations(db, {
35
- targetVersion: 123,
35
+ targetVersion: 125,
36
36
  databasePath: options.databasePath
37
37
  });
38
38
  }
@@ -1,20 +1,12 @@
1
- import type { HomeResponse } from '@xopcai/gateway-contract';
2
- import { type AutomationRun } from '../automations/index.js';
1
+ import type { HomeAttention, HomeDecision, HomeResponse } from '@xopcai/gateway-contract';
3
2
  import type { AutomationService } from '../automations/service/automation-service.js';
4
3
  import type { Config } from '../config/schema.js';
5
- import type { NotesService } from '../notes/service.js';
6
4
  import type { ProactiveInboxService } from '../proactive/inbox/service.js';
7
5
  import type { ProjectService } from '../projects/project-service.js';
8
- import type { SessionIndex } from '../session/manager.js';
9
6
  import type { WorkflowRunSummary } from '../workflows/domain/index.js';
10
7
  import type { WorkflowRunService } from '../workflows/service/workflow-run-service.js';
8
+ import { type TaskAggregate } from './task-repository.js';
11
9
  import { type TaskReadModel } from './task-read-model-projector.js';
12
- type HomeDecision = HomeResponse['decisions'][number];
13
- type HomeAttention = HomeResponse['attention'][number];
14
- type HomeBriefingWin = HomeResponse['briefing']['wins'][number];
15
- type HomeAutomation = HomeResponse['upcomingAutomations'][number];
16
- type HomeFocusItem = HomeResponse['focusItems'][number];
17
- type HomeRecentTask = HomeResponse['recentTasks'][number];
18
10
  type HomeWorkflowRun = {
19
11
  id: string;
20
12
  definitionId: string;
@@ -26,141 +18,34 @@ type HomeWorkflowRun = {
26
18
  completedAtMs?: number;
27
19
  metrics: WorkflowRunSummary['metrics'];
28
20
  };
29
- type HomeAutomationRun = {
21
+ type HomeAutomation = {
30
22
  id: string;
31
- automationId: string;
32
- automationName?: string;
33
- status: AutomationRun['status'];
34
- createdAtMs: number;
35
- startedAtMs?: number;
36
- endedAtMs?: number;
37
- error?: string;
38
- summary?: string;
39
- sessionKey?: string;
40
- workflowRunId?: string;
41
- };
42
- type HomeSnapshot = HomeResponse & {
43
- recentlyOpened: unknown[];
44
- inboxCount: number;
45
- pendingTasks: unknown[];
46
- pendingTaskCount: number;
47
- recentSessions: unknown[];
48
- activeAgent: {
49
- id: string;
50
- name?: string;
51
- description?: string;
52
- };
53
- gateway: Record<string, unknown>;
54
- recentAutomationRuns: HomeAutomationRun[];
23
+ name?: string;
24
+ trigger: string;
25
+ action: string;
26
+ nextRunAt: string;
55
27
  };
56
28
  interface HomeGatewayPort {
57
- readonly notesServiceInstance: NotesService;
58
- readonly sessions: Pick<SessionIndex, 'listSessions'> & {
59
- getActiveRun(sessionKey: string): {
60
- active: boolean;
61
- runId?: string;
62
- };
63
- };
64
29
  readonly currentConfig: Config;
65
30
  readonly automationServiceInstance: AutomationService;
66
31
  readonly projects: ProjectService;
67
32
  readonly proactiveInbox: ProactiveInboxService;
68
33
  createWorkflowRunService(): WorkflowRunService;
69
- getHealth(): {
70
- status: string;
71
- ready: boolean;
72
- httpListening: boolean;
73
- version: string;
74
- uptime: number;
75
- };
76
34
  }
77
- export declare function decisionFromTask(model: TaskReadModel, projectName?: string): HomeDecision | null;
78
- export declare function buildHomeBriefing(input: {
79
- locale?: string;
80
- decisions: HomeDecision[];
81
- attention: HomeAttention[];
82
- activeWorkflowCount: number;
83
- activeTaskCount: number;
84
- wins: HomeBriefingWin[];
85
- nextScheduled?: HomeAutomation;
86
- nowMs: number;
87
- }): {
88
- generatedAt: number;
89
- summary: string;
90
- focus: {
91
- id: string;
92
- kind: "task" | "agent_judgment" | "connector_approval";
93
- title: string;
94
- reason: "external" | "paused" | "blocked" | "dependency" | "user_input" | "approval_required" | "overdue" | "needs_input" | "user_approval" | "scheduled" | "retry" | "due_soon" | "decision_needed";
95
- urgency: "now" | "soon";
96
- href: string;
97
- updatedAt: number;
98
- detail?: string;
99
- projectId?: string;
100
- projectName?: string;
101
- judgment?: {
102
- inboxItemId: string;
103
- whyNow: string;
104
- impact: string;
105
- workDone: string;
106
- recommendation: string;
107
- confidence: number;
108
- valueScore?: number;
109
- disposition?: "show_in_work" | "request_approval" | "auto_execute";
110
- dispositionReason?: string;
111
- actionStatus?: "failed" | "completed" | "rejected" | "pending" | "approval_required" | "not_authorized" | "executing";
112
- proposedActionTitle?: string;
113
- actionError?: string;
114
- decision?: {
115
- question: string;
116
- options: {
117
- id: string;
118
- label: string;
119
- consequence: string;
120
- }[];
121
- };
122
- };
123
- response?: {
124
- kind: "connector_approval";
125
- approvalId: string;
126
- };
127
- }[];
128
- progress: {
129
- activeWorkflowCount: number;
130
- activeTaskCount: number;
131
- movingCount: number;
132
- };
133
- wins: {
134
- id: string;
135
- kind: "task" | "workflow_run" | "automation_run";
136
- title: string;
137
- href: string;
138
- completedAt: number;
139
- }[];
140
- nextScheduled: {
141
- id: string;
142
- trigger: string;
143
- action: string;
144
- nextRunAt: string;
145
- name?: string;
146
- };
147
- };
148
- export declare function buildHomeFocusItems(input: {
35
+ export declare function decisionFromTask(model: TaskReadModel, projectName?: string, locale?: string): HomeDecision | null;
36
+ export declare function buildHomeWorkbench(input: {
149
37
  locale?: string;
150
38
  decisions: HomeDecision[];
151
39
  attention: HomeAttention[];
152
40
  activeWorkflowRuns: HomeWorkflowRun[];
153
- runningTasks: HomeResponse['tasks']['running'];
154
- wins: HomeBriefingWin[];
41
+ runningTasks: TaskAggregate[];
155
42
  scheduled: HomeAutomation[];
156
- recentTasks: HomeRecentTask[];
157
- inboxCount: number;
158
43
  nowMs: number;
159
- }): HomeFocusItem[];
44
+ }): Pick<HomeResponse, 'needsUser' | 'background' | 'backgroundCount'>;
160
45
  export declare class HomeQueryService {
161
46
  #private;
162
47
  private readonly service;
163
48
  constructor(service: HomeGatewayPort);
164
- getSnapshot(locale?: string): Promise<HomeSnapshot>;
49
+ getSnapshot(locale?: string): Promise<HomeResponse>;
165
50
  }
166
51
  export {};