@xopcai/xopc 0.0.177 → 0.0.179

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 (353) 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-Wu2ikfbM.js → activity-store-A5FUMjeV.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-B0_biISn.js → agent-avatar-dicebear-NghNiDWx.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents-Baq8Shzy.js +2 -0
  6. package/dist/gateway/static/root/assets/{api-DljBt-N5.js → api-Bmzslx0Z.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-CKoZRi7Y.js → app-management-settings-panel-DDWS_BBJ.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-DOdXhNDo.js → appearance-settings-C6znvVtX.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-d-Y0Jbe1.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-D18gyP76.js → archive-plugin-fvTZhPUr.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-CZh9fc8u.js → attachment-load-BFEgvg-Q.js} +1 -1
  12. package/dist/gateway/static/root/assets/automations-page-CFYOCBlQ.js +6 -0
  13. package/dist/gateway/static/root/assets/{binary-plugins-DdSyGL6M.js → binary-plugins-CuI2bOc7.js} +1 -1
  14. package/dist/gateway/static/root/assets/{block-editor-BOpNApiX.js → block-editor-Z_k8W0al.js} +46 -46
  15. package/dist/gateway/static/root/assets/browser-settings-page-CGApoYPr.js +8 -0
  16. package/dist/gateway/static/root/assets/{browser-workflow-inputs-C0SnSj_R.js → browser-workflow-inputs-gs6b5e9-.js} +1 -1
  17. package/dist/gateway/static/root/assets/{browser-workflows-page-CzlzH7HA.js → browser-workflows-page-Cq5qXStp.js} +2 -2
  18. package/dist/gateway/static/root/assets/capabilities-settings-panel-BC-8n4Hl.js +7 -0
  19. package/dist/gateway/static/root/assets/{capability-presets-api-RM6S7ES5.js → capability-presets-api-BTKhPoDC.js} +1 -1
  20. package/dist/gateway/static/root/assets/capability-presets-settings-panel-D7WQ0oBN.js +1 -0
  21. package/dist/gateway/static/root/assets/{channel-recipient-api-B4sha-30.js → channel-recipient-api-TwMak0SE.js} +1 -1
  22. package/dist/gateway/static/root/assets/channels-settings-DysELlO_.js +1 -0
  23. package/dist/gateway/static/root/assets/channels-status-swr-BAC-R8IK.js +1 -0
  24. package/dist/gateway/static/root/assets/{connector-logo-BPsKIyoM.js → connector-logo-DBKotvNr.js} +1 -1
  25. package/dist/gateway/static/root/assets/connectors-page-QH-0WnOo.js +2 -0
  26. package/dist/gateway/static/root/assets/desktop-pet-Dwml8znf.js +1 -0
  27. package/dist/gateway/static/root/assets/desktop-pet-settings-CyIg2jJp.js +1 -0
  28. package/dist/gateway/static/root/assets/{directory-picker-path-field-BoZGualI.js → directory-picker-path-field-B6fc_7SL.js} +1 -1
  29. package/dist/gateway/static/root/assets/{dreaming-settings-s3gn3f9h.js → dreaming-settings-CUQxGnDf.js} +3 -3
  30. package/dist/gateway/static/root/assets/{extension-debug-page-DIbMngCF.js → extension-debug-page-AbRNi2ON.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-page-D94f2bWQ.js → extension-page-ClYfiLXC.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-settings-page-B7TI13ex.js → extension-settings-page-BGVP2hw1.js} +1 -1
  33. package/dist/gateway/static/root/assets/{gateway-config-api-Do77rV8R.js → gateway-config-api-B7GqtklK.js} +1 -1
  34. package/dist/gateway/static/root/assets/gateway-settings-BMeK8igT.js +1 -0
  35. package/dist/gateway/static/root/assets/{gateway-startup-retry-WaXTw3fi.js → gateway-startup-retry-CKKL96r_.js} +1 -1
  36. package/dist/gateway/static/root/assets/goals-settings-Dj0ao2qA.js +1 -0
  37. package/dist/gateway/static/root/assets/{heartbeat-settings-C3kzg6ai.js → heartbeat-settings-CTI2nPKa.js} +1 -1
  38. package/dist/gateway/static/root/assets/{image-generation-api-BgISY8i-.js → image-generation-api-BY3VQ5Mv.js} +1 -1
  39. package/dist/gateway/static/root/assets/index-B0Tdge_q.css +1 -0
  40. package/dist/gateway/static/root/assets/index-BDzspHrg.js +224 -0
  41. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-0KSmaPu0.js → keyboard-shortcuts-settings-CELtDFz3.js} +1 -1
  42. package/dist/gateway/static/root/assets/local-app-workbench-page-m8CTSGix.js +2 -0
  43. package/dist/gateway/static/root/assets/{local-apps-page-BMrU8u7w.js → local-apps-page-CF5uUd1n.js} +1 -1
  44. package/dist/gateway/static/root/assets/{locale-store-DVGhFXRz.js → locale-store-DIVc0AQs.js} +1 -1
  45. package/dist/gateway/static/root/assets/logs-page-DmH7Tk4k.js +7 -0
  46. package/dist/gateway/static/root/assets/{markdown-split-BVqbtN9o.js → markdown-split-CN85EdB8.js} +1 -1
  47. package/dist/gateway/static/root/assets/{media-plugins-Dr_wtkNJ.js → media-plugins-CxYEc-b8.js} +1 -1
  48. package/dist/gateway/static/root/assets/messages-DYqBwJAK.js +3 -0
  49. package/dist/gateway/static/root/assets/{notes-page-BWZRXsq6.js → notes-page-Goab4781.js} +1 -1
  50. package/dist/gateway/static/root/assets/notes-workbench-C4jDBVBN.js +4 -0
  51. package/dist/gateway/static/root/assets/outcome-detail-page-DNRfeLZp.js +1 -0
  52. package/dist/gateway/static/root/assets/{page-tabs-DWWgy0bF.js → page-tabs-tQNQcAts.js} +1 -1
  53. package/dist/gateway/static/root/assets/{preview-open-alternatives-Bnfs93ZP.js → preview-open-alternatives-BSTlgsDB.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-BR7QFmT-.js → product-open-page-iQ5gTCip.js} +1 -1
  56. package/dist/gateway/static/root/assets/project-detail-page-D7anK-eu.js +1 -0
  57. package/dist/gateway/static/root/assets/projects-page-BePESKWy.js +1 -0
  58. package/dist/gateway/static/root/assets/remote-access-hub-CHrzBKIs.js +1 -0
  59. package/dist/gateway/static/root/assets/{save-bar-controls-BzS-rRTP.js → save-bar-controls-BsPf5Gkk.js} +1 -1
  60. package/dist/gateway/static/root/assets/{schedule-field-Cl2IIDAN.js → schedule-field-kAytH7mq.js} +1 -1
  61. package/dist/gateway/static/root/assets/{schema-form-BjKjp5eZ.js → schema-form-Bbw8l2ri.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-He5YAczL.js +1 -0
  64. package/dist/gateway/static/root/assets/settings-advanced-gate-2eAC9GCP.js +1 -0
  65. package/dist/gateway/static/root/assets/{settings-form-section-BSDNBfHn.js → settings-form-section-BqbibcnJ.js} +1 -1
  66. package/dist/gateway/static/root/assets/{settings-loading-skeleton-BD4peoAv.js → settings-loading-skeleton-DNLNCEGT.js} +1 -1
  67. package/dist/gateway/static/root/assets/{settings-page-S-P3U7at.js → settings-page-BR6Ss0bK.js} +1 -1
  68. package/dist/gateway/static/root/assets/{settings-page-layout-BQTLh-86.js → settings-page-layout-Cdb1e2Cz.js} +1 -1
  69. package/dist/gateway/static/root/assets/{setup-status-panel-W3p6kNyA.js → setup-status-panel-moT-D-ia.js} +1 -1
  70. package/dist/gateway/static/root/assets/{share-preview-page-DQjMxyvw.js → share-preview-page-CkrASny2.js} +1 -1
  71. package/dist/gateway/static/root/assets/shares-settings-X49zY21H.js +1 -0
  72. package/dist/gateway/static/root/assets/skill-reload-api-CjpnFfOH.js +1 -0
  73. package/dist/gateway/static/root/assets/skills-page-DEwfSOUE.js +2 -0
  74. package/dist/gateway/static/root/assets/{skills-page.utils-CXnpudm6.js → skills-page.utils-BG5dGkyA.js} +1 -1
  75. package/dist/gateway/static/root/assets/{system-settings-panel-BhFwdYJP.js → system-settings-panel-XdY8eyYf.js} +1 -1
  76. package/dist/gateway/static/root/assets/{theme-store-DQI-HPL-.js → theme-store-DtwI_VLT.js} +1 -1
  77. package/dist/gateway/static/root/assets/time-picker-UghsQu_I.js +1 -0
  78. package/dist/gateway/static/root/assets/{typed-models-lib-C-M3Fv2N.js → typed-models-lib-DOnpwsrE.js} +1 -1
  79. package/dist/gateway/static/root/assets/{use-channel-catalog-Bndq4y4I.js → use-channel-catalog-BWDtfNvQ.js} +1 -1
  80. package/dist/gateway/static/root/assets/user-context-page-BtNBEtKj.js +1 -0
  81. package/dist/gateway/static/root/assets/{voice-api-key-field-p_g4UI1-.js → voice-api-key-field-DP80jW-W.js} +1 -1
  82. package/dist/gateway/static/root/assets/work-copy-hQmivDgT.js +1 -0
  83. package/dist/gateway/static/root/assets/work-discovery-page-CkDOVZBr.js +1 -0
  84. package/dist/gateway/static/root/assets/work-item-detail-page-CqvkcFcR.js +1 -0
  85. package/dist/gateway/static/root/assets/work-page-BL8TZW4Z.js +3 -0
  86. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CHEXVvhH.js → workflow-run-setup-panel-BLlVqKdA.js} +2 -2
  87. package/dist/gateway/static/root/assets/workflows-page-BgsdRu3_.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/code-intelligence/binary.js +1 -1
  96. package/dist/src/agent/context/execution-scope.d.ts +1 -1
  97. package/dist/src/agent/context/execution-scope.js +6 -4
  98. package/dist/src/agent/embedded/model-runtime.js +3 -0
  99. package/dist/src/agent/embedded/run-for-session.js +18 -5
  100. package/dist/src/agent/embedded/run-turn.js +6 -3
  101. package/dist/src/agent/embedded/types.d.ts +2 -0
  102. package/dist/src/agent/goals/post-turn.js +6 -5
  103. package/dist/src/agent/mcp/mcp-stdio-transport.js +1 -1
  104. package/dist/src/agent/memory/user-context-coordinator.d.ts +1 -0
  105. package/dist/src/agent/memory/user-context-coordinator.js +17 -1
  106. package/dist/src/agent/outcomes/{task-evaluation.d.ts → execution-evaluation.d.ts} +3 -3
  107. package/dist/src/agent/outcomes/{task-evaluation.js → execution-evaluation.js} +5 -5
  108. package/dist/src/agent/outcomes/execution-verifier.d.ts +29 -0
  109. package/dist/src/agent/outcomes/{task-verifier.js → execution-verifier.js} +4 -4
  110. package/dist/src/agent/service/process-direct-streaming.js +3 -1
  111. package/dist/src/agent/tools/factory.js +16 -1
  112. package/dist/src/agent/tools/goal-tool.js +5 -3
  113. package/dist/src/agent/tools/todo-tool.d.ts +5 -0
  114. package/dist/src/agent/tools/todo-tool.js +16 -4
  115. package/dist/src/agent/tools/update-plan-tool.d.ts +1 -0
  116. package/dist/src/agent/tools/update-plan-tool.js +6 -0
  117. package/dist/src/browser/providers/cloakbrowser.js +2 -2
  118. package/dist/src/channels/attachments/voice-stt-webchat.d.ts +0 -3
  119. package/dist/src/channels/attachments/voice-stt-webchat.js +1 -24
  120. package/dist/src/chat-commands/builtins/goal.js +5 -4
  121. package/dist/src/cli/commands/agents.js +1 -1
  122. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  123. package/dist/src/cli/commands/goal.js +6 -5
  124. package/dist/src/cli/commands/tunnel.js +3 -3
  125. package/dist/src/config/agent-profile.js +1 -1
  126. package/dist/src/connectors/composio-sessions.js +1 -1
  127. package/dist/src/connectors/learning-coordinator.js +7 -1
  128. package/dist/src/connectors/source-change-publisher.d.ts +17 -0
  129. package/dist/src/connectors/source-change-publisher.js +148 -0
  130. package/dist/src/discussions/analyzer.d.ts +35 -0
  131. package/dist/src/discussions/analyzer.js +127 -0
  132. package/dist/src/discussions/index.d.ts +7 -0
  133. package/dist/src/discussions/index.js +7 -0
  134. package/dist/src/discussions/live-worker.d.ts +33 -0
  135. package/dist/src/discussions/live-worker.js +148 -0
  136. package/dist/src/discussions/pipeline.d.ts +33 -0
  137. package/dist/src/discussions/pipeline.js +205 -0
  138. package/dist/src/discussions/project-inference.d.ts +13 -0
  139. package/dist/src/discussions/project-inference.js +19 -0
  140. package/dist/src/discussions/repository.d.ts +29 -0
  141. package/dist/src/discussions/repository.js +255 -0
  142. package/dist/src/discussions/service.d.ts +51 -0
  143. package/dist/src/discussions/service.js +335 -0
  144. package/dist/src/discussions/transcript.d.ts +3 -0
  145. package/dist/src/discussions/transcript.js +15 -0
  146. package/dist/src/discussions/types.d.ts +116 -0
  147. package/dist/src/discussions/types.js +10 -0
  148. package/dist/src/discussions/worker.d.ts +18 -0
  149. package/dist/src/discussions/worker.js +74 -0
  150. package/dist/src/extensions/activation-context.js +2 -1
  151. package/dist/src/extensions/sdk/testing.js +1 -1
  152. package/dist/src/gateway/agents-admin.js +2 -2
  153. package/dist/src/gateway/chat-stream/mapper.js +53 -3
  154. package/dist/src/gateway/chat-stream/protocol.d.ts +17 -1
  155. package/dist/src/gateway/hono/app.js +8 -3
  156. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  157. package/dist/src/gateway/hono/middleware/auth.js +2 -2
  158. package/dist/src/gateway/hono/middleware/logger.js +1 -1
  159. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +1 -1
  160. package/dist/src/gateway/hono/routes/agents.js +1 -1
  161. package/dist/src/gateway/hono/routes/browser-install.js +1 -1
  162. package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -2
  163. package/dist/src/gateway/hono/routes/connectors.js +79 -0
  164. package/dist/src/gateway/hono/routes/discussions.d.ts +3 -0
  165. package/dist/src/gateway/hono/routes/discussions.js +177 -0
  166. package/dist/src/gateway/hono/routes/execution-receipts.d.ts +3 -0
  167. package/dist/src/gateway/hono/routes/execution-receipts.js +163 -0
  168. package/dist/src/gateway/hono/routes/exposure.js +1 -1
  169. package/dist/src/gateway/hono/routes/goals.js +3 -288
  170. package/dist/src/gateway/hono/routes/home.d.ts +2 -102
  171. package/dist/src/gateway/hono/routes/home.js +8 -424
  172. package/dist/src/gateway/hono/routes/index.js +6 -2
  173. package/dist/src/gateway/hono/routes/memory.js +7 -7
  174. package/dist/src/gateway/hono/routes/notes.js +30 -0
  175. package/dist/src/gateway/hono/routes/projects.js +8 -152
  176. package/dist/src/gateway/hono/routes/shares.js +1 -1
  177. package/dist/src/gateway/hono/routes/status.js +2 -2
  178. package/dist/src/gateway/hono/routes/tunnel.js +3 -3
  179. package/dist/src/gateway/hono/routes/voice.js +1 -1
  180. package/dist/src/gateway/hono/routes/work.d.ts +3 -0
  181. package/dist/src/gateway/hono/routes/work.js +207 -0
  182. package/dist/src/gateway/hono/routes/you.js +12 -14
  183. package/dist/src/gateway/index.js +2 -2
  184. package/dist/src/gateway/runtime-config.js +2 -2
  185. package/dist/src/gateway/security/audit.js +2 -2
  186. package/dist/src/gateway/security/index.js +1 -1
  187. package/dist/src/gateway/service/config-coordinator.js +1 -1
  188. package/dist/src/gateway/service/run-gateway-agent.js +46 -51
  189. package/dist/src/gateway/service.d.ts +8 -1
  190. package/dist/src/gateway/service.js +139 -12
  191. package/dist/src/goals/goal-queue-store.d.ts +1 -0
  192. package/dist/src/goals/goal-queue-store.js +5 -1
  193. package/dist/src/goals/goal-queue-types.d.ts +11 -1
  194. package/dist/src/goals/goal-runner.js +10 -6
  195. package/dist/src/goals/goal-service.d.ts +2 -15
  196. package/dist/src/goals/goal-service.js +9 -42
  197. package/dist/src/goals/goal-store.d.ts +1 -18
  198. package/dist/src/goals/goal-store.js +25 -231
  199. package/dist/src/goals/index.d.ts +0 -4
  200. package/dist/src/goals/index.js +1 -3
  201. package/dist/src/goals/types.d.ts +4 -66
  202. package/dist/src/notes/agent-context.js +1 -1
  203. package/dist/src/notes/service.d.ts +1 -0
  204. package/dist/src/notes/service.js +9 -0
  205. package/dist/src/notes/types.d.ts +1 -0
  206. package/dist/src/proactive/events/product-event-bridge.d.ts +7 -0
  207. package/dist/src/proactive/events/product-event-bridge.js +84 -0
  208. package/dist/src/proactive/execution/context.d.ts +27 -11
  209. package/dist/src/proactive/execution/context.js +259 -25
  210. package/dist/src/proactive/execution/repository.js +18 -5
  211. package/dist/src/proactive/execution/types.d.ts +7 -1
  212. package/dist/src/proactive/execution/worker.js +7 -6
  213. package/dist/src/proactive/inbox/repository.js +8 -2
  214. package/dist/src/proactive/index.d.ts +4 -2
  215. package/dist/src/proactive/index.js +5 -3
  216. package/dist/src/proactive/temporal/worker.d.ts +16 -0
  217. package/dist/src/proactive/temporal/worker.js +110 -0
  218. package/dist/src/providers/provider-auth-service.js +3 -0
  219. package/dist/src/providers/register-bundled-oauth-flows.d.ts +2 -0
  220. package/dist/src/providers/register-bundled-oauth-flows.js +16 -0
  221. package/dist/src/session/store.d.ts +2 -0
  222. package/dist/src/session/store.js +30 -0
  223. package/dist/src/share/share-zip.js +1 -1
  224. package/dist/src/share/site-proxy.js +1 -1
  225. package/dist/src/storage/sqlite/activity-repository.d.ts +1 -0
  226. package/dist/src/storage/sqlite/activity-repository.js +4 -1
  227. package/dist/src/storage/sqlite/connector-sync-policy-repository.d.ts +20 -0
  228. package/dist/src/storage/sqlite/connector-sync-policy-repository.js +50 -0
  229. package/dist/src/storage/sqlite/execution-receipt-repository.d.ts +146 -0
  230. package/dist/src/storage/sqlite/execution-receipt-repository.js +235 -0
  231. package/dist/src/storage/sqlite/index.d.ts +4 -2
  232. package/dist/src/storage/sqlite/index.js +6 -4
  233. package/dist/src/storage/sqlite/knowledge-repository.d.ts +3 -0
  234. package/dist/src/storage/sqlite/knowledge-repository.js +9 -1
  235. package/dist/src/storage/sqlite/memory-records-repository.js +1 -1
  236. package/dist/src/storage/sqlite/migrations/075_connector_sync_policies.sql +13 -0
  237. package/dist/src/storage/sqlite/migrations/076_meeting_preparation_scenario.sql +29 -0
  238. package/dist/src/storage/sqlite/migrations/077_proactive_insight_fingerprints.sql +4 -0
  239. package/dist/src/storage/sqlite/migrations/078_discussion_captures.sql +64 -0
  240. package/dist/src/storage/sqlite/migrations/079_discussion_follow_up_scenario.sql +29 -0
  241. package/dist/src/storage/sqlite/migrations/080_task_outcome_context.sql +15 -0
  242. package/dist/src/storage/sqlite/migrations/081_project_monitoring_policies.sql +10 -0
  243. package/dist/src/storage/sqlite/migrations/082_one_click_live_discussions.sql +100 -0
  244. package/dist/src/storage/sqlite/migrations/083_session_task_plans.sql +9 -0
  245. package/dist/src/storage/sqlite/migrations/084_work_intake_lifecycle.sql +26 -0
  246. package/dist/src/storage/sqlite/migrations/085_task_outcome_projection.sql +19 -0
  247. package/dist/src/storage/sqlite/migrations/086_outcome_aggregates.sql +168 -0
  248. package/dist/src/storage/sqlite/migrations/087_context_snapshots.sql +21 -0
  249. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  250. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  251. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  252. package/dist/src/storage/sqlite/notes-repository.js +9 -0
  253. package/dist/src/storage/sqlite/schema.js +1 -1
  254. package/dist/src/storage/sqlite/schema.sql +89 -44
  255. package/dist/src/storage/sqlite/session-repository.js +1 -1
  256. package/dist/src/storage/sqlite/session-task-plan-repository.d.ts +20 -0
  257. package/dist/src/storage/sqlite/session-task-plan-repository.js +77 -0
  258. package/dist/src/tui/backends/embedded-backend.js +1 -1
  259. package/dist/src/tunnel/frpc-binary.js +1 -1
  260. package/dist/src/tunnel/frpc-extract.js +1 -1
  261. package/dist/src/tunnel/index.js +2 -2
  262. package/dist/src/user-context/context-compiler.d.ts +31 -0
  263. package/dist/src/user-context/context-compiler.js +51 -0
  264. package/dist/src/voice/local/model-files.js +1 -1
  265. package/dist/src/voice/stt/config.d.ts +4 -0
  266. package/dist/src/voice/stt/config.js +26 -0
  267. package/dist/src/voice/stt/index.d.ts +1 -0
  268. package/dist/src/voice/stt/index.js +2 -1
  269. package/dist/src/voice/stt/list-providers.js +1 -1
  270. package/dist/src/work/attention-governor.d.ts +20 -0
  271. package/dist/src/work/attention-governor.js +46 -0
  272. package/dist/src/work/execution-context.d.ts +16 -0
  273. package/dist/src/work/execution-context.js +66 -0
  274. package/dist/src/work/home-query-service.d.ts +118 -0
  275. package/dist/src/work/home-query-service.js +389 -0
  276. package/dist/src/work/index.d.ts +14 -0
  277. package/dist/src/work/index.js +15 -0
  278. package/dist/src/work/outcome-contract-definition.d.ts +8 -0
  279. package/dist/src/work/outcome-contract-definition.js +15 -0
  280. package/dist/src/work/outcome-execution-service.d.ts +27 -0
  281. package/dist/src/work/outcome-execution-service.js +60 -0
  282. package/dist/src/work/outcome-projection-service.d.ts +7 -0
  283. package/dist/src/work/outcome-projection-service.js +51 -0
  284. package/dist/src/work/outcome-receipt-service.d.ts +13 -0
  285. package/dist/src/work/outcome-receipt-service.js +55 -0
  286. package/dist/src/work/outcome-repository.d.ts +50 -0
  287. package/dist/src/work/outcome-repository.js +112 -0
  288. package/dist/src/work/outcome-run-coordinator.d.ts +25 -0
  289. package/dist/src/work/outcome-run-coordinator.js +117 -0
  290. package/dist/src/work/project-monitoring-service.d.ts +21 -0
  291. package/dist/src/work/project-monitoring-service.js +76 -0
  292. package/dist/src/work/project-operating-view-service.d.ts +10 -0
  293. package/dist/src/work/project-operating-view-service.js +46 -0
  294. package/dist/src/work/work-intake-repository.d.ts +49 -0
  295. package/dist/src/work/work-intake-repository.js +97 -0
  296. package/dist/src/work/work-intake-service.d.ts +26 -0
  297. package/dist/src/work/work-intake-service.js +171 -0
  298. package/dist/src/work/work-value-metrics-service.d.ts +4 -0
  299. package/dist/src/work/work-value-metrics-service.js +88 -0
  300. package/dist/src/work-items/work-item-service.d.ts +0 -2
  301. package/dist/src/work-items/work-item-service.js +0 -28
  302. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  303. package/dist/src/workflows/service/workflow-session-bridge.js +2 -2
  304. package/package.json +3 -11
  305. package/dist/gateway/static/root/assets/agents-TpIpJk59.js +0 -2
  306. package/dist/gateway/static/root/assets/apps-page-Cxbn5hy8.js +0 -1
  307. package/dist/gateway/static/root/assets/automation-suggestion-card-DKrVoiiK.js +0 -1
  308. package/dist/gateway/static/root/assets/automations-page-DYv16QMU.js +0 -6
  309. package/dist/gateway/static/root/assets/browser-settings-page-DlcqaGu1.js +0 -8
  310. package/dist/gateway/static/root/assets/capabilities-settings-panel-QPX4wsGZ.js +0 -7
  311. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DmCeusO8.js +0 -1
  312. package/dist/gateway/static/root/assets/channels-settings-HcKoP1wm.js +0 -1
  313. package/dist/gateway/static/root/assets/channels-status-swr-D3xr2enH.js +0 -1
  314. package/dist/gateway/static/root/assets/circle-alert-BEjgurr2.js +0 -1
  315. package/dist/gateway/static/root/assets/connectors-page-DwbThFvd.js +0 -2
  316. package/dist/gateway/static/root/assets/desktop-pet-DjL1GWON.js +0 -1
  317. package/dist/gateway/static/root/assets/desktop-pet-settings-u_abAXh7.js +0 -1
  318. package/dist/gateway/static/root/assets/gateway-settings-Dt1PNJmb.js +0 -1
  319. package/dist/gateway/static/root/assets/goal-create-dialog-DEiOOLGU.js +0 -1
  320. package/dist/gateway/static/root/assets/goal-detail-page-C1Qj4o1K.js +0 -4
  321. package/dist/gateway/static/root/assets/goals-config-api-BL0fAEns.js +0 -1
  322. package/dist/gateway/static/root/assets/goals-page-qJDcEDzc.js +0 -2
  323. package/dist/gateway/static/root/assets/goals-settings-DV3ZlrdI.js +0 -1
  324. package/dist/gateway/static/root/assets/index-C1h0zkNo.js +0 -212
  325. package/dist/gateway/static/root/assets/index-Da36E3WH.css +0 -1
  326. package/dist/gateway/static/root/assets/local-app-workbench-page-DcD4mVId.js +0 -2
  327. package/dist/gateway/static/root/assets/logs-page-CW5m9Cov.js +0 -7
  328. package/dist/gateway/static/root/assets/messages-r8L6Ur3A.js +0 -3
  329. package/dist/gateway/static/root/assets/notes-workbench-DdnwNz9x.js +0 -4
  330. package/dist/gateway/static/root/assets/product-delivery-BTRT9kCS.js +0 -1
  331. package/dist/gateway/static/root/assets/project-detail-page-B8GeS4dl.js +0 -1
  332. package/dist/gateway/static/root/assets/projects-page-DOeu1Hk_.js +0 -1
  333. package/dist/gateway/static/root/assets/remote-access-hub-De94rxnE.js +0 -1
  334. package/dist/gateway/static/root/assets/sessions-page-A7p8G0OJ.js +0 -1
  335. package/dist/gateway/static/root/assets/settings-advanced-gate-BsGzjmqx.js +0 -1
  336. package/dist/gateway/static/root/assets/shares-settings-Xo3N99PO.js +0 -1
  337. package/dist/gateway/static/root/assets/skill-reload-api-ByPEG5t1.js +0 -1
  338. package/dist/gateway/static/root/assets/skills-page-C019Ml5q.js +0 -2
  339. package/dist/gateway/static/root/assets/time-picker-C0DCya4U.js +0 -1
  340. package/dist/gateway/static/root/assets/user-context-page-fYBzpus-.js +0 -1
  341. package/dist/gateway/static/root/assets/work-discovery-page-DI0gCZRw.js +0 -1
  342. package/dist/gateway/static/root/assets/work-item-detail-page-DnBRP2wI.js +0 -1
  343. package/dist/gateway/static/root/assets/work-page-Z-nUaS_n.js +0 -3
  344. package/dist/gateway/static/root/assets/workflows-page-BDfwnM-Y.js +0 -11
  345. package/dist/src/agent/outcomes/task-verifier.d.ts +0 -29
  346. package/dist/src/gateway/hono/routes/task-outcomes.d.ts +0 -3
  347. package/dist/src/gateway/hono/routes/task-outcomes.js +0 -109
  348. package/dist/src/goals/goal-contract-draft.d.ts +0 -15
  349. package/dist/src/goals/goal-contract-draft.js +0 -112
  350. package/dist/src/goals/goal-evidence-review.d.ts +0 -15
  351. package/dist/src/goals/goal-evidence-review.js +0 -89
  352. package/dist/src/storage/sqlite/task-outcome-repository.d.ts +0 -90
  353. package/dist/src/storage/sqlite/task-outcome-repository.js +0 -138
