@xopcai/xopc 0.0.389 → 0.0.390

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 (302) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/src/plugin.js +1 -1
  3. package/dist/extensions/telegram/xopc.extension.json +1 -1
  4. package/dist/gateway/static/root/assets/{activity-store-dvik6t7Z.js → activity-store-DGMAYkw8.js} +1 -1
  5. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-bWMd5TDC.js → agent-avatar-dicebear-B4AsZzJR.js} +1 -1
  6. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-9NUY1sO3.js +1 -0
  7. package/dist/gateway/static/root/assets/agent-plugin-dialog-CNc6ntzP.js +1 -0
  8. package/dist/gateway/static/root/assets/agents-QNY9Vkrf.js +77 -0
  9. package/dist/gateway/static/root/assets/{agents-admin-api-BlNGyXpm.js → agents-admin-api-DxdaiFWn.js} +1 -1
  10. package/dist/gateway/static/root/assets/app-management-settings-panel-DHRfLkYD.js +1 -0
  11. package/dist/gateway/static/root/assets/{appearance-settings-CUAdx44v.js → appearance-settings-DtKSapgb.js} +1 -1
  12. package/dist/gateway/static/root/assets/{apps-page-D5zDB6gp.js → apps-page-B9kuRt_z.js} +1 -1
  13. package/dist/gateway/static/root/assets/{archive-plugin-Du6dJNcl.js → archive-plugin-AgySTXp_.js} +1 -1
  14. package/dist/gateway/static/root/assets/{automations-page-BO8Ig5Z4.js → automations-page-D1o7ZtUW.js} +1 -1
  15. package/dist/gateway/static/root/assets/automations-workspace-BJenz0P1.js +6 -0
  16. package/dist/gateway/static/root/assets/{binary-plugins-D7VJjwnr.js → binary-plugins-A1AXOsO6.js} +1 -1
  17. package/dist/gateway/static/root/assets/{block-editor-CaJlWTAn.js → block-editor-DUNLkLKF.js} +3 -3
  18. package/dist/gateway/static/root/assets/{browser-automation-inputs-iyMBJmQX.js → browser-automation-inputs-BvUC6OiW.js} +1 -1
  19. package/dist/gateway/static/root/assets/browser-automations-page-Dq2LlVMh.js +3 -0
  20. package/dist/gateway/static/root/assets/browser-settings-page-BOZ-1g51.js +3 -0
  21. package/dist/gateway/static/root/assets/{capabilities-MCKRMZDK.js → capabilities-BkCutK0V.js} +1 -1
  22. package/dist/gateway/static/root/assets/{capabilities-CEH1AnXc.js → capabilities-D61uSJPy.js} +1 -1
  23. package/dist/gateway/static/root/assets/capabilities-page-BDP6gzlv.js +2 -0
  24. package/dist/gateway/static/root/assets/capabilities-settings-panel-D6PL3Mfl.js +8 -0
  25. package/dist/gateway/static/root/assets/{capability-header-actions-BIA0Lwt5.js → capability-header-actions-D9uGs4Pw.js} +1 -1
  26. package/dist/gateway/static/root/assets/channels-xb7n8rwF.js +1 -0
  27. package/dist/gateway/static/root/assets/chat-terminal-dock-Dgn09YDs.js +36 -0
  28. package/dist/gateway/static/root/assets/{computer-settings-page-DvY3zgyY.js → computer-settings-page-C66P4ifT.js} +1 -1
  29. package/dist/gateway/static/root/assets/{connector-service-page-St2-Fj3y.js → connector-service-page-Dp35XdYf.js} +1 -1
  30. package/dist/gateway/static/root/assets/connectors-page-BHcRxYib.js +1 -0
  31. package/dist/gateway/static/root/assets/{date-picker-C0-D80ny.js → date-picker-CddHY982.js} +1 -1
  32. package/dist/gateway/static/root/assets/{dependency-picker-CNd7mwMU.js → dependency-picker-Ob6BZTqv.js} +1 -1
  33. package/dist/gateway/static/root/assets/{desktop-pet-C-2wDANn.js → desktop-pet-dmwCV-I4.js} +1 -1
  34. package/dist/gateway/static/root/assets/{desktop-pet-settings-DyhxLrdJ.js → desktop-pet-settings-B-TBkZAZ.js} +1 -1
  35. package/dist/gateway/static/root/assets/device-pairing-wizard-SWHwRgG3.js +1 -0
  36. package/dist/gateway/static/root/assets/{directory-picker-path-field-CNivVIPT.js → directory-picker-path-field-6VZa4fT1.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-debug-page-CGYO3JPw.js → extension-debug-page-C0_njMva.js} +1 -1
  38. package/dist/gateway/static/root/assets/{extension-page-Dc51ALAg.js → extension-page-BeBLMFmW.js} +1 -1
  39. package/dist/gateway/static/root/assets/{extension-provider-BXPILdlw.js → extension-provider-DWI0KAKT.js} +1 -1
  40. package/dist/gateway/static/root/assets/extension-settings-page-BiLUwoKx.js +1 -0
  41. package/dist/gateway/static/root/assets/{gateway-config-swr-Bc2MytsF.js → gateway-config-swr-CmYcOqhb.js} +1 -1
  42. package/dist/gateway/static/root/assets/{gateway-realtime-BFK-vlME.js → gateway-realtime-Ci1Jst5g.js} +1 -1
  43. package/dist/gateway/static/root/assets/gateway-realtime-store-BMUiUQMk.js +1 -0
  44. package/dist/gateway/static/root/assets/gateway-settings-CzWT_v09.js +1 -0
  45. package/dist/gateway/static/root/assets/{gateway-startup-retry-BDPMttPx.js → gateway-startup-retry-C-BG5M7H.js} +1 -1
  46. package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-DAlRGMge.js → highlighted-body-KQOG7T2V-CsA7lCVc.js} +1 -1
  47. package/dist/gateway/static/root/assets/home-page-BeXJfxsg.js +2 -0
  48. package/dist/gateway/static/root/assets/image-generation-api-B_DqCwtV.js +1 -0
  49. package/dist/gateway/static/root/assets/imports-page-oAvAF9QS.js +1 -0
  50. package/dist/gateway/static/root/assets/index-W9ls-0Yd.css +1 -0
  51. package/dist/gateway/static/root/assets/index-xTL-vb51.js +260 -0
  52. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BYYC9Qmw.js → keyboard-shortcuts-settings--MjYe-Pb.js} +1 -1
  53. package/dist/gateway/static/root/assets/{local-app-workbench-page-BKZfn-MS.js → local-app-workbench-page-DL33dtd7.js} +1 -1
  54. package/dist/gateway/static/root/assets/{local-apps-page-BU8pUsVM.js → local-apps-page-DOa7mxjB.js} +1 -1
  55. package/dist/gateway/static/root/assets/{local-session-drafts-kFc_MAA9.js → local-session-drafts-DAtLkTPg.js} +1 -1
  56. package/dist/gateway/static/root/assets/{locale-store-Dr43FCty.js → locale-store-DMy9W6IG.js} +1 -1
  57. package/dist/gateway/static/root/assets/logs-page-C-GbTYsM.js +2 -0
  58. package/dist/gateway/static/root/assets/management-settings-C0TzuD3-.js +1 -0
  59. package/dist/gateway/static/root/assets/{markdown-view-CdKlPjJM.js → markdown-view-wyOHdXEg.js} +1 -1
  60. package/dist/gateway/static/root/assets/{media-plugins-DE9zt88i.js → media-plugins-Pb2zr_-L.js} +1 -1
  61. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-BxyGGa4D.js +1 -0
  62. package/dist/gateway/static/root/assets/messages-O0BEUKnx.js +3 -0
  63. package/dist/gateway/static/root/assets/models-hub-cache-DdH1MODX.js +1 -0
  64. package/dist/gateway/static/root/assets/note-detail-panel-BFpEqskQ.js +5 -0
  65. package/dist/gateway/static/root/assets/{notes-api-BHouNL6-.js → notes-api-CYt2pGsm.js} +1 -1
  66. package/dist/gateway/static/root/assets/notes-page-h-qqFJ6Z.js +8 -0
  67. package/dist/gateway/static/root/assets/{page-context-capture-button-TQr8NnSc.js → page-context-capture-button-3uj5EcQC.js} +1 -1
  68. package/dist/gateway/static/root/assets/personal-page-BGyW6cdt.js +1 -0
  69. package/dist/gateway/static/root/assets/{product-open-page-BEl6syFp.js → product-open-page-hI13tPS1.js} +1 -1
  70. package/dist/gateway/static/root/assets/{product-preview-content-BxSHnbqz.js → product-preview-content-lT_in0-Q.js} +1 -1
  71. package/dist/gateway/static/root/assets/project-detail-page-Baj7fQ7N.js +1 -0
  72. package/dist/gateway/static/root/assets/projects-page-D7DyQFU3.js +1 -0
  73. package/dist/gateway/static/root/assets/{registry-api-BD5IgDOA.js → registry-api-CgQrCqL6.js} +1 -1
  74. package/dist/gateway/static/root/assets/remote-access-hub-DU_d93Tm.js +1 -0
  75. package/dist/gateway/static/root/assets/{runtime-tools-api-CjTRoQWT.js → runtime-tools-api-D12qVKeC.js} +1 -1
  76. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-DOSPOfCU.js +1 -0
  77. package/dist/gateway/static/root/assets/scenes-page-swyUIF5A.js +2 -0
  78. package/dist/gateway/static/root/assets/{schema-form-ByG-R6N2.js → schema-form-CwOFgsyh.js} +1 -1
  79. package/dist/gateway/static/root/assets/{send-session-input-UAVStisp.js → send-session-input-nH8Cw0US.js} +1 -1
  80. package/dist/gateway/static/root/assets/{session-api-DvgEiNRS.js → session-api-B9HrwF-c.js} +1 -1
  81. package/dist/gateway/static/root/assets/{session-manager-BOb1tC_Z.js → session-manager-aXqXuqDX.js} +1 -1
  82. package/dist/gateway/static/root/assets/sessions-page-CI_PJmlX.js +1 -0
  83. package/dist/gateway/static/root/assets/settings-advanced-gate-DCVaeBLW.js +1 -0
  84. package/dist/gateway/static/root/assets/{settings-page-C1e9m23j.js → settings-page-BN70wE6R.js} +1 -1
  85. package/dist/gateway/static/root/assets/setup-status-panel-CHzcVRi-.js +1 -0
  86. package/dist/gateway/static/root/assets/{share-link-dialog-kE_6v5Dp.js → share-link-dialog-B1TDyhPt.js} +1 -1
  87. package/dist/gateway/static/root/assets/{share-preview-page-BT-_yR1h.js → share-preview-page-Br-eAZaP.js} +1 -1
  88. package/dist/gateway/static/root/assets/{shares-api-Dg_SqHQE.js → shares-api-Bl1ZBh5S.js} +1 -1
  89. package/dist/gateway/static/root/assets/shares-settings-jgCC_E4Y.js +1 -0
  90. package/dist/gateway/static/root/assets/{skill-api-BslUYMnX.js → skill-api-ClUw3SRC.js} +1 -1
  91. package/dist/gateway/static/root/assets/{skill-reload-api-BQ2rTOP1.js → skill-reload-api--1BfIPzb.js} +1 -1
  92. package/dist/gateway/static/root/assets/skills-page-C9oRZSuL.js +2 -0
  93. package/dist/gateway/static/root/assets/{system-settings-panel-GpbPfWwo.js → system-settings-panel-tWrqu7ai.js} +1 -1
  94. package/dist/gateway/static/root/assets/{task-detail-page-5B5ZVAu0.js → task-detail-page-BYRW7Rrr.js} +2 -2
  95. package/dist/gateway/static/root/assets/{task-expandable-content-DJrrEBB4.js → task-expandable-content-D2t4ahzR.js} +1 -1
  96. package/dist/gateway/static/root/assets/{theme-store-BKpYnggg.js → theme-store-BBLjE0fi.js} +1 -1
  97. package/dist/gateway/static/root/assets/{tracing-settings-page-D71w7dwV.js → tracing-settings-page-5ATxQH5c.js} +1 -1
  98. package/dist/gateway/static/root/assets/{tunnel-api-BV46CvS8.js → tunnel-api-CF1Qh4wU.js} +1 -1
  99. package/dist/gateway/static/root/assets/{usage-page-rMuwNpJi.js → usage-page-CuEHzXil.js} +1 -1
  100. package/dist/gateway/static/root/assets/{use-autosave-CzyqRffr.js → use-autosave-tY3keIbm.js} +1 -1
  101. package/dist/gateway/static/root/assets/{use-composer-attachments-Dviq-1f6.js → use-composer-attachments-CXsocZjt.js} +1 -1
  102. package/dist/gateway/static/root/assets/{use-file-preview-expanded-D5Kk7Hon.js → use-file-preview-expanded-CEsxnDnQ.js} +2 -2
  103. package/dist/gateway/static/root/assets/user-model-page-Dvt5TIZ6.js +2 -0
  104. package/dist/gateway/static/root/assets/{voice-api-key-field-DWtbmacd.js → voice-api-key-field-COTNLUU3.js} +1 -1
  105. package/dist/gateway/static/root/assets/{voice-config-api-DnIjZm_9.js → voice-config-api-DrxBjSja.js} +1 -1
  106. package/dist/gateway/static/root/assets/voice-transcribe-api-B47j0_xA.js +1 -0
  107. package/dist/gateway/static/root/assets/{work-discovery-overlay-ChEG71hz.js → work-discovery-overlay-PByMJrhV.js} +1 -1
  108. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-pdiRKLxP.js → workflow-run-setup-panel-CSUkMo63.js} +2 -2
  109. package/dist/gateway/static/root/assets/{workflows-page-D9LMxINt.js → workflows-page-BUDvFo3R.js} +3 -3
  110. package/dist/gateway/static/root/assets/{workspace-api-CZDvu7uA.js → workspace-api-Bmx1O449.js} +2 -2
  111. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-CbUgg1SK.js → xopc-cloud-account-card-DVsAbvwP.js} +1 -1
  112. package/dist/gateway/static/root/index.html +28 -27
  113. package/dist/package.js +1 -1
  114. package/dist/packages/gateway-contract/src/discussions.js +3 -2
  115. package/dist/packages/gateway-contract/src/index.js +4 -0
  116. package/dist/packages/gateway-contract/src/provider-setup.js +6 -0
  117. package/dist/packages/gateway-contract/src/recording-outcome.js +6 -0
  118. package/dist/packages/image-providers/src/catalog.js +10 -0
  119. package/dist/packages/image-providers/src/execute.js +5 -1
  120. package/dist/packages/image-providers/src/validation.js +19 -1
  121. package/dist/src/agent/background-review/run-background-review.d.ts +0 -1
  122. package/dist/src/agent/background-review/run-background-review.js +10 -2
  123. package/dist/src/agent/embedded/run-for-session.js +26 -3
  124. package/dist/src/agent/embedded/run-turn.js +12 -0
  125. package/dist/src/agent/embedded/xopc-stream-bridge.js +3 -0
  126. package/dist/src/agent/image/generation/runtime.js +12 -14
  127. package/dist/src/agent/image/understanding/runtime.js +5 -0
  128. package/dist/src/agent/inbound/inbound-loop.d.ts +1 -15
  129. package/dist/src/agent/inbound/inbound-loop.js +5 -0
  130. package/dist/src/agent/mcp/connection-errors.d.ts +3 -0
  131. package/dist/src/agent/mcp/connection-errors.js +32 -0
  132. package/dist/src/agent/mcp/connection-setup.d.ts +2 -0
  133. package/dist/src/agent/mcp/connection-setup.js +38 -18
  134. package/dist/src/agent/memory/compaction.js +5 -1
  135. package/dist/src/agent/memory/idle-compaction-scheduler.js +3 -1
  136. package/dist/src/agent/models/manager.d.ts +1 -0
  137. package/dist/src/agent/models/manager.js +4 -2
  138. package/dist/src/agent/orchestration/agent-orchestrator.d.ts +1 -6
  139. package/dist/src/agent/orchestration/agent-orchestrator.js +5 -0
  140. package/dist/src/agent/service/process-direct-one-shot.js +5 -0
  141. package/dist/src/agent/service/process-direct-streaming.d.ts +1 -0
  142. package/dist/src/agent/service/process-direct-streaming.js +17 -1
  143. package/dist/src/agent/tools/image-generate-tool.js +5 -1
  144. package/dist/src/agent-config/resolver.js +5 -0
  145. package/dist/src/agent-config/schema.d.ts +26 -6
  146. package/dist/src/agent-config/schema.js +2 -0
  147. package/dist/src/ai-assist/text-assist.js +5 -16
  148. package/dist/src/automations/service/action-executor.js +3 -1
  149. package/dist/src/channels/index.js +1 -1
  150. package/dist/src/channels/manager.js +1 -1
  151. package/dist/src/cli/commands/channels.js +1 -1
  152. package/dist/src/cli/commands/connectors.js +1 -1
  153. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  154. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  155. package/dist/src/cli/commands/models.js +1 -1
  156. package/dist/src/cli/commands/onboard.js +1 -1
  157. package/dist/src/config/agent-model-intents.js +4 -1
  158. package/dist/src/config/schema.d.ts +11 -5
  159. package/dist/src/config/schema.js +11 -3
  160. package/dist/src/discussions/analyzer.d.ts +2 -0
  161. package/dist/src/discussions/analyzer.js +38 -9
  162. package/dist/src/discussions/audio-clip.d.ts +3 -0
  163. package/dist/src/discussions/audio-clip.js +72 -0
  164. package/dist/src/discussions/live-worker.js +3 -1
  165. package/dist/src/discussions/long-review.d.ts +17 -0
  166. package/dist/src/discussions/long-review.js +278 -0
  167. package/dist/src/discussions/media-timeline.d.ts +21 -0
  168. package/dist/src/discussions/media-timeline.js +134 -0
  169. package/dist/src/discussions/organizer-worker.d.ts +4 -1
  170. package/dist/src/discussions/organizer-worker.js +17 -12
  171. package/dist/src/discussions/organizer.js +2 -0
  172. package/dist/src/discussions/processing.d.ts +43 -0
  173. package/dist/src/discussions/processing.js +125 -0
  174. package/dist/src/discussions/recording.js +202 -42
  175. package/dist/src/discussions/recordingJobs.js +2 -0
  176. package/dist/src/discussions/repository.js +4 -2
  177. package/dist/src/discussions/review.d.ts +8 -0
  178. package/dist/src/discussions/review.js +183 -0
  179. package/dist/src/discussions/sealer.d.ts +7 -1
  180. package/dist/src/discussions/sealer.js +163 -87
  181. package/dist/src/discussions/service.d.ts +7 -1
  182. package/dist/src/discussions/service.js +51 -15
  183. package/dist/src/discussions/types.d.ts +2 -1
  184. package/dist/src/extensions/sdk/index.js +1 -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 +23 -0
  192. package/dist/src/gateway/hono/routes/config-patch/misc.js +8 -1
  193. package/dist/src/gateway/hono/routes/config.js +12 -0
  194. package/dist/src/gateway/hono/routes/discussions.js +63 -1
  195. package/dist/src/gateway/hono/routes/global-defaults.js +8 -1
  196. package/dist/src/gateway/hono/routes/models.js +12 -4
  197. package/dist/src/gateway/hono/routes/provider-setup.d.ts +3 -0
  198. package/dist/src/gateway/hono/routes/provider-setup.js +106 -0
  199. package/dist/src/gateway/hono/routes/status.js +2 -0
  200. package/dist/src/gateway/hono/routes/voice.js +23 -10
  201. package/dist/src/gateway/provider-model-setup.d.ts +4 -0
  202. package/dist/src/gateway/provider-model-setup.js +56 -0
  203. package/dist/src/gateway/service/config-coordinator.d.ts +2 -2
  204. package/dist/src/gateway/service.js +7 -7
  205. package/dist/src/home-intelligence/host.js +2 -2
  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 +94 -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/runner.d.ts +1 -1
  234. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  235. package/dist/src/storage/sqlite/schema.js +1 -1
  236. package/dist/src/usage/recorder.js +2 -1
  237. package/dist/src/usage/scenario-registry.js +128 -123
  238. package/dist/src/voice/dashscope/streaming-stt-session.js +3 -0
  239. package/dist/src/voice/dashscope/streaming-tts-stream.js +3 -0
  240. package/dist/src/voice/dictation.d.ts +12 -0
  241. package/dist/src/voice/dictation.js +22 -0
  242. package/dist/src/voice/metadata/builtin.js +54 -0
  243. package/dist/src/voice/platform-streams.js +3 -0
  244. package/dist/src/voice/realtime/omniEngine.js +3 -0
  245. package/dist/src/voice/realtime/omniRoute.js +3 -2
  246. package/dist/src/voice/realtime/runtime.js +4 -2
  247. package/dist/src/voice/stt/factory.js +9 -3
  248. package/dist/src/voice/stt/providers/bailian-plan-transcription.d.ts +2 -0
  249. package/dist/src/voice/stt/providers/bailian-plan-transcription.js +32 -0
  250. package/dist/src/voice/stt/providers/index.d.ts +1 -0
  251. package/dist/src/voice/stt/providers/index.js +2 -1
  252. package/dist/src/voice/token-plan.d.ts +8 -0
  253. package/dist/src/voice/token-plan.js +11 -0
  254. package/dist/src/voice/tts/factory.js +4 -1
  255. package/dist/src/voice/tts/providers/bailian-plan-speech.d.ts +2 -0
  256. package/dist/src/voice/tts/providers/bailian-plan-speech.js +84 -0
  257. package/dist/src/voice/tts/providers/index.d.ts +1 -0
  258. package/dist/src/voice/tts/providers/index.js +2 -1
  259. package/dist/src/voice/tts/speak-core.js +10 -1
  260. package/package.json +4 -4
  261. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Ds0Ue2FB.js +0 -1
  262. package/dist/gateway/static/root/assets/agent-plugin-dialog-UunIxc1q.js +0 -1
  263. package/dist/gateway/static/root/assets/agents-BLRM4o-U.js +0 -77
  264. package/dist/gateway/static/root/assets/app-management-settings-panel-Dmy828Pe.js +0 -1
  265. package/dist/gateway/static/root/assets/automations-workspace-UcCneEs3.js +0 -6
  266. package/dist/gateway/static/root/assets/browser-automations-page-BjvQnYfO.js +0 -3
  267. package/dist/gateway/static/root/assets/browser-settings-page-D5ZghI28.js +0 -3
  268. package/dist/gateway/static/root/assets/capabilities-page-MC8qIrXo.js +0 -2
  269. package/dist/gateway/static/root/assets/capabilities-settings-panel-Blz3hEzp.js +0 -8
  270. package/dist/gateway/static/root/assets/channels-DSg_iCVC.js +0 -1
  271. package/dist/gateway/static/root/assets/chat-terminal-dock-C97SJEwd.js +0 -36
  272. package/dist/gateway/static/root/assets/connectors-page-DXk-GAsd.js +0 -1
  273. package/dist/gateway/static/root/assets/device-pairing-wizard-BeSuq__I.js +0 -1
  274. package/dist/gateway/static/root/assets/extension-settings-page-jYu6qpY2.js +0 -1
  275. package/dist/gateway/static/root/assets/fallback-models-CoyzvDo7.js +0 -1
  276. package/dist/gateway/static/root/assets/gateway-realtime-store-C3vH-Iup.js +0 -1
  277. package/dist/gateway/static/root/assets/gateway-settings-JlT1dlSj.js +0 -1
  278. package/dist/gateway/static/root/assets/home-page-DOVl8s-1.js +0 -2
  279. package/dist/gateway/static/root/assets/image-generation-api-BZBiYDmV.js +0 -1
  280. package/dist/gateway/static/root/assets/imports-page-DgdBTp_0.js +0 -1
  281. package/dist/gateway/static/root/assets/index-CmC8JkSM.js +0 -260
  282. package/dist/gateway/static/root/assets/index-Dgzc0oBu.css +0 -1
  283. package/dist/gateway/static/root/assets/logs-page-BSepiACn.js +0 -2
  284. package/dist/gateway/static/root/assets/management-settings-dE_ykPNY.js +0 -1
  285. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-65SE6j-_.js +0 -1
  286. package/dist/gateway/static/root/assets/messages-DlTNQI92.js +0 -3
  287. package/dist/gateway/static/root/assets/models-hub-cache-C7FAsEe_.js +0 -1
  288. package/dist/gateway/static/root/assets/note-detail-panel-D9oqhdyk.js +0 -5
  289. package/dist/gateway/static/root/assets/notes-page-Bd4_7ph8.js +0 -8
  290. package/dist/gateway/static/root/assets/personal-page-BvWzq4Wp.js +0 -1
  291. package/dist/gateway/static/root/assets/project-detail-page-D-qkIXVT.js +0 -1
  292. package/dist/gateway/static/root/assets/projects-page-BQtw1Dfn.js +0 -1
  293. package/dist/gateway/static/root/assets/remote-access-hub-CYFNz0Jc.js +0 -1
  294. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Qq_NyYx_.js +0 -1
  295. package/dist/gateway/static/root/assets/scenes-page-hGr-ppYk.js +0 -2
  296. package/dist/gateway/static/root/assets/sessions-page-CpX1Rluw.js +0 -1
  297. package/dist/gateway/static/root/assets/settings-advanced-gate-D2s_MlxR.js +0 -1
  298. package/dist/gateway/static/root/assets/settings-loading-skeleton-BTqvr_Fw.js +0 -1
  299. package/dist/gateway/static/root/assets/setup-status-panel-BiHRYDHq.js +0 -1
  300. package/dist/gateway/static/root/assets/shares-settings-DfcAu08T.js +0 -1
  301. package/dist/gateway/static/root/assets/skills-page-CvKc5nBN.js +0 -2
  302. package/dist/gateway/static/root/assets/user-model-page-Dhqw3v_u.js +0 -2
