@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
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/session-manager-BOb1tC_Z.js","assets/rolldown-runtime-aKtaBQYM.js","assets/locale-store-Dr43FCty.js","assets/vendor-react-BOUWij0V.js","assets/messages-DlTNQI92.js","assets/schemas-CObaziC7.js","assets/gateway-realtime-BFK-vlME.js","assets/gateway-realtime-store-C3vH-Iup.js","assets/local-session-drafts-kFc_MAA9.js","assets/session-api-DvgEiNRS.js","assets/gateway-startup-retry-BDPMttPx.js","assets/constants-DeXt1mV-.js","assets/tool-activity-BtJkgjFf.js","assets/registry-api-BD5IgDOA.js","assets/preload-helper-zJ_50EbN.js","assets/attachment-utils-core-BIOUBrpT.js","assets/agents-admin-api-BlNGyXpm.js","assets/gateway-config-swr-Bc2MytsF.js","assets/vendor-swr-BIWyz7Rc.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-zJ_50EbN.js";import{i as t,r as n}from"./locale-store-Dr43FCty.js";import{i as r,n as i,r as a,t as o}from"./files-Bw4SBGdM.js";async function s(e){let t=await e.json().catch(()=>null);return Error(t?.error?.message??`HTTP ${e.status}`)}async function c(e,r){let i=await t(n(e),r);if(!i.ok)throw await s(i);return i.json()}async function l(t){if(!t?.projectId&&t?.conversationId){let{SessionManager:n}=await e(async()=>{let{SessionManager:e}=await import(`./session-manager-BOb1tC_Z.js`).then(e=>e.n);return{SessionManager:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]));await new n().materialize(t.conversationId,`session_resources`)}let n=t?.projectId?{kind:`project`,id:t.projectId}:t?.conversationId?{kind:`session`,id:t.conversationId}:t?.agentId?{kind:`agent`,id:t.agentId}:null;if(n){let e=await c(`/api/files/contexts/${n.kind}/${encodeURIComponent(n.id)}`);return r.parse(e.space)}let i=await c(`/api/files/default-space`);return r.parse(i.space)}function u(e){return{id:e.id,name:e.name,path:e.relativePath,isDirectory:e.kind===`directory`,mimeType:e.mimeType,revision:e.revision}}async function d(e,t){let n=await l(t),r=await c(`/api/files/resolve`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,taskRunId:t?.taskRunId})});return i.parse(r.resource)}async function f(e,t){return d(e,t)}async function p(e=``,t){let n=await l(t),r=new URLSearchParams;return e&&r.set(`path`,e),{entries:a.parse(await c(`/api/files/spaces/${encodeURIComponent(n.id)}/children${r.size?`?${r}`:``}`)).items.map(u)}}async function m(e=``,t){return(await p(e,t)).entries}async function h(e){let t=await l(e);return u(o.parse(await c(`/api/files/spaces/${encodeURIComponent(t.id)}/root`)).resource)}async function g(e,t,n=50){let r=await l(t),i=new URLSearchParams({q:e.trim(),limit:String(n),spaceId:r.id});return a.parse(await c(`/api/files/search?${i}`)).items.map(u)}async function _(e,r){let i=await d(e,r),a=await t(n(`/api/files/${encodeURIComponent(i.id)}/content`));if(!a.ok)throw await s(a);return{content:await a.text(),path:i.relativePath,mtimeMs:i.modifiedAt,revision:i.revision}}async function v(e,t){let n;try{n=await l(t)}catch{return null}try{let r=await c(`/api/files/resolve`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,taskRunId:t?.taskRunId})}),a=i.parse(r.resource);return{absolutePath:r.absolutePath,fileId:a.id,inputPath:e,displayName:a.name,scope:r.absolutePath?`external`:`workspace`,locationKind:r.absolutePath?`host`:`workspace`,exists:!0,isDirectory:a.kind===`directory`,workspaceRelativePath:a.relativePath,capabilities:a.capabilities.filter(e=>e===`preview`||e===`edit`),mtimeMs:a.modifiedAt}}catch{try{return(await c(`/api/files/resolve-reference`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,conversationId:t?.conversationId})})).reference}catch{return null}}}async function y(e,t,n){return await c(`/api/files/references/${encodeURIComponent(e)}/action`,{method:`POST`,body:JSON.stringify({action:t,conversationId:n?.conversationId})})}async function b(e,r){let i=await d(e,r),a=await t(n(`/api/files/${encodeURIComponent(i.id)}/content`),{headers:{Accept:`*/*`}});if(!a.ok)throw await s(a);return a.blob()}async function x(e,t,n){let r=await d(e,n),a=await c(`/api/files/${encodeURIComponent(r.id)}/content`,{method:`PUT`,body:JSON.stringify({content:t,revision:r.revision})}),o=i.parse(a.resource);return{path:o.relativePath,mtimeMs:o.modifiedAt,revision:o.revision}}async function S(e,r=``,i){let a=await l(i),c=new FormData;c.set(`directory`,r),c.set(`file`,e);let d=await t(n(`/api/files/spaces/${encodeURIComponent(a.id)}/upload`),{method:`POST`,body:c});if(!d.ok)throw await s(d);return u(o.parse(await d.json()).resource)}async function C(e){let r=await t(n(`/api/files/${encodeURIComponent(e)}`),{method:`DELETE`});if(!r.ok)throw await s(r)}function w(e,t){let n=new Blob([t],{type:`text/plain;charset=utf-8`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(r)}function T(e,t,n){let r=new Blob([t],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}export{b as a,_ as c,f as d,g as f,p as i,y as l,x as m,T as n,h as o,S as p,w as r,m as s,C as t,v as u};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/session-manager-aXqXuqDX.js","assets/rolldown-runtime-aKtaBQYM.js","assets/locale-store-DMy9W6IG.js","assets/vendor-react-BOUWij0V.js","assets/messages-O0BEUKnx.js","assets/schemas-CObaziC7.js","assets/gateway-realtime-Ci1Jst5g.js","assets/gateway-realtime-store-BMUiUQMk.js","assets/local-session-drafts-DAtLkTPg.js","assets/session-api-B9HrwF-c.js","assets/gateway-startup-retry-C-BG5M7H.js","assets/constants-DeXt1mV-.js","assets/tool-activity-BtJkgjFf.js","assets/registry-api-CgQrCqL6.js","assets/preload-helper-zJ_50EbN.js","assets/attachment-utils-core-BIOUBrpT.js","assets/agents-admin-api-DxdaiFWn.js","assets/gateway-config-swr-CmYcOqhb.js","assets/vendor-swr-BIWyz7Rc.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./preload-helper-zJ_50EbN.js";import{i as t,r as n}from"./locale-store-DMy9W6IG.js";import{i as r,n as i,r as a,t as o}from"./files-Bw4SBGdM.js";async function s(e){let t=await e.json().catch(()=>null);return Error(t?.error?.message??`HTTP ${e.status}`)}async function c(e,r){let i=await t(n(e),r);if(!i.ok)throw await s(i);return i.json()}async function l(t){if(!t?.projectId&&t?.conversationId){let{SessionManager:n}=await e(async()=>{let{SessionManager:e}=await import(`./session-manager-aXqXuqDX.js`).then(e=>e.n);return{SessionManager:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]));await new n().materialize(t.conversationId,`session_resources`)}let n=t?.projectId?{kind:`project`,id:t.projectId}:t?.conversationId?{kind:`session`,id:t.conversationId}:t?.agentId?{kind:`agent`,id:t.agentId}:null;if(n){let e=await c(`/api/files/contexts/${n.kind}/${encodeURIComponent(n.id)}`);return r.parse(e.space)}let i=await c(`/api/files/default-space`);return r.parse(i.space)}function u(e){return{id:e.id,name:e.name,path:e.relativePath,isDirectory:e.kind===`directory`,mimeType:e.mimeType,revision:e.revision}}async function d(e,t){let n=await l(t),r=await c(`/api/files/resolve`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,taskRunId:t?.taskRunId})});return i.parse(r.resource)}async function f(e,t){return d(e,t)}async function p(e=``,t){let n=await l(t),r=new URLSearchParams;return e&&r.set(`path`,e),{entries:a.parse(await c(`/api/files/spaces/${encodeURIComponent(n.id)}/children${r.size?`?${r}`:``}`)).items.map(u)}}async function m(e=``,t){return(await p(e,t)).entries}async function h(e){let t=await l(e);return u(o.parse(await c(`/api/files/spaces/${encodeURIComponent(t.id)}/root`)).resource)}async function g(e,t,n=50){let r=await l(t),i=new URLSearchParams({q:e.trim(),limit:String(n),spaceId:r.id});return a.parse(await c(`/api/files/search?${i}`)).items.map(u)}async function _(e,r){let i=await d(e,r),a=await t(n(`/api/files/${encodeURIComponent(i.id)}/content`));if(!a.ok)throw await s(a);return{content:await a.text(),path:i.relativePath,mtimeMs:i.modifiedAt,revision:i.revision}}async function v(e,t){let n;try{n=await l(t)}catch{return null}try{let r=await c(`/api/files/resolve`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,taskRunId:t?.taskRunId})}),a=i.parse(r.resource);return{absolutePath:r.absolutePath,fileId:a.id,inputPath:e,displayName:a.name,scope:r.absolutePath?`external`:`workspace`,locationKind:r.absolutePath?`host`:`workspace`,exists:!0,isDirectory:a.kind===`directory`,workspaceRelativePath:a.relativePath,capabilities:a.capabilities.filter(e=>e===`preview`||e===`edit`),mtimeMs:a.modifiedAt}}catch{try{return(await c(`/api/files/resolve-reference`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,conversationId:t?.conversationId})})).reference}catch{return null}}}async function y(e,t,n){return await c(`/api/files/references/${encodeURIComponent(e)}/action`,{method:`POST`,body:JSON.stringify({action:t,conversationId:n?.conversationId})})}async function b(e,r){let i=await d(e,r),a=await t(n(`/api/files/${encodeURIComponent(i.id)}/content`),{headers:{Accept:`*/*`}});if(!a.ok)throw await s(a);return a.blob()}async function x(e,t,n){let r=await d(e,n),a=await c(`/api/files/${encodeURIComponent(r.id)}/content`,{method:`PUT`,body:JSON.stringify({content:t,revision:r.revision})}),o=i.parse(a.resource);return{path:o.relativePath,mtimeMs:o.modifiedAt,revision:o.revision}}async function S(e,r=``,i){let a=await l(i),c=new FormData;c.set(`directory`,r),c.set(`file`,e);let d=await t(n(`/api/files/spaces/${encodeURIComponent(a.id)}/upload`),{method:`POST`,body:c});if(!d.ok)throw await s(d);return u(o.parse(await d.json()).resource)}async function C(e){let r=await t(n(`/api/files/${encodeURIComponent(e)}`),{method:`DELETE`});if(!r.ok)throw await s(r)}function w(e,t){let n=new Blob([t],{type:`text/plain;charset=utf-8`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(r)}function T(e,t,n){let r=new Blob([t],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}export{b as a,_ as c,f as d,g as f,p as i,y as l,x as m,T as n,h as o,S as p,w as r,m as s,C as t,v as u};
@@ -1 +1 @@
1
- import{n as e,t}from"./vendor-react-BOUWij0V.js";import{t as n}from"./cloud-C4-yfnnk.js";import{t as r}from"./external-link-DjqjBmc3.js";import{a as i,n as a,r as o}from"./locale-store-Dr43FCty.js";import{n as s,t as c}from"./cloud-credits-BMYMiiNn.js";import{i as l}from"./vendor-swr-BIWyz7Rc.js";import{t as u}from"./button-aIC072nz.js";import{t as d}from"./skeleton-BI5TyibZ.js";import{So as f,Xo as p}from"./index-CmC8JkSM.js";var m=e(),h=t();function g(e){let t=(BigInt(e)+500n)/1000n*1000n;return s(String(t))}async function _(){let e=await i(o(`/api/models/xopc-cloud/account-summary`));return c.parse(e.payload)}function v(e){let t=(0,m.c)(148),{labels:i}=e,o=a(y)===`zh`?`zh-CN`:`en-US`,s;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(s={refreshInterval:6e4,revalidateOnFocus:!0},t[0]=s):s=t[0];let{data:c,error:v,isLoading:b,isValidating:x,mutate:S}=l(`/api/models/xopc-cloud/account-summary`,_,s);if(b){let e;return t[1]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,h.jsx)(d,{className:`h-40 w-full rounded-xl`}),t[1]=e):e=t[1],e}if(v||!c){let e;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,h.jsx)(f,{className:`mt-0.5 size-4 shrink-0 text-amber-500`,"aria-hidden":!0}),t[2]=e):e=t[2];let n;t[3]===i.title?n=t[4]:(n=(0,h.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:i.title}),t[3]=i.title,t[4]=n);let r;t[5]===i.unavailable?r=t[6]:(r=(0,h.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:i.unavailable}),t[5]=i.unavailable,t[6]=r);let a;t[7]!==n||t[8]!==r?(a=(0,h.jsxs)(`div`,{className:`flex min-w-0 items-start gap-3`,children:[e,(0,h.jsxs)(`div`,{children:[n,r]})]}),t[7]=n,t[8]=r,t[9]=a):a=t[9];let o;t[10]===S?o=t[11]:(o=()=>void S(),t[10]=S,t[11]=o);let s=x?`size-4 animate-spin`:`size-4`,c;t[12]===s?c=t[13]:(c=(0,h.jsx)(p,{className:s,"aria-hidden":!0}),t[12]=s,t[13]=c);let l;t[14]!==x||t[15]!==i.retry||t[16]!==o||t[17]!==c?(l=(0,h.jsxs)(u,{type:`button`,variant:`secondary`,disabled:x,onClick:o,children:[c,i.retry]}),t[14]=x,t[15]=i.retry,t[16]=o,t[17]=c,t[18]=l):l=t[18];let d;return t[19]!==a||t[20]!==l?(d=(0,h.jsx)(`section`,{className:`rounded-xl bg-surface-hover/25 p-4`,children:(0,h.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[a,l]})}),t[19]=a,t[20]=l,t[21]=d):d=t[21],d}let C,w,T,E,D,O,k,A,j,M;if(t[22]!==c.balance.availableCreditMicro||t[23]!==c.balance.expiring[0]||t[24]!==c.balance.grantedCreditMicro||t[25]!==c.balance.purchasedCreditMicro||t[26]!==c.balance.refundReservedCreditMicro||t[27]!==c.balance.usageReservedCreditMicro||t[28]!==c.links.details||t[29]!==c.links.purchase||t[30]!==c.usage.chargedCreditMicro||t[31]!==c.usage.requests||t[32]!==c.usage.totalTokens||t[33]!==i.availableCredits||t[34]!==i.connected||t[35]!==i.details||t[36]!==i.expiring||t[37]!==i.granted||t[38]!==i.purchase||t[39]!==i.purchased||t[40]!==i.recentUsage||t[41]!==i.reserved||t[42]!==i.title||t[43]!==i.tokenUsage||t[44]!==i.usageSummary||t[45]!==i.zeroBalance||t[46]!==o){let e=new Intl.NumberFormat(o),a=i.usageSummary.replace(`{{credits}}`,g(c.usage.chargedCreditMicro)).replace(`{{requests}}`,e.format(c.usage.requests));C=`rounded-xl bg-surface-hover/40 p-4 sm:p-5`;let s;t[57]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,h.jsx)(n,{className:`size-4 text-accent-fg`,"aria-hidden":!0}),t[57]=s):s=t[57];let l;t[58]===i.title?l=t[59]:(l=(0,h.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:i.title}),t[58]=i.title,t[59]=l);let d;t[60]===i.connected?d=t[61]:(d=(0,h.jsx)(`span`,{className:`rounded-full bg-emerald-500/10 px-2 py-0.5 text-xs font-medium text-emerald-700 dark:text-emerald-300`,children:i.connected}),t[60]=i.connected,t[61]=d);let f;t[62]!==l||t[63]!==d?(f=(0,h.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[s,l,d]}),t[62]=l,t[63]=d,t[64]=f):f=t[64];let p;t[65]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,h.jsx)(r,{className:`size-3.5`,"aria-hidden":!0}),t[65]=p):p=t[65];let m;t[66]!==c.links.purchase||t[67]!==i.purchase?(m=(0,h.jsx)(u,{asChild:!0,variant:`primary`,children:(0,h.jsxs)(`a`,{href:c.links.purchase,target:`_blank`,rel:`noreferrer`,children:[i.purchase,p]})}),t[66]=c.links.purchase,t[67]=i.purchase,t[68]=m):m=t[68];let _;t[69]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,h.jsx)(r,{className:`size-3.5`,"aria-hidden":!0}),t[69]=_):_=t[69];let v;t[70]!==c.links.details||t[71]!==i.details?(v=(0,h.jsx)(u,{asChild:!0,variant:`secondary`,children:(0,h.jsxs)(`a`,{href:c.links.details,target:`_blank`,rel:`noreferrer`,children:[i.details,_]})}),t[70]=c.links.details,t[71]=i.details,t[72]=v):v=t[72];let y;t[73]!==m||t[74]!==v?(y=(0,h.jsxs)(`div`,{className:`flex shrink-0 flex-wrap gap-2`,children:[m,v]}),t[73]=m,t[74]=v,t[75]=y):y=t[75],t[76]!==f||t[77]!==y?(w=(0,h.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between`,children:[f,y]}),t[76]=f,t[77]=y,t[78]=w):w=t[78],j=`mt-4 grid gap-4 rounded-lg bg-surface-base/45 p-3 sm:grid-cols-[minmax(12rem,0.7fr)_minmax(0,1.3fr)] sm:gap-6`;let b;t[79]===i.availableCredits?b=t[80]:(b=(0,h.jsx)(`p`,{className:`text-xs font-medium text-fg-subtle`,children:i.availableCredits}),t[79]=i.availableCredits,t[80]=b);let x;t[81]===c.balance.availableCreditMicro?x=t[82]:(x=g(c.balance.availableCreditMicro),t[81]=c.balance.availableCreditMicro,t[82]=x);let S;t[83]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,h.jsx)(`span`,{className:`ml-2 text-sm font-medium text-fg-muted`,children:`Credits`}),t[83]=S):S=t[83];let N;t[84]===x?N=t[85]:(N=(0,h.jsxs)(`p`,{className:`mt-1 text-2xl font-semibold tracking-tight text-fg`,children:[x,S]}),t[84]=x,t[85]=N);let P;t[86]!==c.balance.availableCreditMicro||t[87]!==i.zeroBalance?(P=c.balance.availableCreditMicro===`0`?(0,h.jsx)(`p`,{className:`mt-1 text-sm font-medium text-danger`,children:i.zeroBalance}):null,t[86]=c.balance.availableCreditMicro,t[87]=i.zeroBalance,t[88]=P):P=t[88];let F=i.purchased,I;t[89]===c.balance.purchasedCreditMicro?I=t[90]:(I=g(c.balance.purchasedCreditMicro),t[89]=c.balance.purchasedCreditMicro,t[90]=I);let L;t[91]!==i.purchased||t[92]!==I?(L=(0,h.jsxs)(`div`,{children:[F,`: `,I,` Credits`]}),t[91]=i.purchased,t[92]=I,t[93]=L):L=t[93];let R=i.granted,z;t[94]===c.balance.grantedCreditMicro?z=t[95]:(z=g(c.balance.grantedCreditMicro),t[94]=c.balance.grantedCreditMicro,t[95]=z);let B;t[96]!==i.granted||t[97]!==z?(B=(0,h.jsxs)(`div`,{children:[R,`: `,z,` Credits`]}),t[96]=i.granted,t[97]=z,t[98]=B):B=t[98];let V=i.reserved,H=String(BigInt(c.balance.usageReservedCreditMicro)+BigInt(c.balance.refundReservedCreditMicro)),U;t[99]===H?U=t[100]:(U=g(H),t[99]=H,t[100]=U);let W;t[101]!==i.reserved||t[102]!==U?(W=(0,h.jsxs)(`div`,{children:[V,`: `,U,` Credits`]}),t[101]=i.reserved,t[102]=U,t[103]=W):W=t[103];let G;t[104]!==L||t[105]!==B||t[106]!==W?(G=(0,h.jsxs)(`div`,{className:`mt-2 space-y-1 text-xs text-fg-muted`,children:[L,B,W]}),t[104]=L,t[105]=B,t[106]=W,t[107]=G):G=t[107];let K;t[108]!==c.balance.expiring[0]||t[109]!==i.expiring||t[110]!==o?(K=c.balance.expiring[0]?(0,h.jsx)(`p`,{className:`mt-2 text-xs text-amber-600 dark:text-amber-400`,children:i.expiring.replace(`{{credits}}`,g(c.balance.expiring[0].creditMicro)).replace(`{{date}}`,new Date(c.balance.expiring[0].expiresAt).toLocaleDateString(o))}):null,t[108]=c.balance.expiring[0],t[109]=i.expiring,t[110]=o,t[111]=K):K=t[111],t[112]!==b||t[113]!==N||t[114]!==P||t[115]!==G||t[116]!==K?(M=(0,h.jsxs)(`div`,{children:[b,N,P,G,K]}),t[112]=b,t[113]=N,t[114]=P,t[115]=G,t[116]=K,t[117]=M):M=t[117],t[118]===i.recentUsage?k=t[119]:(k=(0,h.jsx)(`p`,{className:`text-xs font-medium text-fg-subtle`,children:i.recentUsage}),t[118]=i.recentUsage,t[119]=k),A=(0,h.jsx)(`p`,{className:`mt-1 text-sm leading-relaxed text-fg-muted`,children:a}),D=`mt-2 text-xs text-fg-subtle`,t[120]===i.tokenUsage?O=t[121]:(O=(0,h.jsx)(`summary`,{className:`cursor-pointer`,children:i.tokenUsage}),t[120]=i.tokenUsage,t[121]=O),T=`mt-1`,E=e.format(c.usage.totalTokens),t[22]=c.balance.availableCreditMicro,t[23]=c.balance.expiring[0],t[24]=c.balance.grantedCreditMicro,t[25]=c.balance.purchasedCreditMicro,t[26]=c.balance.refundReservedCreditMicro,t[27]=c.balance.usageReservedCreditMicro,t[28]=c.links.details,t[29]=c.links.purchase,t[30]=c.usage.chargedCreditMicro,t[31]=c.usage.requests,t[32]=c.usage.totalTokens,t[33]=i.availableCredits,t[34]=i.connected,t[35]=i.details,t[36]=i.expiring,t[37]=i.granted,t[38]=i.purchase,t[39]=i.purchased,t[40]=i.recentUsage,t[41]=i.reserved,t[42]=i.title,t[43]=i.tokenUsage,t[44]=i.usageSummary,t[45]=i.zeroBalance,t[46]=o,t[47]=C,t[48]=w,t[49]=T,t[50]=E,t[51]=D,t[52]=O,t[53]=k,t[54]=A,t[55]=j,t[56]=M}else C=t[47],w=t[48],T=t[49],E=t[50],D=t[51],O=t[52],k=t[53],A=t[54],j=t[55],M=t[56];let N;t[122]!==T||t[123]!==E?(N=(0,h.jsxs)(`p`,{className:T,children:[E,` tokens`]}),t[122]=T,t[123]=E,t[124]=N):N=t[124];let P;t[125]!==N||t[126]!==D||t[127]!==O?(P=(0,h.jsxs)(`details`,{className:D,children:[O,N]}),t[125]=N,t[126]=D,t[127]=O,t[128]=P):P=t[128];let F;t[129]!==c.balance.updatedAt||t[130]!==i.updatedAt||t[131]!==o?(F=i.updatedAt.replace(`{{time}}`,new Date(c.balance.updatedAt).toLocaleString(o)),t[129]=c.balance.updatedAt,t[130]=i.updatedAt,t[131]=o,t[132]=F):F=t[132];let I;t[133]===F?I=t[134]:(I=(0,h.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:F}),t[133]=F,t[134]=I);let L;t[135]!==P||t[136]!==I||t[137]!==k||t[138]!==A?(L=(0,h.jsxs)(`div`,{children:[k,A,P,I]}),t[135]=P,t[136]=I,t[137]=k,t[138]=A,t[139]=L):L=t[139];let R;t[140]!==L||t[141]!==j||t[142]!==M?(R=(0,h.jsxs)(`div`,{className:j,children:[M,L]}),t[140]=L,t[141]=j,t[142]=M,t[143]=R):R=t[143];let z;return t[144]!==C||t[145]!==w||t[146]!==R?(z=(0,h.jsxs)(`section`,{className:C,children:[w,R]}),t[144]=C,t[145]=w,t[146]=R,t[147]=z):z=t[147],z}function y(e){return e.language}export{v as t};
1
+ import{n as e,t}from"./vendor-react-BOUWij0V.js";import{t as n}from"./cloud-C4-yfnnk.js";import{t as r}from"./external-link-DjqjBmc3.js";import{a as i,n as a,r as o}from"./locale-store-DMy9W6IG.js";import{n as s,t as c}from"./cloud-credits-BMYMiiNn.js";import{i as l}from"./vendor-swr-BIWyz7Rc.js";import{t as u}from"./button-aIC072nz.js";import{t as d}from"./skeleton-BI5TyibZ.js";import{Fo as f,ls as p}from"./index-xTL-vb51.js";var m=e(),h=t();function g(e){let t=(BigInt(e)+500n)/1000n*1000n;return s(String(t))}async function _(){let e=await i(o(`/api/models/xopc-cloud/account-summary`));return c.parse(e.payload)}function v(e){let t=(0,m.c)(148),{labels:i}=e,o=a(y)===`zh`?`zh-CN`:`en-US`,s;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(s={refreshInterval:6e4,revalidateOnFocus:!0},t[0]=s):s=t[0];let{data:c,error:v,isLoading:b,isValidating:x,mutate:S}=l(`/api/models/xopc-cloud/account-summary`,_,s);if(b){let e;return t[1]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,h.jsx)(d,{className:`h-40 w-full rounded-xl`}),t[1]=e):e=t[1],e}if(v||!c){let e;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,h.jsx)(f,{className:`mt-0.5 size-4 shrink-0 text-amber-500`,"aria-hidden":!0}),t[2]=e):e=t[2];let n;t[3]===i.title?n=t[4]:(n=(0,h.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:i.title}),t[3]=i.title,t[4]=n);let r;t[5]===i.unavailable?r=t[6]:(r=(0,h.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:i.unavailable}),t[5]=i.unavailable,t[6]=r);let a;t[7]!==n||t[8]!==r?(a=(0,h.jsxs)(`div`,{className:`flex min-w-0 items-start gap-3`,children:[e,(0,h.jsxs)(`div`,{children:[n,r]})]}),t[7]=n,t[8]=r,t[9]=a):a=t[9];let o;t[10]===S?o=t[11]:(o=()=>void S(),t[10]=S,t[11]=o);let s=x?`size-4 animate-spin`:`size-4`,c;t[12]===s?c=t[13]:(c=(0,h.jsx)(p,{className:s,"aria-hidden":!0}),t[12]=s,t[13]=c);let l;t[14]!==x||t[15]!==i.retry||t[16]!==o||t[17]!==c?(l=(0,h.jsxs)(u,{type:`button`,variant:`secondary`,disabled:x,onClick:o,children:[c,i.retry]}),t[14]=x,t[15]=i.retry,t[16]=o,t[17]=c,t[18]=l):l=t[18];let d;return t[19]!==a||t[20]!==l?(d=(0,h.jsx)(`section`,{className:`rounded-xl bg-surface-hover/25 p-4`,children:(0,h.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[a,l]})}),t[19]=a,t[20]=l,t[21]=d):d=t[21],d}let C,w,T,E,D,O,k,A,j,M;if(t[22]!==c.balance.availableCreditMicro||t[23]!==c.balance.expiring[0]||t[24]!==c.balance.grantedCreditMicro||t[25]!==c.balance.purchasedCreditMicro||t[26]!==c.balance.refundReservedCreditMicro||t[27]!==c.balance.usageReservedCreditMicro||t[28]!==c.links.details||t[29]!==c.links.purchase||t[30]!==c.usage.chargedCreditMicro||t[31]!==c.usage.requests||t[32]!==c.usage.totalTokens||t[33]!==i.availableCredits||t[34]!==i.connected||t[35]!==i.details||t[36]!==i.expiring||t[37]!==i.granted||t[38]!==i.purchase||t[39]!==i.purchased||t[40]!==i.recentUsage||t[41]!==i.reserved||t[42]!==i.title||t[43]!==i.tokenUsage||t[44]!==i.usageSummary||t[45]!==i.zeroBalance||t[46]!==o){let e=new Intl.NumberFormat(o),a=i.usageSummary.replace(`{{credits}}`,g(c.usage.chargedCreditMicro)).replace(`{{requests}}`,e.format(c.usage.requests));C=`rounded-xl bg-surface-hover/40 p-4 sm:p-5`;let s;t[57]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,h.jsx)(n,{className:`size-4 text-accent-fg`,"aria-hidden":!0}),t[57]=s):s=t[57];let l;t[58]===i.title?l=t[59]:(l=(0,h.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:i.title}),t[58]=i.title,t[59]=l);let d;t[60]===i.connected?d=t[61]:(d=(0,h.jsx)(`span`,{className:`rounded-full bg-emerald-500/10 px-2 py-0.5 text-xs font-medium text-emerald-700 dark:text-emerald-300`,children:i.connected}),t[60]=i.connected,t[61]=d);let f;t[62]!==l||t[63]!==d?(f=(0,h.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[s,l,d]}),t[62]=l,t[63]=d,t[64]=f):f=t[64];let p;t[65]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,h.jsx)(r,{className:`size-3.5`,"aria-hidden":!0}),t[65]=p):p=t[65];let m;t[66]!==c.links.purchase||t[67]!==i.purchase?(m=(0,h.jsx)(u,{asChild:!0,variant:`primary`,children:(0,h.jsxs)(`a`,{href:c.links.purchase,target:`_blank`,rel:`noreferrer`,children:[i.purchase,p]})}),t[66]=c.links.purchase,t[67]=i.purchase,t[68]=m):m=t[68];let _;t[69]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,h.jsx)(r,{className:`size-3.5`,"aria-hidden":!0}),t[69]=_):_=t[69];let v;t[70]!==c.links.details||t[71]!==i.details?(v=(0,h.jsx)(u,{asChild:!0,variant:`secondary`,children:(0,h.jsxs)(`a`,{href:c.links.details,target:`_blank`,rel:`noreferrer`,children:[i.details,_]})}),t[70]=c.links.details,t[71]=i.details,t[72]=v):v=t[72];let y;t[73]!==m||t[74]!==v?(y=(0,h.jsxs)(`div`,{className:`flex shrink-0 flex-wrap gap-2`,children:[m,v]}),t[73]=m,t[74]=v,t[75]=y):y=t[75],t[76]!==f||t[77]!==y?(w=(0,h.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between`,children:[f,y]}),t[76]=f,t[77]=y,t[78]=w):w=t[78],j=`mt-4 grid gap-4 rounded-lg bg-surface-base/45 p-3 sm:grid-cols-[minmax(12rem,0.7fr)_minmax(0,1.3fr)] sm:gap-6`;let b;t[79]===i.availableCredits?b=t[80]:(b=(0,h.jsx)(`p`,{className:`text-xs font-medium text-fg-subtle`,children:i.availableCredits}),t[79]=i.availableCredits,t[80]=b);let x;t[81]===c.balance.availableCreditMicro?x=t[82]:(x=g(c.balance.availableCreditMicro),t[81]=c.balance.availableCreditMicro,t[82]=x);let S;t[83]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,h.jsx)(`span`,{className:`ml-2 text-sm font-medium text-fg-muted`,children:`Credits`}),t[83]=S):S=t[83];let N;t[84]===x?N=t[85]:(N=(0,h.jsxs)(`p`,{className:`mt-1 text-2xl font-semibold tracking-tight text-fg`,children:[x,S]}),t[84]=x,t[85]=N);let P;t[86]!==c.balance.availableCreditMicro||t[87]!==i.zeroBalance?(P=c.balance.availableCreditMicro===`0`?(0,h.jsx)(`p`,{className:`mt-1 text-sm font-medium text-danger`,children:i.zeroBalance}):null,t[86]=c.balance.availableCreditMicro,t[87]=i.zeroBalance,t[88]=P):P=t[88];let F=i.purchased,I;t[89]===c.balance.purchasedCreditMicro?I=t[90]:(I=g(c.balance.purchasedCreditMicro),t[89]=c.balance.purchasedCreditMicro,t[90]=I);let L;t[91]!==i.purchased||t[92]!==I?(L=(0,h.jsxs)(`div`,{children:[F,`: `,I,` Credits`]}),t[91]=i.purchased,t[92]=I,t[93]=L):L=t[93];let R=i.granted,z;t[94]===c.balance.grantedCreditMicro?z=t[95]:(z=g(c.balance.grantedCreditMicro),t[94]=c.balance.grantedCreditMicro,t[95]=z);let B;t[96]!==i.granted||t[97]!==z?(B=(0,h.jsxs)(`div`,{children:[R,`: `,z,` Credits`]}),t[96]=i.granted,t[97]=z,t[98]=B):B=t[98];let V=i.reserved,H=String(BigInt(c.balance.usageReservedCreditMicro)+BigInt(c.balance.refundReservedCreditMicro)),U;t[99]===H?U=t[100]:(U=g(H),t[99]=H,t[100]=U);let W;t[101]!==i.reserved||t[102]!==U?(W=(0,h.jsxs)(`div`,{children:[V,`: `,U,` Credits`]}),t[101]=i.reserved,t[102]=U,t[103]=W):W=t[103];let G;t[104]!==L||t[105]!==B||t[106]!==W?(G=(0,h.jsxs)(`div`,{className:`mt-2 space-y-1 text-xs text-fg-muted`,children:[L,B,W]}),t[104]=L,t[105]=B,t[106]=W,t[107]=G):G=t[107];let K;t[108]!==c.balance.expiring[0]||t[109]!==i.expiring||t[110]!==o?(K=c.balance.expiring[0]?(0,h.jsx)(`p`,{className:`mt-2 text-xs text-amber-600 dark:text-amber-400`,children:i.expiring.replace(`{{credits}}`,g(c.balance.expiring[0].creditMicro)).replace(`{{date}}`,new Date(c.balance.expiring[0].expiresAt).toLocaleDateString(o))}):null,t[108]=c.balance.expiring[0],t[109]=i.expiring,t[110]=o,t[111]=K):K=t[111],t[112]!==b||t[113]!==N||t[114]!==P||t[115]!==G||t[116]!==K?(M=(0,h.jsxs)(`div`,{children:[b,N,P,G,K]}),t[112]=b,t[113]=N,t[114]=P,t[115]=G,t[116]=K,t[117]=M):M=t[117],t[118]===i.recentUsage?k=t[119]:(k=(0,h.jsx)(`p`,{className:`text-xs font-medium text-fg-subtle`,children:i.recentUsage}),t[118]=i.recentUsage,t[119]=k),A=(0,h.jsx)(`p`,{className:`mt-1 text-sm leading-relaxed text-fg-muted`,children:a}),D=`mt-2 text-xs text-fg-subtle`,t[120]===i.tokenUsage?O=t[121]:(O=(0,h.jsx)(`summary`,{className:`cursor-pointer`,children:i.tokenUsage}),t[120]=i.tokenUsage,t[121]=O),T=`mt-1`,E=e.format(c.usage.totalTokens),t[22]=c.balance.availableCreditMicro,t[23]=c.balance.expiring[0],t[24]=c.balance.grantedCreditMicro,t[25]=c.balance.purchasedCreditMicro,t[26]=c.balance.refundReservedCreditMicro,t[27]=c.balance.usageReservedCreditMicro,t[28]=c.links.details,t[29]=c.links.purchase,t[30]=c.usage.chargedCreditMicro,t[31]=c.usage.requests,t[32]=c.usage.totalTokens,t[33]=i.availableCredits,t[34]=i.connected,t[35]=i.details,t[36]=i.expiring,t[37]=i.granted,t[38]=i.purchase,t[39]=i.purchased,t[40]=i.recentUsage,t[41]=i.reserved,t[42]=i.title,t[43]=i.tokenUsage,t[44]=i.usageSummary,t[45]=i.zeroBalance,t[46]=o,t[47]=C,t[48]=w,t[49]=T,t[50]=E,t[51]=D,t[52]=O,t[53]=k,t[54]=A,t[55]=j,t[56]=M}else C=t[47],w=t[48],T=t[49],E=t[50],D=t[51],O=t[52],k=t[53],A=t[54],j=t[55],M=t[56];let N;t[122]!==T||t[123]!==E?(N=(0,h.jsxs)(`p`,{className:T,children:[E,` tokens`]}),t[122]=T,t[123]=E,t[124]=N):N=t[124];let P;t[125]!==N||t[126]!==D||t[127]!==O?(P=(0,h.jsxs)(`details`,{className:D,children:[O,N]}),t[125]=N,t[126]=D,t[127]=O,t[128]=P):P=t[128];let F;t[129]!==c.balance.updatedAt||t[130]!==i.updatedAt||t[131]!==o?(F=i.updatedAt.replace(`{{time}}`,new Date(c.balance.updatedAt).toLocaleString(o)),t[129]=c.balance.updatedAt,t[130]=i.updatedAt,t[131]=o,t[132]=F):F=t[132];let I;t[133]===F?I=t[134]:(I=(0,h.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:F}),t[133]=F,t[134]=I);let L;t[135]!==P||t[136]!==I||t[137]!==k||t[138]!==A?(L=(0,h.jsxs)(`div`,{children:[k,A,P,I]}),t[135]=P,t[136]=I,t[137]=k,t[138]=A,t[139]=L):L=t[139];let R;t[140]!==L||t[141]!==j||t[142]!==M?(R=(0,h.jsxs)(`div`,{className:j,children:[M,L]}),t[140]=L,t[141]=j,t[142]=M,t[143]=R):R=t[143];let z;return t[144]!==C||t[145]!==w||t[146]!==R?(z=(0,h.jsxs)(`section`,{className:C,children:[w,R]}),t[144]=C,t[145]=w,t[146]=R,t[147]=z):z=t[147],z}function y(e){return e.language}export{v as t};
@@ -11,15 +11,15 @@
11
11
  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=20260910-1" />
