@xopcai/xopc 0.0.218 → 0.0.219

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 (326) 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-DF2dYXG1.js → activity-store-slG02hSm.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Dw9rF5o1.js → agent-avatar-dicebear-DZ6ETNIk.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents-DxaIH0Ep.js +68 -0
  6. package/dist/gateway/static/root/assets/{api-_H0Bam-t.js → api-Tz57QxiN.js} +1 -1
  7. package/dist/gateway/static/root/assets/app-management-settings-panel-DdR1L4LR.js +1 -0
  8. package/dist/gateway/static/root/assets/appearance-settings-wYbwqmee.js +1 -0
  9. package/dist/gateway/static/root/assets/apps-page-CyWr6KyO.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-DZCOhXch.js → archive-plugin-DKXa160O.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-Bjb0FH2B.js → attachment-load-CzwA9g2y.js} +1 -1
  12. package/dist/gateway/static/root/assets/{automations-page-D4N3ZDhu.js → automations-page-DwAXyWAY.js} +1 -1
  13. package/dist/gateway/static/root/assets/automations-workspace-CL7ieYIt.js +6 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-uXPt0s47.js → binary-plugins-DoQ_DnT7.js} +1 -1
  15. package/dist/gateway/static/root/assets/{block-editor-gukkIEro.js → block-editor-Bj_Uxxng.js} +47 -47
  16. package/dist/gateway/static/root/assets/browser-settings-page-BYa_FNC1.js +8 -0
  17. package/dist/gateway/static/root/assets/{browser-workflow-inputs-DAhdS-XZ.js → browser-workflow-inputs-D4roXE6r.js} +1 -1
  18. package/dist/gateway/static/root/assets/{browser-workflows-page-LKjYzXS_.js → browser-workflows-page-CleKTAKD.js} +2 -2
  19. package/dist/gateway/static/root/assets/capabilities-settings-panel-DYG37N0k.js +7 -0
  20. package/dist/gateway/static/root/assets/{capability-presets-api-BBUkH833.js → capability-presets-api-wtEN6Ss6.js} +1 -1
  21. package/dist/gateway/static/root/assets/capability-presets-settings-panel-C0Q4dFq-.js +3 -0
  22. package/dist/gateway/static/root/assets/{channel-recipient-api-E5mo8M3a.js → channel-recipient-api-DhuS2RJ3.js} +1 -1
  23. package/dist/gateway/static/root/assets/channels-settings-CpO6Xg0n.js +1 -0
  24. package/dist/gateway/static/root/assets/channels-status-swr-CXhPeiNj.js +1 -0
  25. package/dist/gateway/static/root/assets/chat-terminal-dock-ClQMDe2n.js +36 -0
  26. package/dist/gateway/static/root/assets/connectors-page-BvyiPdKU.js +2 -0
  27. package/dist/gateway/static/root/assets/{cron-expression-BGNuaqvI.js → cron-expression-4DvCFs-v.js} +1 -1
  28. package/dist/gateway/static/root/assets/{date-picker-k7mkklMU.js → date-picker-B6FSjt4Z.js} +1 -1
  29. package/dist/gateway/static/root/assets/dependency-picker-Za18eMp1.js +1 -0
  30. package/dist/gateway/static/root/assets/{desktop-pet-p9EZyGzV.js → desktop-pet-DUUf3yyJ.js} +1 -1
  31. package/dist/gateway/static/root/assets/desktop-pet-settings-Dwx3GfB8.js +1 -0
  32. package/dist/gateway/static/root/assets/directory-picker-path-field-C6dfTCsl.js +1 -0
  33. package/dist/gateway/static/root/assets/ellipsis-0k4rZLoy.js +1 -0
  34. package/dist/gateway/static/root/assets/{extension-debug-page-Cd4BMKm_.js → extension-debug-page-Cordpg4X.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-page-CzEGCkOa.js → extension-page-Dw0dGyMl.js} +1 -1
  36. package/dist/gateway/static/root/assets/extension-settings-page-B2pUMaXm.js +1 -0
  37. package/dist/gateway/static/root/assets/eye-CABVeTq0.js +1 -0
  38. package/dist/gateway/static/root/assets/eye-off-DEAzt3g1.js +1 -0
  39. package/dist/gateway/static/root/assets/file-code-corner-byQA1VfD.js +1 -0
  40. package/dist/gateway/static/root/assets/form-field-width-DJw_jULe.js +1 -0
  41. package/dist/gateway/static/root/assets/gateway-config-api-DAZUOEQh.js +1 -0
  42. package/dist/gateway/static/root/assets/{gateway-config-swr-DNrttVr2.js → gateway-config-swr-BIqRg-zo.js} +1 -1
  43. package/dist/gateway/static/root/assets/gateway-settings-ik2f-pmV.js +1 -0
  44. package/dist/gateway/static/root/assets/{gateway-startup-retry-B1vD3vRb.js → gateway-startup-retry-BFjWYOCS.js} +1 -1
  45. package/dist/gateway/static/root/assets/heartbeat-settings-BE81XJ8F.js +1 -0
  46. package/dist/gateway/static/root/assets/home-page-BTWXJu_m.js +1 -0
  47. package/dist/gateway/static/root/assets/{image-generation-api-BTR0Wk_k.js → image-generation-api-HXAWlgm6.js} +1 -1
  48. package/dist/gateway/static/root/assets/index-B6gWYy08.js +108 -0
  49. package/dist/gateway/static/root/assets/index-CDkuz_YC.css +2 -0
  50. package/dist/gateway/static/root/assets/interaction-BmQogeqz.js +1 -0
  51. package/dist/gateway/static/root/assets/is-masked-secret-DOkL5b_X.js +1 -0
  52. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CYlS4RGA.js → keyboard-shortcuts-settings-ROqQ_Xlo.js} +1 -1
  53. package/dist/gateway/static/root/assets/local-app-workbench-page-Dcaf190G.js +2 -0
  54. package/dist/gateway/static/root/assets/{local-apps-page-CNppYVew.js → local-apps-page-Be79cyMG.js} +1 -1
  55. package/dist/gateway/static/root/assets/{locale-store-gf9Bg2gb.js → locale-store-DfK-Hofd.js} +1 -1
  56. package/dist/gateway/static/root/assets/logs-page-C2pjbXno.js +2 -0
  57. package/dist/gateway/static/root/assets/{management-settings-IYk9xLgt.js → management-settings-CRspx0oY.js} +1 -1
  58. package/dist/gateway/static/root/assets/{markdown-split-D8e6pRMH.js → markdown-split-G3PTpGw3.js} +1 -1
  59. package/dist/gateway/static/root/assets/{markdown-view-D0fiJjBQ.js → markdown-view-D4FPJZ91.js} +1 -1
  60. package/dist/gateway/static/root/assets/{media-plugins-CCq6TtEf.js → media-plugins-DT0P7j7u.js} +1 -1
  61. package/dist/gateway/static/root/assets/messages-B701TEZ5.js +3 -0
  62. package/dist/gateway/static/root/assets/{notes-api-BBtWnlUU.js → notes-api-q7HjYO07.js} +1 -1
  63. package/dist/gateway/static/root/assets/{notes-page-BKe1xa3U.js → notes-page-Cgl2h7AR.js} +1 -1
  64. package/dist/gateway/static/root/assets/notes-workbench-DFMQYyGJ.js +4 -0
  65. package/dist/gateway/static/root/assets/page-tabs-BaEQMYm_.js +1 -0
  66. package/dist/gateway/static/root/assets/preview-open-alternatives-CsNVTKC0.js +1 -0
  67. package/dist/gateway/static/root/assets/{product-open-page-DXe5iWI6.js → product-open-page-ComKLO4D.js} +1 -1
  68. package/dist/gateway/static/root/assets/project-detail-page-DUFmQscH.js +1 -0
  69. package/dist/gateway/static/root/assets/projects-page-CTWxt3dv.js +1 -0
  70. package/dist/gateway/static/root/assets/{registry-api-xj5gOva_.js → registry-api-BBoJ7khF.js} +1 -1
  71. package/dist/gateway/static/root/assets/remote-access-hub-qmG-3qjj.js +1 -0
  72. package/dist/gateway/static/root/assets/rotate-cw-LIg3Am9S.js +1 -0
  73. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BJTvmBCA.js → runtime-tools-settings-panel-CXHQc53b.js} +2 -2
  74. package/dist/gateway/static/root/assets/{schema-form-DvGBa_7R.js → schema-form-3jTDF2lJ.js} +1 -1
  75. package/dist/gateway/static/root/assets/search-DA7gz22f.js +1 -0
  76. package/dist/gateway/static/root/assets/sessions-page-D_We4_MV.js +1 -0
  77. package/dist/gateway/static/root/assets/settings-advanced-gate-B_QhPgU0.js +1 -0
  78. package/dist/gateway/static/root/assets/settings-form-section-CUDozALU.js +1 -0
  79. package/dist/gateway/static/root/assets/{settings-loading-skeleton-sbef7GTm.js → settings-loading-skeleton-H3ZH6a6l.js} +1 -1
  80. package/dist/gateway/static/root/assets/{settings-page-BNGxxXZe.js → settings-page-tx29z21o.js} +1 -1
  81. package/dist/gateway/static/root/assets/setup-status-panel-VunfXpTX.js +1 -0
  82. package/dist/gateway/static/root/assets/{share-preview-page-C1523ij3.js → share-preview-page-MyThymEx.js} +1 -1
  83. package/dist/gateway/static/root/assets/shares-settings-DkZvY1cr.js +1 -0
  84. package/dist/gateway/static/root/assets/skill-reload-api-DVDOh1iY.js +1 -0
  85. package/dist/gateway/static/root/assets/skills-page-BOOyMnno.js +2 -0
  86. package/dist/gateway/static/root/assets/{skills-page.utils-Ditgz7Vo.js → skills-page.utils-Bl5Yv3Cx.js} +1 -1
  87. package/dist/gateway/static/root/assets/system-settings-panel-DwQ3O1ta.js +1 -0
  88. package/dist/gateway/static/root/assets/task-detail-page-BwOyrADL.js +1 -0
  89. package/dist/gateway/static/root/assets/{theme-store-DgSjes3O.js → theme-store-Br4BtK4x.js} +1 -1
  90. package/dist/gateway/static/root/assets/typed-models-lib-q5-Vfqd8.js +1 -0
  91. package/dist/gateway/static/root/assets/{use-autosave-Bp_qFZkl.js → use-autosave-DRS3RwS9.js} +1 -1
  92. package/dist/gateway/static/root/assets/user-context-page-ClV2r3Cr.js +1 -0
  93. package/dist/gateway/static/root/assets/{voice-api-key-field-hbzDfErG.js → voice-api-key-field-CGTE5156.js} +1 -1
  94. package/dist/gateway/static/root/assets/{work-discovery-overlay-DZVib-04.js → work-discovery-overlay-CW-HKD7h.js} +1 -1
  95. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-C2RKay1p.js → workflow-run-setup-panel-Dtr9fDC8.js} +2 -2
  96. package/dist/gateway/static/root/assets/workflows-page-CDOyNgZf.js +5 -0
  97. package/dist/gateway/static/root/index.html +20 -11
  98. package/dist/package.js +1 -1
  99. package/dist/packages/gateway-contract/src/new-session.js +99 -0
  100. package/dist/packages/gateway-contract/src/tasks.js +5 -0
  101. package/dist/packages/gateway-contract/src/user-message-display.js +55 -0
  102. package/dist/src/agent/agent-manager.js +5 -4
  103. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  104. package/dist/src/agent/background-review/prompts.js +2 -2
  105. package/dist/src/agent/background-review/run-background-review.js +144 -16
  106. package/dist/src/agent/embedded/model-runtime.js +1 -1
  107. package/dist/src/agent/embedded/run-for-session.js +1 -1
  108. package/dist/src/agent/image/tool-model-config.js +1 -1
  109. package/dist/src/agent/inbound/turn-dispatcher.d.ts +3 -1
  110. package/dist/src/agent/inbound/turn-dispatcher.js +2 -1
  111. package/dist/src/agent/ipc/inbox.js +1 -1
  112. package/dist/src/agent/memory/context/types.d.ts +1 -1
  113. package/dist/src/agent/memory/manager.d.ts +2 -1
  114. package/dist/src/agent/memory/manager.js +2 -6
  115. package/dist/src/agent/memory/understanding/service.d.ts +1 -0
  116. package/dist/src/agent/memory/understanding/service.js +179 -36
  117. package/dist/src/agent/memory/understanding/types.d.ts +6 -0
  118. package/dist/src/agent/messaging/command-handler.d.ts +2 -0
  119. package/dist/src/agent/messaging/command-handler.js +3 -1
  120. package/dist/src/agent/service/direct-turn-helpers.d.ts +3 -0
  121. package/dist/src/agent/service/direct-turn-helpers.js +13 -3
  122. package/dist/src/agent/service/process-direct-streaming.d.ts +2 -1
  123. package/dist/src/agent/service/process-direct-streaming.js +12 -11
  124. package/dist/src/agent/service.js +2 -2
  125. package/dist/src/agent/session/session-config-service.d.ts +1 -0
  126. package/dist/src/agent/session/session-config-service.js +11 -0
  127. package/dist/src/agent/session/session-inspector.d.ts +1 -0
  128. package/dist/src/agent/session/session-inspector.js +2 -1
  129. package/dist/src/agent/skills/hub-lock.js +1 -1
  130. package/dist/src/agent/source-context/budget.d.ts +3 -0
  131. package/dist/src/agent/source-context/budget.js +21 -0
  132. package/dist/src/agent/source-context/index.js +3 -3
  133. package/dist/src/agent/source-context/injector.d.ts +2 -2
  134. package/dist/src/agent/source-context/injector.js +19 -9
  135. package/dist/src/agent/source-context/types.d.ts +16 -0
  136. package/dist/src/agent/source-context/types.js +25 -1
  137. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  138. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  139. package/dist/src/agent/tool-manuals/xopc-use.js +19 -2
  140. package/dist/src/agent/tools/xopc-use-tool.js +62 -2
  141. package/dist/src/ai-assist/text-assist.js +1 -1
  142. package/dist/src/auth/credentials.js +2 -2
  143. package/dist/src/auth/profiles/store.js +1 -1
  144. package/dist/src/auth/sync-provider-auth.js +2 -2
  145. package/dist/src/browser/backend-from-config.d.ts +8 -0
  146. package/dist/src/browser/backend-from-config.js +16 -1
  147. package/dist/src/browser/providers/browser-ext-install.d.ts +3 -2
  148. package/dist/src/browser/providers/browser-ext-install.js +5 -3
  149. package/dist/src/chat-commands/builtins/review.js +11 -2
  150. package/dist/src/chat-commands/builtins/understanding.js +11 -4
  151. package/dist/src/chat-commands/types.d.ts +4 -0
  152. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  153. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  154. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  155. package/dist/src/cli/commands/extension.js +1 -1
  156. package/dist/src/cli/commands/models.js +1 -1
  157. package/dist/src/config/index.js +4 -4
  158. package/dist/src/config/loader.js +1 -1
  159. package/dist/src/config/models-json.d.ts +20 -20
  160. package/dist/src/config/models-json.js +1 -1
  161. package/dist/src/connectors/connected-source-understanding.d.ts +1 -0
  162. package/dist/src/connectors/connected-source-understanding.js +82 -34
  163. package/dist/src/connectors/learning-coordinator.js +57 -11
  164. package/dist/src/extensions/lockfile.js +1 -1
  165. package/dist/src/extensions/update.js +1 -1
  166. package/dist/src/gateway/agents-admin.js +1 -1
  167. package/dist/src/gateway/chat-stream/mapper.js +18 -0
  168. package/dist/src/gateway/file-path-classifier.js +1 -1
  169. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  170. package/dist/src/gateway/hono/routes/agent-stream.js +12 -2
  171. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  172. package/dist/src/gateway/hono/routes/commands-skills.js +1 -0
  173. package/dist/src/gateway/hono/routes/models.js +1 -1
  174. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +46 -2
  175. package/dist/src/gateway/hono/routes/session-input-handler.js +23 -3
  176. package/dist/src/gateway/hono/routes/sessions.js +17 -20
  177. package/dist/src/gateway/hono/routes/tasks.js +25 -0
  178. package/dist/src/gateway/hono/routes/understanding-sources.d.ts +9 -0
  179. package/dist/src/gateway/hono/routes/understanding-sources.js +127 -31
  180. package/dist/src/gateway/hono/routes/workflows.js +2 -2
  181. package/dist/src/gateway/hono/routes/you.js +71 -4
  182. package/dist/src/gateway/service/agent-runner.d.ts +7 -2
  183. package/dist/src/gateway/service/agent-runner.js +21 -1
  184. package/dist/src/gateway/service/config-coordinator.js +2 -2
  185. package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -0
  186. package/dist/src/gateway/service/run-gateway-agent.js +2 -1
  187. package/dist/src/gateway/service/session-input-coordinator.d.ts +8 -2
  188. package/dist/src/gateway/service/session-input-coordinator.js +62 -3
  189. package/dist/src/gateway/service/sessions-api.d.ts +1 -0
  190. package/dist/src/gateway/service.d.ts +3 -2
  191. package/dist/src/gateway/service.js +25 -15
  192. package/dist/src/gateway/user-turn-input.d.ts +2 -0
  193. package/dist/src/gateway/xopc-cloud-capability-setup.d.ts +3 -2
  194. package/dist/src/gateway/xopc-cloud-capability-setup.js +16 -3
  195. package/dist/src/infra/update-runner.js +1 -1
  196. package/dist/src/knowledge/connected-understanding-pipeline.d.ts +1 -1
  197. package/dist/src/knowledge/connected-understanding-pipeline.js +4 -2
  198. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  199. package/dist/src/providers/index.js +2 -2
  200. package/dist/src/providers/model-registry.js +1 -1
  201. package/dist/src/providers/register-runtime-providers.js +1 -1
  202. package/dist/src/retrieval/queryProfile.d.ts +1 -0
  203. package/dist/src/retrieval/queryProfile.js +9 -1
  204. package/dist/src/session/client-history.d.ts +11 -0
  205. package/dist/src/session/client-history.js +24 -2
  206. package/dist/src/session/config-types.d.ts +1 -1
  207. package/dist/src/session/session-title.js +2 -3
  208. package/dist/src/session/store.js +1 -0
  209. package/dist/src/session/transcript-outline.js +5 -2
  210. package/dist/src/session/types.d.ts +1 -0
  211. package/dist/src/session/user-message-display.d.ts +4 -0
  212. package/dist/src/session/user-message-display.js +22 -0
  213. package/dist/src/storage/sqlite/context-extraction-repository.d.ts +57 -0
  214. package/dist/src/storage/sqlite/context-extraction-repository.js +119 -0
  215. package/dist/src/storage/sqlite/context-relation-repository.d.ts +50 -0
  216. package/dist/src/storage/sqlite/context-relation-repository.js +97 -0
  217. package/dist/src/storage/sqlite/index.d.ts +4 -2
  218. package/dist/src/storage/sqlite/index.js +5 -3
  219. package/dist/src/storage/sqlite/migrations/126_focus_context_governance.sql +72 -0
  220. package/dist/src/storage/sqlite/migrations/127_context_object_origin.sql +36 -0
  221. package/dist/src/storage/sqlite/migrations/128_context_extraction.sql +73 -0
  222. package/dist/src/storage/sqlite/migrations/129_focus_versions.sql +51 -0
  223. package/dist/src/storage/sqlite/migrations/130_context_evidence_provenance.sql +18 -0
  224. package/dist/src/storage/sqlite/migrations/131_session_input_contexts.sql +2 -0
  225. package/dist/src/storage/sqlite/migrations/132_transcript_source_context_metadata.sql +34 -0
  226. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  227. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  228. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  229. package/dist/src/storage/sqlite/schema.js +1 -1
  230. package/dist/src/storage/sqlite/session-input-repository.d.ts +8 -0
  231. package/dist/src/storage/sqlite/session-input-repository.js +19 -7
  232. package/dist/src/storage/sqlite/session-turn-replace-repository.d.ts +3 -0
  233. package/dist/src/storage/sqlite/session-turn-replace-repository.js +3 -2
  234. package/dist/src/storage/sqlite/transcript-repository.js +29 -3
  235. package/dist/src/storage/sqlite/user-context-repository.d.ts +4 -1
  236. package/dist/src/storage/sqlite/user-context-repository.js +65 -29
  237. package/dist/src/tasks/index.d.ts +1 -0
  238. package/dist/src/tasks/index.js +2 -1
  239. package/dist/src/tasks/task-deletion-service.d.ts +21 -0
  240. package/dist/src/tasks/task-deletion-service.js +35 -0
  241. package/dist/src/tasks/task-repository.js +22 -1
  242. package/dist/src/tui/backends/embedded-backend.js +5 -3
  243. package/dist/src/tui/backends/gateway-realtime-backend.js +5 -3
  244. package/dist/src/tui/chat-history.js +2 -1
  245. package/dist/src/tui/tui-agent-events.js +4 -2
  246. package/dist/src/tui/tui-commands.d.ts +1 -0
  247. package/dist/src/tui/tui-commands.js +8 -3
  248. package/dist/src/tui/tui-empty-session-cleanup.d.ts +0 -1
  249. package/dist/src/tui/tui-empty-session-cleanup.js +1 -11
  250. package/dist/src/tui/tui-new-session-preferences.d.ts +10 -0
  251. package/dist/src/tui/tui-new-session-preferences.js +32 -0
  252. package/dist/src/tui/tui-session-actions.d.ts +1 -0
  253. package/dist/src/tui/tui-session-actions.js +2 -1
  254. package/dist/src/tui/tui-settings.d.ts +2 -0
  255. package/dist/src/tui/tui-settings.js +4 -1
  256. package/dist/src/tui/tui-startup-resources.js +1 -1
  257. package/dist/src/tui/tui-types.d.ts +1 -0
  258. package/dist/src/tui/tui.js +58 -5
  259. package/dist/src/tunnel/frpc-process.js +3 -0
  260. package/dist/src/tunnel/tunnel-service.d.ts +2 -0
  261. package/dist/src/tunnel/tunnel-service.js +40 -28
  262. package/dist/src/user-context/context-objects.d.ts +17 -0
  263. package/dist/src/user-context/context-objects.js +99 -0
  264. package/dist/src/user-context/domain.d.ts +13 -1
  265. package/dist/src/user-context/evaluation/harness.d.ts +13 -0
  266. package/dist/src/user-context/evaluation/harness.js +31 -0
  267. package/dist/src/user-context/extraction/registry.d.ts +26 -0
  268. package/dist/src/user-context/extraction/registry.js +113 -0
  269. package/dist/src/user-context/extraction/repair.d.ts +19 -0
  270. package/dist/src/user-context/extraction/repair.js +68 -0
  271. package/dist/src/user-context/planner.js +214 -57
  272. package/dist/src/user-context/retriever.js +69 -9
  273. package/dist/src/user-context/sources/index.js +2 -2
  274. package/dist/src/user-context/sources/processing-policy.d.ts +2 -0
  275. package/dist/src/user-context/sources/processing-policy.js +7 -0
  276. package/dist/src/user-context/sources/repository.d.ts +23 -4
  277. package/dist/src/user-context/sources/repository.js +122 -12
  278. package/dist/src/user-context/sources/types.d.ts +10 -1
  279. package/dist/src/user-context/understanding.js +1 -1
  280. package/dist/src/work-discovery/service.js +21 -5
  281. package/dist/src/work-discovery/source-repository.js +1 -1
  282. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  283. package/package.json +3 -3
  284. package/dist/gateway/static/root/assets/agents-Dj86bHkl.js +0 -68
  285. package/dist/gateway/static/root/assets/app-management-settings-panel-D-M6GN-8.js +0 -1
  286. package/dist/gateway/static/root/assets/appearance-settings-XDhmzdIc.js +0 -1
  287. package/dist/gateway/static/root/assets/apps-page-sfO835uz.js +0 -1
  288. package/dist/gateway/static/root/assets/automations-workspace-PptuZgoo.js +0 -6
  289. package/dist/gateway/static/root/assets/browser-settings-page-BoCmzMFV.js +0 -8
  290. package/dist/gateway/static/root/assets/capabilities-settings-panel-DhkJsU8Z.js +0 -7
  291. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Dm7T61fE.js +0 -3
  292. package/dist/gateway/static/root/assets/channels-settings-dG6UFVqt.js +0 -1
  293. package/dist/gateway/static/root/assets/channels-status-swr-DgJxfNyK.js +0 -1
  294. package/dist/gateway/static/root/assets/chat-terminal-dock-CT5yoSMD.js +0 -36
  295. package/dist/gateway/static/root/assets/connectors-page-BC6Ft9SU.js +0 -2
  296. package/dist/gateway/static/root/assets/dependency-picker-DZVSgLXH.js +0 -1
  297. package/dist/gateway/static/root/assets/desktop-pet-settings-Bw4cCFzI.js +0 -1
  298. package/dist/gateway/static/root/assets/directory-picker-path-field-Cbst7IXR.js +0 -1
  299. package/dist/gateway/static/root/assets/extension-settings-page-C1PAKSy2.js +0 -1
  300. package/dist/gateway/static/root/assets/gateway-config-api-Bch9vO6t.js +0 -1
  301. package/dist/gateway/static/root/assets/gateway-settings-DkDxZFGG.js +0 -1
  302. package/dist/gateway/static/root/assets/heartbeat-settings-DXNMxy5b.js +0 -1
  303. package/dist/gateway/static/root/assets/home-page-CYcpVFNT.js +0 -1
  304. package/dist/gateway/static/root/assets/index-Dgb1R07E.css +0 -2
  305. package/dist/gateway/static/root/assets/index-DlOYwVFK.js +0 -108
  306. package/dist/gateway/static/root/assets/local-app-workbench-page-BFrgPwGE.js +0 -2
  307. package/dist/gateway/static/root/assets/logs-page-CPweLw3k.js +0 -2
  308. package/dist/gateway/static/root/assets/messages-B9WQcZ1V.js +0 -3
  309. package/dist/gateway/static/root/assets/notes-workbench-wieRAd1y.js +0 -4
  310. package/dist/gateway/static/root/assets/page-tabs-Bsluqyfb.js +0 -1
  311. package/dist/gateway/static/root/assets/preview-open-alternatives-BrpTWv44.js +0 -1
  312. package/dist/gateway/static/root/assets/project-detail-page-Cww6V7HJ.js +0 -1
  313. package/dist/gateway/static/root/assets/projects-page-D0LKhCCw.js +0 -1
  314. package/dist/gateway/static/root/assets/remote-access-hub-Sf4Pde6Z.js +0 -1
  315. package/dist/gateway/static/root/assets/sessions-page-S5gvgfu5.js +0 -1
  316. package/dist/gateway/static/root/assets/settings-advanced-gate-B3XvdEy8.js +0 -1
  317. package/dist/gateway/static/root/assets/settings-form-section-CiGFtdD8.js +0 -1
  318. package/dist/gateway/static/root/assets/setup-status-panel-CGU_Mxjr.js +0 -1
  319. package/dist/gateway/static/root/assets/shares-settings-k0UQ8WxO.js +0 -1
  320. package/dist/gateway/static/root/assets/skill-reload-api-DQ1GvL1w.js +0 -1
  321. package/dist/gateway/static/root/assets/skills-page-OuHd9GcN.js +0 -2
  322. package/dist/gateway/static/root/assets/system-settings-panel-CERqCsz2.js +0 -1
  323. package/dist/gateway/static/root/assets/task-detail-page-BnRNL2sn.js +0 -1
  324. package/dist/gateway/static/root/assets/typed-models-lib-abEJNkCO.js +0 -1
  325. package/dist/gateway/static/root/assets/user-context-page-Cnkaiky5.js +0 -1
  326. package/dist/gateway/static/root/assets/workflows-page-B_VlcKiK.js +0 -5
