@xopcai/xopc 0.0.178 → 0.0.180

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 (450) 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-BzGX__8I.js → activity-store-DFKtQDgE.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BzxntcaZ.js → agent-avatar-dicebear-CcTvB_4W.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents-DgGj9bu6.js +2 -0
  6. package/dist/gateway/static/root/assets/{api-hi6f2Xtp.js → api-CUClAvuL.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-fTY1F7ac.js → app-management-settings-panel-Ib-cWKHM.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-BZ-IxQfB.js → appearance-settings-CRSN8WuA.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-B5xahuT-.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-ZSLLG8wB.js → archive-plugin-BBF9zspN.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-D4YktqIF.js → attachment-load-D3QQfA7w.js} +1 -1
  12. package/dist/gateway/static/root/assets/automations-page-BUYrvMmD.js +6 -0
  13. package/dist/gateway/static/root/assets/{binary-plugins-BIkPxfxj.js → binary-plugins-D78XOjJ3.js} +1 -1
  14. package/dist/gateway/static/root/assets/{block-editor-Q3v_YQom.js → block-editor-D_VVXlYX.js} +46 -46
  15. package/dist/gateway/static/root/assets/browser-settings-page-Cjw07q9h.js +8 -0
  16. package/dist/gateway/static/root/assets/{browser-workflow-inputs-M5lTEW1I.js → browser-workflow-inputs-_gu08MA4.js} +1 -1
  17. package/dist/gateway/static/root/assets/{browser-workflows-page-B3T1KYk4.js → browser-workflows-page-58DBMXgG.js} +2 -2
  18. package/dist/gateway/static/root/assets/capabilities-settings-panel-D_dfVxHY.js +7 -0
  19. package/dist/gateway/static/root/assets/{capability-presets-api-DE09c0VB.js → capability-presets-api-DhCn9rPv.js} +1 -1
  20. package/dist/gateway/static/root/assets/capability-presets-settings-panel-LWWIYUT7.js +1 -0
  21. package/dist/gateway/static/root/assets/{channel-recipient-api-CFR5FBfS.js → channel-recipient-api-DYtoNV5A.js} +1 -1
  22. package/dist/gateway/static/root/assets/channels-settings-Cyj5OunL.js +1 -0
  23. package/dist/gateway/static/root/assets/channels-status-swr-TEFnV0IG.js +1 -0
  24. package/dist/gateway/static/root/assets/{connector-logo-B1mD-3pM.js → connector-logo-CxIXnifA.js} +1 -1
  25. package/dist/gateway/static/root/assets/connectors-page-0TobCpBB.js +2 -0
  26. package/dist/gateway/static/root/assets/desktop-pet-CwVSLL6N.js +1 -0
  27. package/dist/gateway/static/root/assets/desktop-pet-settings-BOIp4q0Z.js +1 -0
  28. package/dist/gateway/static/root/assets/{directory-picker-path-field-BYQJ2XUS.js → directory-picker-path-field-C8_lsW6S.js} +1 -1
  29. package/dist/gateway/static/root/assets/{dreaming-settings-BXcb8fwx.js → dreaming-settings-Da9FeWQl.js} +3 -3
  30. package/dist/gateway/static/root/assets/{extension-debug-page-O1Xu1r4Q.js → extension-debug-page-CMNnSJP6.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-page-C2Jraq8l.js → extension-page-t0pJqLvM.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-settings-page-DcXQDTpG.js → extension-settings-page-aiR-tKnW.js} +1 -1
  33. package/dist/gateway/static/root/assets/{gateway-config-api-DmPIZrvg.js → gateway-config-api-CkyQBD6r.js} +1 -1
  34. package/dist/gateway/static/root/assets/gateway-settings-BIZfAgfB.js +1 -0
  35. package/dist/gateway/static/root/assets/{gateway-startup-retry-BZEkOdPm.js → gateway-startup-retry-CSU7UvzG.js} +1 -1
  36. package/dist/gateway/static/root/assets/goals-settings-Dx9uTyWF.js +1 -0
  37. package/dist/gateway/static/root/assets/{heartbeat-settings-BtKu2NWT.js → heartbeat-settings-Cnr5ORXL.js} +1 -1
  38. package/dist/gateway/static/root/assets/{image-generation-api-05Gg8wsU.js → image-generation-api-BR6Kb77X.js} +1 -1
  39. package/dist/gateway/static/root/assets/index-B0Tdge_q.css +1 -0
  40. package/dist/gateway/static/root/assets/index-BA56bQ68.js +224 -0
  41. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CfmDR9Sc.js → keyboard-shortcuts-settings-D76uYKeQ.js} +1 -1
  42. package/dist/gateway/static/root/assets/local-app-workbench-page-DSUNtLHg.js +2 -0
  43. package/dist/gateway/static/root/assets/{local-apps-page-Df8BW1A_.js → local-apps-page-BsLnojTh.js} +1 -1
  44. package/dist/gateway/static/root/assets/{locale-store-CTwSy7yW.js → locale-store-BNC8HUCI.js} +1 -1
  45. package/dist/gateway/static/root/assets/logs-page-yI8kpQtO.js +7 -0
  46. package/dist/gateway/static/root/assets/{markdown-split-B3FvKbaP.js → markdown-split-D6smTQWD.js} +1 -1
  47. package/dist/gateway/static/root/assets/{media-plugins-DsjrvvB6.js → media-plugins-D1TmMF0A.js} +1 -1
  48. package/dist/gateway/static/root/assets/messages-H_iJjnEM.js +3 -0
  49. package/dist/gateway/static/root/assets/{notes-page-tuzIwy3c.js → notes-page-Vt-diFf0.js} +1 -1
  50. package/dist/gateway/static/root/assets/notes-workbench-BD297EZt.js +4 -0
  51. package/dist/gateway/static/root/assets/outcome-detail-page-C5i_ZR9a.js +1 -0
  52. package/dist/gateway/static/root/assets/{page-tabs-ke9s4nYi.js → page-tabs-BnSzIjH0.js} +1 -1
  53. package/dist/gateway/static/root/assets/{preview-open-alternatives-Cp1eI4S9.js → preview-open-alternatives-CF12Eqi4.js} +1 -1
  54. package/dist/gateway/static/root/assets/product-delivery-BVG-eWQO.js +1 -0
  55. package/dist/gateway/static/root/assets/{product-open-page-dXQCMAtH.js → product-open-page-Du0TE_CU.js} +1 -1
  56. package/dist/gateway/static/root/assets/project-detail-page-D1HGz7Dy.js +1 -0
  57. package/dist/gateway/static/root/assets/projects-page-CqP2TnW-.js +1 -0
  58. package/dist/gateway/static/root/assets/remote-access-hub-BXdVJLS3.js +1 -0
  59. package/dist/gateway/static/root/assets/{save-bar-controls-Bl30zjHc.js → save-bar-controls-B53UNtDM.js} +1 -1
  60. package/dist/gateway/static/root/assets/{schedule-field-DqhmXQKo.js → schedule-field-C3dIMN5q.js} +1 -1
  61. package/dist/gateway/static/root/assets/{schema-form-DkUCy6vf.js → schema-form-BKvpxqof.js} +1 -1
  62. package/dist/gateway/static/root/assets/{schemas-DgQq6Z5S.js → schemas-C6onAggk.js} +2 -2
  63. package/dist/gateway/static/root/assets/sessions-page-CPAwDdl5.js +1 -0
  64. package/dist/gateway/static/root/assets/settings-advanced-gate-C-jGsoft.js +1 -0
  65. package/dist/gateway/static/root/assets/{settings-form-section-C6ZbNpdy.js → settings-form-section-kt6GIS32.js} +1 -1
  66. package/dist/gateway/static/root/assets/{settings-loading-skeleton-Bk58_cr7.js → settings-loading-skeleton-85eUPcKz.js} +1 -1
  67. package/dist/gateway/static/root/assets/{settings-page-k8iE_NdX.js → settings-page-Di5x6Xrc.js} +1 -1
  68. package/dist/gateway/static/root/assets/{settings-page-layout-DgFSya2e.js → settings-page-layout-CkkCee_x.js} +1 -1
  69. package/dist/gateway/static/root/assets/{setup-status-panel-B_KDlyZA.js → setup-status-panel-uxEE6gAB.js} +1 -1
  70. package/dist/gateway/static/root/assets/{share-preview-page-CV7nL_J9.js → share-preview-page-BtLEstaI.js} +1 -1
  71. package/dist/gateway/static/root/assets/shares-settings-2mcsMWgn.js +1 -0
  72. package/dist/gateway/static/root/assets/skill-reload-api-ocDwsrEt.js +1 -0
  73. package/dist/gateway/static/root/assets/skills-page-9_jfsFU5.js +2 -0
  74. package/dist/gateway/static/root/assets/{skills-page.utils-kahBIHg0.js → skills-page.utils-C2SHvq8V.js} +1 -1
  75. package/dist/gateway/static/root/assets/{system-settings-panel-JV3-MG5F.js → system-settings-panel-CIJ66cUy.js} +1 -1
  76. package/dist/gateway/static/root/assets/{theme-store-DFLyzoLO.js → theme-store-ClDa_Bci.js} +1 -1
  77. package/dist/gateway/static/root/assets/time-picker-D0zAsHOo.js +1 -0
  78. package/dist/gateway/static/root/assets/{typed-models-lib-60Aqo-UJ.js → typed-models-lib-GsmwmB40.js} +1 -1
  79. package/dist/gateway/static/root/assets/{use-channel-catalog-CnTkHDnw.js → use-channel-catalog-BQz3K7xj.js} +1 -1
  80. package/dist/gateway/static/root/assets/user-context-page-Bn4BLg4W.js +1 -0
  81. package/dist/gateway/static/root/assets/{voice-api-key-field-CNa8qUgS.js → voice-api-key-field-Blaxsbb3.js} +1 -1
  82. package/dist/gateway/static/root/assets/work-copy-Cwyan9Sn.js +1 -0
  83. package/dist/gateway/static/root/assets/work-discovery-page-iJ9RBSpu.js +1 -0
  84. package/dist/gateway/static/root/assets/work-item-detail-page-CqTH7PQX.js +1 -0
  85. package/dist/gateway/static/root/assets/work-page-H3m99ccS.js +3 -0
  86. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-yV_x595t.js → workflow-run-setup-panel-CTG4RpRE.js} +2 -2
  87. package/dist/gateway/static/root/assets/workflows-page-BxZSKMfv.js +11 -0
  88. package/dist/gateway/static/root/index.html +9 -10
  89. package/dist/package.js +1 -1
  90. package/dist/packages/gateway-contract/src/outcomes.js +137 -0
  91. package/dist/packages/gateway-contract/src/product-delivery.js +1 -0
  92. package/dist/packages/gateway-contract/src/work-intake.js +85 -0
  93. package/dist/src/activity/service.d.ts +1 -0
  94. package/dist/src/activity/service.js +4 -1
  95. package/dist/src/agent/agent-manager.d.ts +4 -1
  96. package/dist/src/agent/agent-manager.js +21 -7
  97. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +1 -1
  98. package/dist/src/agent/code-intelligence/binary.js +1 -1
  99. package/dist/src/agent/context/execution-scope.d.ts +1 -1
  100. package/dist/src/agent/context/execution-scope.js +6 -4
  101. package/dist/src/agent/embedded/model-runtime.js +1 -1
  102. package/dist/src/agent/embedded/run-for-session.d.ts +2 -0
  103. package/dist/src/agent/embedded/run-for-session.js +3 -1
  104. package/dist/src/agent/goals/post-turn.js +7 -6
  105. package/dist/src/agent/image/tool-model-config.js +1 -1
  106. package/dist/src/agent/inbound/turn-dispatcher.d.ts +6 -1
  107. package/dist/src/agent/inbound/turn-dispatcher.js +5 -2
  108. package/dist/src/agent/ipc/inbox.js +1 -1
  109. package/dist/src/agent/lifecycle/timeout-wrapper.d.ts +2 -0
  110. package/dist/src/agent/lifecycle/timeout-wrapper.js +39 -9
  111. package/dist/src/agent/mcp/bundle-mcp-materialize.js +2 -2
  112. package/dist/src/agent/mcp/bundle-mcp-runtime.js +6 -1
  113. package/dist/src/agent/mcp/bundle-mcp-types.d.ts +1 -1
  114. package/dist/src/agent/mcp/mcp-stdio-transport.js +1 -1
  115. package/dist/src/agent/mcp/mcp-transport-config.d.ts +2 -0
  116. package/dist/src/agent/mcp/mcp-transport-config.js +10 -3
  117. package/dist/src/agent/mcp/mcp-transport.d.ts +1 -0
  118. package/dist/src/agent/mcp/mcp-transport.js +5 -2
  119. package/dist/src/agent/memory/dreaming/config.js +1 -1
  120. package/dist/src/agent/memory/user-context-coordinator.d.ts +1 -0
  121. package/dist/src/agent/memory/user-context-coordinator.js +17 -1
  122. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +1 -1
  123. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +6 -2
  124. package/dist/src/agent/outcomes/{task-evaluation.d.ts → execution-evaluation.d.ts} +3 -3
  125. package/dist/src/agent/outcomes/{task-evaluation.js → execution-evaluation.js} +5 -5
  126. package/dist/src/agent/outcomes/execution-verifier.d.ts +29 -0
  127. package/dist/src/agent/outcomes/{task-verifier.js → execution-verifier.js} +4 -4
  128. package/dist/src/agent/service/direct-turn-helpers.d.ts +1 -0
  129. package/dist/src/agent/service/direct-turn-helpers.js +1 -0
  130. package/dist/src/agent/service/process-direct-one-shot.d.ts +3 -0
  131. package/dist/src/agent/service/process-direct-one-shot.js +4 -1
  132. package/dist/src/agent/service/process-direct-streaming.js +3 -1
  133. package/dist/src/agent/service.d.ts +1 -0
  134. package/dist/src/agent/service.js +5 -2
  135. package/dist/src/agent/session/session-inspector.js +1 -1
  136. package/dist/src/agent/skills/config.js +6 -0
  137. package/dist/src/agent/skills/filesystem-watcher.d.ts +4 -0
  138. package/dist/src/agent/skills/filesystem-watcher.js +16 -7
  139. package/dist/src/agent/skills/hub-lock.js +1 -1
  140. package/dist/src/agent/skills/index.d.ts +10 -7
  141. package/dist/src/agent/skills/index.js +56 -47
  142. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  143. package/dist/src/agent/skills/skill-manager.d.ts +5 -2
  144. package/dist/src/agent/skills/skill-manager.js +10 -5
  145. package/dist/src/agent/skills/skill-sources.d.ts +18 -0
  146. package/dist/src/agent/skills/skill-sources.js +143 -0
  147. package/dist/src/agent/skills/types.d.ts +25 -2
  148. package/dist/src/agent/tools/delegate-tool.js +2 -1
  149. package/dist/src/agent/tools/executor.d.ts +2 -0
  150. package/dist/src/agent/tools/executor.js +18 -11
  151. package/dist/src/agent/tools/factory.js +18 -1
  152. package/dist/src/agent/tools/goal-tool.js +5 -3
  153. package/dist/src/agent/tools/index.d.ts +1 -0
  154. package/dist/src/agent/tools/index.js +2 -1
  155. package/dist/src/agent/tools/managed-job-tool.d.ts +2 -0
  156. package/dist/src/agent/tools/managed-job-tool.js +160 -0
  157. package/dist/src/agent/tools/todo-tool.d.ts +5 -0
  158. package/dist/src/agent/tools/todo-tool.js +16 -4
  159. package/dist/src/agent/tools/update-plan-tool.d.ts +1 -0
  160. package/dist/src/agent/tools/update-plan-tool.js +6 -0
  161. package/dist/src/agent/workspace-runtime/registry.d.ts +3 -0
  162. package/dist/src/agent/workspace-runtime/registry.js +3 -1
  163. package/dist/src/agent-runtime/index.js +1 -1
  164. package/dist/src/agent-runtime/runtime-profile.js +1 -1
  165. package/dist/src/auth/credentials.d.ts +9 -1
  166. package/dist/src/auth/credentials.js +112 -56
  167. package/dist/src/auth/model-credential-store.js +7 -22
  168. package/dist/src/auth/oauth-provider-lock.d.ts +5 -0
  169. package/dist/src/auth/oauth-provider-lock.js +91 -0
  170. package/dist/src/auth/profiles/store.js +1 -1
  171. package/dist/src/auth/sync-provider-auth.js +2 -2
  172. package/dist/src/automations/domain/defaults.d.ts +8 -1
  173. package/dist/src/automations/domain/defaults.js +9 -2
  174. package/dist/src/automations/domain/index.js +2 -2
  175. package/dist/src/automations/domain/types.d.ts +33 -7
  176. package/dist/src/automations/domain/validation.d.ts +8 -0
  177. package/dist/src/automations/domain/validation.js +2 -0
  178. package/dist/src/automations/draft/automation-draft-validator.d.ts +2 -1
  179. package/dist/src/automations/index.js +2 -2
  180. package/dist/src/automations/service/action-executor.d.ts +2 -2
  181. package/dist/src/automations/service/action-executor.js +144 -34
  182. package/dist/src/automations/service/automation-service.d.ts +4 -0
  183. package/dist/src/automations/service/automation-service.js +197 -18
  184. package/dist/src/automations/storage/automation-run-repository.d.ts +1 -0
  185. package/dist/src/automations/storage/automation-run-repository.js +37 -7
  186. package/dist/src/automations/storage/index.js +2 -2
  187. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  188. package/dist/src/browser/providers/cloakbrowser.js +2 -2
  189. package/dist/src/channels/attachments/voice-stt-webchat.d.ts +0 -3
  190. package/dist/src/channels/attachments/voice-stt-webchat.js +1 -24
  191. package/dist/src/chat-commands/builtins/goal.js +5 -4
  192. package/dist/src/cli/commands/agents.js +1 -1
  193. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  194. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  195. package/dist/src/cli/commands/goal.js +6 -5
  196. package/dist/src/cli/commands/models.js +1 -1
  197. package/dist/src/cli/commands/tunnel.js +3 -3
  198. package/dist/src/cli/utils/oauth-login.js +1 -7
  199. package/dist/src/config/agent-profile.js +1 -1
  200. package/dist/src/config/index.js +4 -4
  201. package/dist/src/config/loader.js +1 -1
  202. package/dist/src/config/models-json.js +1 -1
  203. package/dist/src/config/schema.d.ts +3 -0
  204. package/dist/src/config/schema.js +2 -1
  205. package/dist/src/connectors/learning-coordinator.js +7 -1
  206. package/dist/src/connectors/source-change-publisher.d.ts +17 -0
  207. package/dist/src/connectors/source-change-publisher.js +148 -0
  208. package/dist/src/discussions/analyzer.d.ts +35 -0
  209. package/dist/src/discussions/analyzer.js +127 -0
  210. package/dist/src/discussions/index.d.ts +7 -0
  211. package/dist/src/discussions/index.js +7 -0
  212. package/dist/src/discussions/live-worker.d.ts +33 -0
  213. package/dist/src/discussions/live-worker.js +148 -0
  214. package/dist/src/discussions/pipeline.d.ts +33 -0
  215. package/dist/src/discussions/pipeline.js +205 -0
  216. package/dist/src/discussions/project-inference.d.ts +13 -0
  217. package/dist/src/discussions/project-inference.js +19 -0
  218. package/dist/src/discussions/repository.d.ts +29 -0
  219. package/dist/src/discussions/repository.js +255 -0
  220. package/dist/src/discussions/service.d.ts +51 -0
  221. package/dist/src/discussions/service.js +335 -0
  222. package/dist/src/discussions/transcript.d.ts +3 -0
  223. package/dist/src/discussions/transcript.js +15 -0
  224. package/dist/src/discussions/types.d.ts +116 -0
  225. package/dist/src/discussions/types.js +10 -0
  226. package/dist/src/discussions/worker.d.ts +18 -0
  227. package/dist/src/discussions/worker.js +74 -0
  228. package/dist/src/extensions/activation-context.js +2 -1
  229. package/dist/src/extensions/lockfile.js +1 -1
  230. package/dist/src/extensions/sdk/testing.js +1 -1
  231. package/dist/src/gateway/agents-admin.js +3 -3
  232. package/dist/src/gateway/chat-stream/mapper.js +53 -3
  233. package/dist/src/gateway/chat-stream/protocol.d.ts +17 -1
  234. package/dist/src/gateway/file-path-classifier.js +1 -1
  235. package/dist/src/gateway/hono/app.js +8 -3
  236. package/dist/src/gateway/hono/lib/config-payload.js +2 -2
  237. package/dist/src/gateway/hono/middleware/auth.js +2 -2
  238. package/dist/src/gateway/hono/middleware/logger.js +1 -1
  239. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +1 -1
  240. package/dist/src/gateway/hono/oauth-async.js +1 -7
  241. package/dist/src/gateway/hono/oauth.js +1 -7
  242. package/dist/src/gateway/hono/routes/agents.js +1 -1
  243. package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -2
  244. package/dist/src/gateway/hono/routes/connectors.js +79 -0
  245. package/dist/src/gateway/hono/routes/discussions.d.ts +3 -0
  246. package/dist/src/gateway/hono/routes/discussions.js +177 -0
  247. package/dist/src/gateway/hono/routes/execution-receipts.d.ts +3 -0
  248. package/dist/src/gateway/hono/routes/execution-receipts.js +163 -0
  249. package/dist/src/gateway/hono/routes/exposure.js +1 -1
  250. package/dist/src/gateway/hono/routes/goals.js +3 -288
  251. package/dist/src/gateway/hono/routes/home.d.ts +2 -102
  252. package/dist/src/gateway/hono/routes/home.js +8 -424
  253. package/dist/src/gateway/hono/routes/index.js +6 -2
  254. package/dist/src/gateway/hono/routes/memory.js +7 -7
  255. package/dist/src/gateway/hono/routes/models.js +1 -1
  256. package/dist/src/gateway/hono/routes/notes.js +30 -0
  257. package/dist/src/gateway/hono/routes/projects.js +8 -152
  258. package/dist/src/gateway/hono/routes/shares.js +1 -1
  259. package/dist/src/gateway/hono/routes/status.js +2 -2
  260. package/dist/src/gateway/hono/routes/tunnel.js +3 -3
  261. package/dist/src/gateway/hono/routes/voice.js +1 -1
  262. package/dist/src/gateway/hono/routes/work.d.ts +3 -0
  263. package/dist/src/gateway/hono/routes/work.js +207 -0
  264. package/dist/src/gateway/hono/routes/you.js +13 -15
  265. package/dist/src/gateway/index.js +2 -2
  266. package/dist/src/gateway/runtime-config.js +2 -2
  267. package/dist/src/gateway/security/audit.js +2 -2
  268. package/dist/src/gateway/security/index.js +1 -1
  269. package/dist/src/gateway/service/config-coordinator.js +2 -2
  270. package/dist/src/gateway/service/run-gateway-agent.js +46 -51
  271. package/dist/src/gateway/service.d.ts +8 -1
  272. package/dist/src/gateway/service.js +142 -15
  273. package/dist/src/goals/goal-queue-store.d.ts +1 -0
  274. package/dist/src/goals/goal-queue-store.js +5 -1
  275. package/dist/src/goals/goal-queue-types.d.ts +11 -1
  276. package/dist/src/goals/goal-runner.js +10 -6
  277. package/dist/src/goals/goal-service.d.ts +2 -15
  278. package/dist/src/goals/goal-service.js +9 -42
  279. package/dist/src/goals/goal-store.d.ts +1 -18
  280. package/dist/src/goals/goal-store.js +25 -231
  281. package/dist/src/goals/goal-workflow-judge.js +1 -1
  282. package/dist/src/goals/index.d.ts +0 -4
  283. package/dist/src/goals/index.js +1 -3
  284. package/dist/src/goals/types.d.ts +4 -66
  285. package/dist/src/notes/agent-context.js +1 -1
  286. package/dist/src/notes/service.d.ts +1 -0
  287. package/dist/src/notes/service.js +10 -1
  288. package/dist/src/notes/types.d.ts +1 -0
  289. package/dist/src/proactive/events/product-event-bridge.d.ts +7 -0
  290. package/dist/src/proactive/events/product-event-bridge.js +84 -0
  291. package/dist/src/proactive/execution/context.d.ts +27 -11
  292. package/dist/src/proactive/execution/context.js +259 -25
  293. package/dist/src/proactive/execution/repository.js +18 -5
  294. package/dist/src/proactive/execution/types.d.ts +7 -1
  295. package/dist/src/proactive/execution/worker.js +7 -6
  296. package/dist/src/proactive/inbox/repository.js +8 -2
  297. package/dist/src/proactive/index.d.ts +4 -2
  298. package/dist/src/proactive/index.js +5 -3
  299. package/dist/src/proactive/temporal/worker.d.ts +16 -0
  300. package/dist/src/proactive/temporal/worker.js +110 -0
  301. package/dist/src/projects/project-loop.js +3 -3
  302. package/dist/src/providers/auth-runtime/oauth.js +12 -0
  303. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  304. package/dist/src/providers/index.js +2 -2
  305. package/dist/src/providers/model-registry.js +1 -1
  306. package/dist/src/providers/register-runtime-providers.js +1 -1
  307. package/dist/src/share/share-zip.js +1 -1
  308. package/dist/src/share/site-proxy.js +1 -1
  309. package/dist/src/storage/sqlite/activity-repository.d.ts +1 -0
  310. package/dist/src/storage/sqlite/activity-repository.js +4 -1
  311. package/dist/src/storage/sqlite/connector-sync-policy-repository.d.ts +20 -0
  312. package/dist/src/storage/sqlite/connector-sync-policy-repository.js +50 -0
  313. package/dist/src/storage/sqlite/execution-receipt-repository.d.ts +146 -0
  314. package/dist/src/storage/sqlite/execution-receipt-repository.js +235 -0
  315. package/dist/src/storage/sqlite/index.d.ts +4 -2
  316. package/dist/src/storage/sqlite/index.js +6 -4
  317. package/dist/src/storage/sqlite/knowledge-repository.d.ts +3 -0
  318. package/dist/src/storage/sqlite/knowledge-repository.js +9 -1
  319. package/dist/src/storage/sqlite/memory-records-repository.js +1 -1
  320. package/dist/src/storage/sqlite/migrations/075_connector_sync_policies.sql +13 -0
  321. package/dist/src/storage/sqlite/migrations/076_meeting_preparation_scenario.sql +29 -0
  322. package/dist/src/storage/sqlite/migrations/077_proactive_insight_fingerprints.sql +4 -0
  323. package/dist/src/storage/sqlite/migrations/078_discussion_captures.sql +64 -0
  324. package/dist/src/storage/sqlite/migrations/079_discussion_follow_up_scenario.sql +29 -0
  325. package/dist/src/storage/sqlite/migrations/080_task_outcome_context.sql +15 -0
  326. package/dist/src/storage/sqlite/migrations/081_project_monitoring_policies.sql +10 -0
  327. package/dist/src/storage/sqlite/migrations/082_one_click_live_discussions.sql +100 -0
  328. package/dist/src/storage/sqlite/migrations/083_session_task_plans.sql +9 -0
  329. package/dist/src/storage/sqlite/migrations/084_work_intake_lifecycle.sql +26 -0
  330. package/dist/src/storage/sqlite/migrations/085_task_outcome_projection.sql +19 -0
  331. package/dist/src/storage/sqlite/migrations/086_outcome_aggregates.sql +168 -0
  332. package/dist/src/storage/sqlite/migrations/087_context_snapshots.sql +21 -0
  333. package/dist/src/storage/sqlite/migrations/088_automation_execution_deadlines.sql +5 -0
  334. package/dist/src/storage/sqlite/migrations/089_automation_run_leases.sql +8 -0
  335. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  336. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  337. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  338. package/dist/src/storage/sqlite/notes-repository.js +9 -0
  339. package/dist/src/storage/sqlite/schema.js +1 -1
  340. package/dist/src/storage/sqlite/schema.sql +89 -44
  341. package/dist/src/storage/sqlite/session-repository.js +1 -1
  342. package/dist/src/storage/sqlite/session-task-plan-repository.d.ts +20 -0
  343. package/dist/src/storage/sqlite/session-task-plan-repository.js +77 -0
  344. package/dist/src/tui/backends/embedded-backend.d.ts +2 -0
  345. package/dist/src/tui/backends/embedded-backend.js +12 -8
  346. package/dist/src/tui/tui-backend.d.ts +2 -0
  347. package/dist/src/tui/tui-oauth-login.js +1 -7
  348. package/dist/src/tui/tui-picker-overlay.js +1 -0
  349. package/dist/src/tui/tui-picker-services.d.ts +1 -0
  350. package/dist/src/tui/tui-skills-autocomplete.d.ts +6 -2
  351. package/dist/src/tui/tui-skills-autocomplete.js +10 -6
  352. package/dist/src/tui/tui-startup-resources.d.ts +3 -1
  353. package/dist/src/tui/tui-startup-resources.js +4 -3
  354. package/dist/src/tui/tui.js +4 -1
  355. package/dist/src/tunnel/frpc-binary.js +1 -1
  356. package/dist/src/tunnel/frpc-extract.js +1 -1
  357. package/dist/src/tunnel/index.js +2 -2
  358. package/dist/src/user-context/context-compiler.d.ts +31 -0
  359. package/dist/src/user-context/context-compiler.js +51 -0
  360. package/dist/src/voice/local/model-files.js +1 -1
  361. package/dist/src/voice/stt/config.d.ts +4 -0
  362. package/dist/src/voice/stt/config.js +26 -0
  363. package/dist/src/voice/stt/index.d.ts +1 -0
  364. package/dist/src/voice/stt/index.js +2 -1
  365. package/dist/src/voice/stt/list-providers.js +1 -1
  366. package/dist/src/work/attention-governor.d.ts +20 -0
  367. package/dist/src/work/attention-governor.js +46 -0
  368. package/dist/src/work/execution-context.d.ts +16 -0
  369. package/dist/src/work/execution-context.js +66 -0
  370. package/dist/src/work/home-query-service.d.ts +147 -0
  371. package/dist/src/work/home-query-service.js +389 -0
  372. package/dist/src/work/index.d.ts +14 -0
  373. package/dist/src/work/index.js +15 -0
  374. package/dist/src/work/outcome-contract-definition.d.ts +8 -0
  375. package/dist/src/work/outcome-contract-definition.js +15 -0
  376. package/dist/src/work/outcome-execution-service.d.ts +27 -0
  377. package/dist/src/work/outcome-execution-service.js +60 -0
  378. package/dist/src/work/outcome-projection-service.d.ts +7 -0
  379. package/dist/src/work/outcome-projection-service.js +51 -0
  380. package/dist/src/work/outcome-receipt-service.d.ts +13 -0
  381. package/dist/src/work/outcome-receipt-service.js +55 -0
  382. package/dist/src/work/outcome-repository.d.ts +50 -0
  383. package/dist/src/work/outcome-repository.js +112 -0
  384. package/dist/src/work/outcome-run-coordinator.d.ts +25 -0
  385. package/dist/src/work/outcome-run-coordinator.js +117 -0
  386. package/dist/src/work/project-monitoring-service.d.ts +21 -0
  387. package/dist/src/work/project-monitoring-service.js +76 -0
  388. package/dist/src/work/project-operating-view-service.d.ts +10 -0
  389. package/dist/src/work/project-operating-view-service.js +46 -0
  390. package/dist/src/work/work-intake-repository.d.ts +49 -0
  391. package/dist/src/work/work-intake-repository.js +97 -0
  392. package/dist/src/work/work-intake-service.d.ts +26 -0
  393. package/dist/src/work/work-intake-service.js +171 -0
  394. package/dist/src/work/work-value-metrics-service.d.ts +4 -0
  395. package/dist/src/work/work-value-metrics-service.js +88 -0
  396. package/dist/src/work-items/work-item-service.d.ts +0 -2
  397. package/dist/src/work-items/work-item-service.js +0 -28
  398. package/dist/src/workflows/service/workflow-run-service.js +2 -2
  399. package/dist/src/workflows/service/workflow-run-service.types.d.ts +3 -1
  400. package/dist/src/workflows/service/workflow-session-bridge.js +2 -2
  401. package/package.json +1 -1
  402. package/dist/gateway/static/root/assets/agents-DC9F12Kw.js +0 -2
  403. package/dist/gateway/static/root/assets/apps-page-5bKr05Fa.js +0 -1
  404. package/dist/gateway/static/root/assets/automation-suggestion-card-B7mxFRtf.js +0 -1
  405. package/dist/gateway/static/root/assets/automations-page-Dg6dmt5g.js +0 -6
  406. package/dist/gateway/static/root/assets/browser-settings-page-BHoo6Rpq.js +0 -8
  407. package/dist/gateway/static/root/assets/capabilities-settings-panel-BlsqN8Fu.js +0 -7
  408. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DJeT8_B4.js +0 -1
  409. package/dist/gateway/static/root/assets/channels-settings-C4VVjYEm.js +0 -1
  410. package/dist/gateway/static/root/assets/channels-status-swr-vdf8kB16.js +0 -1
  411. package/dist/gateway/static/root/assets/circle-alert-BEjgurr2.js +0 -1
  412. package/dist/gateway/static/root/assets/connectors-page-DNcrDThX.js +0 -2
  413. package/dist/gateway/static/root/assets/desktop-pet-B1urphOZ.js +0 -1
  414. package/dist/gateway/static/root/assets/desktop-pet-settings-DTL6J3EP.js +0 -1
  415. package/dist/gateway/static/root/assets/gateway-settings-DmObBx9b.js +0 -1
  416. package/dist/gateway/static/root/assets/goal-create-dialog-BRhmmBe9.js +0 -1
  417. package/dist/gateway/static/root/assets/goal-detail-page-C1k7_s_O.js +0 -4
  418. package/dist/gateway/static/root/assets/goals-config-api-Fwu1wjEP.js +0 -1
  419. package/dist/gateway/static/root/assets/goals-page-hOu9uA3q.js +0 -2
  420. package/dist/gateway/static/root/assets/goals-settings-DY-JjvHz.js +0 -1
  421. package/dist/gateway/static/root/assets/index-C0CGebQ1.js +0 -212
  422. package/dist/gateway/static/root/assets/index-eqq25gvV.css +0 -1
  423. package/dist/gateway/static/root/assets/local-app-workbench-page-EjsNT7nJ.js +0 -2
  424. package/dist/gateway/static/root/assets/logs-page-Dswjlraa.js +0 -7
  425. package/dist/gateway/static/root/assets/messages-DP6tPKk-.js +0 -3
  426. package/dist/gateway/static/root/assets/notes-workbench-DSh3-hMY.js +0 -4
  427. package/dist/gateway/static/root/assets/product-delivery-BTRT9kCS.js +0 -1
  428. package/dist/gateway/static/root/assets/project-detail-page-D0QPRHR_.js +0 -1
  429. package/dist/gateway/static/root/assets/projects-page-CI5Vz62F.js +0 -1
  430. package/dist/gateway/static/root/assets/remote-access-hub-S1jpzBS5.js +0 -1
  431. package/dist/gateway/static/root/assets/sessions-page-CTm66k7h.js +0 -1
  432. package/dist/gateway/static/root/assets/settings-advanced-gate-CU52AUVD.js +0 -1
  433. package/dist/gateway/static/root/assets/shares-settings-DK6XK95e.js +0 -1
  434. package/dist/gateway/static/root/assets/skill-reload-api-Bvv_u4ii.js +0 -1
  435. package/dist/gateway/static/root/assets/skills-page-BGHvVbay.js +0 -2
  436. package/dist/gateway/static/root/assets/time-picker-XwpxdZFr.js +0 -1
  437. package/dist/gateway/static/root/assets/user-context-page-DBCMk-Vn.js +0 -1
  438. package/dist/gateway/static/root/assets/work-discovery-page-C1UIdsCl.js +0 -1
  439. package/dist/gateway/static/root/assets/work-item-detail-page-DEAQepB8.js +0 -1
  440. package/dist/gateway/static/root/assets/work-page-D5qYmCTq.js +0 -3
  441. package/dist/gateway/static/root/assets/workflows-page-yrK17ZZ5.js +0 -11
  442. package/dist/src/agent/outcomes/task-verifier.d.ts +0 -29
  443. package/dist/src/gateway/hono/routes/task-outcomes.d.ts +0 -3
  444. package/dist/src/gateway/hono/routes/task-outcomes.js +0 -109
  445. package/dist/src/goals/goal-contract-draft.d.ts +0 -15
  446. package/dist/src/goals/goal-contract-draft.js +0 -112
  447. package/dist/src/goals/goal-evidence-review.d.ts +0 -15
  448. package/dist/src/goals/goal-evidence-review.js +0 -89
  449. package/dist/src/storage/sqlite/task-outcome-repository.d.ts +0 -90
  450. package/dist/src/storage/sqlite/task-outcome-repository.js +0 -138
