@xopcai/xopc 0.0.188 → 0.0.190

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 (490) hide show
  1. package/README.md +1 -4
  2. package/README.zh-CN.md +0 -3
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/{activity-store--QoUGhiS.js → activity-store-DstnJCS5.js} +1 -1
  6. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-B0yweLNQ.js → agent-avatar-dicebear-9vAbkroX.js} +1 -1
  7. package/dist/gateway/static/root/assets/agents-D1t4SfMQ.js +68 -0
  8. package/dist/gateway/static/root/assets/{api-5laWqfiE.js → api-BTL9kayv.js} +1 -1
  9. package/dist/gateway/static/root/assets/{app-management-settings-panel-BXJ8Jiv_.js → app-management-settings-panel-DkFeIdBf.js} +1 -1
  10. package/dist/gateway/static/root/assets/{appearance-settings-DG9n9D1M.js → appearance-settings-Bxs8Fpaj.js} +1 -1
  11. package/dist/gateway/static/root/assets/apps-page-Cgrgu5OW.js +1 -0
  12. package/dist/gateway/static/root/assets/{archive-plugin-Ceh5qrZf.js → archive-plugin-Ch2RmLCC.js} +1 -1
  13. package/dist/gateway/static/root/assets/{attachment-load-jFW7uYf7.js → attachment-load-BhMQM_Ky.js} +1 -1
  14. package/dist/gateway/static/root/assets/automations-page-CtJxstKh.js +6 -0
  15. package/dist/gateway/static/root/assets/{binary-plugins-XDlkI1r4.js → binary-plugins-D6CqlymH.js} +1 -1
  16. package/dist/gateway/static/root/assets/{block-editor-kyKc2IhE.js → block-editor-ClL6HEg9.js} +56 -56
  17. package/dist/gateway/static/root/assets/browser-settings-page-DW99iDmD.js +8 -0
  18. package/dist/gateway/static/root/assets/{browser-workflow-inputs-BJa5Iz_v.js → browser-workflow-inputs-BYy48VhN.js} +1 -1
  19. package/dist/gateway/static/root/assets/{browser-workflows-page-CTQQOsn5.js → browser-workflows-page-zgLibuMH.js} +2 -2
  20. package/dist/gateway/static/root/assets/capabilities-settings-panel-CHUrT9EB.js +7 -0
  21. package/dist/gateway/static/root/assets/capability-presets-api-BB8t4Ja7.js +1 -0
  22. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Cycrv0YV.js +1 -0
  23. package/dist/gateway/static/root/assets/{channel-recipient-api-BgIkWq01.js → channel-recipient-api-BThDGiO3.js} +1 -1
  24. package/dist/gateway/static/root/assets/channels-settings-V96gPUAU.js +1 -0
  25. package/dist/gateway/static/root/assets/channels-status-swr-Cz7SAAkm.js +1 -0
  26. package/dist/gateway/static/root/assets/connectors-api-DS9ED-EL.js +1 -0
  27. package/dist/gateway/static/root/assets/connectors-page-BhlyQoQI.js +2 -0
  28. package/dist/gateway/static/root/assets/cron-expression-CkgsvhtW.js +2 -0
  29. package/dist/gateway/static/root/assets/{desktop-pet-CSwd00CV.js → desktop-pet-Cv8rGhYW.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-settings-CuNQvHGu.js → desktop-pet-settings-CIeJdwfV.js} +1 -1
  31. package/dist/gateway/static/root/assets/{directory-picker-path-field-ct0n5Rje.js → directory-picker-path-field-D8jXEiAY.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-debug-page-BeRBuMUU.js → extension-debug-page-CCZ9u6TZ.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-page-DbK-Cwao.js → extension-page-CV36ILRG.js} +1 -1
  34. package/dist/gateway/static/root/assets/extension-settings-page-IyQrSILY.js +1 -0
  35. package/dist/gateway/static/root/assets/{gateway-config-api-CC7EvEFp.js → gateway-config-api-D4_r5iJM.js} +1 -1
  36. package/dist/gateway/static/root/assets/gateway-settings-CYlntpBH.js +1 -0
  37. package/dist/gateway/static/root/assets/{gateway-startup-retry-B2DmdlwO.js → gateway-startup-retry-EO9mKvzE.js} +1 -1
  38. package/dist/gateway/static/root/assets/heartbeat-settings-D4SyWob8.js +1 -0
  39. package/dist/gateway/static/root/assets/home-page-B2Kagoh8.js +3 -0
  40. package/dist/gateway/static/root/assets/{image-generation-api-GMTaS6eI.js → image-generation-api-Bu7PyVSh.js} +1 -1
  41. package/dist/gateway/static/root/assets/index-CYT5DOzr.js +150 -0
  42. package/dist/gateway/static/root/assets/index-D6e3tPL-.css +1 -0
  43. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DhGYddbI.js → keyboard-shortcuts-settings-BMhCuVBZ.js} +1 -1
  44. package/dist/gateway/static/root/assets/local-app-workbench-page-BHYbFjqy.js +2 -0
  45. package/dist/gateway/static/root/assets/{local-apps-page-CmnrBmWi.js → local-apps-page-ijIe7_y2.js} +1 -1
  46. package/dist/gateway/static/root/assets/locale-store-deR2zRaE.js +1 -0
  47. package/dist/gateway/static/root/assets/logs-page-IIn8Tess.js +2 -0
  48. package/dist/gateway/static/root/assets/management-settings--V_fovKD.js +1 -0
  49. package/dist/gateway/static/root/assets/{markdown-split-CZaBPOVn.js → markdown-split-Dt9-in6W.js} +1 -1
  50. package/dist/gateway/static/root/assets/{media-plugins-CiKvSgCv.js → media-plugins-B3pj_iO0.js} +1 -1
  51. package/dist/gateway/static/root/assets/messages-B4XqB8I6.js +3 -0
  52. package/dist/gateway/static/root/assets/{notes-page-Bisbzqlz.js → notes-page-DZ366lIT.js} +1 -1
  53. package/dist/gateway/static/root/assets/notes-workbench-S2sBVOLw.js +4 -0
  54. package/dist/gateway/static/root/assets/{page-tabs-BxlwhAbH.js → page-tabs-C5ge434C.js} +1 -1
  55. package/dist/gateway/static/root/assets/{preview-open-alternatives-RM8wXxfT.js → preview-open-alternatives-BFa9DgSV.js} +1 -1
  56. package/dist/gateway/static/root/assets/product-delivery-tRr-7IxY.js +1 -0
  57. package/dist/gateway/static/root/assets/{product-open-page-DdBlibek.js → product-open-page-Dc9CcWdu.js} +1 -1
  58. package/dist/gateway/static/root/assets/project-detail-page-BilzoCJ7.js +1 -0
  59. package/dist/gateway/static/root/assets/projects-page-BoQUyacP.js +1 -0
  60. package/dist/gateway/static/root/assets/remote-access-hub-DUyUaCRF.js +1 -0
  61. package/dist/gateway/static/root/assets/{schema-form-BDKbpmXv.js → schema-form-B84DckWe.js} +1 -1
  62. package/dist/gateway/static/root/assets/{schemas-C6onAggk.js → schemas-zIBW3wiV.js} +1 -1
  63. package/dist/gateway/static/root/assets/sessions-page-Dzxlq1F0.js +1 -0
  64. package/dist/gateway/static/root/assets/settings-advanced-gate-TzwlZxU6.js +1 -0
  65. package/dist/gateway/static/root/assets/settings-form-section-Dp9itvdy.js +1 -0
  66. package/dist/gateway/static/root/assets/{settings-loading-skeleton-DgIp8_S6.js → settings-loading-skeleton-CCtlhoy7.js} +1 -1
  67. package/dist/gateway/static/root/assets/settings-page-DQmMKf8r.js +1 -0
  68. package/dist/gateway/static/root/assets/{settings-page-layout-97LmwrzC.js → settings-page-layout-EQIOJa_L.js} +1 -1
  69. package/dist/gateway/static/root/assets/setup-status-panel-Cwi-SPja.js +1 -0
  70. package/dist/gateway/static/root/assets/{share-preview-page-BH7i3g1S.js → share-preview-page-C4_B2jvf.js} +1 -1
  71. package/dist/gateway/static/root/assets/shares-settings-CkyuGlZK.js +1 -0
  72. package/dist/gateway/static/root/assets/skill-reload-api-BJCePQK5.js +1 -0
  73. package/dist/gateway/static/root/assets/skills-page-BYWLfmJi.js +2 -0
  74. package/dist/gateway/static/root/assets/{skills-page.utils-s-a5WV9j.js → skills-page.utils-Jhm24i4h.js} +1 -1
  75. package/dist/gateway/static/root/assets/{system-settings-panel-BxjeMT5k.js → system-settings-panel-Dpx2ags2.js} +1 -1
  76. package/dist/gateway/static/root/assets/{task-detail-page-BahycnfW.js → task-detail-page-DLAdxI6e.js} +1 -1
  77. package/dist/gateway/static/root/assets/{theme-store-BRxdsmic.js → theme-store-DnBOcGXi.js} +1 -1
  78. package/dist/gateway/static/root/assets/{typed-models-lib-39MjwPSq.js → typed-models-lib-DULmTHUB.js} +1 -1
  79. package/dist/gateway/static/root/assets/use-autosave-BrjVk5VH.js +1 -0
  80. package/dist/gateway/static/root/assets/user-context-page-9AAFpGAL.js +1 -0
  81. package/dist/gateway/static/root/assets/{voice-api-key-field-XU-7sBSg.js → voice-api-key-field-BISTPfq_.js} +1 -1
  82. package/dist/gateway/static/root/assets/{work-discovery-overlay-CJqu8UHq.js → work-discovery-overlay-Wr-uF7VA.js} +1 -1
  83. package/dist/gateway/static/root/assets/work-discovery-page-BWds95sL.js +1 -0
  84. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DXtg8Qxl.js → workflow-run-setup-panel-DHqHP8_6.js} +2 -2
  85. package/dist/gateway/static/root/assets/workflows-page-0b4_DFHr.js +11 -0
  86. package/dist/gateway/static/root/index.html +9 -9
  87. package/dist/package.js +1 -1
  88. package/dist/packages/endpoint-tools-protocol/src/index.js +184 -0
  89. package/dist/packages/gateway-contract/src/tool-activity.js +0 -36
  90. package/dist/packages/realtime-client/src/index.js +256 -0
  91. package/dist/packages/realtime-protocol/src/index.js +88 -0
  92. package/dist/src/agent/agent-manager.d.ts +1 -1
  93. package/dist/src/agent/agent-manager.js +7 -13
  94. package/dist/src/agent/background-review/coordinator.js +1 -1
  95. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  96. package/dist/src/agent/background-review/prompts.js +3 -1
  97. package/dist/src/agent/background-review/run-background-review.d.ts +2 -0
  98. package/dist/src/agent/background-review/run-background-review.js +10 -9
  99. package/dist/src/agent/bootstrap/bootstrap-cache.d.ts +0 -1
  100. package/dist/src/agent/bootstrap/bootstrap-cache.js +3 -4
  101. package/dist/src/agent/bootstrap/bootstrap-files.d.ts +0 -4
  102. package/dist/src/agent/bootstrap/bootstrap-files.js +3 -4
  103. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +1 -4
  104. package/dist/src/agent/bootstrap/load-bootstrap-files.d.ts +0 -1
  105. package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -14
  106. package/dist/src/agent/bootstrap/types.d.ts +1 -1
  107. package/dist/src/agent/client-error-format.d.ts +1 -1
  108. package/dist/src/agent/client-error-format.js +1 -1
  109. package/dist/src/agent/context/workspace-templates/SOUL.md +1 -1
  110. package/dist/src/agent/external-tools/endpoint-provider.d.ts +17 -0
  111. package/dist/src/agent/external-tools/endpoint-provider.js +93 -0
  112. package/dist/src/agent/external-tools/gateway-tools.js +1 -1
  113. package/dist/src/agent/external-tools/index.d.ts +4 -5
  114. package/dist/src/agent/external-tools/index.js +8 -2
  115. package/dist/src/agent/external-tools/types.d.ts +8 -1
  116. package/dist/src/agent/external-tools/types.js +2 -1
  117. package/dist/src/agent/inbound/inbound-loop.js +4 -0
  118. package/dist/src/agent/inbound/turn-dispatcher.d.ts +9 -8
  119. package/dist/src/agent/inbound/turn-dispatcher.js +13 -11
  120. package/dist/src/agent/memory/builtin-provider.d.ts +2 -4
  121. package/dist/src/agent/memory/builtin-provider.js +35 -15
  122. package/dist/src/agent/memory/context/types.d.ts +3 -1
  123. package/dist/src/agent/memory/create-memory-manager.js +2 -0
  124. package/dist/src/agent/memory/index.d.ts +1 -1
  125. package/dist/src/agent/memory/index.js +1 -1
  126. package/dist/src/agent/memory/manager.d.ts +9 -1
  127. package/dist/src/agent/memory/manager.js +39 -9
  128. package/dist/src/agent/memory/memory-config.d.ts +1 -1
  129. package/dist/src/agent/memory/memory-config.js +1 -1
  130. package/dist/src/agent/memory/source-origin.js +0 -2
  131. package/dist/src/agent/memory/types.d.ts +5 -1
  132. package/dist/src/agent/memory/understanding/service.d.ts +10 -10
  133. package/dist/src/agent/memory/understanding/service.js +108 -176
  134. package/dist/src/agent/memory/understanding/types.d.ts +7 -8
  135. package/dist/src/agent/memory/user-context-coordinator.d.ts +2 -1
  136. package/dist/src/agent/memory/user-context-coordinator.js +27 -41
  137. package/dist/src/agent/messaging/command-handler.d.ts +2 -2
  138. package/dist/src/agent/messaging/command-handler.js +3 -3
  139. package/dist/src/agent/orchestration/agent-orchestrator.js +4 -7
  140. package/dist/src/agent/prompt/sections/memory-skills.js +4 -4
  141. package/dist/src/agent/prompt/sections/tooling.js +0 -10
  142. package/dist/src/agent/prompt/service-prompt-builder.d.ts +0 -1
  143. package/dist/src/agent/prompt/service-prompt-builder.js +4 -33
  144. package/dist/src/agent/prompt/system-prompt.js +1 -2
  145. package/dist/src/agent/service/async-queue.d.ts +1 -1
  146. package/dist/src/agent/service/async-queue.js +1 -1
  147. package/dist/src/agent/service/direct-turn-helpers.d.ts +1 -1
  148. package/dist/src/agent/service/direct-turn-helpers.js +2 -2
  149. package/dist/src/agent/service/process-direct-one-shot.d.ts +3 -1
  150. package/dist/src/agent/service/process-direct-one-shot.js +1 -1
  151. package/dist/src/agent/service/process-direct-streaming.d.ts +7 -5
  152. package/dist/src/agent/service/process-direct-streaming.js +5 -5
  153. package/dist/src/agent/service.d.ts +2 -3
  154. package/dist/src/agent/service.js +10 -21
  155. package/dist/src/agent/service.types.d.ts +2 -0
  156. package/dist/src/agent/session/index.d.ts +1 -1
  157. package/dist/src/agent/session/session-context.d.ts +2 -0
  158. package/dist/src/agent/session/session-context.js +4 -0
  159. package/dist/src/agent/session/session-state-bag.d.ts +4 -4
  160. package/dist/src/agent/session/session-state-bag.js +1 -1
  161. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +1 -1
  162. package/dist/src/agent/streaming/reasoning-visibility.d.ts +6 -0
  163. package/dist/src/agent/streaming/{reasoning-visibility-sse.js → reasoning-visibility.js} +3 -6
  164. package/dist/src/agent/tools/dreaming-tool.d.ts +0 -2
  165. package/dist/src/agent/tools/dreaming-tool.js +13 -38
  166. package/dist/src/agent/tools/factory.d.ts +4 -3
  167. package/dist/src/agent/tools/factory.js +2 -10
  168. package/dist/src/agent/tools/index.d.ts +0 -1
  169. package/dist/src/agent/tools/index.js +1 -2
  170. package/dist/src/agent/tools/memory-tool.js +1 -1
  171. package/dist/src/agent/workspace-runtime/registry.d.ts +3 -5
  172. package/dist/src/agent/workspace-runtime/registry.js +2 -15
  173. package/dist/src/agent-manifest/schema.d.ts +17 -17
  174. package/dist/src/agent-runtime/index.js +1 -1
  175. package/dist/src/agent-runtime/memory-runtime.d.ts +2 -2
  176. package/dist/src/agent-runtime/runtime-profile.js +1 -1
  177. package/dist/src/automations/domain/types.d.ts +2 -1
  178. package/dist/src/automations/domain/validation.d.ts +29 -29
  179. package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -3
  180. package/dist/src/automations/service/action-executor.js +4 -1
  181. package/dist/src/channels/pairing/pairing-challenge.d.ts +1 -1
  182. package/dist/src/channels/pairing/pairing-challenge.js +1 -1
  183. package/dist/src/chat-commands/builtins/understanding.js +2 -5
  184. package/dist/src/cli/commands/agent/stream-renderer.js +4 -1
  185. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  186. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  187. package/dist/src/cli/commands/init.js +3 -22
  188. package/dist/src/cli/templates.js +1 -1
  189. package/dist/src/config/index.js +3 -3
  190. package/dist/src/config/paths.d.ts +0 -5
  191. package/dist/src/config/paths.js +2 -11
  192. package/dist/src/config/rules.js +0 -5
  193. package/dist/src/config/schema.d.ts +27 -122
  194. package/dist/src/config/schema.js +9 -42
  195. package/dist/src/config/web-patch.js +0 -1
  196. package/dist/src/connectors/learning-coordinator.js +75 -3
  197. package/dist/src/endpoint-tools/auth.d.ts +20 -0
  198. package/dist/src/endpoint-tools/auth.js +51 -0
  199. package/dist/src/endpoint-tools/index.d.ts +5 -0
  200. package/dist/src/endpoint-tools/index.js +6 -0
  201. package/dist/src/endpoint-tools/invocation-service.d.ts +68 -0
  202. package/dist/src/endpoint-tools/invocation-service.js +190 -0
  203. package/dist/src/endpoint-tools/policy.d.ts +10 -0
  204. package/dist/src/endpoint-tools/policy.js +18 -0
  205. package/dist/src/endpoint-tools/registry.d.ts +45 -0
  206. package/dist/src/endpoint-tools/registry.js +121 -0
  207. package/dist/src/endpoint-tools/runtime.d.ts +23 -0
  208. package/dist/src/endpoint-tools/runtime.js +86 -0
  209. package/dist/src/endpoint-tools/upload-service.d.ts +41 -0
  210. package/dist/src/endpoint-tools/upload-service.js +103 -0
  211. package/dist/src/extensions/types/hooks.d.ts +1 -1
  212. package/dist/src/extensions/update.js +1 -1
  213. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  214. package/dist/src/gateway/agent-builtin-tools.js +0 -5
  215. package/dist/src/gateway/agents-admin.d.ts +0 -7
  216. package/dist/src/gateway/agents-admin.js +3 -32
  217. package/dist/src/gateway/chat-stream/protocol.d.ts +0 -1
  218. package/dist/src/gateway/clarify-bridge.d.ts +5 -4
  219. package/dist/src/gateway/clarify-bridge.js +3 -4
  220. package/dist/src/gateway/dreaming-automation-reconciler.d.ts +3 -3
  221. package/dist/src/gateway/dreaming-automation-reconciler.js +48 -88
  222. package/dist/src/gateway/heartbeat/service.js +4 -1
  223. package/dist/src/gateway/hono/app.js +1 -5
  224. package/dist/src/gateway/hono/index.d.ts +0 -1
  225. package/dist/src/gateway/hono/index.js +1 -2
  226. package/dist/src/gateway/hono/lib/config-payload.d.ts +20 -9
  227. package/dist/src/gateway/hono/lib/config-payload.js +3 -2
  228. package/dist/src/gateway/hono/middleware/auth.js +3 -5
  229. package/dist/src/gateway/hono/oauth-async.d.ts +1 -0
  230. package/dist/src/gateway/hono/oauth-async.js +17 -2
  231. package/dist/src/gateway/hono/routes/agent-stream.js +49 -6
  232. package/dist/src/gateway/hono/routes/agents.js +1 -33
  233. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  234. package/dist/src/gateway/hono/routes/config-patch/gateway.d.ts +2 -2
  235. package/dist/src/gateway/hono/routes/config-patch/gateway.js +0 -19
  236. package/dist/src/gateway/hono/routes/config-patch/misc.js +17 -1
  237. package/dist/src/gateway/hono/routes/connectors.js +13 -12
  238. package/dist/src/gateway/hono/routes/deps.d.ts +0 -2
  239. package/dist/src/gateway/hono/routes/endpoint-tools.d.ts +3 -0
  240. package/dist/src/gateway/hono/routes/endpoint-tools.js +196 -0
  241. package/dist/src/gateway/hono/routes/index.js +6 -2
  242. package/dist/src/gateway/hono/routes/lazy-bundles.js +1 -5
  243. package/dist/src/gateway/hono/routes/logs.js +0 -4
  244. package/dist/src/gateway/hono/routes/public-gateway.js +2 -2
  245. package/dist/src/gateway/hono/routes/realtime.d.ts +3 -0
  246. package/dist/src/gateway/hono/routes/realtime.js +35 -0
  247. package/dist/src/gateway/hono/routes/status.js +0 -7
  248. package/dist/src/gateway/hono/routes/understanding-sources.d.ts +3 -0
  249. package/dist/src/gateway/hono/routes/understanding-sources.js +203 -0
  250. package/dist/src/gateway/hono/routes/work-discovery.d.ts +2 -0
  251. package/dist/src/gateway/hono/routes/work-discovery.js +3 -134
  252. package/dist/src/gateway/hono/routes/workflows.js +1 -1
  253. package/dist/src/gateway/hono/routes/you.d.ts +0 -31
  254. package/dist/src/gateway/hono/routes/you.js +230 -1161
  255. package/dist/src/gateway/index.d.ts +1 -1
  256. package/dist/src/gateway/index.js +1 -2
  257. package/dist/src/gateway/protocol.d.ts +1 -7
  258. package/dist/src/gateway/security/index.js +1 -1
  259. package/dist/src/gateway/security/operator-scopes.js +1 -1
  260. package/dist/src/gateway/server.js +4 -4
  261. package/dist/src/gateway/service/agent-runner.d.ts +11 -9
  262. package/dist/src/gateway/service/agent-runner.js +18 -18
  263. package/dist/src/gateway/service/config-coordinator.d.ts +3 -3
  264. package/dist/src/gateway/service/run-gateway-agent.d.ts +4 -3
  265. package/dist/src/gateway/service/run-gateway-agent.js +15 -17
  266. package/dist/src/gateway/service/session-input-coordinator.d.ts +3 -0
  267. package/dist/src/gateway/service/session-input-coordinator.js +4 -2
  268. package/dist/src/gateway/service/types.d.ts +0 -5
  269. package/dist/src/gateway/service.d.ts +7 -6
  270. package/dist/src/gateway/service.js +43 -26
  271. package/dist/src/infra/update-runner.js +1 -1
  272. package/dist/src/knowledge/connected-knowledge-pipeline.js +1 -1
  273. package/dist/src/knowledge/connected-understanding-pipeline.d.ts +2 -4
  274. package/dist/src/knowledge/connected-understanding-pipeline.js +31 -81
  275. package/dist/src/knowledge/index.js +2 -2
  276. package/dist/src/knowledge/people-graph.d.ts +22 -25
  277. package/dist/src/knowledge/people-graph.js +76 -43
  278. package/dist/src/mcp/channel-bridge.d.ts +6 -9
  279. package/dist/src/mcp/channel-bridge.js +48 -76
  280. package/dist/src/mcp/channel-server.js +2 -6
  281. package/dist/src/proactive/execution/context.js +8 -13
  282. package/dist/src/realtime/broker.d.ts +31 -0
  283. package/dist/src/realtime/broker.js +114 -0
  284. package/dist/src/realtime/runtime.d.ts +20 -0
  285. package/dist/src/realtime/runtime.js +263 -0
  286. package/dist/src/realtime/tickets.d.ts +15 -0
  287. package/dist/src/realtime/tickets.js +38 -0
  288. package/dist/src/realtime/writer.d.ts +15 -0
  289. package/dist/src/realtime/writer.js +78 -0
  290. package/dist/src/share/share-config.js +0 -1
  291. package/dist/src/share/site-share-config.js +0 -1
  292. package/dist/src/storage/sqlite/connector-account-repository.js +0 -1
  293. package/dist/src/storage/sqlite/context-consolidation-repository.d.ts +37 -0
  294. package/dist/src/storage/sqlite/context-consolidation-repository.js +64 -0
  295. package/dist/src/storage/sqlite/endpoint-principal-repository.d.ts +17 -0
  296. package/dist/src/storage/sqlite/endpoint-principal-repository.js +54 -0
  297. package/dist/src/storage/sqlite/endpoint-tool-invocation-repository.d.ts +25 -0
  298. package/dist/src/storage/sqlite/endpoint-tool-invocation-repository.js +42 -0
  299. package/dist/src/storage/sqlite/fts.d.ts +2 -0
  300. package/dist/src/storage/sqlite/fts.js +29 -1
  301. package/dist/src/storage/sqlite/index.d.ts +6 -6
  302. package/dist/src/storage/sqlite/index.js +7 -7
  303. package/dist/src/storage/sqlite/knowledge-repository.d.ts +9 -2
  304. package/dist/src/storage/sqlite/knowledge-repository.js +58 -10
  305. package/dist/src/storage/sqlite/memory-records-repository.d.ts +7 -56
  306. package/dist/src/storage/sqlite/memory-records-repository.js +68 -218
  307. package/dist/src/storage/sqlite/migrations/109_endpoint_principals.sql +14 -0
  308. package/dist/src/storage/sqlite/migrations/110_session_input_origin.sql +43 -0
  309. package/dist/src/storage/sqlite/migrations/111_endpoint_tool_invocations.sql +18 -0
  310. package/dist/src/storage/sqlite/migrations/112_endpoint_instance_bindings.sql +8 -0
  311. package/dist/src/storage/sqlite/migrations/113_memory_evidence_single_source.sql +54 -0
  312. package/dist/src/storage/sqlite/migrations/114_user_context_domain.sql +193 -0
  313. package/dist/src/storage/sqlite/migrations/115_remove_legacy_user_context.sql +6 -0
  314. package/dist/src/storage/sqlite/migrations/116_structured_context_consolidation.sql +38 -0
  315. package/dist/src/storage/sqlite/migrations/117_unified_understanding_sources.sql +110 -0
  316. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  317. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  318. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  319. package/dist/src/storage/sqlite/schema.js +1 -1
  320. package/dist/src/storage/sqlite/schema.sql +0 -20
  321. package/dist/src/storage/sqlite/session-input-repository.d.ts +3 -0
  322. package/dist/src/storage/sqlite/session-input-repository.js +5 -3
  323. package/dist/src/storage/sqlite/user-context-quality-repository.d.ts +34 -0
  324. package/dist/src/storage/sqlite/user-context-quality-repository.js +74 -0
  325. package/dist/src/storage/sqlite/user-context-repository.d.ts +64 -0
  326. package/dist/src/storage/sqlite/user-context-repository.js +383 -0
  327. package/dist/src/tasks/home-query-service.d.ts +1 -1
  328. package/dist/src/tui/backends/embedded-backend.js +5 -2
  329. package/dist/src/tui/backends/{gateway-sse-backend.d.ts → gateway-realtime-backend.d.ts} +13 -10
  330. package/dist/src/tui/backends/{gateway-sse-backend.js → gateway-realtime-backend.js} +114 -151
  331. package/dist/src/tui/tool-summary.js +1 -7
  332. package/dist/src/tui/tui-agent-events.d.ts +0 -1
  333. package/dist/src/tui/tui-agent-events.js +2 -15
  334. package/dist/src/tui/tui-backend.d.ts +4 -4
  335. package/dist/src/tui/tui-run-state.js +0 -4
  336. package/dist/src/tui/tui-startup-resources.js +1 -2
  337. package/dist/src/tui/tui-types.d.ts +2 -9
  338. package/dist/src/tui/tui-types.js +0 -1
  339. package/dist/src/tui/tui.js +5 -5
  340. package/dist/src/tunnel/gateway-lifecycle.d.ts +1 -1
  341. package/dist/src/tunnel/gateway-lifecycle.js +1 -1
  342. package/dist/src/user-context/config.d.ts +17 -210
  343. package/dist/src/user-context/config.js +19 -85
  344. package/dist/src/user-context/consolidation.d.ts +26 -0
  345. package/dist/src/user-context/consolidation.js +115 -0
  346. package/dist/src/user-context/domain.d.ts +75 -0
  347. package/dist/src/user-context/domain.js +4 -0
  348. package/dist/src/user-context/manual-understanding.d.ts +7 -14
  349. package/dist/src/user-context/manual-understanding.js +19 -49
  350. package/dist/src/{agent/memory/context → user-context}/planner.d.ts +5 -6
  351. package/dist/src/user-context/planner.js +311 -0
  352. package/dist/src/user-context/relationship-continuity.d.ts +3 -6
  353. package/dist/src/user-context/relationship-continuity.js +39 -32
  354. package/dist/src/user-context/sources/catalog.d.ts +2 -0
  355. package/dist/src/user-context/sources/catalog.js +149 -0
  356. package/dist/src/user-context/sources/index.d.ts +3 -0
  357. package/dist/src/user-context/sources/index.js +3 -0
  358. package/dist/src/user-context/sources/repository.d.ts +40 -0
  359. package/dist/src/user-context/sources/repository.js +164 -0
  360. package/dist/src/user-context/sources/types.d.ts +83 -0
  361. package/dist/src/user-context/understandingQuality.d.ts +5 -0
  362. package/dist/src/user-context/understandingQuality.js +44 -0
  363. package/dist/src/utils/logger/log-stream.d.ts +3 -10
  364. package/dist/src/utils/logger/log-stream.js +2 -73
  365. package/dist/src/utils/logger/pino-record.d.ts +1 -1
  366. package/dist/src/utils/logger/streams.js +1 -1
  367. package/dist/src/work-discovery/analyzer.d.ts +4 -3
  368. package/dist/src/work-discovery/analyzer.js +21 -16
  369. package/dist/src/work-discovery/incremental-repository.js +42 -40
  370. package/dist/src/work-discovery/index.js +3 -3
  371. package/dist/src/work-discovery/service.d.ts +7 -7
  372. package/dist/src/work-discovery/service.js +241 -190
  373. package/dist/src/work-discovery/source-repository.js +42 -53
  374. package/dist/src/work-discovery/types.d.ts +2 -14
  375. package/package.json +5 -7
  376. package/dist/gateway/static/root/assets/agents-C6OV-gMm.js +0 -2
  377. package/dist/gateway/static/root/assets/apps-page-Ci14lDeO.js +0 -1
  378. package/dist/gateway/static/root/assets/automations-page-Q1xmb4Rh.js +0 -6
  379. package/dist/gateway/static/root/assets/browser-settings-page-DbowrHXD.js +0 -8
  380. package/dist/gateway/static/root/assets/capabilities-settings-panel-DoZPFdKF.js +0 -7
  381. package/dist/gateway/static/root/assets/capability-presets-api-Dn-7MMEo.js +0 -1
  382. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Bt8Hnx0h.js +0 -1
  383. package/dist/gateway/static/root/assets/channels-settings-Bpsebsru.js +0 -1
  384. package/dist/gateway/static/root/assets/channels-status-swr-DFmdYRE5.js +0 -1
  385. package/dist/gateway/static/root/assets/connector-logo-TRr9ybf6.js +0 -1
  386. package/dist/gateway/static/root/assets/connectors-page-Tg5kl22i.js +0 -2
  387. package/dist/gateway/static/root/assets/cron-expression-B3B1eqnr.js +0 -2
  388. package/dist/gateway/static/root/assets/extension-settings-page-C9ag5tb5.js +0 -1
  389. package/dist/gateway/static/root/assets/gateway-settings-9g8uIry9.js +0 -1
  390. package/dist/gateway/static/root/assets/heartbeat-settings-fl1oC_-5.js +0 -1
  391. package/dist/gateway/static/root/assets/home-page-Bao9jq_z.js +0 -3
  392. package/dist/gateway/static/root/assets/index-Cl5n1f_U.css +0 -1
  393. package/dist/gateway/static/root/assets/index-OJgiMh07.js +0 -223
  394. package/dist/gateway/static/root/assets/local-app-workbench-page-B69NvtvH.js +0 -2
  395. package/dist/gateway/static/root/assets/locale-store-D6hs74o5.js +0 -1
  396. package/dist/gateway/static/root/assets/logs-page-Cq3cABqg.js +0 -7
  397. package/dist/gateway/static/root/assets/messages-D02NNLCZ.js +0 -3
  398. package/dist/gateway/static/root/assets/notes-workbench-BOZfJFhE.js +0 -4
  399. package/dist/gateway/static/root/assets/product-delivery-C8JbSj5Y.js +0 -1
  400. package/dist/gateway/static/root/assets/project-detail-page-TSKFb2tN.js +0 -1
  401. package/dist/gateway/static/root/assets/projects-page-BokeBrTT.js +0 -1
  402. package/dist/gateway/static/root/assets/remote-access-hub-C56anxCX.js +0 -1
  403. package/dist/gateway/static/root/assets/segmented-styles-BL8oLBEp.js +0 -1
  404. package/dist/gateway/static/root/assets/sessions-page-C7TQADrD.js +0 -1
  405. package/dist/gateway/static/root/assets/settings-advanced-gate-BDOPKeAX.js +0 -1
  406. package/dist/gateway/static/root/assets/settings-form-section-zxo5ZGOu.js +0 -1
  407. package/dist/gateway/static/root/assets/settings-page-BUPSIa9P.js +0 -1
  408. package/dist/gateway/static/root/assets/setup-status-panel-BRg766eW.js +0 -1
  409. package/dist/gateway/static/root/assets/shares-settings-DhEAviQ_.js +0 -1
  410. package/dist/gateway/static/root/assets/skill-reload-api-Ct7AV8ls.js +0 -1
  411. package/dist/gateway/static/root/assets/skills-page-DoVuprZm.js +0 -2
  412. package/dist/gateway/static/root/assets/time-picker-BGk_Tbsj.js +0 -1
  413. package/dist/gateway/static/root/assets/use-save-bar-registration-5aVSjTjO.js +0 -1
  414. package/dist/gateway/static/root/assets/user-context-page-B9K41qmy.js +0 -1
  415. package/dist/gateway/static/root/assets/work-discovery-page-BBVnRHju.js +0 -1
  416. package/dist/gateway/static/root/assets/workflows-page-Bs_tYfst.js +0 -11
  417. package/dist/src/agent/code-intelligence/binary.d.ts +0 -15
  418. package/dist/src/agent/code-intelligence/binary.js +0 -372
  419. package/dist/src/agent/code-intelligence/index.d.ts +0 -4
  420. package/dist/src/agent/code-intelligence/index.js +0 -4
  421. package/dist/src/agent/code-intelligence/runtime.d.ts +0 -34
  422. package/dist/src/agent/code-intelligence/runtime.js +0 -280
  423. package/dist/src/agent/code-intelligence/tool-gating.d.ts +0 -5
  424. package/dist/src/agent/code-intelligence/tool-gating.js +0 -6
  425. package/dist/src/agent/code-intelligence/tools.d.ts +0 -6
  426. package/dist/src/agent/code-intelligence/tools.js +0 -266
  427. package/dist/src/agent/code-intelligence/types.d.ts +0 -22
  428. package/dist/src/agent/memory/context/planner.js +0 -286
  429. package/dist/src/agent/memory/dreaming/config.d.ts +0 -48
  430. package/dist/src/agent/memory/dreaming/config.js +0 -98
  431. package/dist/src/agent/memory/dreaming/constants.d.ts +0 -12
  432. package/dist/src/agent/memory/dreaming/constants.js +0 -18
  433. package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +0 -19
  434. package/dist/src/agent/memory/dreaming/deep-promotion.js +0 -152
  435. package/dist/src/agent/memory/dreaming/light-sweep.d.ts +0 -16
  436. package/dist/src/agent/memory/dreaming/light-sweep.js +0 -115
  437. package/dist/src/agent/memory/dreaming/preview.d.ts +0 -23
  438. package/dist/src/agent/memory/dreaming/preview.js +0 -52
  439. package/dist/src/agent/memory/dreaming/promotion-lifecycle.d.ts +0 -16
  440. package/dist/src/agent/memory/dreaming/promotion-lifecycle.js +0 -44
  441. package/dist/src/agent/memory/dreaming/rem-patterns.d.ts +0 -19
  442. package/dist/src/agent/memory/dreaming/rem-patterns.js +0 -150
  443. package/dist/src/agent/memory/dreaming/runner.d.ts +0 -10
  444. package/dist/src/agent/memory/dreaming/runner.js +0 -78
  445. package/dist/src/agent/memory/dreaming/schedule.d.ts +0 -23
  446. package/dist/src/agent/memory/dreaming/schedule.js +0 -38
  447. package/dist/src/agent/memory/dreaming/scope.d.ts +0 -11
  448. package/dist/src/agent/memory/dreaming/scope.js +0 -33
  449. package/dist/src/agent/memory/dreaming/utils.d.ts +0 -3
  450. package/dist/src/agent/memory/dreaming/utils.js +0 -31
  451. package/dist/src/agent/streaming/reasoning-visibility-sse.d.ts +0 -15
  452. package/dist/src/gateway/agent-run-relay.d.ts +0 -19
  453. package/dist/src/gateway/agent-run-relay.js +0 -169
  454. package/dist/src/gateway/hono/routes/memory.d.ts +0 -3
  455. package/dist/src/gateway/hono/routes/memory.js +0 -460
  456. package/dist/src/gateway/hono/sse.d.ts +0 -53
  457. package/dist/src/gateway/hono/sse.js +0 -207
  458. package/dist/src/gateway/service/sse-hub.d.ts +0 -10
  459. package/dist/src/gateway/service/sse-hub.js +0 -53
  460. package/dist/src/storage/sqlite/dreaming-repository.d.ts +0 -61
  461. package/dist/src/storage/sqlite/dreaming-repository.js +0 -88
  462. package/dist/src/storage/sqlite/memory-readiness-repository.d.ts +0 -7
  463. package/dist/src/storage/sqlite/memory-readiness-repository.js +0 -30
  464. package/dist/src/storage/sqlite/memory-reference-consent-repository.d.ts +0 -27
  465. package/dist/src/storage/sqlite/memory-reference-consent-repository.js +0 -107
  466. package/dist/src/storage/sqlite/user-claims-repository.d.ts +0 -101
  467. package/dist/src/storage/sqlite/user-claims-repository.js +0 -241
  468. package/dist/src/storage/sqlite/user-profile-setup-repository.d.ts +0 -3
  469. package/dist/src/storage/sqlite/user-profile-setup-repository.js +0 -32
  470. package/dist/src/tui/sse-consumer.d.ts +0 -15
  471. package/dist/src/tui/sse-consumer.js +0 -73
  472. package/dist/src/user-context/context-compiler.d.ts +0 -27
  473. package/dist/src/user-context/context-compiler.js +0 -48
  474. package/dist/src/user-context/import.d.ts +0 -12
  475. package/dist/src/user-context/import.js +0 -51
  476. package/dist/src/user-context/memory-episode-evaluator.d.ts +0 -32
  477. package/dist/src/user-context/memory-episode-evaluator.js +0 -35
  478. package/dist/src/user-context/memory-readiness.d.ts +0 -33
  479. package/dist/src/user-context/memory-readiness.js +0 -41
  480. package/dist/src/user-context/memory-use-audit.d.ts +0 -10
  481. package/dist/src/user-context/memory-use-audit.js +0 -26
  482. package/dist/src/user-context/personal-playbook.d.ts +0 -11
  483. package/dist/src/user-context/personal-playbook.js +0 -41
  484. package/dist/src/user-context/profile.d.ts +0 -37
  485. package/dist/src/user-context/profile.js +0 -163
  486. package/dist/src/user-context/projection.d.ts +0 -120
  487. package/dist/src/user-context/projection.js +0 -262
  488. package/dist/src/user-context/source-recommendations.d.ts +0 -13
  489. package/dist/src/user-context/source-recommendations.js +0 -85
  490. /package/dist/src/{agent/code-intelligence → user-context/sources}/types.js +0 -0