12
12
  <link rel="manifest" href="/site.webmanifest?v=20260910-1" />
13
13
  <title>XOPC — Keep what matters moving.</title>
14
- <script type="module" crossorigin src="/assets/index-CmC8JkSM.js"></script>
14
+ <script type="module" crossorigin src="/assets/index-xTL-vb51.js"></script>
15
15
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-zJ_50EbN.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-BOUWij0V.js">
18
18
  <link rel="modulepreload" crossorigin href="/assets/dist-CxGUk8J-.js">
19
19
  <link rel="modulepreload" crossorigin href="/assets/es2015-DBLcMg5B.js">
20
20
  <link rel="modulepreload" crossorigin href="/assets/middleware-Pd0e8Igk.js">
21
- <link rel="modulepreload" crossorigin href="/assets/messages-DlTNQI92.js">
22
- <link rel="modulepreload" crossorigin href="/assets/locale-store-Dr43FCty.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/messages-O0BEUKnx.js">
22
+ <link rel="modulepreload" crossorigin href="/assets/locale-store-DMy9W6IG.js">
23
23
  <link rel="modulepreload" crossorigin href="/assets/floating-ui.dom-B7uQOZZW.js">
24
24
  <link rel="modulepreload" crossorigin href="/assets/dist-CI_fqRk-.js">
