@xopcai/xopc 0.0.372 → 0.0.373
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.
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-BQ3PMp2q.js → activity-store-BeYLqqr8.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-D4iAZErG.js → agent-avatar-dicebear--kDkSTqC.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-z4_2-Kn2.js +1 -0
- package/dist/gateway/static/root/assets/{agent-plugin-dialog-BYB0G2aF.js → agent-plugin-dialog-BYndK83K.js} +1 -1
- package/dist/gateway/static/root/assets/{agents-D0JBkZPV.js → agents-CVo96cx1.js} +3 -3
- package/dist/gateway/static/root/assets/{agents-admin-api-HBZvVyzF.js → agents-admin-api-B4tgTbWG.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-C1tQxHaP.js → app-management-settings-panel-D9oOJKiH.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-BfavIBbb.js → appearance-settings-B0-8Cdyv.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-CUS5S1qa.js → apps-page-DasVc6i4.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-BO3I9zRP.js → archive-plugin-bI9OLnXj.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-iY0KMPSa.js → automations-page-BlCNqy2i.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-workspace-LQsa5ohY.js → automations-workspace-C8ipDP05.js} +1 -1
- package/dist/gateway/static/root/assets/{binary-plugins-gFD7vH9R.js → binary-plugins-dOwLzjeH.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-Cft0fd_O.js → block-editor-Cktlez6g.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automation-inputs-DxRoKFun.js → browser-automation-inputs-i7h1Svpf.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-C6EWx_Y4.js → browser-automations-page-KRfDl8ej.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-settings-page-CKlt_8IS.js → browser-settings-page-BraQ4wnh.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-CY4SiHcP.js → capabilities-CquUV0DP.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-gjQtMhKu.js → capabilities-D4KFLtqM.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-page-UrQ8EY_o.js → capabilities-page-B3m8xGzd.js} +2 -2
- package/dist/gateway/static/root/assets/{capabilities-settings-panel-C9HIr2CZ.js → capabilities-settings-panel-VQ4fHuBV.js} +6 -6
- package/dist/gateway/static/root/assets/{capability-header-actions-uxIiW_2_.js → capability-header-actions-f5Ido4Eg.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-By3dmQ4Y.js → channels-N4Vc2nEG.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-DeDTSl64.js → chat-terminal-dock-BwvTKwsn.js} +1 -1
- package/dist/gateway/static/root/assets/cloud-credits-BMYMiiNn.js +1 -0
- package/dist/gateway/static/root/assets/{computer-settings-page-Cw1Z1epy.js → computer-settings-page-CAwUsKpw.js} +1 -1
- package/dist/gateway/static/root/assets/{connector-service-page-D664WEhj.js → connector-service-page-C0HuAMuH.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-page-sjyjY7Fl.js → connectors-page-BcBmW8JT.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-BVmFrPfX.js → date-picker-DiQxRpe-.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-YIoP-e5-.js → dependency-picker-Ds0_BJbN.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-CzS468vR.js → desktop-pet-ZMEOYwrR.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-BPcgZUcK.js → desktop-pet-settings-DkyTqD07.js} +1 -1
- package/dist/gateway/static/root/assets/{device-pairing-wizard-Cgba-4m9.js → device-pairing-wizard-CvaI5ZJZ.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-_nHmZtnY.js → directory-picker-path-field-Bfv93eK1.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-IIky9Iqr.js → extension-debug-page-CbgEonkK.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-C-7ngTTj.js → extension-page-JXKGtIdM.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-VFWspV08.js → extension-provider-DxlAZ2iy.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-_hovFCWi.js → extension-settings-page-lsQ2xvbr.js} +1 -1
- package/dist/gateway/static/root/assets/{fallback-models-CUHrPpGV.js → fallback-models-7bG0AND1.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-7RKqgU_U.js → gateway-config-swr-BoRkBnsw.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-BwX_fHUS.js → gateway-realtime-C3WQQY10.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-cLCDEe4D.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-settings-sbaOzlEH.js → gateway-settings-BpbcoPx9.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-jiV5sbEX.js → gateway-startup-retry-TYSQEQcG.js} +1 -1
- package/dist/gateway/static/root/assets/{home-page-DjquRIFR.js → home-page-BxctC0aJ.js} +1 -1
- package/dist/gateway/static/root/assets/{image-generation-api-DO4mXb6I.js → image-generation-api-_pKiNfSq.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-xWWIeT_t.js → imports-page-Bq8CazCb.js} +1 -1
- package/dist/gateway/static/root/assets/{index-BWDK2eIj.js → index-B40-KDN8.js} +7 -7
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DWazrDgz.js → keyboard-shortcuts-settings-kkAevkl2.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-CkxDdlYU.js → local-app-workbench-page-abLaf1hW.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-BISZ4bi5.js → local-apps-page-nwsnwYjK.js} +1 -1
- package/dist/gateway/static/root/assets/{local-session-drafts-pox8evDV.js → local-session-drafts-Cg9RdsNN.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-COVscAqC.js → locale-store-rWFLl-p4.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-GiCulc9k.js → logs-page-BEgYS-Xg.js} +1 -1
- package/dist/gateway/static/root/assets/{management-settings-GUpOcTqa.js → management-settings-D_JQ6_X0.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-B_qnAcW2.js → markdown-view-BHFFusQs.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-C0Pc-wSY.js → media-plugins-BVPTMWJI.js} +1 -1
- package/dist/gateway/static/root/assets/messages-C1SUo4gG.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-cache-Jj8dvYcv.js +1 -0
- package/dist/gateway/static/root/assets/{note-detail-panel-CqealmSc.js → note-detail-panel-CCnfurBR.js} +3 -3
- package/dist/gateway/static/root/assets/{notes-api-sBgBcyLW.js → notes-api-CSLVCZBn.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-BtTU5mnS.js → notes-page-D9u_znxM.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-capture-button-Yt-BpPRh.js → page-context-capture-button-BO3FoRej.js} +1 -1
- package/dist/gateway/static/root/assets/{personal-page-C8SEQpEu.js → personal-page-BJn6UHAF.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-etM6Ijfe.js → product-open-page-Dso2_hyl.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-content-C6aeRrWe.js → product-preview-content-CkvVb3EA.js} +1 -1
- package/dist/gateway/static/root/assets/{project-detail-page-K4ASOTki.js → project-detail-page-UjrrzE3H.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-BssImjwl.js → projects-page-C1h63P2M.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-Bh9UBb-f.js → registry-api-CoMBYjHD.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-BznC_5H0.js → remote-access-hub-BJifH8AB.js} +1 -1
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BJAzqQik.js → runtime-tools-settings-panel-vG1wqcEb.js} +1 -1
- package/dist/gateway/static/root/assets/{scenes-page-uZUXm03X.js → scenes-page-CwoAoYMX.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-SA3Ld7zf.js → schema-form-BIsHdyz7.js} +1 -1
- package/dist/gateway/static/root/assets/{send-session-input-Di3Q846r.js → send-session-input-CLhR1uEp.js} +1 -1
- package/dist/gateway/static/root/assets/{session-api-yjpEz4pP.js → session-api-u_4_kFQt.js} +1 -1
- package/dist/gateway/static/root/assets/{session-manager-CWjhJxJs.js → session-manager-B06ZCie_.js} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-DdL8zVrF.js → sessions-page-BcCLp3yU.js} +1 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-D114UdRI.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-CUJQMNF7.js → settings-page-z9Jlk0BL.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-BGBWC0Bc.js → setup-status-panel-CrpXECqe.js} +1 -1
- package/dist/gateway/static/root/assets/{share-link-dialog-HCHM8qnf.js → share-link-dialog-XhiuPKF4.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-DJmyACyp.js → share-preview-page-Vc0TQuZ8.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-api-c0dfWz6h.js → shares-api-BVSb1vh4.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-BzqcGh7W.js → shares-settings-D9XpTJXP.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-api-9XSn7R8L.js → skill-api-DtPOf1aW.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-reload-api-Ge5XymHa.js → skill-reload-api-BsLx_FXd.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-DwyDfh9g.js → skills-page-Bq9-2b9U.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-B6axBPLO.js → system-settings-panel-P7T729uD.js} +1 -1
- package/dist/gateway/static/root/assets/{task-detail-page-ftCTqBDB.js → task-detail-page-CsB9AFx6.js} +1 -1
- package/dist/gateway/static/root/assets/{task-expandable-content-hYcgCEE3.js → task-expandable-content-DxeBTJvh.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-BOfCKgl6.js → theme-store-KcQhCg1-.js} +1 -1
- package/dist/gateway/static/root/assets/{tracing-settings-page-DDWFXcST.js → tracing-settings-page-DJRAP3nb.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-BYU2v0im.js → tunnel-api-CuowqIZ7.js} +1 -1
- package/dist/gateway/static/root/assets/usage-page-avX3msoZ.js +1 -0
- package/dist/gateway/static/root/assets/{use-autosave-CSckcjFx.js → use-autosave-C-IWxbzm.js} +1 -1
- package/dist/gateway/static/root/assets/{use-composer-attachments-OFlldkKg.js → use-composer-attachments-Dxphaxk-.js} +1 -1
- package/dist/gateway/static/root/assets/{use-file-preview-expanded-BF1TeNXP.js → use-file-preview-expanded-Du37Gofn.js} +2 -2
- package/dist/gateway/static/root/assets/{user-model-page-CqnGITYf.js → user-model-page-DGDBWw7P.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-GEw5x2fU.js → voice-api-key-field-7BImy8Jc.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-3yyVwXln.js → voice-config-api-6MINytQl.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-BDM7BEKH.js → work-discovery-overlay-BgJNz2tH.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BBwx-tUb.js → workflow-run-setup-panel-1I2q2J_U.js} +1 -1
- package/dist/gateway/static/root/assets/{workflows-page-BHigZn6E.js → workflows-page-DhJl9pnO.js} +1 -1
- package/dist/gateway/static/root/assets/{workspace-api-CTm8s6Jr.js → workspace-api-CXiyhTwv.js} +2 -2
- package/dist/gateway/static/root/assets/xopc-cloud-account-card-CnPBP1V_.js +1 -0
- package/dist/gateway/static/root/index.html +26 -26
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/cloud-credits.js +80 -0
- package/dist/packages/gateway-contract/src/index.js +2 -0
- package/dist/src/agent/agent-manager.js +4 -4
- package/dist/src/agent/background-review/run-background-review.js +1 -1
- package/dist/src/agent/client-error-format.d.ts +1 -1
- package/dist/src/agent/client-error-format.js +7 -0
- package/dist/src/agent/embedded/model-runtime.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +2 -2
- package/dist/src/agent/embedded/run-turn.js +40 -4
- package/dist/src/agent/embedded/xopc-stream-bridge.js +18 -0
- package/dist/src/agent/image/generation/openai-images-provider.d.ts +2 -1
- package/dist/src/agent/image/generation/openai-images-provider.js +13 -7
- package/dist/src/agent/image/generation/providers/xopc-cloud.js +14 -2
- package/dist/src/agent/image/tool-model-config.js +1 -1
- package/dist/src/agent/service.js +3 -3
- package/dist/src/agent/session/session-inspector.js +1 -1
- package/dist/src/agent/tasks/task-judge-service.js +3 -3
- package/dist/src/agent-config/schema.d.ts +4 -0
- package/dist/src/agent-config/schema.js +1 -0
- package/dist/src/ai-assist/text-assist.js +1 -1
- package/dist/src/auth/credentials.js +2 -2
- package/dist/src/auth/model-credential-store.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/chat-commands/builtins/config.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/image-providers.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/models.js +42 -1
- package/dist/src/cli/commands/onboard/model.js +3 -3
- package/dist/src/computer/runtime.js +4 -1
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/loader.js +1 -1
- package/dist/src/config/models-json.js +2 -2
- package/dist/src/extensions/activation-context.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -0
- package/dist/src/gateway/hono/lib/config-payload.js +2 -2
- package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
- package/dist/src/gateway/hono/routes/models.js +4 -4
- package/dist/src/gateway/hono/routes/observability.js +1 -1
- package/dist/src/gateway/hono/routes/usage.js +15 -5
- package/dist/src/gateway/hono/routes/voice.js +1 -1
- package/dist/src/gateway/service/config-coordinator.js +1 -1
- package/dist/src/gateway/service/session-command-service.js +1 -1
- package/dist/src/gateway/service.js +4 -4
- package/dist/src/home-intelligence/generator.js +1 -1
- package/dist/src/notes/service.js +1 -1
- package/dist/src/observability/runtime.js +1 -1
- package/dist/src/personal-agent/proactivity/service.js +2 -2
- package/dist/src/personal-agent/reply-composer.js +2 -2
- package/dist/src/platform/client.d.ts +1 -1
- package/dist/src/platform/contracts.d.ts +1 -1
- package/dist/src/platform/index.js +1 -1
- package/dist/src/providers/index.js +4 -4
- package/dist/src/providers/model-call.js +15 -1
- package/dist/src/providers/model-registry.js +2 -2
- package/dist/src/providers/provider-auth-service.js +1 -1
- package/dist/src/providers/provider-disconnect-core.js +1 -1
- package/dist/src/providers/register-runtime-providers.js +1 -1
- package/dist/src/providers/xopc-cloud-account-service.d.ts +7 -23
- package/dist/src/providers/xopc-cloud-account-service.js +49 -29
- package/dist/src/providers/xopc-cloud-catalog-coordinator.js +1 -1
- package/dist/src/providers/xopc-cloud-credit-budget.d.ts +14 -0
- package/dist/src/providers/xopc-cloud-credit-budget.js +61 -0
- package/dist/src/storage/sqlite/ai-usage-repository.d.ts +9 -0
- package/dist/src/storage/sqlite/ai-usage-repository.js +94 -5
- package/dist/src/storage/sqlite/migrations/242_cloud_usage_receipts.sql +5 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/tasks/task-main-update-decision-service.js +2 -2
- package/dist/src/tui/backends/embedded-backend.js +1 -1
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/usage/cloud-capability.d.ts +2 -0
- package/dist/src/usage/cloud-capability.js +34 -0
- package/dist/src/usage/cloud-receipts.d.ts +10 -0
- package/dist/src/usage/cloud-receipts.js +55 -0
- package/dist/src/usage/cost.js +1 -0
- package/dist/src/usage/recorder.js +3 -1
- package/dist/src/usage/scenario-registry.js +15 -0
- package/dist/src/voice/realtime/runtime.js +27 -22
- package/dist/src/voice/stt/providers/xopc-cloud-transcription.js +28 -14
- package/dist/src/voice/tts/providers/xopc-cloud-speech.js +39 -29
- package/dist/src/voice/tts/speech-provider-types.d.ts +1 -0
- package/dist/src/work-discovery/service.js +2 -2
- package/dist/src/workflows/service/workflow-run-service.js +1 -1
- package/package.json +4 -4
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BdxzGSiO.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-BheKaO6d.js +0 -1
- package/dist/gateway/static/root/assets/messages-Bb2GK-Nj.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-cache-DyPPksMP.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DmawLOHR.js +0 -1
- package/dist/gateway/static/root/assets/usage-page-BvPcpxTQ.js +0 -1
|
@@ -11,7 +11,7 @@
|
|
|
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-
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-B40-KDN8.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">
|
|
@@ -25,15 +25,15 @@
|
|
|
25
25
|
<link rel="modulepreload" crossorigin href="/assets/download-Dk-ZjtO6.js">
|
|
26
26
|
<link rel="modulepreload" crossorigin href="/assets/plus-Q2yW6OE7.js">
|
|
27
27
|
<link rel="modulepreload" crossorigin href="/assets/x-B_N4OPjy.js">
|
|
28
|
-
<link rel="modulepreload" crossorigin href="/assets/messages-
|
|
29
|
-
<link rel="modulepreload" crossorigin href="/assets/locale-store-
|
|
28
|
+
<link rel="modulepreload" crossorigin href="/assets/messages-C1SUo4gG.js">
|
|
29
|
+
<link rel="modulepreload" crossorigin href="/assets/locale-store-rWFLl-p4.js">
|
|
30
30
|
<link rel="modulepreload" crossorigin href="/assets/cn-JdwAhgNB.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/schemas-CObaziC7.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/local-apps-yys1VChX.js">
|
|
33
33
|
<link rel="modulepreload" crossorigin href="/assets/product-delivery-BAks11S4.js">
|
|
34
34
|
<link rel="modulepreload" crossorigin href="/assets/app-link-4gpFbdsr.js">
|
|
35
35
|
<link rel="modulepreload" crossorigin href="/assets/copy-to-clipboard-HOJ79TWv.js">
|
|
36
|
-
<link rel="modulepreload" crossorigin href="/assets/markdown-view-
|
|
36
|
+
<link rel="modulepreload" crossorigin href="/assets/markdown-view-BHFFusQs.js">
|
|
37
37
|
<link rel="modulepreload" crossorigin href="/assets/check-DUBLcKHA.js">
|
|
38
38
|
<link rel="modulepreload" crossorigin href="/assets/copy-Dv6d4Dvw.js">
|
|
39
39
|
<link rel="modulepreload" crossorigin href="/assets/button-CS04eWY9.js">
|
|
@@ -69,29 +69,29 @@
|
|
|
69
69
|
<link rel="modulepreload" crossorigin href="/assets/rotate-cw-LIg3Am9S.js">
|
|
70
70
|
<link rel="modulepreload" crossorigin href="/assets/search-DA7gz22f.js">
|
|
71
71
|
<link rel="modulepreload" crossorigin href="/assets/index.module-Cd9ENXfk.js">
|
|
72
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-
|
|
73
|
-
<link rel="modulepreload" crossorigin href="/assets/session-api-
|
|
72
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-TYSQEQcG.js">
|
|
73
|
+
<link rel="modulepreload" crossorigin href="/assets/session-api-u_4_kFQt.js">
|
|
74
74
|
<link rel="modulepreload" crossorigin href="/assets/constants-Dy8Gw0sF.js">
|
|
75
75
|
<link rel="modulepreload" crossorigin href="/assets/app-chrome-BeB4KgOf.js">
|
|
76
76
|
<link rel="modulepreload" crossorigin href="/assets/attachment-utils-core-BIOUBrpT.js">
|
|
77
77
|
<link rel="modulepreload" crossorigin href="/assets/files-Bw4SBGdM.js">
|
|
78
|
-
<link rel="modulepreload" crossorigin href="/assets/workspace-api-
|
|
78
|
+
<link rel="modulepreload" crossorigin href="/assets/workspace-api-CXiyhTwv.js">
|
|
79
79
|
<link rel="modulepreload" crossorigin href="/assets/electron-env-Dit0bHgy.js">
|
|
80
80
|
<link rel="modulepreload" crossorigin href="/assets/use-async-resource-GrnWNwMZ.js">
|
|
81
|
-
<link rel="modulepreload" crossorigin href="/assets/activity-store-
|
|
82
|
-
<link rel="modulepreload" crossorigin href="/assets/use-file-preview-expanded-
|
|
81
|
+
<link rel="modulepreload" crossorigin href="/assets/activity-store-BeYLqqr8.js">
|
|
82
|
+
<link rel="modulepreload" crossorigin href="/assets/use-file-preview-expanded-Du37Gofn.js">
|
|
83
83
|
<link rel="modulepreload" crossorigin href="/assets/mic-CuUb7zc-.js">
|
|
84
84
|
<link rel="modulepreload" crossorigin href="/assets/globe-DSSGFWFn.js">
|
|
85
|
-
<link rel="modulepreload" crossorigin href="/assets/share-link-dialog-
|
|
86
|
-
<link rel="modulepreload" crossorigin href="/assets/local-session-drafts-
|
|
85
|
+
<link rel="modulepreload" crossorigin href="/assets/share-link-dialog-XhiuPKF4.js">
|
|
86
|
+
<link rel="modulepreload" crossorigin href="/assets/local-session-drafts-Cg9RdsNN.js">
|
|
87
87
|
<link rel="modulepreload" crossorigin href="/assets/tasks-DwKXgZ-I.js">
|
|
88
|
-
<link rel="modulepreload" crossorigin href="/assets/capabilities-
|
|
88
|
+
<link rel="modulepreload" crossorigin href="/assets/capabilities-CquUV0DP.js">
|
|
89
89
|
<link rel="modulepreload" crossorigin href="/assets/skill-wire-pattern-BPpeIcCi.js">
|
|
90
|
-
<link rel="modulepreload" crossorigin href="/assets/shares-api-
|
|
91
|
-
<link rel="modulepreload" crossorigin href="/assets/capabilities-
|
|
92
|
-
<link rel="modulepreload" crossorigin href="/assets/use-composer-attachments-
|
|
90
|
+
<link rel="modulepreload" crossorigin href="/assets/shares-api-BVSb1vh4.js">
|
|
91
|
+
<link rel="modulepreload" crossorigin href="/assets/capabilities-D4KFLtqM.js">
|
|
92
|
+
<link rel="modulepreload" crossorigin href="/assets/use-composer-attachments-Dxphaxk-.js">
|
|
93
93
|
<link rel="modulepreload" crossorigin href="/assets/git-branch-Dh9uxTot.js">
|
|
94
|
-
<link rel="modulepreload" crossorigin href="/assets/notes-api-
|
|
94
|
+
<link rel="modulepreload" crossorigin href="/assets/notes-api-CSLVCZBn.js">
|
|
95
95
|
<link rel="modulepreload" crossorigin href="/assets/message-square-fVE7Ghj1.js">
|
|
96
96
|
<link rel="modulepreload" crossorigin href="/assets/pause-DuPxgSxk.js">
|
|
97
97
|
<link rel="modulepreload" crossorigin href="/assets/play-kxZvpBg8.js">
|
|
@@ -99,18 +99,18 @@
|
|
|
99
99
|
<link rel="modulepreload" crossorigin href="/assets/settings-2-D-csvaET.js">
|
|
100
100
|
<link rel="modulepreload" crossorigin href="/assets/sparkles-DHlfQFAF.js">
|
|
101
101
|
<link rel="modulepreload" crossorigin href="/assets/middleware-Pd0e8Igk.js">
|
|
102
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-realtime-store-
|
|
103
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-realtime-
|
|
102
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-realtime-store-cLCDEe4D.js">
|
|
103
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-realtime-C3WQQY10.js">
|
|
104
104
|
<link rel="modulepreload" crossorigin href="/assets/tool-activity-BtJkgjFf.js">
|
|
105
|
-
<link rel="modulepreload" crossorigin href="/assets/registry-api-
|
|
106
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-
|
|
107
|
-
<link rel="modulepreload" crossorigin href="/assets/agents-admin-api-
|
|
108
|
-
<link rel="modulepreload" crossorigin href="/assets/session-manager-
|
|
109
|
-
<link rel="modulepreload" crossorigin href="/assets/send-session-input-
|
|
110
|
-
<link rel="modulepreload" crossorigin href="/assets/theme-store-
|
|
111
|
-
<link rel="modulepreload" crossorigin href="/assets/extension-provider-
|
|
105
|
+
<link rel="modulepreload" crossorigin href="/assets/registry-api-CoMBYjHD.js">
|
|
106
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-BoRkBnsw.js">
|
|
107
|
+
<link rel="modulepreload" crossorigin href="/assets/agents-admin-api-B4tgTbWG.js">
|
|
108
|
+
<link rel="modulepreload" crossorigin href="/assets/session-manager-B06ZCie_.js">
|
|
109
|
+
<link rel="modulepreload" crossorigin href="/assets/send-session-input-CLhR1uEp.js">
|
|
110
|
+
<link rel="modulepreload" crossorigin href="/assets/theme-store-KcQhCg1-.js">
|
|
111
|
+
<link rel="modulepreload" crossorigin href="/assets/extension-provider-DxlAZ2iy.js">
|
|
112
112
|
<link rel="modulepreload" crossorigin href="/assets/loopi-Djb8XU3l.js">
|
|
113
|
-
<link rel="modulepreload" crossorigin href="/assets/models-hub-cache-
|
|
113
|
+
<link rel="modulepreload" crossorigin href="/assets/models-hub-cache-Jj8dvYcv.js">
|
|
114
114
|
<link rel="modulepreload" crossorigin href="/assets/skill-api-utils-C7V4JVXM.js">
|
|
115
115
|
<link rel="modulepreload" crossorigin href="/assets/date-formatters-CUZAyDEg.js">
|
|
116
116
|
<link rel="modulepreload" crossorigin href="/assets/settings-form-draft-Dy10ldo8.js">
|
package/dist/package.js
CHANGED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
//#region packages/gateway-contract/src/cloud-credits.ts
|
|
4
|
+
/** Format integers exactly, including quantities too large for decimal Number arithmetic. */
|
|
5
|
+
function creditDecimal(micro) {
|
|
6
|
+
creditMicroSchema.parse(micro);
|
|
7
|
+
const value = BigInt(micro);
|
|
8
|
+
const fraction = String(value % 10000n).padStart(4, "0").replace(/0+$/, "");
|
|
9
|
+
return `${value / 10000n}${fraction ? `.${fraction}` : ""}`;
|
|
10
|
+
}
|
|
11
|
+
var creditMicroSchema, creditUnitSchema, cloudAccountSummarySchema, cloudCreditBudgetSchema, cloudBillingReceiptSchema;
|
|
12
|
+
var init_cloud_credits = __esmMin((() => {
|
|
13
|
+
creditMicroSchema = z.string().regex(/^(0|[1-9]\d{0,15})$/).refine((value) => BigInt(value) <= BigInt(Number.MAX_SAFE_INTEGER), "Credit amount exceeds supported range");
|
|
14
|
+
creditUnitSchema = z.object({
|
|
15
|
+
unit: z.literal("credit"),
|
|
16
|
+
microPerCredit: z.literal("10000"),
|
|
17
|
+
version: z.literal("credit-v1"),
|
|
18
|
+
standardCreditsPerYuan: z.string().regex(/^\d+$/)
|
|
19
|
+
});
|
|
20
|
+
cloudAccountSummarySchema = z.object({
|
|
21
|
+
schemaVersion: z.literal(2),
|
|
22
|
+
creditUnit: creditUnitSchema,
|
|
23
|
+
balance: z.object({
|
|
24
|
+
availableCreditMicro: creditMicroSchema,
|
|
25
|
+
purchasedCreditMicro: creditMicroSchema,
|
|
26
|
+
grantedCreditMicro: creditMicroSchema,
|
|
27
|
+
usageReservedCreditMicro: creditMicroSchema,
|
|
28
|
+
refundReservedCreditMicro: creditMicroSchema,
|
|
29
|
+
expiring: z.array(z.object({
|
|
30
|
+
id: z.string(),
|
|
31
|
+
creditMicro: creditMicroSchema,
|
|
32
|
+
expiresAt: z.number().int().nonnegative()
|
|
33
|
+
})),
|
|
34
|
+
updatedAt: z.string().datetime()
|
|
35
|
+
}),
|
|
36
|
+
usage: z.object({
|
|
37
|
+
days: z.union([
|
|
38
|
+
z.literal(1),
|
|
39
|
+
z.literal(7),
|
|
40
|
+
z.literal(30)
|
|
41
|
+
]),
|
|
42
|
+
requests: z.number().int().nonnegative(),
|
|
43
|
+
inputTokens: z.number().int().nonnegative(),
|
|
44
|
+
outputTokens: z.number().int().nonnegative(),
|
|
45
|
+
totalTokens: z.number().int().nonnegative(),
|
|
46
|
+
errors: z.number().int().nonnegative(),
|
|
47
|
+
averageLatencyMs: z.number().nonnegative(),
|
|
48
|
+
chargedCreditMicro: creditMicroSchema
|
|
49
|
+
}),
|
|
50
|
+
links: z.object({
|
|
51
|
+
details: z.string().url(),
|
|
52
|
+
purchase: z.string().url()
|
|
53
|
+
})
|
|
54
|
+
});
|
|
55
|
+
cloudCreditBudgetSchema = z.object({
|
|
56
|
+
id: z.string().uuid(),
|
|
57
|
+
limitCreditMicro: creditMicroSchema,
|
|
58
|
+
reservedCreditMicro: creditMicroSchema,
|
|
59
|
+
chargedCreditMicro: creditMicroSchema,
|
|
60
|
+
remainingCreditMicro: creditMicroSchema,
|
|
61
|
+
revision: z.number().int().positive(),
|
|
62
|
+
createdAt: z.number().int().nonnegative()
|
|
63
|
+
});
|
|
64
|
+
cloudBillingReceiptSchema = z.object({
|
|
65
|
+
requestId: z.string(),
|
|
66
|
+
model: z.string(),
|
|
67
|
+
state: z.string(),
|
|
68
|
+
reservedCreditMicro: creditMicroSchema,
|
|
69
|
+
chargedCreditMicro: creditMicroSchema.nullable(),
|
|
70
|
+
releasedCreditMicro: creditMicroSchema,
|
|
71
|
+
ratedCreditMicro: creditMicroSchema.nullable(),
|
|
72
|
+
absorbedCreditMicro: creditMicroSchema.nullable(),
|
|
73
|
+
priceSnapshot: z.unknown().nullable(),
|
|
74
|
+
createdAt: z.number().int().nonnegative(),
|
|
75
|
+
settledAt: z.number().int().nonnegative().nullable()
|
|
76
|
+
});
|
|
77
|
+
}));
|
|
78
|
+
//#endregion
|
|
79
|
+
init_cloud_credits();
|
|
80
|
+
export { cloudAccountSummarySchema, cloudBillingReceiptSchema, cloudCreditBudgetSchema, creditDecimal, creditMicroSchema, creditUnitSchema, init_cloud_credits };
|
|
@@ -31,6 +31,7 @@ import { init_device_pairing } from "./device-pairing.js";
|
|
|
31
31
|
import { init_gateway_scopes } from "./gateway-scopes.js";
|
|
32
32
|
import { init_browser_tab_binding } from "./browser-tab-binding.js";
|
|
33
33
|
import { init_model_selection } from "./model-selection.js";
|
|
34
|
+
import { init_cloud_credits } from "./cloud-credits.js";
|
|
34
35
|
import { init_connection_waits } from "./connection-waits.js";
|
|
35
36
|
import { init_clarifications } from "./clarifications.js";
|
|
36
37
|
import { init_discussions } from "./discussions.js";
|
|
@@ -72,6 +73,7 @@ var init_src = __esmMin((() => {
|
|
|
72
73
|
init_browser_page_context();
|
|
73
74
|
init_browser_tab_binding();
|
|
74
75
|
init_model_selection();
|
|
76
|
+
init_cloud_credits();
|
|
75
77
|
init_connection_waits();
|
|
76
78
|
init_clarifications();
|
|
77
79
|
init_discussions();
|
|
@@ -9,16 +9,16 @@ import { init_sqlite } from "../storage/sqlite/index.js";
|
|
|
9
9
|
import { expandWorkspacePathString, init_workspace_path } from "../config/workspace-path.js";
|
|
10
10
|
import { init_agent_scope, listAgentEntries, resolveAgentProfileDir } from "./agent-scope.js";
|
|
11
11
|
import { extractTextContent } from "./context/workspace.js";
|
|
12
|
+
import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
|
|
12
13
|
import { init_paths, resolveBundledSkillsDir } from "../config/paths.js";
|
|
13
14
|
import { CredentialResolver, init_credentials } from "../auth/credentials.js";
|
|
14
|
-
import { traceTools } from "../observability/runtime.js";
|
|
15
|
-
import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
|
|
16
|
-
import { applyConfigOverrides } from "../config/runtime-overrides.js";
|
|
17
|
-
import { resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
18
15
|
import { init_sync_provider_auth, resolveProviderApiKeySync } from "../auth/sync-provider-auth.js";
|
|
19
16
|
import { getApiKeySync, getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
|
|
20
17
|
import { createExtensionAwareStreamFn } from "../providers/extension-stream-bridge.js";
|
|
18
|
+
import { traceTools } from "../observability/runtime.js";
|
|
21
19
|
import { continuesAfterTool, trackAiUsageStream } from "../usage/recorder.js";
|
|
20
|
+
import { applyConfigOverrides } from "../config/runtime-overrides.js";
|
|
21
|
+
import { resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
22
22
|
import { resolveUserContextSessionAccess } from "../user-context/access-policy.js";
|
|
23
23
|
import { isPersonalConversation } from "../personal-agent/repository.js";
|
|
24
24
|
import { PersonalPromptContext } from "../personal-agent/prompt-context.js";
|
|
@@ -5,11 +5,11 @@ import { getSessionMetadata } from "../../storage/sqlite/session-read-repository
|
|
|
5
5
|
import { loadCompactionSourceSnapshot } from "../../storage/sqlite/transcript-repository.js";
|
|
6
6
|
import { init_sqlite } from "../../storage/sqlite/index.js";
|
|
7
7
|
import { extractTextContent } from "../context/workspace.js";
|
|
8
|
-
import { extractProfileAgentId } from "../../config/agent-profile.js";
|
|
9
8
|
import { init_sync_provider_auth, resolveProviderApiKeySync } from "../../auth/sync-provider-auth.js";
|
|
10
9
|
import { getApiKeySync, init_providers, resolveModel } from "../../providers/index.js";
|
|
11
10
|
import { createExtensionAwareStreamFn } from "../../providers/extension-stream-bridge.js";
|
|
12
11
|
import { trackAiUsageStream } from "../../usage/recorder.js";
|
|
12
|
+
import { extractProfileAgentId } from "../../config/agent-profile.js";
|
|
13
13
|
import { getAssertionSlot, listUserAssertions } from "../../user-model/repository.js";
|
|
14
14
|
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
15
15
|
import { isAssistantTurnAborted, isAssistantTurnFailed } from "../orchestration/llm-turn-retry.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type AgentRunErrorKind = 'provider_setup_required' | 'provider_auth_invalid' | 'rate_limit' | 'timeout' | 'billing' | 'xopc_quota_exhausted' | 'xopc_platform_limit' | 'unknown';
|
|
1
|
+
export type AgentRunErrorKind = 'provider_setup_required' | 'provider_auth_invalid' | 'rate_limit' | 'timeout' | 'billing' | 'xopc_quota_exhausted' | 'xopc_platform_limit' | 'xopc_credit_budget_exhausted' | 'unknown';
|
|
2
2
|
export type AgentRunErrorPayload = {
|
|
3
3
|
kind: AgentRunErrorKind;
|
|
4
4
|
code: string;
|
|
@@ -67,6 +67,13 @@ function formatAgentRunErrorForClient(rawError, context) {
|
|
|
67
67
|
message: trimmed
|
|
68
68
|
});
|
|
69
69
|
}
|
|
70
|
+
if (/credit_budget_exhausted|(?:task Credit|Credit task) budget exhausted/i.test(trimmed)) return JSON.stringify({
|
|
71
|
+
kind: "xopc_credit_budget_exhausted",
|
|
72
|
+
code: "credit_budget_exhausted",
|
|
73
|
+
message: trimmed,
|
|
74
|
+
provider: "xopc-cloud",
|
|
75
|
+
deepLink: "/settings/agent-defaults?panel=runtime"
|
|
76
|
+
});
|
|
70
77
|
const reason = classifyFailoverReason(trimmed);
|
|
71
78
|
const xopcPlatformLimit = context?.provider === "xopc-cloud" && XOPC_PLATFORM_LIMIT_RE.test(trimmed);
|
|
72
79
|
const xopcQuotaExhausted = context?.provider === "xopc-cloud" && (XOPC_QUOTA_RE.test(trimmed) || reason === "billing");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { init_paths, resolveModelsJsonPath } from "../../config/paths.js";
|
|
2
|
-
import { init_register_bundled_oauth_flows, registerBundledOAuthFlows } from "../../providers/register-bundled-oauth-flows.js";
|
|
3
2
|
import { assertCurrentModelProvider, init_provider_policy } from "../../providers/provider-policy.js";
|
|
3
|
+
import { init_register_bundled_oauth_flows, registerBundledOAuthFlows } from "../../providers/register-bundled-oauth-flows.js";
|
|
4
4
|
import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
|
|
5
5
|
import { init_sync_provider_auth, resolveProviderApiKeySync } from "../../auth/sync-provider-auth.js";
|
|
6
6
|
import { XopcModelCredentialStore, init_model_credential_store } from "../../auth/model-credential-store.js";
|
|
@@ -2,10 +2,10 @@ 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 { setTraceIdentity, startObservation, traceOperation, traceRun } from "../../observability/runtime.js";
|
|
6
|
-
import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
|
|
7
5
|
import { init_providers, resolveModel } from "../../providers/index.js";
|
|
8
6
|
import { appendDynamicPromptSection } from "../prompt/cache-boundary.js";
|
|
7
|
+
import { setTraceIdentity, startObservation, traceOperation, traceRun } from "../../observability/runtime.js";
|
|
8
|
+
import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
|
|
9
9
|
import { isPersonalConversation } from "../../personal-agent/repository.js";
|
|
10
10
|
import { runWithEmbeddedExecutionSession } from "./execution-context.js";
|
|
11
11
|
import { resolveAgentTurnTimeoutMs } from "../orchestration/run-agent-turn-with-timeout.js";
|
|
@@ -7,8 +7,9 @@ import { getSessionMetadata } from "../../storage/sqlite/session-read-repository
|
|
|
7
7
|
import { init_session_repository } from "../../storage/sqlite/session-repository.js";
|
|
8
8
|
import { init_sqlite } from "../../storage/sqlite/index.js";
|
|
9
9
|
import { setTraceIdentity, traceOperation, traceRun, traceTools } from "../../observability/runtime.js";
|
|
10
|
-
import { resolveEffectiveAgentConfigForSession } from "../../config/agent-profile.js";
|
|
11
10
|
import { continuesAfterTool, trackAiUsageStream } from "../../usage/recorder.js";
|
|
11
|
+
import { cloudCreditBudgetStopMessage, isCloudCreditBudgetExhausted, reportCloudCreditError, withCloudCreditBudget } from "../../providers/xopc-cloud-credit-budget.js";
|
|
12
|
+
import { resolveEffectiveAgentConfigForSession } from "../../config/agent-profile.js";
|
|
12
13
|
import { runWithEmbeddedExecutionSession } from "./execution-context.js";
|
|
13
14
|
import { externalPolicyContext } from "./tool-metadata.js";
|
|
14
15
|
import { isComputerControlActive, isComputerLeaseTool, stopComputerControl } from "../../computer/control-guard.js";
|
|
@@ -242,10 +243,45 @@ async function maybeRecoverInterruptedContext(params) {
|
|
|
242
243
|
return true;
|
|
243
244
|
}
|
|
244
245
|
async function runXopcEmbeddedTurn(params) {
|
|
245
|
-
|
|
246
|
+
const limitCreditMicro = isXopcDatabaseOpen() && getSessionMetadata(params.conversationId) ? resolveEffectiveAgentConfigForSession(params.conversationId).config.runtime.cloudCreditLimitPerRunMicro : void 0;
|
|
247
|
+
return withCloudCreditBudget({
|
|
246
248
|
conversationId: params.conversationId,
|
|
247
|
-
runId: params.runId
|
|
248
|
-
|
|
249
|
+
runId: params.runId,
|
|
250
|
+
limitCreditMicro
|
|
251
|
+
}, async () => {
|
|
252
|
+
try {
|
|
253
|
+
const result = await traceRun("agent.run", {
|
|
254
|
+
conversationId: params.conversationId,
|
|
255
|
+
runId: params.runId
|
|
256
|
+
}, () => runXopcEmbeddedTurnInner(params), params.userMessage);
|
|
257
|
+
const stopped = cloudCreditBudgetStopMessage();
|
|
258
|
+
if (stopped) return {
|
|
259
|
+
...result,
|
|
260
|
+
ok: false,
|
|
261
|
+
retryable: false,
|
|
262
|
+
errorMessage: stopped
|
|
263
|
+
};
|
|
264
|
+
if (result.errorMessage && isCloudCreditBudgetExhausted(result.errorMessage)) {
|
|
265
|
+
reportCloudCreditError(result.errorMessage);
|
|
266
|
+
return {
|
|
267
|
+
...result,
|
|
268
|
+
retryable: false
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
return result;
|
|
272
|
+
} catch (error) {
|
|
273
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
274
|
+
if (isCloudCreditBudgetExhausted(message)) {
|
|
275
|
+
reportCloudCreditError(message);
|
|
276
|
+
return {
|
|
277
|
+
ok: false,
|
|
278
|
+
retryable: false,
|
|
279
|
+
errorMessage: message
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
throw error;
|
|
283
|
+
}
|
|
284
|
+
});
|
|
249
285
|
}
|
|
250
286
|
async function runXopcEmbeddedTurnInner(params) {
|
|
251
287
|
const { conversationId, runId, userMessage, model, tools: rawTools, systemPrompt, thinkingLevel, workspaceDir, sessionStore, onEvent } = params;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import "../../providers/constants.js";
|
|
2
2
|
import { init_providers } from "../../providers/index.js";
|
|
3
3
|
import { createExtensionAwareStreamFn } from "../../providers/extension-stream-bridge.js";
|
|
4
|
+
import { withCloudUsageResponse } from "../../usage/cloud-receipts.js";
|
|
5
|
+
import { assertCloudCreditBudgetActive, cloudCreditBudgetHeaders, hasCloudCreditBudget, reportCloudCreditError } from "../../providers/xopc-cloud-credit-budget.js";
|
|
4
6
|
import { preparePromptCacheContext, withPromptCachePayloadTransform } from "../../providers/prompt-cache-payload.js";
|
|
5
7
|
import { getCurrentSystemPrompt, getCurrentTools, normalizeContext } from "@earendil-works/pi-ai";
|
|
6
8
|
//#region src/agent/embedded/xopc-stream-bridge.ts
|
|
@@ -17,6 +19,8 @@ init_providers();
|
|
|
17
19
|
function wrapStreamFnForXopcExtensions(originalStreamFn, promptCachePolicy) {
|
|
18
20
|
const extensionStreamFn = createExtensionAwareStreamFn();
|
|
19
21
|
return ((model, context, options) => {
|
|
22
|
+
assertCloudCreditBudgetActive();
|
|
23
|
+
if (model.provider === "xopc-cloud") options = withCloudUsageResponse(options);
|
|
20
24
|
const promptContext = {
|
|
21
25
|
systemPrompt: getCurrentSystemPrompt(context.messages),
|
|
22
26
|
tools: getCurrentTools(context.messages)
|
|
@@ -28,6 +32,20 @@ function wrapStreamFnForXopcExtensions(originalStreamFn, promptCachePolicy) {
|
|
|
28
32
|
messages: context.messages.filter((message) => message.role !== "system")
|
|
29
33
|
});
|
|
30
34
|
if (model.baseUrl === "extension://provider-plugin") return extensionStreamFn(model, providerContext, options);
|
|
35
|
+
if (model.provider === "xopc-cloud" && hasCloudCreditBudget()) return (async () => {
|
|
36
|
+
const headers = await cloudCreditBudgetHeaders();
|
|
37
|
+
const stream = await originalStreamFn(model, providerContext, withPromptCachePayloadTransform(model, promptContext, {
|
|
38
|
+
...options,
|
|
39
|
+
headers: {
|
|
40
|
+
...options?.headers,
|
|
41
|
+
...headers
|
|
42
|
+
}
|
|
43
|
+
}, promptCachePolicy));
|
|
44
|
+
stream.result().then((message) => {
|
|
45
|
+
if (message.errorMessage) reportCloudCreditError(message.errorMessage);
|
|
46
|
+
}).catch(() => {});
|
|
47
|
+
return stream;
|
|
48
|
+
})();
|
|
31
49
|
return originalStreamFn(model, providerContext, withPromptCachePayloadTransform(model, promptContext, options, promptCachePolicy));
|
|
32
50
|
});
|
|
33
51
|
}
|
|
@@ -35,6 +35,7 @@ export interface OpenAiImagesEndpointResolution {
|
|
|
35
35
|
privateNetworkPolicy?: PrivateNetworkPolicy;
|
|
36
36
|
}
|
|
37
37
|
export interface OpenAiImagesProviderOptions {
|
|
38
|
+
onResponse?: (response: Response) => void;
|
|
38
39
|
id: string;
|
|
39
40
|
label: string;
|
|
40
41
|
defaultModel: string;
|
|
@@ -45,7 +46,7 @@ export interface OpenAiImagesProviderOptions {
|
|
|
45
46
|
/** Resolve API key for one request. May return null when using OAuth/header auth. */
|
|
46
47
|
resolveApiKey: (req: ImageGenerationRequest) => string | null | undefined | Promise<string | null | undefined>;
|
|
47
48
|
/** Resolve endpoint info per-request (region, baseUrl override, Azure deployment, …). */
|
|
48
|
-
resolveEndpoint: (req: ImageGenerationRequest) => OpenAiImagesEndpointResolution
|
|
49
|
+
resolveEndpoint: (req: ImageGenerationRequest) => OpenAiImagesEndpointResolution | Promise<OpenAiImagesEndpointResolution>;
|
|
49
50
|
/** Default per-call timeout. Combined with provider-level config in provider-http. */
|
|
50
51
|
defaultTimeoutMs?: number;
|
|
51
52
|
/** Default image count. Provider may also enforce via `capabilities.generate.maxCount`. */
|
|
@@ -28,7 +28,7 @@ function createOpenAiImagesProvider(options) {
|
|
|
28
28
|
isConfigured: options.isConfigured,
|
|
29
29
|
async generateImage(req) {
|
|
30
30
|
const apiKey = await options.resolveApiKey(req) ?? null;
|
|
31
|
-
const endpoint = options.resolveEndpoint(req);
|
|
31
|
+
const endpoint = await options.resolveEndpoint(req);
|
|
32
32
|
const httpDefaults = resolveProviderHttpRequestConfig({
|
|
33
33
|
providerId: options.id,
|
|
34
34
|
cfg: req.cfg,
|
|
@@ -75,7 +75,8 @@ function createOpenAiImagesProvider(options) {
|
|
|
75
75
|
count,
|
|
76
76
|
size,
|
|
77
77
|
httpDefaults,
|
|
78
|
-
ssrfGuardOptions
|
|
78
|
+
ssrfGuardOptions,
|
|
79
|
+
onResponse: options.onResponse
|
|
79
80
|
}) : await postGenerateRequest({
|
|
80
81
|
providerId: options.id,
|
|
81
82
|
req,
|
|
@@ -84,7 +85,8 @@ function createOpenAiImagesProvider(options) {
|
|
|
84
85
|
count,
|
|
85
86
|
size,
|
|
86
87
|
httpDefaults,
|
|
87
|
-
ssrfGuardOptions
|
|
88
|
+
ssrfGuardOptions,
|
|
89
|
+
onResponse: options.onResponse
|
|
88
90
|
}), {
|
|
89
91
|
...req,
|
|
90
92
|
count
|
|
@@ -111,14 +113,16 @@ async function postGenerateRequest(params) {
|
|
|
111
113
|
resolution: params.req.resolution
|
|
112
114
|
} };
|
|
113
115
|
const timeoutMs = pickTimeoutMsOrFallback(params.req.timeoutMs, params.httpDefaults.timeoutMs, DEFAULT_TIMEOUT_MS);
|
|
114
|
-
|
|
116
|
+
const res = await postJsonRequest(params.url, {
|
|
115
117
|
label: params.providerId,
|
|
116
118
|
timeoutMs,
|
|
117
119
|
signal: params.req.signal,
|
|
118
120
|
body,
|
|
119
121
|
headers: params.headers,
|
|
120
122
|
...params.ssrfGuardOptions
|
|
121
|
-
})
|
|
123
|
+
});
|
|
124
|
+
params.onResponse?.(res);
|
|
125
|
+
return await readJsonResponseLimited(res, MAX_RESPONSE_BYTES);
|
|
122
126
|
}
|
|
123
127
|
async function postEditRequest(params) {
|
|
124
128
|
const inputImages = params.req.inputImages ?? [];
|
|
@@ -148,14 +152,16 @@ async function postEditRequest(params) {
|
|
|
148
152
|
const headers = new Headers(params.headers);
|
|
149
153
|
headers.delete("content-type");
|
|
150
154
|
const timeoutMs = pickTimeoutMsOrFallback(params.req.timeoutMs, params.httpDefaults.timeoutMs, DEFAULT_TIMEOUT_MS);
|
|
151
|
-
|
|
155
|
+
const res = await postMultipartRequest(params.url, {
|
|
152
156
|
label: params.providerId,
|
|
153
157
|
timeoutMs,
|
|
154
158
|
signal: params.req.signal,
|
|
155
159
|
body: form,
|
|
156
160
|
headers,
|
|
157
161
|
...params.ssrfGuardOptions
|
|
158
|
-
})
|
|
162
|
+
});
|
|
163
|
+
params.onResponse?.(res);
|
|
164
|
+
return await readJsonResponseLimited(res, MAX_RESPONSE_BYTES);
|
|
159
165
|
}
|
|
160
166
|
function mapOpenAiImagesResponse(raw, req) {
|
|
161
167
|
if (!raw || typeof raw !== "object") return [];
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { getModelCatalogStore, init_model_catalog_store } from "../../../../providers/model-catalog-store.js";
|
|
2
2
|
import { init_xopc_cloud_config, resolveXopcModelRouterUrl } from "../../../../providers/xopc-cloud-config.js";
|
|
3
3
|
import { getProviderAuthService, init_provider_auth_service } from "../../../../providers/provider-auth-service.js";
|
|
4
|
+
import { captureCloudUsageResponse } from "../../../../usage/cloud-receipts.js";
|
|
5
|
+
import { cloudCreditBudgetHeaders, reportCloudCreditError } from "../../../../providers/xopc-cloud-credit-budget.js";
|
|
4
6
|
import { compareCatalogModels } from "../../../../providers/model-catalog-ranking.js";
|
|
7
|
+
import { trackCloudCapabilityUsage } from "../../../../usage/cloud-capability.js";
|
|
5
8
|
import { createOpenAiImagesProvider } from "../openai-images-provider.js";
|
|
6
9
|
//#region src/agent/image/generation/providers/xopc-cloud.ts
|
|
7
10
|
init_model_catalog_store();
|
|
@@ -23,7 +26,11 @@ function buildXopcCloudImageGenerationProvider() {
|
|
|
23
26
|
capabilities: modelCapabilities[model.id],
|
|
24
27
|
isConfigured: () => true,
|
|
25
28
|
resolveApiKey: (request) => getProviderAuthService().resolveApiKey("xopc-cloud", request.signal),
|
|
26
|
-
resolveEndpoint: () => ({
|
|
29
|
+
resolveEndpoint: async () => ({
|
|
30
|
+
baseUrl,
|
|
31
|
+
headers: await cloudCreditBudgetHeaders()
|
|
32
|
+
}),
|
|
33
|
+
onResponse: captureCloudUsageResponse,
|
|
27
34
|
...model.imageGeneration?.geometry?.sizes?.[0] ? { defaultSize: model.imageGeneration.geometry.sizes[0] } : {}
|
|
28
35
|
})]));
|
|
29
36
|
return {
|
|
@@ -38,7 +45,12 @@ function buildXopcCloudImageGenerationProvider() {
|
|
|
38
45
|
async generateImage(request) {
|
|
39
46
|
const executor = executors.get(request.model);
|
|
40
47
|
if (!executor) throw new Error(`Image model is not available from XOPC Model Service: ${request.model}`);
|
|
41
|
-
|
|
48
|
+
try {
|
|
49
|
+
return await trackCloudCapabilityUsage(request.model, "images.generate", () => executor.generateImage(request));
|
|
50
|
+
} catch (error) {
|
|
51
|
+
reportCloudCreditError(error instanceof Error ? error.message : String(error));
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
42
54
|
}
|
|
43
55
|
};
|
|
44
56
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
|
|
2
2
|
import { getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef } from "../../config/schema.js";
|
|
3
|
-
import { resolveEffectiveAgentConfigForAgent } from "../../config/agent-profile.js";
|
|
4
3
|
import { getDefaultModelSync, getModelsByProvider, init_providers, isProviderConfiguredSync, resolveModel } from "../../providers/index.js";
|
|
4
|
+
import { resolveEffectiveAgentConfigForAgent } from "../../config/agent-profile.js";
|
|
5
5
|
import { resolveAgentModelFallbackValues, resolveAgentModelPrimaryValue } from "../../config/model-input.js";
|
|
6
6
|
import { buildCapabilityPlansForConfig } from "../../capabilities/readiness/from-config.js";
|
|
7
7
|
import "../../capabilities/readiness/index.js";
|
|
@@ -3,12 +3,12 @@ import { init_logger } from "../utils/logger.js";
|
|
|
3
3
|
import { init_attachment_ref, parseNoteAttachmentTarget } from "../notes/attachment-ref.js";
|
|
4
4
|
import { init_agent_scope, resolveAgentHomeDir, resolveDefaultAgentId } from "./agent-scope.js";
|
|
5
5
|
import { extractTextContent } from "./context/workspace.js";
|
|
6
|
-
import { configureTracing, flushTracing } from "../observability/runtime.js";
|
|
7
6
|
import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
|
|
8
|
-
import { applyConfigOverrides } from "../config/runtime-overrides.js";
|
|
9
7
|
import { init_agent_session_key, resolveAgentIdFromConversationId } from "../routing/agent-session-key.js";
|
|
10
|
-
import { extractProfileAgentId, resolveEffectiveAgentConfigForSession } from "../config/agent-profile.js";
|
|
11
8
|
import { init_providers, resolveModel } from "../providers/index.js";
|
|
9
|
+
import { configureTracing, flushTracing } from "../observability/runtime.js";
|
|
10
|
+
import { applyConfigOverrides } from "../config/runtime-overrides.js";
|
|
11
|
+
import { extractProfileAgentId, resolveEffectiveAgentConfigForSession } from "../config/agent-profile.js";
|
|
12
12
|
import { effectiveWorkspacePathForSession } from "../session/session-workspace.js";
|
|
13
13
|
import { getProjectForSession } from "../projects/workspace.js";
|
|
14
14
|
import { getUserTimezone } from "../user-model/repository.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { init_workspace_defaults, resolveDefaultAgentWorkspaceDir } from "../../config/workspace-defaults.js";
|
|
4
|
-
import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
|
|
5
4
|
import { init_providers, resolveModel } from "../../providers/index.js";
|
|
5
|
+
import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
|
|
6
6
|
import { getExecutionEnvironmentForSession } from "../../execution-environments/subject.js";
|
|
7
7
|
import { effectiveWorkspacePathForSession, projectWorkspacePath } from "../../session/session-workspace.js";
|
|
8
8
|
import { getProjectForSession } from "../../projects/workspace.js";
|
|
@@ -2,13 +2,13 @@ import { createLogger } from "../../utils/logger/index.js";
|
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { TaskRepository, init_task_repository } from "../../tasks/task-repository.js";
|
|
4
4
|
import { TaskRunRepository, init_task_run_repository } from "../../tasks/task-run-repository.js";
|
|
5
|
+
import { extractAssistantText, getAssistantMessageErrorReason, stripCodeFences } from "../../providers/model-response.js";
|
|
5
6
|
import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
|
|
6
|
-
import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
|
|
7
7
|
import { getApiKey, init_providers, resolveModel } from "../../providers/index.js";
|
|
8
|
+
import { completeWithResolvedCredentials } from "../../providers/model-call.js";
|
|
9
|
+
import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
|
|
8
10
|
import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
|
|
9
11
|
import { readWorkspaceRevision } from "../coding/workspace-revision.js";
|
|
10
|
-
import { completeWithResolvedCredentials } from "../../providers/model-call.js";
|
|
11
|
-
import { extractAssistantText, getAssistantMessageErrorReason, stripCodeFences } from "../../providers/model-response.js";
|
|
12
12
|
import { TaskApplicationService } from "../../tasks/task-application-service.js";
|
|
13
13
|
//#region src/agent/tasks/task-judge-service.ts
|
|
14
14
|
init_schema();
|
|
@@ -163,6 +163,7 @@ export declare const RuntimePolicySchema: z.ZodObject<{
|
|
|
163
163
|
"read-write": "read-write";
|
|
164
164
|
}>>;
|
|
165
165
|
}, z.core.$strict>], "mode">>;
|
|
166
|
+
cloudCreditLimitPerRunMicro: z.ZodOptional<z.ZodString>;
|
|
166
167
|
maxTurns: z.ZodOptional<z.ZodNumber>;
|
|
167
168
|
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
168
169
|
maxToolFailuresPerTurn: z.ZodOptional<z.ZodNumber>;
|
|
@@ -258,6 +259,7 @@ export declare const AgentDefaultsSchema: z.ZodObject<{
|
|
|
258
259
|
"read-write": "read-write";
|
|
259
260
|
}>>;
|
|
260
261
|
}, z.core.$strict>], "mode">>;
|
|
262
|
+
cloudCreditLimitPerRunMicro: z.ZodOptional<z.ZodString>;
|
|
261
263
|
maxTurns: z.ZodOptional<z.ZodNumber>;
|
|
262
264
|
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
263
265
|
maxToolFailuresPerTurn: z.ZodOptional<z.ZodNumber>;
|
|
@@ -476,6 +478,7 @@ export declare const AgentEntrySchema: z.ZodObject<{
|
|
|
476
478
|
"read-write": "read-write";
|
|
477
479
|
}>>;
|
|
478
480
|
}, z.core.$strict>], "mode">>;
|
|
481
|
+
cloudCreditLimitPerRunMicro: z.ZodOptional<z.ZodString>;
|
|
479
482
|
maxTurns: z.ZodOptional<z.ZodNumber>;
|
|
480
483
|
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
481
484
|
maxToolFailuresPerTurn: z.ZodOptional<z.ZodNumber>;
|
|
@@ -620,6 +623,7 @@ export declare const EffectiveAgentConfigSchema: z.ZodObject<{
|
|
|
620
623
|
"read-write": "read-write";
|
|
621
624
|
}>>;
|
|
622
625
|
}, z.core.$strict>], "mode">>;
|
|
626
|
+
cloudCreditLimitPerRunMicro: z.ZodOptional<z.ZodString>;
|
|
623
627
|
maxTurns: z.ZodOptional<z.ZodNumber>;
|
|
624
628
|
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
625
629
|
maxToolFailuresPerTurn: z.ZodOptional<z.ZodNumber>;
|
|
@@ -114,6 +114,7 @@ var init_schema = __esmMin((() => {
|
|
|
114
114
|
network: z.boolean().default(false),
|
|
115
115
|
workspaceAccess: z.enum(["read-only", "read-write"]).default("read-only")
|
|
116
116
|
}).strict()]).optional(),
|
|
117
|
+
cloudCreditLimitPerRunMicro: z.string().regex(/^[1-9]\d{0,14}$/).optional(),
|
|
117
118
|
maxTurns: z.number().int().positive().optional(),
|
|
118
119
|
timeoutMs: z.number().int().positive().optional(),
|
|
119
120
|
maxToolFailuresPerTurn: z.number().int().positive().optional(),
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
+
import { getAssistantMessageErrorReason, stripCodeFences } from "../providers/model-response.js";
|
|
3
4
|
import { getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
|
|
4
5
|
import { createExtensionAwareStreamFn } from "../providers/extension-stream-bridge.js";
|
|
5
6
|
import { trackAiUsageStream } from "../usage/recorder.js";
|
|
6
7
|
import { isLocalModelBaseUrl, resolveModelCallApiKey, resolveModelCallOptions } from "../providers/model-call.js";
|
|
7
|
-
import { getAssistantMessageErrorReason, stripCodeFences } from "../providers/model-response.js";
|
|
8
8
|
import { normalizeContext } from "@earendil-works/pi-ai";
|
|
9
9
|
//#region src/ai-assist/text-assist.ts
|
|
10
10
|
init_providers();
|