@xopcai/xopc 0.0.389 → 0.0.391

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 (321) 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-dvik6t7Z.js → activity-store-DWQCDi8M.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-bWMd5TDC.js → agent-avatar-dicebear-CzS0TUv9.js} +1 -1
  5. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DE910MyU.js +1 -0
  6. package/dist/gateway/static/root/assets/{agent-plugin-dialog-UunIxc1q.js → agent-plugin-dialog-0SlvsYl7.js} +1 -1
  7. package/dist/gateway/static/root/assets/agents-BZh28Qn1.js +77 -0
  8. package/dist/gateway/static/root/assets/{agents-admin-api-BlNGyXpm.js → agents-admin-api-Bb3Kvz3X.js} +1 -1
  9. package/dist/gateway/static/root/assets/app-management-settings-panel-9A7JN5V5.js +1 -0
  10. package/dist/gateway/static/root/assets/{appearance-settings-CUAdx44v.js → appearance-settings-BPdLEo6L.js} +1 -1
  11. package/dist/gateway/static/root/assets/{apps-page-D5zDB6gp.js → apps-page-Cz7LypV9.js} +1 -1
  12. package/dist/gateway/static/root/assets/{archive-plugin-Du6dJNcl.js → archive-plugin-DFnHPNie.js} +1 -1
  13. package/dist/gateway/static/root/assets/{automations-page-BO8Ig5Z4.js → automations-page-CnBLPVNh.js} +1 -1
  14. package/dist/gateway/static/root/assets/automations-workspace-BBjS-sk-.js +6 -0
  15. package/dist/gateway/static/root/assets/{binary-plugins-D7VJjwnr.js → binary-plugins-BQC0Tzoi.js} +1 -1
  16. package/dist/gateway/static/root/assets/{block-editor-CaJlWTAn.js → block-editor-DSh5019z.js} +4 -4
  17. package/dist/gateway/static/root/assets/{browser-automation-inputs-iyMBJmQX.js → browser-automation-inputs-C5tIrIRL.js} +1 -1
  18. package/dist/gateway/static/root/assets/browser-automations-page-CFCMNfJN.js +3 -0
  19. package/dist/gateway/static/root/assets/browser-settings-page-C__tyPwu.js +3 -0
  20. package/dist/gateway/static/root/assets/{capabilities-CEH1AnXc.js → capabilities-D6RJG4QY.js} +1 -1
  21. package/dist/gateway/static/root/assets/{capabilities-MCKRMZDK.js → capabilities-DGEmBQnF.js} +1 -1
  22. package/dist/gateway/static/root/assets/capabilities-page-B5AZa7ir.js +2 -0
  23. package/dist/gateway/static/root/assets/capabilities-settings-panel-Dskz2_bh.js +8 -0
  24. package/dist/gateway/static/root/assets/{capability-header-actions-BIA0Lwt5.js → capability-header-actions-xzjWZVbg.js} +1 -1
  25. package/dist/gateway/static/root/assets/channels-DRse_dD3.js +1 -0
  26. package/dist/gateway/static/root/assets/chat-terminal-dock-CQF0M4kE.js +36 -0
  27. package/dist/gateway/static/root/assets/{computer-settings-page-DvY3zgyY.js → computer-settings-page-ZfzCTS0N.js} +1 -1
  28. package/dist/gateway/static/root/assets/{connector-service-page-St2-Fj3y.js → connector-service-page-CwAeWVLK.js} +1 -1
  29. package/dist/gateway/static/root/assets/connectors-page-CanakKaj.js +1 -0
  30. package/dist/gateway/static/root/assets/{date-picker-C0-D80ny.js → date-picker-hmJlEAQZ.js} +1 -1
  31. package/dist/gateway/static/root/assets/{dependency-picker-CNd7mwMU.js → dependency-picker-Us_Juz6I.js} +1 -1
  32. package/dist/gateway/static/root/assets/{desktop-pet-C-2wDANn.js → desktop-pet-CvOTI4uw.js} +1 -1
  33. package/dist/gateway/static/root/assets/{desktop-pet-settings-DyhxLrdJ.js → desktop-pet-settings-DYg-Gb8t.js} +1 -1
  34. package/dist/gateway/static/root/assets/device-pairing-wizard-B1FbZ8C1.js +1 -0
  35. package/dist/gateway/static/root/assets/{directory-picker-path-field-CNivVIPT.js → directory-picker-path-field-DZN9EDvM.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-debug-page-CGYO3JPw.js → extension-debug-page-YIibp6Kk.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-page-Dc51ALAg.js → extension-page-DkcGyb28.js} +1 -1
  38. package/dist/gateway/static/root/assets/{extension-provider-BXPILdlw.js → extension-provider-B1PQGTtY.js} +1 -1
  39. package/dist/gateway/static/root/assets/extension-settings-page-C_rJiSKo.js +1 -0
  40. package/dist/gateway/static/root/assets/{gateway-config-swr-Bc2MytsF.js → gateway-config-swr-Dv_A5FMu.js} +1 -1
  41. package/dist/gateway/static/root/assets/{gateway-realtime-BFK-vlME.js → gateway-realtime-DghCGfY_.js} +1 -1
  42. package/dist/gateway/static/root/assets/gateway-realtime-store-CMJVSnvi.js +1 -0
  43. package/dist/gateway/static/root/assets/gateway-settings-CjCWPHNJ.js +1 -0
  44. package/dist/gateway/static/root/assets/{gateway-startup-retry-BDPMttPx.js → gateway-startup-retry-CkTVSESs.js} +1 -1
  45. package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-DAlRGMge.js → highlighted-body-KQOG7T2V-DV2wNqBn.js} +1 -1
  46. package/dist/gateway/static/root/assets/home-page-fAYsd7kG.js +2 -0
  47. package/dist/gateway/static/root/assets/image-generation-api-B98iXt6A.js +1 -0
  48. package/dist/gateway/static/root/assets/imports-page-DoBCBN8G.js +1 -0
  49. package/dist/gateway/static/root/assets/index-DFgXwLsv.js +260 -0
  50. package/dist/gateway/static/root/assets/index-a6ZvhclR.css +1 -0
  51. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BYYC9Qmw.js → keyboard-shortcuts-settings-DXVu4lqV.js} +1 -1
  52. package/dist/gateway/static/root/assets/local-app-workbench-page-B3fz6uRi.js +1 -0
  53. package/dist/gateway/static/root/assets/{local-apps-page-BU8pUsVM.js → local-apps-page-BC6xhmUh.js} +1 -1
  54. package/dist/gateway/static/root/assets/{local-session-drafts-kFc_MAA9.js → local-session-drafts-DFnZQu9A.js} +1 -1
  55. package/dist/gateway/static/root/assets/{locale-store-Dr43FCty.js → locale-store-BpK9AiDq.js} +1 -1
  56. package/dist/gateway/static/root/assets/logs-page-CSqSFDRU.js +2 -0
  57. package/dist/gateway/static/root/assets/management-settings-gq5L0THs.js +1 -0
  58. package/dist/gateway/static/root/assets/{markdown-view-CdKlPjJM.js → markdown-view-IsYTotu6.js} +18 -18
  59. package/dist/gateway/static/root/assets/{media-plugins-DE9zt88i.js → media-plugins-oSChWbcP.js} +1 -1
  60. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-C_QKwqDN.js +1 -0
  61. package/dist/gateway/static/root/assets/messages-CKTo_sIF.js +3 -0
  62. package/dist/gateway/static/root/assets/models-hub-cache-TjpL7hZ5.js +1 -0
  63. package/dist/gateway/static/root/assets/note-detail-panel-CdpNXre-.js +5 -0
  64. package/dist/gateway/static/root/assets/{notes-api-BHouNL6-.js → notes-api-CBb944yw.js} +1 -1
  65. package/dist/gateway/static/root/assets/notes-page-EGvGw8MN.js +8 -0
  66. package/dist/gateway/static/root/assets/{page-context-capture-button-TQr8NnSc.js → page-context-capture-button-CoWb7BYP.js} +1 -1
  67. package/dist/gateway/static/root/assets/personal-page-DYzbNTyN.js +1 -0
  68. package/dist/gateway/static/root/assets/{product-open-page-BEl6syFp.js → product-open-page-CTyy7H7-.js} +1 -1
  69. package/dist/gateway/static/root/assets/{product-preview-content-BxSHnbqz.js → product-preview-content-D4xqTaEy.js} +1 -1
  70. package/dist/gateway/static/root/assets/project-detail-page-DIVCw0QQ.js +1 -0
  71. package/dist/gateway/static/root/assets/projects-page-B4L9VnBN.js +1 -0
  72. package/dist/gateway/static/root/assets/{registry-api-BD5IgDOA.js → registry-api-Dsa2LvRt.js} +1 -1
  73. package/dist/gateway/static/root/assets/remote-access-hub-B8PvgLVz.js +1 -0
  74. package/dist/gateway/static/root/assets/{runtime-tools-api-CjTRoQWT.js → runtime-tools-api-C2Uw89eY.js} +1 -1
  75. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bqnp3tyt.js +1 -0
  76. package/dist/gateway/static/root/assets/scenes-page-D50g4GM2.js +2 -0
  77. package/dist/gateway/static/root/assets/{schema-form-ByG-R6N2.js → schema-form-h_RCNfiO.js} +1 -1
  78. package/dist/gateway/static/root/assets/{send-session-input-UAVStisp.js → send-session-input-DypbVTT7.js} +1 -1
  79. package/dist/gateway/static/root/assets/{session-api-DvgEiNRS.js → session-api-ga-SUOq_.js} +1 -1
  80. package/dist/gateway/static/root/assets/{session-manager-BOb1tC_Z.js → session-manager-C_OiKblh.js} +8 -8
  81. package/dist/gateway/static/root/assets/sessions-page-BsqDIbIr.js +1 -0
  82. package/dist/gateway/static/root/assets/settings-advanced-gate-D3zJAW4p.js +1 -0
  83. package/dist/gateway/static/root/assets/{settings-page-C1e9m23j.js → settings-page-DPCgrICd.js} +1 -1
  84. package/dist/gateway/static/root/assets/setup-status-panel-jjSYJpDd.js +1 -0
  85. package/dist/gateway/static/root/assets/{share-link-dialog-kE_6v5Dp.js → share-link-dialog-BGicglAS.js} +1 -1
  86. package/dist/gateway/static/root/assets/{share-preview-page-BT-_yR1h.js → share-preview-page-BORe9rLB.js} +1 -1
  87. package/dist/gateway/static/root/assets/{shares-api-Dg_SqHQE.js → shares-api-Dbx3z6-1.js} +1 -1
  88. package/dist/gateway/static/root/assets/shares-settings-C13FgfWk.js +1 -0
  89. package/dist/gateway/static/root/assets/{skill-api-BslUYMnX.js → skill-api-Cq6O1DZK.js} +1 -1
  90. package/dist/gateway/static/root/assets/{skill-reload-api-BQ2rTOP1.js → skill-reload-api-Cq7QDjMA.js} +1 -1
  91. package/dist/gateway/static/root/assets/skills-page-BM1ShEjx.js +2 -0
  92. package/dist/gateway/static/root/assets/{system-settings-panel-GpbPfWwo.js → system-settings-panel-BNCGFO1e.js} +1 -1
  93. package/dist/gateway/static/root/assets/task-detail-page-4VG82wcF.js +2 -0
  94. package/dist/gateway/static/root/assets/{task-expandable-content-DJrrEBB4.js → task-expandable-content-DAZGz5YC.js} +1 -1
  95. package/dist/gateway/static/root/assets/{theme-store-BKpYnggg.js → theme-store-Db7hDESt.js} +1 -1
  96. package/dist/gateway/static/root/assets/{tracing-settings-page-D71w7dwV.js → tracing-settings-page-C6p2Mu92.js} +1 -1
  97. package/dist/gateway/static/root/assets/{tunnel-api-BV46CvS8.js → tunnel-api-Dw15EJp0.js} +1 -1
  98. package/dist/gateway/static/root/assets/usage-page-DDrIqgGe.js +1 -0
  99. package/dist/gateway/static/root/assets/{use-autosave-CzyqRffr.js → use-autosave-DDjIdW4U.js} +1 -1
  100. package/dist/gateway/static/root/assets/{use-composer-attachments-Dviq-1f6.js → use-composer-attachments-DNl7O3Vb.js} +1 -1
  101. package/dist/gateway/static/root/assets/{use-file-preview-expanded-D5Kk7Hon.js → use-file-preview-expanded-DMHehhwG.js} +2 -2
  102. package/dist/gateway/static/root/assets/user-model-page-CaS9dOIr.js +2 -0
  103. package/dist/gateway/static/root/assets/{voice-api-key-field-DWtbmacd.js → voice-api-key-field-ByAxHE4P.js} +1 -1
  104. package/dist/gateway/static/root/assets/{voice-config-api-DnIjZm_9.js → voice-config-api-Dl39b27p.js} +1 -1
  105. package/dist/gateway/static/root/assets/voice-transcribe-api-CVaU83Jc.js +1 -0
  106. package/dist/gateway/static/root/assets/{work-discovery-overlay-ChEG71hz.js → work-discovery-overlay-BvVvPA1T.js} +1 -1
  107. package/dist/gateway/static/root/assets/workflow-run-setup-panel-BcFm9QcC.js +3 -0
  108. package/dist/gateway/static/root/assets/workflows-page-DMec_XZB.js +6 -0
  109. package/dist/gateway/static/root/assets/{workspace-api-CZDvu7uA.js → workspace-api-BpfKsrtP.js} +2 -2
  110. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-CbUgg1SK.js → xopc-cloud-account-card-CU5lzzE9.js} +1 -1
  111. package/dist/gateway/static/root/index.html +28 -35
  112. package/dist/package.js +1 -1
  113. package/dist/packages/gateway-contract/src/discussions.js +3 -2
  114. package/dist/packages/gateway-contract/src/index.js +4 -0
  115. package/dist/packages/gateway-contract/src/provider-setup.js +6 -0
  116. package/dist/packages/gateway-contract/src/recording-outcome.js +6 -0
  117. package/dist/packages/image-providers/src/catalog.js +10 -0
  118. package/dist/packages/image-providers/src/execute.js +5 -1
  119. package/dist/packages/image-providers/src/validation.js +19 -1
  120. package/dist/src/agent/agent-manager.d.ts +1 -0
  121. package/dist/src/agent/agent-manager.js +4 -1
  122. package/dist/src/agent/background-review/run-background-review.d.ts +0 -1
  123. package/dist/src/agent/background-review/run-background-review.js +10 -2
  124. package/dist/src/agent/context/execution-scope.js +1 -1
  125. package/dist/src/agent/embedded/execution-tool-policy.d.ts +2 -0
  126. package/dist/src/agent/embedded/execution-tool-policy.js +8 -3
  127. package/dist/src/agent/embedded/run-for-session.js +26 -3
  128. package/dist/src/agent/embedded/run-turn.js +14 -1
  129. package/dist/src/agent/embedded/session-runner.js +1 -1
  130. package/dist/src/agent/embedded/xopc-stream-bridge.js +3 -0
  131. package/dist/src/agent/image/generation/runtime.js +12 -14
  132. package/dist/src/agent/image/understanding/runtime.js +5 -0
  133. package/dist/src/agent/inbound/inbound-loop.d.ts +1 -15
  134. package/dist/src/agent/inbound/inbound-loop.js +5 -0
  135. package/dist/src/agent/mcp/connection-errors.d.ts +3 -0
  136. package/dist/src/agent/mcp/connection-errors.js +32 -0
  137. package/dist/src/agent/mcp/connection-setup.d.ts +2 -0
  138. package/dist/src/agent/mcp/connection-setup.js +38 -18
  139. package/dist/src/agent/memory/compaction.js +5 -1
  140. package/dist/src/agent/memory/idle-compaction-scheduler.js +3 -1
  141. package/dist/src/agent/models/manager.d.ts +1 -0
  142. package/dist/src/agent/models/manager.js +4 -2
  143. package/dist/src/agent/orchestration/agent-orchestrator.d.ts +1 -6
  144. package/dist/src/agent/orchestration/agent-orchestrator.js +5 -0
  145. package/dist/src/agent/service/process-direct-one-shot.js +5 -0
  146. package/dist/src/agent/service/process-direct-streaming.d.ts +1 -0
  147. package/dist/src/agent/service/process-direct-streaming.js +17 -1
  148. package/dist/src/agent/tools/factory.js +14 -12
  149. package/dist/src/agent/tools/image-generate-tool.js +5 -1
  150. package/dist/src/agent/tools/personal-read-tool.js +4 -0
  151. package/dist/src/agent/tools/task-collaboration-tool.js +1 -1
  152. package/dist/src/agent-config/resolver.js +5 -0
  153. package/dist/src/agent-config/schema.d.ts +26 -6
  154. package/dist/src/agent-config/schema.js +2 -0
  155. package/dist/src/ai-assist/text-assist.js +5 -16
  156. package/dist/src/automations/service/action-executor.js +3 -1
  157. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  158. package/dist/src/config/agent-model-intents.js +4 -1
  159. package/dist/src/config/schema.d.ts +11 -5
  160. package/dist/src/config/schema.js +11 -3
  161. package/dist/src/discussions/analyzer.d.ts +2 -0
  162. package/dist/src/discussions/analyzer.js +38 -9
  163. package/dist/src/discussions/audio-clip.d.ts +3 -0
  164. package/dist/src/discussions/audio-clip.js +72 -0
  165. package/dist/src/discussions/live-worker.js +3 -1
  166. package/dist/src/discussions/long-review.d.ts +17 -0
  167. package/dist/src/discussions/long-review.js +278 -0
  168. package/dist/src/discussions/media-timeline.d.ts +21 -0
  169. package/dist/src/discussions/media-timeline.js +134 -0
  170. package/dist/src/discussions/organizer-worker.d.ts +4 -1
  171. package/dist/src/discussions/organizer-worker.js +17 -12
  172. package/dist/src/discussions/organizer.js +2 -0
  173. package/dist/src/discussions/processing.d.ts +43 -0
  174. package/dist/src/discussions/processing.js +125 -0
  175. package/dist/src/discussions/recording.js +202 -42
  176. package/dist/src/discussions/recordingJobs.js +2 -0
  177. package/dist/src/discussions/repository.js +4 -2
  178. package/dist/src/discussions/review.d.ts +8 -0
  179. package/dist/src/discussions/review.js +183 -0
  180. package/dist/src/discussions/sealer.d.ts +7 -1
  181. package/dist/src/discussions/sealer.js +163 -87
  182. package/dist/src/discussions/service.d.ts +7 -1
  183. package/dist/src/discussions/service.js +51 -15
  184. package/dist/src/discussions/types.d.ts +2 -1
  185. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  186. package/dist/src/gateway/global-defaults-admin.d.ts +3 -1
  187. package/dist/src/gateway/global-defaults-admin.js +14 -2
  188. package/dist/src/gateway/hono/lib/config-payload.d.ts +11 -2
  189. package/dist/src/gateway/hono/lib/config-payload.js +2 -0
  190. package/dist/src/gateway/hono/lib/voice-settings-revisions.d.ts +5 -0
  191. package/dist/src/gateway/hono/lib/voice-settings-revisions.js +24 -0
  192. package/dist/src/gateway/hono/routes/commands-skills.js +15 -0
  193. package/dist/src/gateway/hono/routes/config-patch/misc.js +8 -1
  194. package/dist/src/gateway/hono/routes/config.js +12 -0
  195. package/dist/src/gateway/hono/routes/discussions.js +63 -1
  196. package/dist/src/gateway/hono/routes/global-defaults.js +8 -1
  197. package/dist/src/gateway/hono/routes/models.js +12 -4
  198. package/dist/src/gateway/hono/routes/provider-setup.d.ts +3 -0
  199. package/dist/src/gateway/hono/routes/provider-setup.js +106 -0
  200. package/dist/src/gateway/hono/routes/status.js +2 -0
  201. package/dist/src/gateway/hono/routes/voice.js +23 -10
  202. package/dist/src/gateway/provider-model-setup.d.ts +4 -0
  203. package/dist/src/gateway/provider-model-setup.js +56 -0
  204. package/dist/src/gateway/service/config-coordinator.d.ts +2 -2
  205. package/dist/src/gateway/service.js +2 -0
  206. package/dist/src/media-shared/http/provider-http.d.ts +0 -6
  207. package/dist/src/media-shared/http/provider-http.js +5 -4
  208. package/dist/src/media-understanding/runner.d.ts +0 -28
  209. package/dist/src/media-understanding/runner.js +4 -0
  210. package/dist/src/platform/client.d.ts +1 -1
  211. package/dist/src/platform/contracts.d.ts +1 -1
  212. package/dist/src/providers/env-keys.js +3 -0
  213. package/dist/src/providers/extension-stream-bridge.js +3 -0
  214. package/dist/src/providers/index.js +15 -0
  215. package/dist/src/providers/model-call.d.ts +5 -2
  216. package/dist/src/providers/model-call.js +13 -2
  217. package/dist/src/providers/model-reference-auditor.js +1 -0
  218. package/dist/src/providers/model-response.js +1 -1
  219. package/dist/src/providers/model-usage.d.ts +15 -0
  220. package/dist/src/providers/model-usage.js +50 -0
  221. package/dist/src/providers/presentation.js +8 -0
  222. package/dist/src/providers/setup/engine.d.ts +37 -0
  223. package/dist/src/providers/setup/engine.js +177 -0
  224. package/dist/src/providers/setup/profiles.d.ts +4 -0
  225. package/dist/src/providers/setup/profiles.js +78 -0
  226. package/dist/src/providers/setup/voice.d.ts +23 -0
  227. package/dist/src/providers/setup/voice.js +234 -0
  228. package/dist/src/scenes/agentExecutor.d.ts +1 -0
  229. package/dist/src/scenes/agentExecutor.js +5 -0
  230. package/dist/src/storage/sqlite/migrations/253_discussion_processing_recovery.sql +20 -0
  231. package/dist/src/storage/sqlite/migrations/254_discussion_annotations.sql +17 -0
  232. package/dist/src/storage/sqlite/migrations/255_discussion_chapter_progress.sql +10 -0
  233. package/dist/src/storage/sqlite/migrations/256_task_main_update_retries.sql +21 -0
  234. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  235. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  236. package/dist/src/storage/sqlite/schema.js +1 -1
  237. package/dist/src/tasks/task-collaboration-repository.d.ts +2 -0
  238. package/dist/src/tasks/task-collaboration-repository.js +7 -1
  239. package/dist/src/tasks/task-main-update-delivery.js +11 -4
  240. package/dist/src/tasks/task-main-update-input.js +2 -1
  241. package/dist/src/tasks/task-main-update-retry.d.ts +5 -0
  242. package/dist/src/tasks/task-main-update-retry.js +15 -0
  243. package/dist/src/usage/recorder.js +2 -1
  244. package/dist/src/usage/scenario-registry.js +128 -123
  245. package/dist/src/voice/dashscope/streaming-stt-session.js +3 -0
  246. package/dist/src/voice/dashscope/streaming-tts-stream.js +3 -0
  247. package/dist/src/voice/dictation.d.ts +12 -0
  248. package/dist/src/voice/dictation.js +22 -0
  249. package/dist/src/voice/metadata/builtin.js +54 -0
  250. package/dist/src/voice/platform-streams.js +3 -0
  251. package/dist/src/voice/realtime/omniEngine.js +3 -0
  252. package/dist/src/voice/realtime/omniRoute.js +3 -2
  253. package/dist/src/voice/realtime/runtime.js +4 -2
  254. package/dist/src/voice/stt/factory.js +9 -3
  255. package/dist/src/voice/stt/providers/bailian-plan-transcription.d.ts +2 -0
  256. package/dist/src/voice/stt/providers/bailian-plan-transcription.js +32 -0
  257. package/dist/src/voice/stt/providers/index.d.ts +1 -0
  258. package/dist/src/voice/stt/providers/index.js +2 -1
  259. package/dist/src/voice/token-plan.d.ts +8 -0
  260. package/dist/src/voice/token-plan.js +11 -0
  261. package/dist/src/voice/tts/factory.js +4 -1
  262. package/dist/src/voice/tts/providers/bailian-plan-speech.d.ts +2 -0
  263. package/dist/src/voice/tts/providers/bailian-plan-speech.js +84 -0
  264. package/dist/src/voice/tts/providers/index.d.ts +1 -0
  265. package/dist/src/voice/tts/providers/index.js +2 -1
  266. package/dist/src/voice/tts/speak-core.js +10 -1
  267. package/package.json +2 -2
  268. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Ds0Ue2FB.js +0 -1
  269. package/dist/gateway/static/root/assets/agents-BLRM4o-U.js +0 -77
  270. package/dist/gateway/static/root/assets/app-management-settings-panel-Dmy828Pe.js +0 -1
  271. package/dist/gateway/static/root/assets/automations-workspace-UcCneEs3.js +0 -6
  272. package/dist/gateway/static/root/assets/bot-DjLkhyZL.js +0 -1
  273. package/dist/gateway/static/root/assets/browser-automations-page-BjvQnYfO.js +0 -3
  274. package/dist/gateway/static/root/assets/browser-settings-page-D5ZghI28.js +0 -3
  275. package/dist/gateway/static/root/assets/capabilities-page-MC8qIrXo.js +0 -2
  276. package/dist/gateway/static/root/assets/capabilities-settings-panel-Blz3hEzp.js +0 -8
  277. package/dist/gateway/static/root/assets/channels-DSg_iCVC.js +0 -1
  278. package/dist/gateway/static/root/assets/chat-terminal-dock-C97SJEwd.js +0 -36
  279. package/dist/gateway/static/root/assets/circle-pause-CN9jYH2s.js +0 -1
  280. package/dist/gateway/static/root/assets/clock-3-DnrAnuyZ.js +0 -1
  281. package/dist/gateway/static/root/assets/connectors-page-DXk-GAsd.js +0 -1
  282. package/dist/gateway/static/root/assets/device-pairing-wizard-BeSuq__I.js +0 -1
  283. package/dist/gateway/static/root/assets/extension-settings-page-jYu6qpY2.js +0 -1
  284. package/dist/gateway/static/root/assets/fallback-models-CoyzvDo7.js +0 -1
  285. package/dist/gateway/static/root/assets/gateway-realtime-store-C3vH-Iup.js +0 -1
  286. package/dist/gateway/static/root/assets/gateway-settings-JlT1dlSj.js +0 -1
  287. package/dist/gateway/static/root/assets/git-branch-Dh9uxTot.js +0 -1
  288. package/dist/gateway/static/root/assets/home-page-DOVl8s-1.js +0 -2
  289. package/dist/gateway/static/root/assets/image-generation-api-BZBiYDmV.js +0 -1
  290. package/dist/gateway/static/root/assets/imports-page-DgdBTp_0.js +0 -1
  291. package/dist/gateway/static/root/assets/index-CmC8JkSM.js +0 -260
  292. package/dist/gateway/static/root/assets/index-Dgzc0oBu.css +0 -1
  293. package/dist/gateway/static/root/assets/local-app-workbench-page-BKZfn-MS.js +0 -1
  294. package/dist/gateway/static/root/assets/logs-page-BSepiACn.js +0 -2
  295. package/dist/gateway/static/root/assets/management-settings-dE_ykPNY.js +0 -1
  296. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-65SE6j-_.js +0 -1
  297. package/dist/gateway/static/root/assets/message-square-fVE7Ghj1.js +0 -1
  298. package/dist/gateway/static/root/assets/messages-DlTNQI92.js +0 -3
  299. package/dist/gateway/static/root/assets/models-hub-cache-C7FAsEe_.js +0 -1
  300. package/dist/gateway/static/root/assets/note-detail-panel-D9oqhdyk.js +0 -5
  301. package/dist/gateway/static/root/assets/notes-page-Bd4_7ph8.js +0 -8
  302. package/dist/gateway/static/root/assets/pause-DuPxgSxk.js +0 -1
  303. package/dist/gateway/static/root/assets/personal-page-BvWzq4Wp.js +0 -1
  304. package/dist/gateway/static/root/assets/play-kxZvpBg8.js +0 -1
  305. package/dist/gateway/static/root/assets/project-detail-page-D-qkIXVT.js +0 -1
  306. package/dist/gateway/static/root/assets/projects-page-BQtw1Dfn.js +0 -1
  307. package/dist/gateway/static/root/assets/remote-access-hub-CYFNz0Jc.js +0 -1
  308. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Qq_NyYx_.js +0 -1
  309. package/dist/gateway/static/root/assets/scenes-page-hGr-ppYk.js +0 -2
  310. package/dist/gateway/static/root/assets/sessions-page-CpX1Rluw.js +0 -1
  311. package/dist/gateway/static/root/assets/settings-advanced-gate-D2s_MlxR.js +0 -1
  312. package/dist/gateway/static/root/assets/settings-loading-skeleton-BTqvr_Fw.js +0 -1
  313. package/dist/gateway/static/root/assets/setup-status-panel-BiHRYDHq.js +0 -1
  314. package/dist/gateway/static/root/assets/shares-settings-DfcAu08T.js +0 -1
  315. package/dist/gateway/static/root/assets/skills-page-CvKc5nBN.js +0 -2
  316. package/dist/gateway/static/root/assets/sparkles-DHlfQFAF.js +0 -1
  317. package/dist/gateway/static/root/assets/task-detail-page-5B5ZVAu0.js +0 -2
  318. package/dist/gateway/static/root/assets/usage-page-rMuwNpJi.js +0 -1
  319. package/dist/gateway/static/root/assets/user-model-page-Dhqw3v_u.js +0 -2
  320. package/dist/gateway/static/root/assets/workflow-run-setup-panel-pdiRKLxP.js +0 -3
  321. package/dist/gateway/static/root/assets/workflows-page-D9LMxINt.js +0 -6
