@xopcai/xopc 0.0.396 → 0.0.398
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/{agent-avatar-dicebear-DwTaeL1e.js → agent-avatar-dicebear-Q-lKLSrc.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CobxTBV_.js +1 -0
- package/dist/gateway/static/root/assets/agents-Bgmmue5K.js +77 -0
- package/dist/gateway/static/root/assets/{agents-admin-api-BjGOUrAf.js → agents-admin-api-DvSe10zu.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-B1ApwlFh.js → app-management-settings-panel-CB_W2ano.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-Avd_jVji.js → appearance-settings-B-ppSGBm.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-3qUgsGui.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-C26WGbj9.js → archive-plugin-CeQrQ693.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-T3FSuURJ.js → automations-page-Cc9vZanv.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-Bc4c_AEq.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-CLaLkM3M.js → binary-plugins-BqaVBv1R.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-CB4oRyM5.js → block-editor-B4ij8nZi.js} +40 -40
- package/dist/gateway/static/root/assets/{browser-automation-inputs-0nkk3bLA.js → browser-automation-inputs-DngvcZH9.js} +1 -1
- package/dist/gateway/static/root/assets/browser-automations-page-CdqwXyYq.js +3 -0
- package/dist/gateway/static/root/assets/browser-settings-page-CJT0rB-I.js +3 -0
- package/dist/gateway/static/root/assets/{capabilities-CTfLd_UE.js → capabilities-glv1DeRI.js} +1 -1
- package/dist/gateway/static/root/assets/capabilities-page-C56VsP0Y.js +2 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-DZiA8JIq.js +8 -0
- package/dist/gateway/static/root/assets/{capability-header-actions-Br5PchG2.js → capability-header-actions-Cu-ATcJq.js} +1 -1
- package/dist/gateway/static/root/assets/capability-links--dcwUjgv.js +1 -0
- package/dist/gateway/static/root/assets/channels-gIjZtYnV.js +1 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-Cl0hAav9.js → chat-terminal-dock-COdvmTgN.js} +2 -2
- package/dist/gateway/static/root/assets/computer-settings-page-C1XHsuI8.js +1 -0
- package/dist/gateway/static/root/assets/{connector-service-page-AqsoqTnF.js → connector-service-page-Cv2bhnQ5.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-SmKItq0N.js +1 -0
- package/dist/gateway/static/root/assets/{date-picker-CyFehuto.js → date-picker-CCnqYwy0.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-Vu_5QGGJ.js → dependency-picker-nt5ruIio.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-Dw9k0Z2p.js → desktop-pet-Bn8xj1v3.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-DKqkhvxu.js → desktop-pet-settings-Cbl1J_VE.js} +1 -1
- package/dist/gateway/static/root/assets/{device-pairing-wizard-4l4ESMon.js → device-pairing-wizard-Tadg9co1.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-7svbL2tR.js → directory-picker-path-field-DuE5ez1E.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-CFa6PCBV.js → extension-debug-page-jsNxwqNi.js} +1 -1
- package/dist/gateway/static/root/assets/extension-page-N_rBjYX8.js +1 -0
- package/dist/gateway/static/root/assets/extension-settings-page-7qAdvlRB.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-swr-Di9g6pE8.js → gateway-config-swr-DAir1JsW.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-2-o7qk92.js → gateway-realtime-dE0XrVAT.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-CPlVuu0d.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-ViqOhx_m.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-BCUswcVy.js → gateway-startup-retry-CqyGHM2M.js} +1 -1
- package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-DzEeyJpH.js → highlighted-body-KQOG7T2V-XrkWdmrk.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-C_Xn_Kkz.js +2 -0
- package/dist/gateway/static/root/assets/{image-generation-api-Zo56ZmKs.js → image-generation-api-CmHdM2uL.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-C_PPaOFv.js → imports-page-B-dnvHP_.js} +1 -1
- package/dist/gateway/static/root/assets/index-DWzv8ZoO.css +1 -0
- package/dist/gateway/static/root/assets/{index-XRbEWVyZ.js → index-DvKDT-RQ.js} +116 -116
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BGtrzFT6.js → keyboard-shortcuts-settings-mCs9cDgv.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-Cu80fCA0.js → local-app-workbench-page-B7AtlfWQ.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-Zsu8FnwP.js → local-apps-page-CIJE7jME.js} +1 -1
- package/dist/gateway/static/root/assets/{local-session-drafts-BjwlkAKA.js → local-session-drafts-fhip41-L.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-Djl2FW6_.js → locale-store-Jnhw2WMv.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-DlIhfEW_.js → logs-page-HawXUKF2.js} +2 -2
- package/dist/gateway/static/root/assets/management-settings-DByEh6rq.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-view-DyO7Q0Ms.js → markdown-view-B58RypQ4.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-Ba1_QMmZ.js → media-plugins-B8BLxQgj.js} +1 -1
- package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-CZjPT7xE.js +1 -0
- package/dist/gateway/static/root/assets/messages-DBvKzlCl.js +3 -0
- package/dist/gateway/static/root/assets/note-detail-panel-hQHB5fCs.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-BEusEk31.js +8 -0
- package/dist/gateway/static/root/assets/{page-context-capture-button-BqNWtf_f.js → page-context-capture-button-42bq8N6-.js} +1 -1
- package/dist/gateway/static/root/assets/personal-page-DPR5gzhf.js +1 -0
- package/dist/gateway/static/root/assets/plugin-details-dialog-D8dKKIY9.js +1 -0
- package/dist/gateway/static/root/assets/plugin-presentation-BrQpVvjC.js +1 -0
- package/dist/gateway/static/root/assets/{preview-open-alternatives-kkbrbiVd.js → preview-open-alternatives-DKyLVLpX.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-Dheqo_4J.js → product-open-page-DcGH0AXN.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-content-B9Y6dIuh.js → product-preview-content-Ck6OzP09.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-BHoQ10Eo.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-DYsq_OLJ.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-BwR2CiR5.js → registry-api-BbUEMGcj.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CU3EChY0.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-api-C_VOMhLI.js → runtime-tools-api-D0xtCTXr.js} +1 -1
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BjyZGNP3.js → runtime-tools-settings-panel-Bfs5zKDg.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-DelMOLjg.js → schema-form-BbI2BuSU.js} +1 -1
- package/dist/gateway/static/root/assets/{session-api-DbNNQps9.js → session-api-CAKgrbgz.js} +1 -1
- package/dist/gateway/static/root/assets/{session-manager-DfVviLTK.js → session-manager-D_N7qha7.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-CjB2GOTs.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-jbVx8gcF.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-DNWEDA71.js → settings-form-section-BfBBJlr-.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-DJ27gC7J.js → settings-page-9yu4SN1j.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DhWB3feW.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-Du4mumVM.js → share-preview-page-B6lQl5xb.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-UJGjdz3F.js +1 -0
- package/dist/gateway/static/root/assets/{skill-api-zOxHjU7m.js → skill-api-y2m3k_R4.js} +1 -1
- package/dist/gateway/static/root/assets/skill-reload-api-Bk9FqsVa.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-DLd4O-Fo.js +2 -0
- package/dist/gateway/static/root/assets/{style-DsnKw5jo.js → style-C2ptQg95.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-mz9hWo_H.js → system-settings-panel-DYzcLnVk.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-DLGtmHAH.js +2 -0
- package/dist/gateway/static/root/assets/{task-expandable-content-D3i_51Oc.js → task-expandable-content-HdEeV_0-.js} +1 -1
- package/dist/gateway/static/root/assets/{tracing-settings-page-aC-ziRbY.js → tracing-settings-page-DKQYmzFn.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-Ch2Veztk.js → tunnel-api-C2VY_HTy.js} +1 -1
- package/dist/gateway/static/root/assets/usage-page-CjzunQtj.js +1 -0
- package/dist/gateway/static/root/assets/{use-autosave-BLW3t_OK.js → use-autosave-BElgnGMt.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-DsOGCDTR.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-DulF6Cm4.js → voice-api-key-field-FVjX0qhn.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-Ceo_hqZC.js → voice-config-api-T3nM4buh.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-bBMZM8tN.js → work-discovery-overlay-B2S2NZuK.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CsxXS1WI.js → workflow-run-setup-panel-2Gq34KQk.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-CjeFD3mk.js +6 -0
- package/dist/gateway/static/root/assets/{xopc-cloud-account-card-wwIRBFCs.js → xopc-cloud-account-card-BZMIZxWg.js} +1 -1
- package/dist/gateway/static/root/index.html +15 -15
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +8 -0
- package/dist/src/agent/agent-manager.js +3 -3
- package/dist/src/agent/background-review/run-background-review.js +1 -1
- package/dist/src/agent/embedded/codemode-extension.d.ts +1 -0
- package/dist/src/agent/embedded/codemode-extension.js +6 -1
- package/dist/src/agent/embedded/run-for-session.js +1 -1
- package/dist/src/agent/embedded/run-turn.js +34 -2
- package/dist/src/agent/embedded/session-runner.js +1 -1
- package/dist/src/agent/external-tools/cliProvider.js +2 -2
- package/dist/src/agent/external-tools/composio-provider.js +2 -2
- package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
- package/dist/src/agent/mcp/config.d.ts +2 -0
- package/dist/src/agent/mcp/config.js +2 -2
- package/dist/src/agent/mcp/connection-setup.js +13 -1
- package/dist/src/agent/mcp/effective-server.d.ts +3 -0
- package/dist/src/agent/mcp/effective-server.js +27 -0
- package/dist/src/agent/mcp/native-mcp.d.ts +1 -1
- package/dist/src/agent/mcp/native-mcp.js +13 -4
- package/dist/src/agent/mcp/tool-catalog.js +2 -1
- package/dist/src/agent/service/process-direct-streaming.js +1 -1
- package/dist/src/agent/service.js +2 -2
- package/dist/src/agent/skills/index.d.ts +1 -0
- package/dist/src/agent/skills/index.js +7 -3
- package/dist/src/agent/skills/managed-store.js +1 -1
- package/dist/src/agent/skills/skill-manage-ops.js +1 -1
- package/dist/src/agent/skills/skill-manager.d.ts +1 -0
- package/dist/src/agent/skills/skill-manager.js +6 -1
- package/dist/src/agent/skills/skill-sources.d.ts +1 -0
- package/dist/src/agent/skills/skill-sources.js +4 -3
- package/dist/src/agent/skills/types.d.ts +1 -0
- package/dist/src/agent/tools/factory.js +1 -1
- package/dist/src/agent/tools/personal-read-tool.js +1 -1
- package/dist/src/agent/tools/xopc-use-tool.js +2 -2
- package/dist/src/agent/workspace-runtime/registry.js +7 -3
- package/dist/src/agent-catalog/capabilities.js +2 -2
- package/dist/src/automations/capabilities/drafts.js +1 -1
- package/dist/src/automations/service/action-executor.js +2 -2
- package/dist/src/bootstrap/application-state.js +1 -1
- package/dist/src/capabilities/runtime/dispatcher.js +1 -1
- package/dist/src/capabilities/runtime/product.js +1 -1
- package/dist/src/chat-commands/agent-edit.js +1 -1
- package/dist/src/cli/commands/agent.js +1 -1
- package/dist/src/cli/commands/agents.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/extension-agent-plugin.js +92 -7
- package/dist/src/cli/commands/extension-marketplace.js +1 -1
- package/dist/src/cli/commands/extension.js +1 -1
- package/dist/src/cli/commands/mcp.js +6 -4
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/cli/commands/onboard/model.js +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +1 -1
- package/dist/src/config/agent-model-intents.js +1 -1
- package/dist/src/config/agent-profile.js +2 -2
- package/dist/src/config/loader.js +1 -1
- package/dist/src/config/models-json.js +1 -1
- package/dist/src/config/schema.js +2 -2
- package/dist/src/extensions/agent-plugins/auth.d.ts +7 -1
- package/dist/src/extensions/agent-plugins/auth.js +53 -12
- package/dist/src/extensions/agent-plugins/branding.d.ts +12 -0
- package/dist/src/extensions/agent-plugins/branding.js +54 -0
- package/dist/src/extensions/agent-plugins/cli-authorization.d.ts +33 -0
- package/dist/src/extensions/agent-plugins/cli-authorization.js +203 -0
- package/dist/src/extensions/agent-plugins/connection-reuse.d.ts +10 -0
- package/dist/src/extensions/agent-plugins/connection-reuse.js +23 -0
- package/dist/src/extensions/agent-plugins/credentials.js +24 -1
- package/dist/src/extensions/agent-plugins/formats.d.ts +27 -0
- package/dist/src/extensions/agent-plugins/formats.js +208 -0
- package/dist/src/extensions/agent-plugins/inventory.d.ts +154 -2
- package/dist/src/extensions/agent-plugins/inventory.js +40 -5
- package/dist/src/extensions/agent-plugins/mcp-adapter.d.ts +2 -1
- package/dist/src/extensions/agent-plugins/mcp-adapter.js +42 -8
- package/dist/src/extensions/agent-plugins/mcp-format.d.ts +2 -0
- package/dist/src/extensions/agent-plugins/mcp-format.js +82 -0
- package/dist/src/extensions/agent-plugins/resources.d.ts +14 -0
- package/dist/src/extensions/agent-plugins/resources.js +112 -0
- package/dist/src/extensions/agent-plugins/setup-contract.d.ts +74 -0
- package/dist/src/extensions/agent-plugins/setup-contract.js +77 -0
- package/dist/src/extensions/agent-plugins/setup.d.ts +127 -0
- package/dist/src/extensions/agent-plugins/setup.js +496 -0
- package/dist/src/extensions/agent-plugins/skill-catalog.d.ts +14 -0
- package/dist/src/extensions/agent-plugins/skill-catalog.js +95 -0
- package/dist/src/extensions/agent-plugins/source-catalog.d.ts +21 -0
- package/dist/src/extensions/agent-plugins/source-catalog.js +175 -0
- package/dist/src/extensions/agent-plugins/sources.d.ts +1 -1
- package/dist/src/extensions/agent-plugins/sources.js +12 -3
- package/dist/src/extensions/agent-plugins/store.d.ts +33 -2
- package/dist/src/extensions/agent-plugins/store.js +175 -25
- package/dist/src/extensions/agent-plugins/user-config.d.ts +5 -0
- package/dist/src/extensions/agent-plugins/user-config.js +49 -0
- package/dist/src/extensions/agent-plugins/validation.d.ts +26 -1
- package/dist/src/extensions/agent-plugins/validation.js +143 -28
- package/dist/src/gateway/agents-admin.js +2 -2
- package/dist/src/gateway/hono/lib/config-payload.js +1 -1
- package/dist/src/gateway/hono/routes/agent-plugins.js +121 -10
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
- package/dist/src/gateway/hono/routes/composer-history.js +22 -4
- package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -2
- package/dist/src/gateway/hono/routes/connectors.js +1 -1
- package/dist/src/gateway/hono/routes/context-sources.js +1 -1
- package/dist/src/gateway/hono/routes/mcp.js +6 -4
- package/dist/src/gateway/hono/routes/notes.js +2 -2
- package/dist/src/gateway/hono/routes/projects.js +2 -2
- package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
- package/dist/src/gateway/hono/routes/tasks.js +1 -1
- package/dist/src/gateway/image-generation-setup.js +1 -1
- package/dist/src/gateway/lock.js +1 -1
- package/dist/src/gateway/service/marketplace-service.js +4 -2
- package/dist/src/gateway/service.js +8 -6
- package/dist/src/gateway/session-context-summary.js +1 -1
- package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
- package/dist/src/home-intelligence/host.js +2 -2
- package/dist/src/local-apps/service.js +1 -1
- package/dist/src/personal-agent/proactivity/service.js +1 -1
- package/dist/src/personal-agent/service.js +2 -2
- package/dist/src/providers/model-catalog-persistence.js +1 -1
- package/dist/src/routing/resolve-route.js +1 -1
- package/dist/src/routing/resolve-tui-session-key.js +1 -1
- package/dist/src/storage/sqlite/composer-input-history-repository.d.ts +4 -3
- package/dist/src/storage/sqlite/composer-input-history-repository.js +10 -8
- package/dist/src/storage/sqlite/migrations/257_session_composer_history.sql +11 -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/capabilities/read.js +2 -2
- package/dist/src/tasks/capabilities/write.js +1 -1
- package/dist/src/tasks/task-handoff-service.js +1 -1
- package/dist/src/tui/backends/embedded-backend.d.ts +2 -2
- package/dist/src/tui/backends/embedded-backend.js +6 -6
- package/dist/src/tui/backends/gateway-realtime-backend.d.ts +2 -2
- package/dist/src/tui/backends/gateway-realtime-backend.js +7 -4
- package/dist/src/tui/composer-history.d.ts +14 -0
- package/dist/src/tui/composer-history.js +85 -0
- package/dist/src/tui/tui-backend.d.ts +4 -3
- package/dist/src/tui/tui.js +19 -46
- package/dist/src/voice/realtime/persona-context.js +1 -1
- package/package.json +12 -4
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-D8Q9Cpge.js +0 -1
- package/dist/gateway/static/root/assets/agent-plugin-dialog-C-UKhDkS.js +0 -1
- package/dist/gateway/static/root/assets/agents-DOv68iBN.js +0 -77
- package/dist/gateway/static/root/assets/apps-page-Da6Ar2U3.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-B9r27rPk.js +0 -6
- package/dist/gateway/static/root/assets/browser-automations-page-KLG8IXvl.js +0 -3
- package/dist/gateway/static/root/assets/browser-settings-page-Tcejw5fF.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-page-BJlw9rhA.js +0 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-kEvUR6Yu.js +0 -8
- package/dist/gateway/static/root/assets/channels-DRaE6_ub.js +0 -1
- package/dist/gateway/static/root/assets/computer-settings-page-B6JI2S1b.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-cDRZ8bqm.js +0 -1
- package/dist/gateway/static/root/assets/extension-page-BD4nZ9sf.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-CxPIMrmn.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-DQ6-whg-.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-Da2CtQ7c.js +0 -1
- package/dist/gateway/static/root/assets/home-page-Cp4-sTfX.js +0 -2
- package/dist/gateway/static/root/assets/index-zIgp-ZTu.css +0 -1
- package/dist/gateway/static/root/assets/management-settings-CDV-xItG.js +0 -1
- package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-CpK57Kgp.js +0 -1
- package/dist/gateway/static/root/assets/messages-DPxcWxfD.js +0 -3
- package/dist/gateway/static/root/assets/note-detail-panel-BXi6BrXd.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-ClR9R90o.js +0 -8
- package/dist/gateway/static/root/assets/personal-page-CSF-sn8w.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-l5dXxnSq.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-95Od8gLy.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-DPEpPFax.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BN0nMm0w.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BvfEKyfy.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BWA_puDN.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-C0ixka9_.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-743oJIiS.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-DBYhEjP9.js +0 -2
- package/dist/gateway/static/root/assets/task-detail-page-Brp2wrEc.js +0 -2
- package/dist/gateway/static/root/assets/usage-page-KfKZ2a3t.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-BSsT8WjA.js +0 -2
- package/dist/gateway/static/root/assets/workflows-page-a-mfjQ2h.js +0 -6
|
@@ -5,6 +5,10 @@ import { retainCodemodeOutput } from "./codemode-output.js";
|
|
|
5
5
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
6
6
|
import { createCodemodeExtension } from "@earendil-works/pi-coding-agent";
|
|
7
7
|
//#region src/agent/embedded/codemode-extension.ts
|
|
8
|
+
const nestedCodemodePolicy = Symbol("nestedCodemodePolicy");
|
|
9
|
+
function isNestedCodemodePolicy(context) {
|
|
10
|
+
return context[nestedCodemodePolicy] === true;
|
|
11
|
+
}
|
|
8
12
|
const MAX_STORE_BYTES = 64 * 1024;
|
|
9
13
|
const MAX_SOURCE_BYTES = 64 * 1024;
|
|
10
14
|
/** Public pi extension, restricted to core reads and the current xopc turn policy. */
|
|
@@ -26,6 +30,7 @@ function createXopcCodemodeExtension(policy, tools, getSession) {
|
|
|
26
30
|
const assistantMessage = session?.agent.state.messages.findLast((message) => message.role === "assistant");
|
|
27
31
|
if (!session || assistantMessage?.role !== "assistant") throw new Error("Codemode needs an active xopc turn");
|
|
28
32
|
return {
|
|
33
|
+
[nestedCodemodePolicy]: true,
|
|
29
34
|
assistantMessage,
|
|
30
35
|
toolCall: {
|
|
31
36
|
type: "toolCall",
|
|
@@ -229,4 +234,4 @@ function boundCodemodeSource(source, policy) {
|
|
|
229
234
|
})}\n${match ? source.slice(match[0].length) : source}`;
|
|
230
235
|
}
|
|
231
236
|
//#endregion
|
|
232
|
-
export { boundCodemodeSource, createXopcCodemodeExtension };
|
|
237
|
+
export { boundCodemodeSource, createXopcCodemodeExtension, isNestedCodemodePolicy };
|
|
@@ -196,7 +196,7 @@ async function runEmbeddedTurnForSessionInner(params) {
|
|
|
196
196
|
conversationId,
|
|
197
197
|
tools
|
|
198
198
|
}));
|
|
199
|
-
const mcp = config && executionToolPolicy.nativeMcp ? await prepareNativeMcpConfig(config, workspaceDir) : void 0;
|
|
199
|
+
const mcp = config && executionToolPolicy.nativeMcp ? await prepareNativeMcpConfig(config, workspaceDir, resolveEffectiveAgentProfileForSession(conversationId).agentId) : void 0;
|
|
200
200
|
const promptCachePolicy = resolvePromptCachePolicy(config ? resolveEffectiveAgentProfileForSession(conversationId).config.runtime.promptCache : void 0);
|
|
201
201
|
let userMessageForTurn = userMessage;
|
|
202
202
|
if (params.applyStartupContext !== false) {
|
|
@@ -19,6 +19,7 @@ import { getAssistantTurnErrorMessage, isAssistantTurnAborted, isAssistantTurnFa
|
|
|
19
19
|
import { allowsExecutionTool, filterExecutionTools, resolveExecutionToolPolicy } from "./execution-tool-policy.js";
|
|
20
20
|
import { externalPolicyContext, getXopcToolMetadata } from "./tool-metadata.js";
|
|
21
21
|
import { runWithEmbeddedExecutionSession } from "./execution-context.js";
|
|
22
|
+
import { isNestedCodemodePolicy } from "./codemode-extension.js";
|
|
22
23
|
import { isComputerControlActive, isComputerLeaseTool, stopComputerControl } from "../../computer/control-guard.js";
|
|
23
24
|
import { EmbeddedRunConflictError, abortEmbeddedRun, acquireEmbeddedRunLease, queueEmbeddedSteer } from "./runs.js";
|
|
24
25
|
import { lastAssistantPlainText, subscribeEmbeddedSessionEvents } from "./subscribe-session.js";
|
|
@@ -346,6 +347,7 @@ async function runXopcEmbeddedTurnInner(params) {
|
|
|
346
347
|
let restorePrepareNextTurn;
|
|
347
348
|
let restorePrepareRequest;
|
|
348
349
|
let restoreTransformContext;
|
|
350
|
+
let restoreToolHooks;
|
|
349
351
|
try {
|
|
350
352
|
runLease = acquireEmbeddedRunLease({
|
|
351
353
|
conversationId,
|
|
@@ -652,7 +654,9 @@ async function runXopcEmbeddedTurnInner(params) {
|
|
|
652
654
|
let clarificationStopped = false;
|
|
653
655
|
let sentVisibleMessage = false;
|
|
654
656
|
params.turnPolicy?.reset();
|
|
655
|
-
session.agent.beforeToolCall
|
|
657
|
+
const nativeBeforeTool = session.agent.beforeToolCall;
|
|
658
|
+
const nativeAfterTool = session.agent.afterToolCall;
|
|
659
|
+
const hostBeforeTool = async (context, signal) => {
|
|
656
660
|
if (!allowsExecutionTool(executionToolPolicy, context.toolCall.name)) return {
|
|
657
661
|
block: true,
|
|
658
662
|
reason: "Tool is outside this execution scope."
|
|
@@ -716,7 +720,7 @@ async function runXopcEmbeddedTurnInner(params) {
|
|
|
716
720
|
await verification.beforeTool(context.toolCall.id, context.toolCall.name);
|
|
717
721
|
return decision;
|
|
718
722
|
};
|
|
719
|
-
|
|
723
|
+
const hostAfterTool = async (context) => {
|
|
720
724
|
connectionStopped ||= isConnectionSuspended(conversationId, runId);
|
|
721
725
|
clarificationStopped ||= isClarificationSuspended(conversationId, runId);
|
|
722
726
|
const scoped = context.toolCall.name === "read_file" ? await instructions.forTool(context.toolCall.name, context.args) : context.toolCall.name === "data_batch" ? await instructions.forDataResult(context.result.content) : "";
|
|
@@ -741,6 +745,33 @@ async function runXopcEmbeddedTurnInner(params) {
|
|
|
741
745
|
isError: checked.isError
|
|
742
746
|
};
|
|
743
747
|
};
|
|
748
|
+
const beforeTool = async (context, signal) => {
|
|
749
|
+
const decision = await hostBeforeTool(context, signal);
|
|
750
|
+
if (decision?.block || isNestedCodemodePolicy(context)) return decision;
|
|
751
|
+
return await nativeBeforeTool?.(context, signal) ?? decision;
|
|
752
|
+
};
|
|
753
|
+
const afterTool = async (context, signal) => {
|
|
754
|
+
const checked = await hostAfterTool(context, signal);
|
|
755
|
+
if (isNestedCodemodePolicy(context)) return checked;
|
|
756
|
+
const native = await nativeAfterTool?.({
|
|
757
|
+
...context,
|
|
758
|
+
result: {
|
|
759
|
+
...context.result,
|
|
760
|
+
...checked
|
|
761
|
+
},
|
|
762
|
+
isError: checked?.isError ?? context.isError
|
|
763
|
+
}, signal);
|
|
764
|
+
return native ? {
|
|
765
|
+
...checked,
|
|
766
|
+
...native
|
|
767
|
+
} : checked;
|
|
768
|
+
};
|
|
769
|
+
session.agent.beforeToolCall = beforeTool;
|
|
770
|
+
session.agent.afterToolCall = afterTool;
|
|
771
|
+
restoreToolHooks = () => {
|
|
772
|
+
if (session.agent.beforeToolCall === beforeTool) session.agent.beforeToolCall = nativeBeforeTool;
|
|
773
|
+
if (session.agent.afterToolCall === afterTool) session.agent.afterToolCall = nativeAfterTool;
|
|
774
|
+
};
|
|
744
775
|
const baseFinishTurn = session.agent.finishTurn;
|
|
745
776
|
session.agent.finishTurn = async (context, signal) => {
|
|
746
777
|
const baseDecision = await baseFinishTurn?.(context, signal);
|
|
@@ -1002,6 +1033,7 @@ async function runXopcEmbeddedTurnInner(params) {
|
|
|
1002
1033
|
restorePrepareNextTurn?.();
|
|
1003
1034
|
restorePrepareRequest?.();
|
|
1004
1035
|
restoreTransformContext?.();
|
|
1036
|
+
restoreToolHooks?.();
|
|
1005
1037
|
runLease?.release();
|
|
1006
1038
|
unsubscribe?.();
|
|
1007
1039
|
try {
|
|
@@ -3,13 +3,13 @@ import { init_logger } from "../../utils/logger.js";
|
|
|
3
3
|
import { filterExecutionTools, resolveExecutionToolPolicy } from "./execution-tool-policy.js";
|
|
4
4
|
import { deferredToolContract, getXopcToolMetadata } from "./tool-metadata.js";
|
|
5
5
|
import { isCodemodeCoreRead } from "../tools/codemode-permissions.js";
|
|
6
|
+
import { createXopcCodemodeExtension } from "./codemode-extension.js";
|
|
6
7
|
import { abortEmbeddedRun } from "./runs.js";
|
|
7
8
|
import { guardSessionManager } from "./session-tool-result-guard.js";
|
|
8
9
|
import { transformUserMessageForPersistence } from "../inbound/attachment-pipeline.js";
|
|
9
10
|
import { createEmbeddedModelRuntime, resolveEmbeddedProviderApiKeySync } from "./model-runtime.js";
|
|
10
11
|
import { wrapStreamFnForXopcExtensions } from "./xopc-stream-bridge.js";
|
|
11
12
|
import { xopcToolsToDefinitions } from "./xopc-tools-bridge.js";
|
|
12
|
-
import { createXopcCodemodeExtension } from "./codemode-extension.js";
|
|
13
13
|
import { TOOL_DISCOVERY_STATE, createXopcToolSearchExtension } from "./tool-search-extension.js";
|
|
14
14
|
import { getNativePiAgentDir } from "../mcp/native-mcp.js";
|
|
15
15
|
import { AGENT_PROFILE_CONTEXT_STATE, createAgentProfileContextExtension } from "./agent-profile-context.js";
|
|
@@ -5,11 +5,11 @@ import { getConnectorAccount, init_connector_account_repository } from "../../st
|
|
|
5
5
|
import { appendConnectorExecutionAudit, consumeConnectorApproval, createConnectorApproval, getConnectorApproval, getConnectorConnection, getConnectorInstallation, init_connector_repository } from "../../storage/sqlite/connector-repository.js";
|
|
6
6
|
import { connectorObjectiveScope, init_connection_wait_repository, publishConnectionWait, requireSessionConnection } from "../../storage/sqlite/connection-wait-repository.js";
|
|
7
7
|
import { init_sqlite } from "../../storage/sqlite/index.js";
|
|
8
|
+
import { connectorArgumentsHash, connectorArgumentsPreview } from "../../connectors/approval.js";
|
|
9
|
+
import { connectorPrincipalForSession } from "../../connectors/principal.js";
|
|
8
10
|
import { CapabilityError } from "../../capabilities/runtime/errors.js";
|
|
9
11
|
import { ExternalEffectNotAppliedError, executeExternalOperation } from "../../capabilities/runtime/external-operations.js";
|
|
10
12
|
import "../../capabilities/runtime/dispatcher.js";
|
|
11
|
-
import { connectorArgumentsHash, connectorArgumentsPreview } from "../../connectors/approval.js";
|
|
12
|
-
import { connectorPrincipalForSession } from "../../connectors/principal.js";
|
|
13
13
|
import { selectConnectorAccount } from "../../connectors/account-selection.js";
|
|
14
14
|
import { cliContextPath } from "../../connectors/cli/process.js";
|
|
15
15
|
import { validateActionInput } from "../../connectors/cli/protocol.js";
|
|
@@ -5,11 +5,11 @@ import { getConnectorAccount } from "../../storage/sqlite/connector-account-repo
|
|
|
5
5
|
import { consumeConnectorApproval, createConnectorApproval, getConnectorApproval, getConnectorConnection, getConnectorInstallation, listConnectorActionMetadata, listConnectorConnections, listConnectorInstallations, upsertConnectorActionMetadata, upsertConnectorInstallation } from "../../storage/sqlite/connector-repository.js";
|
|
6
6
|
import { bindObjectiveAccount, connectionBinding, connectionBindings, connectorObjectiveScope, init_connection_wait_repository, publishConnectionWait, requireSessionConnection } from "../../storage/sqlite/connection-wait-repository.js";
|
|
7
7
|
import { init_sqlite } from "../../storage/sqlite/index.js";
|
|
8
|
-
import { CapabilityError } from "../../capabilities/runtime/errors.js";
|
|
9
|
-
import { ExternalEffectNotAppliedError, executeExternalOperation } from "../../capabilities/runtime/external-operations.js";
|
|
10
8
|
import { connectorArgumentsHash, connectorArgumentsPreview } from "../../connectors/approval.js";
|
|
11
9
|
import { canAccessConnectorAccount, currentAccountConnections } from "../../connectors/account-access.js";
|
|
12
10
|
import { connectorPrincipalForSession } from "../../connectors/principal.js";
|
|
11
|
+
import { CapabilityError } from "../../capabilities/runtime/errors.js";
|
|
12
|
+
import { ExternalEffectNotAppliedError, executeExternalOperation } from "../../capabilities/runtime/external-operations.js";
|
|
13
13
|
import { connectorIdentitySummary } from "../../connectors/connector-identity.js";
|
|
14
14
|
import { evaluateConnectorExecutionPolicy } from "../../connectors/policy.js";
|
|
15
15
|
import { ComposioSessionsAdapter } from "../../connectors/composio-sessions.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ExternalEffectNotAppliedError, executeExternalOperation } from "../../capabilities/runtime/external-operations.js";
|
|
2
|
-
import { canonicalCapabilityJson } from "../../capabilities/runtime/dispatcher.js";
|
|
3
1
|
import { init_src } from "../../../packages/computer-control-contract/src/index.js";
|
|
4
2
|
import "../../../packages/browser-control-contract/src/index.js";
|
|
3
|
+
import { ExternalEffectNotAppliedError, executeExternalOperation } from "../../capabilities/runtime/external-operations.js";
|
|
4
|
+
import { canonicalCapabilityJson } from "../../capabilities/runtime/dispatcher.js";
|
|
5
5
|
import { externalToolRef, parseExternalToolRef } from "./refs.js";
|
|
6
6
|
import { extractDocumentText } from "../../document-understanding/extract.js";
|
|
7
7
|
import { prepareImageForModel } from "../image/prepare-image-for-model.js";
|
|
@@ -8,9 +8,9 @@ function loadMergedMcpConfig(params) {
|
|
|
8
8
|
const diagnostics = inspectExtensionConnectorDependencies({ cfg: params.cfg });
|
|
9
9
|
const store = new AgentPluginStore();
|
|
10
10
|
const plugins = Object.create(null);
|
|
11
|
-
for (const plugin of store.active()) try {
|
|
11
|
+
for (const plugin of params.scope === "management" ? store.list().filter((plugin) => plugin.readiness !== "blocked") : store.active(params.agentId, params.workspaceDir)) try {
|
|
12
12
|
const componentDiagnostics = [...plugin.diagnostics];
|
|
13
|
-
for (const [id, server] of Object.entries(materializePluginServers(plugin, store, componentDiagnostics))) {
|
|
13
|
+
for (const [id, server] of Object.entries(materializePluginServers(plugin, store, componentDiagnostics, params.scope === "management"))) {
|
|
14
14
|
if (configured[id]) throw new Error(`MCP server ID conflicts with plugin: ${id}`);
|
|
15
15
|
plugins[id] = server;
|
|
16
16
|
}
|
|
@@ -2,6 +2,7 @@ import { createLogger } from "../../utils/logger/index.js";
|
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { isManagedConnectorServer } from "../../connectors/materialize.js";
|
|
4
4
|
import { prepareNativeMcpConfig } from "./native-mcp.js";
|
|
5
|
+
import { resolveMcpSetupConfig } from "./effective-server.js";
|
|
5
6
|
import { classifyMcpConnectionError } from "./connection-errors.js";
|
|
6
7
|
import { McpAuthenticationRequiredError, discoverMcpTools, signInNativeMcp } from "./tool-catalog.js";
|
|
7
8
|
import { createHash, randomUUID } from "node:crypto";
|
|
@@ -83,6 +84,7 @@ async function advertisesOAuth(config, workspace, serverId, signal) {
|
|
|
83
84
|
return Boolean(legacy && legacy.issuer === url.origin && typeof legacy.authorization_endpoint === "string" && typeof legacy.token_endpoint === "string");
|
|
84
85
|
}
|
|
85
86
|
async function probeMcpConnection(config, workspace, serverId, options) {
|
|
87
|
+
config = resolveMcpSetupConfig(config, serverId);
|
|
86
88
|
try {
|
|
87
89
|
return {
|
|
88
90
|
state: "connected",
|
|
@@ -116,6 +118,7 @@ async function probeMcpConnection(config, workspace, serverId, options) {
|
|
|
116
118
|
}
|
|
117
119
|
const attempts = /* @__PURE__ */ new Map();
|
|
118
120
|
function fingerprint(config, serverId) {
|
|
121
|
+
config = resolveMcpSetupConfig(config, serverId);
|
|
119
122
|
const server = config.mcp?.servers?.[serverId];
|
|
120
123
|
return createHash("sha256").update(JSON.stringify(server ? {
|
|
121
124
|
...server,
|
|
@@ -138,6 +141,7 @@ function cancel(attempt) {
|
|
|
138
141
|
}
|
|
139
142
|
/** A UI bridge to native pi's login command; no host-owned OAuth client or token store. */
|
|
140
143
|
function startMcpAuthorization(config, workspace, serverId, owner, options) {
|
|
144
|
+
config = resolveMcpSetupConfig(config, serverId);
|
|
141
145
|
const server = config.mcp?.servers?.[serverId];
|
|
142
146
|
if (!server?.url || server.enabled === false || isManagedConnectorServer(server) && server.xopcConnector.enabled === false) throw new Error("An enabled HTTP MCP server is required.");
|
|
143
147
|
httpUrl(server.url);
|
|
@@ -227,7 +231,15 @@ function submitMcpRedirect(id, owner, redirectUrl, config) {
|
|
|
227
231
|
if (!expected) return false;
|
|
228
232
|
const target = new URL(expected);
|
|
229
233
|
const actual = httpUrl(redirectUrl);
|
|
230
|
-
if (actual.origin !== target.origin || actual.pathname !== target.pathname || actual.searchParams.get("state") !== authorization.searchParams.get("state")
|
|
234
|
+
if (actual.origin !== target.origin || actual.pathname !== target.pathname || actual.searchParams.get("state") !== authorization.searchParams.get("state")) return false;
|
|
235
|
+
if (actual.searchParams.has("error")) {
|
|
236
|
+
cancel(attempt);
|
|
237
|
+
attempt.result.state = "error";
|
|
238
|
+
attempt.result.error = "Sign-in was declined or could not be completed. Try again.";
|
|
239
|
+
delete attempt.result.authorizationUrl;
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
if (!actual.searchParams.get("code")) return false;
|
|
231
243
|
attempt.redirect(actual.href);
|
|
232
244
|
attempt.redirect = void 0;
|
|
233
245
|
return true;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AgentPluginStore } from "../../extensions/agent-plugins/store.js";
|
|
2
|
+
import { materializePluginServers } from "../../extensions/agent-plugins/mcp-adapter.js";
|
|
3
|
+
//#region src/agent/mcp/effective-server.ts
|
|
4
|
+
/** Resolve a single explicit setup target without enabling it for any agent. */
|
|
5
|
+
function resolveMcpSetupConfig(config, serverId) {
|
|
6
|
+
if (Object.hasOwn(config.mcp?.servers ?? {}, serverId)) return config;
|
|
7
|
+
const store = new AgentPluginStore();
|
|
8
|
+
for (const installed of store.list()) {
|
|
9
|
+
const plugin = store.pending(installed.id) ?? installed;
|
|
10
|
+
if (plugin.readiness === "blocked") continue;
|
|
11
|
+
const servers = materializePluginServers(plugin, store, [], true);
|
|
12
|
+
if (!Object.hasOwn(servers, serverId)) continue;
|
|
13
|
+
return {
|
|
14
|
+
...config,
|
|
15
|
+
mcp: {
|
|
16
|
+
...config.mcp,
|
|
17
|
+
servers: {
|
|
18
|
+
...config.mcp?.servers,
|
|
19
|
+
[serverId]: servers[serverId]
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return config;
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { resolveMcpSetupConfig };
|
|
@@ -8,4 +8,4 @@ export type NativeMcpConfig = LoadedMcpConfig & {
|
|
|
8
8
|
credentialAliases?: Record<string, string>;
|
|
9
9
|
};
|
|
10
10
|
/** Only projects host configuration and secret references; all MCP execution belongs to pi. */
|
|
11
|
-
export declare function prepareNativeMcpConfig(config: Config, workspaceDir: string): Promise<NativeMcpConfig>;
|
|
11
|
+
export declare function prepareNativeMcpConfig(config: Config, workspaceDir: string, agentId?: string): Promise<NativeMcpConfig>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { init_paths_state, resolveStateDir } from "../../config/paths-state.js";
|
|
2
2
|
import { McpServerSchema, init_schema } from "../../config/schema.js";
|
|
3
3
|
import { resolveConnectorSecretReferences } from "../../connectors/secret-store.js";
|
|
4
|
+
import { validPluginOAuthReference } from "../../extensions/agent-plugins/connection-reuse.js";
|
|
4
5
|
import { createNativeMcpCredentials, routeNativeMcpCredentials } from "./credential-store.js";
|
|
5
6
|
import { loadMergedMcpConfig } from "./config.js";
|
|
6
7
|
import { join } from "node:path";
|
|
@@ -20,17 +21,19 @@ function getNativePiAgentDir() {
|
|
|
20
21
|
return directory;
|
|
21
22
|
}
|
|
22
23
|
/** Only projects host configuration and secret references; all MCP execution belongs to pi. */
|
|
23
|
-
async function prepareNativeMcpConfig(config, workspaceDir) {
|
|
24
|
+
async function prepareNativeMcpConfig(config, workspaceDir, agentId) {
|
|
24
25
|
getNativePiAgentDir();
|
|
25
26
|
const merged = loadMergedMcpConfig({
|
|
26
27
|
cfg: config,
|
|
27
|
-
workspaceDir
|
|
28
|
+
workspaceDir,
|
|
29
|
+
agentId
|
|
28
30
|
});
|
|
29
31
|
const result = {
|
|
30
32
|
servers: [],
|
|
31
33
|
errors: merged.diagnostics.map((item) => item.message)
|
|
32
34
|
};
|
|
33
35
|
const names = /* @__PURE__ */ new Set();
|
|
36
|
+
const aliases = /* @__PURE__ */ new Map();
|
|
34
37
|
for (const [name, raw] of Object.entries(merged.config.mcpServers)) {
|
|
35
38
|
const normalized = name.replace(/-/g, "_");
|
|
36
39
|
if (!/^[a-zA-Z0-9_-]+$/.test(name) || names.has(normalized)) {
|
|
@@ -38,6 +41,12 @@ async function prepareNativeMcpConfig(config, workspaceDir) {
|
|
|
38
41
|
continue;
|
|
39
42
|
}
|
|
40
43
|
names.add(normalized);
|
|
44
|
+
const reference = raw.xopcPluginOAuthReference;
|
|
45
|
+
if (reference && !validPluginOAuthReference(reference, config, raw)) {
|
|
46
|
+
result.errors.push(`Shared MCP connection changed: ${name}. Reconnect this plugin.`);
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (typeof raw.xopcOAuthCredentialId === "string") aliases.set(name, raw.xopcOAuthCredentialId);
|
|
41
50
|
const parsed = McpServerSchema.safeParse(raw);
|
|
42
51
|
if (!parsed.success) {
|
|
43
52
|
result.errors.push(`Invalid MCP server ${name}: ${parsed.error.message}`);
|
|
@@ -61,14 +70,14 @@ async function prepareNativeMcpConfig(config, workspaceDir) {
|
|
|
61
70
|
"description"
|
|
62
71
|
].filter((key) => value[key] !== void 0).map((key) => [key, value[key]]));
|
|
63
72
|
if (projected.type === "streamable-http") projected.type = "http";
|
|
73
|
+
const plugin = raw.xopcPlugin;
|
|
64
74
|
result.servers.push({
|
|
65
75
|
name,
|
|
66
76
|
config: projected,
|
|
67
|
-
source: "xopc.json",
|
|
77
|
+
source: plugin?.revision ? `plugin:${plugin.id}@${plugin.revision}` : "xopc.json",
|
|
68
78
|
scope: "extension"
|
|
69
79
|
});
|
|
70
80
|
}
|
|
71
|
-
const aliases = new Map(Object.entries(config.mcp?.servers ?? {}).filter(([, value]) => typeof value.xopcOAuthCredentialId === "string").map(([name, value]) => [name, value.xopcOAuthCredentialId]));
|
|
72
81
|
if (aliases.size) {
|
|
73
82
|
result.credentials = routeNativeMcpCredentials(await createNativeMcpCredentials(), aliases);
|
|
74
83
|
result.credentialAliases = Object.fromEntries(aliases);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createEmbeddedModelRuntime } from "../embedded/model-runtime.js";
|
|
2
2
|
import { getNativePiAgentDir, prepareNativeMcpConfig } from "./native-mcp.js";
|
|
3
|
+
import { resolveMcpSetupConfig } from "./effective-server.js";
|
|
3
4
|
import { join } from "node:path";
|
|
4
5
|
import { InMemoryCredentialStore, InMemoryModelsStore } from "@earendil-works/pi-ai";
|
|
5
6
|
import { DefaultResourceLoader, ModelRuntime, SessionManager, SettingsManager, createAgentSession, createMcpExtension, createToolSearchExtension } from "@earendil-works/pi-coding-agent";
|
|
@@ -16,7 +17,7 @@ async function signInNativeMcp(config, workspaceDir, serverId, interaction, opti
|
|
|
16
17
|
async function runNativeMcpSession(config, workspaceDir, serverId, interaction, options) {
|
|
17
18
|
const signal = interaction?.signal ?? options?.signal;
|
|
18
19
|
signal?.throwIfAborted();
|
|
19
|
-
const loaded = await prepareNativeMcpConfig(config, workspaceDir);
|
|
20
|
+
const loaded = await prepareNativeMcpConfig(resolveMcpSetupConfig(config, serverId), workspaceDir);
|
|
20
21
|
signal?.throwIfAborted();
|
|
21
22
|
const entry = loaded.servers.find((server) => server.name === serverId);
|
|
22
23
|
if (!entry) throw new Error(`MCP server "${serverId}" is not configured or has invalid configuration.`);
|
|
@@ -3,9 +3,9 @@ import { init_src } from "../../../packages/gateway-contract/src/index.js";
|
|
|
3
3
|
import { init_session_input_repository, listTaskUpdateTriggers } from "../../storage/sqlite/session-input-repository.js";
|
|
4
4
|
import { getClarificationResumeInput, init_clarification_wait_repository } from "../../storage/sqlite/clarification-wait-repository.js";
|
|
5
5
|
import { getConnectionResumeInput, init_connection_wait_repository } from "../../storage/sqlite/connection-wait-repository.js";
|
|
6
|
-
import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
|
|
7
6
|
import { init_agent_session_key, resolveAgentMainConversationId } from "../../routing/agent-session-key.js";
|
|
8
7
|
import { init_model_usage, modelUsageOriginFromTurn, withModelUsageOrigin } from "../../providers/model-usage.js";
|
|
8
|
+
import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
|
|
9
9
|
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
10
10
|
import { abortEmbeddedRun } from "../embedded/runs.js";
|
|
11
11
|
import { clearPendingTranscriptUserMessage, setPendingTranscriptUserMessage } from "../inbound/attachment-pipeline.js";
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
3
|
import { init_attachment_ref, parseNoteAttachmentTarget } from "../notes/attachment-ref.js";
|
|
4
|
-
import { init_agent_scope, resolveAgentHomeDir, resolveDefaultAgentId } from "./agent-scope.js";
|
|
5
|
-
import { extractTextContent } from "./context/workspace.js";
|
|
6
4
|
import { init_agent_session_key, resolveAgentIdFromConversationId } from "../routing/agent-session-key.js";
|
|
5
|
+
import { init_agent_scope, resolveAgentHomeDir, resolveDefaultAgentId } from "./agent-scope.js";
|
|
7
6
|
import { extractProfileAgentId, resolveEffectiveAgentConfigForSession } from "../config/agent-profile.js";
|
|
8
7
|
import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
|
|
9
8
|
import { init_providers, resolveModel } from "../providers/index.js";
|
|
10
9
|
import { configureTracing, flushTracing } from "../observability/runtime.js";
|
|
11
10
|
import { getUserTimezone } from "../user-model/repository.js";
|
|
11
|
+
import { extractTextContent } from "./context/workspace.js";
|
|
12
12
|
import { resolveAgentTurnTimeoutMs } from "./orchestration/run-agent-turn-with-timeout.js";
|
|
13
13
|
import { applyConfigOverrides } from "../config/runtime-overrides.js";
|
|
14
14
|
import { effectiveWorkspacePathForSession } from "../session/session-workspace.js";
|
|
@@ -40,6 +40,7 @@ export interface SkillLoader {
|
|
|
40
40
|
getEnabledSkills: (config?: Record<string, SkillConfig>) => Skill[];
|
|
41
41
|
}
|
|
42
42
|
export interface SkillLoaderOptions {
|
|
43
|
+
agentId?: string;
|
|
43
44
|
/** Re-evaluated on every load so trust changes take effect without recreating the runtime. */
|
|
44
45
|
isWorkspaceTrusted?: (workspaceDir: string) => boolean;
|
|
45
46
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
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
|
-
import { parseFrontmatter } from "../../markdown/frontmatter.js";
|
|
5
4
|
import { init_paths } from "../../config/paths.js";
|
|
5
|
+
import { parseFrontmatter } from "../../markdown/frontmatter.js";
|
|
6
6
|
import { findInstallSpec, hasBinary, installSkill } from "./installer.js";
|
|
7
7
|
import { applySkillEnvOverrides, createSkillConfigManager, getSkillEnvironment, isSkillEnabled, resolveSkillConfig, validateSkillConfig } from "./config.js";
|
|
8
8
|
import { parseSkillToolConditions } from "./skill-tool-gating.js";
|
|
@@ -135,7 +135,10 @@ function discoverAndMergeSkills(sources, maxSkillFileBytes, limits = {}, initial
|
|
|
135
135
|
skills: source.skillFiles.slice(0, limits.maxSkillsLoadedPerSource).flatMap((path) => {
|
|
136
136
|
const result = loadSkillFromFile(path, source, source.rootDir, maxSkillFileBytes);
|
|
137
137
|
if (result.diagnostic) diagnostics.push(result.diagnostic);
|
|
138
|
-
return result.skill ? [
|
|
138
|
+
return result.skill ? [{
|
|
139
|
+
...result.skill,
|
|
140
|
+
name: source.skillAliases?.[path] ?? result.skill.name
|
|
141
|
+
}] : [];
|
|
139
142
|
}),
|
|
140
143
|
diagnostics: []
|
|
141
144
|
} : discoverSkills(source, maxSkillFileBytes, limits.maxSkillsLoadedPerSource, limits.maxCandidatesPerRoot);
|
|
@@ -320,7 +323,8 @@ function createSkillLoader(options = {}) {
|
|
|
320
323
|
return loadSkills({
|
|
321
324
|
workspaceDir,
|
|
322
325
|
builtinDir,
|
|
323
|
-
workspaceTrust
|
|
326
|
+
workspaceTrust,
|
|
327
|
+
agentId: options.agentId
|
|
324
328
|
});
|
|
325
329
|
}
|
|
326
330
|
return {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { parseFrontmatter } from "../../markdown/frontmatter.js";
|
|
2
1
|
import { init_paths, resolveSkillsDir } from "../../config/paths.js";
|
|
2
|
+
import { parseFrontmatter } from "../../markdown/frontmatter.js";
|
|
3
3
|
import { loadSkillsLock } from "./hub-lock.js";
|
|
4
4
|
import { dirname, join, resolve, sep } from "node:path";
|
|
5
5
|
import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { parseFrontmatter } from "../../markdown/frontmatter.js";
|
|
2
1
|
import { init_paths, resolveSkillsDir } from "../../config/paths.js";
|
|
2
|
+
import { parseFrontmatter } from "../../markdown/frontmatter.js";
|
|
3
3
|
import { resolveWorkspaceSkillsDir } from "./workspace-skills-dir.js";
|
|
4
4
|
import { formatScanSummary, scanSkillDirectory } from "./scanner.js";
|
|
5
5
|
import { fuzzyFindText, normalizeForFuzzyMatch, normalizeToLF, restoreLineEndings } from "../tools/edit-diff.js";
|
|
@@ -35,7 +35,10 @@ var SkillManager = class {
|
|
|
35
35
|
constructor(workspace, bundledSkillsDir, options = {}) {
|
|
36
36
|
this.workspace = workspace;
|
|
37
37
|
this.bundledSkillsDir = bundledSkillsDir || resolveBundledSkillsDir();
|
|
38
|
-
this.skillLoader = createSkillLoader({
|
|
38
|
+
this.skillLoader = createSkillLoader({
|
|
39
|
+
agentId: options.agentId,
|
|
40
|
+
isWorkspaceTrusted: options.isWorkspaceTrusted
|
|
41
|
+
});
|
|
39
42
|
this.initialize();
|
|
40
43
|
}
|
|
41
44
|
/**
|
|
@@ -216,12 +219,14 @@ var SkillManager = class {
|
|
|
216
219
|
* Find a skill by name
|
|
217
220
|
*/
|
|
218
221
|
findSkill(name) {
|
|
222
|
+
this.refreshPlugins();
|
|
219
223
|
return this.skills.find((s) => s.name === name);
|
|
220
224
|
}
|
|
221
225
|
/**
|
|
222
226
|
* Check if a skill exists
|
|
223
227
|
*/
|
|
224
228
|
hasSkill(name) {
|
|
229
|
+
this.refreshPlugins();
|
|
225
230
|
return this.skills.some((s) => s.name === name);
|
|
226
231
|
}
|
|
227
232
|
/**
|
|
@@ -48,15 +48,16 @@ function resolveSkillSources(options, skillsConfig) {
|
|
|
48
48
|
const extraDirs = [...configuredExtraDirs, ...optionExtraDirs];
|
|
49
49
|
const sources = [];
|
|
50
50
|
const diagnostics = [];
|
|
51
|
-
for (const plugin of new AgentPluginStore().active()) {
|
|
51
|
+
for (const plugin of new AgentPluginStore().active(options.agentId, options.workspaceDir)) {
|
|
52
52
|
sources.push({
|
|
53
53
|
id: `plugin:${plugin.id}`,
|
|
54
|
-
rootDir:
|
|
54
|
+
rootDir: plugin.rootDir,
|
|
55
55
|
priority: 150,
|
|
56
56
|
scope: "global",
|
|
57
57
|
managed: false,
|
|
58
58
|
writable: false,
|
|
59
|
-
skillFiles: plugin.skills.map((skill) => skill.filePath)
|
|
59
|
+
skillFiles: plugin.skills.map((skill) => skill.filePath),
|
|
60
|
+
skillAliases: plugin.layout?.dialect !== "portable" ? Object.fromEntries(plugin.skills.map((skill) => [skill.filePath, `${plugin.id}.${skill.name}`])) : void 0
|
|
60
61
|
});
|
|
61
62
|
diagnostics.push(...plugin.diagnostics.map((diagnostic) => ({
|
|
62
63
|
type: "warning",
|
|
@@ -111,6 +111,7 @@ export interface SkillSourceDescriptor {
|
|
|
111
111
|
writable: boolean;
|
|
112
112
|
/** Validated portable plugin files; bypass recursive discovery. */
|
|
113
113
|
skillFiles?: string[];
|
|
114
|
+
skillAliases?: Record<string, string>;
|
|
114
115
|
}
|
|
115
116
|
export type SkillOrigin = SkillSourceDescriptor;
|
|
116
117
|
export interface SkillsLimitsConfig {
|
|
@@ -8,8 +8,8 @@ import { getSessionMetadata } from "../../storage/sqlite/session-read-repository
|
|
|
8
8
|
import { patchSessionMetadata } from "../../storage/sqlite/session-repository.js";
|
|
9
9
|
import { getSessionTaskPlan, setSessionTaskPlan } from "../../storage/sqlite/session-task-plan-repository.js";
|
|
10
10
|
import { init_sqlite } from "../../storage/sqlite/index.js";
|
|
11
|
-
import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
|
|
12
11
|
import { resolveUserContextSessionAccess } from "../../user-context/access-policy.js";
|
|
12
|
+
import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
|
|
13
13
|
import { resolveEffectiveAgentConfigForAgent } from "../../config/agent-profile.js";
|
|
14
14
|
import { PERSONAL_TOOL_DESCRIPTIONS } from "../../personal-agent/policy.js";
|
|
15
15
|
import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { CapabilityDispatcher } from "../../capabilities/runtime/dispatcher.js";
|
|
2
1
|
import { isPersonalConversation } from "../../personal-agent/repository.js";
|
|
3
2
|
import { LOCAL_READ_MAX_CHARS } from "./local-read-budget.js";
|
|
4
3
|
import { getEmbeddedExecutionSession } from "../embedded/execution-context.js";
|
|
4
|
+
import { CapabilityDispatcher } from "../../capabilities/runtime/dispatcher.js";
|
|
5
5
|
import { registerNoteReadCapabilities } from "../../notes/capabilities/read.js";
|
|
6
6
|
import { registerProjectReadCapabilities } from "../../projects/capabilities/read.js";
|
|
7
7
|
import { registerAutomationReadCapabilities } from "../../automations/capabilities/read.js";
|
|
@@ -11,13 +11,13 @@ import { TaskRunRepository } from "../../tasks/task-run-repository.js";
|
|
|
11
11
|
import { getSessionMetadata } from "../../storage/sqlite/session-read-repository.js";
|
|
12
12
|
import { init_sqlite } from "../../storage/sqlite/index.js";
|
|
13
13
|
import "../../activity/index.js";
|
|
14
|
-
import { CapabilityError } from "../../capabilities/runtime/errors.js";
|
|
15
|
-
import "../../capabilities/runtime/dispatcher.js";
|
|
16
14
|
import { getDefaultAgentId, init_resolve_route } from "../../routing/resolve-route.js";
|
|
17
15
|
import { hasUnlocalizedTaskText, resolveTaskLocale } from "../../tasks/task-language.js";
|
|
18
16
|
import { TaskReadModelProjector } from "../../tasks/task-read-model-projector.js";
|
|
19
17
|
import { TaskOriginRepository } from "../../tasks/task-origin-repository.js";
|
|
20
18
|
import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
|
|
19
|
+
import { CapabilityError } from "../../capabilities/runtime/errors.js";
|
|
20
|
+
import "../../capabilities/runtime/dispatcher.js";
|
|
21
21
|
import { resolveProjectAgentId } from "../../projects/project-agent.js";
|
|
22
22
|
import "../../projects/index.js";
|
|
23
23
|
import { TaskCollaborationRepository } from "../../tasks/task-collaboration-repository.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { init_agent_scope, resolveAgentIdForWorkspacePath } from "../agent-scope.js";
|
|
2
1
|
import { init_agent_session_key, normalizeAgentId } from "../../routing/agent-session-key.js";
|
|
2
|
+
import { init_agent_scope, resolveAgentIdForWorkspacePath } from "../agent-scope.js";
|
|
3
3
|
import { SkillManager } from "../skills/skill-manager.js";
|
|
4
4
|
import { SystemPromptBuilder } from "../prompt/service-prompt-builder.js";
|
|
5
5
|
import { UserContextRuntimeRegistry } from "../../user-context/runtime.js";
|
|
@@ -23,11 +23,15 @@ var WorkspaceRuntimeRegistry = class {
|
|
|
23
23
|
/** Lazily construct and cache an agent-scoped runtime for a workspace. */
|
|
24
24
|
getOrCreate(resolvedPath, requestedAgentId) {
|
|
25
25
|
const cfg = this.getConfig();
|
|
26
|
-
const
|
|
26
|
+
const agentId = normalizeAgentId(requestedAgentId?.trim() || resolveAgentIdForWorkspacePath(resolvedPath));
|
|
27
|
+
const runtimeKey = `${agentId}\u0000${resolvedPath}`;
|
|
27
28
|
const existing = this.runtimes.get(runtimeKey);
|
|
28
29
|
if (existing) return existing;
|
|
29
30
|
const { memoryManager } = this.userContextRuntimes.getOrCreate(cfg);
|
|
30
|
-
const skillManager = new SkillManager(resolvedPath, this.bundledSkillsDir, {
|
|
31
|
+
const skillManager = new SkillManager(resolvedPath, this.bundledSkillsDir, {
|
|
32
|
+
agentId,
|
|
33
|
+
isWorkspaceTrusted: () => this.isWorkspaceTrusted?.(resolvedPath) === true
|
|
34
|
+
});
|
|
31
35
|
const rt = {
|
|
32
36
|
skillManager,
|
|
33
37
|
systemPromptBuilder: new SystemPromptBuilder({
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { AgentEntrySchema, EffectiveAgentConfigSchema } from "../agent-config/schema.js";
|
|
2
2
|
import { resolveEffectiveAgentConfig } from "../agent-config/resolver.js";
|
|
3
3
|
import { init_agent_config } from "../agent-config/index.js";
|
|
4
|
-
import { CapabilityError } from "../capabilities/runtime/errors.js";
|
|
5
|
-
import { defineAtomicCapability, defineReadCapability } from "../capabilities/runtime/dispatcher.js";
|
|
6
4
|
import { AgentCatalogRepository, init_repository } from "./repository.js";
|
|
7
5
|
import { init_agent_scope, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
6
|
+
import { CapabilityError } from "../capabilities/runtime/errors.js";
|
|
7
|
+
import { defineAtomicCapability, defineReadCapability } from "../capabilities/runtime/dispatcher.js";
|
|
8
8
|
import { AgentCatalogService } from "./service.js";
|
|
9
9
|
import { z } from "zod";
|
|
10
10
|
//#region src/agent-catalog/capabilities.ts
|
|
@@ -3,10 +3,10 @@ import { init_src } from "../../../packages/gateway-contract/src/index.js";
|
|
|
3
3
|
import { init_trust_policy, resolveAutomationSafetyForTrust } from "../../user-context/trust-policy.js";
|
|
4
4
|
import { getUserTrustPolicy } from "../../storage/sqlite/user-trust-repository.js";
|
|
5
5
|
import { init_sqlite } from "../../storage/sqlite/index.js";
|
|
6
|
+
import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
|
|
6
7
|
import { CapabilityError } from "../../capabilities/runtime/errors.js";
|
|
7
8
|
import { ExternalEffectNotAppliedError } from "../../capabilities/runtime/external-operations.js";
|
|
8
9
|
import { defineExternalCapability, defineReadCapability } from "../../capabilities/runtime/dispatcher.js";
|
|
9
|
-
import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
|
|
10
10
|
import { AutomationCreateCapabilityInputSchema } from "./write.js";
|
|
11
11
|
import { simulateAutomation } from "../draft/automation-draft-validator.js";
|
|
12
12
|
import { AutomationDraftService } from "../draft/automation-draft-service.js";
|