@@ -0,0 +1,94 @@
1
+ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
+ //#region src/providers/setup/profiles.ts
3
+ /** Plan usage is conservative until a vendor explicitly permits unattended execution. */
4
+ function isInteractiveOnlyProvider(provider, baseUrl) {
5
+ if (subscriptionProviders.has(provider?.trim().toLowerCase())) return true;
6
+ if (!baseUrl) return false;
7
+ try {
8
+ const url = new URL(baseUrl);
9
+ const hostname = url.hostname.toLowerCase().replace(/\.$/, "");
10
+ return [
11
+ "token-plan.cn-beijing.maas.aliyuncs.com",
12
+ "token-plan.ap-southeast-1.maas.aliyuncs.com",
13
+ "token-plan-cn.xiaomimimo.com",
14
+ "token-plan-ams.xiaomimimo.com",
15
+ "token-plan-sgp.xiaomimimo.com",
16
+ "coding.dashscope.aliyuncs.com",
17
+ "coding-intl.dashscope.aliyuncs.com"
18
+ ].includes(hostname) || ["ark.cn-beijing.volces.com", "ark.ap-southeast.bytepluses.com"].includes(hostname) && decodeURIComponent(url.pathname).startsWith("/api/coding/");
19
+ } catch {
20
+ return false;
21
+ }
22
+ }
23
+ function getProviderSetupProfile(provider, name = provider, oauth = false, baseUrl) {
24
+ if (profiles[provider]) return {
25
+ id: provider,
26
+ ...profiles[provider]
27
+ };
28
+ const interactiveOnly = isInteractiveOnlyProvider(provider, baseUrl);
29
+ const local = Boolean(baseUrl && /^https?:\/\/(localhost|127\.0\.0\.1|\[::1\])(?=[:/]|$)/.test(baseUrl));
30
+ return {
31
+ id: provider,
32
+ brand: {
33
+ "dashscope-cn": "Alibaba Bailian",
34
+ "dashscope-intl": "Alibaba Bailian",
35
+ "qwen-token-plan": "Alibaba Bailian",
36
+ "qwen-token-plan-individual": "Alibaba Bailian",
37
+ xiaomi: "Xiaomi MiMo",
38
+ "xiaomi-token-plan-ams": "Xiaomi MiMo",
39
+ "xiaomi-token-plan-sgp": "Xiaomi MiMo"
40
+ }[provider] ?? name,
41
+ name,
42
+ access: interactiveOnly ? "subscription" : local ? "local" : "api",
43
+ credential: oauth ? "oauth" : local ? "none" : "api-key",
44
+ interactiveOnly
45
+ };
46
+ }
47
+ var subscriptionProviders, profiles;
48
+ var init_profiles = __esmMin((() => {
49
+ subscriptionProviders = new Set([
50
+ "qwen-token-plan-cn",
51
+ "qwen-token-plan",
52
+ "qwen-token-plan-individual",
53
+ "xiaomi-token-plan-cn",
54
+ "xiaomi-token-plan-ams",
55
+ "xiaomi-token-plan-sgp",
56
+ "zai-coding-cn",
57
+ "zai-coding-global",
58
+ "zhipu-coding-cn",
59
+ "kimi-coding",
60
+ "volcengine-plan",
61
+ "byteplus-plan",
62
+ "stepfun-plan",
63
+ "stepfun-plan-cn",
64
+ "stepfun-plan-intl"
65
+ ]);
66
+ profiles = {
67
+ "qwen-token-plan-cn": {
68
+ brand: "Alibaba Bailian",
69
+ name: "Bailian subscription · Beijing",
70
+ access: "subscription",
71
+ credential: "api-key",
72
+ interactiveOnly: true,
73
+ apiKeyUrl: "https://bailian.console.aliyun.com/cn-beijing/subscription/overview"
74
+ },
75
+ "xopc-cloud": {
76
+ brand: "XOPC Cloud",
77
+ name: "XOPC Cloud",
78
+ access: "account",
79
+ credential: "oauth",
80
+ interactiveOnly: false
81
+ },
82
+ "xiaomi-token-plan-cn": {
83
+ brand: "Xiaomi MiMo",
84
+ name: "MiMo Token Plan · China",
85
+ access: "subscription",
86
+ credential: "api-key",
87
+ interactiveOnly: true,
88
+ apiKeyUrl: "https://platform.xiaomimimo.com/"
89
+ }
90
+ };
91
+ }));
92
+ //#endregion
93
+ init_profiles();
94
+ export { getProviderSetupProfile, init_profiles, isInteractiveOnlyProvider };
@@ -0,0 +1,23 @@
1
+ import type { ModelSetupUse } from '@xopcai/gateway-contract';
2
+ import { type Config } from '../../config/schema.js';
3
+ export type VoiceSetupUse = Extract<ModelSetupUse, 'speech' | 'transcription' | 'conversation'>;
4
+ export type SetupVoiceModel = {
5
+ ref: string;
6
+ name: string;
7
+ provider: string;
8
+ model: string;
9
+ voice?: string;
10
+ recommended?: boolean;
11
+ };
12
+ export type SetupVoiceState = {
13
+ revision: string;
14
+ current: Partial<Record<VoiceSetupUse, string>>;
15
+ choices: Record<VoiceSetupUse, SetupVoiceModel[]>;
16
+ };
17
+ export declare const voiceSetupUses: VoiceSetupUse[];
18
+ export declare function readSetupVoiceState(provider: string, config: Config): SetupVoiceState;
19
+ /** Voice lives in the existing app configuration; never copy the provider secret. */
20
+ export declare function applySetupVoice(config: Config, assignments: Array<{
21
+ use: VoiceSetupUse;
22
+ model: SetupVoiceModel;
23
+ }>): Config;
@@ -0,0 +1,234 @@
1
+ import { ConfigSchema, init_schema } from "../../config/schema.js";
2
+ import { voiceSupportsMode } from "../../../packages/realtime-protocol/src/voice-catalog.js";
3
+ import { init_voice } from "../../../packages/realtime-protocol/src/voice.js";
4
+ import { getModelCatalogStore, init_model_catalog_store } from "../model-catalog-store.js";
5
+ import { BAILIAN_PLAN_HOST, BAILIAN_PLAN_OMNI_MODEL, BAILIAN_PLAN_OMNI_VOICE, BAILIAN_PLAN_PROVIDER, BAILIAN_PLAN_STT_MODEL, BAILIAN_PLAN_TTS_MODEL, BAILIAN_PLAN_TTS_VOICE } from "../../voice/token-plan.js";
6
+ import { listSttProvidersForApi } from "../../voice/stt/list-providers.js";
7
+ import { listTtsProvidersForApi } from "../../voice/tts/list-providers.js";
8
+ import { selectPlatformVoice } from "../../voice/platform-settings.js";
9
+ import { createHash } from "node:crypto";
10
+ //#region src/providers/setup/voice.ts
11
+ init_voice();
12
+ init_schema();
13
+ init_model_catalog_store();
14
+ const voiceSetupUses = [
15
+ "transcription",
16
+ "speech",
17
+ "conversation"
18
+ ];
19
+ function readSetupVoiceState(provider, config) {
20
+ const tts = config.messages?.tts;
21
+ const stt = config.tools.media?.audio;
22
+ const omni = config.voice?.realtime?.omni;
23
+ const choices = {
24
+ speech: [],
25
+ transcription: [],
26
+ conversation: []
27
+ };
28
+ if (provider === "qwen-token-plan-cn") {
29
+ choices.speech.push({
30
+ ref: `${provider}/${BAILIAN_PLAN_TTS_MODEL}`,
31
+ name: "Qwen Audio 3.0 TTS Plus",
32
+ provider,
33
+ model: BAILIAN_PLAN_TTS_MODEL,
34
+ voice: BAILIAN_PLAN_TTS_VOICE
35
+ });
36
+ choices.transcription.push({
37
+ ref: `${provider}/${BAILIAN_PLAN_STT_MODEL}`,
38
+ name: "Qwen Audio 3.0 ASR Flash",
39
+ provider,
40
+ model: BAILIAN_PLAN_STT_MODEL
41
+ });
42
+ choices.conversation.push({
43
+ ref: `${provider}/${BAILIAN_PLAN_OMNI_MODEL}`,
44
+ name: "Qwen Audio 3.0 Realtime Plus",
45
+ provider,
46
+ model: BAILIAN_PLAN_OMNI_MODEL,
47
+ voice: BAILIAN_PLAN_OMNI_VOICE
48
+ });
49
+ } else if (provider === "xopc-cloud") {
50
+ const source = getModelCatalogStore().getSource(provider);
51
+ for (const model of source?.models ?? []) {
52
+ if (model.availability !== "available" || !model.voice) continue;
53
+ for (const use of voiceSetupUses) {
54
+ const kind = {
55
+ speech: "tts",
56
+ transcription: "stt",
57
+ conversation: "omni"
58
+ }[use];
59
+ if (model.kind !== kind) continue;
60
+ if (!model.voice.modes.includes(use)) continue;
61
+ const voice = use === "transcription" ? void 0 : model.voice.voices.find((voice) => voice.id === model.voice?.defaultVoice && voiceSupportsMode(voice, use))?.id ?? model.voice.voices.find((voice) => voiceSupportsMode(voice, use))?.id;
62
+ if (use !== "transcription" && !voice) continue;
63
+ choices[use].push({
64
+ ref: `${provider}/${model.id}`,
65
+ name: model.name,
66
+ provider,
67
+ model: model.id,
68
+ ...voice ? { voice } : {},
69
+ recommended: source?.recommended?.[model.kind] === model.id
70
+ });
71
+ }
72
+ }
73
+ }
74
+ if (provider !== "qwen-token-plan-cn" && provider !== "xopc-cloud") for (const [use, entries] of [["transcription", listSttProvidersForApi(config).providers], ["speech", listTtsProvidersForApi(config).providers]]) {
75
+ const entry = entries.find((entry) => entry.id === provider && entry.configured);
76
+ if (!entry) continue;
77
+ const configured = use === "speech" ? tts?.providers?.[provider] : stt?.providers?.[provider];
78
+ const models = entry.models?.length ? entry.models : [{
79
+ id: String(configured?.model ?? "default"),
80
+ name: entry.displayName
81
+ }];
82
+ const currentModel = configured?.model ?? entry.fields.find((field) => field.key === "model")?.defaultValue ?? models[0]?.id;
83
+ const voiceDefault = entry.fields.find((field) => field.key === "voice")?.defaultValue;
84
+ const defaultVoice = typeof voiceDefault === "string" ? voiceDefault : entry.voices?.[0]?.id;
85
+ for (const model of models) choices[use].push({
86
+ ref: `${provider}/${model.id}`,
87
+ name: model.name,
88
+ provider,
89
+ model: model.id,
90
+ ...use === "speech" ? { voice: currentModel === model.id && typeof configured?.voice === "string" ? configured.voice : defaultVoice } : {}
91
+ });
92
+ }
93
+ const current = {};
94
+ if (tts?.provider) current.speech = `${tts.provider}/${tts.providers?.[tts.provider]?.model ?? "default"}`;
95
+ if (stt?.provider) current.transcription = `${stt.provider}/${stt.providers?.[stt.provider]?.model ?? "default"}`;
96
+ if (omni) current.conversation = `${omni.provider}/${omni.model}`;
97
+ return {
98
+ current,
99
+ choices,
100
+ revision: createHash("sha256").update(JSON.stringify([
101
+ tts,
102
+ stt,
103
+ config.voice,
104
+ choices
105
+ ])).digest("hex")
106
+ };
107
+ }
108
+ /** Voice lives in the existing app configuration; never copy the provider secret. */
109
+ function applySetupVoice(config, assignments) {
110
+ let next = structuredClone(config);
111
+ for (const { use, model } of assignments) {
112
+ if (model.provider === "xopc-cloud") next = selectPlatformVoice(next, {
113
+ mode: use,
114
+ model: model.model,
115
+ ...model.voice ? { voice: model.voice } : {}
116
+ });
117
+ else if (model.provider === "qwen-token-plan-cn") if (use === "speech") {
118
+ const current = next.messages?.tts;
119
+ const previous = current?.providers?.[model.provider];
120
+ const voice = (!previous?.model || previous.model === model.model) && typeof previous?.voice === "string" ? previous.voice : model.voice;
121
+ next.messages ??= {};
122
+ next.messages.tts = {
123
+ enabled: true,
124
+ provider: model.provider,
125
+ trigger: "off",
126
+ maxTextLength: 512,
127
+ timeoutMs: 6e4,
128
+ ...current,
129
+ providers: {
130
+ ...current?.providers,
131
+ [model.provider]: {
132
+ ...previous,
133
+ model: model.model,
134
+ voice
135
+ }
136
+ }
137
+ };
138
+ next.messages.tts.provider = model.provider;
139
+ next.messages.tts.enabled = true;
140
+ } else if (use === "transcription") {
141
+ next.tools.media ??= {};
142
+ const current = next.tools.media.audio;
143
+ next.tools.media.audio = {
144
+ ...current,
145
+ enabled: true,
146
+ provider: model.provider,
147
+ fallback: {
148
+ enabled: false,
149
+ order: []
150
+ },
151
+ models: [{
152
+ provider: model.provider,
153
+ model: model.model,
154
+ capabilities: ["audio"]
155
+ }],
156
+ providers: {
157
+ ...current?.providers,
158
+ [model.provider]: {
159
+ ...current?.providers?.[model.provider],
160
+ model: model.model
161
+ }
162
+ }
163
+ };
164
+ } else {
165
+ next = ConfigSchema.parse({
166
+ ...next,
167
+ voice: next.voice ?? {}
168
+ });
169
+ next.voice.realtime.enabled = true;
170
+ next.voice.realtime.omni = {
171
+ provider: BAILIAN_PLAN_PROVIDER,
172
+ model: model.model,
173
+ voice: model.voice,
174
+ baseUrl: `${BAILIAN_PLAN_HOST.replace("https:", "wss:")}/api-ws/v1/realtime`,
175
+ instructions: next.voice?.realtime.omni?.instructions ?? "Keep replies conversational and concise. You cannot execute tools."
176
+ };
177
+ }
178
+ else if (use === "speech") {
179
+ const current = next.messages?.tts;
180
+ next.messages ??= {};
181
+ next.messages.tts = {
182
+ enabled: true,
183
+ trigger: "off",
184
+ maxTextLength: 512,
185
+ timeoutMs: 6e4,
186
+ ...current,
187
+ provider: model.provider,
188
+ providers: {
189
+ ...current?.providers,
190
+ [model.provider]: {
191
+ ...current?.providers?.[model.provider],
192
+ model: model.model,
193
+ ...model.voice ? { voice: model.voice } : {}
194
+ }
195
+ }
196
+ };
197
+ next.messages.tts.enabled = true;
198
+ } else if (use === "transcription") {
199
+ next.tools.media ??= {};
200
+ const current = next.tools.media.audio;
201
+ next.tools.media.audio = {
202
+ ...current,
203
+ enabled: true,
204
+ provider: model.provider,
205
+ providers: {
206
+ ...current?.providers,
207
+ [model.provider]: {
208
+ ...current?.providers?.[model.provider],
209
+ model: model.model
210
+ }
211
+ }
212
+ };
213
+ } else throw new Error("No realtime voice configuration binding for this provider");
214
+ if (use === "speech" && next.messages?.tts) next.messages.tts.fallback = {
215
+ enabled: false,
216
+ order: []
217
+ };
218
+ if (use === "conversation" && next.voice) next.voice.realtime.defaultEngine = "omni";
219
+ if (use === "transcription" && next.tools.media?.audio) {
220
+ next.tools.media.audio.fallback = {
221
+ enabled: false,
222
+ order: []
223
+ };
224
+ next.tools.media.audio.models = [{
225
+ provider: model.provider,
226
+ model: model.model,
227
+ capabilities: ["audio"]
228
+ }];
229
+ }
230
+ }
231
+ return ConfigSchema.parse(next);
232
+ }
233
+ //#endregion
234
+ export { applySetupVoice, readSetupVoiceState, voiceSetupUses };
@@ -5,4 +5,5 @@ export declare class SceneAgentExecutor implements SceneReadOnlyExecutor {
5
5
  private readonly resolveModel;
6
6
  constructor(resolveModel: () => Model<Api>);
7
7
  execute(input: Parameters<SceneReadOnlyExecutor['execute']>[0]): Promise<unknown>;
8
+ private executeScoped;
8
9
  }