@@ -59,7 +59,7 @@ function applySingleMigration(db, migration, discardOldScenes = false) {
59
59
  function applyPendingMigrations(db, options = {}) {
60
60
  db.function("xopc_memory_search_text", { deterministic: true }, (value) => memorySearchText(String(value ?? "")));
61
61
  db.function("xopc_operation_id", () => currentOperationId() ?? null);
62
- const targetVersion = options.targetVersion ?? 252;
62
+ const targetVersion = options.targetVersion ?? 256;
63
63
  let currentVersion = readSchemaVersion(db);
64
64
  if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
65
65
  if (!options.migrationsDir && currentVersion < 165) throw new DatabaseSchemaTooOldError(currentVersion, 165);
@@ -97,7 +97,7 @@ function applyPendingMigrations(db, options = {}) {
97
97
  }
98
98
  /** Inspect schema version without mutating the database. */
99
99
  function inspectSchemaMigrationStatus(db, options = {}) {
100
- const appVersion = options.targetVersion ?? 252;
100
+ const appVersion = options.targetVersion ?? 256;
101
101
  const dbVersion = readSchemaVersion(db);
102
102
  if (dbVersion > appVersion) return {
103
103
  dbVersion,
@@ -140,7 +140,7 @@ var init_runner = __esmMin((() => {
140
140
  init_errors();
141
141
  log = createLogger("Sqlite:Migrations");
142
142
  XOPC_DB_BASELINE_SCHEMA_VERSION = 165;
143
- XOPC_DB_SCHEMA_VERSION = 252;
143
+ XOPC_DB_SCHEMA_VERSION = 256;
144
144
  }));
145
145
  //#endregion
146
146
  init_runner();
@@ -28,7 +28,7 @@ function ensureXopcDatabaseSchema(db, options = {}) {
28
28
  currentVersion = 165;
29
29
  }
30
30
  applyPendingMigrations(db, {
31
- targetVersion: 252,
31
+ targetVersion: 256,
32
32
  databasePath: fresh ? void 0 : options.databasePath
33
33
  });
34
34
  }
@@ -41,12 +41,14 @@ export declare class TaskCollaborationRepository {
41
41
  conversationId: string;
42
42
  decision?: 'notify' | 'silent';
43
43
  decisionReason?: string;
44
+ failureCount: number;
44
45
  }>;
45
46
  decideMainUpdate(entryId: string, decision: 'notify' | 'silent', reason: string): void;
46
47
  hasNewerMainUpdate(taskId: string, sequence: number): boolean;
47
48
  hasSubmittedMainUpdate(entryId: string): boolean;
48
49
  markMainUpdateDelivered(entryId: string): void;
49
50
  deferMainUpdate(entryId: string, delayMs?: number): void;
51
+ failMainUpdate(entryId: string, error: string, delayMs: number, terminal: boolean): void;
50
52
  markDelivered(entryId: string, conversationId: string, assignmentEpoch: number): void;
51
53
  canConfirm(entryId: string, conversationId: string, assignmentEpoch: number): boolean;
52
54
  markConfirmed(entryId: string): void;
@@ -95,7 +95,7 @@ var TaskCollaborationRepository = class {
95
95
  }
96
96
  pendingMainUpdates(limit = 20) {
97
97
  return getSqliteDatabase().prepare(`SELECT entry.*, main.conversation_id,
98
- main.decision, main.decision_reason,
98
+ main.decision, main.decision_reason, main.failure_count,
99
99
  delivery.status AS delivery_status
100
100
  FROM task_collaboration_entries entry
101
101
  LEFT JOIN task_collaboration_deliveries delivery ON delivery.entry_id = entry.entry_id
@@ -106,6 +106,7 @@ var TaskCollaborationRepository = class {
106
106
  main.updated_at, entry.sequence, entry.entry_id LIMIT ?`).all(Date.now(), Math.max(1, Math.min(100, Math.floor(limit)))).map((row) => ({
107
107
  entry: fromRow(row),
108
108
  conversationId: row.conversation_id,
109
+ failureCount: row.failure_count,
109
110
  ...row.decision ? { decision: row.decision } : {},
110
111
  ...row.decision_reason ? { decisionReason: row.decision_reason } : {}
111
112
  }));
@@ -134,6 +135,11 @@ var TaskCollaborationRepository = class {
134
135
  deferMainUpdate(entryId, delayMs = 1e3) {
135
136
  getSqliteDatabase().prepare(`UPDATE task_main_update_deliveries SET updated_at = ?
136
137
  WHERE entry_id = ? AND status = 'pending'`).run(Date.now() + delayMs, entryId);
138
+ }
139
+ failMainUpdate(entryId, error, delayMs, terminal) {
140
+ getSqliteDatabase().prepare(`UPDATE task_main_update_deliveries
141
+ SET failure_count = failure_count + 1, last_error = ?, status = ?, updated_at = ?
142
+ WHERE entry_id = ? AND status = 'pending'`).run(error.slice(0, 1e3), terminal ? "failed" : "pending", Date.now() + delayMs, entryId);
137
143
  }
138
144
  markDelivered(entryId, conversationId, assignmentEpoch) {
139
145
  getSqliteDatabase().prepare(`UPDATE task_collaboration_deliveries
@@ -5,6 +5,7 @@ import { init_request_repository, personalRequestForTask } from "../personal-age
5
5
  import { TaskAllocationRepository } from "./task-allocation-repository.js";
6
6
  import { TaskCollaborationRepository } from "./task-collaboration-repository.js";
7
7
  import { TaskResultDeliveryRepository } from "./task-result-delivery-repository.js";
8
+ import { TaskMainUpdateExhaustedError, taskMainUpdateRetryDelay } from "./task-main-update-retry.js";
8
9
  //#region src/tasks/task-main-update-delivery.ts
9
10
  init_logger();
10
11
  init_task_run_repository();
@@ -14,7 +15,7 @@ var TaskMainUpdateDelivery = class {
14
15
  #entries = new TaskCollaborationRepository();
15
16
  async drain(input, limit = 20) {
16
17
  let delivered = 0;
17
- for (const { entry, conversationId, decision, decisionReason } of this.#entries.pendingMainUpdates(limit)) {
18
+ for (const { entry, conversationId, decision, decisionReason, failureCount } of this.#entries.pendingMainUpdates(limit)) {
18
19
  const connected = personalRequestForTask(entry.taskId);
19
20
  if (entry.kind === "result" && connected) {
20
21
  this.#entries.markMainUpdateDelivered(entry.id);
@@ -89,13 +90,19 @@ var TaskMainUpdateDelivery = class {
89
90
  delivered += 1;
90
91
  } else this.#entries.deferMainUpdate(entry.id);
91
92
  } catch (error) {
93
+ const failures = failureCount + 1;
94
+ const terminal = error instanceof TaskMainUpdateExhaustedError || failures >= 20;
95
+ const retryDelayMs = terminal ? 0 : taskMainUpdateRetryDelay(error, failures);
96
+ this.#entries.failMainUpdate(entry.id, error instanceof Error ? error.message : String(error), retryDelayMs, terminal);
92
97
  log.warn({
93
98
  err: error,
94
99
  conversationId,
95
100
  taskId: entry.taskId,
96
- entryId: entry.id
97
- }, "Main Agent update delivery failed");
98
- this.#entries.deferMainUpdate(entry.id);
101
+ entryId: entry.id,
102
+ failures,
103
+ terminal,
104
+ retryDelayMs
105
+ }, terminal ? "Main Agent update delivery stopped after retry limit" : "Main Agent update delivery failed; retry deferred");
99
106
  }
100
107
  }
101
108
  return delivered;
@@ -1,3 +1,4 @@
1
+ import { TaskMainUpdateExhaustedError } from "./task-main-update-retry.js";
1
2
  //#region src/tasks/task-main-update-input.ts
2
3
  function selectTaskMainUpdateAttempt(conversationId, baseClientMessageId, findInput) {
3
4
  for (let attempt = 0; attempt < 20; attempt += 1) {
@@ -23,7 +24,7 @@ function selectTaskMainUpdateAttempt(conversationId, baseClientMessageId, findIn
23
24
  async function submitAndConfirmTaskMainUpdate(input, deps) {
24
25
  const attempt = selectTaskMainUpdateAttempt(input.conversationId, input.clientMessageId, deps.findInput);
25
26
  if (attempt.kind === "completed") return true;
26
- if (attempt.kind === "exhausted" || !attempt.clientMessageId) throw new Error("Task update retry limit reached");
27
+ if (attempt.kind === "exhausted" || !attempt.clientMessageId) throw new TaskMainUpdateExhaustedError();
27
28
  if (attempt.kind === "new" && !await deps.submit({
28
29
  ...input,
29
30
  clientMessageId: attempt.clientMessageId
@@ -0,0 +1,5 @@
1
+ export declare const TASK_MAIN_UPDATE_MAX_ATTEMPTS = 20;
2
+ export declare class TaskMainUpdateExhaustedError extends Error {
3
+ constructor();
4
+ }
5
+ export declare function taskMainUpdateRetryDelay(error: unknown, failures: number): number;
@@ -0,0 +1,15 @@
1
+ //#region src/tasks/task-main-update-retry.ts
2
+ const TASK_MAIN_UPDATE_MAX_ATTEMPTS = 20;
3
+ var TaskMainUpdateExhaustedError = class extends Error {
4
+ constructor() {
5
+ super("Task update retry limit reached");
6
+ this.name = "TaskMainUpdateExhaustedError";
7
+ }
8
+ };
9
+ function taskMainUpdateRetryDelay(error, failures) {
10
+ const message = error instanceof Error ? error.message : String(error);
11
+ const rateLimited = /\b429\b|rate[_ -]?limit|platform_token_limit_exceeded/i.test(message);
12
+ return Math.min(rateLimited ? 15 * 6e4 : 6e4, (rateLimited ? 3e4 : 1e3) * 2 ** Math.max(0, failures - 1));
13
+ }
14
+ //#endregion
15
+ export { TASK_MAIN_UPDATE_MAX_ATTEMPTS, TaskMainUpdateExhaustedError, taskMainUpdateRetryDelay };
@@ -1,15 +1,16 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { init_connection, isXopcDatabaseOpen } from "../storage/sqlite/connection.js";
4
+ import { init_scenario_registry, resolveAiUsageScenario } from "./scenario-registry.js";
4
5
  import { startObservation } from "../observability/runtime.js";
5
6
  import { finishAiUsageEvent, insertAiUsageEvent } from "../storage/sqlite/ai-usage-repository.js";
6
7
  import { classifyCostSource, dollarsToMicrousd, pricingSnapshot } from "./cost.js";
7
- import { resolveAiUsageScenario } from "./scenario-registry.js";
8
8
  import { reconcileCloudUsageReceipt, withUsageReceiptContext } from "./cloud-receipts.js";
9
9
  import { randomUUID } from "node:crypto";
10
10
  //#region src/usage/recorder.ts
11
11
  init_connection();
12
12
  init_logger();
13
+ init_scenario_registry();
13
14
  const log = createLogger("AiUsage");
14
15
  function continuesAfterTool(messages) {
15
16
  for (let index = messages.length - 1; index >= 0; index -= 1) {
@@ -1,126 +1,5 @@
1
+ import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
1
2
  //#region src/usage/scenario-registry.ts
2
- const SCENARIOS = {
3
- "images.generate": {
4
- category: "other",
5
- reasonKey: "usage.reason.imageGeneration",
6
- trigger: "agent"
7
- },
8
- "audio.transcribe": {
9
- category: "other",
10
- reasonKey: "usage.reason.audioTranscription",
11
- trigger: "user"
12
- },
13
- "audio.speech": {
14
- category: "other",
15
- reasonKey: "usage.reason.audioSpeech",
16
- trigger: "agent"
17
- },
18
- "agent.answer": {
19
- category: "chat",
20
- reasonKey: "usage.reason.agentAnswer",
21
- trigger: "user"
22
- },
23
- "agent.continue_after_tool": {
24
- category: "tool_loop",
25
- reasonKey: "usage.reason.continueAfterTool",
26
- trigger: "agent"
27
- },
28
- "agent.background_review": {
29
- category: "delegation",
30
- reasonKey: "usage.reason.backgroundReview",
31
- trigger: "agent"
32
- },
33
- "session.compact": {
34
- category: "compaction",
35
- reasonKey: "usage.reason.sessionCompaction",
36
- trigger: "system"
37
- },
38
- "session.generate_title": {
39
- category: "session_title",
40
- reasonKey: "usage.reason.sessionTitle",
41
- trigger: "system"
42
- },
43
- "media.understand_image": {
44
- category: "image_understanding",
45
- reasonKey: "usage.reason.imageUnderstanding",
46
- trigger: "user"
47
- },
48
- "tool.web_extract": {
49
- category: "web_extract",
50
- reasonKey: "usage.reason.webExtract",
51
- trigger: "agent"
52
- },
53
- "tool.session_search_summarize": {
54
- category: "session_search",
55
- reasonKey: "usage.reason.sessionSearch",
56
- trigger: "agent"
57
- },
58
- "note.generate": {
59
- category: "note_generation",
60
- reasonKey: "usage.reason.noteGeneration",
61
- trigger: "user"
62
- },
63
- "automation.generate_draft": {
64
- category: "automation",
65
- reasonKey: "usage.reason.automationDraft",
66
- trigger: "user"
67
- },
68
- "scene.execute": {
69
- category: "scene",
70
- reasonKey: "usage.reason.sceneExecution",
71
- trigger: "scheduled"
72
- },
73
- "task.plan_contract": {
74
- category: "task_planning",
75
- reasonKey: "usage.reason.taskPlanning",
76
- trigger: "agent"
77
- },
78
- "task.judge_result": {
79
- category: "task_judging",
80
- reasonKey: "usage.reason.taskJudging",
81
- trigger: "agent"
82
- },
83
- "voice.summarize_for_tts": {
84
- category: "voice_summary",
85
- reasonKey: "usage.reason.voiceSummary",
86
- trigger: "user"
87
- },
88
- "voice.select": {
89
- category: "voice_summary",
90
- reasonKey: "usage.reason.voiceSelection",
91
- trigger: "user"
92
- },
93
- "home.generate_advice": {
94
- category: "home_intelligence",
95
- reasonKey: "usage.reason.homeAdvice",
96
- trigger: "system"
97
- },
98
- "work_discovery.analyze": {
99
- category: "work_discovery",
100
- reasonKey: "usage.reason.workDiscovery",
101
- trigger: "user"
102
- },
103
- "work_discovery.investigate": {
104
- category: "work_discovery",
105
- reasonKey: "usage.reason.workInvestigation",
106
- trigger: "user"
107
- },
108
- "discussion.analyze": {
109
- category: "discussion_analysis",
110
- reasonKey: "usage.reason.discussionAnalysis",
111
- trigger: "user"
112
- },
113
- "text_assist.generate": {
114
- category: "other",
115
- reasonKey: "usage.reason.textAssist",
116
- trigger: "user"
117
- },
118
- "user_model.interpret": {
119
- category: "other",
120
- reasonKey: "usage.reason.userModelInterpretation",
121
- trigger: "system"
122
- }
123
- };
124
3
  function resolveAiUsageScenario(operation) {
125
4
  return SCENARIOS[operation] ?? {
126
5
  category: "other",
@@ -128,5 +7,131 @@ function resolveAiUsageScenario(operation) {
128
7
  trigger: "system"
129
8
  };
130
9
  }
10
+ var SCENARIOS;
11
+ var init_scenario_registry = __esmMin((() => {
12
+ SCENARIOS = {
13
+ "images.generate": {
14
+ category: "other",
15
+ reasonKey: "usage.reason.imageGeneration",
16
+ trigger: "agent"
17
+ },
18
+ "audio.transcribe": {
19
+ category: "other",
20
+ reasonKey: "usage.reason.audioTranscription",
21
+ trigger: "user"
22
+ },
23
+ "audio.speech": {
24
+ category: "other",
25
+ reasonKey: "usage.reason.audioSpeech",
26
+ trigger: "agent"
27
+ },
28
+ "agent.answer": {
29
+ category: "chat",
30
+ reasonKey: "usage.reason.agentAnswer",
31
+ trigger: "user"
32
+ },
33
+ "agent.continue_after_tool": {
34
+ category: "tool_loop",
35
+ reasonKey: "usage.reason.continueAfterTool",
36
+ trigger: "agent"
37
+ },
38
+ "agent.background_review": {
39
+ category: "delegation",
40
+ reasonKey: "usage.reason.backgroundReview",
41
+ trigger: "agent"
42
+ },
43
+ "session.compact": {
44
+ category: "compaction",
45
+ reasonKey: "usage.reason.sessionCompaction",
46
+ trigger: "system"
47
+ },
48
+ "session.generate_title": {
49
+ category: "session_title",
50
+ reasonKey: "usage.reason.sessionTitle",
51
+ trigger: "system"
52
+ },
53
+ "media.understand_image": {
54
+ category: "image_understanding",
55
+ reasonKey: "usage.reason.imageUnderstanding",
56
+ trigger: "user"
57
+ },
58
+ "tool.web_extract": {
59
+ category: "web_extract",
60
+ reasonKey: "usage.reason.webExtract",
61
+ trigger: "agent"
62
+ },
63
+ "tool.session_search_summarize": {
64
+ category: "session_search",
65
+ reasonKey: "usage.reason.sessionSearch",
66
+ trigger: "agent"
67
+ },
68
+ "note.generate": {
69
+ category: "note_generation",
70
+ reasonKey: "usage.reason.noteGeneration",
71
+ trigger: "user"
72
+ },
73
+ "automation.generate_draft": {
74
+ category: "automation",
75
+ reasonKey: "usage.reason.automationDraft",
76
+ trigger: "user"
77
+ },
78
+ "scene.execute": {
79
+ category: "scene",
80
+ reasonKey: "usage.reason.sceneExecution",
81
+ trigger: "scheduled"
82
+ },
83
+ "task.plan_contract": {
84
+ category: "task_planning",
85
+ reasonKey: "usage.reason.taskPlanning",
86
+ trigger: "agent"
87
+ },
88
+ "task.judge_result": {
89
+ category: "task_judging",
90
+ reasonKey: "usage.reason.taskJudging",
91
+ trigger: "agent"
92
+ },
93
+ "voice.summarize_for_tts": {
94
+ category: "voice_summary",
95
+ reasonKey: "usage.reason.voiceSummary",
96
+ trigger: "user"
97
+ },
98
+ "voice.select": {
99
+ category: "voice_summary",
100
+ reasonKey: "usage.reason.voiceSelection",
101
+ trigger: "user"
102
+ },
103
+ "home.generate_advice": {
104
+ category: "home_intelligence",
105
+ reasonKey: "usage.reason.homeAdvice",
106
+ trigger: "system"
107
+ },
108
+ "work_discovery.analyze": {
109
+ category: "work_discovery",
110
+ reasonKey: "usage.reason.workDiscovery",
111
+ trigger: "user"
112
+ },
113
+ "work_discovery.investigate": {
114
+ category: "work_discovery",
115
+ reasonKey: "usage.reason.workInvestigation",
116
+ trigger: "user"
117
+ },
118
+ "discussion.analyze": {
119
+ category: "discussion_analysis",
120
+ reasonKey: "usage.reason.discussionAnalysis",
121
+ trigger: "user"
122
+ },
123
+ "text_assist.generate": {
124
+ category: "other",
125
+ reasonKey: "usage.reason.textAssist",
126
+ trigger: "user"
127
+ },
128
+ "user_model.interpret": {
129
+ category: "other",
130
+ reasonKey: "usage.reason.userModelInterpretation",
131
+ trigger: "system"
132
+ }
133
+ };
134
+ }));
131
135
  //#endregion
132
- export { resolveAiUsageScenario };
136
+ init_scenario_registry();
137
+ export { init_scenario_registry, resolveAiUsageScenario };
@@ -1,6 +1,8 @@
1
+ import { assertProviderUsage, init_model_usage } from "../../providers/model-usage.js";
1
2
  import { createRequire } from "node:module";
2
3
  import crypto from "node:crypto";
3
4
  //#region src/voice/dashscope/streaming-stt-session.ts
5
+ init_model_usage();
4
6
  const { WebSocket: NodeWebSocket } = createRequire(import.meta.url)("ws");
5
7
  const DEFAULT_REALTIME_URL = "wss://dashscope.aliyuncs.com/api-ws/v1/inference";
6
8
  const MAX_BUFFERED_AUDIO_BYTES = 512 * 1024;
@@ -32,6 +34,7 @@ async function openDashScopeStreamingStt(request) {
32
34
  if (request.signal.aborted) throw request.signal.reason instanceof Error ? request.signal.reason : /* @__PURE__ */ new Error("DashScope realtime STT aborted");
33
35
  if (request.inputFormat.encoding !== "pcm_s16le" || request.inputFormat.channels !== 1) throw new Error("DashScope realtime STT requires mono PCM16 audio");
34
36
  const taskId = crypto.randomUUID();
37
+ assertProviderUsage("alibaba", request.baseUrl);
35
38
  const socket = new NodeWebSocket(realtimeUrl(request.baseUrl), {
36
39
  headers: {
37
40
  Authorization: `Bearer ${request.apiKey}`,
@@ -1,9 +1,11 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { assertProviderUsage, init_model_usage } from "../../providers/model-usage.js";
3
4
  import { createRequire } from "node:module";
4
5
  import crypto from "node:crypto";
5
6
  import { setTimeout as setTimeout$1 } from "node:timers/promises";
6
7
  //#region src/voice/dashscope/streaming-tts-stream.ts
8
+ init_model_usage();
7
9
  init_logger();
8
10
  const { WebSocket } = createRequire(import.meta.url)("ws");
9
11
  const DEFAULT_REALTIME_URL = "wss://dashscope.aliyuncs.com/api-ws/v1/realtime";
@@ -93,6 +95,7 @@ async function openStreamingTtsAttempt(request) {
93
95
  if (!request.apiKey) throw new Error("DashScope TTS API key is unavailable");
94
96
  request.signal.throwIfAborted();
95
97
  const startedAt = Date.now();
98
+ assertProviderUsage("alibaba", request.baseUrl);
96
99
  const socket = new WebSocket(realtimeUrl(request.baseUrl, request.model), {
97
100
  headers: { Authorization: `Bearer ${request.apiKey}` },
98
101
  perMessageDeflate: false
@@ -0,0 +1,12 @@
1
+ import type { Config } from '../config/schema.js';
2
+ /** Select before capture; a failed request must never switch billing services. */
3
+ export declare function resolveDictationRoute(config: Config): {
4
+ mode: "unavailable";
5
+ provider?: undefined;
6
+ } | {
7
+ mode: "streaming";
8
+ provider: string;
9
+ } | {
10
+ mode: "recorded";
11
+ provider: string;
12
+ };
@@ -0,0 +1,22 @@
1
+ import { resolveSTTProviderChain } from "./stt/factory.js";
2
+ import { mergeSttConfigFromAppConfig } from "./stt/config.js";
3
+ import "./stt/index.js";
4
+ import { resolveStreamingStt } from "./realtime/runtime.js";
5
+ //#region src/voice/dictation.ts
6
+ /** Select before capture; a failed request must never switch billing services. */
7
+ function resolveDictationRoute(config) {
8
+ const primary = resolveSTTProviderChain(mergeSttConfigFromAppConfig(config.tools?.media?.audio, config.tools?.media))[0];
9
+ const streaming = config.voice?.realtime?.enabled ? resolveStreamingStt(config) : void 0;
10
+ if (config.voice?.realtime?.enabled && config.voice.realtime.stt && !streaming) return { mode: "unavailable" };
11
+ if (streaming && (config.voice?.realtime?.stt || streaming.route.provider === primary?.id)) return {
12
+ mode: "streaming",
13
+ provider: streaming.route.provider
14
+ };
15
+ if (primary) return {
16
+ mode: "recorded",
17
+ provider: primary.id
18
+ };
19
+ return { mode: "unavailable" };
20
+ }
21
+ //#endregion
22
+ export { resolveDictationRoute };
@@ -457,6 +457,60 @@ const builtinVoiceProviderMetadata = [
457
457
  }
458
458
  }
459
459
  ];
460
+ builtinVoiceProviderMetadata.push({
461
+ id: "qwen-token-plan-cn",
462
+ capability: "tts",
463
+ displayName: "Alibaba Bailian Subscription",
464
+ description: "Subscription speech synthesis using the saved model-service credential.",
465
+ models: [{
466
+ id: "qwen-audio-3.0-tts-plus",
467
+ name: "Qwen Audio 3.0 TTS Plus"
468
+ }],
469
+ voices: [{
470
+ id: "longanhuan_v3.6",
471
+ name: "Long Anhuan"
472
+ }],
473
+ fields: [{
474
+ key: "model",
475
+ label: "Model",
476
+ type: "select",
477
+ options: [{
478
+ id: "qwen-audio-3.0-tts-plus",
479
+ name: "Qwen Audio 3.0 TTS Plus"
480
+ }]
481
+ }, {
482
+ key: "voice",
483
+ label: "Voice",
484
+ type: "string",
485
+ defaultValue: "longanhuan_v3.6"
486
+ }],
487
+ diagnostics: {
488
+ requiresApiKey: false,
489
+ configPath: "messages.tts.providers.qwen-token-plan-cn"
490
+ }
491
+ }, {
492
+ id: "qwen-token-plan-cn",
493
+ capability: "stt",
494
+ displayName: "Alibaba Bailian Subscription",
495
+ description: "Recorded-audio recognition using the saved model-service credential. Streaming dictation is not configured by this adapter.",
496
+ models: [{
497
+ id: "qwen-audio-3.0-asr-flash",
498
+ name: "Qwen Audio 3.0 ASR Flash"
499
+ }],
500
+ fields: [{
501
+ key: "model",
502
+ label: "Model",
503
+ type: "select",
504
+ options: [{
505
+ id: "qwen-audio-3.0-asr-flash",
506
+ name: "Qwen Audio 3.0 ASR Flash"
507
+ }]
508
+ }],
509
+ diagnostics: {
510
+ requiresApiKey: false,
511
+ configPath: "tools.media.audio.providers.qwen-token-plan-cn"
512
+ }
513
+ });
460
514
  for (const metadata of builtinVoiceProviderMetadata) registerVoiceProviderMetadata(metadata);
461
515
  //#endregion
462
516
  export { builtinVoiceProviderMetadata };
@@ -1,5 +1,7 @@
1
+ import { assertProviderUsage, init_model_usage } from "../providers/model-usage.js";
1
2
  import WebSocket from "ws";
2
3
  //#region src/voice/platform-streams.ts
4
+ init_model_usage();
3
5
  const MAX_BUFFERED_BYTES = 512 * 1024;
4
6
  const MAX_ERROR_BODY_BYTES = 16 * 1024;
5
7
  var PlatformVoiceError = class extends Error {
@@ -22,6 +24,7 @@ var PlatformVoiceError = class extends Error {
22
24
  };
23
25
  function connect(url, token, signal, onEvent, onFailure) {
24
26
  signal.throwIfAborted();
27
+ assertProviderUsage("xopc-cloud", String(url));
25
28
  const socket = new WebSocket(url, {
26
29
  headers: { Authorization: `Bearer ${token}` },
27
30
  perMessageDeflate: false,
@@ -1,5 +1,6 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { assertProviderUsage, init_model_usage } from "../../providers/model-usage.js";
3
4
  import { AudioPlaybackWindow } from "./audio-playback-window.js";
4
5
  import { TurnCoordinator } from "./turnPolicy.js";
5
6
  import { PlaybackEchoCandidates } from "./playback-echo.js";
@@ -7,6 +8,7 @@ import { PcmFrameBuffer } from "./pcmFrameBuffer.js";
7
8
  import crypto from "node:crypto";
8
9
  import WebSocket from "ws";
9
10
  //#region src/voice/realtime/omniEngine.ts
11
+ init_model_usage();
10
12
  init_logger();
11
13
  const log = createLogger("Voice:Omni");
12
14
  const MAX_QUEUED_AUDIO_BYTES = 24e3 * 2 * 60;
@@ -289,6 +291,7 @@ function createOmniVoiceEngine(options) {
289
291
  start() {
290
292
  return new Promise((resolve, reject) => {
291
293
  rejectStart = reject;
294
+ assertProviderUsage(options.route.route.provider, options.route.url);
292
295
  socket = new WebSocket(options.route.url, {
293
296
  headers: { Authorization: `Bearer ${options.route.apiKey}` },
294
297
  maxPayload: 1024 * 1024,
@@ -3,6 +3,7 @@ import { init_voice } from "../../../packages/realtime-protocol/src/voice.js";
3
3
  import { init_xopc_cloud_config, resolveXopcModelRouterUrl } from "../../providers/xopc-cloud-config.js";
4
4
  import { getProviderAuthService, init_provider_auth_service } from "../../providers/provider-auth-service.js";
5
5
  import { requirePlatformVoiceModel } from "../platform-catalog.js";
6
+ import { BAILIAN_PLAN_HOST } from "../token-plan.js";
6
7
  //#region src/voice/realtime/omniRoute.ts
7
8
  init_voice();
8
9
  init_provider_auth_service();
@@ -19,11 +20,11 @@ async function resolveOmniRoute(config) {
19
20
  if (!model.voice.voices.some((voice) => voice.id === slice.voice && voiceSupportsMode(voice, "conversation"))) throw new Error("Selected voice is unavailable");
20
21
  }
21
22
  const managed = slice.provider === "xopc-cloud";
22
- const url = new URL(managed ? `${resolveXopcModelRouterUrl(slice.baseUrl)}/audio/conversations/realtime` : slice.baseUrl ?? "wss://dashscope.aliyuncs.com/api-ws/v1/realtime");
23
+ const url = new URL(managed ? `${resolveXopcModelRouterUrl(slice.baseUrl)}/audio/conversations/realtime` : slice.provider === "qwen-token-plan-cn" ? `${BAILIAN_PLAN_HOST.replace("https:", "wss:")}/api-ws/v1/realtime` : slice.baseUrl ?? "wss://dashscope.aliyuncs.com/api-ws/v1/realtime");
23
24
  if (managed && url.protocol === "https:") url.protocol = "wss:";
24
25
  if (url.protocol !== "wss:" || url.username || url.password || url.hash || url.port) throw new Error("Omni requires a secure WebSocket endpoint");
25
26
  if (!managed && (!(new Set(["dashscope.aliyuncs.com", "dashscope-intl.aliyuncs.com"]).has(url.hostname) || /^[a-zA-Z0-9-]+\.(cn-beijing|ap-southeast-1)\.maas\.aliyuncs\.com$/.test(url.hostname)) || url.pathname !== "/api-ws/v1/realtime")) throw new Error("Unsupported DashScope realtime endpoint");
26
- const apiKey = managed ? await getProviderAuthService().resolveApiKey("xopc-cloud") : slice.apiKey ?? config.tools?.media?.audio?.providers?.alibaba?.apiKey ?? await getProviderAuthService().resolveApiKey("dashscope");
27
+ const apiKey = managed || slice.provider === "qwen-token-plan-cn" ? await getProviderAuthService().resolveApiKey(slice.provider) : slice.apiKey ?? config.tools?.media?.audio?.providers?.alibaba?.apiKey ?? await getProviderAuthService().resolveApiKey("dashscope");
27
28
  if (!apiKey) throw new Error("Omni credentials are unavailable");
28
29
  url.search = new URLSearchParams({ model: slice.model }).toString();
29
30
  if (serviceVersion) url.searchParams.set("service_version", String(serviceVersion));