@@ -27,6 +27,7 @@ import type { SessionIndex } from '../../session/index.js';
27
27
  import type { ClarifyStreamEvent } from '../clarify-bridge.js';
28
28
  import { ClarifyBridge, type ClarifyBridgeRequest } from '../clarify-bridge.js';
29
29
  import type { UserTurnAttachment, UserTurnInput } from '../user-turn-input.js';
30
+ import type { AgentSourceContext, TurnContextRef } from '../../agent/source-context/types.js';
30
31
  import { SessionInputCoordinator, type ReplaceLatestTurnInput, type SubmitSessionInput } from './session-input-coordinator.js';
31
32
  export interface GatewayAgentRunnerOptions {
32
33
  bus: MessageBus;
@@ -39,6 +40,7 @@ export interface GatewayAgentRunnerOptions {
39
40
  emit: (type: string, payload: unknown) => void;
40
41
  publishRealtime: (topic: string, event: string, data: unknown) => void;
41
42
  completeRealtimeTopic: (topic: string) => void;
43
+ resolveTurnContext: (ref: TurnContextRef) => Promise<AgentSourceContext | null>;
42
44
  }
43
45
  export declare class GatewayAgentRunner {
44
46
  private readonly opts;
@@ -64,6 +66,7 @@ export declare class GatewayAgentRunner {
64
66
  runAgent(message: string, channel: string, chatId: string, origin: TurnOrigin, attachments?: UserTurnAttachment[], thinking?: string, runOptions?: {
65
67
  signal?: AbortSignal;
66
68
  runId?: string;
69
+ sourceContexts?: AgentSourceContext[];
67
70
  }): AsyncGenerator<{
68
71
  type: string;
69
72
  [key: string]: unknown;
@@ -77,7 +80,7 @@ export declare class GatewayAgentRunner {
77
80
  state: import("../../storage/sqlite/session-input-repository.js").SessionInputState;
78
81
  } | {
79
82
  ok: false;
80
- code: "BAD_REQUEST" | "QUEUE_FULL";
83
+ code: "BAD_REQUEST" | "QUEUE_FULL" | "CONTEXT_UNAVAILABLE";
81
84
  }>;
82
85
  replaceLatestSessionTurn(input: ReplaceLatestTurnInput): Promise<{
83
86
  ok: true;
@@ -85,18 +88,20 @@ export declare class GatewayAgentRunner {
85
88
  state: import("../../storage/sqlite/session-input-repository.js").SessionInputState;
86
89
  } | {
87
90
  ok: false;
88
- code: "BAD_REQUEST" | "TARGET_NOT_FOUND" | "NOT_LATEST" | "SESSION_BUSY";
91
+ code: "BAD_REQUEST" | "TARGET_NOT_FOUND" | "NOT_LATEST" | "SESSION_BUSY" | "CONTEXT_UNAVAILABLE";
89
92
  }>;
90
93
  getSessionInputState(sessionKey: string): import("../../storage/sqlite/session-input-repository.js").SessionInputState;
91
94
  updateSessionInput(sessionKey: string, id: string, body: {
92
95
  version: number;
93
96
  content?: string;
94
97
  attachments?: UserTurnAttachment[];
98
+ contextRefs?: TurnContextRef[];
95
99
  thinking?: string;
96
100
  position?: number;
97
101
  }): Promise<{
98
102
  ok: boolean;
99
103
  state: import("../../storage/sqlite/session-input-repository.js").SessionInputState;
104
+ contextUnavailable?: boolean;
100
105
  }>;
101
106
  removeSessionInput(sessionKey: string, id: string, version: number): {
102
107
  ok: boolean;
@@ -2,11 +2,13 @@ import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { ClarifyBridge } from "../clarify-bridge.js";
4
4
  import { runGatewayAgent } from "./run-gateway-agent.js";
5
+ import { fitSourceContextsToBudget } from "../../agent/source-context/budget.js";
5
6
  import { SessionInputCoordinator } from "./session-input-coordinator.js";
6
7
  import crypto from "node:crypto";
7
8
  //#region src/gateway/service/agent-runner.ts
8
9
  init_logger();
9
10
  const log = createLogger("Gateway:AgentRunner");
11
+ const MAX_TURN_CONTEXTS = 5;
10
12
  var GatewayAgentRunner = class {
11
13
  opts;
12
14
  /** Per-run abort for webchat (POST /api/agent/abort or client disconnect). */
@@ -23,7 +25,10 @@ var GatewayAgentRunner = class {
23
25
  this.inputs = new SessionInputCoordinator({
24
26
  sessionExists: async (sessionKey) => Boolean(await opts.sessionIndex.getSessionMetadata(sessionKey)),
25
27
  execute: async (input) => {
26
- const generator = this.runAgent(input.content, "webchat", input.sessionKey, input.origin, input.attachments, input.thinking, { runId: input.runId });
28
+ const generator = this.runAgent(input.content, "webchat", input.sessionKey, input.origin, input.attachments, input.thinking, {
29
+ runId: input.runId,
30
+ sourceContexts: input.sourceContexts
31
+ });
27
32
  let result;
28
33
  while (true) {
29
34
  const step = await generator.next();
@@ -46,6 +51,21 @@ var GatewayAgentRunner = class {
46
51
  size: ref.size
47
52
  }));
48
53
  },
54
+ prepareContexts: async (refs) => {
55
+ if (!refs?.length) return void 0;
56
+ const unique = /* @__PURE__ */ new Map();
57
+ for (const ref of refs) {
58
+ const sourceId = ref.sourceId.trim();
59
+ if (sourceId) unique.set(`${ref.kind}:${sourceId}`, {
60
+ ...ref,
61
+ sourceId
62
+ });
63
+ }
64
+ if (unique.size > MAX_TURN_CONTEXTS) throw new Error(`A message can reference at most ${MAX_TURN_CONTEXTS} notes`);
65
+ const contexts = await Promise.all([...unique.values()].map((ref) => opts.resolveTurnContext(ref)));
66
+ if (contexts.some((context) => context === null)) throw new Error("A referenced note is no longer available");
67
+ return fitSourceContextsToBudget(contexts.filter((context) => context !== null));
68
+ },
49
69
  steer: (sessionKey, content) => opts.getAgentService().turnDispatcher.steerWebchatSession(sessionKey, content),
50
70
  emit: opts.emit
51
71
  });
@@ -1,15 +1,15 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { getModelRegistry } from "../../providers/model-registry.js";
4
3
  import { loadConfig, saveConfig } from "../../config/loader.js";
4
+ import { getModelRegistry } from "../../providers/model-registry.js";
5
5
  import { init_providers } from "../../providers/index.js";
6
6
  import { disposeAllSessionMcpRuntimes } from "../../agent/mcp/bundle-mcp-runtime.js";
7
7
  import { reloadImageGenerationProviders } from "../../agent/image/generation/provider-registry.js";
8
8
  import "../../agent/mcp/bundle-mcp-tools.js";
9
9
  import { ConfigHotReloader } from "../../config/reload.js";
10
10
  import "../../config/index.js";
11
- import { computeBundledExtensionExtensionsPatch } from "../../extensions/bundled-extension-activation.js";
12
11
  import { sanitizeTunnelConfig } from "../../tunnel/tunnel-config.js";
12
+ import { computeBundledExtensionExtensionsPatch } from "../../extensions/bundled-extension-activation.js";
13
13
  //#region src/gateway/service/config-coordinator.ts
14
14
  init_providers();
15
15
  init_logger();
@@ -5,6 +5,7 @@ import type { MessageBus } from '../../infra/bus/index.js';
5
5
  import type { SessionIndex } from '../../session/index.js';
6
6
  import type { ChatStreamEvent } from '../chat-stream/protocol.js';
7
7
  import type { UserTurnAttachment } from '../user-turn-input.js';
8
+ import type { AgentSourceContext } from '../../agent/source-context/types.js';
8
9
  export type RunGatewayAgentYield = ChatStreamEvent;
9
10
  export type RunGatewayAgentDeps = {
10
11
  config: Config;
@@ -23,6 +24,7 @@ export type RunGatewayAgentDeps = {
23
24
  export declare function runGatewayAgent(deps: RunGatewayAgentDeps, message: string, channel: string, chatId: string, origin: TurnOrigin, attachments?: UserTurnAttachment[], thinking?: string, runOptions?: {
24
25
  signal?: AbortSignal;
25
26
  runId?: string;
27
+ sourceContexts?: AgentSourceContext[];
26
28
  }): AsyncGenerator<RunGatewayAgentYield, {
27
29
  status: string;
28
30
  summary: string;
@@ -131,7 +131,8 @@ async function* runGatewayAgent(deps, message, channel, chatId, origin, attachme
131
131
  try {
132
132
  const eventStream = agentService.turnDispatcher.processDirectStreaming(stampedMessage, sessionKey, origin, prepared, thinking, {
133
133
  signal: mergedSignal,
134
- runId
134
+ runId,
135
+ sourceContexts: runOptions?.sourceContexts
135
136
  });
136
137
  const mappedEvents = (async function* () {
137
138
  for await (const event of eventStream) yield* mapper.map(event);
@@ -1,5 +1,6 @@
1
1
  import type { TurnOrigin } from '@xopcai/endpoint-tools-protocol';
2
2
  import type { UserTurnAttachment } from '../user-turn-input.js';
3
+ import { type AgentSourceContext, type TurnContextRef } from '../../agent/source-context/types.js';
3
4
  import { type SessionInputDelivery, type SessionInputState } from '../../storage/sqlite/index.js';
4
5
  export type SubmitSessionInput = {
5
6
  sessionKey: string;
@@ -7,6 +8,7 @@ export type SubmitSessionInput = {
7
8
  delivery: SessionInputDelivery;
8
9
  content: string;
9
10
  attachments?: UserTurnAttachment[];
11
+ contextRefs?: TurnContextRef[];
10
12
  thinking?: string;
11
13
  origin: TurnOrigin;
12
14
  };
@@ -24,6 +26,7 @@ export declare class SessionInputCoordinator {
24
26
  sessionKey: string;
25
27
  content: string;
26
28
  attachments?: UserTurnAttachment[];
29
+ sourceContexts?: AgentSourceContext[];
27
30
  thinking?: string;
28
31
  origin: TurnOrigin;
29
32
  }) => Promise<{
@@ -31,6 +34,7 @@ export declare class SessionInputCoordinator {
31
34
  summary: string;
32
35
  }>;
33
36
  prepareAttachments: (sessionKey: string, attachments?: UserTurnAttachment[]) => Promise<UserTurnAttachment[] | undefined>;
37
+ prepareContexts: (contextRefs?: TurnContextRef[]) => Promise<AgentSourceContext[] | undefined>;
34
38
  steer: (sessionKey: string, content: string) => Promise<boolean>;
35
39
  emit: (type: string, payload: unknown) => void;
36
40
  });
@@ -43,7 +47,7 @@ export declare class SessionInputCoordinator {
43
47
  state: SessionInputState;
44
48
  } | {
45
49
  ok: false;
46
- code: 'BAD_REQUEST' | 'QUEUE_FULL';
50
+ code: 'BAD_REQUEST' | 'QUEUE_FULL' | 'CONTEXT_UNAVAILABLE';
47
51
  }>;
48
52
  replaceLatestTurn(input: ReplaceLatestTurnInput, beforeReplace: () => Promise<void>): Promise<{
49
53
  ok: true;
@@ -51,7 +55,7 @@ export declare class SessionInputCoordinator {
51
55
  state: SessionInputState;
52
56
  } | {
53
57
  ok: false;
54
- code: 'BAD_REQUEST' | 'TARGET_NOT_FOUND' | 'NOT_LATEST' | 'SESSION_BUSY';
58
+ code: 'BAD_REQUEST' | 'TARGET_NOT_FOUND' | 'NOT_LATEST' | 'SESSION_BUSY' | 'CONTEXT_UNAVAILABLE';
55
59
  }>;
56
60
  private submitLocked;
57
61
  drain(sessionKey: string): Promise<void>;
@@ -59,11 +63,13 @@ export declare class SessionInputCoordinator {
59
63
  version: number;
60
64
  content?: string;
61
65
  attachments?: UserTurnAttachment[];
66
+ contextRefs?: TurnContextRef[];
62
67
  thinking?: string;
63
68
  position?: number;
64
69
  }): Promise<{
65
70
  ok: boolean;
66
71
  state: SessionInputState;
72
+ contextUnavailable?: boolean;
67
73
  }>;
68
74
  remove(sessionKey: string, id: string, version: number): {
69
75
  ok: boolean;
@@ -1,14 +1,22 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { cancelQueuedSessionInput, claimNextSessionInput, findSessionInput, finishSessionInputRun, getSessionInputState, insertSessionInput, mutateQueuedSessionInput, recoverSessionInputState, setSessionInputStatus } from "../../storage/sqlite/session-input-repository.js";
3
+ import { cancelQueuedSessionInput, claimNextSessionInput, findSessionInput, finishSessionInputRun, getSessionInputById, getSessionInputState, insertSessionInput, mutateQueuedSessionInput, recoverSessionInputState, setSessionInputStatus } from "../../storage/sqlite/session-input-repository.js";
4
4
  import { replaceLatestSessionTurnAndQueueInput, validateLatestSessionTurnTarget } from "../../storage/sqlite/session-turn-replace-repository.js";
5
5
  import "../../storage/sqlite/index.js";
6
+ import { summarizeSourceContext } from "../../agent/source-context/types.js";
6
7
  import { deleteMediaUrisNoLongerReferenced } from "../../media/session-references.js";
7
8
  import crypto from "node:crypto";
8
9
  //#region src/gateway/service/session-input-coordinator.ts
9
10
  init_logger();
10
11
  const log = createLogger("SessionInputCoordinator");
11
12
  const MAX_PENDING_INPUTS = 10;
13
+ function contextRefsMatchFrozenSnapshot(requested, frozen) {
14
+ if (requested.length !== (frozen?.length ?? 0)) return false;
15
+ return requested.every((ref, index) => {
16
+ const snapshot = frozen?.[index];
17
+ return snapshot?.kind === ref.kind && snapshot.sourceId === ref.sourceId && ref.expectedVersion === snapshot.version;
18
+ });
19
+ }
12
20
  var SessionInputCoordinator = class {
13
21
  draining = /* @__PURE__ */ new Set();
14
22
  submissionTails = /* @__PURE__ */ new Map();
@@ -69,12 +77,27 @@ var SessionInputCoordinator = class {
69
77
  if (target.ok === false) return target;
70
78
  await beforeReplace();
71
79
  const attachments = await this.deps.prepareAttachments(sessionKey, input.attachments);
80
+ let sourceContexts;
81
+ try {
82
+ sourceContexts = await this.deps.prepareContexts(input.contextRefs);
83
+ } catch (err) {
84
+ log.warn({
85
+ err,
86
+ sessionKey
87
+ }, "Session input context preparation failed");
88
+ return {
89
+ ok: false,
90
+ code: "CONTEXT_UNAVAILABLE"
91
+ };
92
+ }
72
93
  const result = replaceLatestSessionTurnAndQueueInput({
73
94
  sessionKey,
74
95
  targetTurnId,
75
96
  clientMessageId,
76
97
  content,
77
98
  attachments,
99
+ contextRefs: sourceContexts?.map(summarizeSourceContext),
100
+ contextSnapshots: sourceContexts,
78
101
  thinking: input.thinking,
79
102
  origin: input.origin
80
103
  });
@@ -121,8 +144,21 @@ var SessionInputCoordinator = class {
121
144
  code: "QUEUE_FULL"
122
145
  };
123
146
  const attachments = await this.deps.prepareAttachments(sessionKey, input.attachments);
147
+ let sourceContexts;
148
+ try {
149
+ sourceContexts = await this.deps.prepareContexts(input.contextRefs);
150
+ } catch (err) {
151
+ log.warn({
152
+ err,
153
+ sessionKey
154
+ }, "Session input context preparation failed");
155
+ return {
156
+ ok: false,
157
+ code: "CONTEXT_UNAVAILABLE"
158
+ };
159
+ }
124
160
  const runtime = this.snapshot(sessionKey);
125
- const canSteer = input.origin.type !== "endpoint" && input.delivery === "steer" && runtime.activeRunId !== void 0 && !attachments?.length;
161
+ const canSteer = input.origin.type !== "endpoint" && input.delivery === "steer" && runtime.activeRunId !== void 0 && !attachments?.length && !sourceContexts?.length;
126
162
  const effectiveDelivery = canSteer ? "steer" : "next";
127
163
  const row = insertSessionInput({
128
164
  id: crypto.randomUUID(),
@@ -133,6 +169,8 @@ var SessionInputCoordinator = class {
133
169
  status: canSteer ? "injecting" : "queued",
134
170
  content,
135
171
  attachments,
172
+ contextRefs: sourceContexts?.map(summarizeSourceContext),
173
+ contextSnapshots: sourceContexts,
136
174
  thinking: input.thinking,
137
175
  origin: input.origin,
138
176
  targetRunId: canSteer ? runtime.activeRunId : void 0
@@ -179,6 +217,7 @@ var SessionInputCoordinator = class {
179
217
  sessionKey,
180
218
  content: input.content,
181
219
  attachments: input.attachments,
220
+ sourceContexts: input.contextSnapshots,
182
221
  thinking: input.thinking,
183
222
  origin: input.origin
184
223
  });
@@ -204,11 +243,31 @@ var SessionInputCoordinator = class {
204
243
  }
205
244
  async update(sessionKey, id, body) {
206
245
  const attachments = body.attachments === void 0 ? void 0 : await this.deps.prepareAttachments(sessionKey, body.attachments);
246
+ let sourceContexts;
247
+ if (body.contextRefs !== void 0) {
248
+ const existing = getSessionInputById(sessionKey, id);
249
+ if (!contextRefsMatchFrozenSnapshot(body.contextRefs, existing?.contextRefs)) try {
250
+ sourceContexts = await this.deps.prepareContexts(body.contextRefs) ?? [];
251
+ } catch (err) {
252
+ log.warn({
253
+ err,
254
+ sessionKey,
255
+ inputId: id
256
+ }, "Queued input context preparation failed");
257
+ return {
258
+ ok: false,
259
+ contextUnavailable: true,
260
+ state: this.snapshot(sessionKey)
261
+ };
262
+ }
263
+ }
207
264
  const ok = mutateQueuedSessionInput({
208
265
  sessionKey,
209
266
  id,
210
267
  ...body,
211
- attachments
268
+ attachments,
269
+ contextRefs: sourceContexts?.map(summarizeSourceContext),
270
+ contextSnapshots: sourceContexts
212
271
  });
213
272
  return {
214
273
  ok,
@@ -93,6 +93,7 @@ export declare class GatewaySessionsApi {
93
93
  verboseLevel?: string;
94
94
  workingDirectory?: string;
95
95
  responseLanguage?: string | null;
96
+ userContextMode?: 'enabled' | 'off' | 'temporary';
96
97
  }): Promise<import("../../agent/session/session-config-service.js").PatchSessionAgentConfigResult>;
97
98
  listCompactionBoundaries(key: string): Promise<import("../../session/types.js").CompactionBoundarySummary[]>;
98
99
  restoreBeforeCompactionBoundary(key: string, compactionId: string): Promise<void>;
@@ -139,7 +139,7 @@ export declare class GatewayService {
139
139
  state: import("../storage/sqlite/session-input-repository.js").SessionInputState;
140
140
  } | {
141
141
  ok: false;
142
- code: "BAD_REQUEST" | "QUEUE_FULL";
142
+ code: "BAD_REQUEST" | "QUEUE_FULL" | "CONTEXT_UNAVAILABLE";
143
143
  }>;
144
144
  replaceLatestSessionTurn(...args: Parameters<GatewayAgentRunner['replaceLatestSessionTurn']>): Promise<{
145
145
  ok: true;
@@ -147,12 +147,13 @@ export declare class GatewayService {
147
147
  state: import("../storage/sqlite/session-input-repository.js").SessionInputState;
148
148
  } | {
149
149
  ok: false;
150
- code: "BAD_REQUEST" | "TARGET_NOT_FOUND" | "NOT_LATEST" | "SESSION_BUSY";
150
+ code: "BAD_REQUEST" | "TARGET_NOT_FOUND" | "NOT_LATEST" | "SESSION_BUSY" | "CONTEXT_UNAVAILABLE";
151
151
  }>;
152
152
  getSessionInputState(...args: Parameters<GatewayAgentRunner['getSessionInputState']>): import("../storage/sqlite/session-input-repository.js").SessionInputState;
153
153
  updateSessionInput(...args: Parameters<GatewayAgentRunner['updateSessionInput']>): Promise<{
154
154
  ok: boolean;
155
155
  state: import("../storage/sqlite/session-input-repository.js").SessionInputState;
156
+ contextUnavailable?: boolean;
156
157
  }>;
157
158
  removeSessionInput(...args: Parameters<GatewayAgentRunner['removeSessionInput']>): {
158
159
  ok: boolean;
@@ -9,14 +9,14 @@ import { closeXopcDatabase, openXopcDatabase } from "../storage/sqlite/connectio
9
9
  import "../storage/sqlite/index.js";
10
10
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
11
11
  import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveDefaultAgentId } from "../agent/agent-scope.js";
12
+ import { buildSessionKey, init_session_key, sanitizeSegment } from "../routing/session-key.js";
13
+ import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
12
14
  import { init_paths, resolveAgentDir, resolveConfigPath, resolveExtensionsDir } from "../config/paths.js";
13
- import { prewarmModelRegistry } from "../providers/model-registry.js";
14
15
  import { areExtensionsGloballyDisabled } from "../extensions/discover-extensions.js";
15
16
  import { buildExtensionMetadataSnapshot } from "../extensions/extension-metadata-snapshot.js";
16
17
  import { buildChannelCatalogForConfig, buildChannelCatalogFromSnapshot, init_channel_catalog_service } from "../channels/catalog/channel-catalog-service.js";
17
18
  import { loadConfig, saveConfig } from "../config/loader.js";
18
- import { buildSessionKey, init_session_key, sanitizeSegment } from "../routing/session-key.js";
19
- import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
19
+ import { prewarmModelRegistry } from "../providers/model-registry.js";
20
20
  import { init_providers, providers_exports } from "../providers/index.js";
21
21
  import { TaskRepository } from "../tasks/task-repository.js";
22
22
  import { TaskConversationRepository } from "../tasks/task-conversation-repository.js";
@@ -50,18 +50,18 @@ import { registerClarifyBridge } from "./clarify-runtime.js";
50
50
  import { ChannelManager } from "../channels/manager.js";
51
51
  import { getWorkspacePath } from "../config/workspace-path-helpers.js";
52
52
  import "../config/index.js";
53
- import { DiscussionService } from "../discussions/service.js";
54
- import { DiscussionOrganizer } from "../discussions/organizer.js";
55
- import { DiscussionLiveWorker } from "../discussions/live-worker.js";
56
- import { DiscussionOrganizerWorker } from "../discussions/organizer-worker.js";
57
- import { DiscussionSealer } from "../discussions/sealer.js";
58
- import "../discussions/index.js";
59
53
  import { ManagedComposioEventPoller } from "../connectors/composio-managed-events.js";
60
54
  import { startConnectedKnowledgeCoordinator } from "../knowledge/coordinator.js";
61
55
  import "../knowledge/index.js";
62
56
  import { startConnectorLearningCoordinator } from "../connectors/learning-coordinator.js";
63
57
  import { ConnectedSourceChangePublisher } from "../connectors/source-change-publisher.js";
64
58
  import { startConnectorSupervisor } from "../connectors/supervisor.js";
59
+ import { DiscussionService } from "../discussions/service.js";
60
+ import { DiscussionOrganizer } from "../discussions/organizer.js";
61
+ import { DiscussionLiveWorker } from "../discussions/live-worker.js";
62
+ import { DiscussionOrganizerWorker } from "../discussions/organizer-worker.js";
63
+ import { DiscussionSealer } from "../discussions/sealer.js";
64
+ import "../discussions/index.js";
65
65
  import { EndpointToolRuntime } from "../endpoint-tools/runtime.js";
66
66
  import "../endpoint-tools/index.js";
67
67
  import { assertGatewayAuthConfigured, extractToken, resolveGatewayAuth, validateToken } from "./auth.js";
@@ -369,6 +369,18 @@ var GatewayService = class {
369
369
  getAgentService: () => this.ensureAgentService(),
370
370
  getChannelManager: () => this.channelManager,
371
371
  getConfig: () => this.config,
372
+ resolveTurnContext: async (ref) => {
373
+ if (ref.kind !== "note") return null;
374
+ const note = await this.notesService.getNote(ref.sourceId);
375
+ if (!note || note.status === "trashed") return null;
376
+ if (ref.expectedVersion && ref.expectedVersion !== String(note.updatedAt)) return null;
377
+ const { images: _images, ...snapshot } = await buildNoteAgentContext({
378
+ note,
379
+ notesService: this.notesService,
380
+ config: this.config
381
+ });
382
+ return snapshot;
383
+ },
372
384
  emit: (type, payload) => this.emit(type, payload),
373
385
  publishRealtime: (topic, event, data) => {
374
386
  this.realtime.broker.publish(topic, event, data);
@@ -1161,8 +1173,9 @@ var GatewayService = class {
1161
1173
  * PATCH saves update config in memory without re-running gateway startup, so this must run on save too.
1162
1174
  */
1163
1175
  async reconcileBrowserExtensionServer() {
1164
- const { shouldRunExtensionBridgeServer } = await import("../browser/backend-from-config.js");
1165
- if (!shouldRunExtensionBridgeServer(this.config)) {
1176
+ const { resolveExtensionBridgeServerConfig } = await import("../browser/backend-from-config.js");
1177
+ const bridgeConfig = resolveExtensionBridgeServerConfig(this.config);
1178
+ if (!bridgeConfig) {
1166
1179
  if (this.browserExtensionRelease) {
1167
1180
  await this.browserExtensionRelease();
1168
1181
  this.browserExtensionRelease = null;
@@ -1172,10 +1185,7 @@ var GatewayService = class {
1172
1185
  }
1173
1186
  return;
1174
1187
  }
1175
- const port = 19820;
1176
- const host = "127.0.0.1";
1177
- const connectionTimeout = void 0;
1178
- const commandTimeout = void 0;
1188
+ const { port, host, connectionTimeout, commandTimeout } = bridgeConfig;
1179
1189
  const bindKey = `${host}:${port}`;
1180
1190
  if (this.browserExtensionRelease && this.browserExtensionBindKey === bindKey) return;
1181
1191
  if (this.browserExtensionRelease) {
@@ -1,4 +1,5 @@
1
1
  import type { MediaRef } from '../media/types.js';
2
+ import type { TurnContextRef } from '../agent/source-context/types.js';
2
3
  export interface UserTurnAttachment {
3
4
  id?: string;
4
5
  type: string;
@@ -13,5 +14,6 @@ export interface UserTurnAttachment {
13
14
  export interface UserTurnInput {
14
15
  text: string;
15
16
  attachments?: UserTurnAttachment[];
17
+ contextRefs?: TurnContextRef[];
16
18
  }
17
19
  export declare function mediaRefsToUserTurnAttachments(media: MediaRef[] | undefined): UserTurnAttachment[] | undefined;
@@ -1,7 +1,8 @@
1
1
  import type { Config } from '../config/schema.js';
2
2
  import type { CatalogSource } from '../providers/model-catalog-store.js';
3
- type CloudCapability = 'vision' | 'image-generation' | 'stt' | 'tts';
3
+ type CloudCapability = 'chat' | 'vision' | 'image-generation' | 'stt' | 'tts';
4
4
  export interface XopcCloudCapabilitySelection {
5
+ chat: string;
5
6
  vision: string;
6
7
  imageGeneration: string;
7
8
  stt: string;
@@ -29,7 +30,7 @@ export declare function selectXopcCloudCapabilities(source: CatalogSource): {
29
30
  selection?: XopcCloudCapabilitySelection;
30
31
  missing: CloudCapability[];
31
32
  };
32
- /** Build one atomic config update for every managed XOPC Cloud media capability. */
33
+ /** Build one atomic config update for the managed XOPC Cloud chat and media capabilities. */
33
34
  export declare function prepareXopcCloudCapabilitySetup(config: Config, source: CatalogSource): PrepareXopcCloudCapabilitySetupResult;
34
35
  export declare function applyXopcCloudCapabilitySetup(service: {
35
36
  currentConfig: Config;
@@ -5,29 +5,33 @@ import { ensureGlobalDefaultsConfig, prepareUpdateGlobalDefaults } from "./globa
5
5
  init_model_catalog_store();
6
6
  function supportsCapability(model, capability) {
7
7
  if (model.availability !== "available") return false;
8
+ if (capability === "chat") return model.kind === "language" && (model.operations.includes("chat.completions") || model.operations.includes("responses"));
8
9
  if (capability === "vision") return model.kind === "language" && model.input.includes("image");
9
10
  if (capability === "image-generation") return model.kind === "image" && model.operations.includes("images.generate");
10
11
  if (capability === "stt") return model.kind === "stt" && model.operations.includes("audio.transcription");
11
12
  return model.kind === "tts" && model.operations.includes("audio.speech") && Boolean(model.tts?.defaultVoice);
12
13
  }
13
14
  function recommendedModel(source, capability) {
14
- const recommendation = source.recommended?.[capability];
15
+ const recommendation = capability === "chat" ? source.recommendedModel ?? void 0 : source.recommended?.[capability];
15
16
  return source.models.filter((model) => supportsCapability(model, capability)).sort((left, right) => compareCatalogModels(left, right, recommendation))[0];
16
17
  }
17
18
  function selectXopcCloudCapabilities(source) {
19
+ const chat = recommendedModel(source, "chat");
18
20
  const vision = recommendedModel(source, "vision");
19
21
  const imageGeneration = recommendedModel(source, "image-generation");
20
22
  const stt = recommendedModel(source, "stt");
21
23
  const tts = recommendedModel(source, "tts");
22
24
  const missing = [];
25
+ if (!chat) missing.push("chat");
23
26
  if (!vision) missing.push("vision");
24
27
  if (!imageGeneration) missing.push("image-generation");
25
28
  if (!stt) missing.push("stt");
26
29
  if (!tts) missing.push("tts");
27
- if (!vision || !imageGeneration || !stt || !tts || !tts.tts?.defaultVoice) return { missing };
30
+ if (!chat || !vision || !imageGeneration || !stt || !tts || !tts.tts?.defaultVoice) return { missing };
28
31
  return {
29
32
  missing,
30
33
  selection: {
34
+ chat: chat.id,
31
35
  vision: vision.id,
32
36
  imageGeneration: imageGeneration.id,
33
37
  stt: stt.id,
@@ -36,7 +40,7 @@ function selectXopcCloudCapabilities(source) {
36
40
  }
37
41
  };
38
42
  }
39
- /** Build one atomic config update for every managed XOPC Cloud media capability. */
43
+ /** Build one atomic config update for the managed XOPC Cloud chat and media capabilities. */
40
44
  function prepareXopcCloudCapabilitySetup(config, source) {
41
45
  const selected = selectXopcCloudCapabilities(source);
42
46
  if (!selected.selection) return {
@@ -48,8 +52,17 @@ function prepareXopcCloudCapabilitySetup(config, source) {
48
52
  const normalized = ensureGlobalDefaultsConfig(config);
49
53
  const presetId = normalized.agents.defaultPreset;
50
54
  const currentModels = normalized.agents.capabilityPresets[presetId]?.models;
55
+ const defaultRole = currentModels?.defaultRole ?? "deep";
51
56
  const defaultsUpdate = prepareUpdateGlobalDefaults(normalized, { models: {
52
57
  ...currentModels,
58
+ defaultRole,
59
+ roles: {
60
+ ...currentModels?.roles ?? {},
61
+ [defaultRole]: {
62
+ ...currentModels?.roles?.[defaultRole],
63
+ model: `xopc-cloud/${selection.chat}`
64
+ }
65
+ },
53
66
  imageModel: {
54
67
  ...currentModels?.imageModel,
55
68
  primary: `xopc-cloud/${selection.vision}`
@@ -1,4 +1,3 @@
1
- import { runPostUpdateExtensionSync } from "../extensions/update.js";
2
1
  import "./update-channels.js";
3
2
  import { compareSemver, resolveNpmChannelTag } from "./update-check.js";
4
3
  import { readPackageName, readPackageVersion } from "./package-json.js";
@@ -8,6 +7,7 @@ import { runGlobalPackageUpdateSteps } from "./package-update-steps.js";
8
7
  import { resolveStableNodePath } from "./stable-node-path.js";
9
8
  import { trimLogTail } from "./update-log.js";
10
9
  import { maybeRestartGatewayAfterUpdate } from "./update-restart.js";
10
+ import { runPostUpdateExtensionSync } from "../extensions/update.js";
11
11
  import path from "node:path";
12
12
  import fs from "node:fs/promises";
13
13
  //#region src/infra/update-runner.ts
@@ -13,5 +13,5 @@ export declare function renderConnectedObservation(observation: ClaimObservation
13
13
  export declare class ConnectedUnderstandingPipeline {
14
14
  private readonly memoryManager;
15
15
  constructor(memoryManager: MemoryManager);
16
- process(agentId: string): Promise<UnderstandingReviewResult>;
16
+ process(agentId: string, extractionRunId: string): Promise<UnderstandingReviewResult>;
17
17
  }
@@ -226,7 +226,7 @@ var ConnectedUnderstandingPipeline = class {
226
226
  constructor(memoryManager) {
227
227
  this.memoryManager = memoryManager;
228
228
  }
229
- async process(agentId) {
229
+ async process(agentId, extractionRunId) {
230
230
  const observations = deriveConnectedClaimObservations(listKnowledgeSourceItems({
231
231
  agentId,
232
232
  includeDeleted: false,
@@ -253,12 +253,14 @@ var ConnectedUnderstandingPipeline = class {
253
253
  provider: "connected-sources",
254
254
  ...sourceInstanceIds.length === 1 ? { sourceInstanceId: sourceInstanceIds[0] } : {}
255
255
  },
256
- reviewSource: "background"
256
+ reviewSource: "background",
257
+ extractionRunId
257
258
  });
258
259
  totals.created += result.created;
259
260
  totals.deduplicated += result.deduplicated;
260
261
  totals.rejected += result.rejected;
261
262
  totals.createdRecords.push(...result.createdRecords);
263
+ totals.writeOutputs = [...totals.writeOutputs ?? [], ...result.writeOutputs ?? []];
262
264
  }
263
265
  return totals;
264
266
  }
@@ -1,5 +1,5 @@
1
- import { getApiKeyFromEnv, init_env_keys } from "../env-keys.js";
2
1
  import { init_sync_provider_auth, resolveProviderApiKeyForAgentSync } from "../../auth/sync-provider-auth.js";
2
+ import { getApiKeyFromEnv, init_env_keys } from "../env-keys.js";
3
3
  import { getDefaultAuthProfileStore } from "./auth-profile-store.js";
4
4
  //#region src/providers/auth-runtime/resolve-auth.ts
5
5
  init_env_keys();
@@ -1,11 +1,11 @@
1
1
  import { __esmMin, __exportAll } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
3
+ import { getOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
4
+ import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
3
5
  import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
4
6
  import { init_model_ref, splitProviderModelRef } from "./model-ref.js";
5
7
  import { ModelRegistry, getModelRegistry, init_model_registry, prewarmModelRegistry, resetModelRegistry } from "./model-registry.js";
6
- import { getOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
7
8
  import { CredentialResolver, hasCredentials, init_credentials } from "../auth/credentials.js";
8
- import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
9
9
  import { EXTENSION_PROVIDER_BASE_URL, init_constants } from "./constants.js";
10
10
  import { applyOfficialModelMetadataCorrections, getSupplementalModels, init_model_supplements } from "./model-supplements.js";
11
11
  import { getProviderRegistry, init_plugin_registry } from "./plugin-registry.js";
@@ -1,8 +1,8 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
- import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from "../config/resolve-config-value.js";
5
4
  import { resolveModelsJsonPath } from "../config/paths.js";
5
+ import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from "../config/resolve-config-value.js";
6
6
  import { getDefaultModelValues, init_models_json, validateModelsConfig } from "../config/models-json.js";
7
7
  import { getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
8
8
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
3
2
  import { getOAuthProviderDefinition, init_registry } from "../auth/oauth/registry.js";
3
+ import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
4
4
  import { XOPC_CLOUD_PROVIDER_ID, init_xopc_cloud_config, resolveXopcModelRouterUrl } from "./xopc-cloud-config.js";
5
5
  //#region src/providers/register-runtime-providers.ts
6
6
  function registerRuntimeProvider(modelRuntime, source) {