25
25
  <link rel="modulepreload" crossorigin href="/assets/dist-BGTk37IG.js">
@@ -37,7 +37,7 @@
37
37
  <link rel="modulepreload" crossorigin href="/assets/bundle-mjs-rHxsej31.js">
38
38
  <link rel="modulepreload" crossorigin href="/assets/cn-0WouolD0.js">
39
39
  <link rel="modulepreload" crossorigin href="/assets/copy-to-clipboard-HOJ79TWv.js">
40
- <link rel="modulepreload" crossorigin href="/assets/markdown-view-CdKlPjJM.js">
40
+ <link rel="modulepreload" crossorigin href="/assets/markdown-view-wyOHdXEg.js">
41
41
  <link rel="modulepreload" crossorigin href="/assets/check-DUBLcKHA.js">
42
42
  <link rel="modulepreload" crossorigin href="/assets/copy-Dv6d4Dvw.js">
43
43
  <link rel="modulepreload" crossorigin href="/assets/button-aIC072nz.js">
@@ -73,54 +73,55 @@
73
73
  <link rel="modulepreload" crossorigin href="/assets/rotate-cw-LIg3Am9S.js">
74
74
  <link rel="modulepreload" crossorigin href="/assets/search-DA7gz22f.js">
75
75
  <link rel="modulepreload" crossorigin href="/assets/index.module-Cd9ENXfk.js">