@@ -4,13 +4,15 @@ import { prependEnvelopeTimestamp } from "../../channels/envelope-timestamp.js";
4
4
  import { transcriptRowsToClientHistory } from "../../session/client-history.js";
5
5
  import { parseModelRef } from "../../agent/models/selection.js";
6
6
  import { gatewayCredentialAuthorization } from "../../gateway/credential.js";
7
- import { consumeSSEStream, parseSSEData } from "../sse-consumer.js";
7
+ import { RealtimeClient } from "../../../packages/realtime-client/src/index.js";
8
8
  import { buildTuiTranscriptTree, transcriptTreeEntryIdToRowNumber } from "../tui-transcript-tree.js";
9
9
  import { computeTuiSessionStats } from "../tui-session-stats.js";
10
+ import { createRequire } from "node:module";
10
11
  import crypto from "node:crypto";
11
- //#region src/tui/backends/gateway-sse-backend.ts
12
+ //#region src/tui/backends/gateway-realtime-backend.ts
12
13
  init_logger();
13
- const log = createLogger("TUI:GatewaySSE");
14
+ const log = createLogger("TUI:GatewayRealtime");
15
+ const { WebSocket } = createRequire(import.meta.url)("ws");
14
16
  function normalizeGatewayModelChoice(model) {
15
17
  const providerPrefix = `${model.provider}/`;
16
18
  const id = model.id.startsWith(providerPrefix) ? model.id.slice(providerPrefix.length) : model.id;
@@ -19,19 +21,6 @@ function normalizeGatewayModelChoice(model) {
19
21
  id
20
22
  };
21
23
  }
