@xopcai/xopc 0.0.303 → 0.0.307
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 +4 -4
- package/README.zh-CN.md +4 -4
- package/dist/browser-ext/dist/assets/{auth-B_9ZuGDx.js → auth-C3yV1y_l.js} +67 -22
- package/dist/browser-ext/dist/background.js +4 -4
- package/dist/browser-ext/dist/sidepanel.html +1 -1
- package/dist/browser-ext/dist/sidepanel.js +3 -3
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/feishu/xopc.extension.json +0 -3
- package/dist/extensions/telegram/xopc.extension.json +1 -4
- package/dist/extensions/weixin/xopc.extension.json +0 -3
- package/dist/gateway/static/root/assets/{activity-store-DCi5rh4e.js → activity-store-wgSB2HYK.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Ch3DzUvP.js → agent-avatar-dicebear-CZeQo09T.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BPsRb9Ck.js +1 -0
- package/dist/gateway/static/root/assets/{agents-DXHD-ST3.js → agents-BlrHMbRx.js} +1 -1
- package/dist/gateway/static/root/assets/{api-CAV9PN9i.js → api-BKHmTb0w.js} +1 -1
- package/dist/gateway/static/root/assets/api-DFOlahZv.js +1 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-Bzw4fQP8.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-8GZpUXva.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-BkQQtIxH.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-BKGzaVvM.js → archive-plugin-CQ2NaoHb.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-8bARdLnp.js → attachment-load-BFi1H7yJ.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-BAEenyzx.js → automations-page-CDBXcii_.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-CUpiTTiY.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-Cv3GS9Eo.js → binary-plugins-D07eWmOx.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-D4ZIVQbk.css → block-editor-BdOTO0Yo.css} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-DUeb92LG.js → block-editor-CtVnjyYU.js} +3 -3
- package/dist/gateway/static/root/assets/{browser-automation-inputs-BGT0xoTv.js → browser-automation-inputs-BzkJog8e.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-D1O22WIf.js → browser-automations-page-DyrSbDdG.js} +2 -2
- package/dist/gateway/static/root/assets/browser-settings-page-CqTxLpil.js +3 -0
- package/dist/gateway/static/root/assets/button-CS04eWY9.js +1 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-BZ_-pnS6.js +8 -0
- package/dist/gateway/static/root/assets/channels-settings-DAD9qE3J.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-C_icwbWj.js → channels-status-swr-B2JwuTjG.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-D-JYPVYl.js → chat-terminal-dock-B62SZdAo.js} +2 -2
- package/dist/gateway/static/root/assets/{computer-settings-page-Bcfp948A.js → computer-settings-page-ClSresNq.js} +1 -1
- package/dist/gateway/static/root/assets/connector-service-page-CPqVmNvx.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-BUQyg3CW.js +2 -0
- package/dist/gateway/static/root/assets/cron-expression-CTMi_tql.js +2 -0
- package/dist/gateway/static/root/assets/date-picker-B71AJK50.js +1 -0
- package/dist/gateway/static/root/assets/{dependency-picker-UtoUm57Q.js → dependency-picker-DlyGK-kA.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-Bryx7gRM.js → desktop-pet-DGkbTE8_.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-BY8r9j66.js +1 -0
- package/dist/gateway/static/root/assets/device-pairing-wizard-DzRrgd59.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-DQlFTVBx.js → extension-debug-page-L8Mm1n3A.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BSsqRDXh.js → extension-page-CFc4vSNU.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DbVZv9ve.js → extension-settings-page-B5zWyHr3.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-D5AM8cyQ.js → gateway-config-swr-B6wHa6ZI.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-B53R0CA4.js +1 -0
- package/dist/gateway/static/root/assets/gateway-realtime-store-BLDgrJ30.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-D7qmTH4R.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-CSJWdnFs.js → gateway-startup-retry-DRzGnEV-.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-Cxowc29b.js → heartbeat-settings-Glsl3X5b.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-s9hDQ8Hc.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-BNh604hw.js → image-generation-api-Ck_pyDom.js} +1 -1
- package/dist/gateway/static/root/assets/imports-page-ByBX7ome.js +1 -0
- package/dist/gateway/static/root/assets/index-RBCkv8a_.js +79 -0
- package/dist/gateway/static/root/assets/index-cFU4S35z.css +1 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-C45RlO8a.js +1 -0
- package/dist/gateway/static/root/assets/local-app-workbench-page-DP0x2jpR.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-CXPaPDGm.js → local-apps-page-C_AQc2bI.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-DLK05Y1a.js → locale-store-msTfRK8P.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-DvM8Pyok.js +2 -0
- package/dist/gateway/static/root/assets/management-settings-D1uwSutV.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-view-B8maDRWh.js → markdown-view-BInabSKf.js} +2 -2
- package/dist/gateway/static/root/assets/{media-plugins-tSJ0CvcX.js → media-plugins-C4mhf13f.js} +1 -1
- package/dist/gateway/static/root/assets/messages-F74LVAiU.js +3 -0
- package/dist/gateway/static/root/assets/note-detail-panel-D35sErp2.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-8jCDklDn.js +8 -0
- package/dist/gateway/static/root/assets/{page-tabs-CQx6H-GS.js → page-tabs-1go_BtX1.js} +1 -1
- package/dist/gateway/static/root/assets/{popover-select-DldSX8GX.js → popover-select-9i-ZtHXL.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-A3-bVtdy.js → preview-open-alternatives-DmoSC0j1.js} +1 -1
- package/dist/gateway/static/root/assets/{proactive-page-D46cR3sf.js → proactive-page-xAjKTIID.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-CujZXOea.js → product-open-page-gmi5LLwM.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-BUMQHy_N.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-DT-Mt7XR.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-BMFL4vis.js → registry-api-BSWtko7U.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-Clz3byir.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CR0qvq9C.js → runtime-tools-settings-panel-ClkOoxDl.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-BUD9lLEE.js → schema-form-BuEmLiaU.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-tQRwktKm.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-DqWg9XS5.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-BZPCUH6a.js → settings-form-section-Dor39QON.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-XoHmqIdm.js → settings-page-Xj-yvIc8.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BB_sMB7P.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-BFWZoXdm.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-oDALm4b6.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-DmwelnfK.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-BE9JXz4U.js +2 -0
- package/dist/gateway/static/root/assets/{skills-page.utils-CH-quGxZ.js → skills-page.utils-Ii8qeXhs.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-CGC7eBso.js → system-settings-panel-Di6OSO-0.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-D1AWszc7.js +1 -0
- package/dist/gateway/static/root/assets/theme-store-1SZ-HFHX.js +1 -0
- package/dist/gateway/static/root/assets/tunnel-api-DDOlOYlj.js +1 -0
- package/dist/gateway/static/root/assets/{use-autosave-BydB6x2K.js → use-autosave-CQ8uWNnB.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-C00i4ea0.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-CPUDBcag.js → voice-api-key-field-COTzshjL.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-bZqN8-UF.js → voice-config-api-DgJML_uM.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-D_FmJbGH.js → work-discovery-overlay-_URrXbi4.js} +1 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-CALs-1nd.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-BUiBjz6m.js +6 -0
- package/dist/gateway/static/root/channel-icons/feishu.svg +6 -12
- package/dist/gateway/static/root/connector-icons/SOURCES.md +12 -0
- package/dist/gateway/static/root/connector-icons/dingtalk-mark.svg +1 -0
- package/dist/gateway/static/root/connector-icons/tencent-meeting-mark.svg +37 -0
- package/dist/gateway/static/root/connector-icons/wps-calendar.svg +14 -0
- package/dist/gateway/static/root/connector-icons/wps-docs.svg +14 -0
- package/dist/gateway/static/root/connector-icons/wps-mail.svg +7 -0
- package/dist/gateway/static/root/index.html +14 -12
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/device-pairing.js +100 -7
- package/dist/packages/gateway-contract/src/gateway-scopes.js +53 -0
- package/dist/packages/gateway-contract/src/index.js +2 -0
- package/dist/packages/realtime-client/src/index.js +14 -2
- package/dist/packages/realtime-protocol/src/index.js +18 -14
- package/dist/src/agent/agent-instance-gateway.d.ts +2 -0
- package/dist/src/agent/agent-manager.d.ts +2 -0
- package/dist/src/agent/agent-manager.js +40 -12
- package/dist/src/agent/agent-scope.d.ts +4 -1
- package/dist/src/agent/agent-scope.js +19 -3
- package/dist/src/agent/commands/command-isolation.js +11 -9
- package/dist/src/agent/commands/command-registry.js +18 -33
- package/dist/src/agent/context/audit.js +12 -2
- package/dist/src/agent/context/coordinator.d.ts +13 -3
- package/dist/src/agent/context/coordinator.js +27 -11
- package/dist/src/agent/context/execution-context.js +42 -22
- package/dist/src/agent/context/execution-context.types.d.ts +4 -2
- package/dist/src/agent/context/execution-scope.d.ts +2 -2
- package/dist/src/agent/context/execution-scope.js +1 -1
- package/dist/src/agent/context/project-context.d.ts +2 -2
- package/dist/src/agent/context/project-context.js +3 -3
- package/dist/src/agent/embedded/run-for-session.d.ts +1 -0
- package/dist/src/agent/embedded/run-for-session.js +7 -1
- package/dist/src/agent/external-tools/composio-provider.js +83 -20
- package/dist/src/agent/external-tools/gateway-tools.js +2 -1
- package/dist/src/agent/inbound/attachment-pipeline.d.ts +2 -0
- package/dist/src/agent/inbound/attachment-pipeline.js +3 -3
- package/dist/src/agent/inbound/inbound-loop.js +1 -0
- package/dist/src/agent/inbound/turn-dispatcher.js +3 -3
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
- package/dist/src/agent/mcp/mcp-stdio-transport.js +5 -2
- package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +1 -1
- package/dist/src/agent/memory/compaction-promotion.js +7 -2
- package/dist/src/agent/memory/create-memory-manager.js +1 -0
- package/dist/src/agent/memory/manager.d.ts +6 -0
- package/dist/src/agent/memory/manager.js +74 -39
- package/dist/src/agent/memory/runtime.d.ts +3 -3
- package/dist/src/agent/memory/runtime.js +11 -4
- package/dist/src/agent/orchestration/agent-orchestrator.js +4 -1
- package/dist/src/agent/prompt/cache-boundary.d.ts +2 -0
- package/dist/src/agent/prompt/cache-boundary.js +10 -1
- package/dist/src/agent/service/build-direct-message-content.d.ts +1 -0
- package/dist/src/agent/service/build-direct-message-content.js +2 -1
- package/dist/src/agent/service/direct-turn-helpers.js +3 -2
- package/dist/src/agent/service/process-direct-streaming.d.ts +3 -1
- package/dist/src/agent/service/process-direct-streaming.js +3 -2
- package/dist/src/agent/service/webchat-tts.d.ts +0 -4
- package/dist/src/agent/service/webchat-tts.js +20 -19
- package/dist/src/agent/tools/factory.js +3 -3
- package/dist/src/agent/tools/knowledge-memory-tool.d.ts +2 -2
- package/dist/src/agent/tools/knowledge-memory-tool.js +7 -7
- package/dist/src/browser/native-messaging-host.js +2 -2
- package/dist/src/channels/attachments/voice-stt-webchat.d.ts +3 -0
- package/dist/src/channels/attachments/voice-stt-webchat.js +22 -9
- package/dist/src/cli/commands/agent.js +2 -0
- package/dist/src/cli/commands/config.js +8 -9
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +69 -44
- package/dist/src/cli/commands/extension-pack.js +0 -2
- package/dist/src/cli/commands/extension.js +4 -25
- package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
- package/dist/src/cli/commands/onboard/gateway.js +2 -1
- package/dist/src/cli/utils/init-workspace-core.js +5 -2
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/loader.d.ts +1 -0
- package/dist/src/config/loader.js +14 -1
- package/dist/src/config/schema.d.ts +22 -3
- package/dist/src/config/schema.js +13 -3
- package/dist/src/connectors/account-access.d.ts +4 -0
- package/dist/src/connectors/account-access.js +23 -0
- package/dist/src/connectors/approval-resume.d.ts +4 -0
- package/dist/src/connectors/approval-resume.js +23 -0
- package/dist/src/connectors/auth-provider-registry.d.ts +1 -0
- package/dist/src/connectors/auth-provider-registry.js +2 -1
- package/dist/src/connectors/authorization-attempts.d.ts +21 -0
- package/dist/src/connectors/authorization-attempts.js +33 -0
- package/dist/src/connectors/builtin-catalog.js +1 -3
- package/dist/src/connectors/catalog.js +2 -1
- package/dist/src/connectors/china-catalog.d.ts +2 -0
- package/dist/src/connectors/china-catalog.js +430 -0
- package/dist/src/connectors/composio-backends.d.ts +26 -0
- package/dist/src/connectors/composio-backends.js +65 -0
- package/dist/src/connectors/composio-catalog.js +2 -1
- package/dist/src/connectors/composio-managed-client.js +3 -1
- package/dist/src/connectors/composio-managed-events.js +5 -2
- package/dist/src/connectors/composio-session-types.d.ts +2 -0
- package/dist/src/connectors/composio-sessions.d.ts +11 -2
- package/dist/src/connectors/composio-sessions.js +137 -35
- package/dist/src/connectors/composio-triggers.js +4 -2
- package/dist/src/connectors/composio.d.ts +11 -8
- package/dist/src/connectors/composio.js +68 -84
- package/dist/src/connectors/connected-source-ingestion.js +4 -3
- package/dist/src/connectors/connection-recovery-service.js +25 -13
- package/dist/src/connectors/connector-identity.d.ts +2 -0
- package/dist/src/connectors/connector-identity.js +18 -5
- package/dist/src/connectors/content-enrichment.js +1 -1
- package/dist/src/connectors/instances.js +1 -7
- package/dist/src/connectors/learning-coordinator.js +4 -3
- package/dist/src/connectors/materialize.js +14 -1
- package/dist/src/connectors/policy.d.ts +1 -1
- package/dist/src/connectors/policy.js +1 -1
- package/dist/src/connectors/principal.js +24 -3
- package/dist/src/connectors/providers.d.ts +1 -0
- package/dist/src/connectors/providers.js +14 -2
- package/dist/src/connectors/runtime-adapter-registry.js +4 -9
- package/dist/src/connectors/secret-store.d.ts +4 -1
- package/dist/src/connectors/secret-store.js +7 -3
- package/dist/src/connectors/source-change-publisher.js +4 -2
- package/dist/src/connectors/types.d.ts +16 -11
- package/dist/src/connectors/workflow-preflight.d.ts +2 -1
- package/dist/src/connectors/workflow-preflight.js +20 -3
- package/dist/src/execution-environments/local-worktree-manager.js +17 -15
- package/dist/src/execution-environments/store.js +4 -2
- package/dist/src/execution-environments/types.d.ts +3 -0
- package/dist/src/execution-environments/types.js +2 -1
- package/dist/src/execution-environments/worktree-safety.d.ts +8 -0
- package/dist/src/execution-environments/worktree-safety.js +43 -0
- package/dist/src/extensions/activation-planner.d.ts +1 -1
- package/dist/src/extensions/activation-planner.js +1 -1
- package/dist/src/extensions/api-version.d.ts +4 -0
- package/dist/src/extensions/api-version.js +15 -0
- package/dist/src/extensions/api.d.ts +3 -9
- package/dist/src/extensions/api.js +26 -32
- package/dist/src/extensions/config-validation.d.ts +8 -0
- package/dist/src/extensions/config-validation.js +25 -0
- package/dist/src/extensions/extension-registry-impl.d.ts +20 -9
- package/dist/src/extensions/extension-registry-impl.js +79 -11
- package/dist/src/extensions/hooks.d.ts +1 -1
- package/dist/src/extensions/index.d.ts +2 -1
- package/dist/src/extensions/install-transaction.d.ts +2 -0
- package/dist/src/extensions/install-transaction.js +32 -21
- package/dist/src/extensions/install.js +18 -1
- package/dist/src/extensions/loader.d.ts +5 -5
- package/dist/src/extensions/loader.js +109 -47
- package/dist/src/extensions/lockfile.d.ts +3 -5
- package/dist/src/extensions/lockfile.js +41 -14
- package/dist/src/extensions/normalize-manifest.js +6 -60
- package/dist/src/extensions/sdk/index.d.ts +3 -2
- package/dist/src/extensions/sdk/index.js +2 -2
- package/dist/src/extensions/sdk/testing.js +0 -4
- package/dist/src/extensions/security.js +5 -7
- package/dist/src/extensions/types/core.d.ts +0 -5
- package/dist/src/extensions/types/index.d.ts +1 -1
- package/dist/src/extensions/types/manifest.d.ts +1 -25
- package/dist/src/extensions/types/providers.d.ts +1 -1
- package/dist/src/extensions/types/registration.d.ts +0 -12
- package/dist/src/extensions/update.js +71 -30
- package/dist/src/gateway/heartbeat/service.js +2 -2
- package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -1
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +47 -10
- package/dist/src/gateway/hono/routes/connectors.js +208 -17
- package/dist/src/gateway/hono/routes/context-sources.js +1 -1
- package/dist/src/gateway/hono/routes/devices.js +10 -7
- package/dist/src/gateway/hono/routes/endpoint-compatibility.js +6 -0
- package/dist/src/gateway/hono/routes/extension-gateway.js +0 -33
- package/dist/src/gateway/hono/routes/home.js +4 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +0 -1
- package/dist/src/gateway/hono/routes/mcp.js +1 -1
- package/dist/src/gateway/hono/routes/realtime.js +30 -8
- package/dist/src/gateway/hono/routes/user-model.js +25 -6
- package/dist/src/gateway/index.js +4 -1
- package/dist/src/gateway/lock.d.ts +2 -0
- package/dist/src/gateway/lock.js +31 -14
- package/dist/src/gateway/run-loop.js +2 -1
- package/dist/src/gateway/security/gateway-scopes.d.ts +2 -5
- package/dist/src/gateway/security/gateway-scopes.js +3 -45
- package/dist/src/gateway/security/index.js +2 -1
- package/dist/src/gateway/service.js +11 -7
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/imports/importService.d.ts +1 -1
- package/dist/src/imports/inventory.js +16 -2
- package/dist/src/imports/productImport.js +5 -5
- package/dist/src/imports/types.d.ts +3 -3
- package/dist/src/infra/exec.d.ts +2 -2
- package/dist/src/infra/exec.js +32 -27
- package/dist/src/infra/run-command.js +15 -50
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/knowledge/connected-knowledge-pipeline.js +13 -3
- package/dist/src/knowledge-memory/domain.d.ts +17 -1
- package/dist/src/knowledge-memory/index.js +2 -2
- package/dist/src/knowledge-memory/repository.d.ts +26 -4
- package/dist/src/knowledge-memory/repository.js +171 -36
- package/dist/src/mcp/channel-bridge.js +7 -3
- package/dist/src/media-understanding/registry.js +6 -1
- package/dist/src/migrations/knowledge-memory-read-policy-config.d.ts +2 -0
- package/dist/src/migrations/knowledge-memory-read-policy-config.js +48 -0
- package/dist/src/migrations/runner.js +2 -1
- package/dist/src/proactive/follow-ups.js +2 -1
- package/dist/src/process/bounded-output.d.ts +10 -0
- package/dist/src/process/bounded-output.js +41 -0
- package/dist/src/process/kill-tree.d.ts +6 -17
- package/dist/src/process/kill-tree.js +43 -75
- package/dist/src/process/process-spec.d.ts +39 -0
- package/dist/src/process/process-spec.js +13 -0
- package/dist/src/process/run-process.d.ts +4 -0
- package/dist/src/process/run-process.js +97 -0
- package/dist/src/providers/plugin-registry.d.ts +1 -1
- package/dist/src/providers/plugin-registry.js +6 -0
- package/dist/src/realtime/runtime.js +3 -1
- package/dist/src/session/store.js +1 -1
- package/dist/src/storage/sqlite/connection-wait-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/connection-wait-repository.js +63 -2
- package/dist/src/storage/sqlite/connector-account-repository.d.ts +6 -0
- package/dist/src/storage/sqlite/connector-account-repository.js +35 -7
- package/dist/src/storage/sqlite/connector-repository.js +15 -10
- package/dist/src/storage/sqlite/connector-sync-policy-repository.js +1 -1
- package/dist/src/storage/sqlite/device-pairing-approval.js +1 -1
- package/dist/src/storage/sqlite/index.d.ts +1 -1
- package/dist/src/storage/sqlite/index.js +6 -4
- package/dist/src/storage/sqlite/migrations/180_execution_environment_ownership.sql +7 -0
- package/dist/src/storage/sqlite/migrations/181_knowledge_item_status_events.sql +12 -0
- package/dist/src/storage/sqlite/migrations/182_connector_account_policies.sql +92 -0
- package/dist/src/storage/sqlite/migrations/183_connector_backend_consistency.sql +20 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +7 -7
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/schema.sql +13 -0
- package/dist/src/storage/sqlite/transcript-repository.d.ts +4 -0
- package/dist/src/storage/sqlite/transcript-repository.js +36 -1
- package/dist/src/tasks/home-query-service.js +3 -3
- package/dist/src/tui/backends/embedded-backend.d.ts +24 -8
- package/dist/src/tui/backends/embedded-backend.js +114 -10
- package/dist/src/tui/backends/gateway-realtime-backend.d.ts +18 -0
- package/dist/src/tui/backends/gateway-realtime-backend.js +31 -4
- package/dist/src/tui/components/assistant-message.d.ts +4 -1
- package/dist/src/tui/components/assistant-message.js +10 -2
- package/dist/src/tui/components/cell-render-mode.d.ts +4 -0
- package/dist/src/tui/components/cell-render-mode.js +1 -0
- package/dist/src/tui/components/chat-log.d.ts +17 -4
- package/dist/src/tui/components/chat-log.js +68 -50
- package/dist/src/tui/components/custom-editor.d.ts +2 -2
- package/dist/src/tui/components/custom-editor.js +5 -1
- package/dist/src/tui/components/pending-input-preview.d.ts +9 -0
- package/dist/src/tui/components/pending-input-preview.js +33 -0
- package/dist/src/tui/components/semantic-cell.d.ts +17 -0
- package/dist/src/tui/components/semantic-cell.js +29 -0
- package/dist/src/tui/components/tool-execution.d.ts +5 -1
- package/dist/src/tui/components/tool-execution.js +33 -10
- package/dist/src/tui/components/transcript-overlay.d.ts +29 -0
- package/dist/src/tui/components/transcript-overlay.js +114 -0
- package/dist/src/tui/components/tui-bottom-bar.js +3 -1
- package/dist/src/tui/components/user-message.d.ts +5 -1
- package/dist/src/tui/components/user-message.js +12 -1
- package/dist/src/tui/extension-host/load-extensions.d.ts +1 -1
- package/dist/src/tui/extension-host/runtime-context.js +2 -1
- package/dist/src/tui/extension-host/runtime.d.ts +1 -1
- package/dist/src/tui/format-tui-hotkeys.js +8 -1
- package/dist/src/tui/tui-agent-events.js +31 -0
- package/dist/src/tui/tui-backend.d.ts +23 -11
- package/dist/src/tui/tui-backend.js +1 -9
- package/dist/src/tui/tui-chat-input-state.d.ts +25 -0
- package/dist/src/tui/tui-chat-input-state.js +36 -0
- package/dist/src/tui/tui-command-formatters.js +2 -1
- package/dist/src/tui/tui-commands.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui-types.d.ts +2 -1
- package/dist/src/tui/tui-types.js +2 -1
- package/dist/src/tui/tui.js +122 -30
- package/dist/src/tui/xopc-tui-keybindings.d.ts +23 -3
- package/dist/src/tui/xopc-tui-keybindings.js +22 -2
- package/dist/src/user-context/access-policy.d.ts +2 -2
- package/dist/src/user-context/access-policy.js +10 -2
- package/dist/src/user-context/config.d.ts +23 -6
- package/dist/src/user-context/config.js +54 -7
- package/dist/src/voice/platform-streams.js +11 -1
- package/dist/src/voice/realtime/omniEngine.js +13 -1
- package/dist/src/voice/realtime/runtime.js +2 -1
- package/dist/src/voice/tts/audio.js +1 -1
- package/dist/src/voice/tts/speech-registry.js +6 -1
- package/dist/src/workflows/domain/definition.d.ts +1 -0
- package/dist/src/workflows/domain/validation.js +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +14 -0
- package/dist/src/workflows/service/workflow-session-bridge.d.ts +1 -0
- package/dist/src/workflows/service/workflow-session-bridge.js +1 -0
- package/package.json +5 -3
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-4oGrNj3m.js +0 -1
- package/dist/gateway/static/root/assets/api-fPapljyb.js +0 -1
- package/dist/gateway/static/root/assets/app-management-settings-panel-CdXnNtTg.js +0 -1
- package/dist/gateway/static/root/assets/appearance-settings-izNAyDhW.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-BQb3RCga.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-5vTl4x0h.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-CH9prS-f.js +0 -3
- package/dist/gateway/static/root/assets/button-CGlRPNzi.js +0 -1
- package/dist/gateway/static/root/assets/capabilities-settings-panel-DMURlZbj.js +0 -8
- package/dist/gateway/static/root/assets/channels-settings-CFBS3Yqy.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DI1c3BMz.js +0 -2
- package/dist/gateway/static/root/assets/cron-expression-BJMBFKCh.js +0 -2
- package/dist/gateway/static/root/assets/date-picker-BFRIn5y9.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-DFsyEJUr.js +0 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-C3TQVPRy.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-DUqVsB3X.js +0 -1
- package/dist/gateway/static/root/assets/home-page-CLkumXdN.js +0 -1
- package/dist/gateway/static/root/assets/imports-page-DXNfRmk9.js +0 -1
- package/dist/gateway/static/root/assets/index-BLRIcVQa.css +0 -1
- package/dist/gateway/static/root/assets/index-gheM453N.js +0 -79
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-5Hcec8Xf.js +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-BDg1-fcw.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-BWZc5jwO.js +0 -2
- package/dist/gateway/static/root/assets/management-settings-COa3PhMs.js +0 -1
- package/dist/gateway/static/root/assets/messages-C9h8SImu.js +0 -3
- package/dist/gateway/static/root/assets/note-detail-panel-D_YGzNcR.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-D1f2oI2-.js +0 -8
- package/dist/gateway/static/root/assets/project-detail-page-CRlD_Rwv.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-mmX0SavY.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-Cqr3K6T5.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-CPkvbdJP.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-Cu0DAbeH.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-D8fQF1jZ.js +0 -1
- package/dist/gateway/static/root/assets/share-preview-page-BgHqwTuT.js +0 -2
- package/dist/gateway/static/root/assets/shares-settings-Id4vRHzI.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-BB2Fj_di.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BAwF4LpS.js +0 -2
- package/dist/gateway/static/root/assets/task-detail-page-BVjw812D.js +0 -1
- package/dist/gateway/static/root/assets/theme-store-KfFEGMlp.js +0 -1
- package/dist/gateway/static/root/assets/tunnel-api-Do98Xk05.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-Nv68a4ak.js +0 -2
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-1lZ_btki.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-DFOhccm3.js +0 -6
- package/dist/src/extensions/when-context.d.ts +0 -6
- package/dist/src/extensions/when-context.js +0 -26
- package/dist/src/extensions/when-expression.d.ts +0 -11
- package/dist/src/extensions/when-expression.js +0 -213
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BUILTIN_CONNECTORS } from "./builtin-catalog.js";
|
|
2
|
+
import { CHINA_CONNECTORS } from "./china-catalog.js";
|
|
2
3
|
import { COMPOSIO_CONNECTORS } from "./composio.js";
|
|
3
4
|
//#region src/connectors/providers.ts
|
|
4
5
|
const builtinConnectorProvider = {
|
|
@@ -15,7 +16,18 @@ const composioConnectorProvider = {
|
|
|
15
16
|
return COMPOSIO_CONNECTORS;
|
|
16
17
|
}
|
|
17
18
|
};
|
|
18
|
-
const
|
|
19
|
+
const chinaConnectorProvider = {
|
|
20
|
+
id: "china",
|
|
21
|
+
displayName: "China connectors",
|
|
22
|
+
listConnectors() {
|
|
23
|
+
return CHINA_CONNECTORS;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const CONNECTOR_PROVIDERS = [
|
|
27
|
+
builtinConnectorProvider,
|
|
28
|
+
chinaConnectorProvider,
|
|
29
|
+
composioConnectorProvider
|
|
30
|
+
];
|
|
19
31
|
function listConnectorProviders() {
|
|
20
32
|
return [...CONNECTOR_PROVIDERS];
|
|
21
33
|
}
|
|
@@ -23,4 +35,4 @@ function listConnectorProviderDefinitions() {
|
|
|
23
35
|
return CONNECTOR_PROVIDERS.flatMap((provider) => provider.listConnectors());
|
|
24
36
|
}
|
|
25
37
|
//#endregion
|
|
26
|
-
export { builtinConnectorProvider, composioConnectorProvider, listConnectorProviderDefinitions, listConnectorProviders };
|
|
38
|
+
export { builtinConnectorProvider, chinaConnectorProvider, composioConnectorProvider, listConnectorProviderDefinitions, listConnectorProviders };
|
|
@@ -2,7 +2,6 @@ import { isXopcDatabaseOpen } from "../storage/sqlite/connection.js";
|
|
|
2
2
|
import { deleteConnectorInstallation, getConnectorInstallation, upsertConnectorInstallation } from "../storage/sqlite/connector-repository.js";
|
|
3
3
|
import "../storage/sqlite/index.js";
|
|
4
4
|
import { assertComposioAccessConfigured } from "./composio-sessions.js";
|
|
5
|
-
import { saveComposioApiKey } from "./composio.js";
|
|
6
5
|
import { saveConnectorSecrets } from "./secret-store.js";
|
|
7
6
|
import { isManagedConnectorServer, materializeConnectorMcpServer } from "./materialize.js";
|
|
8
7
|
import { appendConnectorAuditRecord } from "./usage.js";
|
|
@@ -106,7 +105,7 @@ registerConnectorRuntimeAdapter({
|
|
|
106
105
|
type: "composio",
|
|
107
106
|
async install({ config, definition, input, resolver }) {
|
|
108
107
|
if (definition.runtime.type !== "composio") throw new Error(`Invalid Composio connector definition: ${definition.id}`);
|
|
109
|
-
if (definition.runtime.role
|
|
108
|
+
if (definition.runtime.role !== "toolkit") throw new Error("Configure Composio in connection service settings.");
|
|
110
109
|
if (definition.runtime.role === "toolkit") await assertComposioAccessConfigured(resolver);
|
|
111
110
|
const instance = installRecord(config, definition, definition.runtime.role === "toolkit" ? { scope: "read" } : {}, definition.runtime.role === "toolkit" ? { config: input.config ?? {} } : {});
|
|
112
111
|
if (definition.runtime.role === "toolkit" && isXopcDatabaseOpen()) {
|
|
@@ -120,7 +119,7 @@ registerConnectorRuntimeAdapter({
|
|
|
120
119
|
allowedAgentIds: existing?.allowedAgentIds ?? [],
|
|
121
120
|
maxScope: "read",
|
|
122
121
|
confirmationPolicy: existing?.confirmationPolicy ?? "writes",
|
|
123
|
-
|
|
122
|
+
selectedAccountIds: existing?.selectedAccountIds ?? null,
|
|
124
123
|
createdAt: existing?.createdAt
|
|
125
124
|
});
|
|
126
125
|
}
|
|
@@ -145,12 +144,8 @@ registerConnectorRuntimeAdapter({
|
|
|
145
144
|
return installedInstance(config, instanceId, definition.id);
|
|
146
145
|
}
|
|
147
146
|
});
|
|
148
|
-
|
|
149
|
-
"
|
|
150
|
-
"nativeTool",
|
|
151
|
-
"memorySource"
|
|
152
|
-
]) registerConnectorRuntimeAdapter({
|
|
153
|
-
type,
|
|
147
|
+
registerConnectorRuntimeAdapter({
|
|
148
|
+
type: "memorySource",
|
|
154
149
|
async install({ config, definition, input }) {
|
|
155
150
|
return installRecord(config, definition, {}, { config: input.config ?? {} });
|
|
156
151
|
},
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { CredentialResolver } from '../auth/credentials.js';
|
|
2
2
|
import type { ConnectorDefinition, ConnectorInstallInput, ConnectorSecretReference } from './types.js';
|
|
3
3
|
export declare function connectorSecretProviderId(connectorId: string, fieldKey: string): string;
|
|
4
|
-
export declare function createConnectorSecretReference(connectorId: string, fieldKey: string
|
|
4
|
+
export declare function createConnectorSecretReference(connectorId: string, fieldKey: string, affixes?: {
|
|
5
|
+
prefix?: string;
|
|
6
|
+
suffix?: string;
|
|
7
|
+
}): ConnectorSecretReference;
|
|
5
8
|
export declare function isConnectorSecretReference(value: unknown): value is ConnectorSecretReference;
|
|
6
9
|
export declare function saveConnectorSecrets(definition: ConnectorDefinition, input: ConnectorInstallInput, resolver?: CredentialResolver): Promise<void>;
|
|
7
10
|
export declare function resolveConnectorSecretReferences(value: unknown, resolver?: CredentialResolver): Promise<unknown>;
|
|
@@ -8,10 +8,12 @@ function normalizeSecretSegment(value) {
|
|
|
8
8
|
function connectorSecretProviderId(connectorId, fieldKey) {
|
|
9
9
|
return `connector-${normalizeSecretSegment(connectorId)}-${normalizeSecretSegment(fieldKey)}`;
|
|
10
10
|
}
|
|
11
|
-
function createConnectorSecretReference(connectorId, fieldKey) {
|
|
11
|
+
function createConnectorSecretReference(connectorId, fieldKey, affixes = {}) {
|
|
12
12
|
return { xopcSecretRef: {
|
|
13
13
|
provider: connectorSecretProviderId(connectorId, fieldKey),
|
|
14
|
-
fieldKey
|
|
14
|
+
fieldKey,
|
|
15
|
+
...affixes.prefix ? { prefix: affixes.prefix } : {},
|
|
16
|
+
...affixes.suffix ? { suffix: affixes.suffix } : {}
|
|
15
17
|
} };
|
|
16
18
|
}
|
|
17
19
|
function isConnectorSecretReference(value) {
|
|
@@ -28,7 +30,9 @@ async function saveConnectorSecrets(definition, input, resolver = new Credential
|
|
|
28
30
|
}
|
|
29
31
|
}
|
|
30
32
|
async function resolveSecretReference(reference, resolver) {
|
|
31
|
-
|
|
33
|
+
const value = await resolver.resolveApiKey(reference.xopcSecretRef.provider);
|
|
34
|
+
if (!value) return void 0;
|
|
35
|
+
return `${reference.xopcSecretRef.prefix ?? ""}${value}${reference.xopcSecretRef.suffix ?? ""}`;
|
|
32
36
|
}
|
|
33
37
|
async function resolveConnectorSecretReferences(value, resolver = new CredentialResolver()) {
|
|
34
38
|
if (isConnectorSecretReference(value)) return resolveSecretReference(value, resolver);
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
+
import { getConnectorAccount, init_connector_account_repository } from "../storage/sqlite/connector-account-repository.js";
|
|
4
|
+
import { init_connector_repository, listConnectorConnections } from "../storage/sqlite/connector-repository.js";
|
|
3
5
|
import { getKnowledgeConsumerWatermark, getKnowledgeSourceItem, listKnowledgeSourceChanges, setKnowledgeConsumerWatermark } from "../storage/sqlite/knowledge-repository.js";
|
|
4
|
-
import { listConnectorConnections } from "../storage/sqlite/connector-repository.js";
|
|
5
|
-
import { getConnectorAccount } from "../storage/sqlite/connector-account-repository.js";
|
|
6
6
|
import { getConnectorSyncPolicyForConnection } from "../storage/sqlite/connector-sync-policy-repository.js";
|
|
7
7
|
//#region src/connectors/source-change-publisher.ts
|
|
8
|
+
init_connector_account_repository();
|
|
9
|
+
init_connector_repository();
|
|
8
10
|
init_logger();
|
|
9
11
|
const log = createLogger("Connector:SourceChanges");
|
|
10
12
|
const CONSUMER_ID = "proactive-connected-source-v1";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type ConnectorKind = 'mcp' | 'cli' | 'http' | '
|
|
1
|
+
export type ConnectorKind = 'mcp' | 'cli' | 'http' | 'browser' | 'extension' | 'builtin' | 'composio' | 'memorySource';
|
|
2
2
|
export type ConnectorCategory = 'code' | 'docs' | 'browser' | 'data' | 'automation' | 'custom';
|
|
3
3
|
export type ConnectorCapability = 'tools' | 'resources' | 'prompts' | 'context' | 'channel' | 'events' | 'ui' | 'memory_source' | 'workflows' | 'auth.apiKey' | 'auth.oauth' | 'runtime.mcp.stdio' | 'runtime.mcp.sse' | 'runtime.mcp.streamableHttp';
|
|
4
4
|
export type ConnectorAuthMode = 'none' | 'apiKey' | 'oauth';
|
|
@@ -17,7 +17,6 @@ export type ConnectorBenefit = 'understand' | 'act' | 'reach';
|
|
|
17
17
|
export type ConnectorBranding = {
|
|
18
18
|
logoUrl?: string;
|
|
19
19
|
source?: 'builtin' | 'composio-catalog' | 'registry' | 'extension' | 'custom';
|
|
20
|
-
backgroundColor?: string;
|
|
21
20
|
fetchedAt?: string;
|
|
22
21
|
};
|
|
23
22
|
export type ConnectorConfirmationPolicy = 'always' | 'writes' | 'admin' | 'never';
|
|
@@ -40,6 +39,8 @@ export type ConnectorSecretReference = {
|
|
|
40
39
|
xopcSecretRef: {
|
|
41
40
|
provider: string;
|
|
42
41
|
fieldKey: string;
|
|
42
|
+
prefix?: string;
|
|
43
|
+
suffix?: string;
|
|
43
44
|
};
|
|
44
45
|
};
|
|
45
46
|
export type ConnectorSecretField = {
|
|
@@ -48,6 +49,11 @@ export type ConnectorSecretField = {
|
|
|
48
49
|
description?: string;
|
|
49
50
|
required: boolean;
|
|
50
51
|
};
|
|
52
|
+
export type ConnectorSetupLink = {
|
|
53
|
+
label: string;
|
|
54
|
+
href: string;
|
|
55
|
+
external?: boolean;
|
|
56
|
+
};
|
|
51
57
|
export type ConnectorConfigField = {
|
|
52
58
|
key: string;
|
|
53
59
|
label: string;
|
|
@@ -66,17 +72,10 @@ export type ConnectorRuntimeDefinition = {
|
|
|
66
72
|
name: string;
|
|
67
73
|
version: string;
|
|
68
74
|
};
|
|
69
|
-
} | {
|
|
70
|
-
type: 'channel';
|
|
71
|
-
channelId: string;
|
|
72
|
-
pluginId: string;
|
|
73
75
|
} | {
|
|
74
76
|
type: 'composio';
|
|
75
77
|
toolkit: string;
|
|
76
78
|
role: 'credential' | 'toolkit';
|
|
77
|
-
} | {
|
|
78
|
-
type: 'nativeTool';
|
|
79
|
-
toolsetId: string;
|
|
80
79
|
} | {
|
|
81
80
|
type: 'memorySource';
|
|
82
81
|
sourceKind: string;
|
|
@@ -103,6 +102,7 @@ export type ConnectorDefinition = {
|
|
|
103
102
|
setup: {
|
|
104
103
|
secrets?: ConnectorSecretField[];
|
|
105
104
|
config?: ConnectorConfigField[];
|
|
105
|
+
links?: ConnectorSetupLink[];
|
|
106
106
|
};
|
|
107
107
|
runtime: ConnectorRuntimeDefinition;
|
|
108
108
|
permissions?: ConnectorPermissions;
|
|
@@ -120,7 +120,7 @@ export type ConnectorInstallationPolicy = {
|
|
|
120
120
|
allowedAgentIds: string[];
|
|
121
121
|
maxScope: ConnectorScope;
|
|
122
122
|
confirmationPolicy: ConnectorConfirmationPolicy;
|
|
123
|
-
|
|
123
|
+
selectedAccountIds: string[] | null;
|
|
124
124
|
createdAt: string;
|
|
125
125
|
updatedAt: string;
|
|
126
126
|
};
|
|
@@ -149,8 +149,12 @@ export type ConnectorAccount = {
|
|
|
149
149
|
connectorId: string;
|
|
150
150
|
principalId: string;
|
|
151
151
|
identityKey?: string;
|
|
152
|
+
backendId?: string;
|
|
152
153
|
identity: Record<string, unknown>;
|
|
153
154
|
currentConnectionId?: string;
|
|
155
|
+
label?: string;
|
|
156
|
+
enabled: boolean;
|
|
157
|
+
allowedAgentIds: string[] | null;
|
|
154
158
|
createdAt: string;
|
|
155
159
|
updatedAt: string;
|
|
156
160
|
};
|
|
@@ -184,6 +188,7 @@ export type ConnectorExecutionAuditRecord = {
|
|
|
184
188
|
export type ConnectorApprovalStatus = 'pending' | 'approved' | 'denied' | 'expired' | 'consumed';
|
|
185
189
|
export type ConnectorApprovalRecord = {
|
|
186
190
|
id: string;
|
|
191
|
+
waitId?: string;
|
|
187
192
|
principalId: string;
|
|
188
193
|
connectorId: string;
|
|
189
194
|
connectionId?: string;
|
|
@@ -240,7 +245,7 @@ export type ConnectorInstance = {
|
|
|
240
245
|
toolkit: string;
|
|
241
246
|
role: 'credential' | 'toolkit';
|
|
242
247
|
} | {
|
|
243
|
-
type: '
|
|
248
|
+
type: 'memorySource';
|
|
244
249
|
id: string;
|
|
245
250
|
};
|
|
246
251
|
usage: ConnectorUsageRecord;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Config } from '../config/schema.js';
|
|
2
2
|
import type { WorkflowDefinition } from '../workflows/domain/definition.js';
|
|
3
|
-
export type ConnectorPreflightIssueCode = 'not_installed' | 'disabled' | 'agent_not_allowed' | 'scope_too_narrow' | 'connection_missing' | 'reauthorization_required';
|
|
3
|
+
export type ConnectorPreflightIssueCode = 'not_installed' | 'disabled' | 'agent_not_allowed' | 'scope_too_narrow' | 'connection_missing' | 'account_selection_required' | 'reauthorization_required';
|
|
4
4
|
export type ConnectorPreflightIssue = {
|
|
5
5
|
connectorId: string;
|
|
6
6
|
code: ConnectorPreflightIssueCode;
|
|
@@ -9,6 +9,7 @@ export type ConnectorPreflightIssue = {
|
|
|
9
9
|
};
|
|
10
10
|
export type ConnectorPreflightResult = {
|
|
11
11
|
ok: boolean;
|
|
12
|
+
accounts: Record<string, string[]>;
|
|
12
13
|
issues: ConnectorPreflightIssue[];
|
|
13
14
|
optionalIssues: ConnectorPreflightIssue[];
|
|
14
15
|
};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { getConnectorInstallation, listConnectorConnections } from "../storage/sqlite/connector-repository.js";
|
|
1
|
+
import { getConnectorInstallation, init_connector_repository, listConnectorConnections } from "../storage/sqlite/connector-repository.js";
|
|
2
|
+
import { canAccessConnectorAccount, currentAccountConnections } from "./account-access.js";
|
|
2
3
|
import { getComposioToolkitScope } from "./composio.js";
|
|
3
4
|
import { getConnectorDefinition } from "./catalog.js";
|
|
4
5
|
import { listConnectorInstances } from "./instances.js";
|
|
5
6
|
//#region src/connectors/workflow-preflight.ts
|
|
7
|
+
init_connector_repository();
|
|
6
8
|
const SCOPE_ORDER = {
|
|
7
9
|
read: 1,
|
|
8
10
|
write: 2,
|
|
@@ -20,6 +22,7 @@ function preflightWorkflowConnectors(input) {
|
|
|
20
22
|
const principalId = input.principalId ?? "local-owner";
|
|
21
23
|
const instances = listConnectorInstances(input.config);
|
|
22
24
|
const issues = [];
|
|
25
|
+
const accounts = {};
|
|
23
26
|
const optionalIssues = [];
|
|
24
27
|
const add = (requirement, value) => {
|
|
25
28
|
(requirement.optional ? optionalIssues : issues).push(value);
|
|
@@ -53,13 +56,27 @@ function preflightWorkflowConnectors(input) {
|
|
|
53
56
|
principalId,
|
|
54
57
|
connectorId: requirement.connectorId
|
|
55
58
|
});
|
|
56
|
-
const selected = installation
|
|
57
|
-
|
|
59
|
+
const selected = installation && installation.selectedAccountIds !== null ? connections.filter((connection) => connection.accountId && installation.selectedAccountIds.includes(connection.accountId)) : connections;
|
|
60
|
+
const active = currentAccountConnections(selected.filter((connection) => installation && canAccessConnectorAccount(connection, installation, input.agentId)));
|
|
61
|
+
if (requirement.accountIds) {
|
|
62
|
+
if (!requirement.accountIds.length || requirement.accountIds.some((id) => !active.some((connection) => connection.accountId === id))) add(requirement, issue(requirement, "connection_missing", `${requirement.connectorId} has an unavailable selected account. Reconnect or update its permissions; no other account will be substituted.`));
|
|
63
|
+
else accounts[requirement.connectorId] = [...requirement.accountIds];
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (active.length > 1) {
|
|
67
|
+
add(requirement, issue(requirement, "account_selection_required", `${requirement.connectorId} has multiple available accounts. Select the intended account before unattended execution.`));
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (active.length === 1) {
|
|
71
|
+
accounts[requirement.connectorId] = [active[0].accountId];
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
58
74
|
const needsAuthorization = selected.some((connection) => connection.status === "expired" || connection.status === "failed");
|
|
59
75
|
add(requirement, issue(requirement, needsAuthorization ? "reauthorization_required" : "connection_missing", needsAuthorization ? `${requirement.connectorId} needs to be reconnected.` : `${requirement.connectorId} has no active account connection.`));
|
|
60
76
|
}
|
|
61
77
|
return {
|
|
62
78
|
ok: issues.length === 0,
|
|
79
|
+
accounts,
|
|
63
80
|
issues,
|
|
64
81
|
optionalIssues
|
|
65
82
|
};
|
|
@@ -3,8 +3,9 @@ import { init_logger } from "../utils/logger.js";
|
|
|
3
3
|
import { ExecutionEnvironmentConflictError } from "./types.js";
|
|
4
4
|
import { ExecutionEnvironmentStore } from "./store.js";
|
|
5
5
|
import { findGitWorktree, inspectGitRepository, resolveGitCommit, runGit } from "./git.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { resolveManagedWorktreePath } from "./paths.js";
|
|
7
|
+
import { assertManagedWorktreePath, assertNoNestedRegisteredWorktrees, readDirectoryIdentity, sameDirectoryIdentity } from "./worktree-safety.js";
|
|
8
|
+
import { dirname, resolve } from "node:path";
|
|
8
9
|
import { existsSync } from "node:fs";
|
|
9
10
|
import { randomUUID } from "node:crypto";
|
|
10
11
|
import { mkdir, rm, stat } from "node:fs/promises";
|
|
@@ -40,12 +41,6 @@ async function isDirectory(path) {
|
|
|
40
41
|
return false;
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
|
-
function assertManagedPath(rootPath, stateDir) {
|
|
44
|
-
const managedRoot = resolveExecutionWorktreesRoot(stateDir);
|
|
45
|
-
const candidate = resolve(rootPath);
|
|
46
|
-
const child = relative(managedRoot, candidate);
|
|
47
|
-
if (!child || child.startsWith("..") || resolve(managedRoot, child) !== candidate) throw new Error(`Refusing to manage worktree outside ${managedRoot}`);
|
|
48
|
-
}
|
|
49
44
|
var LocalWorktreeManager = class {
|
|
50
45
|
store;
|
|
51
46
|
stateDir;
|
|
@@ -89,7 +84,7 @@ var LocalWorktreeManager = class {
|
|
|
89
84
|
const baseSha = await resolveGitCommit(repository.repositoryRoot, baseRef);
|
|
90
85
|
const environmentId = input.environmentId?.trim() || randomUUID();
|
|
91
86
|
const rootPath = resolveManagedWorktreePath(input.projectId, environmentId, this.stateDir);
|
|
92
|
-
|
|
87
|
+
assertManagedWorktreePath(rootPath, this.stateDir, repository.repositoryRoot);
|
|
93
88
|
if (existsSync(rootPath)) throw new ExecutionEnvironmentConflictError(`Worktree path already exists: ${rootPath}`);
|
|
94
89
|
const environment = this.store.create({
|
|
95
90
|
id: environmentId,
|
|
@@ -107,12 +102,15 @@ var LocalWorktreeManager = class {
|
|
|
107
102
|
toStatus: "provisioning",
|
|
108
103
|
reason: "managed worktree provisioning started"
|
|
109
104
|
});
|
|
105
|
+
let createdDirectory;
|
|
110
106
|
try {
|
|
111
107
|
await withRepositoryLock(repository.gitCommonDir, async () => {
|
|
112
108
|
await mkdir(dirname(rootPath), {
|
|
113
109
|
recursive: true,
|
|
114
110
|
mode: 448
|
|
115
111
|
});
|
|
112
|
+
await mkdir(rootPath, { mode: 448 });
|
|
113
|
+
createdDirectory = await readDirectoryIdentity(rootPath);
|
|
116
114
|
await runGit(repository.repositoryRoot, [
|
|
117
115
|
"worktree",
|
|
118
116
|
"add",
|
|
@@ -137,7 +135,7 @@ var LocalWorktreeManager = class {
|
|
|
137
135
|
}, "Managed worktree ready");
|
|
138
136
|
return ready;
|
|
139
137
|
} catch (error) {
|
|
140
|
-
await this.cleanupFailedProvision(repository.repositoryRoot, repository.gitCommonDir, rootPath);
|
|
138
|
+
await this.cleanupFailedProvision(repository.repositoryRoot, repository.gitCommonDir, rootPath, createdDirectory);
|
|
141
139
|
const failed = this.store.transition({
|
|
142
140
|
environmentId: environment.id,
|
|
143
141
|
expectedVersion: provisioning.version,
|
|
@@ -235,7 +233,8 @@ var LocalWorktreeManager = class {
|
|
|
235
233
|
return deleted;
|
|
236
234
|
}
|
|
237
235
|
if (environment.kind !== "managed_worktree" || !environment.repositoryRoot || !environment.gitCommonDir) throw new Error(`Execution environment ${environmentId} is not a managed worktree`);
|
|
238
|
-
|
|
236
|
+
if (environment.ownership !== "xopc_created") throw new ExecutionEnvironmentConflictError(`Managed worktree ${environmentId} is not owned by xopc`);
|
|
237
|
+
assertManagedWorktreePath(environment.rootPath, this.stateDir, environment.repositoryRoot);
|
|
239
238
|
if (this.store.listBindings(environmentId).some((binding) => binding.conversationId !== options?.releaseConversationId)) throw new ExecutionEnvironmentConflictError(`Managed worktree ${environmentId} still has active bindings`);
|
|
240
239
|
const deleting = environment.status === "deleting" ? environment : this.store.transition({
|
|
241
240
|
environmentId,
|
|
@@ -245,6 +244,8 @@ var LocalWorktreeManager = class {
|
|
|
245
244
|
});
|
|
246
245
|
try {
|
|
247
246
|
await withRepositoryLock(environment.gitCommonDir, async () => {
|
|
247
|
+
await readDirectoryIdentity(environment.rootPath);
|
|
248
|
+
await assertNoNestedRegisteredWorktrees(environment.repositoryRoot, environment.rootPath);
|
|
248
249
|
const registered = await findGitWorktree(environment.repositoryRoot, environment.rootPath);
|
|
249
250
|
if (!registered && existsSync(environment.rootPath)) throw new ExecutionEnvironmentConflictError("Refusing to delete a directory no longer registered as this worktree");
|
|
250
251
|
if (registered) {
|
|
@@ -301,7 +302,7 @@ var LocalWorktreeManager = class {
|
|
|
301
302
|
throw error;
|
|
302
303
|
}
|
|
303
304
|
}
|
|
304
|
-
async cleanupFailedProvision(repositoryRoot, gitCommonDir, rootPath) {
|
|
305
|
+
async cleanupFailedProvision(repositoryRoot, gitCommonDir, rootPath, createdDirectory) {
|
|
305
306
|
await withRepositoryLock(gitCommonDir, async () => {
|
|
306
307
|
if (await findGitWorktree(repositoryRoot, rootPath).catch(() => void 0)) {
|
|
307
308
|
await runGit(repositoryRoot, [
|
|
@@ -309,14 +310,15 @@ var LocalWorktreeManager = class {
|
|
|
309
310
|
"unlock",
|
|
310
311
|
rootPath
|
|
311
312
|
]).catch(() => "");
|
|
312
|
-
await runGit(repositoryRoot, [
|
|
313
|
+
if (!await runGit(repositoryRoot, [
|
|
313
314
|
"worktree",
|
|
314
315
|
"remove",
|
|
315
316
|
"--force",
|
|
316
317
|
rootPath
|
|
317
|
-
]).catch(() =>
|
|
318
|
+
]).then(() => true, () => false) || await findGitWorktree(repositoryRoot, rootPath).catch(() => void 0)) return;
|
|
318
319
|
}
|
|
319
|
-
|
|
320
|
+
const currentDirectory = await readDirectoryIdentity(rootPath);
|
|
321
|
+
if (createdDirectory && sameDirectoryIdentity(createdDirectory, currentDirectory)) await rm(rootPath, {
|
|
320
322
|
recursive: true,
|
|
321
323
|
force: true
|
|
322
324
|
});
|
|
@@ -17,6 +17,7 @@ function environmentFromRow(row) {
|
|
|
17
17
|
id: row.environment_id,
|
|
18
18
|
...row.project_id ? { projectId: row.project_id } : {},
|
|
19
19
|
kind: row.kind,
|
|
20
|
+
ownership: row.ownership,
|
|
20
21
|
status: row.status,
|
|
21
22
|
rootPath: row.root_path,
|
|
22
23
|
...row.repository_root ? { repositoryRoot: row.repository_root } : {},
|
|
@@ -63,13 +64,14 @@ var ExecutionEnvironmentStore = class {
|
|
|
63
64
|
const repositoryRoot = optionalText(input.repositoryRoot);
|
|
64
65
|
const gitCommonDir = optionalText(input.gitCommonDir);
|
|
65
66
|
if (input.kind === "managed_worktree" && (!repositoryRoot || !gitCommonDir)) throw new Error("managed_worktree requires repositoryRoot and gitCommonDir");
|
|
67
|
+
const ownership = input.kind === "managed_worktree" ? "xopc_created" : "registered";
|
|
66
68
|
const now = Date.now();
|
|
67
69
|
runSqliteWriteTransaction((db) => {
|
|
68
70
|
db.prepare(`INSERT INTO execution_environments (
|
|
69
|
-
environment_id, project_id, kind, status, root_path,
|
|
71
|
+
environment_id, project_id, kind, ownership, status, root_path,
|
|
70
72
|
repository_root, git_common_dir, base_ref, base_sha, branch_ref,
|
|
71
73
|
version, created_at, updated_at
|
|
72
|
-
) VALUES (?, ?, ?, 'requested', ?, ?, ?, ?, ?, ?, 1, ?, ?)`).run(id, projectId ?? null, input.kind, rootPath, repositoryRoot ? resolve(repositoryRoot) : null, gitCommonDir ? resolve(gitCommonDir) : null, optionalText(input.baseRef) ?? null, optionalText(input.baseSha) ?? null, optionalText(input.branchRef) ?? null, now, now);
|
|
74
|
+
) VALUES (?, ?, ?, ?, 'requested', ?, ?, ?, ?, ?, ?, 1, ?, ?)`).run(id, projectId ?? null, input.kind, ownership, rootPath, repositoryRoot ? resolve(repositoryRoot) : null, gitCommonDir ? resolve(gitCommonDir) : null, optionalText(input.baseRef) ?? null, optionalText(input.baseSha) ?? null, optionalText(input.branchRef) ?? null, now, now);
|
|
73
75
|
db.prepare(`INSERT INTO execution_environment_events (
|
|
74
76
|
event_id, environment_id, from_status, to_status, reason, metadata_json, created_at
|
|
75
77
|
) VALUES (?, ?, NULL, 'requested', 'created', '{}', ?)`).run(randomUUID(), id, now);
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
export declare const EXECUTION_ENVIRONMENT_KINDS: readonly ["local_checkout", "managed_worktree"];
|
|
2
2
|
export type ExecutionEnvironmentKind = (typeof EXECUTION_ENVIRONMENT_KINDS)[number];
|
|
3
|
+
export declare const EXECUTION_ENVIRONMENT_OWNERSHIPS: readonly ["registered", "xopc_created"];
|
|
4
|
+
export type ExecutionEnvironmentOwnership = (typeof EXECUTION_ENVIRONMENT_OWNERSHIPS)[number];
|
|
3
5
|
export declare const EXECUTION_ENVIRONMENT_STATUSES: readonly ["requested", "provisioning", "ready", "degraded", "deleting", "deleted", "error"];
|
|
4
6
|
export type ExecutionEnvironmentStatus = (typeof EXECUTION_ENVIRONMENT_STATUSES)[number];
|
|
5
7
|
export interface ExecutionEnvironment {
|
|
6
8
|
id: string;
|
|
7
9
|
projectId?: string;
|
|
8
10
|
kind: ExecutionEnvironmentKind;
|
|
11
|
+
ownership: ExecutionEnvironmentOwnership;
|
|
9
12
|
status: ExecutionEnvironmentStatus;
|
|
10
13
|
rootPath: string;
|
|
11
14
|
repositoryRoot?: string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
//#region src/execution-environments/types.ts
|
|
2
2
|
const EXECUTION_ENVIRONMENT_KINDS = ["local_checkout", "managed_worktree"];
|
|
3
|
+
const EXECUTION_ENVIRONMENT_OWNERSHIPS = ["registered", "xopc_created"];
|
|
3
4
|
const EXECUTION_ENVIRONMENT_STATUSES = [
|
|
4
5
|
"requested",
|
|
5
6
|
"provisioning",
|
|
@@ -51,4 +52,4 @@ function canTransitionExecutionEnvironment(fromStatus, toStatus) {
|
|
|
51
52
|
return STATUS_TRANSITIONS[fromStatus].includes(toStatus);
|
|
52
53
|
}
|
|
53
54
|
//#endregion
|
|
54
|
-
export { EXECUTION_ENVIRONMENT_KINDS, EXECUTION_ENVIRONMENT_STATUSES, ExecutionEnvironmentConflictError, ExecutionEnvironmentNotFoundError, canTransitionExecutionEnvironment };
|
|
55
|
+
export { EXECUTION_ENVIRONMENT_KINDS, EXECUTION_ENVIRONMENT_OWNERSHIPS, EXECUTION_ENVIRONMENT_STATUSES, ExecutionEnvironmentConflictError, ExecutionEnvironmentNotFoundError, canTransitionExecutionEnvironment };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface DirectoryIdentity {
|
|
2
|
+
dev: number;
|
|
3
|
+
ino: number;
|
|
4
|
+
}
|
|
5
|
+
export declare function assertManagedWorktreePath(rootPath: string, stateDir?: string, repositoryRoot?: string): void;
|
|
6
|
+
export declare function readDirectoryIdentity(path: string): Promise<DirectoryIdentity | undefined>;
|
|
7
|
+
export declare function assertNoNestedRegisteredWorktrees(repositoryRoot: string, rootPath: string): Promise<void>;
|
|
8
|
+
export declare function sameDirectoryIdentity(expected: DirectoryIdentity, actual: DirectoryIdentity | undefined): boolean;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { listGitWorktrees } from "./git.js";
|
|
2
|
+
import { resolveExecutionWorktreesRoot } from "./paths.js";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
5
|
+
import { lstat } from "node:fs/promises";
|
|
6
|
+
//#region src/execution-environments/worktree-safety.ts
|
|
7
|
+
function isInside(parent, candidate) {
|
|
8
|
+
const child = relative(parent, candidate);
|
|
9
|
+
return Boolean(child) && !isAbsolute(child) && child !== ".." && !child.startsWith(`..${sep}`) && resolve(parent, child) === candidate;
|
|
10
|
+
}
|
|
11
|
+
function assertManagedWorktreePath(rootPath, stateDir, repositoryRoot) {
|
|
12
|
+
const managedRoot = resolve(resolveExecutionWorktreesRoot(stateDir));
|
|
13
|
+
const candidate = resolve(rootPath);
|
|
14
|
+
if (!isInside(managedRoot, candidate)) throw new Error(`Refusing to manage worktree outside ${managedRoot}`);
|
|
15
|
+
if (candidate === resolve(homedir()) || candidate === resolve("/")) throw new Error(`Refusing to manage protected path ${candidate}`);
|
|
16
|
+
if (repositoryRoot && candidate === resolve(repositoryRoot)) throw new Error("Refusing to manage the repository root as a worktree");
|
|
17
|
+
}
|
|
18
|
+
async function readDirectoryIdentity(path) {
|
|
19
|
+
try {
|
|
20
|
+
const value = await lstat(path);
|
|
21
|
+
if (value.isSymbolicLink()) throw new Error(`Refusing to manage symlinked worktree path: ${path}`);
|
|
22
|
+
if (!value.isDirectory()) throw new Error(`Worktree path is not a directory: ${path}`);
|
|
23
|
+
return {
|
|
24
|
+
dev: value.dev,
|
|
25
|
+
ino: value.ino
|
|
26
|
+
};
|
|
27
|
+
} catch (error) {
|
|
28
|
+
if (error.code === "ENOENT") return void 0;
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function assertNoNestedRegisteredWorktrees(repositoryRoot, rootPath) {
|
|
33
|
+
const candidate = resolve(rootPath);
|
|
34
|
+
for (const worktree of await listGitWorktrees(repositoryRoot)) {
|
|
35
|
+
const registered = resolve(worktree.path);
|
|
36
|
+
if (registered !== candidate && isInside(candidate, registered)) throw new Error(`Refusing to remove worktree containing registered worktree ${registered}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function sameDirectoryIdentity(expected, actual) {
|
|
40
|
+
return actual?.dev === expected.dev && actual.ino === expected.ino;
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { assertManagedWorktreePath, assertNoNestedRegisteredWorktrees, readDirectoryIdentity, sameDirectoryIdentity };
|
|
@@ -25,7 +25,7 @@ export declare class ActivationPlanner {
|
|
|
25
25
|
getActivatedIds(context: ActivationContext): string[];
|
|
26
26
|
/**
|
|
27
27
|
* Split activated ids by manifest `activation.onStartup`.
|
|
28
|
-
* Extensions without the field
|
|
28
|
+
* Extensions without the field load during startup.
|
|
29
29
|
*/
|
|
30
30
|
filterActivatedIdsByLoadPhase(activatedIds: readonly string[], phase: ActivationLoadPhase): string[];
|
|
31
31
|
explainPlan(context: ActivationContext): string;
|
|
@@ -131,7 +131,7 @@ var ActivationPlanner = class {
|
|
|
131
131
|
}
|
|
132
132
|
/**
|
|
133
133
|
* Split activated ids by manifest `activation.onStartup`.
|
|
134
|
-
* Extensions without the field
|
|
134
|
+
* Extensions without the field load during startup.
|
|
135
135
|
*/
|
|
136
136
|
filterActivatedIdsByLoadPhase(activatedIds, phase) {
|
|
137
137
|
return activatedIds.filter((extensionId) => {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type EngineCheckResult } from './engine-check.js';
|
|
2
|
+
export declare const EXTENSION_API_VERSION = "1.0.0";
|
|
3
|
+
export declare const EXTENSION_UI_API_VERSION = "1.0.0";
|
|
4
|
+
export declare function checkExtensionApiCompatibility(requiredRange: string | undefined, currentVersion: string, engineName: 'extensionApi' | 'extensionUiApi'): EngineCheckResult;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { checkEngineCompatibility } from "./engine-check.js";
|
|
2
|
+
//#region src/extensions/api-version.ts
|
|
3
|
+
const EXTENSION_API_VERSION = "1.0.0";
|
|
4
|
+
const EXTENSION_UI_API_VERSION = "1.0.0";
|
|
5
|
+
function checkExtensionApiCompatibility(requiredRange, currentVersion, engineName) {
|
|
6
|
+
if (!requiredRange) return { compatible: true };
|
|
7
|
+
const result = checkEngineCompatibility(currentVersion, requiredRange);
|
|
8
|
+
if (!result.compatible || result.parseWarning) return {
|
|
9
|
+
...result,
|
|
10
|
+
reason: result.parseWarning ? `Could not parse engines.${engineName} range: "${requiredRange}"` : `${engineName} version ${currentVersion} does not satisfy engines.${engineName}: "${requiredRange}"`
|
|
11
|
+
};
|
|
12
|
+
return result;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { EXTENSION_API_VERSION, EXTENSION_UI_API_VERSION, checkExtensionApiCompatibility };
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { AgentTool } from '@earendil-works/pi-agent-core';
|
|
7
7
|
import type { Command } from 'commander';
|
|
8
|
-
import type { ExtensionApi, ExtensionLogger, ExtensionRuntime, GatewayMethodHandler, HttpRequestHandler, ExtensionCommand, ExtensionCommandHandler, ExtensionReloadHandler, ExtensionService,
|
|
8
|
+
import type { ExtensionApi, ExtensionLogger, ExtensionRuntime, GatewayMethodHandler, HttpRequestHandler, ExtensionCommand, ExtensionCommandHandler, ExtensionReloadHandler, ExtensionService, HookHandlerMap, ExtensionHookEvent, TuiExtensionRegistrar, ExtensionSendUserMessageOptions, ExtensionUserMessageContent, ExtensionCustomMessage, ExtensionSendMessageOptions } from './types/index.js';
|
|
9
9
|
import type { CommandContribution, ContractDeclaration } from './types/manifest.js';
|
|
10
10
|
import type { ChannelPlugin } from '../channels/plugin-types.js';
|
|
11
11
|
import type { Config } from '../config/config-surface.js';
|
|
@@ -38,6 +38,7 @@ export declare class ExtensionApiImpl implements ExtensionApi {
|
|
|
38
38
|
private _registeredSpeechProviderIds;
|
|
39
39
|
private _registeredMediaUnderstandingProviderIds;
|
|
40
40
|
private _registeredMarketplaceAdapterIds;
|
|
41
|
+
private _providerCleanup;
|
|
41
42
|
private readonly _manifestCommands;
|
|
42
43
|
constructor(id: string, name: string, version: string | undefined, source: string, config: Config, extensionConfig: Record<string, unknown>, _logger: ExtensionLogger, _resolvePath: (input: string) => string, _coreRegistry?: ExtensionRegistryImpl, _contracts?: ContractDeclaration, runtime?: ExtensionRuntime);
|
|
43
44
|
get logger(): ExtensionLogger;
|
|
@@ -58,7 +59,7 @@ export declare class ExtensionApiImpl implements ExtensionApi {
|
|
|
58
59
|
* return { systemPrompt: event.systemPrompt };
|
|
59
60
|
* });
|
|
60
61
|
*/
|
|
61
|
-
onHook<K extends ExtensionHookEvent>(hookName: K, handler: HookHandlerMap[K],
|
|
62
|
+
onHook<K extends ExtensionHookEvent>(hookName: K, handler: HookHandlerMap[K], opts?: {
|
|
62
63
|
priority?: number;
|
|
63
64
|
}): void;
|
|
64
65
|
/**
|
|
@@ -94,10 +95,6 @@ export declare class ExtensionApiImpl implements ExtensionApi {
|
|
|
94
95
|
* Register a full ProviderPlugin
|
|
95
96
|
*/
|
|
96
97
|
registerProvider(plugin: import('./types/providers.js').ProviderPlugin): void;
|
|
97
|
-
/**
|
|
98
|
-
* Register a full ProviderPlugin (alias for registerProvider)
|
|
99
|
-
*/
|
|
100
|
-
registerProviderPlugin(plugin: import('./types/providers.js').ProviderPlugin): void;
|
|
101
98
|
registerSpeechProvider(plugin: SpeechProviderPlugin): void;
|
|
102
99
|
/** Speech provider ids registered through this extension API instance. */
|
|
103
100
|
getRegisteredSpeechProviderIds(): readonly string[];
|
|
@@ -111,9 +108,6 @@ export declare class ExtensionApiImpl implements ExtensionApi {
|
|
|
111
108
|
adapter: import('../agent/skills/marketplace/adapter.types.js').SkillsMarketplaceAdapter;
|
|
112
109
|
displayName?: string;
|
|
113
110
|
}): void;
|
|
114
|
-
registerFlag(_name: string, _config: FlagConfig): void;
|
|
115
|
-
getFlag(_name: string): FlagValue;
|
|
116
|
-
registerShortcut(_key: string, _config: ShortcutConfig): void;
|
|
117
111
|
registerTui(register: TuiExtensionRegistrar): void;
|
|
118
112
|
setLabel(entryId: string, label: string | undefined): void;
|
|
119
113
|
sendUserMessage(content: ExtensionUserMessageContent, options?: ExtensionSendUserMessageOptions): void;
|