@xopcai/xopc 0.0.389 → 0.0.391
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-dvik6t7Z.js → activity-store-DWQCDi8M.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-bWMd5TDC.js → agent-avatar-dicebear-CzS0TUv9.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DE910MyU.js +1 -0
- package/dist/gateway/static/root/assets/{agent-plugin-dialog-UunIxc1q.js → agent-plugin-dialog-0SlvsYl7.js} +1 -1
- package/dist/gateway/static/root/assets/agents-BZh28Qn1.js +77 -0
- package/dist/gateway/static/root/assets/{agents-admin-api-BlNGyXpm.js → agents-admin-api-Bb3Kvz3X.js} +1 -1
- package/dist/gateway/static/root/assets/app-management-settings-panel-9A7JN5V5.js +1 -0
- package/dist/gateway/static/root/assets/{appearance-settings-CUAdx44v.js → appearance-settings-BPdLEo6L.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-D5zDB6gp.js → apps-page-Cz7LypV9.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-Du6dJNcl.js → archive-plugin-DFnHPNie.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-BO8Ig5Z4.js → automations-page-CnBLPVNh.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-BBjS-sk-.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-D7VJjwnr.js → binary-plugins-BQC0Tzoi.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-CaJlWTAn.js → block-editor-DSh5019z.js} +4 -4
- package/dist/gateway/static/root/assets/{browser-automation-inputs-iyMBJmQX.js → browser-automation-inputs-C5tIrIRL.js} +1 -1
- package/dist/gateway/static/root/assets/browser-automations-page-CFCMNfJN.js +3 -0
- package/dist/gateway/static/root/assets/browser-settings-page-C__tyPwu.js +3 -0
- package/dist/gateway/static/root/assets/{capabilities-CEH1AnXc.js → capabilities-D6RJG4QY.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-MCKRMZDK.js → capabilities-DGEmBQnF.js} +1 -1
- package/dist/gateway/static/root/assets/capabilities-page-B5AZa7ir.js +2 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-Dskz2_bh.js +8 -0
- package/dist/gateway/static/root/assets/{capability-header-actions-BIA0Lwt5.js → capability-header-actions-xzjWZVbg.js} +1 -1
- package/dist/gateway/static/root/assets/channels-DRse_dD3.js +1 -0
- package/dist/gateway/static/root/assets/chat-terminal-dock-CQF0M4kE.js +36 -0
- package/dist/gateway/static/root/assets/{computer-settings-page-DvY3zgyY.js → computer-settings-page-ZfzCTS0N.js} +1 -1
- package/dist/gateway/static/root/assets/{connector-service-page-St2-Fj3y.js → connector-service-page-CwAeWVLK.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-CanakKaj.js +1 -0
- package/dist/gateway/static/root/assets/{date-picker-C0-D80ny.js → date-picker-hmJlEAQZ.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-CNd7mwMU.js → dependency-picker-Us_Juz6I.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-C-2wDANn.js → desktop-pet-CvOTI4uw.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-DyhxLrdJ.js → desktop-pet-settings-DYg-Gb8t.js} +1 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-B1FbZ8C1.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-CNivVIPT.js → directory-picker-path-field-DZN9EDvM.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-CGYO3JPw.js → extension-debug-page-YIibp6Kk.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-Dc51ALAg.js → extension-page-DkcGyb28.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-BXPILdlw.js → extension-provider-B1PQGTtY.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-C_rJiSKo.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-swr-Bc2MytsF.js → gateway-config-swr-Dv_A5FMu.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-BFK-vlME.js → gateway-realtime-DghCGfY_.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-CMJVSnvi.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-CjCWPHNJ.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-BDPMttPx.js → gateway-startup-retry-CkTVSESs.js} +1 -1
- package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-DAlRGMge.js → highlighted-body-KQOG7T2V-DV2wNqBn.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-fAYsd7kG.js +2 -0
- package/dist/gateway/static/root/assets/image-generation-api-B98iXt6A.js +1 -0
- package/dist/gateway/static/root/assets/imports-page-DoBCBN8G.js +1 -0
- package/dist/gateway/static/root/assets/index-DFgXwLsv.js +260 -0
- package/dist/gateway/static/root/assets/index-a6ZvhclR.css +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BYYC9Qmw.js → keyboard-shortcuts-settings-DXVu4lqV.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-B3fz6uRi.js +1 -0
- package/dist/gateway/static/root/assets/{local-apps-page-BU8pUsVM.js → local-apps-page-BC6xhmUh.js} +1 -1
- package/dist/gateway/static/root/assets/{local-session-drafts-kFc_MAA9.js → local-session-drafts-DFnZQu9A.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-Dr43FCty.js → locale-store-BpK9AiDq.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-CSqSFDRU.js +2 -0
- package/dist/gateway/static/root/assets/management-settings-gq5L0THs.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-view-CdKlPjJM.js → markdown-view-IsYTotu6.js} +18 -18
- package/dist/gateway/static/root/assets/{media-plugins-DE9zt88i.js → media-plugins-oSChWbcP.js} +1 -1
- package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-C_QKwqDN.js +1 -0
- package/dist/gateway/static/root/assets/messages-CKTo_sIF.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-cache-TjpL7hZ5.js +1 -0
- package/dist/gateway/static/root/assets/note-detail-panel-CdpNXre-.js +5 -0
- package/dist/gateway/static/root/assets/{notes-api-BHouNL6-.js → notes-api-CBb944yw.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-EGvGw8MN.js +8 -0
- package/dist/gateway/static/root/assets/{page-context-capture-button-TQr8NnSc.js → page-context-capture-button-CoWb7BYP.js} +1 -1
- package/dist/gateway/static/root/assets/personal-page-DYzbNTyN.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-BEl6syFp.js → product-open-page-CTyy7H7-.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-content-BxSHnbqz.js → product-preview-content-D4xqTaEy.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-DIVCw0QQ.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-B4L9VnBN.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-BD5IgDOA.js → registry-api-Dsa2LvRt.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-B8PvgLVz.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-api-CjTRoQWT.js → runtime-tools-api-C2Uw89eY.js} +1 -1
- package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bqnp3tyt.js +1 -0
- package/dist/gateway/static/root/assets/scenes-page-D50g4GM2.js +2 -0
- package/dist/gateway/static/root/assets/{schema-form-ByG-R6N2.js → schema-form-h_RCNfiO.js} +1 -1
- package/dist/gateway/static/root/assets/{send-session-input-UAVStisp.js → send-session-input-DypbVTT7.js} +1 -1
- package/dist/gateway/static/root/assets/{session-api-DvgEiNRS.js → session-api-ga-SUOq_.js} +1 -1
- package/dist/gateway/static/root/assets/{session-manager-BOb1tC_Z.js → session-manager-C_OiKblh.js} +8 -8
- package/dist/gateway/static/root/assets/sessions-page-BsqDIbIr.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-D3zJAW4p.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-C1e9m23j.js → settings-page-DPCgrICd.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-jjSYJpDd.js +1 -0
- package/dist/gateway/static/root/assets/{share-link-dialog-kE_6v5Dp.js → share-link-dialog-BGicglAS.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-BT-_yR1h.js → share-preview-page-BORe9rLB.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-api-Dg_SqHQE.js → shares-api-Dbx3z6-1.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-C13FgfWk.js +1 -0
- package/dist/gateway/static/root/assets/{skill-api-BslUYMnX.js → skill-api-Cq6O1DZK.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-reload-api-BQ2rTOP1.js → skill-reload-api-Cq7QDjMA.js} +1 -1
- package/dist/gateway/static/root/assets/skills-page-BM1ShEjx.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-GpbPfWwo.js → system-settings-panel-BNCGFO1e.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-4VG82wcF.js +2 -0
- package/dist/gateway/static/root/assets/{task-expandable-content-DJrrEBB4.js → task-expandable-content-DAZGz5YC.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-BKpYnggg.js → theme-store-Db7hDESt.js} +1 -1
- package/dist/gateway/static/root/assets/{tracing-settings-page-D71w7dwV.js → tracing-settings-page-C6p2Mu92.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-BV46CvS8.js → tunnel-api-Dw15EJp0.js} +1 -1
- package/dist/gateway/static/root/assets/usage-page-DDrIqgGe.js +1 -0
- package/dist/gateway/static/root/assets/{use-autosave-CzyqRffr.js → use-autosave-DDjIdW4U.js} +1 -1
- package/dist/gateway/static/root/assets/{use-composer-attachments-Dviq-1f6.js → use-composer-attachments-DNl7O3Vb.js} +1 -1
- package/dist/gateway/static/root/assets/{use-file-preview-expanded-D5Kk7Hon.js → use-file-preview-expanded-DMHehhwG.js} +2 -2
- package/dist/gateway/static/root/assets/user-model-page-CaS9dOIr.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-DWtbmacd.js → voice-api-key-field-ByAxHE4P.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-DnIjZm_9.js → voice-config-api-Dl39b27p.js} +1 -1
- package/dist/gateway/static/root/assets/voice-transcribe-api-CVaU83Jc.js +1 -0
- package/dist/gateway/static/root/assets/{work-discovery-overlay-ChEG71hz.js → work-discovery-overlay-BvVvPA1T.js} +1 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-BcFm9QcC.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-DMec_XZB.js +6 -0
- package/dist/gateway/static/root/assets/{workspace-api-CZDvu7uA.js → workspace-api-BpfKsrtP.js} +2 -2
- package/dist/gateway/static/root/assets/{xopc-cloud-account-card-CbUgg1SK.js → xopc-cloud-account-card-CU5lzzE9.js} +1 -1
- package/dist/gateway/static/root/index.html +28 -35
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/discussions.js +3 -2
- package/dist/packages/gateway-contract/src/index.js +4 -0
- package/dist/packages/gateway-contract/src/provider-setup.js +6 -0
- package/dist/packages/gateway-contract/src/recording-outcome.js +6 -0
- package/dist/packages/image-providers/src/catalog.js +10 -0
- package/dist/packages/image-providers/src/execute.js +5 -1
- package/dist/packages/image-providers/src/validation.js +19 -1
- package/dist/src/agent/agent-manager.d.ts +1 -0
- package/dist/src/agent/agent-manager.js +4 -1
- package/dist/src/agent/background-review/run-background-review.d.ts +0 -1
- package/dist/src/agent/background-review/run-background-review.js +10 -2
- package/dist/src/agent/context/execution-scope.js +1 -1
- package/dist/src/agent/embedded/execution-tool-policy.d.ts +2 -0
- package/dist/src/agent/embedded/execution-tool-policy.js +8 -3
- package/dist/src/agent/embedded/run-for-session.js +26 -3
- package/dist/src/agent/embedded/run-turn.js +14 -1
- package/dist/src/agent/embedded/session-runner.js +1 -1
- package/dist/src/agent/embedded/xopc-stream-bridge.js +3 -0
- package/dist/src/agent/image/generation/runtime.js +12 -14
- package/dist/src/agent/image/understanding/runtime.js +5 -0
- package/dist/src/agent/inbound/inbound-loop.d.ts +1 -15
- package/dist/src/agent/inbound/inbound-loop.js +5 -0
- package/dist/src/agent/mcp/connection-errors.d.ts +3 -0
- package/dist/src/agent/mcp/connection-errors.js +32 -0
- package/dist/src/agent/mcp/connection-setup.d.ts +2 -0
- package/dist/src/agent/mcp/connection-setup.js +38 -18
- package/dist/src/agent/memory/compaction.js +5 -1
- package/dist/src/agent/memory/idle-compaction-scheduler.js +3 -1
- package/dist/src/agent/models/manager.d.ts +1 -0
- package/dist/src/agent/models/manager.js +4 -2
- package/dist/src/agent/orchestration/agent-orchestrator.d.ts +1 -6
- package/dist/src/agent/orchestration/agent-orchestrator.js +5 -0
- package/dist/src/agent/service/process-direct-one-shot.js +5 -0
- package/dist/src/agent/service/process-direct-streaming.d.ts +1 -0
- package/dist/src/agent/service/process-direct-streaming.js +17 -1
- package/dist/src/agent/tools/factory.js +14 -12
- package/dist/src/agent/tools/image-generate-tool.js +5 -1
- package/dist/src/agent/tools/personal-read-tool.js +4 -0
- package/dist/src/agent/tools/task-collaboration-tool.js +1 -1
- package/dist/src/agent-config/resolver.js +5 -0
- package/dist/src/agent-config/schema.d.ts +26 -6
- package/dist/src/agent-config/schema.js +2 -0
- package/dist/src/ai-assist/text-assist.js +5 -16
- package/dist/src/automations/service/action-executor.js +3 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/config/agent-model-intents.js +4 -1
- package/dist/src/config/schema.d.ts +11 -5
- package/dist/src/config/schema.js +11 -3
- package/dist/src/discussions/analyzer.d.ts +2 -0
- package/dist/src/discussions/analyzer.js +38 -9
- package/dist/src/discussions/audio-clip.d.ts +3 -0
- package/dist/src/discussions/audio-clip.js +72 -0
- package/dist/src/discussions/live-worker.js +3 -1
- package/dist/src/discussions/long-review.d.ts +17 -0
- package/dist/src/discussions/long-review.js +278 -0
- package/dist/src/discussions/media-timeline.d.ts +21 -0
- package/dist/src/discussions/media-timeline.js +134 -0
- package/dist/src/discussions/organizer-worker.d.ts +4 -1
- package/dist/src/discussions/organizer-worker.js +17 -12
- package/dist/src/discussions/organizer.js +2 -0
- package/dist/src/discussions/processing.d.ts +43 -0
- package/dist/src/discussions/processing.js +125 -0
- package/dist/src/discussions/recording.js +202 -42
- package/dist/src/discussions/recordingJobs.js +2 -0
- package/dist/src/discussions/repository.js +4 -2
- package/dist/src/discussions/review.d.ts +8 -0
- package/dist/src/discussions/review.js +183 -0
- package/dist/src/discussions/sealer.d.ts +7 -1
- package/dist/src/discussions/sealer.js +163 -87
- package/dist/src/discussions/service.d.ts +7 -1
- package/dist/src/discussions/service.js +51 -15
- package/dist/src/discussions/types.d.ts +2 -1
- package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
- package/dist/src/gateway/global-defaults-admin.d.ts +3 -1
- package/dist/src/gateway/global-defaults-admin.js +14 -2
- package/dist/src/gateway/hono/lib/config-payload.d.ts +11 -2
- package/dist/src/gateway/hono/lib/config-payload.js +2 -0
- package/dist/src/gateway/hono/lib/voice-settings-revisions.d.ts +5 -0
- package/dist/src/gateway/hono/lib/voice-settings-revisions.js +24 -0
- package/dist/src/gateway/hono/routes/commands-skills.js +15 -0
- package/dist/src/gateway/hono/routes/config-patch/misc.js +8 -1
- package/dist/src/gateway/hono/routes/config.js +12 -0
- package/dist/src/gateway/hono/routes/discussions.js +63 -1
- package/dist/src/gateway/hono/routes/global-defaults.js +8 -1
- package/dist/src/gateway/hono/routes/models.js +12 -4
- package/dist/src/gateway/hono/routes/provider-setup.d.ts +3 -0
- package/dist/src/gateway/hono/routes/provider-setup.js +106 -0
- package/dist/src/gateway/hono/routes/status.js +2 -0
- package/dist/src/gateway/hono/routes/voice.js +23 -10
- package/dist/src/gateway/provider-model-setup.d.ts +4 -0
- package/dist/src/gateway/provider-model-setup.js +56 -0
- package/dist/src/gateway/service/config-coordinator.d.ts +2 -2
- package/dist/src/gateway/service.js +2 -0
- package/dist/src/media-shared/http/provider-http.d.ts +0 -6
- package/dist/src/media-shared/http/provider-http.js +5 -4
- package/dist/src/media-understanding/runner.d.ts +0 -28
- package/dist/src/media-understanding/runner.js +4 -0
- package/dist/src/platform/client.d.ts +1 -1
- package/dist/src/platform/contracts.d.ts +1 -1
- package/dist/src/providers/env-keys.js +3 -0
- package/dist/src/providers/extension-stream-bridge.js +3 -0
- package/dist/src/providers/index.js +15 -0
- package/dist/src/providers/model-call.d.ts +5 -2
- package/dist/src/providers/model-call.js +13 -2
- package/dist/src/providers/model-reference-auditor.js +1 -0
- package/dist/src/providers/model-response.js +1 -1
- package/dist/src/providers/model-usage.d.ts +15 -0
- package/dist/src/providers/model-usage.js +50 -0
- package/dist/src/providers/presentation.js +8 -0
- package/dist/src/providers/setup/engine.d.ts +37 -0
- package/dist/src/providers/setup/engine.js +177 -0
- package/dist/src/providers/setup/profiles.d.ts +4 -0
- package/dist/src/providers/setup/profiles.js +78 -0
- package/dist/src/providers/setup/voice.d.ts +23 -0
- package/dist/src/providers/setup/voice.js +234 -0
- package/dist/src/scenes/agentExecutor.d.ts +1 -0
- package/dist/src/scenes/agentExecutor.js +5 -0
- package/dist/src/storage/sqlite/migrations/253_discussion_processing_recovery.sql +20 -0
- package/dist/src/storage/sqlite/migrations/254_discussion_annotations.sql +17 -0
- package/dist/src/storage/sqlite/migrations/255_discussion_chapter_progress.sql +10 -0
- package/dist/src/storage/sqlite/migrations/256_task_main_update_retries.sql +21 -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-collaboration-repository.d.ts +2 -0
- package/dist/src/tasks/task-collaboration-repository.js +7 -1
- package/dist/src/tasks/task-main-update-delivery.js +11 -4
- package/dist/src/tasks/task-main-update-input.js +2 -1
- package/dist/src/tasks/task-main-update-retry.d.ts +5 -0
- package/dist/src/tasks/task-main-update-retry.js +15 -0
- package/dist/src/usage/recorder.js +2 -1
- package/dist/src/usage/scenario-registry.js +128 -123
- package/dist/src/voice/dashscope/streaming-stt-session.js +3 -0
- package/dist/src/voice/dashscope/streaming-tts-stream.js +3 -0
- package/dist/src/voice/dictation.d.ts +12 -0
- package/dist/src/voice/dictation.js +22 -0
- package/dist/src/voice/metadata/builtin.js +54 -0
- package/dist/src/voice/platform-streams.js +3 -0
- package/dist/src/voice/realtime/omniEngine.js +3 -0
- package/dist/src/voice/realtime/omniRoute.js +3 -2
- package/dist/src/voice/realtime/runtime.js +4 -2
- package/dist/src/voice/stt/factory.js +9 -3
- package/dist/src/voice/stt/providers/bailian-plan-transcription.d.ts +2 -0
- package/dist/src/voice/stt/providers/bailian-plan-transcription.js +32 -0
- package/dist/src/voice/stt/providers/index.d.ts +1 -0
- package/dist/src/voice/stt/providers/index.js +2 -1
- package/dist/src/voice/token-plan.d.ts +8 -0
- package/dist/src/voice/token-plan.js +11 -0
- package/dist/src/voice/tts/factory.js +4 -1
- package/dist/src/voice/tts/providers/bailian-plan-speech.d.ts +2 -0
- package/dist/src/voice/tts/providers/bailian-plan-speech.js +84 -0
- package/dist/src/voice/tts/providers/index.d.ts +1 -0
- package/dist/src/voice/tts/providers/index.js +2 -1
- package/dist/src/voice/tts/speak-core.js +10 -1
- package/package.json +2 -2
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Ds0Ue2FB.js +0 -1
- package/dist/gateway/static/root/assets/agents-BLRM4o-U.js +0 -77
- package/dist/gateway/static/root/assets/app-management-settings-panel-Dmy828Pe.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-UcCneEs3.js +0 -6
- package/dist/gateway/static/root/assets/bot-DjLkhyZL.js +0 -1
- package/dist/gateway/static/root/assets/browser-automations-page-BjvQnYfO.js +0 -3
- package/dist/gateway/static/root/assets/browser-settings-page-D5ZghI28.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-page-MC8qIrXo.js +0 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-Blz3hEzp.js +0 -8
- package/dist/gateway/static/root/assets/channels-DSg_iCVC.js +0 -1
- package/dist/gateway/static/root/assets/chat-terminal-dock-C97SJEwd.js +0 -36
- package/dist/gateway/static/root/assets/circle-pause-CN9jYH2s.js +0 -1
- package/dist/gateway/static/root/assets/clock-3-DnrAnuyZ.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DXk-GAsd.js +0 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-BeSuq__I.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-jYu6qpY2.js +0 -1
- package/dist/gateway/static/root/assets/fallback-models-CoyzvDo7.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-C3vH-Iup.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-JlT1dlSj.js +0 -1
- package/dist/gateway/static/root/assets/git-branch-Dh9uxTot.js +0 -1
- package/dist/gateway/static/root/assets/home-page-DOVl8s-1.js +0 -2
- package/dist/gateway/static/root/assets/image-generation-api-BZBiYDmV.js +0 -1
- package/dist/gateway/static/root/assets/imports-page-DgdBTp_0.js +0 -1
- package/dist/gateway/static/root/assets/index-CmC8JkSM.js +0 -260
- package/dist/gateway/static/root/assets/index-Dgzc0oBu.css +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-BKZfn-MS.js +0 -1
- package/dist/gateway/static/root/assets/logs-page-BSepiACn.js +0 -2
- package/dist/gateway/static/root/assets/management-settings-dE_ykPNY.js +0 -1
- package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-65SE6j-_.js +0 -1
- package/dist/gateway/static/root/assets/message-square-fVE7Ghj1.js +0 -1
- package/dist/gateway/static/root/assets/messages-DlTNQI92.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-cache-C7FAsEe_.js +0 -1
- package/dist/gateway/static/root/assets/note-detail-panel-D9oqhdyk.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-Bd4_7ph8.js +0 -8
- package/dist/gateway/static/root/assets/pause-DuPxgSxk.js +0 -1
- package/dist/gateway/static/root/assets/personal-page-BvWzq4Wp.js +0 -1
- package/dist/gateway/static/root/assets/play-kxZvpBg8.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-D-qkIXVT.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-BQtw1Dfn.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CYFNz0Jc.js +0 -1
- package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Qq_NyYx_.js +0 -1
- package/dist/gateway/static/root/assets/scenes-page-hGr-ppYk.js +0 -2
- package/dist/gateway/static/root/assets/sessions-page-CpX1Rluw.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-D2s_MlxR.js +0 -1
- package/dist/gateway/static/root/assets/settings-loading-skeleton-BTqvr_Fw.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BiHRYDHq.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-DfcAu08T.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-CvKc5nBN.js +0 -2
- package/dist/gateway/static/root/assets/sparkles-DHlfQFAF.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-5B5ZVAu0.js +0 -2
- package/dist/gateway/static/root/assets/usage-page-rMuwNpJi.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-Dhqw3v_u.js +0 -2
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-pdiRKLxP.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-D9LMxINt.js +0 -6
|
@@ -6,6 +6,7 @@ import { getConnectionResumeInput, init_connection_wait_repository, isConnection
|
|
|
6
6
|
import { getSessionMetadata } from "../../storage/sqlite/session-read-repository.js";
|
|
7
7
|
import { init_session_repository } from "../../storage/sqlite/session-repository.js";
|
|
8
8
|
import { init_sqlite } from "../../storage/sqlite/index.js";
|
|
9
|
+
import { ProviderUsageScopeError, init_model_usage } from "../../providers/model-usage.js";
|
|
9
10
|
import { resolveEffectiveAgentConfigForSession } from "../../config/agent-profile.js";
|
|
10
11
|
import { setTraceIdentity, traceOperation, traceRun, traceTools } from "../../observability/runtime.js";
|
|
11
12
|
import { continuesAfterTool, trackAiUsageStream } from "../../usage/recorder.js";
|
|
@@ -41,6 +42,7 @@ import { getModelThinking } from "../../providers/model-thinking.js";
|
|
|
41
42
|
import "../messaging/no-reply.js";
|
|
42
43
|
import { createAssistantMessageEventStream, getCurrentSystemPrompt, getCurrentTools, isRecoverableLength } from "@earendil-works/pi-ai";
|
|
43
44
|
//#region src/agent/embedded/run-turn.ts
|
|
45
|
+
init_model_usage();
|
|
44
46
|
init_connection_wait_repository();
|
|
45
47
|
init_clarification_wait_repository();
|
|
46
48
|
init_logger();
|
|
@@ -273,6 +275,11 @@ async function runXopcEmbeddedTurn(params) {
|
|
|
273
275
|
conversationId: params.conversationId,
|
|
274
276
|
runId: params.runId
|
|
275
277
|
}, () => runXopcEmbeddedTurnInner(params), params.userMessage);
|
|
278
|
+
if (result.errorMessage?.includes("provider_usage_scope_denied")) return {
|
|
279
|
+
...result,
|
|
280
|
+
ok: false,
|
|
281
|
+
retryable: false
|
|
282
|
+
};
|
|
276
283
|
const stopped = cloudCreditBudgetStopMessage();
|
|
277
284
|
if (stopped) return {
|
|
278
285
|
...result,
|
|
@@ -289,6 +296,11 @@ async function runXopcEmbeddedTurn(params) {
|
|
|
289
296
|
}
|
|
290
297
|
return result;
|
|
291
298
|
} catch (error) {
|
|
299
|
+
if (error instanceof ProviderUsageScopeError) return {
|
|
300
|
+
ok: false,
|
|
301
|
+
retryable: false,
|
|
302
|
+
errorMessage: error.message
|
|
303
|
+
};
|
|
292
304
|
const message = error instanceof Error ? error.message : String(error);
|
|
293
305
|
if (isCloudCreditBudgetExhausted(message)) {
|
|
294
306
|
reportCloudCreditError(message);
|
|
@@ -612,7 +624,8 @@ async function runXopcEmbeddedTurnInner(params) {
|
|
|
612
624
|
block: true,
|
|
613
625
|
reason: "Tool is outside this execution scope."
|
|
614
626
|
};
|
|
615
|
-
|
|
627
|
+
const currentToolPolicy = resolveExecutionToolPolicy(toolPolicyConversationId);
|
|
628
|
+
if (currentToolPolicy.surface !== executionToolPolicy.surface || currentToolPolicy.taskExecution !== executionToolPolicy.taskExecution) {
|
|
616
629
|
policyStopped = true;
|
|
617
630
|
policyStopReason = "Execution identity changed during the run";
|
|
618
631
|
quarantineRunner = true;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { isCodemodeCoreRead } from "../tools/codemode-permissions.js";
|
|
4
3
|
import { filterExecutionTools, resolveExecutionToolPolicy } from "./execution-tool-policy.js";
|
|
4
|
+
import { isCodemodeCoreRead } from "../tools/codemode-permissions.js";
|
|
5
5
|
import { deferredToolContract, getXopcToolMetadata } from "./tool-metadata.js";
|
|
6
6
|
import { abortEmbeddedRun } from "./runs.js";
|
|
7
7
|
import { guardSessionManager } from "./session-tool-result-guard.js";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { assertProviderUsage, init_model_usage } from "../../providers/model-usage.js";
|
|
1
2
|
import "../../providers/constants.js";
|
|
2
3
|
import { init_providers } from "../../providers/index.js";
|
|
3
4
|
import { createExtensionAwareStreamFn } from "../../providers/extension-stream-bridge.js";
|
|
@@ -6,6 +7,7 @@ import { assertCloudCreditBudgetActive, cloudCreditBudgetHeaders, hasCloudCredit
|
|
|
6
7
|
import { preparePromptCacheContext, withPromptCachePayloadTransform } from "../../providers/prompt-cache-payload.js";
|
|
7
8
|
import { getCurrentSystemPrompt, getCurrentTools, normalizeContext } from "@earendil-works/pi-ai";
|
|
8
9
|
//#region src/agent/embedded/xopc-stream-bridge.ts
|
|
10
|
+
init_model_usage();
|
|
9
11
|
init_providers();
|
|
10
12
|
/**
|
|
11
13
|
* pi-coding-agent's default {@link createAgentSession} streamFn always routes through
|
|
@@ -20,6 +22,7 @@ function wrapStreamFnForXopcExtensions(originalStreamFn, promptCachePolicy) {
|
|
|
20
22
|
const extensionStreamFn = createExtensionAwareStreamFn();
|
|
21
23
|
return ((model, context, options) => {
|
|
22
24
|
assertCloudCreditBudgetActive();
|
|
25
|
+
assertProviderUsage(model.provider, model.baseUrl);
|
|
23
26
|
if (model.provider === "xopc-cloud") options = withCloudUsageResponse(options);
|
|
24
27
|
const promptContext = {
|
|
25
28
|
systemPrompt: getCurrentSystemPrompt(context.messages),
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { createLogger } from "../../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../../utils/logger.js";
|
|
3
|
+
import { assertProviderUsage, init_model_usage } from "../../../providers/model-usage.js";
|
|
3
4
|
import { PROVIDER_ENV_MAP, init_env_keys } from "../../../providers/env-keys.js";
|
|
4
|
-
import { ImageProviderError } from "../../../../packages/image-providers/src/validation.js";
|
|
5
|
+
import { ImageProviderError, normalizeImageGeometry } from "../../../../packages/image-providers/src/validation.js";
|
|
5
6
|
import "../../../../packages/image-providers/src/index.js";
|
|
6
7
|
import { describeFailoverError, isFailoverError } from "../../failover-error.js";
|
|
7
8
|
import { buildNoCapabilityModelConfiguredMessage, recordCapabilityCandidateFailure, resolveCapabilityModelCandidates, throwCapabilityGenerationFailure } from "../../media-generation/runtime-shared.js";
|
|
@@ -10,6 +11,7 @@ import { parseImageGenerationModelRef } from "./model-ref.js";
|
|
|
10
11
|
import { validateImageGenerationRequest } from "./validation.js";
|
|
11
12
|
import { getImageGenerationProvider, listImageGenerationProviders, listImageGenerationProvidersSummary as listImageGenerationProvidersSummary$1 } from "./provider-registry.js";
|
|
12
13
|
//#region src/agent/image/generation/runtime.ts
|
|
14
|
+
init_model_usage();
|
|
13
15
|
init_env_keys();
|
|
14
16
|
init_logger();
|
|
15
17
|
const log = createLogger("ImageGen");
|
|
@@ -59,30 +61,26 @@ async function generateImage(params, deps = {}) {
|
|
|
59
61
|
try {
|
|
60
62
|
if (!provider.models.includes(candidate.model)) throw new ImageProviderError(`Unsupported image model: ${candidate.model}`, 400);
|
|
61
63
|
const modelCapabilities = provider.modelCapabilities?.[candidate.model];
|
|
64
|
+
const capabilityProvider = modelCapabilities ? {
|
|
65
|
+
...provider,
|
|
66
|
+
capabilities: modelCapabilities
|
|
67
|
+
} : provider;
|
|
68
|
+
const candidateParams = normalizeImageGeometry(params, capabilityProvider.capabilities, Boolean(params.inputImages?.length));
|
|
62
69
|
validateImageGenerationRequest({
|
|
63
|
-
provider:
|
|
64
|
-
|
|
65
|
-
capabilities: modelCapabilities
|
|
66
|
-
} : provider,
|
|
67
|
-
size: params.size,
|
|
68
|
-
count: params.count,
|
|
69
|
-
aspectRatio: params.aspectRatio,
|
|
70
|
-
resolution: params.resolution,
|
|
71
|
-
quality: params.quality,
|
|
72
|
-
outputFormat: params.outputFormat,
|
|
73
|
-
background: params.background,
|
|
74
|
-
inputImages: params.inputImages
|
|
70
|
+
provider: capabilityProvider,
|
|
71
|
+
...candidateParams
|
|
75
72
|
});
|
|
76
73
|
const request = buildProviderRequest({
|
|
77
74
|
provider,
|
|
78
75
|
candidate,
|
|
79
|
-
params
|
|
76
|
+
params: candidateParams
|
|
80
77
|
});
|
|
81
78
|
log.debug({
|
|
82
79
|
provider: candidate.provider,
|
|
83
80
|
model: candidate.model,
|
|
84
81
|
phase: "provider_invoked"
|
|
85
82
|
}, `image-generation provider invoked: ${candidate.provider}/${candidate.model}`);
|
|
83
|
+
assertProviderUsage(candidate.provider, request.cfg?.providers?.[candidate.provider]?.baseUrl);
|
|
86
84
|
const result = await provider.generateImage(request);
|
|
87
85
|
if (!result.images?.length) throw new Error("Image generation provider returned no images.");
|
|
88
86
|
return {
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
import { assertProviderUsage, init_model_usage, isProviderUsageScopeError } from "../../../providers/model-usage.js";
|
|
1
2
|
import { init_schema, parseModelRef } from "../../../config/schema.js";
|
|
2
3
|
import { getImageUnderstandingProvider } from "./provider-registry.js";
|
|
3
4
|
import "./pi-ai-provider.js";
|
|
4
5
|
//#region src/agent/image/understanding/runtime.ts
|
|
6
|
+
init_model_usage();
|
|
5
7
|
init_schema();
|
|
6
8
|
async function describeImages(params) {
|
|
7
9
|
const parsed = parseModelRef(params.modelRef);
|
|
8
10
|
if (!parsed) throw new Error(`Invalid model reference: ${params.modelRef}`);
|
|
11
|
+
assertProviderUsage(parsed.provider);
|
|
9
12
|
const provider = getImageUnderstandingProvider(parsed.provider);
|
|
10
13
|
if (!provider) throw new Error(`No image understanding provider registered for: ${parsed.provider}. Ensure the provider module is imported.`);
|
|
11
14
|
return provider.describeImages(parsed.model, {
|
|
@@ -40,6 +43,7 @@ async function describeImagesWithFallback(params) {
|
|
|
40
43
|
continue;
|
|
41
44
|
}
|
|
42
45
|
try {
|
|
46
|
+
assertProviderUsage(parsed.provider);
|
|
43
47
|
return {
|
|
44
48
|
...await provider.describeImages(parsed.model, {
|
|
45
49
|
images: params.images,
|
|
@@ -51,6 +55,7 @@ async function describeImagesWithFallback(params) {
|
|
|
51
55
|
attempts
|
|
52
56
|
};
|
|
53
57
|
} catch (err) {
|
|
58
|
+
if (isProviderUsageScopeError(err)) throw err;
|
|
54
59
|
lastError = err;
|
|
55
60
|
attempts.push({
|
|
56
61
|
provider: parsed.provider,
|
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* InboundLoop — owns the bus-driven inbound pipeline.
|
|
3
|
-
*
|
|
4
|
-
* Replaces the previous `AgentService.start()` while-loop, `handleInboundMessage`,
|
|
5
|
-
* and `handleSystemMessage` methods. Everything that "a message arrives, run the
|
|
6
|
-
* agent turn, publish the reply" needs is concentrated here; the parent
|
|
7
|
-
* `AgentService` now just constructs the loop with collaborators and forwards
|
|
8
|
-
* start/stop to it.
|
|
9
|
-
*
|
|
10
|
-
* The constructor takes a fairly wide config because handling a single inbound
|
|
11
|
-
* message touches almost every subsystem (router, command handler, lifecycle
|
|
12
|
-
* manager, agent orchestrator, outbound coordinator, session state, etc.). All
|
|
13
|
-
* dependencies are injected so this class is unit-testable and the inbound
|
|
14
|
-
* pipeline can evolve without touching `AgentService`.
|
|
15
|
-
*/
|
|
16
1
|
import type { MessageBus } from '../../infra/bus/index.js';
|
|
17
2
|
import type { Config } from '../../config/schema.js';
|
|
18
3
|
import type { ChannelManager } from '../../channels/manager.js';
|
|
@@ -74,5 +59,6 @@ export declare class InboundLoop {
|
|
|
74
59
|
/** Cooperatively stop the loop; the current message (if any) is allowed to finish. */
|
|
75
60
|
stop(): void;
|
|
76
61
|
private handleInboundMessage;
|
|
62
|
+
private handleInboundMessageScoped;
|
|
77
63
|
private handleSystemMessage;
|
|
78
64
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { runWithLogContext, updateAsyncLogContext } from "../../utils/logger/context.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
+
import { init_model_usage, withModelUsageOrigin } from "../../providers/model-usage.js";
|
|
3
4
|
import { shouldSkipResetOverlapCommand } from "../../session/reset-triggers.js";
|
|
4
5
|
import { initSessionTurn } from "../../session/init-session-turn.js";
|
|
5
6
|
import { MessageBusShutdownError } from "../../infra/bus/queue.js";
|
|
@@ -7,6 +8,7 @@ import "../../infra/bus/index.js";
|
|
|
7
8
|
import { runEmbeddedTurnForSession } from "../embedded/run-for-session.js";
|
|
8
9
|
import { inboundMessageLogRequestId } from "../service-inbound-utils.js";
|
|
9
10
|
//#region src/agent/inbound/inbound-loop.ts
|
|
11
|
+
init_model_usage();
|
|
10
12
|
init_logger();
|
|
11
13
|
/** Initial back-off when bus consume fails. Doubles each consecutive failure. */
|
|
12
14
|
const INBOUND_CONSUME_BASE_BACKOFF_MS = 1e3;
|
|
@@ -75,6 +77,9 @@ var InboundLoop = class {
|
|
|
75
77
|
this.running = false;
|
|
76
78
|
}
|
|
77
79
|
async handleInboundMessage(msg) {
|
|
80
|
+
return withModelUsageOrigin(msg.channel === "system" ? "background" : "interactive", () => this.handleInboundMessageScoped(msg));
|
|
81
|
+
}
|
|
82
|
+
async handleInboundMessageScoped(msg) {
|
|
78
83
|
await runWithLogContext({ requestId: inboundMessageLogRequestId(msg) }, async () => {
|
|
79
84
|
const { context, isCommand, command, commandArgs } = await this.cfg.messageRouter.routeMessage(msg);
|
|
80
85
|
const sessionContext = {
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type McpConnectionErrorCode = 'command_missing' | 'connection_refused' | 'host_not_found' | 'timeout' | 'access_denied' | 'network' | 'tls' | 'invalid_response' | 'not_found' | 'rate_limited' | 'configuration' | 'unknown';
|
|
2
|
+
/** Return a safe category without exposing addresses, headers, or credential-bearing errors. */
|
|
3
|
+
export declare function classifyMcpConnectionError(error: unknown): McpConnectionErrorCode;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region src/agent/mcp/connection-errors.ts
|
|
2
|
+
/** Return a safe category without exposing addresses, headers, or credential-bearing errors. */
|
|
3
|
+
function classifyMcpConnectionError(error) {
|
|
4
|
+
const messages = [];
|
|
5
|
+
const seen = /* @__PURE__ */ new Set();
|
|
6
|
+
let current = error;
|
|
7
|
+
while (current && !seen.has(current) && seen.size < 8) {
|
|
8
|
+
seen.add(current);
|
|
9
|
+
if (typeof current !== "object") {
|
|
10
|
+
messages.push(String(current));
|
|
11
|
+
break;
|
|
12
|
+
}
|
|
13
|
+
const detail = current;
|
|
14
|
+
messages.push(String(detail.message ?? ""), String(detail.code ?? ""));
|
|
15
|
+
current = detail.cause;
|
|
16
|
+
}
|
|
17
|
+
const message = messages.join(" ");
|
|
18
|
+
if (/ENOENT|command not found|executable.{0,30}not found/i.test(message)) return "command_missing";
|
|
19
|
+
if (/ECONNREFUSED|connection refused/i.test(message)) return "connection_refused";
|
|
20
|
+
if (/ENOTFOUND|EAI_AGAIN|could not resolve/i.test(message)) return "host_not_found";
|
|
21
|
+
if (/timeout|timed out|ETIMEDOUT/i.test(message)) return "timeout";
|
|
22
|
+
if (/CERT_|CERTIFICATE|ERR_TLS|UNABLE_TO_VERIFY|DEPTH_ZERO|self.signed|unable to verify/i.test(message)) return "tls";
|
|
23
|
+
if (/\b429\b|too many requests|rate.limit/i.test(message)) return "rate_limited";
|
|
24
|
+
if (/\b(?:401|403)\b|unauthorized|forbidden|permission denied|invalid_token/i.test(message)) return "access_denied";
|
|
25
|
+
if (/\b404\b|\b405\b|method not allowed/i.test(message)) return "not_found";
|
|
26
|
+
if (/ECONNRESET|EHOSTUNREACH|ENETUNREACH|fetch failed|network error|socket.*closed/i.test(message)) return "network";
|
|
27
|
+
if (/content.type|text\/html|invalid json|unexpected token|protocol version|not a valid JSON/i.test(message)) return "invalid_response";
|
|
28
|
+
if (/not configured|invalid configuration|is disabled/i.test(message)) return "configuration";
|
|
29
|
+
return "unknown";
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { classifyMcpConnectionError };
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { Config } from '../../config/schema.js';
|
|
2
|
+
import { type McpConnectionErrorCode } from './connection-errors.js';
|
|
2
3
|
import { type McpSessionOptions } from './tool-catalog.js';
|
|
3
4
|
export type McpConnectionProbe = {
|
|
4
5
|
state: 'connected' | 'oauth_required' | 'token_required' | 'error';
|
|
5
6
|
toolCount?: number;
|
|
6
7
|
error?: string;
|
|
8
|
+
errorCode?: McpConnectionErrorCode;
|
|
7
9
|
};
|
|
8
10
|
export declare function probeMcpConnection(config: Config, workspace: string, serverId: string, options?: McpSessionOptions): Promise<McpConnectionProbe>;
|
|
9
11
|
export type McpAuthorization = {
|
|
@@ -1,34 +1,44 @@
|
|
|
1
|
+
import { createLogger } from "../../utils/logger/index.js";
|
|
2
|
+
import { init_logger } from "../../utils/logger.js";
|
|
1
3
|
import { isManagedConnectorServer } from "../../connectors/materialize.js";
|
|
2
4
|
import { prepareNativeMcpConfig } from "./native-mcp.js";
|
|
5
|
+
import { classifyMcpConnectionError } from "./connection-errors.js";
|
|
3
6
|
import { McpAuthenticationRequiredError, discoverMcpTools, signInNativeMcp } from "./tool-catalog.js";
|
|
4
7
|
import { createHash, randomUUID } from "node:crypto";
|
|
5
8
|
//#region src/agent/mcp/connection-setup.ts
|
|
9
|
+
init_logger();
|
|
10
|
+
const log = createLogger("McpConnectionSetup");
|
|
6
11
|
function httpUrl(value) {
|
|
7
12
|
const url = new URL(value);
|
|
8
13
|
if (!["http:", "https:"].includes(url.protocol) || url.username || url.password) throw new Error("Use an HTTP or HTTPS MCP address without embedded credentials.");
|
|
9
14
|
return url;
|
|
10
15
|
}
|
|
11
|
-
async function metadata(url) {
|
|
16
|
+
async function metadata(url, signal) {
|
|
12
17
|
try {
|
|
13
18
|
const response = await fetch(url, {
|
|
14
|
-
signal: AbortSignal.timeout(5e3),
|
|
19
|
+
signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(5e3)]) : AbortSignal.timeout(5e3),
|
|
15
20
|
redirect: "error",
|
|
16
21
|
headers: { Accept: "application/json" }
|
|
17
22
|
});
|
|
18
23
|
if (!response.ok) return;
|
|
19
24
|
const result = await response.json();
|
|
20
25
|
if (result && typeof result === "object" && !Array.isArray(result)) return result;
|
|
21
|
-
} catch {
|
|
26
|
+
} catch {
|
|
27
|
+
signal?.throwIfAborted();
|
|
28
|
+
}
|
|
22
29
|
}
|
|
23
30
|
/** A 401 alone is not evidence that a service supports OAuth. */
|
|
24
|
-
async function advertisesOAuth(config, workspace, serverId) {
|
|
25
|
-
|
|
31
|
+
async function advertisesOAuth(config, workspace, serverId, signal) {
|
|
32
|
+
signal?.throwIfAborted();
|
|
33
|
+
const loaded = await prepareNativeMcpConfig(config, workspace);
|
|
34
|
+
signal?.throwIfAborted();
|
|
35
|
+
const entry = loaded.servers.find((server) => server.name === serverId);
|
|
26
36
|
if (!entry || !("url" in entry.config)) return false;
|
|
27
37
|
const url = httpUrl(entry.config.url);
|
|
28
38
|
if (Object.keys(entry.config.headers ?? {}).some((name) => name.toLowerCase() === "authorization")) return false;
|
|
29
39
|
const response = await fetch(url, {
|
|
30
40
|
method: "POST",
|
|
31
|
-
signal: AbortSignal.timeout(1e4),
|
|
41
|
+
signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(1e4)]) : AbortSignal.timeout(1e4),
|
|
32
42
|
redirect: "error",
|
|
33
43
|
headers: {
|
|
34
44
|
Accept: "application/json, text/event-stream",
|
|
@@ -58,7 +68,8 @@ async function advertisesOAuth(config, workspace, serverId) {
|
|
|
58
68
|
new URL("/.well-known/oauth-protected-resource", url)
|
|
59
69
|
];
|
|
60
70
|
for (const candidate of candidates) {
|
|
61
|
-
|
|
71
|
+
signal?.throwIfAborted();
|
|
72
|
+
const data = await metadata(candidate, signal);
|
|
62
73
|
if (data && typeof data.resource === "string" && data.resource === url.href && Array.isArray(data.authorization_servers) && data.authorization_servers.some((value) => {
|
|
63
74
|
try {
|
|
64
75
|
return typeof value === "string" && Boolean(httpUrl(value));
|
|
@@ -68,7 +79,7 @@ async function advertisesOAuth(config, workspace, serverId) {
|
|
|
68
79
|
})) return true;
|
|
69
80
|
}
|
|
70
81
|
if (!/\bBearer\b/i.test(challenge)) return false;
|
|
71
|
-
const legacy = await metadata(new URL("/.well-known/oauth-authorization-server", url));
|
|
82
|
+
const legacy = await metadata(new URL("/.well-known/oauth-authorization-server", url), signal);
|
|
72
83
|
return Boolean(legacy && legacy.issuer === url.origin && typeof legacy.authorization_endpoint === "string" && typeof legacy.token_endpoint === "string");
|
|
73
84
|
}
|
|
74
85
|
async function probeMcpConnection(config, workspace, serverId, options) {
|
|
@@ -78,20 +89,29 @@ async function probeMcpConnection(config, workspace, serverId, options) {
|
|
|
78
89
|
toolCount: (await discoverMcpTools(config, workspace, serverId, options)).length
|
|
79
90
|
};
|
|
80
91
|
} catch (error) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
92
|
+
const failed = (cause) => {
|
|
93
|
+
const errorCode = classifyMcpConnectionError(cause);
|
|
94
|
+
log.warn({
|
|
95
|
+
serverId,
|
|
96
|
+
errorCode
|
|
97
|
+
}, `MCP connection check failed: ${errorCode}`);
|
|
84
98
|
return {
|
|
85
99
|
state: "error",
|
|
86
|
-
error:
|
|
100
|
+
error: cause instanceof Error ? cause.message : String(cause),
|
|
101
|
+
errorCode
|
|
87
102
|
};
|
|
88
|
-
}
|
|
89
|
-
const server = config.mcp?.servers?.[serverId];
|
|
90
|
-
if (server?.url && Object.keys(server.headers ?? {}).some((name) => name.toLowerCase() === "authorization") && /401|403|unauthorized|forbidden/i.test(String(error))) return { state: "token_required" };
|
|
91
|
-
return {
|
|
92
|
-
state: "error",
|
|
93
|
-
error: error instanceof Error ? error.message : String(error)
|
|
94
103
|
};
|
|
104
|
+
const server = config.mcp?.servers?.[serverId];
|
|
105
|
+
const rejectedCredential = /\b401\b|unauthorized|invalid_token/i.test(String(error));
|
|
106
|
+
const hasCredentials = server?.auth || Object.keys(server?.headers ?? {}).some((name) => name.toLowerCase() === "authorization");
|
|
107
|
+
if (error instanceof McpAuthenticationRequiredError || server?.url && rejectedCredential && !hasCredentials) try {
|
|
108
|
+
options?.signal?.throwIfAborted();
|
|
109
|
+
return { state: await advertisesOAuth(config, workspace, serverId, options?.signal) ? "oauth_required" : "token_required" };
|
|
110
|
+
} catch (cause) {
|
|
111
|
+
return failed(cause);
|
|
112
|
+
}
|
|
113
|
+
if (server?.url && hasCredentials && /\b(?:401|403)\b|unauthorized|forbidden/i.test(String(error))) return { state: "token_required" };
|
|
114
|
+
return failed(error);
|
|
95
115
|
}
|
|
96
116
|
}
|
|
97
117
|
const attempts = /* @__PURE__ */ new Map();
|
|
@@ -2,6 +2,7 @@ import { createLogger } from "../../utils/logger/index.js";
|
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { init_compaction_types, isCompactionHandover } from "../../session/compaction-types.js";
|
|
4
4
|
import { buildSessionContextForLlm, init_session_context_for_llm, isTranscriptCompactionEntry } from "../../session/session-context-for-llm.js";
|
|
5
|
+
import { getModelUsageOrigin, init_model_usage, isProviderUsageScopeError } from "../../providers/model-usage.js";
|
|
5
6
|
import { completeWithResolvedCredentials } from "../../providers/model-call.js";
|
|
6
7
|
import { estimateMessagesTokens, estimateTextTokens } from "./context-budget.js";
|
|
7
8
|
import { applyCompactionHandoverDelta, consolidateCompactionHandover, handoverForPrompt, renderCompactionHandover } from "./compaction-ledger.js";
|
|
@@ -11,6 +12,7 @@ import { CompactionChunkCursor } from "./compaction-chunks.js";
|
|
|
11
12
|
import { COMPACTION_REPAIR_RESERVE, CompactionRequestError, compactionOutputLimit, compactionPayloadGuard, compactionPromptFits, initialCompactionOutputLimit, isPermanentCompactionError } from "./compaction-request.js";
|
|
12
13
|
import { createHash } from "node:crypto";
|
|
13
14
|
//#region src/agent/memory/compaction.ts
|
|
15
|
+
init_model_usage();
|
|
14
16
|
init_session_context_for_llm();
|
|
15
17
|
init_compaction_types();
|
|
16
18
|
init_logger();
|
|
@@ -397,6 +399,7 @@ Return a valid JSON delta only.`;
|
|
|
397
399
|
auditModelRef: reviewed.modelRef
|
|
398
400
|
};
|
|
399
401
|
} catch (error) {
|
|
402
|
+
if (isProviderUsageScopeError(error)) throw error;
|
|
400
403
|
signal?.throwIfAborted();
|
|
401
404
|
log.warn({
|
|
402
405
|
err: error,
|
|
@@ -521,7 +524,7 @@ Return a JSON delta containing only missing facts, using {"upserts":[]}. Include
|
|
|
521
524
|
}, void 0, {
|
|
522
525
|
operation: "session.compact",
|
|
523
526
|
conversationId: callContext.conversationId,
|
|
524
|
-
trigger: attempt === 0 && modelIndex === 0 ? "system" : "retry"
|
|
527
|
+
trigger: attempt === 0 && modelIndex === 0 ? getModelUsageOrigin() === "interactive" ? "agent" : "system" : "retry"
|
|
525
528
|
});
|
|
526
529
|
parentSignal?.throwIfAborted();
|
|
527
530
|
if (linked.timedOut()) throw new CompactionRequestError("timeout", "Compaction handover timed out");
|
|
@@ -554,6 +557,7 @@ Return a JSON delta containing only missing facts, using {"upserts":[]}. Include
|
|
|
554
557
|
modelRef: `${model.provider}/${model.id}`
|
|
555
558
|
};
|
|
556
559
|
} catch (error) {
|
|
560
|
+
if (isProviderUsageScopeError(error)) throw error;
|
|
557
561
|
parentSignal?.throwIfAborted();
|
|
558
562
|
lastError = linked.timedOut() ? new CompactionRequestError("timeout", `Compaction handover timed out after ${this.config.summaryTimeoutMs}ms`) : error;
|
|
559
563
|
const kind = lastError instanceof CompactionRequestError ? lastError.kind : "provider";
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
+
import { init_model_usage, withModelUsageOrigin } from "../../providers/model-usage.js";
|
|
3
4
|
//#region src/agent/memory/idle-compaction-scheduler.ts
|
|
5
|
+
init_model_usage();
|
|
4
6
|
init_logger();
|
|
5
7
|
const log = createLogger("IdleCompaction");
|
|
6
8
|
/** Generation checks protect commits even when a provider ignores cancellation. */
|
|
@@ -89,7 +91,7 @@ var IdleCompactionScheduler = class {
|
|
|
89
91
|
state.deadline = timeout;
|
|
90
92
|
timeout.unref?.();
|
|
91
93
|
});
|
|
92
|
-
const operation = Promise.resolve().then(() => job(controller.signal, isCurrent));
|
|
94
|
+
const operation = Promise.resolve().then(() => withModelUsageOrigin("background", () => job(controller.signal, isCurrent)));
|
|
93
95
|
Promise.race([operation, deadline]).then((outcome) => {
|
|
94
96
|
this.metrics[outcome]++;
|
|
95
97
|
if (outcome === "committed") state.eligibleAt = Date.now() + options.cooldownMs;
|
|
@@ -62,6 +62,7 @@ export declare class ModelManager {
|
|
|
62
62
|
* Get model for session, checking session override first
|
|
63
63
|
*/
|
|
64
64
|
getModelForSession(conversationId: string): string;
|
|
65
|
+
hasSessionModelOverride(conversationId: string): boolean;
|
|
65
66
|
/**
|
|
66
67
|
* Apply model to agent if different from current
|
|
67
68
|
*/
|
|
@@ -42,8 +42,7 @@ var ModelManager = class {
|
|
|
42
42
|
setSessionProfileDefault(conversationId, modelRef, fallbacks = []) {
|
|
43
43
|
this.sessionProfileDefaults.set(conversationId, modelRef);
|
|
44
44
|
const cleanFallbacks = fallbacks.map((ref) => ref.trim()).filter(Boolean);
|
|
45
|
-
|
|
46
|
-
else this.sessionProfileFallbacks.delete(conversationId);
|
|
45
|
+
this.sessionProfileFallbacks.set(conversationId, cleanFallbacks);
|
|
47
46
|
}
|
|
48
47
|
/**
|
|
49
48
|
* Register the profile model and return the model that should initialize the
|
|
@@ -117,6 +116,9 @@ var ModelManager = class {
|
|
|
117
116
|
if (profileDefault) return profileDefault;
|
|
118
117
|
return this.defaultModel;
|
|
119
118
|
}
|
|
119
|
+
hasSessionModelOverride(conversationId) {
|
|
120
|
+
return this.sessionModels.has(conversationId);
|
|
121
|
+
}
|
|
120
122
|
/**
|
|
121
123
|
* Apply model to agent if different from current
|
|
122
124
|
*/
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Orchestrator - Coordinates Agent execution flow
|
|
3
|
-
*
|
|
4
|
-
* Manages the complete agent execution pipeline from message processing
|
|
5
|
-
* to response generation.
|
|
6
|
-
*/
|
|
7
1
|
import type { Config } from '../../config/schema.js';
|
|
8
2
|
import type { InboundMessage } from '../../infra/bus/index.js';
|
|
9
3
|
import type { SessionConfigStore, SessionStore } from '../../session/index.js';
|
|
@@ -52,6 +46,7 @@ export declare class AgentOrchestrator {
|
|
|
52
46
|
* Process a message through the agent orchestration pipeline
|
|
53
47
|
*/
|
|
54
48
|
process(msg: InboundMessage, context: SessionContext): Promise<void>;
|
|
49
|
+
private processScoped;
|
|
55
50
|
/**
|
|
56
51
|
* Get the current agent model ID
|
|
57
52
|
*/
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
+
import { init_model_usage, modelUsageOriginFromTurn, withModelUsageOrigin } from "../../providers/model-usage.js";
|
|
3
4
|
import { abortEmbeddedRun } from "../embedded/runs.js";
|
|
4
5
|
import { persistInboundAttachments } from "../../channels/attachments/inbound-persist.js";
|
|
5
6
|
import { buildTranscriptUserMessage, clearPendingTranscriptUserMessage, hydrateUserTurnForLlm, setPendingTranscriptUserMessage } from "../inbound/attachment-pipeline.js";
|
|
@@ -13,6 +14,7 @@ import { randomUUID } from "node:crypto";
|
|
|
13
14
|
* Manages the complete agent execution pipeline from message processing
|
|
14
15
|
* to response generation.
|
|
15
16
|
*/
|
|
17
|
+
init_model_usage();
|
|
16
18
|
init_logger();
|
|
17
19
|
const log = createLogger("AgentOrchestrator");
|
|
18
20
|
var AgentOrchestrator = class {
|
|
@@ -42,6 +44,9 @@ var AgentOrchestrator = class {
|
|
|
42
44
|
* Process a message through the agent orchestration pipeline
|
|
43
45
|
*/
|
|
44
46
|
async process(msg, context) {
|
|
47
|
+
return withModelUsageOrigin(modelUsageOriginFromTurn(context.origin), () => this.processScoped(msg, context));
|
|
48
|
+
}
|
|
49
|
+
async processScoped(msg, context) {
|
|
45
50
|
const { conversationId } = context;
|
|
46
51
|
log.debug({ conversationId }, "Processing message through agent orchestrator");
|
|
47
52
|
await this.sessionHydrator.workspace(conversationId);
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
+
import { init_model_usage, modelUsageOriginFromTurn, withModelUsageOrigin } from "../../providers/model-usage.js";
|
|
1
2
|
import { clearPendingTranscriptUserMessage, setPendingTranscriptUserMessage } from "../inbound/attachment-pipeline.js";
|
|
2
3
|
import { initSessionTurn } from "../../session/init-session-turn.js";
|
|
3
4
|
import "../../session/index.js";
|
|
4
5
|
import { buildDirectUserMessageContent } from "./build-direct-message-content.js";
|
|
5
6
|
import { hydratePerTurnState, runDirectAgentTurn, tryRunSlashCommand } from "./direct-turn-helpers.js";
|
|
6
7
|
//#region src/agent/service/process-direct-one-shot.ts
|
|
8
|
+
init_model_usage();
|
|
7
9
|
function isReviewOutput(value) {
|
|
8
10
|
return !!value && typeof value === "object" && !Array.isArray(value) && value.type === "review";
|
|
9
11
|
}
|
|
10
12
|
async function runProcessDirect(deps, input) {
|
|
13
|
+
return withModelUsageOrigin(modelUsageOriginFromTurn(input.origin), () => runProcessDirectInner(deps, input));
|
|
14
|
+
}
|
|
15
|
+
async function runProcessDirectInner(deps, input) {
|
|
11
16
|
deps.sessionStore?.idleCompaction?.interrupt(input.conversationId);
|
|
12
17
|
const { channel, chatId } = await deps.resolveSessionEndpoint(input.conversationId);
|
|
13
18
|
deps.initSessionContext(input.conversationId, channel, chatId, input.origin);
|
|
@@ -77,4 +77,5 @@ export type ProcessDirectStreamEvent = {
|
|
|
77
77
|
type: string;
|
|
78
78
|
[key: string]: unknown;
|
|
79
79
|
};
|
|
80
|
+
/** Bind each generator advancement so independent streams retain their own origin. */
|
|
80
81
|
export declare function runProcessDirectStreaming(deps: ProcessDirectStreamingDeps, input: ProcessDirectStreamingInput): AsyncGenerator<ProcessDirectStreamEvent, void, unknown>;
|
|
@@ -5,6 +5,7 @@ import { getClarificationResumeInput, init_clarification_wait_repository } from
|
|
|
5
5
|
import { getConnectionResumeInput, init_connection_wait_repository } from "../../storage/sqlite/connection-wait-repository.js";
|
|
6
6
|
import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
|
|
7
7
|
import { init_agent_session_key, resolveAgentMainConversationId } from "../../routing/agent-session-key.js";
|
|
8
|
+
import { init_model_usage, modelUsageOriginFromTurn, withModelUsageOrigin } from "../../providers/model-usage.js";
|
|
8
9
|
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
9
10
|
import { abortEmbeddedRun } from "../embedded/runs.js";
|
|
10
11
|
import { clearPendingTranscriptUserMessage, setPendingTranscriptUserMessage } from "../inbound/attachment-pipeline.js";
|
|
@@ -24,6 +25,7 @@ import { AsyncQueue, AsyncQueueOverflowError } from "./async-queue.js";
|
|
|
24
25
|
import { hydratePerTurnState, runDirectAgentTurn, tryRunSlashCommand } from "./direct-turn-helpers.js";
|
|
25
26
|
import { isSuccessfulWebchatTtsToolEvent } from "./webchat-tts.js";
|
|
26
27
|
//#region src/agent/service/process-direct-streaming.ts
|
|
28
|
+
init_model_usage();
|
|
27
29
|
init_agent_session_key();
|
|
28
30
|
init_agent_scope();
|
|
29
31
|
init_src();
|
|
@@ -137,7 +139,7 @@ function pushAssistantReceipt(queue, text, runId, metadata) {
|
|
|
137
139
|
message
|
|
138
140
|
});
|
|
139
141
|
}
|
|
140
|
-
async function*
|
|
142
|
+
async function* runProcessDirectStreamingInner(deps, input) {
|
|
141
143
|
const conversationId = input.conversationId ?? resolveAgentMainConversationId({ agentId: resolveDefaultAgentId() });
|
|
142
144
|
deps.sessionStore?.idleCompaction?.interrupt(conversationId);
|
|
143
145
|
const isConnectionResume = Boolean(input.runId && getConnectionResumeInput(conversationId, input.runId));
|
|
@@ -445,5 +447,19 @@ async function* runProcessDirectStreaming(deps, input) {
|
|
|
445
447
|
deps.endDirectRequestContext();
|
|
446
448
|
}
|
|
447
449
|
}
|
|
450
|
+
/** Bind each generator advancement so independent streams retain their own origin. */
|
|
451
|
+
async function* runProcessDirectStreaming(deps, input) {
|
|
452
|
+
const iterator = runProcessDirectStreamingInner(deps, input);
|
|
453
|
+
const origin = modelUsageOriginFromTurn(input.origin);
|
|
454
|
+
try {
|
|
455
|
+
while (true) {
|
|
456
|
+
const result = await withModelUsageOrigin(origin, () => iterator.next());
|
|
457
|
+
if (result.done) return;
|
|
458
|
+
yield result.value;
|
|
459
|
+
}
|
|
460
|
+
} finally {
|
|
461
|
+
await withModelUsageOrigin(origin, () => iterator.return());
|
|
462
|
+
}
|
|
463
|
+
}
|
|
448
464
|
//#endregion
|
|
449
465
|
export { runProcessDirectStreaming };
|