@@ -2,9 +2,10 @@ import { inboundCorrelationMetadataFromAsyncLogContext, updateAsyncLogContext }
2
2
  import { createLogger } from "../../utils/logger/index.js";
3
3
  import { init_logger } from "../../utils/logger.js";
4
4
  import { updateInteractionStateFromMessage } from "../../storage/sqlite/interaction-state-repository.js";
5
- import { completeTaskOutcome, startTaskOutcome, updateTaskOutcome } from "../../storage/sqlite/task-outcome-repository.js";
6
5
  import "../../storage/sqlite/index.js";
7
6
  import { init_session_key, parseSessionKey } from "../../routing/session-key.js";
7
+ import { resolveExecutionContext } from "../../work/execution-context.js";
8
+ import { OutcomeRunCoordinator } from "../../work/outcome-run-coordinator.js";
8
9
  import { recordExplicitRelationshipFollowUp } from "../../user-context/relationship-continuity.js";
9
10
  import { formatAgentRunErrorForClient } from "../../agent/client-error-format.js";
10
11
  import { prependEnvelopeTimestamp } from "../../channels/envelope-timestamp.js";
@@ -30,13 +31,12 @@ async function* runGatewayAgent(deps, message, channel, chatId, attachments, thi
30
31
  const runId = crypto.randomUUID();
31
32
  const { agentService, bus, runRelay, runAbortControllers, activeWebchatRunBySession, sessionIndex: sessionIndexFromDeps, emit } = deps;
32
33
  const sessionIndex = sessionIndexFromDeps;
33
- let taskOutcomeStarted = false;
34
- let taskOutcomeStatus = "failed";
35
- let taskOutcomeSummary = "Agent run ended unexpectedly";
36
- let taskContract;
37
- const taskEvidence = [];
34
+ let outcomeRun;
35
+ let executionReceiptStatus = "failed";
36
+ let executionReceiptSummary = "Agent run ended unexpectedly";
38
37
  let webchatSessionKey;
39
38
  let webchatSessionId;
39
+ let webchatMetadata;
40
40
  let webchatStaleSkip = false;
41
41
  if (channel === "webchat") {
42
42
  const resolved = resolveWebchatSessionKey({ sessionKey: chatId });
@@ -45,6 +45,7 @@ async function* runGatewayAgent(deps, message, channel, chatId, attachments, thi
45
45
  const meta = await sessionIndex.getSessionMetadata(webchatSessionKey);
46
46
  if (!meta) throw new Error("Session not found; create sessions via POST /api/sessions");
47
47
  webchatSessionId = meta?.sessionId;
48
+ webchatMetadata = meta;
48
49
  webchatStaleSkip = shouldSkipWebchatInboundByAbortCutoff(meta, runOptions?.clientCreatedAtMs);
49
50
  if (!webchatStaleSkip && meta?.abortCutoffTimestamp !== void 0) await sessionIndex.updateSessionMetadata(webchatSessionKey, { abortCutoffTimestamp: void 0 }).catch(() => {});
50
51
  runRelay.ensureRun(runId, webchatSessionKey);
@@ -52,6 +53,7 @@ async function* runGatewayAgent(deps, message, channel, chatId, attachments, thi
52
53
  }
53
54
  const streamSessionKey = webchatSessionKey ?? chatId;
54
55
  if (webchatSessionKey) {
56
+ if (!webchatMetadata) throw new Error("Session metadata is unavailable");
55
57
  const parsedSession = parseSessionKey(webchatSessionKey);
56
58
  if (!parsedSession) throw new Error("Resolved webchat session key is invalid");
57
59
  updateInteractionStateFromMessage({
@@ -63,13 +65,17 @@ async function* runGatewayAgent(deps, message, channel, chatId, attachments, thi
63
65
  sourceAgentId: parsedSession.agentId,
64
66
  message
65
67
  });
66
- startTaskOutcome({
68
+ const executionContext = resolveExecutionContext({
67
69
  runId,
68
70
  sessionKey: webchatSessionKey,
69
71
  channel,
70
- objective: message.trim()
72
+ metadata: webchatMetadata
73
+ });
74
+ outcomeRun = OutcomeRunCoordinator.start({
75
+ runId,
76
+ context: executionContext,
77
+ fallbackObjective: message
71
78
  });
72
- taskOutcomeStarted = true;
73
79
  }
74
80
  const mapper = new ChatStreamMapper({
75
81
  runId,
@@ -77,39 +83,28 @@ async function* runGatewayAgent(deps, message, channel, chatId, attachments, thi
77
83
  channel
78
84
  });
79
85
  let registeredActiveWebchatRun = false;
80
- const addTaskEvidence = (evidence) => {
81
- if (taskEvidence.some((item) => item.kind === evidence.kind && item.title === evidence.title)) return;
82
- taskEvidence.push(evidence);
83
- };
84
86
  const captureTaskEvent = (event) => {
87
+ if (event.type === "task_plan_updated") {
88
+ outcomeRun?.capturePlan(event.payload.items);
89
+ return;
90
+ }
85
91
  if (event.type === "turn_plan") {
86
- taskContract = {
87
- objective: message.trim(),
88
- deliverables: [],
89
- acceptanceCriteria: event.payload.plan.map((item) => item.step),
90
- constraints: [],
91
- approvalRequired: []
92
- };
92
+ outcomeRun?.capturePlan(event.payload.plan.map((item) => ({
93
+ title: item.step,
94
+ status: item.status
95
+ })));
93
96
  return;
94
97
  }
95
98
  if (event.type === "patch_applied") {
96
- addTaskEvidence({
97
- kind: "state",
98
- title: "Changes applied",
99
- summary: `${event.payload.added} additions and ${event.payload.removed} removals`
100
- });
99
+ outcomeRun?.capturePatch(event.payload.added, event.payload.removed);
101
100
  return;
102
101
  }
103
- if (event.type === "command_completed" && event.payload.exitCode === 0 && /(^|\s)(test|vitest|jest|pytest|lint|typecheck|build)(\s|$|:)/i.test(event.payload.command)) addTaskEvidence({
104
- kind: "test",
105
- title: event.payload.command.slice(0, 120),
106
- summary: event.payload.durationMs === void 0 ? "Command completed successfully" : `Command completed successfully in ${event.payload.durationMs} ms`
107
- });
102
+ if (event.type === "command_completed" && event.payload.exitCode === 0 && /(^|\s)(test|vitest|jest|pytest|lint|typecheck|build)(\s|$|:)/i.test(event.payload.command)) outcomeRun?.captureCommand(event.payload.command, event.payload.durationMs);
108
103
  };
109
104
  const publishStreamEvent = (event) => channel === "webchat" ? runRelay.publish(runId, event) ?? event : event;
110
105
  const emitAndYield = function* (events) {
111
106
  for (const event of events) {
112
- if (taskOutcomeStarted) captureTaskEvent(event);
107
+ if (outcomeRun) captureTaskEvent(event);
113
108
  const relayedEvent = publishStreamEvent(event);
114
109
  if (channel === "webchat") emit("agent.stream", {
115
110
  sessionKey: streamSessionKey,
@@ -122,8 +117,8 @@ async function* runGatewayAgent(deps, message, channel, chatId, attachments, thi
122
117
  try {
123
118
  if (channel === "webchat" && webchatSessionKey) {
124
119
  if (webchatStaleSkip) {
125
- taskOutcomeStatus = "cancelled";
126
- taskOutcomeSummary = "Stale inbound message skipped";
120
+ executionReceiptStatus = "cancelled";
121
+ executionReceiptSummary = "Stale inbound message skipped";
127
122
  yield* emitAndYield(mapper.end("cancelled", "Stale inbound after abort (clientCreatedAtMs before cutoff)"));
128
123
  runRelay.complete(runId);
129
124
  runAbortControllers.delete(runId);
@@ -160,8 +155,8 @@ async function* runGatewayAgent(deps, message, channel, chatId, attachments, thi
160
155
  for await (const event of coalesceThinkingDeltas(mappedEvents)) yield* emitAndYield([event]);
161
156
  const endStatus = mergedSignal.aborted ? "cancelled" : "success";
162
157
  const endSummary = mergedSignal.aborted ? "Interrupted" : "Message processed successfully";
163
- taskOutcomeStatus = mergedSignal.aborted ? "cancelled" : "succeeded";
164
- taskOutcomeSummary = endSummary;
158
+ executionReceiptStatus = mergedSignal.aborted ? "cancelled" : "succeeded";
159
+ executionReceiptSummary = endSummary;
165
160
  yield* emitAndYield(mapper.end(endStatus, endSummary));
166
161
  runRelay.complete(runId);
167
162
  try {
@@ -186,8 +181,8 @@ async function* runGatewayAgent(deps, message, channel, chatId, attachments, thi
186
181
  channel: "webchat"
187
182
  }, `Agent processing failed: ${em}`);
188
183
  streamError = em;
189
- taskOutcomeStatus = "failed";
190
- taskOutcomeSummary = em;
184
+ executionReceiptStatus = "failed";
185
+ executionReceiptSummary = em;
191
186
  const errorContent = formatAgentRunErrorForClient(streamError);
192
187
  yield* emitAndYield(mapper.error(errorContent));
193
188
  yield* emitAndYield(mapper.end("error", streamError));
@@ -265,16 +260,16 @@ async function* runGatewayAgent(deps, message, channel, chatId, attachments, thi
265
260
  payload: { messageId }
266
261
  }]);
267
262
  yield* emitAndYield(mapper.end("success", "Message processed"));
268
- taskOutcomeStatus = "succeeded";
269
- taskOutcomeSummary = "Message processed";
263
+ executionReceiptStatus = "succeeded";
264
+ executionReceiptSummary = "Message processed";
270
265
  return {
271
266
  status: "ok",
272
267
  summary: "Message processed"
273
268
  };
274
269
  } catch (error) {
275
270
  const em = error instanceof Error ? error.message : String(error);
276
- taskOutcomeStatus = "failed";
277
- taskOutcomeSummary = em;
271
+ executionReceiptStatus = "failed";
272
+ executionReceiptSummary = em;
278
273
  log.error({
279
274
  err: error,
280
275
  errorMessage: em,
@@ -285,17 +280,17 @@ async function* runGatewayAgent(deps, message, channel, chatId, attachments, thi
285
280
  }, `Agent run failed: ${em}`);
286
281
  throw error;
287
282
  } finally {
288
- if (taskOutcomeStarted) {
289
- updateTaskOutcome({
290
- runId,
291
- ...taskContract ? { contract: taskContract } : {},
292
- evidence: taskEvidence
293
- });
294
- completeTaskOutcome({
295
- runId,
296
- status: taskOutcomeStatus,
297
- summary: taskOutcomeSummary
283
+ if (outcomeRun) try {
284
+ outcomeRun.finalize({
285
+ status: executionReceiptStatus,
286
+ summary: executionReceiptSummary
298
287
  });
288
+ } catch (err) {
289
+ const errorMessage = err instanceof Error ? err.message : String(err);
290
+ log.warn({
291
+ err,
292
+ runId
293
+ }, `Outcome run finalization failed: ${errorMessage}`);
299
294
  }
300
295
  }
301
296
  }
@@ -1,6 +1,7 @@
1
1
  import { AgentService } from '../agent/service.js';
2
2
  import { MessageBus } from '../infra/bus/index.js';
3
3
  import { AutomationService } from '../automations/index.js';
4
+ import { DiscussionLiveWorker, DiscussionService, DiscussionWorker } from '../discussions/index.js';
4
5
  import { NotesService } from '../notes/index.js';
5
6
  import { WorkflowRunService } from '../workflows/service/workflow-run-service.js';
6
7
  import { ExtensionLoader } from '../extensions/index.js';
@@ -14,7 +15,7 @@ import { ProjectService } from '../projects/index.js';
14
15
  import { LocalAppService } from '../local-apps/index.js';
15
16
  import { WorkItemService } from '../work-items/index.js';
16
17
  import { type BrowserRecipeService } from '../browser/recipes/index.js';
17
- import { listInsights, ProactiveEventService, ProactiveInboxService, ProactiveInboxWorker, ProactiveScenarioService, ProactiveWorker } from '../proactive/index.js';
18
+ import { listInsights, ProactiveEventService, ProactiveInboxService, ProactiveInboxWorker, ProactiveScenarioService, ProactiveTemporalWorker, ProactiveWorker } from '../proactive/index.js';
18
19
  import { GatewaySessionsApi } from './service/sessions-api.js';
19
20
  import { GatewayMarketplaceService } from './service/marketplace-service.js';
20
21
  import { GatewayAgentRunner } from './service/agent-runner.js';
@@ -67,6 +68,7 @@ export declare class GatewayService {
67
68
  private mobileNotifications;
68
69
  private connectorSupervisor;
69
70
  private connectorLearningCoordinator;
71
+ private connectedSourceChangePublisher;
70
72
  private connectedKnowledgeCoordinator;
71
73
  private stopAutomationProductEventBridge;
72
74
  private stopSessionTranscriptAutomationEvents;
@@ -92,6 +94,9 @@ export declare class GatewayService {
92
94
  /** First-class project grouping surface. */
93
95
  readonly projects: ProjectService;
94
96
  readonly workItems: WorkItemService;
97
+ readonly discussions: DiscussionService;
98
+ readonly discussionWorker: DiscussionWorker;
99
+ readonly discussionLiveWorker: DiscussionLiveWorker;
95
100
  /** Local user-created apps, their coder projects, previews, and installs. */
96
101
  readonly localApps: LocalAppService;
97
102
  /** Unified durable event spine for proactive scenarios. */
@@ -100,6 +105,7 @@ export declare class GatewayService {
100
105
  readonly proactiveInbox: ProactiveInboxService;
101
106
  readonly proactiveInsights: typeof listInsights;
102
107
  readonly proactiveWorker: ProactiveWorker;
108
+ readonly proactiveTemporalWorker: ProactiveTemporalWorker;
103
109
  readonly proactiveInboxWorker: ProactiveInboxWorker;
104
110
  constructor(serviceConfig?: GatewayServiceConfig);
105
111
  /** Lazy AgentService — constructed on first use or during `start()`. */
@@ -130,6 +136,7 @@ export declare class GatewayService {
130
136
  private schedulePostReadySidecars;
131
137
  private runPostReadySidecars;
132
138
  start(): Promise<void>;
139
+ private ensureDefaultProactiveScenarioSubscriptions;
133
140
  /** Called when the HTTP listener is bound (before deferred channel work). */
134
141
  markHttpListening(): void;
135
142
  isGatewayReady(): boolean;
@@ -8,22 +8,36 @@ import { closeXopcDatabase, openXopcDatabase } from "../storage/sqlite/connectio
8
8
  import "../storage/sqlite/index.js";
9
9
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
10
10
  import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveDefaultAgentId } from "../agent/agent-scope.js";
11
- import { buildSessionKey, init_session_key, sanitizeSegment } from "../routing/session-key.js";
12
- import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
13
11
  import { init_paths, resolveAgentDir, resolveConfigPath, resolveExtensionsDir } from "../config/paths.js";
12
+ import { prewarmModelRegistry } from "../providers/model-registry.js";
14
13
  import { areExtensionsGloballyDisabled } from "../extensions/discover-extensions.js";
15
14
  import { buildExtensionMetadataSnapshot } from "../extensions/extension-metadata-snapshot.js";
16
15
  import { buildChannelCatalogForConfig, buildChannelCatalogFromSnapshot, init_channel_catalog_service } from "../channels/catalog/channel-catalog-service.js";
17
16
  import { loadConfig, saveConfig } from "../config/loader.js";
18
- import { prewarmModelRegistry } from "../providers/model-registry.js";
17
+ import { buildSessionKey, init_session_key, sanitizeSegment } from "../routing/session-key.js";
18
+ import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
19
19
  import { init_providers, providers_exports } from "../providers/index.js";
20
20
  import { onAutomationProductEvent, publishAutomationProductEvent } from "../automations/product-events.js";
21
21
  import { GoalRunner } from "../goals/goal-runner.js";
22
22
  import { GoalNotificationService } from "../goals/goal-notifications.js";
23
23
  import "../goals/index.js";
24
24
  import { resolveEffectiveGatewayPort } from "./host.js";
25
+ import { sanitizeTunnelConfig } from "../tunnel/tunnel-config.js";
26
+ import { wireTunnelEventsToGateway } from "../tunnel/gateway-lifecycle.js";
27
+ import { buckets } from "./rate-limit/buckets.js";
28
+ import { isGatewayStrictSecurityEnabled } from "./rate-limit/env-flags.js";
29
+ import "./rate-limit/index.js";
30
+ import { AutomationService } from "../automations/service/automation-service.js";
31
+ import "../automations/index.js";
32
+ import { WorkItemService } from "../work-items/work-item-service.js";
33
+ import { buildWorkItemAgentContext } from "../work-items/agent-context.js";
34
+ import "../work-items/index.js";
35
+ import { OutcomeProjectionService } from "../work/outcome-projection-service.js";
25
36
  import { ProjectService } from "../projects/project-service.js";
26
37
  import "../projects/index.js";
38
+ import { ProactiveScenarioService } from "../proactive/scenarios/service.js";
39
+ import { WorkIntakeService } from "../work/work-intake-service.js";
40
+ import "../work/index.js";
27
41
  import { disposeAllSessionMcpRuntimes } from "../agent/mcp/bundle-mcp-runtime.js";
28
42
  import "../agent/mcp/bundle-mcp-tools.js";
29
43
  import { onSessionTranscriptUpdate } from "../session/transcript-events.js";
@@ -35,8 +49,6 @@ import { MessageBus, MessageBusShutdownError } from "../infra/bus/queue.js";
35
49
  import "../infra/bus/index.js";
36
50
  import { AgentService } from "../agent/service.js";
37
51
  import { ensureStarterAgentsInitialized } from "../agent/starter-agents.js";
38
- import { AutomationService } from "../automations/service/automation-service.js";
39
- import "../automations/index.js";
40
52
  import { setPairingBroadcastSink } from "../channels/pairing/pairing-events.js";
41
53
  import { registerClarifyBridge } from "./clarify-runtime.js";
42
54
  import { ChannelManager } from "../channels/manager.js";
@@ -45,7 +57,13 @@ import "../config/index.js";
45
57
  import { startConnectedKnowledgeCoordinator } from "../knowledge/coordinator.js";
46
58
  import "../knowledge/index.js";
47
59
  import { startConnectorLearningCoordinator } from "../connectors/learning-coordinator.js";
60
+ import { ConnectedSourceChangePublisher } from "../connectors/source-change-publisher.js";
48
61
  import { startConnectorSupervisor } from "../connectors/supervisor.js";
62
+ import { DiscussionService } from "../discussions/service.js";
63
+ import { DiscussionPipeline } from "../discussions/pipeline.js";
64
+ import { DiscussionLiveWorker } from "../discussions/live-worker.js";
65
+ import { DiscussionWorker } from "../discussions/worker.js";
66
+ import "../discussions/index.js";
49
67
  import { assertGatewayAuthConfigured, extractToken, resolveGatewayAuth, validateToken } from "./auth.js";
50
68
  import { reconcileDreamingAutomations } from "./dreaming-automation-reconciler.js";
51
69
  import { NotesStore } from "../notes/store.js";
@@ -54,20 +72,12 @@ import { NotesService } from "../notes/service.js";
54
72
  import "../notes/index.js";
55
73
  import { buildWorkflowChildTools } from "../agent/workflow/workflow-child-tools.js";
56
74
  import { WorkflowRunService } from "../workflows/service/workflow-run-service.js";
57
- import { WorkItemService } from "../work-items/work-item-service.js";
58
- import { buildWorkItemAgentContext } from "../work-items/agent-context.js";
59
- import "../work-items/index.js";
60
75
  import { WorkflowSessionBridge } from "../workflows/service/workflow-session-bridge.js";
61
76
  import { HeartbeatService, heartbeatRunnerConfigFromConfig } from "./heartbeat/service.js";
62
77
  import "./heartbeat/index.js";
63
- import { wireTunnelEventsToGateway } from "../tunnel/gateway-lifecycle.js";
64
78
  import { stopTailscaleExposure } from "./tailscale-lifecycle.js";
65
79
  import { getExposureManager } from "../remote-access/exposure-manager.js";
66
- import { sanitizeTunnelConfig } from "../tunnel/tunnel-config.js";
67
80
  import { assertGatewayAuthNotKnownWeak } from "./security/known-weak-secrets.js";
68
- import { buckets } from "./rate-limit/buckets.js";
69
- import { isGatewayStrictSecurityEnabled } from "./rate-limit/env-flags.js";
70
- import "./rate-limit/index.js";
71
81
  import { assertGatewayRuntimeConfig } from "./runtime-config.js";
72
82
  import { auditGatewayConfig } from "./security/audit.js";
73
83
  import { ModelCatalogSyncService } from "../providers/model-catalog-sync-service.js";
@@ -77,11 +87,12 @@ import { LocalAppService } from "../local-apps/service.js";
77
87
  import "../local-apps/index.js";
78
88
  import { createRuntimeBrowserRecipeService } from "../browser/recipes/runtime-service.js";
79
89
  import "../browser/recipes/index.js";
90
+ import { mapProductEventToProactive } from "../proactive/events/product-event-bridge.js";
80
91
  import { ProactiveEventService } from "../proactive/service.js";
81
- import { ProactiveScenarioService } from "../proactive/scenarios/service.js";
82
92
  import { ReadonlyProactiveAgentExecutor } from "../proactive/execution/agent-executor.js";
83
93
  import { listInsights } from "../proactive/execution/repository.js";
84
94
  import { ProactiveWorker } from "../proactive/execution/worker.js";
95
+ import { ProactiveTemporalWorker } from "../proactive/temporal/worker.js";
85
96
  import { ProactiveInboxService } from "../proactive/inbox/service.js";
86
97
  import { ProactiveInboxWorker } from "../proactive/inbox/worker.js";
87
98
  import "../proactive/index.js";
@@ -164,6 +175,7 @@ var GatewayService = class {
164
175
  mobileNotifications = null;
165
176
  connectorSupervisor = null;
166
177
  connectorLearningCoordinator = null;
178
+ connectedSourceChangePublisher = null;
167
179
  connectedKnowledgeCoordinator = null;
168
180
  stopAutomationProductEventBridge = null;
169
181
  stopSessionTranscriptAutomationEvents = null;
@@ -191,6 +203,9 @@ var GatewayService = class {
191
203
  /** First-class project grouping surface. */
192
204
  projects;
193
205
  workItems;
206
+ discussions;
207
+ discussionWorker;
208
+ discussionLiveWorker;
194
209
  /** Local user-created apps, their coder projects, previews, and installs. */
195
210
  localApps;
196
211
  /** Unified durable event spine for proactive scenarios. */
@@ -199,6 +214,7 @@ var GatewayService = class {
199
214
  proactiveInbox = new ProactiveInboxService();
200
215
  proactiveInsights = listInsights;
201
216
  proactiveWorker;
217
+ proactiveTemporalWorker;
202
218
  proactiveInboxWorker;
203
219
  constructor(serviceConfig = {}) {
204
220
  this.serviceConfig = serviceConfig;
@@ -207,6 +223,7 @@ var GatewayService = class {
207
223
  runBootstrapMigrationsSync(this.configPath);
208
224
  this.config = loadConfig(this.configPath);
209
225
  this.proactiveWorker = new ProactiveWorker(new ReadonlyProactiveAgentExecutor(() => this.config));
226
+ this.proactiveTemporalWorker = new ProactiveTemporalWorker(this.proactive);
210
227
  this.proactiveInboxWorker = new ProactiveInboxWorker({ deliver: async ({ inboxItem }) => {
211
228
  this.sse.emit("proactive.inbox.created", inboxItem);
212
229
  await this.createMobileNotificationService().deliverGatewayEvent("proactive.inbox.created", inboxItem);
@@ -268,6 +285,50 @@ var GatewayService = class {
268
285
  this.notesService = new NotesService(new NotesStore());
269
286
  this.projects = new ProjectService(void 0, this.proactive);
270
287
  this.workItems = new WorkItemService(void 0, this.proactive);
288
+ const emitDiscussion = (capture) => {
289
+ this.sse.emit("discussion.updated", capture);
290
+ };
291
+ this.discussions = new DiscussionService(this.notesService, this.projects, (type, payload) => {
292
+ this.sse.emit(type, payload);
293
+ });
294
+ this.discussionWorker = new DiscussionWorker(new DiscussionPipeline({
295
+ notes: this.notesService,
296
+ projects: this.projects,
297
+ getConfig: () => this.config,
298
+ onUpdated: emitDiscussion,
299
+ onCompleted: (capture, analysis) => {
300
+ const payload = {
301
+ discussionId: capture.id,
302
+ noteId: capture.noteId,
303
+ projectId: capture.projectId,
304
+ completedAt: capture.completedAt,
305
+ actionCount: analysis.actionItems.length,
306
+ unownedActionCount: analysis.actionItems.filter((item) => !item.owner).length,
307
+ undatedActionCount: analysis.actionItems.filter((item) => !item.dueDate).length,
308
+ riskCount: analysis.risks.length,
309
+ openQuestionCount: analysis.openQuestions.length
310
+ };
311
+ this.sse.emit("discussion.completed", payload);
312
+ publishAutomationProductEvent({
313
+ type: "discussion.completed",
314
+ source: "discussions",
315
+ payload,
316
+ occurredAtMs: capture.completedAt
317
+ });
318
+ }
319
+ }), emitDiscussion);
320
+ this.discussionLiveWorker = new DiscussionLiveWorker({
321
+ notes: this.notesService,
322
+ projects: this.projects,
323
+ getConfig: () => this.config,
324
+ onDiscussionUpdated: emitDiscussion,
325
+ onTranscriptUpdated: (discussionId, sequence) => {
326
+ this.sse.emit("discussion.transcript.updated", {
327
+ discussionId,
328
+ sequence
329
+ });
330
+ }
331
+ });
271
332
  this.localApps = new LocalAppService({
272
333
  projects: this.projects,
273
334
  workspaceRoot: this.workspacePath,
@@ -430,7 +491,7 @@ var GatewayService = class {
430
491
  if (!this.goalRunner) this.goalRunner = new GoalRunner({
431
492
  maxConcurrent: 1,
432
493
  defaultMaxRetries: 2,
433
- ensureSession: async (goal) => {
494
+ ensureSession: async (goal, executionContext) => {
434
495
  const existing = goal.activeSessionKey?.trim();
435
496
  if (existing) return existing;
436
497
  const agentId = goal.agentId || getDefaultAgentId(this.config);
@@ -452,6 +513,16 @@ var GatewayService = class {
452
513
  accountId: "default",
453
514
  peerKind: "direct",
454
515
  peerId
516
+ },
517
+ projectId: goal.projectId,
518
+ customData: {
519
+ goalId: goal.id,
520
+ origin: "goal",
521
+ triggerKind: executionContext?.triggerKind ?? "user",
522
+ ...executionContext?.outcomeId ? { outcomeId: executionContext.outcomeId } : {},
523
+ ...executionContext?.workItemId ? { workItemId: executionContext.workItemId } : {},
524
+ ...executionContext?.contextTraceId ? { contextTraceId: executionContext.contextTraceId } : {},
525
+ ...executionContext?.parentRunId ? { parentRunId: executionContext.parentRunId } : {}
455
526
  }
456
527
  } });
457
528
  if (goal.projectId) this.projects.attachSession(sessionKey, goal.projectId);
@@ -459,6 +530,22 @@ var GatewayService = class {
459
530
  new GoalService().attachSession(goal.id, sessionKey);
460
531
  return sessionKey;
461
532
  },
533
+ bindExecutionContext: async (sessionKey, goal, executionContext) => {
534
+ const metadata = await this.sessionIndex.getSessionMetadata(sessionKey);
535
+ await this.sessionIndex.updateSessionMetadata(sessionKey, {
536
+ projectId: goal.projectId ?? metadata?.projectId,
537
+ customData: {
538
+ ...metadata?.customData,
539
+ goalId: goal.id,
540
+ origin: "goal",
541
+ triggerKind: executionContext?.triggerKind ?? "user",
542
+ ...executionContext?.outcomeId ? { outcomeId: executionContext.outcomeId } : {},
543
+ ...executionContext?.workItemId ? { workItemId: executionContext.workItemId } : {},
544
+ ...executionContext?.contextTraceId ? { contextTraceId: executionContext.contextTraceId } : {},
545
+ ...executionContext?.parentRunId ? { parentRunId: executionContext.parentRunId } : {}
546
+ }
547
+ });
548
+ },
462
549
  hasActiveRun: (sessionKey) => this.agentRunner.hasActiveRun(sessionKey),
463
550
  runTurn: (sessionKey, userTurn) => this.agentRunner.runScheduledWebchatTurn(sessionKey, userTurn),
464
551
  emit: (type, payload) => this.emit(type, payload)
@@ -628,9 +715,13 @@ var GatewayService = class {
628
715
  });
629
716
  log.debug("Starting gateway service...");
630
717
  openXopcDatabase();
718
+ new WorkIntakeService(this.projects, { enqueue: (goalId, options) => this.enqueueGoalRun(goalId, options) }).reconcilePendingExecutions();
719
+ new OutcomeProjectionService().reconcile();
631
720
  this.startTime = Date.now();
632
721
  this.running = true;
722
+ this.ensureDefaultProactiveScenarioSubscriptions();
633
723
  this.proactiveWorker.start();
724
+ this.proactiveTemporalWorker.start();
634
725
  this.proactiveInboxWorker.start();
635
726
  prepareConfiguredLocalVoiceModel(this.config);
636
727
  this.startupTrace = createGatewayStartupTrace();
@@ -726,6 +817,8 @@ var GatewayService = class {
726
817
  await trace.measure("automations.initialize", () => this.automationService.initialize());
727
818
  await trace.measure("dreaming.reconcile", () => this.reconcileDreamingAutomations());
728
819
  await this.notesService.initialize();
820
+ this.discussionWorker.start();
821
+ this.discussionLiveWorker.start();
729
822
  this.ensureHeartbeatService().start(heartbeatRunnerConfigFromConfig(this.config));
730
823
  this.connectorSupervisor = startConnectorSupervisor({
731
824
  getConfig: () => this.config,
@@ -737,6 +830,8 @@ var GatewayService = class {
737
830
  getMemoryManager: () => this.agentService.getMemoryManager(),
738
831
  emit: (type, payload) => this.emit(type, payload)
739
832
  });
833
+ this.connectedSourceChangePublisher = new ConnectedSourceChangePublisher(this.proactive);
834
+ this.connectedSourceChangePublisher.start();
740
835
  this.connectedKnowledgeCoordinator = startConnectedKnowledgeCoordinator({ resolvePipelineOptions: () => ({
741
836
  agentId: resolveDefaultAgentId(this.config),
742
837
  workspaceId: this.currentWorkspacePath
@@ -763,6 +858,18 @@ var GatewayService = class {
763
858
  else trace.mark("service.started-awaiting-http");
764
859
  log.debug("Gateway service started");
765
860
  }
861
+ ensureDefaultProactiveScenarioSubscriptions() {
862
+ for (const scenarioKey of ["meeting_preparation", "discussion_follow_up"]) {
863
+ if (this.proactiveScenarios.subscriptions(scenarioKey).some((subscription) => subscription.workspaceId === this.currentWorkspacePath)) continue;
864
+ this.proactiveScenarios.subscribe({
865
+ scenarioKey,
866
+ workspaceId: this.currentWorkspacePath,
867
+ scopeKind: "workspace",
868
+ scopeId: this.currentWorkspacePath,
869
+ enabled: true
870
+ });
871
+ }
872
+ }
766
873
  /** Called when the HTTP listener is bound (before deferred channel work). */
767
874
  markHttpListening() {
768
875
  this.readiness.markHttpListening();
@@ -850,6 +957,9 @@ var GatewayService = class {
850
957
  log.debug("Stopping gateway service...");
851
958
  this.readiness.markStarting();
852
959
  await this.proactiveWorker.stop();
960
+ await this.discussionWorker.stop();
961
+ await this.discussionLiveWorker.stop();
962
+ this.proactiveTemporalWorker.stop();
853
963
  await this.proactiveInboxWorker.stop();
854
964
  await stopTailscaleExposure().catch((err) => {
855
965
  log.warn({ err }, "Tailscale exposure shutdown failed");
@@ -865,6 +975,8 @@ var GatewayService = class {
865
975
  this.connectorSupervisor = null;
866
976
  this.connectorLearningCoordinator?.stop();
867
977
  this.connectorLearningCoordinator = null;
978
+ this.connectedSourceChangePublisher?.stop();
979
+ this.connectedSourceChangePublisher = null;
868
980
  this.connectedKnowledgeCoordinator?.stop();
869
981
  this.connectedKnowledgeCoordinator = null;
870
982
  await this.browserRecipeService?.shutdown();
@@ -1296,6 +1408,21 @@ var GatewayService = class {
1296
1408
  this.stopAutomationProductEventBridge?.();
1297
1409
  this.stopSessionTranscriptAutomationEvents?.();
1298
1410
  this.stopAutomationProductEventBridge = onAutomationProductEvent((event) => {
1411
+ const proactiveEvent = mapProductEventToProactive({
1412
+ event,
1413
+ workspaceId: this.currentWorkspacePath,
1414
+ defaultAgentId: resolveDefaultAgentId(this.config)
1415
+ });
1416
+ if (proactiveEvent) try {
1417
+ this.proactive.publish(proactiveEvent);
1418
+ } catch (err) {
1419
+ const em = err instanceof Error ? err.message : String(err);
1420
+ log.warn({
1421
+ err,
1422
+ eventType: event.type,
1423
+ source: event.source
1424
+ }, `Proactive product event publication failed: ${em}`);
1425
+ }
1299
1426
  this.automationService.triggerEvent(event).catch((err) => {
1300
1427
  const em = err instanceof Error ? err.message : String(err);
1301
1428
  log.warn({
@@ -4,6 +4,7 @@ export declare class GoalQueueStore {
4
4
  enqueue(input: {
5
5
  goalId: string;
6
6
  userTurn?: UserTurnInput;
7
+ executionContext?: GoalQueueItemSnapshot['executionContext'];
7
8
  maxRetries: number;
8
9
  source: GoalQueueItemSnapshot['source'];
9
10
  }): GoalQueueItemSnapshot;
@@ -23,6 +23,7 @@ function rowToSnapshot(row) {
23
23
  nextRunAt: row.next_run_at ?? void 0,
24
24
  sessionKey: row.session_key ?? void 0,
25
25
  userTurn: payload.userTurn,
26
+ executionContext: payload.executionContext,
26
27
  lastError: row.last_error ?? void 0,
27
28
  source: row.source
28
29
  };
@@ -41,7 +42,10 @@ var GoalQueueStore = class {
41
42
  queue_id: randomUUID(),
42
43
  goal_id: input.goalId,
43
44
  status: "queued",
44
- payload_json: JSON.stringify({ userTurn: input.userTurn }),
45
+ payload_json: JSON.stringify({
46
+ userTurn: input.userTurn,
47
+ executionContext: input.executionContext
48
+ }),
45
49
  attempts: 0,
46
50
  max_retries: input.maxRetries,
47
51
  enqueued_at: now,
@@ -1,6 +1,13 @@
1
1
  import type { GoalWithDetails } from './types.js';
2
2
  import type { UserTurnInput } from '../gateway/user-turn-input.js';
3
3
  export type GoalQueueStatus = 'queued' | 'running' | 'retry_waiting' | 'succeeded' | 'failed' | 'skipped';
4
+ export interface GoalRunExecutionContext {
5
+ outcomeId?: string;
6
+ workItemId?: string;
7
+ contextTraceId?: string;
8
+ parentRunId?: string;
9
+ triggerKind: 'user' | 'schedule' | 'webhook' | 'proactive' | 'retry';
10
+ }
4
11
  export interface GoalQueueItemSnapshot {
5
12
  id: string;
6
13
  goalId: string;
@@ -13,6 +20,7 @@ export interface GoalQueueItemSnapshot {
13
20
  nextRunAt?: number;
14
21
  sessionKey?: string;
15
22
  userTurn?: UserTurnInput;
23
+ executionContext?: GoalRunExecutionContext;
16
24
  lastError?: string;
17
25
  source: 'api' | 'cron' | 'workflow' | 'system';
18
26
  }
@@ -20,7 +28,8 @@ export interface GoalRunnerOptions {
20
28
  maxConcurrent?: number;
21
29
  defaultMaxRetries?: number;
22
30
  retryBaseMs?: number;
23
- ensureSession: (goal: GoalWithDetails) => Promise<string>;
31
+ ensureSession: (goal: GoalWithDetails, context?: GoalRunExecutionContext) => Promise<string>;
32
+ bindExecutionContext?: (sessionKey: string, goal: GoalWithDetails, context?: GoalRunExecutionContext) => Promise<void>;
24
33
  hasActiveRun: (sessionKey: string) => boolean;
25
34
  runTurn: (sessionKey: string, userTurn: UserTurnInput) => Promise<void>;
26
35
  emit?: (type: string, payload: unknown) => void;
@@ -29,4 +38,5 @@ export interface EnqueueGoalRunOptions {
29
38
  userTurn?: UserTurnInput;
30
39
  maxRetries?: number;
31
40
  source?: GoalQueueItemSnapshot['source'];
41
+ executionContext?: GoalRunExecutionContext;
32
42
  }