@xopcai/xopc 0.0.362 → 0.0.364

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 (237) 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-_2aJ4ozN.js → activity-store-GvR2gZ0T.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CSIn4ghK.js → agent-avatar-dicebear-7Ct-ZlfL.js} +1 -1
  5. package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-DBNFaHYa.js → agent-defaults-settings-panel-wYj-iyqv.js} +1 -1
  6. package/dist/gateway/static/root/assets/{agent-plugin-dialog-DJkGbMVg.js → agent-plugin-dialog-C9HYMhnJ.js} +1 -1
  7. package/dist/gateway/static/root/assets/{agents-admin-api-Dl0V7UQq.js → agents-admin-api-BkXb7VEZ.js} +1 -1
  8. package/dist/gateway/static/root/assets/{agents-CuQayYYr.js → agents-hPkFQ81z.js} +3 -3
  9. package/dist/gateway/static/root/assets/{app-management-settings-panel-CSczq9QV.js → app-management-settings-panel-CjfsIn9A.js} +1 -1
  10. package/dist/gateway/static/root/assets/{appearance-settings-W0vc1J1Q.js → appearance-settings-qqHZ15GU.js} +1 -1
  11. package/dist/gateway/static/root/assets/{apps-page-esnvb3hh.js → apps-page-Ba2VkQk6.js} +1 -1
  12. package/dist/gateway/static/root/assets/{archive-plugin-CBR91gHK.js → archive-plugin-CKe3qAaL.js} +1 -1
  13. package/dist/gateway/static/root/assets/{automations-page-B9RdzKUS.js → automations-page-Bt8Q58ut.js} +1 -1
  14. package/dist/gateway/static/root/assets/{automations-workspace-U9TEZd_t.js → automations-workspace-Ch0ViAJW.js} +1 -1
  15. package/dist/gateway/static/root/assets/{binary-plugins-C9KIjPph.js → binary-plugins-J51oS7-D.js} +1 -1
  16. package/dist/gateway/static/root/assets/{block-editor-C0bammwh.js → block-editor-ClRFbHP7.js} +1 -1
  17. package/dist/gateway/static/root/assets/{browser-automation-inputs-D2E0co_S.js → browser-automation-inputs-5B3qAdmb.js} +1 -1
  18. package/dist/gateway/static/root/assets/{browser-automations-page-8kqdhAOz.js → browser-automations-page-BjMub7JM.js} +1 -1
  19. package/dist/gateway/static/root/assets/{browser-settings-page-Dl4idi13.js → browser-settings-page-CYrPA-Fp.js} +1 -1
  20. package/dist/gateway/static/root/assets/{capabilities-Bfktn_7E.js → capabilities-BKu9BqPe.js} +1 -1
  21. package/dist/gateway/static/root/assets/{capabilities-BmMMlNmY.js → capabilities-CT_ZW9fT.js} +1 -1
  22. package/dist/gateway/static/root/assets/{capabilities-page-3ImhKPBx.js → capabilities-page-dW6FXtOy.js} +2 -2
  23. package/dist/gateway/static/root/assets/{capabilities-settings-panel-4VDEB_ob.js → capabilities-settings-panel-gZ8auLwa.js} +1 -1
  24. package/dist/gateway/static/root/assets/{capability-header-actions-D1gxCGi8.js → capability-header-actions-L1NvoOUG.js} +1 -1
  25. package/dist/gateway/static/root/assets/{channels-Drbr2JR-.js → channels-Dx5T2G73.js} +1 -1
  26. package/dist/gateway/static/root/assets/{chat-terminal-dock-CSkksCaa.js → chat-terminal-dock-DsCpKPBe.js} +1 -1
  27. package/dist/gateway/static/root/assets/{computer-settings-page-BIXpOJAk.js → computer-settings-page-6FWwxYLe.js} +1 -1
  28. package/dist/gateway/static/root/assets/{connector-service-page-CTnlVEE1.js → connector-service-page-mtH9mEBf.js} +1 -1
  29. package/dist/gateway/static/root/assets/{connectors-page-BluT2l4d.js → connectors-page-DgDLaws0.js} +1 -1
  30. package/dist/gateway/static/root/assets/{date-picker-Bw-CydDe.js → date-picker-BDcwEaIx.js} +1 -1
  31. package/dist/gateway/static/root/assets/{dependency-picker-CgHzhtAc.js → dependency-picker-B_fPQBTM.js} +1 -1
  32. package/dist/gateway/static/root/assets/{desktop-pet-YahEnyfd.js → desktop-pet-CJrO9Vd_.js} +1 -1
  33. package/dist/gateway/static/root/assets/{desktop-pet-settings-47Z4bqJr.js → desktop-pet-settings-DYAfri9w.js} +1 -1
  34. package/dist/gateway/static/root/assets/{device-pairing-wizard-C3aPEEaM.js → device-pairing-wizard-CqRys2R8.js} +1 -1
  35. package/dist/gateway/static/root/assets/{directory-picker-path-field-DH_ok92y.js → directory-picker-path-field-D7_qSxNZ.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-debug-page-t1TiLQrR.js → extension-debug-page-BGyJpRv4.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-page-BeV-7G1h.js → extension-page-D1zBmd8F.js} +1 -1
  38. package/dist/gateway/static/root/assets/{extension-provider-CFCxzqna.js → extension-provider-F9JzOWZ3.js} +1 -1
  39. package/dist/gateway/static/root/assets/{extension-settings-page-DCODJHOu.js → extension-settings-page-CTR8AjCG.js} +1 -1
  40. package/dist/gateway/static/root/assets/{fallback-models-CJzvASNV.js → fallback-models-Chhv4Nfv.js} +1 -1
  41. package/dist/gateway/static/root/assets/{gateway-config-swr-B3LfyXpc.js → gateway-config-swr-CoRoOG1l.js} +1 -1
  42. package/dist/gateway/static/root/assets/{gateway-realtime-CWxXXAe_.js → gateway-realtime-D0ygm6bc.js} +1 -1
  43. package/dist/gateway/static/root/assets/gateway-realtime-store-DBvCRclh.js +1 -0
  44. package/dist/gateway/static/root/assets/{gateway-settings-Q5NFzAJ_.js → gateway-settings-BVfz4Tla.js} +1 -1
  45. package/dist/gateway/static/root/assets/{gateway-startup-retry-BzQP02wp.js → gateway-startup-retry-FDS6S6qa.js} +1 -1
  46. package/dist/gateway/static/root/assets/{home-page-DndTkAw8.js → home-page-BF_9C9yW.js} +1 -1
  47. package/dist/gateway/static/root/assets/{image-generation-api-BO-Xs__S.js → image-generation-api-BPd76jW5.js} +1 -1
  48. package/dist/gateway/static/root/assets/{imports-page-Bb6Gm30L.js → imports-page-9EnECtcl.js} +1 -1
  49. package/dist/gateway/static/root/assets/{index-qOHWhsEK.js → index-BpXej9jJ.js} +7 -7
  50. package/dist/gateway/static/root/assets/index-CbJNcWAn.css +1 -0
  51. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-D2u6sk5l.js → keyboard-shortcuts-settings-MC7mG2h2.js} +1 -1
  52. package/dist/gateway/static/root/assets/{local-app-workbench-page-CHeMfXrB.js → local-app-workbench-page-CytNu0-_.js} +1 -1
  53. package/dist/gateway/static/root/assets/{local-apps-page-BanU1SLr.js → local-apps-page-c3HncHZ3.js} +1 -1
  54. package/dist/gateway/static/root/assets/{local-session-drafts-DLZQBcZY.js → local-session-drafts-gbemPamv.js} +1 -1
  55. package/dist/gateway/static/root/assets/{locale-store-BbwWB0ra.js → locale-store-DId6-v2R.js} +1 -1
  56. package/dist/gateway/static/root/assets/{logs-page-CQdHKCL0.js → logs-page-D4aXtitd.js} +1 -1
  57. package/dist/gateway/static/root/assets/{management-settings-D0V5kCx0.js → management-settings-CRzWi_iJ.js} +1 -1
  58. package/dist/gateway/static/root/assets/{markdown-view-DIBLXsPm.js → markdown-view-DQZ51j9e.js} +1 -1
  59. package/dist/gateway/static/root/assets/{media-plugins-XPzvDZPz.js → media-plugins-XLewwq2q.js} +1 -1
  60. package/dist/gateway/static/root/assets/{messages-B4AhAW4B.js → messages-BHvpZNe9.js} +2 -2
  61. package/dist/gateway/static/root/assets/models-hub-cache-B9SKjidc.js +1 -0
  62. package/dist/gateway/static/root/assets/{note-detail-panel-CodeKI_W.js → note-detail-panel-BgbByI-4.js} +3 -3
  63. package/dist/gateway/static/root/assets/{notes-api-CLn4r03Z.js → notes-api-Byt65v3r.js} +1 -1
  64. package/dist/gateway/static/root/assets/{notes-page-liRQoHbF.js → notes-page-R2BX5XCE.js} +1 -1
  65. package/dist/gateway/static/root/assets/{oauth-api-D9zkd42J.js → oauth-api-BYsCbyGZ.js} +1 -1
  66. package/dist/gateway/static/root/assets/{page-context-capture-button-DO6DB9pi.js → page-context-capture-button-RBp1QK0F.js} +1 -1
  67. package/dist/gateway/static/root/assets/{personal-page-DdfdwOv5.js → personal-page-F0jTBWva.js} +1 -1
  68. package/dist/gateway/static/root/assets/{product-open-page-C9a3sm6Z.js → product-open-page-BtDK68qb.js} +1 -1
  69. package/dist/gateway/static/root/assets/{project-detail-page-BVe5R-Nj.js → project-detail-page-DmQEm0yH.js} +1 -1
  70. package/dist/gateway/static/root/assets/{projects-page-D_rCwi7w.js → projects-page-CrLQvkHX.js} +1 -1
  71. package/dist/gateway/static/root/assets/{registry-api-BFxQTbXQ.js → registry-api-7F2WNEZC.js} +1 -1
  72. package/dist/gateway/static/root/assets/{remote-access-hub-B3imt2du.js → remote-access-hub-C25_hQAd.js} +1 -1
  73. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-C9WC8hJM.js → runtime-tools-settings-panel-B0c120iI.js} +1 -1
  74. package/dist/gateway/static/root/assets/{scenes-page-DL95V1UP.js → scenes-page-DM64yMnx.js} +1 -1
  75. package/dist/gateway/static/root/assets/{schema-form-CDgGmgrq.js → schema-form-DQpQc9tH.js} +1 -1
  76. package/dist/gateway/static/root/assets/{send-session-input-tkAQXGBG.js → send-session-input-D1oc6BC6.js} +1 -1
  77. package/dist/gateway/static/root/assets/{session-api-9X7qep91.js → session-api-N3N37MrR.js} +1 -1
  78. package/dist/gateway/static/root/assets/{session-manager-Dy22bbJT.js → session-manager-CMGUwtbN.js} +1 -1
  79. package/dist/gateway/static/root/assets/{sessions-page-CeeKIVsM.js → sessions-page-DvDO8LtA.js} +1 -1
  80. package/dist/gateway/static/root/assets/settings-advanced-gate-BNhgbmcX.js +1 -0
  81. package/dist/gateway/static/root/assets/{settings-page-xmUGYSOG.js → settings-page-GgBEp6O7.js} +1 -1
  82. package/dist/gateway/static/root/assets/{setup-status-panel-CmjT9Q4P.js → setup-status-panel-10bMi6yL.js} +1 -1
  83. package/dist/gateway/static/root/assets/{share-link-dialog-DeOe9qfQ.js → share-link-dialog-TBBGJPfT.js} +1 -1
  84. package/dist/gateway/static/root/assets/{share-preview-page-Ck27gozJ.js → share-preview-page-DyRLPsPv.js} +1 -1
  85. package/dist/gateway/static/root/assets/{shares-api-D-GuMkPu.js → shares-api-DU0fHP2G.js} +1 -1
  86. package/dist/gateway/static/root/assets/{shares-settings-DpvM2OyO.js → shares-settings-DJ1ME-XM.js} +1 -1
  87. package/dist/gateway/static/root/assets/{skill-api-BpD02td8.js → skill-api-1Puv6wOz.js} +1 -1
  88. package/dist/gateway/static/root/assets/{skill-reload-api-CezAwYxM.js → skill-reload-api-ClyFqHk7.js} +1 -1
  89. package/dist/gateway/static/root/assets/{skills-page-BCgbVI-P.js → skills-page-D52pEr5x.js} +1 -1
  90. package/dist/gateway/static/root/assets/{system-settings-panel-UODcpzsP.js → system-settings-panel--yV67a8L.js} +1 -1
  91. package/dist/gateway/static/root/assets/{task-detail-page-BbqQnNes.js → task-detail-page-D-tcS2bS.js} +1 -1
  92. package/dist/gateway/static/root/assets/{theme-store-6IK2Ik2J.js → theme-store-OhcbFEUR.js} +1 -1
  93. package/dist/gateway/static/root/assets/tracing-settings-page-DoBJ0TYY.js +1 -0
  94. package/dist/gateway/static/root/assets/{tunnel-api-Eey2aZIz.js → tunnel-api-COLdiP_E.js} +1 -1
  95. package/dist/gateway/static/root/assets/{usage-page-BrWj5mk3.js → usage-page-CtM5IfrL.js} +1 -1
  96. package/dist/gateway/static/root/assets/{use-autosave-B-3BJbnn.js → use-autosave-veoM0dHn.js} +1 -1
  97. package/dist/gateway/static/root/assets/{use-composer-attachments-ByAHuR8v.js → use-composer-attachments-DB0bBGzZ.js} +1 -1
  98. package/dist/gateway/static/root/assets/{use-file-preview-expanded-CXVwWJeP.js → use-file-preview-expanded-Bope6MW6.js} +2 -2
  99. package/dist/gateway/static/root/assets/{user-model-page-Cg-oM8nY.js → user-model-page-CSh61kZ5.js} +1 -1
  100. package/dist/gateway/static/root/assets/{voice-api-key-field-BtffIKZD.js → voice-api-key-field-CwD6a3KQ.js} +1 -1
  101. package/dist/gateway/static/root/assets/{voice-config-api-BMm9dSKX.js → voice-config-api-Daexehmc.js} +1 -1
  102. package/dist/gateway/static/root/assets/{work-discovery-overlay-ByHhF_4r.js → work-discovery-overlay-C9u7tuEc.js} +1 -1
  103. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DfNn5VTy.js → workflow-run-setup-panel-BMOBbf33.js} +1 -1
  104. package/dist/gateway/static/root/assets/{workflows-page-B67D-7Wt.js → workflows-page-BrD9vXqO.js} +1 -1
  105. package/dist/gateway/static/root/assets/{workspace-api-TAD7LYsc.js → workspace-api-Cs4sjV2A.js} +2 -2
  106. package/dist/gateway/static/root/index.html +28 -28
  107. package/dist/package.js +1 -1
  108. package/dist/src/agent/agent-manager.js +11 -7
  109. package/dist/src/agent/background-review/run-background-review.js +1 -1
  110. package/dist/src/agent/embedded/model-runtime.js +1 -1
  111. package/dist/src/agent/embedded/run-for-session.js +28 -3
  112. package/dist/src/agent/embedded/run-turn.js +18 -3
  113. package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
  114. package/dist/src/agent/image/tool-model-config.js +1 -1
  115. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
  116. package/dist/src/agent/service.js +6 -4
  117. package/dist/src/agent/skills/hub-lock.js +1 -1
  118. package/dist/src/agent/skills/index.js +1 -1
  119. package/dist/src/agent/skills/managed-store.js +1 -1
  120. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  121. package/dist/src/agent/tools/xopc-use-tool.js +2 -2
  122. package/dist/src/agent-catalog/capabilities.js +2 -2
  123. package/dist/src/auth/credentials.js +2 -2
  124. package/dist/src/auth/oauth-provider-lock.js +1 -1
  125. package/dist/src/auth/profiles/store.js +1 -1
  126. package/dist/src/auth/sync-provider-auth.js +1 -1
  127. package/dist/src/automations/capabilities/drafts.js +1 -1
  128. package/dist/src/bootstrap/application-state.js +1 -1
  129. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  130. package/dist/src/capabilities/runtime/dispatcher.js +1 -1
  131. package/dist/src/capabilities/runtime/product.js +1 -1
  132. package/dist/src/chat-commands/agent-edit.js +1 -1
  133. package/dist/src/chat-commands/builtins/config.js +1 -1
  134. package/dist/src/cli/commands/agent.js +1 -1
  135. package/dist/src/cli/commands/agents.js +1 -1
  136. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  137. package/dist/src/cli/commands/doctor/checks/image-providers.js +1 -1
  138. package/dist/src/cli/commands/doctor/checks/provider-auth.js +3 -3
  139. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  140. package/dist/src/cli/commands/models.js +2 -2
  141. package/dist/src/cli/commands/onboard/model.js +4 -4
  142. package/dist/src/cli/utils/init-workspace-core.js +1 -1
  143. package/dist/src/config/index.js +4 -4
  144. package/dist/src/config/loader.js +2 -2
  145. package/dist/src/config/models-json.js +1 -1
  146. package/dist/src/config/reload.d.ts +1 -0
  147. package/dist/src/config/reload.js +4 -0
  148. package/dist/src/config/rules.js +5 -0
  149. package/dist/src/config/schema.d.ts +23 -0
  150. package/dist/src/config/schema.js +6 -3
  151. package/dist/src/extensions/activation-context.js +1 -1
  152. package/dist/src/extensions/agent-plugins/validation.js +1 -1
  153. package/dist/src/extensions/lockfile.js +1 -1
  154. package/dist/src/gateway/agents-admin.js +2 -2
  155. package/dist/src/gateway/file-path-classifier.js +1 -1
  156. package/dist/src/gateway/hono/lib/config-payload.js +2 -2
  157. package/dist/src/gateway/hono/routes/config-patch/misc.js +3 -3
  158. package/dist/src/gateway/hono/routes/connectors.js +1 -1
  159. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  160. package/dist/src/gateway/hono/routes/models.js +2 -2
  161. package/dist/src/gateway/hono/routes/notes.js +2 -2
  162. package/dist/src/gateway/hono/routes/observability.d.ts +3 -0
  163. package/dist/src/gateway/hono/routes/observability.js +106 -0
  164. package/dist/src/gateway/hono/routes/projects.js +2 -2
  165. package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
  166. package/dist/src/gateway/hono/routes/tasks.js +1 -1
  167. package/dist/src/gateway/image-generation-setup.js +2 -2
  168. package/dist/src/gateway/lock.js +1 -1
  169. package/dist/src/gateway/security/gateway-scopes.js +1 -0
  170. package/dist/src/gateway/service/config-coordinator.d.ts +0 -25
  171. package/dist/src/gateway/service/config-coordinator.js +31 -0
  172. package/dist/src/gateway/service.js +18 -8
  173. package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
  174. package/dist/src/home-intelligence/host.js +2 -2
  175. package/dist/src/infra/update-restart.js +1 -1
  176. package/dist/src/local-apps/service.js +1 -1
  177. package/dist/src/observability/config.d.ts +40 -0
  178. package/dist/src/observability/config.js +31 -0
  179. package/dist/src/observability/langfuse.d.ts +31 -0
  180. package/dist/src/observability/langfuse.js +180 -0
  181. package/dist/src/observability/runtime.d.ts +57 -0
  182. package/dist/src/observability/runtime.js +404 -0
  183. package/dist/src/observability/sanitize.d.ts +3 -0
  184. package/dist/src/observability/sanitize.js +74 -0
  185. package/dist/src/observability/store.d.ts +20 -0
  186. package/dist/src/observability/store.js +128 -0
  187. package/dist/src/observability/storeWorker.d.ts +2 -0
  188. package/dist/src/observability/storeWorker.js +155 -0
  189. package/dist/src/observability/types.d.ts +21 -0
  190. package/dist/src/observability/types.js +1 -0
  191. package/dist/src/personal-agent/communication.js +1 -1
  192. package/dist/src/personal-agent/reply-composer.d.ts +22 -0
  193. package/dist/src/personal-agent/reply-composer.js +276 -0
  194. package/dist/src/personal-agent/reply-style.d.ts +2 -0
  195. package/dist/src/personal-agent/reply-style.js +14 -0
  196. package/dist/src/personal-agent/request-delivery.d.ts +1 -1
  197. package/dist/src/personal-agent/request-delivery.js +18 -4
  198. package/dist/src/personal-agent/request-service.js +1 -1
  199. package/dist/src/personal-agent/service.js +10 -2
  200. package/dist/src/platform/index.js +1 -1
  201. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  202. package/dist/src/providers/index.js +3 -3
  203. package/dist/src/providers/model-call.js +19 -5
  204. package/dist/src/providers/model-catalog-persistence.js +1 -1
  205. package/dist/src/providers/model-registry.js +1 -1
  206. package/dist/src/providers/provider-disconnect-core.js +1 -1
  207. package/dist/src/providers/xopc-cloud-catalog-coordinator.js +1 -1
  208. package/dist/src/storage/sqlite/ai-usage-repository.d.ts +6 -0
  209. package/dist/src/storage/sqlite/ai-usage-repository.js +4 -2
  210. package/dist/src/storage/sqlite/migrations/233_observability_usage_links.sql +3 -0
  211. package/dist/src/storage/sqlite/migrations/234_task_result_reply.sql +14 -0
  212. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  213. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  214. package/dist/src/storage/sqlite/schema.js +1 -1
  215. package/dist/src/tasks/capabilities/read.js +2 -2
  216. package/dist/src/tasks/task-result-delivery-service.js +20 -4
  217. package/dist/src/tui/backends/embedded-backend.js +3 -3
  218. package/dist/src/tui/tui-commands.js +1 -1
  219. package/dist/src/tui/tui-startup-resources.js +1 -1
  220. package/dist/src/tui/tui.js +1 -1
  221. package/dist/src/usage/recorder.d.ts +4 -2
  222. package/dist/src/usage/recorder.js +54 -26
  223. package/dist/src/usage/types.d.ts +3 -0
  224. package/dist/src/utils/logger/context.d.ts +1 -1
  225. package/dist/src/utils/logger/context.js +4 -1
  226. package/dist/src/utils/logger/types.d.ts +3 -0
  227. package/dist/src/voice/realtime/agentBroker.js +11 -2
  228. package/dist/src/voice/realtime/agentEngine.js +18 -10
  229. package/dist/src/voice/realtime/omniEngine.js +11 -2
  230. package/dist/src/voice/realtime/persona-context.js +1 -1
  231. package/dist/src/voice/realtime/playback-echo.d.ts +7 -0
  232. package/dist/src/voice/realtime/playback-echo.js +23 -1
  233. package/package.json +7 -4
  234. package/dist/gateway/static/root/assets/gateway-realtime-store-DS4WzQyF.js +0 -1
  235. package/dist/gateway/static/root/assets/index-Byk2QKIS.css +0 -1
  236. package/dist/gateway/static/root/assets/models-hub-cache-DN5MnhL8.js +0 -1
  237. package/dist/gateway/static/root/assets/settings-advanced-gate-DuvJrDU2.js +0 -1