76
- <link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-BDPMttPx.js">
77
- <link rel="modulepreload" crossorigin href="/assets/session-api-DvgEiNRS.js">
76
+ <link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-C-BG5M7H.js">
77
+ <link rel="modulepreload" crossorigin href="/assets/session-api-B9HrwF-c.js">
78
78
  <link rel="modulepreload" crossorigin href="/assets/constants-DeXt1mV-.js">
79
79
  <link rel="modulepreload" crossorigin href="/assets/app-chrome-BeB4KgOf.js">
80
80
  <link rel="modulepreload" crossorigin href="/assets/attachment-utils-core-BIOUBrpT.js">
81
81
  <link rel="modulepreload" crossorigin href="/assets/files-Bw4SBGdM.js">
82
- <link rel="modulepreload" crossorigin href="/assets/workspace-api-CZDvu7uA.js">
82
+ <link rel="modulepreload" crossorigin href="/assets/workspace-api-Bmx1O449.js">
83
83
  <link rel="modulepreload" crossorigin href="/assets/electron-env-Dit0bHgy.js">
84
84
  <link rel="modulepreload" crossorigin href="/assets/use-async-resource-GrnWNwMZ.js">
85
- <link rel="modulepreload" crossorigin href="/assets/activity-store-dvik6t7Z.js">
86
- <link rel="modulepreload" crossorigin href="/assets/use-file-preview-expanded-D5Kk7Hon.js">
85
+ <link rel="modulepreload" crossorigin href="/assets/activity-store-DGMAYkw8.js">
86
+ <link rel="modulepreload" crossorigin href="/assets/use-file-preview-expanded-CEsxnDnQ.js">
87
87
  <link rel="modulepreload" crossorigin href="/assets/mic-CuUb7zc-.js">