22
- function isRecord(value) {
23
- return !!value && typeof value === "object" && !Array.isArray(value);
24
- }
25
- function normalizeGatewaySseEvent(evt) {
26
- if (evt.event !== "agent.stream" || !isRecord(evt.data)) return evt;
27
- const inner = evt.data.event;
28
- if (!isRecord(inner) || typeof inner.type !== "string" || !inner.type) return evt;
29
- return {
30
- event: inner.type,
31
- data: inner,
32
- source: evt.source
33
- };
34
- }
35
24
  /** Fetch wrapper that adds auth headers. */
36
25
  async function gatewayFetch(baseUrl, path, credential, init) {
37
26
  const authorization = gatewayCredentialAuthorization(credential);
@@ -46,16 +35,19 @@ async function gatewayFetch(baseUrl, path, credential, init) {
46
35
  });
47
36
  }
48
37
  /**
49
- * TUI backend that communicates with a running xopc gateway via HTTP + SSE.
38
+ * TUI backend that communicates with a running xopc gateway via REST + realtime WebSocket.
50
39
  *
51
- * - Agent input: durable session input REST plus resumable run SSE
52
- * - Broadcast events: `GET /api/events` via long-lived SSE
40
+ * - Agent input: durable session input REST plus replayable run topics
41
+ * - Broadcast events: gateway realtime topic
53
42
  * - REST calls for sessions, models, etc.
54
43
  */