@@ -70,7 +70,12 @@ var DurableVoiceAgentBroker = class {
70
70
  return {
71
71
  taskId: row.id,
72
72
  runId,
73
- events: this.events(row.id, runId, afterSeq, input.signal)
73
+ events: this.events(row.id, runId, afterSeq, input.signal, [
74
+ "completed",
75
+ "cancelled",
76
+ "failed",
77
+ "interrupted"
78
+ ].includes(row.status))
74
79
  };
75
80
  }
76
81
  async cancel(taskId) {
@@ -80,7 +85,7 @@ var DurableVoiceAgentBroker = class {
80
85
  this.runByTask.delete(taskId);
81
86
  return true;
82
87
  }
83
- async *events(taskId, runId, afterSeq, signal) {
88
+ async *events(taskId, runId, afterSeq, signal, ended) {
84
89
  const queued = [];
85
90
  let wake;
86
91
  const push = (event) => {
@@ -96,6 +101,10 @@ var DurableVoiceAgentBroker = class {
96
101
  };
97
102
  signal.addEventListener("abort", abort, { once: true });
98
103
  try {
104
+ if (ended && !subscription.initial.some((delivery) => {
105
+ const event = eventData(delivery);
106
+ return event?.type === "run_end" || event?.type === "stream_end";
107
+ })) throw new Error("Completed voice task event history is unavailable");
99
108
  while (!signal.aborted) {
100
109
  if (!queued.length) await new Promise((resolve) => {
101
110
  wake = resolve;
@@ -3,7 +3,7 @@ import { init_logger } from "../../utils/logger.js";
3
3
  import { speakStream } from "../tts/speak-core.js";
4
4
  import { AudioPlaybackWindow } from "./audio-playback-window.js";
5
5
  import { TurnCoordinator } from "./turnPolicy.js";
6
- import { isLikelyPlaybackEcho } from "./playback-echo.js";
6
+ import { PlaybackEchoCandidates } from "./playback-echo.js";
7
7
  import { PcmFrameBuffer } from "./pcmFrameBuffer.js";
8
8
  import { SpeakableSegmenter } from "./speakable-segmenter.js";
9
9
  import crypto from "node:crypto";
@@ -36,6 +36,7 @@ function createAgentVoiceEngine(options) {
36
36
  let finalCount = 0;
37
37
  let committing = false;
38
38
  let recentPlayback;
39
+ const echoCandidates = new PlaybackEchoCandidates();
39
40
  const finalizedUtterances = /* @__PURE__ */ new Set();
40
41
  let pendingTurn;
41
42
  let taskUpdateQueued = false;
@@ -89,6 +90,11 @@ function createAgentVoiceEngine(options) {
89
90
  function cancelActiveResponse(reason) {
90
91
  const response = activeResponse;
91
92
  if (!response) return false;
93
+ if (response.audioStarted && response.audibleText) recentPlayback = {
94
+ responseId: response.id,
95
+ text: response.audibleText,
96
+ expiresAt: Date.now() + PLAYBACK_ECHO_TAIL_MS
97
+ };
92
98
  activeResponse = void 0;
93
99
  response.abortController.abort(reason);
94
100
  send("response.cancelled", {
@@ -267,13 +273,11 @@ function createAgentVoiceEngine(options) {
267
273
  conversationId: claim.request.conversationId,
268
274
  expectedTranscriptId: claim.conversationSessionId,
269
275
  signal: response.abortController.signal,
270
- ...updateClientMessageId ? {
271
- clientMessageId: updateClientMessageId,
272
- origin: {
273
- type: "system",
274
- source: "task_update"
275
- }
276
- } : {}
276
+ clientMessageId: updateClientMessageId ?? `voice:${claim.conversationSessionId}:${claim.sessionId}:${inputGeneration}:${turnId}`,
277
+ ...updateClientMessageId ? { origin: {
278
+ type: "system",
279
+ source: "task_update"
280
+ } } : {}
277
281
  });
278
282
  response.taskId = task.taskId;
279
283
  send("task.created", {
@@ -438,6 +442,7 @@ function createAgentVoiceEngine(options) {
438
442
  if (event.type === "ready" || event.type === "usage") return;
439
443
  if (event.type === "error") {
440
444
  turn.reset();
445
+ echoCandidates.clear();
441
446
  log.warn({
442
447
  err: event.error,
443
448
  sessionId: claim.sessionId,
@@ -454,6 +459,7 @@ function createAgentVoiceEngine(options) {
454
459
  if (muted || finalizedUtterances.has(event.utteranceId)) return;
455
460
  if (event.type === "speech_started") {
456
461
  lastUserSpeechAt = Date.now();
462
+ echoCandidates.remember(event.utteranceId, activeResponse?.audioStarted ? activeResponse.audibleText : recentPlayback && recentPlayback.expiresAt >= Date.now() ? recentPlayback.text : void 0);
457
463
  if (claim.request.purpose === "conversation") {
458
464
  if (pendingTurn) {
459
465
  pendingTurn.cancelled = true;
@@ -490,11 +496,11 @@ function createAgentVoiceEngine(options) {
490
496
  responseId: activeResponse.id,
491
497
  text: activeResponse.audibleText
492
498
  } : recentPlayback && recentPlayback.expiresAt >= Date.now() ? recentPlayback : void 0;
493
- if (claim.request.purpose === "conversation" && playback && isLikelyPlaybackEcho(text, playback.text)) {
499
+ if (claim.request.purpose === "conversation" && echoCandidates.matches(event.utteranceId, text, playback?.text)) {
494
500
  bufferFinal(event.utteranceId, "");
495
501
  log.debug({
496
502
  sessionId: claim.sessionId,
497
- responseId: playback.responseId,
503
+ responseId: playback?.responseId,
498
504
  transcriptCharacters: text.length
499
505
  }, "Ignored finalized transcription matching recent voice playback");
500
506
  return;
@@ -517,6 +523,7 @@ function createAgentVoiceEngine(options) {
517
523
  }
518
524
  function discardInput() {
519
525
  turn.reset();
526
+ echoCandidates.clear();
520
527
  pendingTurn = void 0;
521
528
  inputGeneration += 1;
522
529
  queuedTurns = 0;
@@ -623,6 +630,7 @@ function createAgentVoiceEngine(options) {
623
630
  if (closing) return closing;
624
631
  closed = true;
625
632
  turn.reset();
633
+ echoCandidates.clear();
626
634
  cancelActiveResponse("session_closed");
627
635
  sttAbort.abort("session_closed");
628
636
  sttSession?.abort("session_closed");
@@ -2,7 +2,7 @@ import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { AudioPlaybackWindow } from "./audio-playback-window.js";
4
4
  import { TurnCoordinator } from "./turnPolicy.js";
5
- import { isLikelyPlaybackEcho } from "./playback-echo.js";
5
+ import { PlaybackEchoCandidates } from "./playback-echo.js";
6
6
  import { PcmFrameBuffer } from "./pcmFrameBuffer.js";
7
7
  import crypto from "node:crypto";
8
8
  import WebSocket from "ws";
@@ -45,6 +45,7 @@ function createOmniVoiceEngine(options) {
45
45
  let failed = false;
46
46
  let platformRequestId;
47
47
  let active;
48
+ const echoCandidates = new PlaybackEchoCandidates();
48
49
  let recentPlayback;
49
50
  let waitingForCancellation;
50
51
  let responseCreateQueued = false;
@@ -147,6 +148,10 @@ function createOmniVoiceEngine(options) {
147
148
  const cancel = (reason) => {
148
149
  const response = active;
149
150
  if (!response) return false;
151
+ if (response.audio && response.text) recentPlayback = {
152
+ text: response.text,
153
+ expiresAt: Date.now() + PLAYBACK_ECHO_TAIL_MS
154
+ };
150
155
  active = void 0;
151
156
  response.abort.abort(reason);
152
157
  response.release();
@@ -234,6 +239,7 @@ function createOmniVoiceEngine(options) {
234
239
  failed = true;
235
240
  clearTimeout(responseStartTimer);
236
241
  turn.reset();
242
+ echoCandidates.clear();
237
243
  responseCreateQueued = false;
238
244
  log.warn({
239
245
  sessionId: options.callId,
@@ -259,6 +265,7 @@ function createOmniVoiceEngine(options) {
259
265
  function discardInput() {
260
266
  clearTimeout(responseStartTimer);
261
267
  turn.reset();
268
+ echoCandidates.clear();
262
269
  responseCreateQueued = false;
263
270
  speaking.clear();
264
271
  turnSettled = false;
@@ -358,6 +365,7 @@ function createOmniVoiceEngine(options) {
358
365
  return;
359
366
  }
360
367
  if (recorded.has(String(event.item_id)) || pendingInputs.has(String(event.item_id))) return;
368
+ echoCandidates.remember(String(event.item_id), active?.audio ? active.text : recentPlayback && recentPlayback.expiresAt >= Date.now() ? recentPlayback.text : void 0);
361
369
  inputBlocked = false;
362
370
  pendingInputs.add(String(event.item_id));
363
371
  clearTimeout(responseStartTimer);
@@ -381,7 +389,7 @@ function createOmniVoiceEngine(options) {
381
389
  speaking.delete(event.item_id);
382
390
  const text = event.transcript.trim();
383
391
  const playbackText = active?.audio ? active.text : recentPlayback && recentPlayback.expiresAt >= Date.now() ? recentPlayback.text : void 0;
384
- if (playbackText && isLikelyPlaybackEcho(text, playbackText)) {
392
+ if (echoCandidates.matches(event.item_id, text, playbackText)) {
385
393
  turn.final(event.item_id, "");
386
394
  log.debug({
387
395
  sessionId: options.callId,
@@ -582,6 +590,7 @@ function createOmniVoiceEngine(options) {
582
590
  clearTimeout(uploadTimer);
583
591
  clearTimeout(responseStartTimer);
584
592
  turn.reset();
593
+ echoCandidates.clear();
585
594
  speaking.clear();
586
595
  inputQueue = [];
587
596
  queuedInputBytes = 0;
@@ -1,6 +1,6 @@
1
1
  import { init_agent_scope, resolveAgentProfileDir } from "../../agent/agent-scope.js";
2
- import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
3
2
  import { DEFAULT_SOUL_FILENAME } from "../../agent/context/workspace.js";
3
+ import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
4
4
  import { loadProfileBootstrapFiles } from "../../agent/bootstrap/load-bootstrap-files.js";
5
5
  import { join } from "node:path";
6
6
  import { statSync } from "node:fs";
@@ -1,2 +1,9 @@
1
1
  /** Conservatively identifies finalized ASR that is already in audible assistant output. */
2
2
  export declare function isLikelyPlaybackEcho(transcript: string, assistantText: string): boolean;
3
+ /** Retains the playback at speech onset while a provider finishes delayed ASR. */
4
+ export declare class PlaybackEchoCandidates {
5
+ private readonly candidates;
6
+ remember(utteranceId: string, text: string | undefined): void;
7
+ matches(utteranceId: string, transcript: string, currentPlayback?: string): boolean;
8
+ clear(): void;
9
+ }
@@ -28,5 +28,27 @@ function isLikelyPlaybackEcho(transcript, assistantText) {
28
28
  if (heard.length < (containsCjk ? 6 : 10)) return false;
29
29
  return closestSubstringEditDistance(heard, spoken) / Array.from(heard).length <= .22;
30
30
  }
31
+ /** Retains the playback at speech onset while a provider finishes delayed ASR. */
32
+ var PlaybackEchoCandidates = class {
33
+ candidates = /* @__PURE__ */ new Map();
34
+ remember(utteranceId, text) {
35
+ if (!text || this.candidates.has(utteranceId)) return;
36
+ const now = Date.now();
37
+ for (const [id, candidate] of this.candidates) if (candidate.expiresAt < now) this.candidates.delete(id);
38
+ if (this.candidates.size >= 256) this.candidates.delete(this.candidates.keys().next().value);
39
+ this.candidates.set(utteranceId, {
40
+ text: text.slice(-8e3),
41
+ expiresAt: now + 3e4
42
+ });
43
+ }
44
+ matches(utteranceId, transcript, currentPlayback) {
45
+ const candidate = this.candidates.get(utteranceId);
46
+ this.candidates.delete(utteranceId);
47
+ return Boolean(currentPlayback && isLikelyPlaybackEcho(transcript, currentPlayback) || candidate && candidate.expiresAt >= Date.now() && isLikelyPlaybackEcho(transcript, candidate.text));
48
+ }
49
+ clear() {
50
+ this.candidates.clear();
51
+ }
52
+ };
31
53
  //#endregion
32
- export { isLikelyPlaybackEcho };
54
+ export { PlaybackEchoCandidates, isLikelyPlaybackEcho };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xopcai/xopc",
3
- "version": "0.0.362",
3
+ "version": "0.0.364",
4
4
  "description": "Local-first personal AI for the one-person company, with durable context, tasks, workflows, automations, and local or cloud models.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -75,6 +75,9 @@
75
75
  "@inquirer/prompts": "^8.5.0",
76
76
  "@modelcontextprotocol/sdk": "1.32.1",
77
77
  "@mozilla/readability": "^0.6.0",
78
+ "@opentelemetry/api": "^1.9.1",
79
+ "@opentelemetry/context-async-hooks": "^2.12.0",
80
+ "@opentelemetry/sdk-trace-base": "^2.12.0",
78
81
  "@sinclair/typebox": "^0.34.49",
79
82
  "@trycua/cua-driver": "0.28.2",
80
83
  "@vscode/ripgrep": "^1.18.0",
@@ -158,12 +161,12 @@
158
161
  "vitepress": "^1.6.4",
159
162
  "vitest": "4.1.5",
160
163
  "vue": "^3.5.35",
161
- "@xopcai/endpoint-tools-client": "0.0.0",
162
164
  "@xopcai/browser-control-contract": "0.1.0",
163
- "@xopcai/computer-control-contract": "0.1.0",
165
+ "@xopcai/endpoint-tools-client": "0.0.0",
164
166
  "@xopcai/endpoint-tools-protocol": "0.0.0",
165
- "@xopcai/gateway-contract": "0.0.0",
167
+ "@xopcai/computer-control-contract": "0.1.0",
166
168
  "@xopcai/realtime-client": "0.0.0",
169
+ "@xopcai/gateway-contract": "0.0.0",
167
170
  "@xopcai/realtime-protocol": "0.0.0"
168
171
  },
169
172
  "scripts": {
@@ -1 +0,0 @@
1
- import{p as e}from"./locale-store-BbwWB0ra.js";var t=e(()=>({connectionState:`idle`,error:null}));function n(e){t.setState(e)}export{t as n,n as t};