@xopcai/xopc 0.0.372 → 0.0.374
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-BrA20N2m.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BZrOdxou.js +1 -0
- package/dist/gateway/static/root/assets/{agent-plugin-dialog-BYB0G2aF.js → agent-plugin-dialog-B3ux1AhY.js} +1 -1
- package/dist/gateway/static/root/assets/{agents-D0JBkZPV.js → agents-CXlXFU6M.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-BXahEVPm.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-BfavIBbb.js → appearance-settings-CE2qJMkD.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-CUS5S1qa.js → apps-page-DGVOnCxZ.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-BWL7eT4_.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-workspace-LQsa5ohY.js → automations-workspace-BxIShhkZ.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-3n446-mX.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-BmTK7Gtn.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-settings-page-CKlt_8IS.js → browser-settings-page-DBQ-WETQ.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-D-nQ6Zzi.js} +2 -2
- package/dist/gateway/static/root/assets/{capabilities-settings-panel-C9HIr2CZ.js → capabilities-settings-panel-Dx1fpBmH.js} +6 -6
- package/dist/gateway/static/root/assets/{capability-header-actions-uxIiW_2_.js → capability-header-actions-BRMqvQVb.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-By3dmQ4Y.js → channels-DXfEP1FR.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-DeDTSl64.js → chat-terminal-dock-BRdzCjWO.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-BhCHMRpD.js} +1 -1
- package/dist/gateway/static/root/assets/{connector-service-page-D664WEhj.js → connector-service-page-BXE8Z-Ll.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-page-sjyjY7Fl.js → connectors-page-D9RZjhw8.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-BVmFrPfX.js → date-picker-BJ7N92wm.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-YIoP-e5-.js → dependency-picker-gyxCM-hb.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-CzS468vR.js → desktop-pet-B-WM4l-L.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-BPcgZUcK.js → desktop-pet-settings-usJqcew5.js} +1 -1
- package/dist/gateway/static/root/assets/{device-pairing-wizard-Cgba-4m9.js → device-pairing-wizard-DoSR4DGk.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-_nHmZtnY.js → directory-picker-path-field-DqVlV2YH.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-CUule9SU.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-_OFukkEJ.js} +1 -1
- package/dist/gateway/static/root/assets/{fallback-models-CUHrPpGV.js → fallback-models-CiSc3h8i.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-qSUrpS1h.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-COjDsuzg.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-DdvIj-ZL.js} +1 -1
- package/dist/gateway/static/root/assets/{index-BWDK2eIj.js → index-DEaVabvo.js} +7 -7
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DWazrDgz.js → keyboard-shortcuts-settings-DbqFlNsF.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-CkxDdlYU.js → local-app-workbench-page-REowUzkp.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-BISZ4bi5.js → local-apps-page-DdCMNn_z.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-B_6fHDoi.js} +1 -1
- package/dist/gateway/static/root/assets/management-settings-D4vcSRE3.js +1 -0
- 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-B7U6EbAi.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-BzHVaH8j.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-capture-button-Yt-BpPRh.js → page-context-capture-button-D7Y4vFRN.js} +1 -1
- package/dist/gateway/static/root/assets/personal-page-E6huhFk4.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-etM6Ijfe.js → product-open-page-CK_czbBx.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-content-C6aeRrWe.js → product-preview-content-CU6KlaVP.js} +1 -1
- package/dist/gateway/static/root/assets/{project-detail-page-K4ASOTki.js → project-detail-page-c3ye2bdq.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-BssImjwl.js → projects-page-BA1UuuRF.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-D_FLVZAm.js} +1 -1
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BJAzqQik.js → runtime-tools-settings-panel-Cxjmwdyf.js} +1 -1
- package/dist/gateway/static/root/assets/{scenes-page-uZUXm03X.js → scenes-page-Av47PHdM.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-SA3Ld7zf.js → schema-form-IM7QeSm3.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-Bol3ScEc.js} +1 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DpCanqrD.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-CUJQMNF7.js → settings-page-BeVtwwVd.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-BGBWC0Bc.js → setup-status-panel-zTmrMwMm.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-Bkhkt_6M.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-api-9XSn7R8L.js → skill-api-Dgwc707w.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-CFIte-vM.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-B6axBPLO.js → system-settings-panel-Ck6zGDHb.js} +1 -1
- package/dist/gateway/static/root/assets/{task-detail-page-ftCTqBDB.js → task-detail-page-C3ZPEZqw.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-CjxMpAm2.js} +1 -1
- package/dist/gateway/static/root/assets/usage-page-Dnhp9xQ4.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-sx1lNWKf.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-CVd_y3K2.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BBwx-tUb.js → workflow-run-setup-panel-Dwg40uGK.js} +1 -1
- package/dist/gateway/static/root/assets/{workflows-page-BHigZn6E.js → workflows-page-BQR4JdXB.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-CaKc_J7j.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/packages/realtime-protocol/src/voice.js +11 -0
- 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/run-turn.js +39 -3
- 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-config/schema.d.ts +13 -0
- package/dist/src/agent-config/schema.js +2 -0
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/gateway/shared.js +2 -1
- package/dist/src/cli/commands/models.js +41 -0
- package/dist/src/computer/runtime.js +3 -0
- package/dist/src/config/gateway-bind.js +2 -1
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/models-json.d.ts +8 -8
- package/dist/src/config/schema.d.ts +13 -12
- package/dist/src/config/schema.js +7 -3
- package/dist/src/daemon/constants.js +14 -9
- package/dist/src/daemon/index.js +4 -1
- package/dist/src/daemon/install-plan.js +2 -1
- package/dist/src/daemon/launchd.js +2 -1
- package/dist/src/daemon/schtasks.js +2 -1
- package/dist/src/daemon/service-audit.js +2 -1
- package/dist/src/daemon/service.js +2 -1
- package/dist/src/daemon/systemd.js +2 -1
- package/dist/src/gateway/client-ip.js +2 -1
- package/dist/src/gateway/hono/app.js +2 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -0
- package/dist/src/gateway/hono/middleware/auth.d.ts +3 -5
- package/dist/src/gateway/hono/middleware/auth.js +56 -14
- package/dist/src/gateway/hono/middleware/logger.js +2 -1
- package/dist/src/gateway/hono/middleware/public-device-rate-limit.d.ts +16 -0
- package/dist/src/gateway/hono/middleware/public-device-rate-limit.js +43 -0
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js +3 -2
- package/dist/src/gateway/hono/oauth-async.js +2 -1
- package/dist/src/gateway/hono/routes/browser.js +2 -1
- package/dist/src/gateway/hono/routes/config.js +2 -1
- package/dist/src/gateway/hono/routes/device-pairing-approval.d.ts +3 -8
- package/dist/src/gateway/hono/routes/device-pairing-approval.js +5 -20
- package/dist/src/gateway/hono/routes/devices.js +25 -9
- package/dist/src/gateway/hono/routes/endpoint-tools.js +1 -0
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/personal-agent.js +3 -2
- package/dist/src/gateway/hono/routes/public-gateway.js +6 -6
- package/dist/src/gateway/hono/routes/shares.js +2 -1
- package/dist/src/gateway/hono/routes/usage.js +15 -5
- package/dist/src/gateway/hono/routes/voice.js +1 -0
- package/dist/src/gateway/host.js +9 -4
- package/dist/src/gateway/index.js +8 -4
- package/dist/src/gateway/listen.js +2 -1
- package/dist/src/gateway/rate-limit/auth-policy.js +7 -11
- package/dist/src/gateway/rate-limit/buckets.d.ts +6 -0
- package/dist/src/gateway/rate-limit/buckets.js +211 -189
- package/dist/src/gateway/rate-limit/env-flags.js +4 -1
- package/dist/src/gateway/rate-limit/index.js +13 -4
- package/dist/src/gateway/runtime-config.js +5 -3
- package/dist/src/gateway/security/audit.js +3 -2
- package/dist/src/gateway/security/browser-session.js +2 -1
- package/dist/src/gateway/security/device-request-proof.d.ts +28 -0
- package/dist/src/gateway/security/device-request-proof.js +122 -0
- package/dist/src/gateway/security/loopback.js +7 -6
- package/dist/src/gateway/service.js +8 -6
- package/dist/src/gateway/tailscale-auth.js +2 -1
- package/dist/src/gateway/ws-security.js +2 -1
- package/dist/src/infra/rate-limit/failure-limiter.js +78 -90
- package/dist/src/infra/rate-limit/index.js +11 -3
- package/dist/src/infra/rate-limit/keyed-store.js +52 -47
- package/dist/src/infra/rate-limit/rate-limiter.js +55 -58
- package/dist/src/infra/update-service-refresh.js +2 -1
- package/dist/src/personal-agent/repository.d.ts +3 -0
- package/dist/src/personal-agent/repository.js +1 -0
- package/dist/src/personal-agent/service.d.ts +6 -2
- package/dist/src/personal-agent/service.js +4 -3
- package/dist/src/platform/client.d.ts +2 -2
- package/dist/src/platform/contracts.d.ts +2 -2
- package/dist/src/providers/model-call.js +15 -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-credit-budget.d.ts +14 -0
- package/dist/src/providers/xopc-cloud-credit-budget.js +61 -0
- package/dist/src/realtime/runtime.js +6 -0
- package/dist/src/realtime/tickets.d.ts +1 -0
- package/dist/src/realtime/tickets.js +4 -0
- package/dist/src/remote-access/exposure-guards.js +2 -1
- package/dist/src/share/share-rate-limit.js +2 -1
- package/dist/src/share/share-url.js +2 -1
- package/dist/src/share/site-share-router.js +2 -1
- 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/device-access-repository.d.ts +7 -0
- package/dist/src/storage/sqlite/device-access-repository.js +22 -4
- package/dist/src/storage/sqlite/migrations/242_cloud_usage_receipts.sql +5 -0
- package/dist/src/storage/sqlite/migrations/243_voice_opening_greetings.sql +12 -0
- package/dist/src/storage/sqlite/migrations/244_device_request_proofs.sql +8 -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/tunnel/broker-client.js +2 -0
- package/dist/src/tunnel/tunnel-config.js +2 -2
- package/dist/src/tunnel/tunnel-rate-limit.js +2 -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/utils/logger/redact.js +4 -1
- package/dist/src/voice/platform-streams.d.ts +6 -0
- package/dist/src/voice/platform-streams.js +43 -4
- package/dist/src/voice/realtime/agentEngine.js +138 -83
- package/dist/src/voice/realtime/engine.d.ts +6 -0
- package/dist/src/voice/realtime/opening-greeting.d.ts +12 -0
- package/dist/src/voice/realtime/opening-greeting.js +22 -0
- package/dist/src/voice/realtime/runtime.js +116 -22
- package/dist/src/voice/realtime/runtime.types.d.ts +4 -0
- 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/package.json +5 -5
- 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/management-settings-GUpOcTqa.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/personal-page-C8SEQpEu.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-DEaVabvo.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();
|
|
@@ -62,6 +62,7 @@ var init_voice = __esmMin((() => {
|
|
|
62
62
|
});
|
|
63
63
|
z.object({
|
|
64
64
|
enabled: z.boolean(),
|
|
65
|
+
openingGreeting: z.boolean().optional(),
|
|
65
66
|
defaultMode: voiceModeSchema,
|
|
66
67
|
omni: voiceProviderRouteSchema.nullable(),
|
|
67
68
|
stt: voiceProviderRouteSchema.nullable(),
|
|
@@ -80,6 +81,11 @@ var init_voice = __esmMin((() => {
|
|
|
80
81
|
mode: voiceModeSchema.optional(),
|
|
81
82
|
conversationId: z.string().min(1).max(512).optional(),
|
|
82
83
|
language: voiceLanguageSchema.optional(),
|
|
84
|
+
openingGreeting: z.strictObject({
|
|
85
|
+
logicalCallId: idSchema,
|
|
86
|
+
initiation: z.enum(["user", "recovery"]),
|
|
87
|
+
supportsOutputReady: z.literal(true)
|
|
88
|
+
}).optional(),
|
|
83
89
|
supportedProtocolVersions: z.tuple([z.literal(3)]),
|
|
84
90
|
mediaPreferences: z.tuple([z.literal("websocket-pcm")])
|
|
85
91
|
}).superRefine((value, context) => {
|
|
@@ -95,6 +101,10 @@ var init_voice = __esmMin((() => {
|
|
|
95
101
|
});
|
|
96
102
|
});
|
|
97
103
|
z.strictObject({
|
|
104
|
+
openingGreeting: z.strictObject({
|
|
105
|
+
accepted: z.boolean(),
|
|
106
|
+
greetingResponseId: z.string().max(160).optional()
|
|
107
|
+
}).optional(),
|
|
98
108
|
sessionId: idSchema,
|
|
99
109
|
ticket: z.string().min(32).max(512),
|
|
100
110
|
ticketExpiresAt: z.iso.datetime(),
|
|
@@ -135,6 +145,7 @@ var init_voice = __esmMin((() => {
|
|
|
135
145
|
metric: z.enum(VOICE_TIMING_METRICS),
|
|
136
146
|
durationMs: z.number().finite().min(0).max(6e5)
|
|
137
147
|
})),
|
|
148
|
+
clientEnvelope("session.output_ready", z.strictObject({ connectionEpoch: z.number().int().positive() })),
|
|
138
149
|
clientEnvelope("input.mute", z.strictObject({ muted: z.boolean() })),
|
|
139
150
|
clientEnvelope("input.commit", z.strictObject({})),
|
|
140
151
|
clientEnvelope("response.stop_playback", z.strictObject({ responseId: z.string().min(1).max(160) })),
|
|
@@ -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");
|
|
@@ -11,6 +11,7 @@ import { resolveEffectiveAgentConfigForSession } from "../../config/agent-profil
|
|
|
11
11
|
import { continuesAfterTool, trackAiUsageStream } from "../../usage/recorder.js";
|
|
12
12
|
import { runWithEmbeddedExecutionSession } from "./execution-context.js";
|
|
13
13
|
import { externalPolicyContext } from "./tool-metadata.js";
|
|
14
|
+
import { cloudCreditBudgetStopMessage, isCloudCreditBudgetExhausted, reportCloudCreditError, withCloudCreditBudget } from "../../providers/xopc-cloud-credit-budget.js";
|
|
14
15
|
import { isComputerControlActive, isComputerLeaseTool, stopComputerControl } from "../../computer/control-guard.js";
|
|
15
16
|
import { EmbeddedRunConflictError, abortEmbeddedRun, acquireEmbeddedRunLease, queueEmbeddedSteer } from "./runs.js";
|
|
16
17
|
import { lastAssistantPlainText, subscribeEmbeddedSessionEvents } from "./subscribe-session.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
|
}
|
|
@@ -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>;
|
|
@@ -315,6 +317,9 @@ export declare const AgentProfileSchema: z.ZodObject<{
|
|
|
315
317
|
model: z.ZodString;
|
|
316
318
|
voice: z.ZodString;
|
|
317
319
|
}, z.core.$strict>>;
|
|
320
|
+
voiceCallPreferences: z.ZodOptional<z.ZodObject<{
|
|
321
|
+
openingGreetingEnabled: z.ZodBoolean;
|
|
322
|
+
}, z.core.$strict>>;
|
|
318
323
|
responsePreferences: z.ZodOptional<z.ZodObject<{
|
|
319
324
|
addressAs: z.ZodOptional<z.ZodString>;
|
|
320
325
|
guidance: z.ZodOptional<z.ZodString>;
|
|
@@ -363,6 +368,9 @@ export declare const AgentEntrySchema: z.ZodObject<{
|
|
|
363
368
|
model: z.ZodString;
|
|
364
369
|
voice: z.ZodString;
|
|
365
370
|
}, z.core.$strict>>;
|
|
371
|
+
voiceCallPreferences: z.ZodOptional<z.ZodObject<{
|
|
372
|
+
openingGreetingEnabled: z.ZodBoolean;
|
|
373
|
+
}, z.core.$strict>>;
|
|
366
374
|
responsePreferences: z.ZodOptional<z.ZodObject<{
|
|
367
375
|
addressAs: z.ZodOptional<z.ZodString>;
|
|
368
376
|
guidance: z.ZodOptional<z.ZodString>;
|
|
@@ -476,6 +484,7 @@ export declare const AgentEntrySchema: z.ZodObject<{
|
|
|
476
484
|
"read-write": "read-write";
|
|
477
485
|
}>>;
|
|
478
486
|
}, z.core.$strict>], "mode">>;
|
|
487
|
+
cloudCreditLimitPerRunMicro: z.ZodOptional<z.ZodString>;
|
|
479
488
|
maxTurns: z.ZodOptional<z.ZodNumber>;
|
|
480
489
|
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
481
490
|
maxToolFailuresPerTurn: z.ZodOptional<z.ZodNumber>;
|
|
@@ -508,6 +517,9 @@ export declare const EffectiveAgentConfigSchema: z.ZodObject<{
|
|
|
508
517
|
model: z.ZodString;
|
|
509
518
|
voice: z.ZodString;
|
|
510
519
|
}, z.core.$strict>>;
|
|
520
|
+
voiceCallPreferences: z.ZodOptional<z.ZodObject<{
|
|
521
|
+
openingGreetingEnabled: z.ZodBoolean;
|
|
522
|
+
}, z.core.$strict>>;
|
|
511
523
|
responsePreferences: z.ZodOptional<z.ZodObject<{
|
|
512
524
|
addressAs: z.ZodOptional<z.ZodString>;
|
|
513
525
|
guidance: z.ZodOptional<z.ZodString>;
|
|
@@ -620,6 +632,7 @@ export declare const EffectiveAgentConfigSchema: z.ZodObject<{
|
|
|
620
632
|
"read-write": "read-write";
|
|
621
633
|
}>>;
|
|
622
634
|
}, z.core.$strict>], "mode">>;
|
|
635
|
+
cloudCreditLimitPerRunMicro: z.ZodOptional<z.ZodString>;
|
|
623
636
|
maxTurns: z.ZodOptional<z.ZodNumber>;
|
|
624
637
|
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
625
638
|
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(),
|
|
@@ -171,6 +172,7 @@ var init_schema = __esmMin((() => {
|
|
|
171
172
|
model: z.string().trim().min(1).max(200),
|
|
172
173
|
voice: z.string().trim().min(1).max(200)
|
|
173
174
|
}).strict().optional(),
|
|
175
|
+
voiceCallPreferences: z.object({ openingGreetingEnabled: z.boolean() }).strict().optional(),
|
|
174
176
|
responsePreferences: ResponsePreferencesSchema.optional(),
|
|
175
177
|
instructions: z.string().trim().min(1).optional()
|
|
176
178
|
}).strict();
|
|
@@ -53,7 +53,7 @@ async function checkDatabaseSchema(ctx) {
|
|
|
53
53
|
id: "database-schema",
|
|
54
54
|
label: "Database schema",
|
|
55
55
|
status: "pass",
|
|
56
|
-
message: `SQLite schema v${status.dbVersion} (current release
|
|
56
|
+
message: `SQLite schema v${status.dbVersion} (current release v244).`,
|
|
57
57
|
hints: []
|
|
58
58
|
};
|
|
59
59
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { init_constants, resolveGatewayLaunchAgentLabel, resolveGatewaySystemdServiceName, resolveGatewayWindowsTaskName } from "../../../daemon/constants.js";
|
|
1
2
|
import { init_paths, resolveConfigPath } from "../../../config/paths.js";
|
|
2
|
-
import { resolveGatewayLaunchAgentLabel, resolveGatewaySystemdServiceName, resolveGatewayWindowsTaskName } from "../../../daemon/constants.js";
|
|
3
3
|
import { loadConfig } from "../../../config/loader.js";
|
|
4
4
|
import "../../../config/index.js";
|
|
5
5
|
//#region src/cli/commands/gateway/shared.ts
|
|
6
6
|
init_paths();
|
|
7
|
+
init_constants();
|
|
7
8
|
function parsePortFromArgs(programArguments) {
|
|
8
9
|
if (!programArguments?.length) return null;
|
|
9
10
|
for (let i = 0; i < programArguments.length; i += 1) {
|