@@ -1,3 +1,4 @@
1
+ import { init_model_usage, modelUsageOriginForCall, withModelUsageOrigin } from "../providers/model-usage.js";
1
2
  import { init_sync_provider_auth, resolveProviderApiKeySync } from "../auth/sync-provider-auth.js";
2
3
  import { getApiKeySync, init_providers } from "../providers/index.js";
3
4
  import { createExtensionAwareStreamFn } from "../providers/extension-stream-bridge.js";
@@ -7,12 +8,16 @@ import { Agent } from "@earendil-works/pi-agent-core";
7
8
  //#region src/scenes/agentExecutor.ts
8
9
  init_sync_provider_auth();
9
10
  init_providers();
11
+ init_model_usage();
10
12
  /** A single reasoning turn over host-selected evidence; no tools or delegation. */
11
13
  var SceneAgentExecutor = class {
12
14
  constructor(resolveModel) {
13
15
  this.resolveModel = resolveModel;
14
16
  }
15
17
  async execute(input) {
18
+ return withModelUsageOrigin(modelUsageOriginForCall(input.usage), () => this.executeScoped(input));
19
+ }
20
+ async executeScoped(input) {
16
21
  input.signal.throwIfAborted();
17
22
  const stream = createExtensionAwareStreamFn();
18
23
  let calls = 0;
@@ -0,0 +1,20 @@
1
+ CREATE TABLE discussion_processing (
2
+ discussion_id TEXT PRIMARY KEY REFERENCES discussion_captures(id) ON DELETE CASCADE,
3
+ run_id TEXT NOT NULL UNIQUE,
4
+ audio_sha256 TEXT,
5
+ base_transcript_revision INTEGER NOT NULL,
6
+ force_audio INTEGER NOT NULL DEFAULT 0 CHECK(force_audio IN (0,1)),
7
+ retry_stage TEXT,
8
+ attempt_count INTEGER NOT NULL DEFAULT 0,
9
+ next_attempt_at INTEGER,
10
+ lease_owner TEXT,
11
+ lease_until INTEGER
12
+ );
13
+ CREATE TABLE discussion_transcription_checkpoints (
14
+ run_id TEXT NOT NULL REFERENCES discussion_processing(run_id) ON DELETE CASCADE,
15
+ started_at_ms REAL NOT NULL,
16
+ ended_at_ms REAL NOT NULL,
17
+ result_json TEXT NOT NULL,
18
+ created_at INTEGER NOT NULL,
19
+ PRIMARY KEY(run_id, started_at_ms, ended_at_ms)
20
+ );
@@ -0,0 +1,17 @@
1
+ CREATE TABLE discussion_annotations (
2
+ discussion_id TEXT NOT NULL REFERENCES discussion_captures(id) ON DELETE CASCADE,
3
+ id TEXT NOT NULL,
4
+ kind TEXT NOT NULL CHECK(kind IN ('highlight','question','note')),
5
+ text TEXT NOT NULL,
6
+ anchor_json TEXT NOT NULL,
7
+ revision INTEGER NOT NULL,
8
+ deleted INTEGER NOT NULL DEFAULT 0,
9
+ created_at INTEGER NOT NULL,
10
+ updated_at INTEGER NOT NULL,
11
+ PRIMARY KEY(discussion_id,id)
12
+ );
13
+ CREATE TABLE discussion_media_timeline (
14
+ discussion_id TEXT PRIMARY KEY REFERENCES discussion_captures(id) ON DELETE CASCADE,
15
+ audio_sha256 TEXT NOT NULL,
16
+ timeline_json TEXT NOT NULL
17
+ );
@@ -0,0 +1,10 @@
1
+ CREATE TABLE discussion_chapter_progress (
2
+ discussion_id TEXT NOT NULL REFERENCES discussion_captures(id) ON DELETE CASCADE,
3
+ source_sha256 TEXT NOT NULL,
4
+ transcript_revision INTEGER NOT NULL,
5
+ transcript_sha256 TEXT NOT NULL,
6
+ input_hash TEXT NOT NULL,
7
+ position INTEGER NOT NULL,
8
+ chapter_json TEXT NOT NULL,
9
+ PRIMARY KEY(discussion_id, source_sha256, transcript_revision, transcript_sha256, input_hash)
10
+ );
@@ -3,7 +3,7 @@ import type { ApplyMigrationsOptions } from './types.js';
3
3
  /** Baseline schema version applied from schema.sql on first open. */
4
4
  export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 165;
5
5
  /** Latest schema version this release supports (increment when adding migrations). */
6
- export declare const XOPC_DB_SCHEMA_VERSION = 252;
6
+ export declare const XOPC_DB_SCHEMA_VERSION = 255;
7
7
  export declare function resolveMigrationsDir(override?: string): string;
8
8
  /**
9
9
  * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
@@ -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 ?? 255;
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 ?? 255;
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 = 255;
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: 255,
32
32
  databasePath: fresh ? void 0 : options.databasePath
33
33
  });
34
34
  }
@@ -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) {