@xopcai/xopc 0.0.251 → 0.0.253
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/README.md +8 -5
- package/README.zh-CN.md +8 -5
- package/dist/browser-ext/dist/background.js +358 -768
- package/dist/browser-ext/manifest.json +1 -2
- package/dist/extensions/telegram/src/inbound-processor.js +2 -2
- package/dist/extensions/telegram/src/plugin.js +3 -2
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-DfBjTSo9.js → activity-store-CeS1bgXP.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Bo_dmLv8.js → agent-avatar-dicebear-BdF3HhCW.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Bs34Kp0K.js +1 -0
- package/dist/gateway/static/root/assets/{agents-yuUn8n-f.js → agents-DARlgjTm.js} +1 -1
- package/dist/gateway/static/root/assets/{api-zxpcJfgj.js → api-zMPeC0yU.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-Cz56nrVF.js → app-management-settings-panel-BaAFln8W.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DxSws5U4.js → appearance-settings-CXvsoBlw.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-BhgvfBJT.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-7k15-hqo.js → archive-plugin-C0o_mVQI.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-B-SFpjd9.js → attachment-load-B5Ry3tGL.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-Qy36j19q.js → automations-page-DY5QAEQd.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-BzX4lILP.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-CPOZQt8F.js → binary-plugins-BydpEgBA.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-DhvVlIp9.js → block-editor-D0CpUOMo.js} +3 -3
- package/dist/gateway/static/root/assets/browser-automation-inputs-DzbTsGI6.js +1 -0
- package/dist/gateway/static/root/assets/browser-automations-page-D7fZYjni.js +3 -0
- package/dist/gateway/static/root/assets/browser-settings-page-BBdMqxl0.js +3 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-D_WfftDW.js +7 -0
- package/dist/gateway/static/root/assets/channels-settings-bdRLT9KA.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-CX-yWwLD.js → channels-status-swr-BGGRTkn6.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-1PJoxRuV.js → chat-terminal-dock-_CP4nvlg.js} +2 -2
- package/dist/gateway/static/root/assets/connectors-page-CPDjU5wU.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-CBCc6zFA.js → cron-expression-g2U8Rllf.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-u8K5Kt_N.js → date-picker-SmVlhtj_.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-y_i_cnpz.js → dependency-picker-D-0gcbbM.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-DyL0JxLm.js → desktop-pet-Cl3JRIu6.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-d2d_IsyP.js → desktop-pet-settings-D7kvWQ9H.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-DqIBKJwl.js → extension-debug-page-DtP2tJHY.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DUW1xxj2.js → extension-page-CphZDdoT.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BHY9qaNw.js → extension-settings-page-CsxVLV4-.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-CMNbl0FZ.js → gateway-config-swr-BW3Bx-aV.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-DxBZ05dX.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-CR7Xg8As.js → gateway-startup-retry-DAq74TZe.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-7CD9iPR7.js → heartbeat-settings-DWcKsIoZ.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-BdvLZKQZ.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-C5mn73ca.js → image-generation-api-MPuaXDRs.js} +1 -1
- package/dist/gateway/static/root/assets/index-C7RDs6S-.js +74 -0
- package/dist/gateway/static/root/assets/index-Cu8xqZQ9.css +2 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BtlqMleF.js → keyboard-shortcuts-settings-CfhaTqgE.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-BjxfkjxE.js → local-app-workbench-page-CR6asX7L.js} +2 -2
- package/dist/gateway/static/root/assets/{local-apps-page-B7xqQe2s.js → local-apps-page-g01W3kEK.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-CF4erhjB.js → locale-store-BkeaPZpn.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-kACaPZKL.js → logs-page-ZP4QTWoC.js} +2 -2
- package/dist/gateway/static/root/assets/{management-settings-A432siER.js → management-settings-DeGxJF_Z.js} +1 -1
- package/dist/gateway/static/root/assets/markdown-view-Ca7BRBLL.js +201 -0
- package/dist/gateway/static/root/assets/{media-plugins-CpvYiauZ.js → media-plugins-FmOhmzlD.js} +1 -1
- package/dist/gateway/static/root/assets/messages-C72stReU.js +3 -0
- package/dist/gateway/static/root/assets/{mobile-pairing-wizard-DyjVGngO.js → mobile-pairing-wizard-BXNbn05L.js} +1 -1
- package/dist/gateway/static/root/assets/note-detail-panel-EeVeF4II.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-D7bMff96.js +8 -0
- package/dist/gateway/static/root/assets/{page-tabs-B3FKzjR6.js → page-tabs-pyukZ1PJ.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-DnjrwAHD.js → preview-open-alternatives-slFHoMUe.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-COcr_NUJ.js → product-open-page-CXa3FNNk.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-BDF88VdN.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-DeTD6pu1.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-BsRBlji7.js → registry-api-CviQoUBf.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CxKrdQ6a.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-LO4wZ_dO.js → runtime-tools-settings-panel-O9D9o7-O.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-crcj4-Pm.js → schema-form-8FesicnL.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-DUFJN-2t.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CcSYDjaH.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-Bl4MvTmq.js → settings-form-section-CBic9TFH.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-DplrjZ6x.js → settings-page-Xz66_Mjg.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-C6DuwrP5.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-CJP1kURj.js → share-preview-page--JpjwB58.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-CemgzEi4.js → shares-settings-CovcdHSC.js} +1 -1
- package/dist/gateway/static/root/assets/skill-reload-api-CrHagTsE.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-DsjcKg9Q.js → skills-page-fVKExKv5.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page.utils-D6gWBbvy.js → skills-page.utils-Yv9u3uJp.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-_eCXfqCo.js → system-settings-panel-CCWjVdc2.js} +1 -1
- package/dist/gateway/static/root/assets/{task-detail-page-D0Z_K5JT.js → task-detail-page-I8hueJnG.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-BOgkc_9D.js → theme-store-BtkaVpMm.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-W5mktxl1.js → tunnel-api-C__W9BaN.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-Na2DYzT3.js → use-autosave-Dow9RRcq.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-CU6nxmoM.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-OXweUxS_.js → voice-api-key-field-CvF3lEyx.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-C-ryeIxj.js → voice-config-api-BEUVAyM6.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-BqOsO47I.js → work-discovery-overlay-B9PDfReq.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-B9S_lfT1.js → workflow-run-setup-panel-kWGFkhjz.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-B4Is5E42.js +5 -0
- package/dist/gateway/static/root/index.html +10 -10
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/new-session.js +9 -0
- package/dist/packages/realtime-protocol/src/voice.js +6 -1
- package/dist/src/agent/agent-manager.d.ts +2 -1
- package/dist/src/agent/agent-manager.js +26 -8
- package/dist/src/agent/background-review/run-background-review.js +1 -1
- package/dist/src/agent/coding/repository-instructions.js +2 -2
- package/dist/src/agent/coding/workspace-revision.js +2 -2
- package/dist/src/agent/commands/command-isolation.js +2 -2
- package/dist/src/agent/embedded/execution-context.d.ts +2 -1
- package/dist/src/agent/embedded/execution-context.js +10 -4
- package/dist/src/agent/embedded/index.d.ts +1 -1
- package/dist/src/agent/embedded/index.js +2 -2
- package/dist/src/agent/embedded/model-runtime.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +5 -4
- package/dist/src/agent/embedded/run-turn.js +22 -3
- package/dist/src/agent/embedded/types.d.ts +1 -1
- package/dist/src/agent/external-tools/composio-provider.d.ts +1 -0
- package/dist/src/agent/external-tools/composio-provider.js +64 -34
- package/dist/src/agent/external-tools/search-error.js +5 -3
- package/dist/src/agent/image/tool-model-config.js +1 -1
- package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
- package/dist/src/agent/service/direct-turn-helpers.js +6 -3
- package/dist/src/agent/service/process-direct-streaming.js +6 -3
- package/dist/src/agent/service.d.ts +2 -0
- package/dist/src/agent/service.js +25 -10
- package/dist/src/agent/service.types.d.ts +2 -1
- package/dist/src/agent/session/session-inspector.js +1 -1
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +4 -0
- package/dist/src/agent/tasks/task-judge-service.js +3 -3
- package/dist/src/agent/tool-manuals/browser.d.ts +1 -1
- package/dist/src/agent/tool-manuals/browser.js +15 -226
- package/dist/src/agent/tools/browser/tool/browser-use-tool.d.ts +4 -21
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +48 -165
- package/dist/src/agent/tools/browser/tool/schemas.d.ts +203 -16
- package/dist/src/agent/tools/browser/tool/schemas.js +146 -16
- package/dist/src/agent/tools/browser-automation-tool.d.ts +121 -0
- package/dist/src/agent/tools/browser-automation-tool.js +197 -0
- package/dist/src/agent/tools/clarify-tool.d.ts +17 -3
- package/dist/src/agent/tools/clarify-tool.js +27 -32
- package/dist/src/agent/tools/cli-clarify.js +23 -8
- package/dist/src/agent/tools/factory.d.ts +6 -9
- package/dist/src/agent/tools/factory.js +42 -59
- package/dist/src/agent/tools/index.d.ts +2 -2
- package/dist/src/agent/tools/index.js +3 -3
- package/dist/src/agent/tools/review-workspace.js +2 -2
- package/dist/src/ai-assist/text-assist.js +1 -1
- package/dist/src/auth/credentials.js +2 -2
- package/dist/src/auth/oauth/xopc-cloud.js +3 -1
- package/dist/src/auth/profiles/store.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +2 -2
- package/dist/src/automations/domain/defaults.js +1 -1
- package/dist/src/automations/domain/types.d.ts +5 -5
- package/dist/src/automations/domain/validation.d.ts +16 -16
- package/dist/src/automations/domain/validation.js +3 -3
- package/dist/src/automations/draft/automation-draft-validator.d.ts +4 -4
- package/dist/src/automations/draft/automation-draft-validator.js +1 -1
- package/dist/src/automations/service/action-executor.d.ts +1 -1
- package/dist/src/automations/service/action-executor.js +7 -7
- package/dist/src/browser/{recipes → automations}/index.d.ts +1 -0
- package/dist/src/browser/automations/index.js +4 -0
- package/dist/src/browser/automations/repository.d.ts +13 -0
- package/dist/src/browser/automations/repository.js +60 -0
- package/dist/src/browser/automations/runner.d.ts +17 -0
- package/dist/src/browser/automations/runner.js +173 -0
- package/dist/src/browser/automations/runtime-service.d.ts +6 -0
- package/dist/src/browser/automations/runtime-service.js +37 -0
- package/dist/src/browser/automations/schema.d.ts +144 -0
- package/dist/src/browser/automations/schema.js +135 -0
- package/dist/src/browser/automations/service.d.ts +146 -0
- package/dist/src/browser/automations/service.js +168 -0
- package/dist/src/browser/automations/types.d.ts +90 -0
- package/dist/src/browser/cache-dir-policy.d.ts +1 -1
- package/dist/src/browser/cache-dir-policy.js +1 -4
- package/dist/src/browser/drivers/browser-driver.d.ts +17 -0
- package/dist/src/browser/drivers/create-driver.d.ts +3 -0
- package/dist/src/browser/drivers/create-driver.js +84 -0
- package/dist/src/browser/drivers/extension-driver.d.ts +20 -0
- package/dist/src/browser/drivers/extension-driver.js +47 -0
- package/dist/src/browser/drivers/playwright-driver.d.ts +38 -0
- package/dist/src/browser/drivers/playwright-driver.js +406 -0
- package/dist/src/browser/index.d.ts +10 -15
- package/dist/src/browser/index.js +10 -15
- package/dist/src/browser/install-lock.d.ts +1 -2
- package/dist/src/browser/install-lock.js +3 -9
- package/dist/src/browser/install-progress.d.ts +1 -1
- package/dist/src/browser/observation/format.d.ts +2 -0
- package/dist/src/browser/observation/format.js +26 -0
- package/dist/src/browser/policy/approval-store.d.ts +17 -0
- package/dist/src/browser/policy/approval-store.js +62 -0
- package/dist/src/browser/policy/browser-policy.d.ts +3 -0
- package/dist/src/browser/policy/browser-policy.js +27 -0
- package/dist/src/browser/providers/browser-ext-install.d.ts +1 -1
- package/dist/src/browser/providers/browser-ext-install.js +4 -6
- package/dist/src/browser/providers/browser-use.js +1 -1
- package/dist/src/browser/providers/browserbase.js +1 -1
- package/dist/src/browser/providers/extension-ws-acquire.d.ts +1 -4
- package/dist/src/browser/providers/extension-ws-acquire.js +1 -13
- package/dist/src/browser/providers/extension.d.ts +3 -22
- package/dist/src/browser/providers/extension.js +7 -15
- package/dist/src/browser/providers/index.d.ts +2 -2
- package/dist/src/browser/providers/index.js +3 -3
- package/dist/src/browser/providers/types.d.ts +0 -94
- package/dist/src/browser/readiness.d.ts +4 -22
- package/dist/src/browser/readiness.js +55 -118
- package/dist/src/browser/runtime/browser-runtime.d.ts +30 -0
- package/dist/src/browser/runtime/browser-runtime.js +362 -0
- package/dist/src/browser/url-policy.d.ts +3 -3
- package/dist/src/browser/url-policy.js +7 -6
- package/dist/src/browser/verification/expectation.d.ts +2 -0
- package/dist/src/browser/verification/expectation.js +17 -0
- package/dist/src/cli/command-loaders.js +1 -0
- package/dist/src/cli/command-manifest.js +5 -1
- package/dist/src/cli/commands/browser-cli-helpers.d.ts +0 -6
- package/dist/src/cli/commands/browser-cli-helpers.js +11 -144
- package/dist/src/cli/commands/browser.d.ts +0 -5
- package/dist/src/cli/commands/browser.js +11 -152
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/node-version.js +25 -9
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/cli/commands/platform.d.ts +1 -0
- package/dist/src/cli/commands/platform.js +111 -0
- package/dist/src/config/index.js +4 -4
- package/dist/src/config/loader.js +10 -4
- package/dist/src/config/models-json.js +1 -1
- package/dist/src/config/schema.d.ts +131 -84
- package/dist/src/config/schema.js +112 -59
- package/dist/src/connectors/composio-sessions.js +1 -3
- package/dist/src/extensions/lockfile.js +1 -1
- package/dist/src/extensions/marketplace.js +4 -0
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/chat-stream/mapper.js +5 -1
- package/dist/src/gateway/chat-stream/protocol.d.ts +5 -1
- package/dist/src/gateway/clarify-runtime.d.ts +7 -5
- package/dist/src/gateway/clarify-runtime.js +8 -11
- package/dist/src/gateway/ephemeral-clarification-waiter.d.ts +17 -0
- package/dist/src/gateway/ephemeral-clarification-waiter.js +46 -0
- package/dist/src/gateway/file-path-classifier.js +1 -1
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +12 -26
- package/dist/src/gateway/hono/lib/config-payload.js +11 -40
- package/dist/src/gateway/hono/routes/agent-stream.js +44 -18
- package/dist/src/gateway/hono/routes/browser-automations.d.ts +3 -0
- package/dist/src/gateway/hono/routes/browser-automations.js +77 -0
- package/dist/src/gateway/hono/routes/browser-install.js +0 -32
- package/dist/src/gateway/hono/routes/browser.d.ts +0 -17
- package/dist/src/gateway/hono/routes/browser.js +46 -568
- package/dist/src/gateway/hono/routes/config-patch/misc.js +8 -1
- package/dist/src/gateway/hono/routes/config.js +0 -11
- package/dist/src/gateway/hono/routes/lazy-bundles.js +5 -5
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/session-input-handler.d.ts +10 -2
- package/dist/src/gateway/hono/routes/side-chats.js +24 -4
- package/dist/src/gateway/security/gateway-scopes.js +1 -1
- package/dist/src/gateway/service/agent-runner.d.ts +25 -36
- package/dist/src/gateway/service/agent-runner.js +103 -32
- package/dist/src/gateway/service/config-coordinator.js +1 -1
- package/dist/src/gateway/service/run-gateway-agent.js +5 -2
- package/dist/src/gateway/service/session-input-coordinator.js +4 -1
- package/dist/src/gateway/service/sessions-api.js +1 -1
- package/dist/src/gateway/service.d.ts +8 -8
- package/dist/src/gateway/service.js +50 -37
- package/dist/src/gateway/side-chat/manager.d.ts +2 -1
- package/dist/src/gateway/side-chat/manager.js +5 -4
- package/dist/src/gateway/side-chat/run-service.d.ts +5 -1
- package/dist/src/gateway/side-chat/run-service.js +24 -23
- package/dist/src/gateway/side-chat/types.d.ts +3 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/platform/client.d.ts +121 -0
- package/dist/src/platform/client.js +108 -0
- package/dist/src/platform/contracts.d.ts +194 -0
- package/dist/src/platform/contracts.js +150 -0
- package/dist/src/platform/index.d.ts +4 -0
- package/dist/src/platform/index.js +9 -0
- package/dist/src/platform/resolution.d.ts +4 -0
- package/dist/src/platform/resolution.js +16 -0
- package/dist/src/platform/worker.d.ts +6 -0
- package/dist/src/platform/worker.js +75 -0
- package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
- package/dist/src/providers/index.js +2 -2
- package/dist/src/providers/model-registry.js +1 -1
- package/dist/src/providers/register-runtime-providers.js +1 -1
- package/dist/src/providers/xopc-cloud-config.js +3 -1
- package/dist/src/session/session-context-for-llm.js +41 -1
- package/dist/src/share/hosted-session-share.js +3 -1
- package/dist/src/share/share-thumbnail.js +1 -1
- package/dist/src/storage/sqlite/clarification-wait-repository.d.ts +41 -0
- package/dist/src/storage/sqlite/clarification-wait-repository.js +418 -0
- package/dist/src/storage/sqlite/index.d.ts +2 -1
- package/dist/src/storage/sqlite/index.js +2 -1
- package/dist/src/storage/sqlite/migrations/153_browser_control_v2.sql +45 -0
- package/dist/src/storage/sqlite/migrations/154_session_clarification_waits.sql +60 -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/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/schema.sql +16 -20
- package/dist/src/storage/sqlite/session-input-repository.d.ts +11 -6
- package/dist/src/tasks/home-query-service.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/tunnel/env.js +3 -1
- package/dist/src/voice/realtime/agentEngine.js +7 -2
- package/dist/src/voice/realtime/runtime.types.d.ts +5 -0
- package/dist/src/work-discovery/service.js +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +1 -1
- package/package.json +7 -7
- package/skills/creative/hatch-pet/SKILL.md +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-kILWelNb.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-BnizTdgs.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-CZRKqSqY.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-pN5LbChY.js +0 -8
- package/dist/gateway/static/root/assets/browser-workflow-inputs-BX1-uM9L.js +0 -1
- package/dist/gateway/static/root/assets/browser-workflows-page-C65MI57t.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-settings-panel-CJw2e16J.js +0 -7
- package/dist/gateway/static/root/assets/channels-settings-CRgjb4Ck.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-Dcpdy06y.js +0 -2
- package/dist/gateway/static/root/assets/gateway-config-api-e3BRcgDx.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-Cheo0Rkc.js +0 -1
- package/dist/gateway/static/root/assets/home-page-DVrTRqNc.js +0 -1
- package/dist/gateway/static/root/assets/index-B7CX4Qob.css +0 -2
- package/dist/gateway/static/root/assets/index-BHrpyJ4t.js +0 -72
- package/dist/gateway/static/root/assets/markdown-view-CQvzsE24.js +0 -201
- package/dist/gateway/static/root/assets/messages-Cf5hpZE6.js +0 -3
- package/dist/gateway/static/root/assets/note-detail-panel-CUd8O4K7.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-BLQwd39W.js +0 -8
- package/dist/gateway/static/root/assets/project-detail-page-NttW338u.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-BzH8pjEz.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BxpjSDnL.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BLMaibOb.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BRvvKhoH.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DTOsxQC1.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-BWYanBlQ.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-B_-SNat-.js +0 -2
- package/dist/gateway/static/root/assets/workflows-page-CNOT2Coo.js +0 -5
- package/dist/src/agent/tools/browser-recipe-tool.d.ts +0 -12
- package/dist/src/agent/tools/browser-recipe-tool.js +0 -113
- package/dist/src/browser/actions/extension-registry-bridge.d.ts +0 -5
- package/dist/src/browser/actions/extension-registry-bridge.js +0 -312
- package/dist/src/browser/actions/registry.d.ts +0 -5
- package/dist/src/browser/actions/registry.js +0 -741
- package/dist/src/browser/actions/types.d.ts +0 -65
- package/dist/src/browser/backend-from-config.d.ts +0 -22
- package/dist/src/browser/backend-from-config.js +0 -99
- package/dist/src/browser/browser-command-timeout.d.ts +0 -2
- package/dist/src/browser/browser-command-timeout.js +0 -11
- package/dist/src/browser/cdp-local-launcher.d.ts +0 -35
- package/dist/src/browser/cdp-local-launcher.js +0 -154
- package/dist/src/browser/cdp-supervisor.d.ts +0 -58
- package/dist/src/browser/cdp-supervisor.js +0 -133
- package/dist/src/browser/humanize.d.ts +0 -80
- package/dist/src/browser/humanize.js +0 -363
- package/dist/src/browser/manager.d.ts +0 -50
- package/dist/src/browser/manager.js +0 -251
- package/dist/src/browser/pipeline/output.d.ts +0 -35
- package/dist/src/browser/pipeline/output.js +0 -74
- package/dist/src/browser/pipeline/runner.d.ts +0 -27
- package/dist/src/browser/pipeline/runner.js +0 -453
- package/dist/src/browser/pipeline/schema.d.ts +0 -42
- package/dist/src/browser/pipeline/schema.js +0 -116
- package/dist/src/browser/pipeline/template.d.ts +0 -30
- package/dist/src/browser/pipeline/template.js +0 -112
- package/dist/src/browser/providers/cloakbrowser.d.ts +0 -83
- package/dist/src/browser/providers/cloakbrowser.js +0 -612
- package/dist/src/browser/recipes/index.js +0 -3
- package/dist/src/browser/recipes/repository.d.ts +0 -13
- package/dist/src/browser/recipes/repository.js +0 -81
- package/dist/src/browser/recipes/runtime-service.d.ts +0 -6
- package/dist/src/browser/recipes/runtime-service.js +0 -30
- package/dist/src/browser/recipes/service.d.ts +0 -36
- package/dist/src/browser/recipes/service.js +0 -186
- package/dist/src/browser/recipes/types.d.ts +0 -36
- package/dist/src/browser/schemas.d.ts +0 -53
- package/dist/src/browser/schemas.js +0 -68
- package/dist/src/browser/session-lifecycle.d.ts +0 -40
- package/dist/src/browser/session-lifecycle.js +0 -136
- package/dist/src/browser/snapshot-helpers.d.ts +0 -24
- package/dist/src/browser/snapshot-helpers.js +0 -70
- package/dist/src/browser/stealth.d.ts +0 -46
- package/dist/src/browser/stealth.js +0 -163
- package/dist/src/gateway/clarify-bridge.d.ts +0 -46
- package/dist/src/gateway/clarify-bridge.js +0 -111
- package/dist/src/gateway/hono/routes/browser-workflows.d.ts +0 -3
- package/dist/src/gateway/hono/routes/browser-workflows.js +0 -78
- /package/dist/src/browser/{actions → automations}/types.js +0 -0
- /package/dist/src/browser/{recipes/types.js → drivers/browser-driver.js} +0 -0
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=20260713-1" />
|
|
12
12
|
<link rel="manifest" href="/site.webmanifest?v=20260713-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-C7RDs6S-.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,13 +25,13 @@
|
|
|
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-C72stReU.js">
|
|
29
|
+
<link rel="modulepreload" crossorigin href="/assets/locale-store-BkeaPZpn.js">
|
|
30
30
|
<link rel="modulepreload" crossorigin href="/assets/cn-JdwAhgNB.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/schemas-BHS7bo06.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/product-delivery-CV4pDOtG.js">
|
|
33
33
|
<link rel="modulepreload" crossorigin href="/assets/copy-to-clipboard-HOJ79TWv.js">
|
|
34
|
-
<link rel="modulepreload" crossorigin href="/assets/markdown-view-
|
|
34
|
+
<link rel="modulepreload" crossorigin href="/assets/markdown-view-Ca7BRBLL.js">
|
|
35
35
|
<link rel="modulepreload" crossorigin href="/assets/dist-DLmwHyAh.js">
|
|
36
36
|
<link rel="modulepreload" crossorigin href="/assets/vendor-swr-BIWyz7Rc.js">
|
|
37
37
|
<link rel="modulepreload" crossorigin href="/assets/check-DUBLcKHA.js">
|
|
@@ -48,15 +48,15 @@
|
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/files-BArWTfr7.js">
|
|
49
49
|
<link rel="modulepreload" crossorigin href="/assets/tool-activity-R8V9l6nk.js">
|
|
50
50
|
<link rel="modulepreload" crossorigin href="/assets/button-CtTvuElV.js">
|
|
51
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-
|
|
52
|
-
<link rel="modulepreload" crossorigin href="/assets/registry-api-
|
|
51
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-DAq74TZe.js">
|
|
52
|
+
<link rel="modulepreload" crossorigin href="/assets/registry-api-CviQoUBf.js">
|
|
53
53
|
<link rel="modulepreload" crossorigin href="/assets/config-reload-event-Bjh2zoKp.js">
|
|
54
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-
|
|
54
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-BW3Bx-aV.js">
|
|
55
55
|
<link rel="modulepreload" crossorigin href="/assets/electron-env-DH5wF8X8.js">
|
|
56
|
-
<link rel="modulepreload" crossorigin href="/assets/activity-store-
|
|
57
|
-
<link rel="modulepreload" crossorigin href="/assets/theme-store-
|
|
56
|
+
<link rel="modulepreload" crossorigin href="/assets/activity-store-CeS1bgXP.js">
|
|
57
|
+
<link rel="modulepreload" crossorigin href="/assets/theme-store-BtkaVpMm.js">
|
|
58
58
|
<link rel="stylesheet" crossorigin href="/assets/markdown-view-Y68dCxuc.css">
|
|
59
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
59
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Cu8xqZQ9.css">
|
|
60
60
|
</head>
|
|
61
61
|
<body>
|
|
62
62
|
<div id="root"></div>
|
package/dist/package.js
CHANGED
|
@@ -11,6 +11,7 @@ function createDefaultNewSessionPreferences() {
|
|
|
11
11
|
return {
|
|
12
12
|
version: 1,
|
|
13
13
|
modelByAgent: {},
|
|
14
|
+
executionModeByProject: {},
|
|
14
15
|
lastChatScope: noProjectScope()
|
|
15
16
|
};
|
|
16
17
|
}
|
|
@@ -43,6 +44,13 @@ function parseModelPreferences(value) {
|
|
|
43
44
|
}
|
|
44
45
|
return result;
|
|
45
46
|
}
|
|
47
|
+
function parseExecutionModePreferences(value) {
|
|
48
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return {};
|
|
49
|
+
return Object.fromEntries(Object.entries(value).flatMap(([rawProjectId, rawMode]) => {
|
|
50
|
+
const projectId = normalized(rawProjectId);
|
|
51
|
+
return projectId && (rawMode === "local_checkout" || rawMode === "managed_worktree") ? [[projectId, rawMode]] : [];
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
46
54
|
function parseNewSessionPreferences(value) {
|
|
47
55
|
const fallback = createDefaultNewSessionPreferences();
|
|
48
56
|
if (!value || typeof value !== "object" || Array.isArray(value)) return fallback;
|
|
@@ -53,6 +61,7 @@ function parseNewSessionPreferences(value) {
|
|
|
53
61
|
version: 1,
|
|
54
62
|
...selectedAgentId ? { selectedAgentId } : {},
|
|
55
63
|
modelByAgent: parseModelPreferences(record.modelByAgent),
|
|
64
|
+
executionModeByProject: parseExecutionModePreferences(record.executionModeByProject),
|
|
56
65
|
lastChatScope: parseProjectScope(record.lastChatScope) ?? noProjectScope()
|
|
57
66
|
};
|
|
58
67
|
}
|
|
@@ -159,8 +159,13 @@ z.discriminatedUnion("type", [
|
|
|
159
159
|
serverEnvelope("response.clarification", z.strictObject({
|
|
160
160
|
responseId: z.string().min(1).max(160),
|
|
161
161
|
requestId: z.string().min(1).max(160),
|
|
162
|
+
kind: z.enum(["input", "approval"]),
|
|
162
163
|
question: z.string().min(1).max(8e3),
|
|
163
|
-
choices: z.array(z.string().max(1e3)).max(20).optional()
|
|
164
|
+
choices: z.array(z.string().max(1e3)).max(20).optional(),
|
|
165
|
+
suggestedAnswer: z.string().max(1e3).optional(),
|
|
166
|
+
version: z.number().int().positive(),
|
|
167
|
+
createdAt: z.number().nonnegative(),
|
|
168
|
+
expiresAt: z.number().nonnegative().optional()
|
|
164
169
|
})),
|
|
165
170
|
serverEnvelope("response.text.delta", z.strictObject({
|
|
166
171
|
responseId: z.string().min(1).max(160),
|
|
@@ -94,7 +94,8 @@ export interface AgentManagerConfig {
|
|
|
94
94
|
};
|
|
95
95
|
/** Gateway: exposes AutomationService for the `automation` tool. */
|
|
96
96
|
getAutomationService?: () => AutomationService | undefined;
|
|
97
|
-
|
|
97
|
+
getBrowserAutomationService?: () => import('../browser/automations/index.js').BrowserAutomationService | undefined;
|
|
98
|
+
emitBrowserEvent?: (type: string, payload: unknown) => void;
|
|
98
99
|
/** Gateway: exposes first-class xopc product objects for the `xopc_use` tool. */
|
|
99
100
|
getNotesService?: () => NotesService | undefined;
|
|
100
101
|
getProjectService?: () => ProjectService | undefined;
|
|
@@ -2,25 +2,27 @@ import { resolveStateDir } from "../config/paths-state.js";
|
|
|
2
2
|
import { createLogger } from "../utils/logger/index.js";
|
|
3
3
|
import { init_logger } from "../utils/logger.js";
|
|
4
4
|
import { isXopcDatabaseOpen } from "../storage/sqlite/connection.js";
|
|
5
|
+
import { consumeClarificationApproval } from "../storage/sqlite/clarification-wait-repository.js";
|
|
5
6
|
import { getInteractionState } from "../storage/sqlite/interaction-state-repository.js";
|
|
6
7
|
import { getSessionMetadata } from "../storage/sqlite/session-repository.js";
|
|
7
8
|
import "../storage/sqlite/index.js";
|
|
8
9
|
import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
|
|
10
|
+
import { applyConfigOverrides } from "../config/runtime-overrides.js";
|
|
9
11
|
import { expandWorkspacePathString, init_workspace_path } from "../config/workspace-path.js";
|
|
10
12
|
import { init_agent_scope, resolveAgentProfileDir } from "./agent-scope.js";
|
|
11
|
-
import { init_paths, resolveBundledSkillsDir } from "../config/paths.js";
|
|
12
|
-
import { CredentialResolver, init_credentials } from "../auth/credentials.js";
|
|
13
13
|
import { init_session_key, parseSessionKey } from "../routing/session-key.js";
|
|
14
|
+
import { resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
15
|
+
import { init_paths, resolveBundledSkillsDir } from "../config/paths.js";
|
|
14
16
|
import { init_sync_provider_auth, resolveProviderApiKeySync } from "../auth/sync-provider-auth.js";
|
|
17
|
+
import { CredentialResolver, init_credentials } from "../auth/credentials.js";
|
|
15
18
|
import { getApiKeySync, getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
|
|
16
19
|
import { createExtensionAwareStreamFn } from "../providers/extension-stream-bridge.js";
|
|
17
|
-
import { applyConfigOverrides } from "../config/runtime-overrides.js";
|
|
18
|
-
import { resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
19
20
|
import { extractTextContent } from "./context/workspace.js";
|
|
20
21
|
import { buildExecutionScopeContextForPrompt } from "./context/execution-scope.js";
|
|
21
22
|
import { clearBootstrapSnapshot } from "./bootstrap/bootstrap-cache.js";
|
|
22
23
|
import { resolveBootstrapContextSync } from "./bootstrap/bootstrap-files.js";
|
|
23
24
|
import { loadProjectAgentsContextFile } from "./bootstrap/project-agents-context.js";
|
|
25
|
+
import { getEmbeddedExecutionRunId } from "./embedded/execution-context.js";
|
|
24
26
|
import { parseExternalToolRef } from "./external-tools/refs.js";
|
|
25
27
|
import { mcpToolPolicyId } from "./mcp/bundle-mcp-policy.js";
|
|
26
28
|
import { disposeAllSessionMcpRuntimes, retireSessionMcpRuntimeForSessionKey } from "./mcp/bundle-mcp-runtime.js";
|
|
@@ -47,6 +49,7 @@ import { maybeRequestChannelExecApproval } from "../channels/exec-approval-runti
|
|
|
47
49
|
import { SkillFilesystemWatcher } from "./skills/filesystem-watcher.js";
|
|
48
50
|
import { ProjectTrustStore, hasTrustRequiringProjectResources } from "../project-trust/trust-store.js";
|
|
49
51
|
import { basename, resolve, sep } from "node:path";
|
|
52
|
+
import { createHash } from "node:crypto";
|
|
50
53
|
import { Agent } from "@earendil-works/pi-agent-core";
|
|
51
54
|
//#region src/agent/agent-manager.ts
|
|
52
55
|
/**
|
|
@@ -245,7 +248,8 @@ var AgentManager = class {
|
|
|
245
248
|
getSessionStore: this.config.getSessionStore,
|
|
246
249
|
gatewayClarify: this.config.gatewayClarify,
|
|
247
250
|
getAutomationService: this.config.getAutomationService,
|
|
248
|
-
|
|
251
|
+
getBrowserAutomationService: this.config.getBrowserAutomationService,
|
|
252
|
+
emitBrowserEvent: this.config.emitBrowserEvent,
|
|
249
253
|
getNotesService: this.config.getNotesService,
|
|
250
254
|
getProjectService: this.config.getProjectService,
|
|
251
255
|
getLocalAppService: this.config.getLocalAppService,
|
|
@@ -1067,12 +1071,26 @@ var AgentManager = class {
|
|
|
1067
1071
|
async requestToolConfirmation(sessionKey, toolName, detail) {
|
|
1068
1072
|
const request = this.config.gatewayClarify?.requestClarification;
|
|
1069
1073
|
if (!request) return false;
|
|
1070
|
-
|
|
1074
|
+
const approvalKey = createHash("sha256").update(`${toolName}\0${detail}`).digest("hex");
|
|
1075
|
+
const existing = consumeClarificationApproval(sessionKey, approvalKey);
|
|
1076
|
+
if (existing) return existing === "approved";
|
|
1077
|
+
const runId = getEmbeddedExecutionRunId();
|
|
1078
|
+
if (!runId) return false;
|
|
1079
|
+
const result = await request({
|
|
1080
|
+
sessionKey,
|
|
1081
|
+
runId,
|
|
1082
|
+
toolCallId: `approval:${approvalKey}`
|
|
1083
|
+
}, {
|
|
1071
1084
|
kind: "approval",
|
|
1072
1085
|
question: `Allow ${toolName} to run once?\n${detail.slice(0, 500)}`,
|
|
1073
1086
|
choices: ["Allow once", "Deny"],
|
|
1074
|
-
|
|
1075
|
-
|
|
1087
|
+
suggestedAnswer: "Deny",
|
|
1088
|
+
approvalKey
|
|
1089
|
+
}).catch(() => ({
|
|
1090
|
+
status: "answered",
|
|
1091
|
+
answer: "Deny"
|
|
1092
|
+
}));
|
|
1093
|
+
return result.status === "answered" && result.answer === "Allow once";
|
|
1076
1094
|
}
|
|
1077
1095
|
refreshDynamicContextIfChanged(instance) {
|
|
1078
1096
|
const nextProjectContext = this.buildExecutionScopeContext(instance.sessionKey);
|
|
@@ -4,10 +4,10 @@ import { finishContextExtractionRun } from "../../storage/sqlite/context-extract
|
|
|
4
4
|
import { getSessionMetadata } from "../../storage/sqlite/session-repository.js";
|
|
5
5
|
import { loadCompactionSourceSnapshot } from "../../storage/sqlite/transcript-repository.js";
|
|
6
6
|
import "../../storage/sqlite/index.js";
|
|
7
|
+
import { extractProfileAgentId } from "../../config/agent-profile.js";
|
|
7
8
|
import { init_sync_provider_auth, resolveProviderApiKeySync } from "../../auth/sync-provider-auth.js";
|
|
8
9
|
import { getApiKeySync, init_providers, resolveModel } from "../../providers/index.js";
|
|
9
10
|
import { createExtensionAwareStreamFn } from "../../providers/extension-stream-bridge.js";
|
|
10
|
-
import { extractProfileAgentId } from "../../config/agent-profile.js";
|
|
11
11
|
import { extractTextContent } from "../context/workspace.js";
|
|
12
12
|
import { listUserAssertions } from "../../user-model/repository.js";
|
|
13
13
|
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
@@ -3,7 +3,7 @@ import { execFile } from "node:child_process";
|
|
|
3
3
|
import { readFile, realpath, stat } from "node:fs/promises";
|
|
4
4
|
import { promisify } from "node:util";
|
|
5
5
|
//#region src/agent/coding/repository-instructions.ts
|
|
6
|
-
const exec
|
|
6
|
+
const exec = promisify(execFile);
|
|
7
7
|
function inside(root, path) {
|
|
8
8
|
const rel = relative(root, path);
|
|
9
9
|
return rel !== ".." && !rel.startsWith(`..${sep}`) && !isAbsolute(rel);
|
|
@@ -27,7 +27,7 @@ var RepositoryInstructions = class RepositoryInstructions {
|
|
|
27
27
|
} catch {}
|
|
28
28
|
const canonicalWorkspace = root;
|
|
29
29
|
try {
|
|
30
|
-
root = await realpath((await exec
|
|
30
|
+
root = await realpath((await exec("git", ["rev-parse", "--show-toplevel"], {
|
|
31
31
|
cwd: root,
|
|
32
32
|
timeout: 5e3
|
|
33
33
|
})).stdout.trim());
|
|
@@ -4,11 +4,11 @@ import { createHash } from "node:crypto";
|
|
|
4
4
|
import { lstat, readFile, readlink, realpath } from "node:fs/promises";
|
|
5
5
|
import { promisify } from "node:util";
|
|
6
6
|
//#region src/agent/coding/workspace-revision.ts
|
|
7
|
-
const exec
|
|
7
|
+
const exec = promisify(execFile);
|
|
8
8
|
/** A content fingerprint, including user changes and untracked files, without changing Git state. */
|
|
9
9
|
async function readWorkspaceRevision(workspace) {
|
|
10
10
|
let cwd = workspace;
|
|
11
|
-
const git = async (args) => (await exec
|
|
11
|
+
const git = async (args) => (await exec("git", [
|
|
12
12
|
"-c",
|
|
13
13
|
"core.fsmonitor=false",
|
|
14
14
|
...args
|
|
@@ -3,7 +3,7 @@ import { execFile } from "node:child_process";
|
|
|
3
3
|
import { realpath } from "node:fs/promises";
|
|
4
4
|
import { promisify } from "node:util";
|
|
5
5
|
//#region src/agent/commands/command-isolation.ts
|
|
6
|
-
const exec
|
|
6
|
+
const exec = promisify(execFile);
|
|
7
7
|
/** Docker is opt-in and never falls back to host execution or pulls an image implicitly. */
|
|
8
8
|
async function isolatedCommand(input) {
|
|
9
9
|
if (!input.isolation || input.isolation.mode === "host") return {
|
|
@@ -59,7 +59,7 @@ async function isolatedCommand(input) {
|
|
|
59
59
|
}
|
|
60
60
|
async function removeCommandContainer(name) {
|
|
61
61
|
if (!/^xopc-command-[a-f0-9-]{36}$/.test(name)) throw new Error("Invalid command container name");
|
|
62
|
-
await exec
|
|
62
|
+
await exec("docker", [
|
|
63
63
|
"rm",
|
|
64
64
|
"--force",
|
|
65
65
|
name
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export declare function runWithEmbeddedExecutionSession<T>(sessionKey: string, run: () => T): T;
|
|
1
|
+
export declare function runWithEmbeddedExecutionSession<T>(sessionKey: string, run: () => T, runId?: string): T;
|
|
2
2
|
export declare function getEmbeddedExecutionSession(): string | undefined;
|
|
3
|
+
export declare function getEmbeddedExecutionRunId(): string | undefined;
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
2
|
//#region src/agent/embedded/execution-context.ts
|
|
3
3
|
const executionSessionStorage = new AsyncLocalStorage();
|
|
4
|
-
function runWithEmbeddedExecutionSession(sessionKey, run) {
|
|
5
|
-
return executionSessionStorage.run(
|
|
4
|
+
function runWithEmbeddedExecutionSession(sessionKey, run, runId) {
|
|
5
|
+
return executionSessionStorage.run({
|
|
6
|
+
sessionKey,
|
|
7
|
+
runId
|
|
8
|
+
}, run);
|
|
6
9
|
}
|
|
7
10
|
function getEmbeddedExecutionSession() {
|
|
8
|
-
return executionSessionStorage.getStore();
|
|
11
|
+
return executionSessionStorage.getStore()?.sessionKey;
|
|
12
|
+
}
|
|
13
|
+
function getEmbeddedExecutionRunId() {
|
|
14
|
+
return executionSessionStorage.getStore()?.runId;
|
|
9
15
|
}
|
|
10
16
|
//#endregion
|
|
11
|
-
export { getEmbeddedExecutionSession, runWithEmbeddedExecutionSession };
|
|
17
|
+
export { getEmbeddedExecutionRunId, getEmbeddedExecutionSession, runWithEmbeddedExecutionSession };
|
|
@@ -4,7 +4,7 @@ export { installSessionToolResultGuard, guardSessionManager, getRawSessionAppend
|
|
|
4
4
|
export { repairAssistantUsageInSessionManager } from './session-manager-init.js';
|
|
5
5
|
export { openSqliteHydratingSessionManager } from './sqlite-hydrating-session-manager.js';
|
|
6
6
|
export { createSqliteTranscriptRuntime, InMemoryTranscriptRuntime, type EmbeddedTranscriptRuntime, } from './transcript-runtime.js';
|
|
7
|
-
export { getEmbeddedExecutionSession, runWithEmbeddedExecutionSession } from './execution-context.js';
|
|
7
|
+
export { getEmbeddedExecutionRunId, getEmbeddedExecutionSession, runWithEmbeddedExecutionSession, } from './execution-context.js';
|
|
8
8
|
export { acquireEmbeddedSessionRunner, buildEmbeddedRunnerFingerprint, evictAllEmbeddedSessionRunners, evictEmbeddedSessionRunner, getEmbeddedSessionRunnerIdleTtlMs, getEmbeddedSessionRunnerStats, isEmbeddedSessionRunnerEnabled, resetEmbeddedSessionRunnerForTest, } from './session-runner.js';
|
|
9
9
|
export { DEFAULT_MAX_LIVE_TOOL_RESULT_CHARS, resolveLiveToolResultMaxChars, truncateToolResultMessage, } from './tool-result-truncation.js';
|
|
10
10
|
export { runXopcEmbeddedTurn, abortEmbeddedRun, queueEmbeddedSteer } from './run-turn.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getEmbeddedExecutionSession, runWithEmbeddedExecutionSession } from "./execution-context.js";
|
|
1
|
+
import { getEmbeddedExecutionRunId, getEmbeddedExecutionSession, runWithEmbeddedExecutionSession } from "./execution-context.js";
|
|
2
2
|
import { abortEmbeddedRun, getEmbeddedRunBySessionKey, queueEmbeddedSteer } from "./runs.js";
|
|
3
3
|
import { DEFAULT_MAX_LIVE_TOOL_RESULT_CHARS, resolveLiveToolResultMaxChars, truncateToolResultMessage } from "./tool-result-truncation.js";
|
|
4
4
|
import { getRawSessionAppendMessage, guardSessionManager, installSessionToolResultGuard } from "./session-tool-result-guard.js";
|
|
@@ -9,4 +9,4 @@ import { InMemoryTranscriptRuntime, createSqliteTranscriptRuntime } from "./tran
|
|
|
9
9
|
import { runXopcEmbeddedTurn } from "./run-turn.js";
|
|
10
10
|
import { runEmbeddedTurnForSession } from "./run-for-session.js";
|
|
11
11
|
import { CURRENT_SESSION_VERSION, PiTranscriptManager } from "./pi-transcript.js";
|
|
12
|
-
export { CURRENT_SESSION_VERSION, DEFAULT_MAX_LIVE_TOOL_RESULT_CHARS, InMemoryTranscriptRuntime, PiTranscriptManager, abortEmbeddedRun, acquireEmbeddedSessionRunner, buildEmbeddedRunnerFingerprint, createSqliteTranscriptRuntime, evictAllEmbeddedSessionRunners, evictEmbeddedSessionRunner, getEmbeddedExecutionSession, getEmbeddedRunBySessionKey, getEmbeddedSessionRunnerIdleTtlMs, getEmbeddedSessionRunnerStats, getRawSessionAppendMessage, guardSessionManager, installSessionToolResultGuard, isEmbeddedSessionRunnerEnabled, openSqliteHydratingSessionManager, queueEmbeddedSteer, repairAssistantUsageInSessionManager, resetEmbeddedSessionRunnerForTest, resolveLiveToolResultMaxChars, runEmbeddedTurnForSession, runWithEmbeddedExecutionSession, runXopcEmbeddedTurn, truncateToolResultMessage };
|
|
12
|
+
export { CURRENT_SESSION_VERSION, DEFAULT_MAX_LIVE_TOOL_RESULT_CHARS, InMemoryTranscriptRuntime, PiTranscriptManager, abortEmbeddedRun, acquireEmbeddedSessionRunner, buildEmbeddedRunnerFingerprint, createSqliteTranscriptRuntime, evictAllEmbeddedSessionRunners, evictEmbeddedSessionRunner, getEmbeddedExecutionRunId, getEmbeddedExecutionSession, getEmbeddedRunBySessionKey, getEmbeddedSessionRunnerIdleTtlMs, getEmbeddedSessionRunnerStats, getRawSessionAppendMessage, guardSessionManager, installSessionToolResultGuard, isEmbeddedSessionRunnerEnabled, openSqliteHydratingSessionManager, queueEmbeddedSteer, repairAssistantUsageInSessionManager, resetEmbeddedSessionRunnerForTest, resolveLiveToolResultMaxChars, runEmbeddedTurnForSession, runWithEmbeddedExecutionSession, runXopcEmbeddedTurn, truncateToolResultMessage };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { init_paths, resolveModelsJsonPath } from "../../config/paths.js";
|
|
2
|
-
import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
|
|
3
2
|
import { init_sync_provider_auth, resolveProviderApiKeySync } from "../../auth/sync-provider-auth.js";
|
|
3
|
+
import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
|
|
4
4
|
import { XopcModelCredentialStore, init_model_credential_store } from "../../auth/model-credential-store.js";
|
|
5
5
|
import { init_register_bundled_oauth_flows, registerBundledOAuthFlows } from "../../providers/register-bundled-oauth-flows.js";
|
|
6
6
|
import { init_register_runtime_providers, registerRuntimeProviders } from "../../providers/register-runtime-providers.js";
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { parseTurnOutcome } from "../../../packages/gateway-contract/src/turn-outcome.js";
|
|
4
|
-
import { init_providers, resolveModel } from "../../providers/index.js";
|
|
5
4
|
import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
|
|
5
|
+
import { init_providers, resolveModel } from "../../providers/index.js";
|
|
6
|
+
import { runWithEmbeddedExecutionSession } from "./execution-context.js";
|
|
6
7
|
import { resolveAgentTurnTimeoutMs } from "../orchestration/run-agent-turn-with-timeout.js";
|
|
7
8
|
import { resolvePromptCachePolicy } from "../../providers/prompt-cache-plan.js";
|
|
8
9
|
import { evaluateContextBudget } from "../memory/context-budget.js";
|
|
@@ -27,7 +28,7 @@ async function runEmbeddedTurnForSession(params) {
|
|
|
27
28
|
parentSignal: params.abortSignal
|
|
28
29
|
});
|
|
29
30
|
const finish = async (result) => {
|
|
30
|
-
if (result.stopReason === "connection_required") return result;
|
|
31
|
+
if (result.stopReason === "connection_required" || result.stopReason === "clarification_required") return result;
|
|
31
32
|
try {
|
|
32
33
|
const rows = await sessionStore.loadTranscriptRows(sessionKey);
|
|
33
34
|
const hasTurn = rows.some((source) => {
|
|
@@ -180,7 +181,7 @@ async function runEmbeddedTurnForSession(params) {
|
|
|
180
181
|
total: resolvedCandidates.length
|
|
181
182
|
}, "Agent model fallback started");
|
|
182
183
|
try {
|
|
183
|
-
const turnResult = await runXopcEmbeddedTurn({
|
|
184
|
+
const turnResult = await runWithEmbeddedExecutionSession(sessionKey, () => runXopcEmbeddedTurn({
|
|
184
185
|
sessionKey,
|
|
185
186
|
runId,
|
|
186
187
|
userMessage: userMessageForTurn,
|
|
@@ -199,7 +200,7 @@ async function runEmbeddedTurnForSession(params) {
|
|
|
199
200
|
onEvent: params.onEvent,
|
|
200
201
|
onAgentEvent: (event) => agentManager.emitRuntimeEvent(sessionKey, event),
|
|
201
202
|
resumeLastUserMessage
|
|
202
|
-
});
|
|
203
|
+
}), runId);
|
|
203
204
|
if (turnResult.ok) {
|
|
204
205
|
if (isFallbackAttempt) log.info({
|
|
205
206
|
sessionKey,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
+
import { getClarificationResumeInput, isClarificationSuspended } from "../../storage/sqlite/clarification-wait-repository.js";
|
|
3
4
|
import { getConnectionResumeInput, isConnectionSuspended } from "../../storage/sqlite/connection-wait-repository.js";
|
|
4
5
|
import { EmbeddedRunConflictError, abortEmbeddedRun, acquireEmbeddedRunLease, queueEmbeddedSteer } from "./runs.js";
|
|
5
6
|
import { lastAssistantPlainText, subscribeEmbeddedSessionEvents } from "./subscribe-session.js";
|
|
@@ -235,6 +236,7 @@ async function runXopcEmbeddedTurn(params) {
|
|
|
235
236
|
});
|
|
236
237
|
let policyStopped = false;
|
|
237
238
|
let connectionStopped = false;
|
|
239
|
+
let clarificationStopped = false;
|
|
238
240
|
params.turnPolicy?.reset();
|
|
239
241
|
session.agent.beforeToolCall = async (context, signal) => {
|
|
240
242
|
if (connectionStopped) return {
|
|
@@ -242,6 +244,11 @@ async function runXopcEmbeddedTurn(params) {
|
|
|
242
244
|
reason: "Waiting for the user to connect an app.",
|
|
243
245
|
terminate: true
|
|
244
246
|
};
|
|
247
|
+
if (clarificationStopped) return {
|
|
248
|
+
block: true,
|
|
249
|
+
reason: "Waiting for the user to answer.",
|
|
250
|
+
terminate: true
|
|
251
|
+
};
|
|
245
252
|
const decision = await params.turnPolicy?.beforeToolCall(context, signal);
|
|
246
253
|
if (decision?.block) {
|
|
247
254
|
policyStopped ||= decision.terminate === true;
|
|
@@ -259,6 +266,7 @@ async function runXopcEmbeddedTurn(params) {
|
|
|
259
266
|
};
|
|
260
267
|
session.agent.afterToolCall = async (context) => {
|
|
261
268
|
connectionStopped ||= isConnectionSuspended(sessionKey, runId);
|
|
269
|
+
clarificationStopped ||= isClarificationSuspended(sessionKey, runId);
|
|
262
270
|
const scoped = context.toolCall.name === "read_file" ? await instructions.forTool(context.toolCall.name, context.args) : "";
|
|
263
271
|
const checked = await verification.afterTool(context);
|
|
264
272
|
if (scoped) checked.result.content.unshift({
|
|
@@ -273,7 +281,7 @@ async function runXopcEmbeddedTurn(params) {
|
|
|
273
281
|
};
|
|
274
282
|
session.agent.shouldStopAfterTurn = (context) => {
|
|
275
283
|
policyStopped ||= params.turnPolicy?.shouldStopAfterTurn(context) ?? false;
|
|
276
|
-
return policyStopped || connectionStopped;
|
|
284
|
+
return policyStopped || connectionStopped || clarificationStopped;
|
|
277
285
|
};
|
|
278
286
|
unsubscribe = subscribeEmbeddedSessionEvents(session, (event) => {
|
|
279
287
|
if (event.type === "message_end" && event.message.role === "assistant") recordPromptCacheTouch(sessionKey, resolvedModel, event.message.usage);
|
|
@@ -290,11 +298,17 @@ async function runXopcEmbeddedTurn(params) {
|
|
|
290
298
|
try {
|
|
291
299
|
await runAgentTurnWithTimeout(session.agent, async () => {
|
|
292
300
|
const connectionResume = getConnectionResumeInput(sessionKey, runId);
|
|
301
|
+
const clarificationResume = getClarificationResumeInput(sessionKey, runId);
|
|
293
302
|
if (connectionResume) await session.sendCustomMessage({
|
|
294
303
|
customType: "connection_resume",
|
|
295
304
|
content: connectionResume.content,
|
|
296
305
|
display: false
|
|
297
306
|
}, { triggerTurn: true });
|
|
307
|
+
else if (clarificationResume) await session.sendCustomMessage({
|
|
308
|
+
customType: "clarification_resume",
|
|
309
|
+
content: clarificationResume.content,
|
|
310
|
+
display: false
|
|
311
|
+
}, { triggerTurn: true });
|
|
298
312
|
else if (params.resumeLastUserMessage) await session.agent.continue();
|
|
299
313
|
else {
|
|
300
314
|
const text = userMessageToPromptText(userMessage);
|
|
@@ -302,7 +316,8 @@ async function runXopcEmbeddedTurn(params) {
|
|
|
302
316
|
await session.prompt(text, images.length > 0 ? { images } : void 0);
|
|
303
317
|
}
|
|
304
318
|
await session.agent.waitForIdle();
|
|
305
|
-
|
|
319
|
+
clarificationStopped ||= isClarificationSuspended(sessionKey, runId);
|
|
320
|
+
if (connectionStopped || clarificationStopped) return;
|
|
306
321
|
await maybeRetryTurnAfterTransientLlmFailure(session.agent, {
|
|
307
322
|
sessionKey,
|
|
308
323
|
log,
|
|
@@ -330,6 +345,10 @@ async function runXopcEmbeddedTurn(params) {
|
|
|
330
345
|
runId,
|
|
331
346
|
sessionKey
|
|
332
347
|
});
|
|
348
|
+
if (clarificationStopped) runner.piSm.appendCustomEntry("clarification_required", {
|
|
349
|
+
runId,
|
|
350
|
+
sessionKey
|
|
351
|
+
});
|
|
333
352
|
runner.piSm.appendCustomEntry("coding_verification", {
|
|
334
353
|
runId,
|
|
335
354
|
workspace: workspaceDir,
|
|
@@ -356,7 +375,7 @@ async function runXopcEmbeddedTurn(params) {
|
|
|
356
375
|
});
|
|
357
376
|
return {
|
|
358
377
|
ok: true,
|
|
359
|
-
...connectionStopped ? { stopReason: "connection_required" } : {},
|
|
378
|
+
...connectionStopped ? { stopReason: "connection_required" } : clarificationStopped ? { stopReason: "clarification_required" } : {},
|
|
360
379
|
lastAssistantText: lastAssistantPlainText(session)
|
|
361
380
|
};
|
|
362
381
|
} finally {
|
|
@@ -89,7 +89,7 @@ export type RunXopcEmbeddedTurnParams = {
|
|
|
89
89
|
};
|
|
90
90
|
export type RunXopcEmbeddedTurnResult = {
|
|
91
91
|
ok: boolean;
|
|
92
|
-
stopReason?: 'connection_required';
|
|
92
|
+
stopReason?: 'connection_required' | 'clarification_required';
|
|
93
93
|
/** False for harness failures that must not trigger another model attempt. */
|
|
94
94
|
retryable?: boolean;
|
|
95
95
|
errorMessage?: string;
|
|
@@ -19,6 +19,7 @@ export declare class ComposioToolProvider implements ExternalToolProvider {
|
|
|
19
19
|
private readonly deps;
|
|
20
20
|
readonly source: "composio";
|
|
21
21
|
private readonly adapter;
|
|
22
|
+
private readonly unavailableToolkits;
|
|
22
23
|
constructor(deps: ComposioToolProviderDeps);
|
|
23
24
|
search(query: string): Promise<ExternalToolSearchHit[]>;
|
|
24
25
|
describe(toolRef: string): Promise<ExternalToolDescriptor | undefined>;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { createLogger } from "../../utils/logger/index.js";
|
|
2
|
+
import { init_logger } from "../../utils/logger.js";
|
|
1
3
|
import { connectionBinding, connectionBindings, publishConnectionWait, requireSessionConnection } from "../../storage/sqlite/connection-wait-repository.js";
|
|
2
4
|
import { consumeConnectorApproval, createConnectorApproval, getConnectorApproval, getConnectorInstallation, listConnectorActionMetadata, listConnectorConnections, listConnectorInstallations, upsertConnectorActionMetadata, upsertConnectorInstallation } from "../../storage/sqlite/connector-repository.js";
|
|
3
5
|
import "../../storage/sqlite/index.js";
|
|
@@ -10,7 +12,9 @@ import { connectorPrincipalForSession } from "../../connectors/principal.js";
|
|
|
10
12
|
import { ExternalToolSearchError } from "./search-error.js";
|
|
11
13
|
import { externalToolRef, parseExternalToolRef } from "./refs.js";
|
|
12
14
|
//#region src/agent/external-tools/composio-provider.ts
|
|
15
|
+
init_logger();
|
|
13
16
|
const CONNECTION_ARGUMENT = "xopcConnectionId";
|
|
17
|
+
const log = createLogger("ComposioToolProvider");
|
|
14
18
|
function textResult(value) {
|
|
15
19
|
return {
|
|
16
20
|
content: [{
|
|
@@ -108,47 +112,73 @@ function actionInputSchema(action) {
|
|
|
108
112
|
var ComposioToolProvider = class {
|
|
109
113
|
source = "composio";
|
|
110
114
|
adapter;
|
|
115
|
+
unavailableToolkits = /* @__PURE__ */ new Set();
|
|
111
116
|
constructor(deps) {
|
|
112
117
|
this.deps = deps;
|
|
113
118
|
this.adapter = deps.adapter ?? new ComposioSessionsAdapter();
|
|
114
119
|
}
|
|
115
120
|
async search(query) {
|
|
116
121
|
const available = this.availableInstallations();
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
122
|
+
if (available.installations.length === 0) return [];
|
|
123
|
+
const settled = await Promise.allSettled(available.installations.map(async (installation) => {
|
|
124
|
+
const toolkit = toolkitFromInstallation(installation);
|
|
125
|
+
let phase = "create_session";
|
|
126
|
+
try {
|
|
127
|
+
const session = await this.adapter.createSession({
|
|
128
|
+
principalId: available.principalId,
|
|
129
|
+
toolkits: [toolkit],
|
|
130
|
+
authConfigs: getConfiguredComposioAuthConfigs(this.deps.getConfig(), [toolkit])
|
|
131
|
+
});
|
|
132
|
+
phase = "search";
|
|
133
|
+
return {
|
|
134
|
+
installation,
|
|
135
|
+
toolkit,
|
|
136
|
+
result: await session.search({
|
|
137
|
+
query,
|
|
138
|
+
toolkits: [toolkit]
|
|
139
|
+
})
|
|
140
|
+
};
|
|
141
|
+
} catch (cause) {
|
|
142
|
+
throw new ExternalToolSearchError(phase, [toolkit], cause);
|
|
143
|
+
}
|
|
144
|
+
}));
|
|
136
145
|
const hits = [];
|
|
137
|
-
|
|
138
|
-
for (const
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
146
|
+
const failures = [];
|
|
147
|
+
for (const attempt of settled) {
|
|
148
|
+
if (attempt.status === "rejected") {
|
|
149
|
+
failures.push(attempt.reason instanceof ExternalToolSearchError ? attempt.reason : new ExternalToolSearchError("search", [], attempt.reason));
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
const { installation, toolkit, result } = attempt.value;
|
|
153
|
+
this.unavailableToolkits.delete(toolkit);
|
|
154
|
+
const schemas = result && typeof result === "object" && !Array.isArray(result) ? result.toolSchemas : void 0;
|
|
155
|
+
if (!schemas || typeof schemas !== "object" || Array.isArray(schemas)) continue;
|
|
156
|
+
for (const [actionId, schema] of Object.entries(schemas)) {
|
|
157
|
+
if (toolkitForAction(actionId, [toolkit]) !== toolkit || !isComposioActionAllowedByCatalog(actionId)) continue;
|
|
158
|
+
if (!isToolInputSchema(schema && typeof schema === "object" ? schema.inputSchema : void 0)) continue;
|
|
159
|
+
upsertConnectorActionMetadata(contractFromSearch(installation.connectorId, toolkit, actionId, schema));
|
|
160
|
+
hits.push({
|
|
161
|
+
toolRef: externalToolRef(this.source, installation.id, actionId),
|
|
162
|
+
source: this.source,
|
|
163
|
+
namespace: toolkit,
|
|
164
|
+
title: actionId,
|
|
165
|
+
summary: schemaSummary(schema, `Run ${actionId} in ${toolkit}.`)
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (failures.length === settled.length) {
|
|
170
|
+
const first = failures[0];
|
|
171
|
+
throw new ExternalToolSearchError(first.phase, [...new Set(failures.flatMap((failure) => failure.toolkits))], first);
|
|
172
|
+
}
|
|
173
|
+
if (failures.length > 0) {
|
|
174
|
+
const failedToolkits = [...new Set(failures.flatMap((failure) => failure.toolkits))];
|
|
175
|
+
const newlyUnavailable = failedToolkits.filter((toolkit) => !this.unavailableToolkits.has(toolkit));
|
|
176
|
+
failedToolkits.forEach((toolkit) => this.unavailableToolkits.add(toolkit));
|
|
177
|
+
if (newlyUnavailable.length > 0) log.warn({
|
|
178
|
+
failedToolkits: newlyUnavailable,
|
|
179
|
+
failureCount: newlyUnavailable.length,
|
|
180
|
+
err: failures[0]
|
|
181
|
+
}, `Composio tool discovery skipped ${newlyUnavailable.length} unavailable toolkit${newlyUnavailable.length === 1 ? "" : "s"}`);
|
|
152
182
|
}
|
|
153
183
|
return hits;
|
|
154
184
|
}
|
|
@@ -13,15 +13,17 @@ function searchFailureDetails(error) {
|
|
|
13
13
|
phase: error.phase,
|
|
14
14
|
toolkits: error.toolkits
|
|
15
15
|
} : { phase: "search" };
|
|
16
|
+
const pending = [error];
|
|
16
17
|
const visited = /* @__PURE__ */ new Set();
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
while (pending.length > 0) {
|
|
19
|
+
const current = pending.shift();
|
|
20
|
+
if (!current || typeof current !== "object" || visited.has(current)) continue;
|
|
19
21
|
visited.add(current);
|
|
20
22
|
const row = current;
|
|
21
23
|
if (details.code === void 0 && (typeof row.code === "number" || typeof row.code === "string" && /^[a-zA-Z0-9_.-]{1,100}$/.test(row.code))) details.code = row.code;
|
|
22
24
|
const status = row.status ?? row.statusCode;
|
|
23
25
|
if (details.status === void 0 && typeof status === "number") details.status = status;
|
|
24
|
-
|
|
26
|
+
pending.push(row.cause, row.error);
|
|
25
27
|
}
|
|
26
28
|
return details;
|
|
27
29
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef } from "../../config/schema.js";
|
|
2
2
|
import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
|
|
3
|
-
import { getDefaultModelSync, getModelsByProvider, init_providers, isProviderConfiguredSync, resolveModel } from "../../providers/index.js";
|
|
4
3
|
import { resolveEffectiveAgentConfigForAgent } from "../../config/agent-profile.js";
|
|
4
|
+
import { getDefaultModelSync, getModelsByProvider, init_providers, isProviderConfiguredSync, resolveModel } from "../../providers/index.js";
|
|
5
5
|
import { resolveAgentModelFallbackValues, resolveAgentModelPrimaryValue } from "../../config/model-input.js";
|
|
6
6
|
import { buildCapabilityPlansForConfig } from "../../capabilities/readiness/from-config.js";
|
|
7
7
|
import "../../capabilities/readiness/index.js";
|