88
88
  <link rel="modulepreload" crossorigin href="/assets/globe-DSSGFWFn.js">
89
- <link rel="modulepreload" crossorigin href="/assets/share-link-dialog-kE_6v5Dp.js">
90
- <link rel="modulepreload" crossorigin href="/assets/local-session-drafts-kFc_MAA9.js">
89
+ <link rel="modulepreload" crossorigin href="/assets/share-link-dialog-B1TDyhPt.js">
90
+ <link rel="modulepreload" crossorigin href="/assets/local-session-drafts-DAtLkTPg.js">
91
91
  <link rel="modulepreload" crossorigin href="/assets/specialists-4bkS5rZ4.js">
92
92
  <link rel="modulepreload" crossorigin href="/assets/tasks-PuIUgF9L.js">
93
- <link rel="modulepreload" crossorigin href="/assets/capabilities-MCKRMZDK.js">
93
+ <link rel="modulepreload" crossorigin href="/assets/capabilities-BkCutK0V.js">
94
94
  <link rel="modulepreload" crossorigin href="/assets/skill-wire-pattern-BPpeIcCi.js">
95
- <link rel="modulepreload" crossorigin href="/assets/shares-api-Dg_SqHQE.js">
96
- <link rel="modulepreload" crossorigin href="/assets/capabilities-CEH1AnXc.js">
97
- <link rel="modulepreload" crossorigin href="/assets/use-composer-attachments-Dviq-1f6.js">
95
+ <link rel="modulepreload" crossorigin href="/assets/shares-api-Bl1ZBh5S.js">
96
+ <link rel="modulepreload" crossorigin href="/assets/capabilities-D61uSJPy.js">
97
+ <link rel="modulepreload" crossorigin href="/assets/use-composer-attachments-CXsocZjt.js">
98
98
  <link rel="modulepreload" crossorigin href="/assets/git-branch-Dh9uxTot.js">
99
- <link rel="modulepreload" crossorigin href="/assets/notes-api-BHouNL6-.js">
99
+ <link rel="modulepreload" crossorigin href="/assets/notes-api-CYt2pGsm.js">
100
100
  <link rel="modulepreload" crossorigin href="/assets/message-square-fVE7Ghj1.js">
101
101
  <link rel="modulepreload" crossorigin href="/assets/pause-DuPxgSxk.js">
102
102
  <link rel="modulepreload" crossorigin href="/assets/play-kxZvpBg8.js">
103
103
  <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-JM1TBLpp.js">
104
104
  <link rel="modulepreload" crossorigin href="/assets/settings-2-D-csvaET.js">
105
105
  <link rel="modulepreload" crossorigin href="/assets/sparkles-DHlfQFAF.js">
106
- <link rel="modulepreload" crossorigin href="/assets/gateway-realtime-store-C3vH-Iup.js">
107
- <link rel="modulepreload" crossorigin href="/assets/gateway-realtime-BFK-vlME.js">
106
+ <link rel="modulepreload" crossorigin href="/assets/gateway-realtime-store-BMUiUQMk.js">
107
+ <link rel="modulepreload" crossorigin href="/assets/gateway-realtime-Ci1Jst5g.js">
108
108
  <link rel="modulepreload" crossorigin href="/assets/tool-activity-BtJkgjFf.js">