55
- var GatewaySseBackend = class {
44
+ var GatewayRealtimeBackend = class {
56
45
  baseUrl;
57
46
  credential;
58
- eventAbort = null;
47
+ clientId = `tui-${crypto.randomUUID()}`;
48
+ realtime = null;
49
+ activeRunId = null;
50
+ observedSessionKey = null;
59
51
  chatAbort = null;
60
52
  onEvent;
61
53
  onConnected;
@@ -69,11 +61,13 @@ var GatewaySseBackend = class {
69
61
  return this.baseUrl;
70
62
  }
71
63
  start() {
72
- this.startEventStream();
64
+ this.startRealtime();
73
65
  }
74
66
  stop() {
75
- this.eventAbort?.abort();
76
- this.eventAbort = null;
67
+ this.realtime?.disconnect();
68
+ this.realtime = null;
69
+ this.activeRunId = null;
70
+ this.observedSessionKey = null;
77
71
  this.chatAbort?.abort();
78
72
  this.chatAbort = null;
79
73
  }
@@ -95,6 +89,7 @@ var GatewaySseBackend = class {
95
89
  return (await res.json()).item;
96
90
  }
97
91
  async sendChat(opts) {
92
+ this.observedSessionKey = opts.sessionKey;
98
93
  this.chatAbort?.abort();
99
94
  this.chatAbort = new AbortController();
100
95
  const signal = this.chatAbort.signal;
@@ -185,85 +180,18 @@ var GatewaySseBackend = class {
185
180
  };
186
181
  }
187
182
  async resumeChat(opts) {
183
+ this.observedSessionKey = opts.sessionKey;
188
184
  this.chatAbort?.abort();
189
185
  this.chatAbort = new AbortController();
190
- const signal = this.chatAbort.signal;
191
- this.onEvent?.({
192
- event: "run_start",
193
- data: {
194
- type: "run_start",
195
- runId: opts.runId,
196
- sessionKey: opts.sessionKey,
197
- timestamp: Date.now(),
198
- payload: { channel: "webchat" }
199
- },
200
- source: "agent-resume"
201
- });
202
- let res;
203
- try {
204
- res = await gatewayFetch(this.baseUrl, "/api/agent/resume", this.credential, {
205
- method: "POST",
206
- headers: { Accept: "text/event-stream" },
207
- body: JSON.stringify({
208
- runId: opts.runId,
209
- sessionKey: opts.sessionKey
210
- }),
211
- signal
212
- });
213
- } catch (error) {
214
- if (signal.aborted) return {
215
- ok: false,
216
- reason: "resume aborted"
217
- };
218
- return {
219
- ok: false,
220
- reason: error instanceof Error ? error.message : String(error)
221
- };
222
- }
223
- if (!res.ok) return {
224
- ok: false,
225
- reason: (await res.json().catch(() => ({}))).error?.message ?? `Resume failed: ${res.status}`
226
- };
227
- if (!(res.headers.get("Content-Type") ?? "").includes("text/event-stream") || !res.body) return {
228
- ok: false,
229
- reason: "Resume endpoint did not return an SSE stream"
230
- };
231
- (async () => {
232
- try {
233
- await consumeSSEStream(res.body, (sseEvent) => {
234
- if (signal.aborted) return;
235
- const data = parseSSEData(sseEvent.data);
236
- if (!data) return;
237
- this.onEvent?.({
238
- event: sseEvent.event,
239
- data,
240
- source: "agent-resume"
241
- });
242
- }, signal);
243
- } catch (error) {
244
- if (signal.aborted) return;
245
- const errorMessage = error instanceof Error ? error.message : String(error);
246
- this.onEvent?.({
247
- event: "error",
248
- data: {
249
- type: "error",
250
- runId: opts.runId,
251
- sessionKey: opts.sessionKey,
252
- timestamp: Date.now(),
253
- payload: {
254
- code: "NETWORK_ERROR",
255
- message: errorMessage
256
- }
257
- },
258
- source: "agent-resume"
259
- });
260
- }
261
- })();
186
+ this.unsubscribeActiveRun();
187
+ this.activeRunId = opts.runId;
188
+ this.realtime?.subscribe(`run:${opts.runId}`, 0);
262
189
  return { ok: true };
263
190
  }
264
191
  async abortChat(opts) {
265
192
  this.chatAbort?.abort();
266
193
  this.chatAbort = null;
194
+ this.unsubscribeActiveRun();
267
195
  try {
268
196
  return { ok: (await (await gatewayFetch(this.baseUrl, "/api/agent/abort", this.credential, {
269
197
  method: "POST",
@@ -274,6 +202,7 @@ var GatewaySseBackend = class {
274
202
  }
275
203
  }
276
204
  async submitChatInput(opts) {
205
+ this.observedSessionKey = opts.sessionKey;
277
206
  try {
278
207
  const res = await gatewayFetch(this.baseUrl, `/api/sessions/${encodeURIComponent(opts.sessionKey)}/inputs`, this.credential, {
279
208
  method: "POST",
@@ -752,65 +681,99 @@ var GatewaySseBackend = class {
752
681
  return { ok: false };
753
682
  }
754
683
  }
755
- startEventStream() {
756
- this.eventAbort?.abort();
757
- this.eventAbort = new AbortController();
758
- const url = new URL(`${this.baseUrl}/api/events`);
759
- const connect = async () => {
760
- try {
761
- const res = await fetch(url.toString(), {
762
- signal: this.eventAbort.signal,
763
- headers: {
764
- Accept: "text/event-stream",
765
- ...gatewayCredentialAuthorization(this.credential) ? { Authorization: gatewayCredentialAuthorization(this.credential) } : {}
766
- }
684
+ startRealtime() {
685
+ this.realtime?.disconnect();
686
+ this.realtime = new RealtimeClient({
687
+ clientId: this.clientId,
688
+ clientKind: "tui",
689
+ getWebSocketUrl: () => {
690
+ const url = new URL(this.baseUrl);
691
+ url.protocol = url.protocol === "https:" ? "wss:" : "ws:";
692
+ url.pathname = "/api/realtime/v1/ws";
693
+ url.search = "";
694
+ url.hash = "";
695
+ return url.toString();
696
+ },
697
+ issueTicket: async () => {
698
+ const response = await gatewayFetch(this.baseUrl, "/api/realtime/tickets", this.credential, {
699
+ method: "POST",
700
+ body: JSON.stringify({
701
+ clientId: this.clientId,
702
+ clientKind: "tui"
703
+ })
767
704
  });
768
- if (!res.ok || !res.body) {
769
- this.onDisconnected?.(`event stream error: ${res.status}`);
770
- this.scheduleReconnect();
771
- return;
772
- }
773
- this.onConnected?.();
774
- await consumeSSEStream(res.body, (sseEvent) => {
775
- if (sseEvent.event === "connected") return;
776
- if (sseEvent.event === "gap") {
777
- const gapData = parseSSEData(sseEvent.data);
778
- if (gapData && typeof gapData.expected === "number" && typeof gapData.received === "number") this.onGap?.({
779
- expected: gapData.expected,
780
- received: gapData.received
781
- });
782
- return;
783
- }
784
- const data = parseSSEData(sseEvent.data);
785
- if (data !== null) this.onEvent?.(normalizeGatewaySseEvent({
786
- event: sseEvent.event,
787
- data,
788
- source: "broadcast"
789
- }));
790
- }, this.eventAbort.signal);
791
- if (!this.eventAbort?.signal.aborted) {
792
- this.onDisconnected?.("stream closed");
793
- this.scheduleReconnect();
705
+ const body = await response.json().catch(() => null);
706
+ if (!response.ok || !body?.payload?.ticket) throw new Error(body?.error?.message ?? `Realtime ticket failed (${response.status})`);
707
+ return body.payload.ticket;
708
+ },
709
+ createWebSocket: (url) => new WebSocket(url),
710
+ onStateChange: (state, error) => {
711
+ if (state === "connected") this.onConnected?.();
712
+ else if (state === "error") this.onDisconnected?.(error ?? "Realtime connection failed");
713
+ },
714
+ onEvent: (event) => this.handleRealtimeEvent(event),
715
+ onGap: (gap) => {
716
+ this.onGap?.({
717
+ expected: gap.requestedSeq + 1,
718
+ received: gap.earliestSeq
719
+ });
720
+ if (gap.topic === `run:${this.activeRunId}`) {
721
+ const runId = this.activeRunId;
722
+ this.unsubscribeActiveRun();
723
+ this.onEvent?.({
724
+ event: "error",
725
+ data: {
726
+ type: "error",
727
+ runId,
728
+ timestamp: Date.now(),
729
+ payload: {
730
+ code: "REALTIME_GAP",
731
+ message: "Run replay is no longer available"
732
+ }
733
+ },
734
+ source: "realtime-run"
735
+ });
794
736
  }
795
- } catch (error) {
796
- if (this.eventAbort?.signal.aborted) return;
797
- const errorMessage = error instanceof Error ? error.message : String(error);
798
- log.warn({
799
- err: error,
800
- errorMessage
801
- }, `Event stream failed: ${errorMessage}`);
802
- this.onDisconnected?.(errorMessage);
803
- this.scheduleReconnect();
804
737
  }
805
- };
806
- connect();
738
+ });
739
+ this.realtime.subscribe("gateway");
740
+ this.realtime.subscribe("sessions");
741
+ this.realtime.connect();
742
+ }
743
+ handleRealtimeEvent(event) {
744
+ if (event.topic === `run:${this.activeRunId}`) {
745
+ const data = event.data && typeof event.data === "object" ? {
746
+ ...event.data,
747
+ seq: event.seq
748
+ } : event.data;
749
+ this.onEvent?.({
750
+ event: event.event,
751
+ data,
752
+ source: "realtime-run"
753
+ });
754
+ if (event.event === "run_end" || event.event === "error") this.unsubscribeActiveRun();
755
+ return;
756
+ }
757
+ if (event.topic === "gateway") {
758
+ this.onEvent?.({
759
+ event: event.event,
760
+ data: event.data,
761
+ source: "realtime"
762
+ });
763
+ return;
764
+ }
765
+ if (event.topic === "sessions" && event.event === "run.started") {
766
+ const data = event.data;
767
+ if (typeof data?.sessionKey === "string" && data.sessionKey === this.observedSessionKey && typeof data.runId === "string" && data.runId && data.runId !== this.activeRunId) this.resumeChat({
768
+ sessionKey: data.sessionKey,
769
+ runId: data.runId
770
+ });
771
+ }
807
772
  }
808
- scheduleReconnect() {
809
- if (this.eventAbort?.signal.aborted) return;
810
- setTimeout(() => {
811
- if (!this.eventAbort?.signal.aborted) this.startEventStream();
812
- }, 3e3);
773
+ unsubscribeActiveRun() {
774
+ if (this.activeRunId) this.realtime?.unsubscribe(`run:${this.activeRunId}`);
775
+ this.activeRunId = null;
813
776
  }
814
777
  };
815
778
  //#endregion
816
- export { GatewaySseBackend, normalizeGatewaySseEvent };
779
+ export { GatewayRealtimeBackend };
@@ -28,7 +28,6 @@ function isReadStyleTool(toolName) {
28
28
  "read",
29
29
  "read_file",
30
30
  "memory_get",
31
- "get_code_snippet",
32
31
  "prepare_diff"
33
32
  ].includes(base);
34
33
  }
@@ -39,13 +38,8 @@ function isSearchStyleTool(toolName) {
39
38
  "grep",
40
39
  "rg",
41
40
  "ripgrep",
42
- "search_code",
43
41
  "file_search",
44
- "list_files",
45
- "search_graph",
46
- "query_graph",
47
- "trace_path",
48
- "get_architecture"
42
+ "list_files"
49
43
  ].includes(base);
50
44
  }
51
45
  function isExecStyleTool(toolName) {
@@ -4,7 +4,6 @@ import type { ChatLog } from './components/chat-log.js';
4
4
  import type { TuiEventSource, TuiState } from './tui-types.js';
5
5
  export declare function clearSeenStreamEvents(): void;
6
6
  export declare function clearSeenStreamEventsForRun(runId: string): void;
7
- export declare function shouldSkipDuplicateBroadcastEvent(event: string, data: Record<string, unknown>, state: TuiState, source: TuiEventSource): boolean;
8
7
  export declare function dispatchAgentEvent(event: string, data: Record<string, unknown>, state: TuiState, chatLog: ChatLog, tui: TUI, setActivityStatus: (status: string) => void, touchStreamingActivity?: () => void, onRunEnded?: () => void, onAssistantFinalized?: (message: AgentMessage, options?: {
9
8
  errorMessage?: string;
10
9
  }) => void, source?: TuiEventSource): void;
@@ -29,22 +29,10 @@ const STREAM_TOUCH_EVENTS = new Set([
29
29
  "assistant_message_end",
30
30
  "progress"
31
31
  ]);
32
- const DIRECT_RESPONSE_OWNED_EVENTS = new Set([
33
- ...STREAM_TOUCH_EVENTS,
34
- "run_end",
35
- "error"
36
- ]);
37
32
  function resolveEventRunId(data, state) {
38
33
  if (typeof data.runId === "string" && data.runId) return data.runId;
39
34
  return state.activeRunId ?? state.runStatus.runId ?? state.runStatus.lastCompletedRunId;
40
35
  }
41
- function shouldSkipDuplicateBroadcastEvent(event, data, state, source) {
42
- if (source !== "broadcast") return false;
43
- if (!DIRECT_RESPONSE_OWNED_EVENTS.has(event)) return false;
44
- const directRunId = state.runStatus.directStreamRunId;
45
- if (!directRunId) return false;
46
- return resolveEventRunId(data, state) === directRunId;
47
- }
48
36
  function streamEventKey(data, state) {
49
37
  const runId = resolveEventRunId(data, state);
50
38
  const seq = data.seq;
@@ -52,7 +40,7 @@ function streamEventKey(data, state) {
52
40
  return `${runId}:${seq}`;
53
41
  }
54
42
  function shouldSkipSeenStreamEvent(data, state, source) {
55
- if (source !== "agent-response" && source !== "agent-resume" && source !== "broadcast") return false;
43
+ if (source !== "realtime-run") return false;
56
44
  const key = streamEventKey(data, state);
57
45
  if (!key) return false;
58
46
  if (seenStreamEventKeys.has(key)) return true;
@@ -176,7 +164,6 @@ function errorAssistantMessage(errorContent) {
176
164
  }
177
165
  function dispatchAgentEvent(event, data, state, chatLog, tui, setActivityStatus, touchStreamingActivity, onRunEnded, onAssistantFinalized, source = "unknown") {
178
166
  if (shouldSkipSeenStreamEvent(data, state, source)) return;
179
- if (shouldSkipDuplicateBroadcastEvent(event, data, state, source)) return;
180
167
  if (STREAM_TOUCH_EVENTS.has(event)) touchStreamingActivity?.();
181
168
  const runId = resolveEventRunId(data, state) ?? state.activeRunId ?? "default";
182
169
  const p = payload(data);
@@ -356,4 +343,4 @@ function dispatchAgentEvent(event, data, state, chatLog, tui, setActivityStatus,
356
343
  }
357
344
  const DEFAULT_STREAMING_WATCHDOG_MS = 3e4;
358
345
  //#endregion
359
- export { DEFAULT_STREAMING_WATCHDOG_MS, clearSeenStreamEvents, clearSeenStreamEventsForRun, dispatchAgentEvent, shouldSkipDuplicateBroadcastEvent };
346
+ export { DEFAULT_STREAMING_WATCHDOG_MS, clearSeenStreamEvents, clearSeenStreamEventsForRun, dispatchAgentEvent };
@@ -19,7 +19,7 @@ export interface TuiInboundAttachment {
19
19
  size?: number;
20
20
  uri?: string;
21
21
  }
22
- /** SSE event from the agent stream or broadcast channel. */
22
+ /** Event from an agent run or gateway topic. */
23
23
  export interface TuiEvent {
24
24
  event: string;
25
25
  data: unknown;
@@ -171,7 +171,7 @@ export interface TuiTranscriptTreeEntry {
171
171
  isCurrentLeaf?: boolean;
172
172
  }
173
173
  /**
174
- * Abstraction over the gateway (SSE) or embedded agent backend.
174
+ * Abstraction over the realtime gateway or embedded agent backend.
175
175
  *
176
176
  * Both implementations expose the same surface so the TUI core stays
177
177
  * transport-agnostic.
@@ -183,12 +183,12 @@ export interface TuiBackend {
183
183
  onEvent?: (evt: TuiEvent) => void;
184
184
  onConnected?: () => void;
185
185
  onDisconnected?: (reason: string) => void;
186
- /** Broadcast SSE sequence gap (if the gateway emits `gap` events). */
186
+ /** Realtime sequence gap. */
187
187
  onGap?: (info: {
188
188
  expected: number;
189
189
  received: number;
190
190
  }) => void;
191
- /** Start the backend (open SSE streams / start agent service). */
191
+ /** Start the backend connection or embedded agent service. */
192
192
  start(): void;
193
193
  /** Stop the backend. */
194
194
  stop(): void;
@@ -6,14 +6,12 @@ const STALE_WATCH_ACTIVITY = new Set([
6
6
  "running"
7
7
  ]);
8
8
  function markRunEvent(state, phase, runId, event, source, nowMs = Date.now()) {
9
- const directStreamRunId = (source === "agent-response" || source === "agent-resume") && runId ? runId : state.runStatus.directStreamRunId;
10
9
  const isStartingNewRun = phase !== "idle" && state.runStatus.phase === "idle" && (runId === null || state.runStatus.runId === null || state.runStatus.runId !== runId);
11
10
  const startedAt = phase === "idle" ? null : isStartingNewRun || state.runStatus.startedAt == null ? nowMs : state.runStatus.startedAt;
12
11
  state.runStatus = {
13
12
  ...state.runStatus,
14
13
  phase,
15
14
  runId,
16
- directStreamRunId,
17
15
  source,
18
16
  lastEvent: event,
19
17
  startedAt,
@@ -26,7 +24,6 @@ function markRunSending(state, nowMs = Date.now()) {
26
24
  ...state.runStatus,
27
25
  phase: "sending",
28
26
  runId: null,
29
- directStreamRunId: null,
30
27
  lastCompletedRunId: null,
31
28
  source: "unknown",
32
29
  lastEvent: "send",
@@ -65,7 +62,6 @@ function resetRunStatus(state) {
65
62
  ...state.runStatus,
66
63
  phase: "idle",
67
64
  runId: null,
68
- directStreamRunId: null,
69
65
  lastCompletedRunId: null,
70
66
  lastEvent: null,
71
67
  startedAt: null,
@@ -1,6 +1,6 @@
1
1
  import { resolveStateDir } from "../config/paths-state.js";
2
2
  import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
3
- import { init_paths, resolveAgentProfileDir, resolveBundledSkillsDir, resolveUserProfilePath } from "../config/paths.js";
3
+ import { init_paths, resolveAgentProfileDir, resolveBundledSkillsDir } from "../config/paths.js";
4
4
  import { resolveBootstrapFilesSync } from "../agent/bootstrap/bootstrap-files.js";
5
5
  import { createSkillConfigManager, isSkillEnabled } from "../agent/skills/config.js";
6
6
  import { loadSkills } from "../agent/skills/index.js";
@@ -20,7 +20,6 @@ function collectTuiStartupResources(config, sessionKey, options = {}) {
20
20
  const workspaceDir = profile.resolvedWorkspacePath || getWorkspacePath(config);
21
21
  const context = uniqueSorted(resolveBootstrapFilesSync({
22
22
  profileDir,
23
- userProfilePath: resolveUserProfilePath(),
24
23
  sessionKey
25
24
  }).filter((file) => !file.missing).map((file) => file.name || basename(file.path)));
26
25
  const skillsConfig = createSkillConfigManager(resolveStateDir()).load();
@@ -28,20 +28,13 @@ export type TuiExitReason = 'exit' | 'signal';
28
28
  export interface TuiResult {
29
29
  exitReason: TuiExitReason;
30
30
  }
31
- /** Parsed SSE event from the stream. */
32
- export interface ParsedSSEEvent {
33
- event: string;
34
- data: string;
35
- id?: string;
36
- }
37
31
  /** Activity status for the TUI status bar. */
38
32
  export type ActivityStatus = 'idle' | 'sending' | 'waiting' | 'streaming' | 'running' | 'compacting' | 'stalled' | 'recovering' | 'aborting';
39
- export type TuiEventSource = 'agent-response' | 'agent-resume' | 'broadcast' | 'embedded' | 'unknown';
33
+ export type TuiEventSource = 'realtime-run' | 'realtime' | 'embedded' | 'unknown';
40
34
  export type TuiRunPhase = 'idle' | 'sending' | 'waiting' | 'streaming' | 'tool' | 'progress' | 'stalled' | 'recovering' | 'aborting';
41
35
  export interface TuiRunStatus {
42
36
  phase: TuiRunPhase;
43
37
  runId: string | null;
44
- directStreamRunId: string | null;
45
38
  lastCompletedRunId: string | null;
46
39
  source: TuiEventSource;
47
40
  lastEvent: string | null;
@@ -86,7 +79,7 @@ export interface TuiState {
86
79
  scopedModelRefs: string[] | null;
87
80
  /** Last Escape timestamp for double-press actions. */
88
81
  lastEscapeAt: number;
89
- /** Human-readable progress from SSE `progress` events. */
82
+ /** Human-readable progress from run `progress` events. */
90
83
  progressMessage: string | null;
91
84
  /** Session compaction in flight (local /compact handler). */
92
85
  isCompacting: boolean;
@@ -8,7 +8,6 @@ function createInitialState(sessionKey) {
8
8
  runStatus: {
9
9
  phase: "idle",
10
10
  runId: null,
11
- directStreamRunId: null,
12
11
  lastCompletedRunId: null,
13
12
  source: "unknown",
14
13
  lastEvent: null,
@@ -46,7 +46,7 @@ import { createEditorSubmitHandler, createSubmitBurstCoalescer, shouldEnableWind
46
46
  import { withTuiSuspended } from "./tui-suspend.js";
47
47
  import { createInitialState } from "./tui-types.js";
48
48
  import { EmbeddedBackend } from "./backends/embedded-backend.js";
49
- import { GatewaySseBackend } from "./backends/gateway-sse-backend.js";
49
+ import { GatewayRealtimeBackend } from "./backends/gateway-realtime-backend.js";
50
50
  import { ChatLog } from "./components/chat-log.js";
51
51
  import { CustomEditor } from "./components/custom-editor.js";
52
52
  import { TuiBottomBar } from "./components/tui-bottom-bar.js";
@@ -236,7 +236,7 @@ async function runTui(opts) {
236
236
  extensionRegistry,
237
237
  implicitTrustedWorkspace,
238
238
  isWorkspaceTrusted: () => projectTrustSessionDecision
239
- }) : new GatewaySseBackend({
239
+ }) : new GatewayRealtimeBackend({
240
240
  url: opts.url ?? "http://localhost:3120",
241
241
  credential: opts.credential
242
242
  });
@@ -2172,7 +2172,7 @@ async function runTui(opts) {
2172
2172
  updateFooter();
2173
2173
  tui.requestRender();
2174
2174
  });
2175
- if (state.activeRunId) recoverActiveRunFromHistory("broadcast reconnect");
2175
+ if (state.activeRunId) recoverActiveRunFromHistory("realtime reconnect");
2176
2176
  updateHeader();
2177
2177
  updateFooter();
2178
2178
  tui.requestRender();
@@ -2188,7 +2188,7 @@ async function runTui(opts) {
2188
2188
  touchStreamingActivity();
2189
2189
  if (isLocalMode) setConnectionStatus(`local stopped: ${reason}`);
2190
2190
  else {
2191
- setConnectionStatus(`disconnected${wasConnected || state.historyLoaded ? ` (${reason}). Reconnecting broadcast stream…` : `. Ensure gateway is running (xopc gateway) or use --local.`}`);
2191
+ setConnectionStatus(`disconnected${wasConnected || state.historyLoaded ? ` (${reason}). Reconnecting realtime stream…` : `. Ensure gateway is running (xopc gateway) or use --local.`}`);
2192
2192
  if (!wasConnected && !state.historyLoaded) {
2193
2193
  const gatewayUrl = opts.url ?? "http://localhost:3120";
2194
2194
  chatLog.addSystem(`Cannot reach gateway at ${gatewayUrl}.\nStart the gateway (\`xopc gateway\`) or run \`xopc tui --local\` for embedded mode.`);
@@ -2199,7 +2199,7 @@ async function runTui(opts) {
2199
2199
  client.onGap = (info) => {
2200
2200
  chatLog.addSystem(`⚠️ Event gap: expected ${info.expected}, received ${info.received}. Some updates may be missing.`);
2201
2201
  setConnectionStatus(`event gap: expected ${info.expected}, got ${info.received}`);
2202
- if (state.activeRunId) recoverActiveRunFromHistory("broadcast event gap");
2202
+ if (state.activeRunId) recoverActiveRunFromHistory("realtime event gap");
2203
2203
  else loadSessionHistory({ merge: true });
2204
2204
  refreshComposerHistory();
2205
2205
  tui.requestRender();
@@ -2,7 +2,7 @@ import type { Config } from '../config/schema.js';
2
2
  type TunnelEventSink = {
3
3
  emit(type: string, payload: unknown): void;
4
4
  };
5
- /** Publish `tunnel.status` on gateway SSE when tunnel lifecycle changes. */
5
+ /** Publish `tunnel.status` on the gateway realtime topic when tunnel lifecycle changes. */
6
6
  export declare function wireTunnelEventsToGateway(service: TunnelEventSink): void;
7
7
  export type ConfigureTunnelFromGatewayConfigOptions = {
8
8
  force?: boolean;
@@ -10,7 +10,7 @@ import { fetchTunnelWellKnown } from "./well-known.js";
10
10
  init_logger();
11
11
  const log = createLogger("Tunnel");
12
12
  let tunnelSseWired = false;
13
- /** Publish `tunnel.status` on gateway SSE when tunnel lifecycle changes. */
13
+ /** Publish `tunnel.status` on the gateway realtime topic when tunnel lifecycle changes. */
14
14
  function wireTunnelEventsToGateway(service) {
15
15
  if (tunnelSseWired) return;
16
16
  tunnelSseWired = true;