@@ -1,5 +1,5 @@
1
- //#region src/agent/outcomes/task-verifier.ts
2
- function verifyTaskCompletion(input) {
1
+ //#region src/agent/outcomes/execution-verifier.ts
2
+ function verifyExecutionCompletion(input) {
3
3
  const checks = input.acceptanceCriteria.map((criterion) => {
4
4
  const evidenceTitles = input.evidence.filter((evidence) => evidence.verifies?.includes(criterion)).map((evidence) => evidence.title);
5
5
  return {
@@ -24,7 +24,7 @@ function verifyTaskCompletion(input) {
24
24
  checks
25
25
  };
26
26
  }
27
- function diagnoseTaskFailure(input) {
27
+ function diagnoseExecutionFailure(input) {
28
28
  const text = input.summary.toLocaleLowerCase();
29
29
  if (input.status === "cancelled") return {
30
30
  code: "cancelled",
@@ -68,4 +68,4 @@ function diagnoseTaskFailure(input) {
68
68
  };
69
69
  }
70
70
  //#endregion
71
- export { diagnoseTaskFailure, verifyTaskCompletion };
71
+ export { diagnoseExecutionFailure, verifyExecutionCompletion };
@@ -4,8 +4,10 @@ import { formatAgentRunErrorForClient } from "../client-error-format.js";
4
4
  import { resolveConfiguredActivityDetailDefault, resolveEffectiveReasoningLevel } from "../../session/thinking-resolve.js";
5
5
  import { initSessionTurn } from "../../session/init-session-turn.js";
6
6
  import "../../session/index.js";
7
- import { isVoiceLikeAttachment, mergeSttConfigFromAppConfig, mergeVoiceTranscriptsIntoUserText } from "../../channels/attachments/voice-stt-webchat.js";
7
+ import { mergeSttConfigFromAppConfig } from "../../voice/stt/config.js";
8
+ import "../../voice/stt/index.js";
8
9
  import { abortEmbeddedRun } from "../embedded/runs.js";
10
+ import { isVoiceLikeAttachment, mergeVoiceTranscriptsIntoUserText } from "../../channels/attachments/voice-stt-webchat.js";
9
11
  import { applyReasoningVisibilityToSseEvent } from "../streaming/reasoning-visibility-sse.js";
10
12
  import { injectSourceContextIntoUserMessage } from "../source-context/injector.js";
11
13
  import { isSessionSourceBinding } from "../source-context/types.js";
@@ -1,5 +1,8 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { isXopcDatabaseOpen } from "../../storage/sqlite/connection.js";
4
+ import { getSessionTaskPlan, setSessionTaskPlan } from "../../storage/sqlite/session-task-plan-repository.js";
5
+ import "../../storage/sqlite/index.js";
3
6
  import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
4
7
  import { createReadFileTool } from "./read.js";
5
8
  import { createWriteFileTool } from "./write.js";
@@ -217,7 +220,19 @@ var AgentToolsFactory = class {
217
220
  if (!CLARIFY_SUPPORTED_CHANNELS.has(ctx.channel)) return null;
218
221
  return (r) => req(ctx.sessionKey, r);
219
222
  } }),
220
- createTodoTool({ getSessionKey: () => this.deps.getCurrentContext()?.sessionKey }),
223
+ createTodoTool({
224
+ getSessionKey: () => this.deps.getCurrentContext()?.sessionKey,
225
+ repository: {
226
+ isAvailable: isXopcDatabaseOpen,
227
+ read: (sessionKey) => getSessionTaskPlan(sessionKey)?.items ?? [],
228
+ write: (sessionKey, items) => {
229
+ setSessionTaskPlan({
230
+ sessionKey,
231
+ items
232
+ });
233
+ }
234
+ }
235
+ }),
221
236
  createUpdatePlanTool(),
222
237
  ...getSkillMgr ? [
223
238
  createSkillsListTool({
@@ -3,6 +3,8 @@ import "../../storage/sqlite/index.js";
3
3
  import { GoalService } from "../../goals/goal-service.js";
4
4
  import "../../goals/index.js";
5
5
  import { appendProductDeliveryText } from "../../../packages/gateway-contract/src/product-delivery.js";
6
+ import { OutcomeExecutionService } from "../../work/outcome-execution-service.js";
7
+ import "../../work/index.js";
6
8
  import { Type } from "@sinclair/typebox";
7
9
  //#region src/agent/tools/goal-tool.ts
8
10
  const GoalToolSchema = Type.Object({
@@ -92,8 +94,8 @@ function createGoalTool(options = {}) {
92
94
  if (!title) return textResult("Error: title is required.");
93
95
  const sessionKey = params.sessionKey?.trim() || options.getCurrentSessionKey?.()?.trim();
94
96
  const projectId = params.projectId?.trim() || (sessionKey ? getSessionMetadata(sessionKey)?.projectId : void 0);
95
- const goal = goals.create({
96
- title,
97
+ const goal = new OutcomeExecutionService().create({
98
+ objective: title,
97
99
  description: params.description,
98
100
  agentId: params.agentId,
99
101
  sessionKey,
@@ -103,7 +105,7 @@ function createGoalTool(options = {}) {
103
105
  judgeModelRef: params.judgeModelRef,
104
106
  maxTurns: params.maxTurns,
105
107
  source: "workflow"
106
- });
108
+ }).goal;
107
109
  return textResult(`Created goal ${goal.id}\n${goal.title}`, {
108
110
  goal,
109
111
  delivery: goalDelivery(goal, "created")
@@ -16,6 +16,11 @@ export declare class TodoStore {
16
16
  export interface CreateTodoToolOptions {
17
17
  /** Resolve session key for isolated lists; defaults to a single in-memory list. */
18
18
  getSessionKey?: () => string | null | undefined;
19
+ repository?: {
20
+ isAvailable?: () => boolean;
21
+ read: (sessionKey: string) => TodoItem[];
22
+ write: (sessionKey: string, items: TodoItem[]) => void;
23
+ };
19
24
  }
20
25
  /**
21
26
  * In-session task list for multi-step work. One {@link TodoStore} per session key.
@@ -97,8 +97,17 @@ function resolveSessionKey(getSessionKey) {
97
97
  function createTodoTool(options) {
98
98
  const getSessionKey = options?.getSessionKey ?? (() => "default");
99
99
  const stores = /* @__PURE__ */ new Map();
100
- const getStore = () => {
101
- const key = resolveSessionKey(getSessionKey);
100
+ const activeRepository = () => {
101
+ const repository = options?.repository;
102
+ return repository && (repository.isAvailable?.() ?? true) ? repository : void 0;
103
+ };
104
+ const getStore = (key) => {
105
+ const repository = activeRepository();
106
+ if (repository) {
107
+ const store = new TodoStore();
108
+ store.write(repository.read(key), false);
109
+ return store;
110
+ }
102
111
  let s = stores.get(key);
103
112
  if (!s) {
104
113
  s = new TodoStore();
@@ -112,8 +121,10 @@ function createTodoTool(options) {
112
121
  description: "Plan and track tasks for complex multi-step work.\n\nUSAGE:\n- Provide `todos` array to write/update tasks\n- Omit `todos` to read the current list\n- Set `merge: true` to update existing items by id without replacing the whole list\n- Each item needs: id (unique string), content (task description), status\n- Valid statuses: pending, in_progress, completed, cancelled\n\nWHEN TO USE:\n- At the start of complex tasks (3+ steps) to plan your approach\n- After completing each step to update progress\n- When the user asks about progress or remaining work\n\nBEST PRACTICES:\n- Keep only one item in_progress at a time\n- Use merge=true to update status without rewriting the whole list\n- Create concrete, actionable items (not vague goals)",
113
122
  parameters: TodoSchema,
114
123
  async execute(_toolCallId, params, _signal) {
115
- const store = getStore();
124
+ let store;
116
125
  try {
126
+ const key = resolveSessionKey(getSessionKey);
127
+ store = getStore(key);
117
128
  if (params.todos === void 0) {
118
129
  const items = store.read();
119
130
  return {
@@ -126,6 +137,7 @@ function createTodoTool(options) {
126
137
  }
127
138
  const p = params;
128
139
  const items = store.write(p.todos, p.merge ?? false);
140
+ activeRepository()?.write(key, items);
129
141
  return {
130
142
  content: [{
131
143
  type: "text",
@@ -139,7 +151,7 @@ function createTodoTool(options) {
139
151
  type: "text",
140
152
  text: `Error: ${error instanceof Error ? error.message : String(error)}`
141
153
  }],
142
- details: { items: store.read() }
154
+ details: { items: store?.read() ?? [] }
143
155
  };
144
156
  }
145
157
  }
@@ -1,6 +1,7 @@
1
1
  import type { AgentTool } from '@earendil-works/pi-agent-core';
2
2
  export type TurnPlanStatus = 'pending' | 'in_progress' | 'completed';
3
3
  export interface TurnPlanStep {
4
+ id?: string;
4
5
  step: string;
5
6
  status: TurnPlanStatus;
6
7
  }
@@ -6,6 +6,10 @@ const VALID_STATUSES = new Set([
6
6
  "completed"
7
7
  ]);
8
8
  const PlanStepSchema = Type.Object({
9
+ id: Type.Optional(Type.String({
10
+ minLength: 1,
11
+ description: "Stable identifier for this step"
12
+ })),
9
13
  step: Type.String({
10
14
  minLength: 1,
11
15
  description: "Short task step"
@@ -28,11 +32,13 @@ function normalizePlan(raw) {
28
32
  if (!Array.isArray(raw)) throw new Error("plan must be an array");
29
33
  const plan = raw.map((item) => {
30
34
  const rec = item && typeof item === "object" ? item : {};
35
+ const id = typeof rec.id === "string" && rec.id.trim() ? rec.id.trim() : void 0;
31
36
  const step = String(rec.step ?? "").trim();
32
37
  const statusRaw = String(rec.status ?? "").trim();
33
38
  if (!step) throw new Error("each plan item must include a non-empty step");
34
39
  if (!VALID_STATUSES.has(statusRaw)) throw new Error(`invalid plan status: ${statusRaw || "(empty)"}`);
35
40
  return {
41
+ ...id ? { id } : {},
36
42
  step,
37
43
  status: statusRaw
38
44
  };
@@ -11,9 +11,9 @@ import { createReadStream, createWriteStream } from "node:fs";
11
11
  import { spawn } from "node:child_process";
12
12
  import { createHash } from "node:crypto";
13
13
  import { mkdir, mkdtemp, rm, stat } from "node:fs/promises";
14
- import AdmZip from "adm-zip";
15
- import { Readable, Transform } from "node:stream";
16
14
  import { pipeline } from "node:stream/promises";
15
+ import { Readable, Transform } from "node:stream";
16
+ import AdmZip from "adm-zip";
17
17
  //#region src/browser/providers/cloakbrowser.ts
18
18
  /**
19
19
  * CloakBrowser provider — anti-fingerprint Chromium with stealth capabilities.
@@ -3,9 +3,6 @@
3
3
  */
4
4
  import type { STTConfig } from '../../voice/stt/types.js';
5
5
  import { type InboundAttachmentInput, type MediaRef } from './inbound-persist.js';
6
- export declare function mergeSttConfigFromAppConfig(stt: Partial<STTConfig> | undefined, toolsMedia?: {
7
- models?: STTConfig['sharedModels'];
8
- }): STTConfig;
9
6
  export declare function isVoiceLikeAttachment(att: InboundAttachmentInput | MediaRef): boolean;
10
7
  export declare function mergeVoiceTranscriptsIntoUserText(prepared: (InboundAttachmentInput | MediaRef)[] | undefined, userText: string, sttConfig: STTConfig, opts?: {
11
8
  skipVoiceTranscription?: boolean;
@@ -1,32 +1,9 @@
1
1
  import { decodeInboundAttachmentBase64, readInboundAttachmentBuffer } from "./inbound-persist.js";
2
- import { DEFAULT_STT_CONFIG } from "../../voice/stt/types.js";
3
2
  import { transcribe } from "../../voice/stt/transcribe-core.js";
4
3
  import { isSTTAvailable } from "../../voice/stt/availability.js";
5
4
  import "../../voice/stt/index.js";
6
5
  //#region src/channels/attachments/voice-stt-webchat.ts
7
6
  const STT_MAX_BYTES = 25 * 1024 * 1024;
8
- function mergeSttProviders(base, patch) {
9
- if (!base && !patch) return void 0;
10
- const merged = { ...base ?? {} };
11
- for (const [id, slice] of Object.entries(patch ?? {})) merged[id] = {
12
- ...merged[id] ?? {},
13
- ...slice
14
- };
15
- return merged;
16
- }
17
- function mergeSttConfigFromAppConfig(stt, toolsMedia) {
18
- const p = stt ?? {};
19
- return {
20
- ...DEFAULT_STT_CONFIG,
21
- ...p,
22
- providers: mergeSttProviders(DEFAULT_STT_CONFIG.providers, p.providers),
23
- fallback: {
24
- ...DEFAULT_STT_CONFIG.fallback,
25
- ...p.fallback
26
- },
27
- ...toolsMedia?.models?.length ? { sharedModels: toolsMedia.models } : {}
28
- };
29
- }
30
7
  function isVoiceLikeAttachment(att) {
31
8
  if (att.type === "voice") return true;
32
9
  return (att.mimeType?.toLowerCase() ?? "").startsWith("audio/");
@@ -88,4 +65,4 @@ async function mergeVoiceTranscriptsIntoUserText(prepared, userText, sttConfig,
88
65
  };
89
66
  }
90
67
  //#endregion
91
- export { isVoiceLikeAttachment, mergeSttConfigFromAppConfig, mergeVoiceTranscriptsIntoUserText };
68
+ export { isVoiceLikeAttachment, mergeVoiceTranscriptsIntoUserText };
@@ -3,6 +3,8 @@ import "../../storage/sqlite/index.js";
3
3
  import { getDefaultAgentId, init_resolve_route } from "../../routing/resolve-route.js";
4
4
  import { GoalService } from "../../goals/goal-service.js";
5
5
  import "../../goals/index.js";
6
+ import { OutcomeExecutionService } from "../../work/outcome-execution-service.js";
7
+ import "../../work/index.js";
6
8
  import { commandRegistry } from "../registry.js";
7
9
  //#region src/chat-commands/builtins/goal.ts
8
10
  init_resolve_route();
@@ -98,14 +100,13 @@ const goalCommand = {
98
100
  content: "Agent is running — use /goal status / pause / clear mid-run, or wait for the current turn to finish before setting a new goal.",
99
101
  success: false
100
102
  };
101
- const goal = goals.create({
102
- title: t,
103
+ const goal = new OutcomeExecutionService().create({
104
+ objective: t,
103
105
  sessionKey: ctx.sessionKey,
104
106
  agentId: getDefaultAgentId(ctx.config),
105
- config: ctx.config,
106
107
  source: ctx.source === "cli" ? "cli" : ctx.source === "api" ? "api" : "channel",
107
108
  projectId: getSessionMetadata(ctx.sessionKey)?.projectId
108
- });
109
+ }).goal;
109
110
  ctx.persistentGoalApis?.scheduleContinuation(ctx.sessionKey, goal.title);
110
111
  return {
111
112
  content: `⊙ Goal set (${goal.maxTurns}-turn budget): ${goal.title}\nI'll keep working until the goal is done, you pause/archive it, or the budget is exhausted.
@@ -1,8 +1,8 @@
1
1
  import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, validateAgentIdForNewAgent } from "../../agent/agent-scope.js";
2
2
  import { init_paths, resolveConfigPath } from "../../config/paths.js";
3
3
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
4
- import { applyAgentConfig, findAgentEntryIndex, getAgentDeleteBlocker, pruneAgentConfig, removeAgentDirsFromDisk } from "../../commands/agents.config.js";
5
4
  import { seedAgentProfileMarkdownFiles } from "../../agent/context/workspace-seed.js";
5
+ import { applyAgentConfig, findAgentEntryIndex, getAgentDeleteBlocker, pruneAgentConfig, removeAgentDirsFromDisk } from "../../commands/agents.config.js";
6
6
  import { colors } from "../utils/colors.js";
7
7
  import { mkdir } from "node:fs/promises";
8
8
  //#region src/cli/commands/agents.ts
@@ -52,7 +52,7 @@ async function checkDatabaseSchema(ctx) {
52
52
  id: "database-schema",
53
53
  label: "Database schema",
54
54
  status: "pass",
55
- message: `SQLite schema v${status.dbVersion} (current release v74).`,
55
+ message: `SQLite schema v${status.dbVersion} (current release v87).`,
56
56
  hints: []
57
57
  };
58
58
  }
@@ -3,9 +3,11 @@ import "../../storage/sqlite/index.js";
3
3
  import { init_loader, loadConfig } from "../../config/loader.js";
4
4
  import { GoalService } from "../../goals/goal-service.js";
5
5
  import "../../goals/index.js";
6
+ import { OutcomeExecutionService } from "../../work/outcome-execution-service.js";
6
7
  import { ProjectService } from "../../projects/project-service.js";
7
8
  import { resolveProjectAgentId } from "../../projects/project-agent.js";
8
9
  import "../../projects/index.js";
10
+ import "../../work/index.js";
9
11
  import { formatExamples, register } from "../registry.js";
10
12
  import { Command } from "commander";
11
13
  //#region src/cli/commands/goal.ts
@@ -81,7 +83,7 @@ function createGoalCommand(ctx) {
81
83
  }));
82
84
  cmd.addCommand(new Command("new").description("Create a goal").argument("<title>", "Goal title").option("--session-key <key>", "Link to a session key").option("--agent-id <id>", "Agent id").option("--max-turns <n>", "Turn budget").option("--priority <level>", "low, normal, or high", "normal").option("--project <id-or-slug>", "Attach the goal to a project").action(async (title, options) => {
83
85
  const cfg = loadConfig(ctx.configPath);
84
- await withGoals(ctx, async (goals) => {
86
+ await withGoals(ctx, async (_goals) => {
85
87
  const projectId = resolveProjectId(options.project);
86
88
  const agentId = options.sessionKey && !options.agentId ? void 0 : resolveProjectAgentId({
87
89
  config: cfg,
@@ -89,16 +91,15 @@ function createGoalCommand(ctx) {
89
91
  explicitAgentId: options.agentId,
90
92
  projectId
91
93
  });
92
- const goal = goals.create({
93
- title,
94
+ const goal = new OutcomeExecutionService().create({
95
+ objective: title,
94
96
  sessionKey: options.sessionKey,
95
97
  agentId,
96
98
  priority: options.priority === "low" || options.priority === "high" ? options.priority : "normal",
97
99
  maxTurns: options.maxTurns ? Number(options.maxTurns) : void 0,
98
- config: cfg,
99
100
  source: "cli",
100
101
  projectId
101
- });
102
+ }).goal;
102
103
  console.log(`Created goal ${goal.id}`);
103
104
  console.log(` ${goal.title}`);
104
105
  });
@@ -3,15 +3,15 @@ import { init_logger } from "../../utils/logger.js";
3
3
  import { loadConfig, saveConfig } from "../../config/loader.js";
4
4
  import { resolveGatewayEffectiveHost } from "../../config/gateway-bind.js";
5
5
  import { loadTunnelState } from "../../tunnel/tunnel-state.js";
6
- import { formatExamples, register } from "../registry.js";
7
- import "../../config/index.js";
8
6
  import { TUNNEL_RISK_SUMMARY_LINES, TunnelConsentError, assertTunnelMayStart, hasValidTunnelConsent } from "../../tunnel/consent.js";
9
7
  import { resolveTunnelBrokerUrl, resolveTunnelRegistrationSecret } from "../../tunnel/env.js";
8
+ import { applyTunnelConsentToConfig, mergeTunnelConfigPatch, setTunnelEnabledInConfig } from "../../tunnel/tunnel-config.js";
10
9
  import { ensureFrpcBinary } from "../../tunnel/frpc-binary.js";
11
10
  import { getTunnelService } from "../../tunnel/tunnel-service.js";
12
11
  import { resolveFrpSubdomainHost } from "../../tunnel/frp-subdomain-host.js";
13
- import { applyTunnelConsentToConfig, mergeTunnelConfigPatch, setTunnelEnabledInConfig } from "../../tunnel/tunnel-config.js";
14
12
  import "../../tunnel/index.js";
13
+ import { formatExamples, register } from "../registry.js";
14
+ import "../../config/index.js";
15
15
  import { Command } from "commander";
16
16
  //#region src/cli/commands/tunnel.ts
17
17
  init_logger();
@@ -1,6 +1,6 @@
1
+ import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
1
2
  import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
2
3
  import "../agent-manifest/index.js";
3
- import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
4
4
  import { init_session_key, parseSessionKey } from "../routing/session-key.js";
5
5
  import { agentExists, getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
6
6
  //#region src/config/agent-profile.ts
@@ -76,7 +76,7 @@ var ComposioSessionsAdapter = class {
76
76
  try {
77
77
  [{Composio}, {PiProvider}] = await Promise.all([import("@composio/core"), import("@composio/experimental")]);
78
78
  } catch (cause) {
79
- throw new Error("Composio support requires @composio/core and @composio/experimental. Install them alongside @xopcai/xopc; use npm install -g when xopc is installed globally.", { cause });
79
+ throw new Error("The xopc installation is missing the bundled Composio runtime. Reinstall @xopcai/xopc and restart the gateway.", { cause });
80
80
  }
81
81
  return new Composio({
82
82
  apiKey,
@@ -3,6 +3,7 @@ import { init_logger } from "../utils/logger.js";
3
3
  import { claimNextConnectorLearningJob, enqueueConnectorLearningJob, listConnectorLearningJobs, recoverStaleConnectorLearningJobs, setConnectorLearningPaused, updateConnectorLearningJob } from "../storage/sqlite/connector-learning-repository.js";
4
4
  import { pruneBoundedKnowledgeSourceItems } from "../storage/sqlite/knowledge-repository.js";
5
5
  import { getConnectorInstallation, listConnectorConnections, upsertConnectorConnection } from "../storage/sqlite/connector-repository.js";
6
+ import { getConnectorSyncPolicy } from "../storage/sqlite/connector-sync-policy-repository.js";
6
7
  import "../storage/sqlite/index.js";
7
8
  import { ComposioSessionsAdapter } from "./composio-sessions.js";
8
9
  import { getConnectorDefinition } from "./catalog.js";
@@ -34,6 +35,8 @@ function startConnectorLearningCoordinator(options) {
34
35
  if (!learningEnabled(options.getConfig())) return null;
35
36
  const connection = listConnectorConnections().find((item) => item.id === connectionId && item.status === "active");
36
37
  if (!connection) return null;
38
+ const syncPolicy = getConnectorSyncPolicy(connection.id);
39
+ if (request.reason !== "manual" && syncPolicy?.scanEnabled === false) return null;
37
40
  const definition = getConnectorDefinition(connection.connectorId);
38
41
  if (definition?.runtime.type !== "composio" || definition.runtime.role !== "toolkit") return null;
39
42
  if (!getConnectorLearningPlan(definition.runtime.toolkit)) return null;
@@ -141,7 +144,10 @@ function startConnectorLearningCoordinator(options) {
141
144
  finished: true
142
145
  }));
143
146
  pruneBoundedKnowledgeSourceItems(job.sourceInstanceId, Date.now() - plan.bootstrapWindowDays * 24 * 60 * 6e4);
144
- const nextRunAt = Date.now() + plan.intervalMinutes * 6e4;
147
+ const syncPolicy = getConnectorSyncPolicy(job.connectionId);
148
+ if (syncPolicy?.scanEnabled === false) return;
149
+ const intervalMinutes = syncPolicy?.intervalMinutes ?? plan.intervalMinutes;
150
+ const nextRunAt = Date.now() + intervalMinutes * 6e4;
145
151
  enqueueConnection(job.connectionId, {
146
152
  mode: "incremental",
147
153
  reason: "schedule",
@@ -0,0 +1,17 @@
1
+ import { ProactiveEventService } from '../proactive/service.js';
2
+ export type SourceChangePublishResult = {
3
+ published: number;
4
+ skipped: number;
5
+ sources: number;
6
+ };
7
+ export declare class ConnectedSourceChangePublisher {
8
+ private readonly eventService;
9
+ private readonly intervalMs;
10
+ private timer;
11
+ private running;
12
+ constructor(eventService: ProactiveEventService, intervalMs?: number);
13
+ start(): void;
14
+ stop(): void;
15
+ runNow(): Promise<SourceChangePublishResult>;
16
+ private publishSource;
17
+ }
@@ -0,0 +1,148 @@
1
+ import { createLogger } from "../utils/logger/index.js";
2
+ import { init_logger } from "../utils/logger.js";
3
+ import { getKnowledgeConsumerWatermark, getKnowledgeSourceItem, listKnowledgeSourceChanges, setKnowledgeConsumerWatermark } from "../storage/sqlite/knowledge-repository.js";
4
+ import { listConnectorConnections } from "../storage/sqlite/connector-repository.js";
5
+ import { getConnectorSyncPolicy } from "../storage/sqlite/connector-sync-policy-repository.js";
6
+ //#region src/connectors/source-change-publisher.ts
7
+ init_logger();
8
+ const log = createLogger("Connector:SourceChanges");
9
+ const CONSUMER_ID = "proactive-connected-source-v1";
10
+ function sensitivity(value) {
11
+ if (value === "regulated") return "restricted";
12
+ if (value === "secret") return "confidential";
13
+ return "personal";
14
+ }
15
+ function metadataString(metadata, key) {
16
+ const value = metadata[key];
17
+ return typeof value === "string" && value.trim() ? value : void 0;
18
+ }
19
+ var ConnectedSourceChangePublisher = class {
20
+ timer = null;
21
+ running = false;
22
+ constructor(eventService, intervalMs = 1e4) {
23
+ this.eventService = eventService;
24
+ this.intervalMs = intervalMs;
25
+ }
26
+ start() {
27
+ if (this.timer) return;
28
+ this.runNow();
29
+ this.timer = setInterval(() => void this.runNow(), Math.max(2e3, this.intervalMs));
30
+ this.timer.unref?.();
31
+ }
32
+ stop() {
33
+ if (this.timer) clearInterval(this.timer);
34
+ this.timer = null;
35
+ }
36
+ async runNow() {
37
+ if (this.running) return {
38
+ published: 0,
39
+ skipped: 0,
40
+ sources: 0
41
+ };
42
+ this.running = true;
43
+ const total = {
44
+ published: 0,
45
+ skipped: 0,
46
+ sources: 0
47
+ };
48
+ try {
49
+ const connections = listConnectorConnections({ principalId: "local-owner" }).filter((connection) => connection.status === "active");
50
+ for (const connection of connections) {
51
+ const sourceInstanceId = `composio:${connection.connectorId}:${connection.id}`;
52
+ try {
53
+ const result = this.publishSource(sourceInstanceId, connection.id);
54
+ total.published += result.published;
55
+ total.skipped += result.skipped;
56
+ total.sources += 1;
57
+ } catch (err) {
58
+ const em = err instanceof Error ? err.message : String(err);
59
+ log.warn({
60
+ err,
61
+ connectionId: connection.id,
62
+ sourceInstanceId
63
+ }, `Connected source change publication failed: ${em}`);
64
+ }
65
+ }
66
+ return total;
67
+ } finally {
68
+ this.running = false;
69
+ }
70
+ }
71
+ publishSource(sourceInstanceId, connectionId) {
72
+ const policy = getConnectorSyncPolicy(connectionId);
73
+ let watermark = getKnowledgeConsumerWatermark(CONSUMER_ID, sourceInstanceId);
74
+ const changes = listKnowledgeSourceChanges({
75
+ sourceInstanceId,
76
+ afterSequence: watermark,
77
+ limit: 250
78
+ });
79
+ let published = 0;
80
+ let skipped = 0;
81
+ for (const change of changes) {
82
+ const item = getKnowledgeSourceItem(change.sourceItemId);
83
+ if (!policy?.scanEnabled || !policy.proactiveEnabled || !item || item.sensitivity === "secret" || item.sensitivity === "regulated") {
84
+ skipped += 1;
85
+ watermark = change.sequence;
86
+ setKnowledgeConsumerWatermark(CONSUMER_ID, sourceInstanceId, watermark);
87
+ continue;
88
+ }
89
+ const workspaceId = metadataString(item.metadata, "workspaceId");
90
+ const connectorId = metadataString(item.metadata, "connectorId");
91
+ if (!workspaceId || !connectorId) {
92
+ skipped += 1;
93
+ watermark = change.sequence;
94
+ setKnowledgeConsumerWatermark(CONSUMER_ID, sourceInstanceId, watermark);
95
+ continue;
96
+ }
97
+ const eventType = change.kind === "added" ? "connected_source.item_created.v1" : change.kind === "deleted" ? "connected_source.item_deleted.v1" : "connected_source.item_updated.v1";
98
+ const agentId = metadataString(item.metadata, "agentId");
99
+ this.eventService.publish({
100
+ type: eventType,
101
+ schemaVersion: 1,
102
+ source: {
103
+ kind: "connector",
104
+ id: connectionId
105
+ },
106
+ subject: {
107
+ kind: "knowledge_source_item",
108
+ id: item.id
109
+ },
110
+ actor: {
111
+ kind: "integration",
112
+ id: connectorId
113
+ },
114
+ scope: {
115
+ workspaceId,
116
+ ...agentId ? { agentId } : {}
117
+ },
118
+ occurredAt: item.sourceUpdatedAt ?? item.occurredAt ?? change.changedAt,
119
+ dedupeKey: `knowledge-change:${change.sequence}`,
120
+ sensitivity: sensitivity(item.sensitivity),
121
+ payload: {
122
+ sourceInstanceId,
123
+ sourceItemId: item.id,
124
+ collectionScope: item.collectionScope,
125
+ itemType: item.itemType,
126
+ changeKind: change.kind,
127
+ contentHash: item.contentHash
128
+ }
129
+ });
130
+ published += 1;
131
+ watermark = change.sequence;
132
+ setKnowledgeConsumerWatermark(CONSUMER_ID, sourceInstanceId, watermark);
133
+ }
134
+ if (published > 0) log.info({
135
+ connectionId,
136
+ sourceInstanceId,
137
+ published,
138
+ skipped
139
+ }, "Connected source changes published");
140
+ return {
141
+ published,
142
+ skipped,
143
+ sources: 1
144
+ };
145
+ }
146
+ };
147
+ //#endregion
148
+ export { ConnectedSourceChangePublisher };
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ import type { Config } from '../config/schema.js';
3
+ import type { DiscussionAnalysis } from './types.js';
4
+ declare const LiveEnrichmentSchema: z.ZodObject<{
5
+ title: z.ZodString;
6
+ projectCandidateId: z.ZodOptional<z.ZodString>;
7
+ projectConfidence: z.ZodOptional<z.ZodNumber>;
8
+ projectAlternativeConfidence: z.ZodOptional<z.ZodNumber>;
9
+ }, z.core.$strip>;
10
+ export declare function normalizeDiscussionAnalysis(value: unknown): DiscussionAnalysis;
11
+ export declare function analyzeDiscussion(input: {
12
+ config: Config;
13
+ transcript: string;
14
+ languageHint?: string;
15
+ projects?: Array<{
16
+ id: string;
17
+ name: string;
18
+ }>;
19
+ signal?: AbortSignal;
20
+ }): Promise<{
21
+ analysis: DiscussionAnalysis;
22
+ modelRef: string;
23
+ }>;
24
+ export declare function enrichLiveDiscussion(input: {
25
+ config: Config;
26
+ transcript: string;
27
+ projects: Array<{
28
+ id: string;
29
+ name: string;
30
+ }>;
31
+ signal?: AbortSignal;
32
+ }): Promise<z.infer<typeof LiveEnrichmentSchema> & {
33
+ modelRef: string;
34
+ }>;
35
+ export {};