109
- <link rel="modulepreload" crossorigin href="/assets/registry-api-BD5IgDOA.js">
110
- <link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-Bc2MytsF.js">
111
- <link rel="modulepreload" crossorigin href="/assets/agents-admin-api-BlNGyXpm.js">
112
- <link rel="modulepreload" crossorigin href="/assets/session-manager-BOb1tC_Z.js">
113
- <link rel="modulepreload" crossorigin href="/assets/send-session-input-UAVStisp.js">
114
- <link rel="modulepreload" crossorigin href="/assets/theme-store-BKpYnggg.js">
115
- <link rel="modulepreload" crossorigin href="/assets/extension-provider-BXPILdlw.js">
109
+ <link rel="modulepreload" crossorigin href="/assets/registry-api-CgQrCqL6.js">
110
+ <link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-CmYcOqhb.js">
111
+ <link rel="modulepreload" crossorigin href="/assets/agents-admin-api-DxdaiFWn.js">
112
+ <link rel="modulepreload" crossorigin href="/assets/session-manager-aXqXuqDX.js">
113
+ <link rel="modulepreload" crossorigin href="/assets/voice-transcribe-api-B47j0_xA.js">
114
+ <link rel="modulepreload" crossorigin href="/assets/send-session-input-nH8Cw0US.js">
115
+ <link rel="modulepreload" crossorigin href="/assets/theme-store-BBLjE0fi.js">
116
+ <link rel="modulepreload" crossorigin href="/assets/extension-provider-DWI0KAKT.js">
116
117
  <link rel="modulepreload" crossorigin href="/assets/loopi-Djb8XU3l.js">
117
- <link rel="modulepreload" crossorigin href="/assets/models-hub-cache-C7FAsEe_.js">
118
+ <link rel="modulepreload" crossorigin href="/assets/models-hub-cache-DdH1MODX.js">
118
119
  <link rel="modulepreload" crossorigin href="/assets/skill-api-utils-C7V4JVXM.js">
119
120
  <link rel="modulepreload" crossorigin href="/assets/date-formatters-CUZAyDEg.js">
120
121
  <link rel="modulepreload" crossorigin href="/assets/settings-form-draft-Dy10ldo8.js">
121
122
  <link rel="stylesheet" crossorigin href="/assets/markdown-view-Ct4sKkUf.css">
122
123
  <link rel="stylesheet" crossorigin href="/assets/loopi-C09I2mNj.css">
123
- <link rel="stylesheet" crossorigin href="/assets/index-Dgzc0oBu.css">
124
+ <link rel="stylesheet" crossorigin href="/assets/index-W9ls-0Yd.css">
124
125
  </head>
125
126
  <body>
126
127
  <div id="root"></div>
package/dist/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  //#region package.json
2
- var version = "0.0.389";
2
+ var version = "0.0.390";
3
3
  //#endregion
4
4
  export { version };
@@ -1,8 +1,9 @@
1
1
  import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
2
  //#region packages/gateway-contract/src/discussions.ts
3
- var DISCUSSION_MAX_DURATION_MS, DISCUSSION_AUDIO_MAX_BYTES, DISCUSSION_CHUNK_MAX_BYTES, DISCUSSION_SEGMENT_MAX_BYTES, DISCUSSION_STATUSES;
3
+ var DISCUSSION_MAX_DURATION_MS, DISCUSSION_MAX_SAVED_DURATION_MS, DISCUSSION_AUDIO_MAX_BYTES, DISCUSSION_CHUNK_MAX_BYTES, DISCUSSION_SEGMENT_MAX_BYTES, DISCUSSION_STATUSES;
4
4
  var init_discussions = __esmMin((() => {
5
5
  DISCUSSION_MAX_DURATION_MS = 7200 * 1e3;
6
+ DISCUSSION_MAX_SAVED_DURATION_MS = DISCUSSION_MAX_DURATION_MS + 5e3;
6
7
  DISCUSSION_AUDIO_MAX_BYTES = 1024 * 1024 * 1024;
7
8
  DISCUSSION_CHUNK_MAX_BYTES = 8 * 1024 * 1024;
8
9
  DISCUSSION_SEGMENT_MAX_BYTES = 2 * 1024 * 1024;
@@ -18,4 +19,4 @@ var init_discussions = __esmMin((() => {
18
19
  }));
19
20
  //#endregion
20
21
  init_discussions();
21
- export { DISCUSSION_AUDIO_MAX_BYTES, DISCUSSION_CHUNK_MAX_BYTES, DISCUSSION_MAX_DURATION_MS, DISCUSSION_SEGMENT_MAX_BYTES, DISCUSSION_STATUSES, init_discussions };
22
+ export { DISCUSSION_AUDIO_MAX_BYTES, DISCUSSION_CHUNK_MAX_BYTES, DISCUSSION_MAX_DURATION_MS, DISCUSSION_MAX_SAVED_DURATION_MS, DISCUSSION_SEGMENT_MAX_BYTES, DISCUSSION_STATUSES, init_discussions };
@@ -46,6 +46,8 @@ import { init_task_result_delivery } from "./task-result-delivery.js";
46
46
  import { init_session_command_rejection } from "./session-command-rejection.js";
47
47
  import { init_personal_proactivity } from "./personal-proactivity.js";
48
48
  import { init_result_reference } from "./result-reference.js";
49
+ import { init_provider_setup } from "./provider-setup.js";
50
+ import { init_recording_outcome } from "./recording-outcome.js";
49
51
  //#region packages/gateway-contract/src/index.ts
50
52
  var init_src = __esmMin((() => {
51
53
  init_agent_stream();
@@ -95,6 +97,8 @@ var init_src = __esmMin((() => {
95
97
  init_personal_proactivity();
96
98
  init_specialists();
97
99
  init_result_reference();
100
+ init_provider_setup();
101
+ init_recording_outcome();
98
102
  }));
99
103
  //#endregion
100
104
  init_src();
@@ -0,0 +1,6 @@
1
+ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
+ //#region packages/gateway-contract/src/provider-setup.ts
3
+ var init_provider_setup = __esmMin((() => {}));
4
+ //#endregion
5
+ init_provider_setup();
6
+ export { init_provider_setup };
@@ -0,0 +1,6 @@
1
+ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
+ //#region packages/gateway-contract/src/recording-outcome.ts
3
+ var init_recording_outcome = __esmMin((() => {}));
4
+ //#endregion
5
+ init_recording_outcome();
6
+ export { init_recording_outcome };
@@ -142,6 +142,16 @@ const providers = [
142
142
  model("wan2.7-image", wan(false))
143
143
  ]
144
144
  },
145
+ {
146
+ id: "qwen-token-plan-cn",
147
+ name: "Alibaba Bailian Subscription (China)",
148
+ protocol: "dashscope",
149
+ baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com",
150
+ timeoutMs: 6e5,
151
+ documentationUrl: "https://help.aliyun.cn/zh/model-studio/token-plan-multimodal-gen",
152
+ apiKeyUrl: "https://bailian.console.aliyun.com/cn-beijing/subscription/overview",
153
+ models: [model("qwen-image-3.0-pro", cap(1, 0, { sizes: ["1024x1024"] })), model("wan2.7-image", cap(1, 0, { sizes: ["1024x1024"] }))]
154
+ },
145
155
  {
146
156
  id: "minimax",
147
157
  name: "MiniMax",
@@ -1,5 +1,5 @@
1
1
  import { getImageProviderSpec } from "./catalog.js";
2
- import { ImageProviderError, validateImageRequest } from "./validation.js";
2
+ import { ImageProviderError, normalizeImageGeometry, validateImageRequest } from "./validation.js";
3
3
  import { MAX_IMAGE_BYTES, assertImageResponseOk, authenticatedJobUrl, decodeBase64, encodeBase64, imageFromBytes, readBytesLimited, readImageJson, waitForImagePoll } from "./http.js";
4
4
  //#region packages/image-providers/src/execute.ts
5
5
  const object = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : {};
@@ -359,6 +359,10 @@ async function executeImageProvider(execution) {
359
359
  const spec = getImageProviderSpec(execution.providerId);
360
360
  const model = spec.models.find((item) => item.id === execution.request.model);
361
361
  if (!model) throw new ImageProviderError(`Unsupported image model: ${execution.request.model}`, 400);
362
+ execution = {
363
+ ...execution,
364
+ request: normalizeImageGeometry(execution.request, model.capabilities, Boolean(execution.request.inputImages?.length))
365
+ };
362
366
  validateImageRequest(execution.request, model.capabilities);
363
367
  const maxPrompt = spec.protocol === "zhipu" ? 1e3 : spec.protocol === "tokenhub" && model.id === "hy-image-v3" ? 8192 : spec.protocol === "dashscope" && model.id.startsWith("wan") ? 5e3 : Infinity;
364
368
  if ([...execution.request.prompt].length > maxPrompt) throw new ImageProviderError("Image prompt exceeds model limit", 400);
@@ -40,6 +40,24 @@ function validateImageRequest(request, caps) {
40
40
  if (request.background && !caps.output?.backgrounds?.includes(request.background)) fail(`Unsupported image background: ${request.background}`);
41
41
  if (request.background === "transparent" && request.outputFormat === "jpeg") fail("Transparent images require PNG or WebP");
42
42
  }
43
+ /** Translate ratios only when the selected model has an exact supported pixel size. */
44
+ function normalizeImageGeometry(request, caps, editing = false) {
45
+ const mode = editing ? caps.edit : caps.generate;
46
+ if (!request.aspectRatio || mode?.supportsAspectRatio || !mode?.supportsSize || request.resolution) return request;
47
+ const ratio = /^(\d+):(\d+)$/.exec(request.aspectRatio);
48
+ if (!ratio || Number(ratio[1]) <= 0 || Number(ratio[2]) <= 0) return request;
49
+ const geometry = editing && caps.edit?.geometry ? caps.edit.geometry : caps.geometry;
50
+ const size = (request.size ? [request.size] : geometry?.sizes ?? []).find((value) => {
51
+ const dimensions = /^(\d+)x(\d+)$/.exec(value);
52
+ return dimensions && Number(dimensions[1]) * Number(ratio[2]) === Number(dimensions[2]) * Number(ratio[1]) && isSupportedImageSize(value, geometry);
53
+ });
54
+ if (!size) return request;
55
+ const { aspectRatio: _aspectRatio, ...rest } = request;
56
+ return {
57
+ ...rest,
58
+ size
59
+ };
60
+ }
43
61
  function isSupportedImageSize(size, geometry) {
44
62
  if (geometry?.sizes?.includes(size)) return true;
45
63
  const match = /^(\d+)x(\d+)$/.exec(size);
@@ -49,4 +67,4 @@ function isSupportedImageSize(size, geometry) {
49
67
  return width >= bounds.minEdge && height >= bounds.minEdge && width <= bounds.maxEdge && height <= bounds.maxEdge && width % bounds.step === 0 && height % bounds.step === 0 && pixels >= bounds.minPixels && pixels <= bounds.maxPixels && Math.max(width / height, height / width) <= bounds.maxRatio;
50
68
  }
51
69
  //#endregion
52
- export { ImageProviderError, isSupportedImageSize, validateImageRequest };
70
+ export { ImageProviderError, isSupportedImageSize, normalizeImageGeometry, validateImageRequest };
@@ -10,5 +10,4 @@ export interface RunUserModelReviewParams {
10
10
  getConfig: () => Config | undefined;
11
11
  }
12
12
  export declare function createBackgroundUserModelReviewTask(params: RunUserModelReviewParams): () => Promise<void>;
13
- /** Persisted job runner; independent of an interactive Agent instance surviving eviction. */
14
13
  export declare function runPersistentLearningJob(job: LearningJob, getConfig: () => Config | undefined): Promise<void>;
@@ -8,6 +8,7 @@ import { init_sqlite } from "../../storage/sqlite/index.js";
8
8
  import { extractTextContent } from "../context/workspace.js";
9
9
  import { resolveUserContextSessionAccess } from "../../user-context/access-policy.js";
10
10
  import { failLearningJob, finishLearningJob, learningPolicyHash } from "../../memory-learning/repository.js";
11
+ import { init_model_usage, withModelUsageOrigin } from "../../providers/model-usage.js";
11
12
  import { extractProfileAgentId } from "../../config/agent-profile.js";
12
13
  import { resolveModelIntentRef, resolveModelSelector } from "../../config/agent-model-intents.js";
13
14
  import { init_sync_provider_auth, resolveProviderApiKeySync } from "../../auth/sync-provider-auth.js";
@@ -28,6 +29,7 @@ import { getAssistantTurnErrorMessage, getLastAssistantMessage, isAssistantTurnA
28
29
  import { USER_MODEL_MAINTAINER_SYSTEM_PROMPT, buildUserModelInterpreterPrompt } from "./prompts.js";
29
30
  import { Agent } from "@earendil-works/pi-agent-core";
30
31
  //#region src/agent/background-review/run-background-review.ts
32
+ init_model_usage();
31
33
  init_transaction();
32
34
  init_sync_provider_auth();
33
35
  init_providers();
@@ -214,7 +216,7 @@ async function interpret(params) {
214
216
  }
215
217
  return interpretation;
216
218
  }
217
- async function executeReview(params) {
219
+ async function executeReviewInner(params) {
218
220
  const runtime = resolveInterpreterRuntime(params);
219
221
  if (!runtime) return emptyUserModelCaptureResult();
220
222
  const extraction = claimRegisteredExtraction({
@@ -318,7 +320,7 @@ function listAvailableAssertions() {
318
320
  });
319
321
  }
320
322
  /** Persisted job runner; independent of an interactive Agent instance surviving eviction. */
321
- async function runPersistentLearningJob(job, getConfig) {
323
+ async function runPersistentLearningJobInner(job, getConfig) {
322
324
  const config = getConfig();
323
325
  if (!config || !resolveUserContextSessionAccess(config, job.conversation_id).enabled || learningPolicyHash(config) !== job.policy_hash) {
324
326
  failLearningJob(job, "policy_changed", true);
@@ -474,5 +476,11 @@ async function runPersistentLearningJob(job, getConfig) {
474
476
  errorCode: "lease_lost"
475
477
  });
476
478
  }
479
+ async function executeReview(params) {
480
+ return withModelUsageOrigin("background", () => executeReviewInner(params));
481
+ }
482
+ async function runPersistentLearningJob(job, getConfig) {
483
+ return withModelUsageOrigin("background", () => runPersistentLearningJobInner(job, getConfig));
484
+ }
477
485
  //#endregion
478
486
  export { createBackgroundUserModelReviewTask, runPersistentLearningJob };
@@ -2,6 +2,7 @@ import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { parseTurnOutcome } from "../../../packages/gateway-contract/src/turn-outcome.js";
4
4
  import { init_src } from "../../../packages/gateway-contract/src/index.js";
5
+ import { assertProviderUsage, getModelUsageOrigin, init_model_usage, isProviderUsageScopeError } from "../../providers/model-usage.js";
5
6
  import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
6
7
  import { init_providers, resolveModel } from "../../providers/index.js";
7
8
  import { appendDynamicPromptSection } from "../prompt/cache-boundary.js";
@@ -25,6 +26,7 @@ import { materializeNativeExternalTools } from "./external-tool-discovery.js";
25
26
  import { getTaskContinuation, getTaskExecutionDeadline } from "../../tasks/task-continuation.js";
26
27
  import crypto from "node:crypto";
27
28
  //#region src/agent/embedded/run-for-session.ts
29
+ init_model_usage();
28
30
  init_src();
29
31
  init_logger();
30
32
  init_providers();
@@ -114,15 +116,26 @@ async function runEmbeddedTurnForSessionInner(params) {
114
116
  const mm = modelManager;
115
117
  const configuredModelRef = String(mm.getModelForSession(conversationId));
116
118
  const candidates = typeof mm.getFallbackCandidatesForSession === "function" ? mm.getFallbackCandidatesForSession(conversationId) : [];
117
- const candidateModelRefs = candidates.length > 0 ? candidates.map((candidate) => `${candidate.provider}/${candidate.model}`) : [configuredModelRef];
119
+ const effective = config ? resolveEffectiveAgentProfileForSession(conversationId).config : void 0;
120
+ const background = getModelUsageOrigin() === "background" && !mm.hasSessionModelOverride?.(conversationId) && configuredModelRef === effective?.models.chat.primary ? effective.models.background : void 0;
121
+ const candidateModelRefs = background ? [background.primary, ...background.fallbacks] : candidates.length > 0 ? candidates.map((candidate) => `${candidate.provider}/${candidate.model}`) : [configuredModelRef];
122
+ const selectedRef = background?.primary ?? configuredModelRef;
123
+ assertProviderUsage(selectedRef.split("/")[0]);
124
+ try {
125
+ const selected = !background && typeof mm.getResolvedModelForSession === "function" ? mm.getResolvedModelForSession(conversationId) : resolveModel(selectedRef);
126
+ assertProviderUsage(selected.provider, selected.baseUrl);
127
+ } catch (error) {
128
+ if (isProviderUsageScopeError(error)) throw error;
129
+ }
118
130
  const resolvedCandidates = [];
119
131
  for (const [index, ref] of candidateModelRefs.entries()) try {
120
- const resolved = index === 0 && typeof mm.getResolvedModelForSession === "function" ? mm.getResolvedModelForSession(conversationId) : resolveModel(ref);
132
+ const resolved = !background && index === 0 && typeof mm.getResolvedModelForSession === "function" ? mm.getResolvedModelForSession(conversationId) : resolveModel(ref);
121
133
  resolvedCandidates.push({
122
134
  ref,
123
135
  model: resolved
124
136
  });
125
137
  } catch (err) {
138
+ if (index === 0) assertProviderUsage(ref.split("/")[0]);
126
139
  log.warn({
127
140
  err,
128
141
  conversationId,
@@ -134,6 +147,7 @@ async function runEmbeddedTurnForSessionInner(params) {
134
147
  if (!primary) throw new Error(`No available model candidates for '${configuredModelRef}'`);
135
148
  const modelRef = primary.ref;
136
149
  const model = primary.model;
150
+ assertProviderUsage(model.provider, model.baseUrl);
137
151
  if (typeof mm.applyResolvedModel === "function") mm.applyResolvedModel(agent, model, modelRef);
138
152
  else await mm.applyModelForSession(agent, conversationId);
139
153
  agentManager.setModelForSession(conversationId, modelRef);
@@ -155,7 +169,7 @@ async function runEmbeddedTurnForSessionInner(params) {
155
169
  triggerThreshold: idlePolicy.personalIdle.triggerThreshold
156
170
  });
157
171
  if (budget.estimatedTokens <= budget.triggerTokens || messages.length < idlePolicy.minMessagesBeforeCompact) return "skipped";
158
- const summaryModel = idlePolicy.personalIdle.model ?? idlePolicy.model;
172
+ const summaryModel = idlePolicy.personalIdle.model ?? idlePolicy.model ?? effective?.models.background?.primary;
159
173
  const candidate = await sessionStore.prepareCompaction(conversationId, summaryModel ? resolveModel(summaryModel) : model, {
160
174
  ...idlePolicy,
161
175
  keepRecentTokens: idlePolicy.personalIdle.keepRecentTokens,
@@ -322,6 +336,10 @@ async function runEmbeddedTurnForSessionInner(params) {
322
336
  return await finish(turnResult);
323
337
  }
324
338
  lastResult = turnResult;
339
+ if (isProviderUsageScopeError(turnResult.errorMessage)) return await finish({
340
+ ...turnResult,
341
+ retryable: false
342
+ });
325
343
  if (supervisor.signal.aborted || turnResult.retryable === false) break;
326
344
  log.warn({
327
345
  conversationId,
@@ -334,6 +352,11 @@ async function runEmbeddedTurnForSessionInner(params) {
334
352
  }, hasNextCandidate ? "Agent model turn failed, trying fallback" : "Agent model turn failed, no fallback remains");
335
353
  } catch (err) {
336
354
  attempt.finish("error", err instanceof Error ? err.message : String(err));
355
+ if (isProviderUsageScopeError(err)) return await finish({
356
+ ok: false,
357
+ retryable: false,
358
+ errorMessage: err instanceof Error ? err.message : String(err)
359
+ });
337
360
  lastError = err;
338
361
  if (err instanceof DOMException && err.name === "AbortError") {
339
362
  await finish({
@@ -6,6 +6,7 @@ import { getConnectionResumeInput, init_connection_wait_repository, isConnection
6
6
  import { getSessionMetadata } from "../../storage/sqlite/session-read-repository.js";
7
7
  import { init_session_repository } from "../../storage/sqlite/session-repository.js";
8
8
  import { init_sqlite } from "../../storage/sqlite/index.js";
9
+ import { ProviderUsageScopeError, init_model_usage } from "../../providers/model-usage.js";
9
10
  import { resolveEffectiveAgentConfigForSession } from "../../config/agent-profile.js";
10
11
  import { setTraceIdentity, traceOperation, traceRun, traceTools } from "../../observability/runtime.js";
11
12
  import { continuesAfterTool, trackAiUsageStream } from "../../usage/recorder.js";
@@ -41,6 +42,7 @@ import { getModelThinking } from "../../providers/model-thinking.js";
41
42
  import "../messaging/no-reply.js";
42
43
  import { createAssistantMessageEventStream, getCurrentSystemPrompt, getCurrentTools, isRecoverableLength } from "@earendil-works/pi-ai";
43
44
  //#region src/agent/embedded/run-turn.ts
45
+ init_model_usage();
44
46
  init_connection_wait_repository();
45
47
  init_clarification_wait_repository();
46
48
  init_logger();
@@ -273,6 +275,11 @@ async function runXopcEmbeddedTurn(params) {
273
275
  conversationId: params.conversationId,
274
276
  runId: params.runId
275
277
  }, () => runXopcEmbeddedTurnInner(params), params.userMessage);
278
+ if (result.errorMessage?.includes("provider_usage_scope_denied")) return {
279
+ ...result,
280
+ ok: false,
281
+ retryable: false
282
+ };
276
283
  const stopped = cloudCreditBudgetStopMessage();
277
284
  if (stopped) return {
278
285
  ...result,
@@ -289,6 +296,11 @@ async function runXopcEmbeddedTurn(params) {
289
296
  }
290
297
  return result;
291
298
  } catch (error) {
299
+ if (error instanceof ProviderUsageScopeError) return {
300
+ ok: false,
301
+ retryable: false,
302
+ errorMessage: error.message
303
+ };
292
304
  const message = error instanceof Error ? error.message : String(error);
293
305
  if (isCloudCreditBudgetExhausted(message)) {
294
306
  reportCloudCreditError(message);
@@ -1,3 +1,4 @@
1
+ import { assertProviderUsage, init_model_usage } from "../../providers/model-usage.js";
1
2
  import "../../providers/constants.js";
2
3
  import { init_providers } from "../../providers/index.js";
3
4
  import { createExtensionAwareStreamFn } from "../../providers/extension-stream-bridge.js";
@@ -6,6 +7,7 @@ import { assertCloudCreditBudgetActive, cloudCreditBudgetHeaders, hasCloudCredit
6
7
  import { preparePromptCacheContext, withPromptCachePayloadTransform } from "../../providers/prompt-cache-payload.js";
7
8
  import { getCurrentSystemPrompt, getCurrentTools, normalizeContext } from "@earendil-works/pi-ai";
8
9
  //#region src/agent/embedded/xopc-stream-bridge.ts
10
+ init_model_usage();
9
11
  init_providers();
10
12
  /**
11
13
  * pi-coding-agent's default {@link createAgentSession} streamFn always routes through
@@ -20,6 +22,7 @@ function wrapStreamFnForXopcExtensions(originalStreamFn, promptCachePolicy) {
20
22
  const extensionStreamFn = createExtensionAwareStreamFn();
21
23
  return ((model, context, options) => {
22
24
  assertCloudCreditBudgetActive();
25
+ assertProviderUsage(model.provider, model.baseUrl);
23
26
  if (model.provider === "xopc-cloud") options = withCloudUsageResponse(options);
24
27
  const promptContext = {
25
28
  systemPrompt: getCurrentSystemPrompt(context.messages),
@@ -1,7 +1,8 @@
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 { PROVIDER_ENV_MAP, init_env_keys } from "../../../providers/env-keys.js";
4
- import { ImageProviderError } from "../../../../packages/image-providers/src/validation.js";
5
+ import { ImageProviderError, normalizeImageGeometry } from "../../../../packages/image-providers/src/validation.js";
5
6
  import "../../../../packages/image-providers/src/index.js";
6
7
  import { describeFailoverError, isFailoverError } from "../../failover-error.js";
7
8
  import { buildNoCapabilityModelConfiguredMessage, recordCapabilityCandidateFailure, resolveCapabilityModelCandidates, throwCapabilityGenerationFailure } from "../../media-generation/runtime-shared.js";
@@ -10,6 +11,7 @@ import { parseImageGenerationModelRef } from "./model-ref.js";
10
11
  import { validateImageGenerationRequest } from "./validation.js";
11
12
  import { getImageGenerationProvider, listImageGenerationProviders, listImageGenerationProvidersSummary as listImageGenerationProvidersSummary$1 } from "./provider-registry.js";
12
13
  //#region src/agent/image/generation/runtime.ts
14
+ init_model_usage();
13
15
  init_env_keys();
14
16
  init_logger();
15
17
  const log = createLogger("ImageGen");
@@ -59,30 +61,26 @@ async function generateImage(params, deps = {}) {
59
61
  try {
60
62
  if (!provider.models.includes(candidate.model)) throw new ImageProviderError(`Unsupported image model: ${candidate.model}`, 400);
61
63
  const modelCapabilities = provider.modelCapabilities?.[candidate.model];
64
+ const capabilityProvider = modelCapabilities ? {
65
+ ...provider,
66
+ capabilities: modelCapabilities
67
+ } : provider;
68
+ const candidateParams = normalizeImageGeometry(params, capabilityProvider.capabilities, Boolean(params.inputImages?.length));
62
69
  validateImageGenerationRequest({
63
- provider: modelCapabilities ? {
64
- ...provider,
65
- capabilities: modelCapabilities
66
- } : provider,
67
- size: params.size,
68
- count: params.count,
69
- aspectRatio: params.aspectRatio,
70
- resolution: params.resolution,
71
- quality: params.quality,
72
- outputFormat: params.outputFormat,
73
- background: params.background,
74
- inputImages: params.inputImages
70
+ provider: capabilityProvider,
71
+ ...candidateParams
75
72
  });
76
73
  const request = buildProviderRequest({
77
74
  provider,
78
75
  candidate,
79
- params
76
+ params: candidateParams
80
77
  });
81
78
  log.debug({
82
79
  provider: candidate.provider,
83
80
  model: candidate.model,
84
81
  phase: "provider_invoked"
85
82
  }, `image-generation provider invoked: ${candidate.provider}/${candidate.model}`);
83
+ assertProviderUsage(candidate.provider, request.cfg?.providers?.[candidate.provider]?.baseUrl);
86
84
  const result = await provider.generateImage(request);
87
85
  if (!result.images?.length) throw new Error("Image generation provider returned no images.");
88
86
  return {
@@ -1,11 +1,14 @@
1
+ import { assertProviderUsage, init_model_usage, isProviderUsageScopeError } from "../../../providers/model-usage.js";
1
2
  import { init_schema, parseModelRef } from "../../../config/schema.js";
2
3
  import { getImageUnderstandingProvider } from "./provider-registry.js";
3
4
  import "./pi-ai-provider.js";
4
5
  //#region src/agent/image/understanding/runtime.ts
6
+ init_model_usage();
5
7
  init_schema();
6
8
  async function describeImages(params) {
7
9
  const parsed = parseModelRef(params.modelRef);
8
10
  if (!parsed) throw new Error(`Invalid model reference: ${params.modelRef}`);
11
+ assertProviderUsage(parsed.provider);
9
12
  const provider = getImageUnderstandingProvider(parsed.provider);
10
13
  if (!provider) throw new Error(`No image understanding provider registered for: ${parsed.provider}. Ensure the provider module is imported.`);
11
14
  return provider.describeImages(parsed.model, {
@@ -40,6 +43,7 @@ async function describeImagesWithFallback(params) {
40
43
  continue;
41
44
  }
42
45
  try {
46
+ assertProviderUsage(parsed.provider);
43
47
  return {
44
48
  ...await provider.describeImages(parsed.model, {
45
49
  images: params.images,
@@ -51,6 +55,7 @@ async function describeImagesWithFallback(params) {
51
55
  attempts
52
56
  };
53
57
  } catch (err) {
58
+ if (isProviderUsageScopeError(err)) throw err;
54
59
  lastError = err;
55
60
  attempts.push({
56
61
  provider: parsed.provider,