@xopcai/xopc 0.0.142 → 0.0.143
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 +1 -1
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/activity-center-store-jITiX2vJ.js +1 -0
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BawPxiu5.js → agent-avatar-dicebear-DiME9u_P.js} +1 -1
- package/dist/gateway/static/root/assets/agents-DzBXhZXO.js +2 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-81xd1p9R.js → app-management-settings-panel-Cuo7SbUP.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DYeQsYU8.js → appearance-settings-DUfdNQqk.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-CKuKK5AU.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-D_oa7oti.js → archive-plugin-B-Qk6cGr.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-Cd-bwI2N.js → attachment-load-Di6EEbQX.js} +1 -1
- package/dist/gateway/static/root/assets/automation-suggestion-card-DGxvRxtO.js +1 -0
- package/dist/gateway/static/root/assets/automations-page-D-FF_WKV.js +4 -0
- package/dist/gateway/static/root/assets/{binary-plugins-O8svLKWw.js → binary-plugins-ZaOZDH2I.js} +1 -1
- package/dist/gateway/static/root/assets/block-editor-BTFhjWfg.js +184 -0
- package/dist/gateway/static/root/assets/browser-settings-page-BvKLdEQt.js +8 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-dJy1Eqgx.js → capability-presets-api-BU-pVZiZ.js} +1 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-DgyeEwzh.js +2 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-Bfuhp2ty.js → channel-recipient-api-DuulnhIj.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-BbVsdD_I.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-B5lVrUsN.js +1 -0
- package/dist/gateway/static/root/assets/check-BODqo66o.js +1 -0
- package/dist/gateway/static/root/assets/chunk-QUQL4437-DXsxWP7r.js +4 -0
- package/dist/gateway/static/root/assets/circle-alert-RzVebuX2.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-B8QqVy3I.js +2 -0
- package/dist/gateway/static/root/assets/{desktop-pet-DFMfIb5F.js → desktop-pet---yzVxVR.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-Dc3gqBJE.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-BrYt1gAr.js → directory-picker-path-field-DCmOGLtK.js} +1 -1
- package/dist/gateway/static/root/assets/dreaming-settings-BgT5KZVe.js +3 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-Bh630pLD.js → extension-debug-page-ByaKTTq4.js} +1 -1
- package/dist/gateway/static/root/assets/extension-page-BmRzHAZr.js +1 -0
- package/dist/gateway/static/root/assets/extension-settings-page-JUtwIhbF.js +1 -0
- package/dist/gateway/static/root/assets/{fetch-B1WtuprY.js → fetch-8QNN25Sh.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-De2N821l.js → gateway-config-api-CxicF50_.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-Bz2I_EO5.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-nEujFSDj.js → gateway-startup-retry-5YBnS9Fj.js} +1 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-VcoyuZGN.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-Cilkap2G.js +4 -0
- package/dist/gateway/static/root/assets/{goals-config-api-DUy3eEse.js → goals-config-api-CwcHRdC0.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-C6eoni4z.js +2 -0
- package/dist/gateway/static/root/assets/goals-settings-o4i-qAOS.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-DQQkETX8.js +1 -0
- package/dist/gateway/static/root/assets/index-BKRqeRHm.js +257 -0
- package/dist/gateway/static/root/assets/index-CphxClbs.css +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CVIwwM15.js → keyboard-shortcuts-settings-LT6qB-ua.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-Dli2e3fS.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-B_6us9j7.js → markdown-split-Dw-yE2-y.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-D_fryIyj.js → media-plugins-D9NNNUgE.js} +1 -1
- package/dist/gateway/static/root/assets/messages-CzKxM6I4.js +5 -0
- package/dist/gateway/static/root/assets/models-hub-panel-DVn2Q1Ik.js +2 -0
- package/dist/gateway/static/root/assets/notes-page-CRgbJGgk.js +1 -0
- package/dist/gateway/static/root/assets/notes-workbench-BxZRHLWx.js +2 -0
- package/dist/gateway/static/root/assets/{page-tabs-D_8jGlqx.js → page-tabs-D4hkWVt_.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-BBLMK8Mp.js → preview-open-alternatives-CIckv0uy.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-Doz53xLn.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-DoMtcRLg.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-BeHVEgrm.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-DVS3FR5r.js → save-bar-controls-B0b42kB2.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-D6vKd6-T.js → schedule-field-BtjEkczK.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-BPy4lbIh.js → schema-form-Bf0bk3i6.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-Bk4bQsBe.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-DdFyaRMm.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-WzdikxPt.js → settings-collapsible-section-BTKTdTNX.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-CvfzhBV-.js → settings-form-section-DL4P0sAj.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-BxR-Ulhi.js → settings-loading-skeleton-BV6KFNj4.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-B_4DsX5W.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-layout-CKefvbYi.js → settings-page-layout-CyGlrInB.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DJ1_MLgX.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-BQBV7YrV.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-0VuFLBeU.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-DO87Ckeo.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-D3VdtxAn.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-BokgAgf7.js → system-settings-panel-D85fBBuI.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-BwHlNL3L.js → typed-models-lib-CwEuYrHX.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-DR11ap3A.js → use-channel-catalog-COXIfXcl.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-m9JVQ73F.js +1 -0
- package/dist/gateway/static/root/assets/user-profile-fields-editor-DtQiuY7E.js +1 -0
- package/dist/gateway/static/root/assets/user-profile-settings-panel-CWM0fEpb.js +1 -0
- package/dist/gateway/static/root/assets/{utils-BKUWB-TT.js → utils--BO6xT3u.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-LoT3wgZ9.js +1 -0
- package/dist/gateway/static/root/assets/with-selector-aYPsXwdl.js +1 -0
- package/dist/gateway/static/root/assets/work-item-detail-page-DSTMz_mO.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CL_rnAUB.js → workflow-run-setup-panel-B35lJzvm.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-BfSm9oR8.js +11 -0
- package/dist/gateway/static/root/assets/workflows-page-DLioOiRN.css +1 -0
- package/dist/gateway/static/root/connector-icons/README.md +11 -0
- package/dist/gateway/static/root/connector-icons/airtable.svg +13 -0
- package/dist/gateway/static/root/connector-icons/asana.svg +15 -0
- package/dist/gateway/static/root/connector-icons/brave-search.svg +1 -0
- package/dist/gateway/static/root/connector-icons/clickup.svg +19 -0
- package/dist/gateway/static/root/connector-icons/composio.svg +266 -0
- package/dist/gateway/static/root/connector-icons/discord.svg +15 -0
- package/dist/gateway/static/root/connector-icons/dropbox.svg +152 -0
- package/dist/gateway/static/root/connector-icons/excel.svg +56 -0
- package/dist/gateway/static/root/connector-icons/fetch.svg +6 -0
- package/dist/gateway/static/root/connector-icons/figma.svg +178 -0
- package/dist/gateway/static/root/connector-icons/filesystem.svg +6 -0
- package/dist/gateway/static/root/connector-icons/github.svg +10 -0
- package/dist/gateway/static/root/connector-icons/gmail.svg +3 -0
- package/dist/gateway/static/root/connector-icons/google-calendar.svg +3 -0
- package/dist/gateway/static/root/connector-icons/google-docs.svg +25 -0
- package/dist/gateway/static/root/connector-icons/google-drive.svg +25 -0
- package/dist/gateway/static/root/connector-icons/google-sheets.svg +1 -0
- package/dist/gateway/static/root/connector-icons/hubspot.svg +142 -0
- package/dist/gateway/static/root/connector-icons/jira.svg +15 -0
- package/dist/gateway/static/root/connector-icons/linear.svg +5 -0
- package/dist/gateway/static/root/connector-icons/memory.svg +5 -0
- package/dist/gateway/static/root/connector-icons/microsoft-teams.svg +33 -0
- package/dist/gateway/static/root/connector-icons/notion.svg +5 -0
- package/dist/gateway/static/root/connector-icons/one-drive.svg +13 -0
- package/dist/gateway/static/root/connector-icons/outlook.svg +76 -0
- package/dist/gateway/static/root/connector-icons/playwright.svg +9 -0
- package/dist/gateway/static/root/connector-icons/salesforce.svg +17 -0
- package/dist/gateway/static/root/connector-icons/sequential-thinking.svg +8 -0
- package/dist/gateway/static/root/connector-icons/shopify.svg +5 -0
- package/dist/gateway/static/root/connector-icons/slack.svg +9 -0
- package/dist/gateway/static/root/connector-icons/spotify.svg +43 -0
- package/dist/gateway/static/root/connector-icons/stripe.svg +11 -0
- package/dist/gateway/static/root/connector-icons/telegram.svg +130 -0
- package/dist/gateway/static/root/connector-icons/time.svg +6 -0
- package/dist/gateway/static/root/connector-icons/todoist.svg +277 -0
- package/dist/gateway/static/root/connector-icons/trello.svg +19 -0
- package/dist/gateway/static/root/connector-icons/twitter.svg +128 -0
- package/dist/gateway/static/root/connector-icons/whatsapp.svg +61 -0
- package/dist/gateway/static/root/connector-icons/youtube.svg +11 -0
- package/dist/gateway/static/root/index.html +9 -6
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +2 -0
- package/dist/src/agent/agent-manager.js +8 -0
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/background-review/prompts.d.ts +1 -1
- package/dist/src/agent/background-review/prompts.js +3 -2
- package/dist/src/agent/background-review/prompts.js.map +1 -1
- package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
- package/dist/src/agent/embedded/xopc-tools-bridge.d.ts +9 -0
- package/dist/src/agent/embedded/xopc-tools-bridge.js +71 -3
- package/dist/src/agent/embedded/xopc-tools-bridge.js.map +1 -1
- package/dist/src/agent/goals/post-turn.js +5 -4
- package/dist/src/agent/goals/post-turn.js.map +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +4 -1
- package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
- package/dist/src/agent/memory/context/planner.d.ts +1 -0
- package/dist/src/agent/memory/context/planner.js +60 -14
- package/dist/src/agent/memory/context/planner.js.map +1 -1
- package/dist/src/agent/memory/context/types.d.ts +3 -1
- package/dist/src/agent/memory/lifecycle.d.ts +11 -0
- package/dist/src/agent/memory/lifecycle.js +50 -0
- package/dist/src/agent/memory/lifecycle.js.map +1 -0
- package/dist/src/agent/memory/source-origin.d.ts +3 -0
- package/dist/src/agent/memory/source-origin.js +19 -0
- package/dist/src/agent/memory/source-origin.js.map +1 -0
- package/dist/src/agent/memory/understanding/service.js +5 -0
- package/dist/src/agent/memory/understanding/service.js.map +1 -1
- package/dist/src/agent/memory/user-context-coordinator.js +7 -2
- package/dist/src/agent/memory/user-context-coordinator.js.map +1 -1
- package/dist/src/agent/prompt/sections/behavior.d.ts +2 -0
- package/dist/src/agent/prompt/sections/behavior.js +30 -1
- package/dist/src/agent/prompt/sections/behavior.js.map +1 -1
- package/dist/src/agent/prompt/sections/tooling.js +1 -1
- package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +8 -1
- package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
- package/dist/src/agent/prompt/system-prompt.d.ts +2 -0
- package/dist/src/agent/prompt/system-prompt.js +6 -3
- package/dist/src/agent/prompt/system-prompt.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.js +22 -0
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service.d.ts +2 -0
- package/dist/src/agent/service.js +9 -3
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/starter-agents.js +1 -1
- package/dist/src/agent/starter-agents.js.map +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.js +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.js.map +1 -1
- package/dist/src/agent/tools/composio-tool.d.ts +18 -5
- package/dist/src/agent/tools/composio-tool.js +252 -35
- package/dist/src/agent/tools/composio-tool.js.map +1 -1
- package/dist/src/agent/tools/factory.js +7 -3
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/index.d.ts +1 -1
- package/dist/src/agent/tools/index.js +2 -2
- package/dist/src/agent/tools/workflow-tool.d.ts +0 -1
- package/dist/src/agent/tools/workflow-tool.js +3 -16
- package/dist/src/agent/tools/workflow-tool.js.map +1 -1
- package/dist/src/agent/workflow/builtins/index.d.ts +2 -28
- package/dist/src/agent/workflow/builtins/index.js +226 -41
- package/dist/src/agent/workflow/builtins/index.js.map +1 -1
- package/dist/src/agent/workflow/catalog.d.ts +32 -34
- package/dist/src/agent/workflow/catalog.js +158 -154
- package/dist/src/agent/workflow/catalog.js.map +1 -1
- package/dist/src/agent/workflow/index.d.ts +4 -6
- package/dist/src/agent/workflow/index.js +2 -5
- package/dist/src/agent/workflow/snapshot.d.ts +2 -2
- package/dist/src/agent/workflow/snapshot.js +2 -2
- package/dist/src/agent/workflow/snapshot.js.map +1 -1
- package/dist/src/agent/workflow/structured-output-tool.d.ts +2 -2
- package/dist/src/agent/workflow/structured-output-tool.js +2 -2
- package/dist/src/agent/workflow/structured-output-tool.js.map +1 -1
- package/dist/src/agent/workflow/subagent-runner.js +1 -1
- package/dist/src/agent/workflow/types.d.ts +31 -26
- package/dist/src/agent-manifest/index.d.ts +1 -0
- package/dist/src/agent-manifest/index.js +3 -1
- package/dist/src/agent-manifest/index.js.map +1 -1
- package/dist/src/agent-manifest/preset-chain.d.ts +10 -0
- package/dist/src/agent-manifest/preset-chain.js +32 -0
- package/dist/src/agent-manifest/preset-chain.js.map +1 -0
- package/dist/src/agent-manifest/resolver.js +3 -10
- package/dist/src/agent-manifest/resolver.js.map +1 -1
- package/dist/src/agent-manifest/schema.d.ts +4 -4
- package/dist/src/automations/api/routes.js +13 -1
- package/dist/src/automations/api/routes.js.map +1 -1
- package/dist/src/automations/domain/validation.d.ts +14 -14
- package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -3
- package/dist/src/browser/providers/browser-ext-install.d.ts +11 -1
- package/dist/src/browser/providers/browser-ext-install.js +39 -14
- package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
- package/dist/src/capabilities/store-connector.d.ts +0 -1
- package/dist/src/capabilities/store-connector.js +3 -5
- package/dist/src/capabilities/store-connector.js.map +1 -1
- package/dist/src/chat-commands/builtins/review.js +72 -73
- package/dist/src/chat-commands/builtins/review.js.map +1 -1
- package/dist/src/chat-commands/builtins/workflow.js +9 -54
- package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/extension-create.js +2 -2
- package/dist/src/cli/commands/extension-create.js.map +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +42 -36
- package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
- package/dist/src/cli/commands/extension-pack.d.ts +6 -0
- package/dist/src/cli/commands/extension-pack.js +3 -2
- package/dist/src/cli/commands/extension-pack.js.map +1 -1
- package/dist/src/commands/agents.config.d.ts +1 -0
- package/dist/src/commands/agents.config.js +1 -0
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/schema.d.ts +6 -6
- package/dist/src/config/schema.js +6 -22
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/web-patch.d.ts +1 -1
- package/dist/src/connectors/approval.d.ts +2 -0
- package/dist/src/connectors/approval.js +33 -0
- package/dist/src/connectors/approval.js.map +1 -0
- package/dist/src/connectors/auth-provider-registry.d.ts +9 -0
- package/dist/src/connectors/auth-provider-registry.js +17 -0
- package/dist/src/connectors/auth-provider-registry.js.map +1 -0
- package/dist/src/connectors/builtin-catalog.js +55 -116
- package/dist/src/connectors/builtin-catalog.js.map +1 -1
- package/dist/src/connectors/catalog.js +7 -2
- package/dist/src/connectors/catalog.js.map +1 -1
- package/dist/src/connectors/composio-catalog.d.ts +19 -0
- package/dist/src/connectors/composio-catalog.js +237 -0
- package/dist/src/connectors/composio-catalog.js.map +1 -0
- package/dist/src/connectors/composio-logo.d.ts +1 -0
- package/dist/src/connectors/composio-logo.js +51 -0
- package/dist/src/connectors/composio-logo.js.map +1 -0
- package/dist/src/connectors/composio-sessions.d.ts +116 -0
- package/dist/src/connectors/composio-sessions.js +296 -0
- package/dist/src/connectors/composio-sessions.js.map +1 -0
- package/dist/src/connectors/composio-triggers.d.ts +17 -0
- package/dist/src/connectors/composio-triggers.js +48 -5
- package/dist/src/connectors/composio-triggers.js.map +1 -1
- package/dist/src/connectors/composio.d.ts +31 -2
- package/dist/src/connectors/composio.js +374 -151
- package/dist/src/connectors/composio.js.map +1 -1
- package/dist/src/connectors/connector-memory-sync.d.ts +15 -0
- package/dist/src/connectors/connector-memory-sync.js +90 -0
- package/dist/src/connectors/connector-memory-sync.js.map +1 -0
- package/dist/src/connectors/install.js +35 -92
- package/dist/src/connectors/install.js.map +1 -1
- package/dist/src/connectors/instances.js +6 -2
- package/dist/src/connectors/instances.js.map +1 -1
- package/dist/src/connectors/integration-strategy.d.ts +3 -0
- package/dist/src/connectors/integration-strategy.js +29 -0
- package/dist/src/connectors/integration-strategy.js.map +1 -0
- package/dist/src/connectors/policy.d.ts +13 -0
- package/dist/src/connectors/policy.js +48 -0
- package/dist/src/connectors/policy.js.map +1 -0
- package/dist/src/connectors/providers.js +1 -1
- package/dist/src/connectors/runtime-adapter-registry.d.ts +25 -0
- package/dist/src/connectors/runtime-adapter-registry.js +154 -0
- package/dist/src/connectors/runtime-adapter-registry.js.map +1 -0
- package/dist/src/connectors/types.d.ts +113 -4
- package/dist/src/connectors/workflow-preflight.d.ts +20 -0
- package/dist/src/connectors/workflow-preflight.js +70 -0
- package/dist/src/connectors/workflow-preflight.js.map +1 -0
- package/dist/src/extensions/install-transaction.d.ts +16 -0
- package/dist/src/extensions/install-transaction.js +76 -0
- package/dist/src/extensions/install-transaction.js.map +1 -0
- package/dist/src/extensions/install.d.ts +2 -0
- package/dist/src/extensions/install.js +23 -1
- package/dist/src/extensions/install.js.map +1 -1
- package/dist/src/gateway/agents-admin.d.ts +2 -0
- package/dist/src/gateway/agents-admin.js +7 -0
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/capability-presets-admin.d.ts +11 -0
- package/dist/src/gateway/capability-presets-admin.js +11 -4
- package/dist/src/gateway/capability-presets-admin.js.map +1 -1
- package/dist/src/gateway/chat-stream/mapper.js +17 -0
- package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
- package/dist/src/gateway/chat-stream/protocol.d.ts +18 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -3
- package/dist/src/gateway/hono/routes/agents.js +3 -0
- package/dist/src/gateway/hono/routes/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/capability-presets.js +19 -1
- package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -1
- package/dist/src/gateway/hono/routes/connectors.js +188 -25
- package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
- package/dist/src/gateway/hono/routes/goals.js +22 -3
- package/dist/src/gateway/hono/routes/goals.js.map +1 -1
- package/dist/src/gateway/hono/routes/home.d.ts +60 -1
- package/dist/src/gateway/hono/routes/home.js +244 -18
- package/dist/src/gateway/hono/routes/home.js.map +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/memory.js +14 -1
- package/dist/src/gateway/hono/routes/memory.js.map +1 -1
- package/dist/src/gateway/hono/routes/projects.js +103 -2
- package/dist/src/gateway/hono/routes/projects.js.map +1 -1
- package/dist/src/gateway/hono/routes/public-gateway.js +93 -0
- package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +137 -22
- package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
- package/dist/src/gateway/hono/routes/you.d.ts +23 -0
- package/dist/src/gateway/hono/routes/you.js +538 -0
- package/dist/src/gateway/hono/routes/you.js.map +1 -0
- package/dist/src/gateway/hono/sse.d.ts +2 -1
- package/dist/src/gateway/hono/sse.js +2 -1
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +13 -1
- package/dist/src/gateway/service/marketplace-service.js +96 -40
- package/dist/src/gateway/service/marketplace-service.js.map +1 -1
- package/dist/src/gateway/service.d.ts +2 -0
- package/dist/src/gateway/service.js +7 -1
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/goals/goal-service.d.ts +7 -5
- package/dist/src/goals/goal-service.js +25 -13
- package/dist/src/goals/goal-service.js.map +1 -1
- package/dist/src/goals/goal-store.js +46 -7
- package/dist/src/goals/goal-store.js.map +1 -1
- package/dist/src/goals/types.d.ts +24 -0
- package/dist/src/storage/sqlite/connector-repository.d.ts +49 -0
- package/dist/src/storage/sqlite/connector-repository.js +385 -0
- package/dist/src/storage/sqlite/connector-repository.js.map +1 -0
- package/dist/src/storage/sqlite/index.d.ts +3 -0
- package/dist/src/storage/sqlite/index.js +4 -1
- package/dist/src/storage/sqlite/migrations/030_connectors.sql +94 -0
- package/dist/src/storage/sqlite/migrations/031_connector_approvals.sql +24 -0
- package/dist/src/storage/sqlite/migrations/032_connector_webhook_deliveries.sql +15 -0
- package/dist/src/storage/sqlite/migrations/033_user_trust_policies.sql +6 -0
- package/dist/src/storage/sqlite/migrations/034_allow_global_auto_trust.sql +14 -0
- package/dist/src/storage/sqlite/migrations/035_user_profile_prompt_state.sql +7 -0
- package/dist/src/storage/sqlite/migrations/036_goal_outcome_metric.sql +12 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/user-profile-setup-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/user-profile-setup-repository.js +34 -0
- package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +1 -0
- package/dist/src/storage/sqlite/user-trust-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/user-trust-repository.js +34 -0
- package/dist/src/storage/sqlite/user-trust-repository.js.map +1 -0
- package/dist/src/tui/components/assistant-message.js +15 -0
- package/dist/src/tui/components/assistant-message.js.map +1 -1
- package/dist/src/tui/tui-agent-events.js +85 -1
- package/dist/src/tui/tui-agent-events.js.map +1 -1
- package/dist/src/tui/tui-command-formatters.js +7 -7
- package/dist/src/tui/tui-command-formatters.js.map +1 -1
- package/dist/src/tui/tui-commands.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/user-context/import.d.ts +12 -0
- package/dist/src/user-context/import.js +48 -0
- package/dist/src/user-context/import.js.map +1 -0
- package/dist/src/user-context/profile.d.ts +37 -0
- package/dist/src/user-context/profile.js +165 -0
- package/dist/src/user-context/profile.js.map +1 -0
- package/dist/src/user-context/projection.d.ts +54 -0
- package/dist/src/user-context/projection.js +121 -0
- package/dist/src/user-context/projection.js.map +1 -0
- package/dist/src/user-context/source-recommendations.d.ts +13 -0
- package/dist/src/user-context/source-recommendations.js +86 -0
- package/dist/src/user-context/source-recommendations.js.map +1 -0
- package/dist/src/user-context/trust-policy.d.ts +11 -0
- package/dist/src/user-context/trust-policy.js +31 -0
- package/dist/src/user-context/trust-policy.js.map +1 -0
- package/dist/src/workflows/authoring/index.d.ts +1 -0
- package/dist/src/workflows/authoring/index.js +2 -0
- package/dist/src/workflows/authoring/workflow-draft-store.d.ts +33 -0
- package/dist/src/workflows/authoring/workflow-draft-store.js +74 -0
- package/dist/src/workflows/authoring/workflow-draft-store.js.map +1 -0
- package/dist/src/workflows/domain/definition-utils.d.ts +6 -4
- package/dist/src/workflows/domain/definition-utils.js +28 -26
- package/dist/src/workflows/domain/definition-utils.js.map +1 -1
- package/dist/src/workflows/domain/definition.d.ts +79 -6
- package/dist/src/workflows/domain/event.d.ts +18 -2
- package/dist/src/workflows/domain/index.js +3 -3
- package/dist/src/workflows/domain/run.d.ts +16 -2
- package/dist/src/workflows/domain/run.js.map +1 -1
- package/dist/src/workflows/domain/validation.d.ts +9 -5
- package/dist/src/workflows/domain/validation.js +183 -40
- package/dist/src/workflows/domain/validation.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft-prompt.d.ts +2 -3
- package/dist/src/workflows/draft/workflow-draft-prompt.js +31 -73
- package/dist/src/workflows/draft/workflow-draft-prompt.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft-service.js +4 -8
- package/dist/src/workflows/draft/workflow-draft-service.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft-validator.js +29 -37
- package/dist/src/workflows/draft/workflow-draft-validator.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft.types.d.ts +4 -4
- package/dist/src/workflows/engine/projector.js +43 -1
- package/dist/src/workflows/engine/projector.js.map +1 -1
- package/dist/src/workflows/engine/workflow-engine.d.ts +2 -3
- package/dist/src/workflows/engine/workflow-engine.js +24 -4
- package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
- package/dist/src/workflows/index.js +4 -7
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +1 -9
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -1
- package/dist/src/workflows/runtime/graph-workflow-runtime.d.ts +10 -0
- package/dist/src/workflows/runtime/graph-workflow-runtime.js +295 -0
- package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +1 -0
- package/dist/src/workflows/runtime/index.d.ts +1 -2
- package/dist/src/workflows/runtime/index.js +2 -5
- package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +5 -8
- package/dist/src/workflows/service/workflow-run-service.js +15 -1
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +2 -1
- package/package.json +4 -3
- package/dist/gateway/static/root/assets/agents-CyvCIHnB.js +0 -2
- package/dist/gateway/static/root/assets/apps-page-DK_Vx6nl.js +0 -1
- package/dist/gateway/static/root/assets/automation-suggestion-card-B1LV3YYv.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-fzrovqhv.js +0 -4
- package/dist/gateway/static/root/assets/block-editor-Dhj5f4Bx.js +0 -184
- package/dist/gateway/static/root/assets/browser-settings-page-BDn-n-UB.js +0 -8
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-Co5ipo_Q.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-BWlpaxg9.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-D_jkIZLV.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-BcekbW4q.js +0 -2
- package/dist/gateway/static/root/assets/desktop-pet-settings-BJCUuL8Y.js +0 -1
- package/dist/gateway/static/root/assets/dreaming-settings-BN1Z2mIo.js +0 -3
- package/dist/gateway/static/root/assets/extension-page-B-1KxvVy.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-BF9NACI3.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-DN9sNREz.js +0 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-BpoQW8cD.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-CBRSPd0b.js +0 -4
- package/dist/gateway/static/root/assets/goals-page-BCcBi407.js +0 -2
- package/dist/gateway/static/root/assets/goals-settings-pkTXzXkh.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-ezsufgLQ.js +0 -1
- package/dist/gateway/static/root/assets/index-B8s8Pq5U.css +0 -1
- package/dist/gateway/static/root/assets/index-DcUaXYeb.js +0 -262
- package/dist/gateway/static/root/assets/logs-page-DQtTRXtj.js +0 -7
- package/dist/gateway/static/root/assets/messages-BXNELNBa.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-panel-BP2M9n6Q.js +0 -2
- package/dist/gateway/static/root/assets/notes-page-CspveYaO.js +0 -1
- package/dist/gateway/static/root/assets/notes-workbench-BHwzJ0OC.js +0 -2
- package/dist/gateway/static/root/assets/project-detail-page-Dy3rsobs.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-CWKpPE0L.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CqNRyXEo.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-MEME7ivF.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-JVd0qaSF.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-DYEbB1EV.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-dWN8BJ3z.js +0 -1
- package/dist/gateway/static/root/assets/share-preview-page-D8foINzP.js +0 -2
- package/dist/gateway/static/root/assets/shares-settings-Tgbv1s7G.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-D_YK0b_Z.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-DGytfoZK.js +0 -2
- package/dist/gateway/static/root/assets/toast-z0toXu32.js +0 -1
- package/dist/gateway/static/root/assets/user-profile-settings-panel-8YtygcJp.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-BVH71EFf.js +0 -1
- package/dist/gateway/static/root/assets/work-item-detail-page-JeTE7XNM.js +0 -1
- package/dist/gateway/static/root/assets/workflow-start-dialog-_u8Uc1ze.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-ixgk_y1l.js +0 -18
- package/dist/src/agent/workflow/builtins/audit-repo.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/audit-repo.js +0 -183
- package/dist/src/agent/workflow/builtins/audit-repo.js.map +0 -1
- package/dist/src/agent/workflow/builtins/client-proposal.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/client-proposal.js +0 -164
- package/dist/src/agent/workflow/builtins/client-proposal.js.map +0 -1
- package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/competitor-scan.js +0 -164
- package/dist/src/agent/workflow/builtins/competitor-scan.js.map +0 -1
- package/dist/src/agent/workflow/builtins/content-draft.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/content-draft.js +0 -159
- package/dist/src/agent/workflow/builtins/content-draft.js.map +0 -1
- package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +0 -11
- package/dist/src/agent/workflow/builtins/content-repurpose.js +0 -146
- package/dist/src/agent/workflow/builtins/content-repurpose.js.map +0 -1
- package/dist/src/agent/workflow/builtins/debug-incident.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/debug-incident.js +0 -177
- package/dist/src/agent/workflow/builtins/debug-incident.js.map +0 -1
- package/dist/src/agent/workflow/builtins/decision-compare.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/decision-compare.js +0 -187
- package/dist/src/agent/workflow/builtins/decision-compare.js.map +0 -1
- package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/implementation-plan.js +0 -185
- package/dist/src/agent/workflow/builtins/implementation-plan.js.map +0 -1
- package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +0 -11
- package/dist/src/agent/workflow/builtins/inbox-triage.js +0 -158
- package/dist/src/agent/workflow/builtins/inbox-triage.js.map +0 -1
- package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/meeting-prep.js +0 -152
- package/dist/src/agent/workflow/builtins/meeting-prep.js.map +0 -1
- package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +0 -14
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js +0 -171
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +0 -1
- package/dist/src/agent/workflow/builtins/offer-design.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/offer-design.js +0 -170
- package/dist/src/agent/workflow/builtins/offer-design.js.map +0 -1
- package/dist/src/agent/workflow/builtins/pr-review.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/pr-review.js +0 -178
- package/dist/src/agent/workflow/builtins/pr-review.js.map +0 -1
- package/dist/src/agent/workflow/builtins/release-check.d.ts +0 -11
- package/dist/src/agent/workflow/builtins/release-check.js +0 -174
- package/dist/src/agent/workflow/builtins/release-check.js.map +0 -1
- package/dist/src/agent/workflow/builtins/research.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/research.js +0 -188
- package/dist/src/agent/workflow/builtins/research.js.map +0 -1
- package/dist/src/agent/workflow/builtins/weekly-review.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/weekly-review.js +0 -139
- package/dist/src/agent/workflow/builtins/weekly-review.js.map +0 -1
- package/dist/src/agent/workflow/last-run-memory.d.ts +0 -42
- package/dist/src/agent/workflow/last-run-memory.js +0 -60
- package/dist/src/agent/workflow/last-run-memory.js.map +0 -1
- package/dist/src/agent/workflow/lint.d.ts +0 -38
- package/dist/src/agent/workflow/lint.js +0 -74
- package/dist/src/agent/workflow/lint.js.map +0 -1
- package/dist/src/agent/workflow/meta-locale.d.ts +0 -12
- package/dist/src/agent/workflow/meta-locale.js +0 -62
- package/dist/src/agent/workflow/meta-locale.js.map +0 -1
- package/dist/src/agent/workflow/parser.d.ts +0 -20
- package/dist/src/agent/workflow/parser.js +0 -152
- package/dist/src/agent/workflow/parser.js.map +0 -1
- package/dist/src/agent/workflow/runtime.d.ts +0 -34
- package/dist/src/agent/workflow/runtime.js +0 -402
- package/dist/src/agent/workflow/runtime.js.map +0 -1
- package/dist/src/connectors/oauth.d.ts +0 -22
- package/dist/src/connectors/oauth.js +0 -99
- package/dist/src/connectors/oauth.js.map +0 -1
- package/dist/src/workflows/runtime/script-runtime.d.ts +0 -3
- package/dist/src/workflows/runtime/script-runtime.js +0 -3
- package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +0 -5
- package/dist/src/workflows/runtime/script-workflow-runtime.js +0 -15
- package/dist/src/workflows/runtime/script-workflow-runtime.js.map +0 -1
|
@@ -1,46 +1,263 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { consumeConnectorApproval, createConnectorApproval, getConnectorApproval, getConnectorInstallation, listConnectorActionMetadata, listConnectorConnections, listConnectorInstallations, upsertConnectorActionMetadata, upsertConnectorInstallation } from "../../storage/sqlite/connector-repository.js";
|
|
2
|
+
import "../../storage/sqlite/index.js";
|
|
3
|
+
import { init_session_key, parseSessionKey } from "../../routing/session-key.js";
|
|
4
|
+
import { connectorArgumentsHash, connectorArgumentsPreview } from "../../connectors/approval.js";
|
|
5
|
+
import { ComposioSessionsAdapter } from "../../connectors/composio-sessions.js";
|
|
6
|
+
import { getComposioToolkitScope, isComposioActionAllowedByCatalog, scopeForComposioAction } from "../../connectors/composio.js";
|
|
7
|
+
import { getConnectorDefinition } from "../../connectors/catalog.js";
|
|
2
8
|
import { Type } from "@sinclair/typebox";
|
|
3
9
|
//#region src/agent/tools/composio-tool.ts
|
|
10
|
+
init_session_key();
|
|
11
|
+
const ComposioSearchSchema = Type.Object({
|
|
12
|
+
query: Type.String({ description: "Describe the task or information you need from connected apps." }),
|
|
13
|
+
toolkits: Type.Optional(Type.Array(Type.String(), {
|
|
14
|
+
maxItems: 8,
|
|
15
|
+
description: "Optional installed app slugs to search."
|
|
16
|
+
}))
|
|
17
|
+
});
|
|
18
|
+
const ComposioConnectSchema = Type.Object({
|
|
19
|
+
toolkit: Type.String({ description: "Installed Composio app slug, for example gmail or notion." }),
|
|
20
|
+
alias: Type.Optional(Type.String({ description: "Optional account label such as Personal or Work." }))
|
|
21
|
+
});
|
|
4
22
|
const ComposioExecuteSchema = Type.Object({
|
|
5
|
-
|
|
6
|
-
arguments: Type.Optional(Type.
|
|
23
|
+
actionId: Type.String({ description: "Exact action slug returned by composio_search." }),
|
|
24
|
+
arguments: Type.Optional(Type.Record(Type.String(), Type.Unknown(), { description: "Arguments matching the exact contract returned by composio_search." })),
|
|
25
|
+
connectionId: Type.Optional(Type.String({ description: "Local connection id when more than one account is connected." })),
|
|
26
|
+
approvalId: Type.Optional(Type.String({ description: "Approval id after the user explicitly approves a pending write/admin action." }))
|
|
7
27
|
});
|
|
8
|
-
function
|
|
9
|
-
return
|
|
28
|
+
function textResult(value) {
|
|
29
|
+
return {
|
|
30
|
+
content: [{
|
|
31
|
+
type: "text",
|
|
32
|
+
text: typeof value === "string" ? value : JSON.stringify(value, null, 2)
|
|
33
|
+
}],
|
|
34
|
+
details: {}
|
|
35
|
+
};
|
|
10
36
|
}
|
|
11
|
-
function
|
|
12
|
-
|
|
37
|
+
function connectorPrincipalForSession(sessionKey) {
|
|
38
|
+
const parsed = parseSessionKey(sessionKey);
|
|
39
|
+
if (!parsed || parsed.source === "cli" || parsed.source === "webchat") return {
|
|
40
|
+
principalId: "local-owner",
|
|
41
|
+
agentId: parsed?.agentId,
|
|
42
|
+
isLocalOwner: true
|
|
43
|
+
};
|
|
13
44
|
return {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
parameters: ComposioExecuteSchema,
|
|
18
|
-
async execute(_toolCallId, params) {
|
|
19
|
-
const config = getConfig();
|
|
20
|
-
const allowed = canUseComposioAction(config, params.slug);
|
|
21
|
-
if (allowed.ok === false) return {
|
|
22
|
-
content: [{
|
|
23
|
-
type: "text",
|
|
24
|
-
text: allowed.reason
|
|
25
|
-
}],
|
|
26
|
-
details: {}
|
|
27
|
-
};
|
|
28
|
-
const result = await executeComposioTool({
|
|
29
|
-
slug: params.slug,
|
|
30
|
-
arguments: params.arguments,
|
|
31
|
-
config
|
|
32
|
-
});
|
|
33
|
-
return {
|
|
34
|
-
content: [{
|
|
35
|
-
type: "text",
|
|
36
|
-
text: JSON.stringify(result, null, 2)
|
|
37
|
-
}],
|
|
38
|
-
details: {}
|
|
39
|
-
};
|
|
40
|
-
}
|
|
45
|
+
principalId: `channel:${parsed.source}:${parsed.accountId}:${parsed.peerKind}:${parsed.peerId}`,
|
|
46
|
+
agentId: parsed.agentId,
|
|
47
|
+
isLocalOwner: false
|
|
41
48
|
};
|
|
42
49
|
}
|
|
50
|
+
function installedConfigToolkits(config) {
|
|
51
|
+
return Object.entries(config?.connectors?.instances ?? {}).flatMap(([_instanceId, record]) => {
|
|
52
|
+
if (!record || typeof record !== "object" || Array.isArray(record)) return [];
|
|
53
|
+
const row = record;
|
|
54
|
+
const marker = row.xopcConnector;
|
|
55
|
+
if (marker && typeof marker === "object" && !Array.isArray(marker) && marker.enabled === false) return [];
|
|
56
|
+
const connectorId = marker && typeof marker === "object" && !Array.isArray(marker) ? marker.connectorId : void 0;
|
|
57
|
+
const runtime = row.runtime;
|
|
58
|
+
if (typeof connectorId !== "string" || !runtime || typeof runtime !== "object" || Array.isArray(runtime) || runtime.type !== "composio" || runtime.role !== "toolkit" || typeof runtime.toolkit !== "string") return [];
|
|
59
|
+
return [{
|
|
60
|
+
connectorId,
|
|
61
|
+
toolkit: runtime.toolkit
|
|
62
|
+
}];
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
function syncLocalOwnerInstallations(config) {
|
|
66
|
+
for (const { connectorId, toolkit } of installedConfigToolkits(config)) {
|
|
67
|
+
const id = `${connectorId}-local-owner`;
|
|
68
|
+
const existing = getConnectorInstallation(id);
|
|
69
|
+
upsertConnectorInstallation({
|
|
70
|
+
id,
|
|
71
|
+
connectorId,
|
|
72
|
+
principalId: "local-owner",
|
|
73
|
+
enabled: true,
|
|
74
|
+
allowedAgentIds: existing?.allowedAgentIds ?? [],
|
|
75
|
+
maxScope: getComposioToolkitScope(config, toolkit),
|
|
76
|
+
confirmationPolicy: existing?.confirmationPolicy ?? "writes",
|
|
77
|
+
selectedConnectionIds: existing?.selectedConnectionIds ?? [],
|
|
78
|
+
createdAt: existing?.createdAt
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function availableInstallations(deps) {
|
|
83
|
+
const context = deps.getCurrentContext();
|
|
84
|
+
const principal = connectorPrincipalForSession(context?.sessionKey);
|
|
85
|
+
if (principal.isLocalOwner) syncLocalOwnerInstallations(deps.getConfig());
|
|
86
|
+
const agentId = deps.agentId ?? principal.agentId;
|
|
87
|
+
const installations = listConnectorInstallations(principal.principalId).filter((installation) => installation.enabled && composioToolkitFromConnectorId(installation.connectorId) !== void 0 && (installation.allowedAgentIds.length === 0 || Boolean(agentId && installation.allowedAgentIds.includes(agentId))));
|
|
88
|
+
return {
|
|
89
|
+
principalId: principal.principalId,
|
|
90
|
+
agentId,
|
|
91
|
+
context,
|
|
92
|
+
installations
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function composioToolkitFromConnectorId(connectorId) {
|
|
96
|
+
const definition = getConnectorDefinition(connectorId);
|
|
97
|
+
return definition?.runtime.type === "composio" && definition.runtime.role === "toolkit" ? definition.runtime.toolkit : void 0;
|
|
98
|
+
}
|
|
99
|
+
function toolkitFromInstallation(installation) {
|
|
100
|
+
const toolkit = composioToolkitFromConnectorId(installation.connectorId);
|
|
101
|
+
if (!toolkit) throw new Error(`Connector installation is not a Composio toolkit: ${installation.connectorId}`);
|
|
102
|
+
return toolkit;
|
|
103
|
+
}
|
|
104
|
+
function toolkitForAction(actionId, candidates) {
|
|
105
|
+
const normalizedAction = actionId.trim().toUpperCase();
|
|
106
|
+
return [...candidates].sort((left, right) => right.length - left.length).find((toolkit) => normalizedAction === toolkit.toUpperCase() || normalizedAction.startsWith(`${toolkit.toUpperCase()}_`));
|
|
107
|
+
}
|
|
108
|
+
function contractFromSearch(connectorId, toolkit, actionId, value) {
|
|
109
|
+
const row = value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
110
|
+
const risk = scopeForComposioAction(actionId);
|
|
111
|
+
return {
|
|
112
|
+
connectorId,
|
|
113
|
+
actionId,
|
|
114
|
+
toolkit,
|
|
115
|
+
scope: risk.scope,
|
|
116
|
+
curated: risk.curated,
|
|
117
|
+
inputSchema: row.inputSchema,
|
|
118
|
+
cachedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function createComposioTools(deps) {
|
|
122
|
+
if (installedConfigToolkits(deps.getConfig()).length === 0) return [];
|
|
123
|
+
const adapter = deps.adapter ?? new ComposioSessionsAdapter();
|
|
124
|
+
return [
|
|
125
|
+
{
|
|
126
|
+
name: "composio_search",
|
|
127
|
+
label: "🔎 Connected Apps Search",
|
|
128
|
+
description: "Discover exact actions and argument contracts for the connected apps allowed in this session. Call this before composio_execute.",
|
|
129
|
+
parameters: ComposioSearchSchema,
|
|
130
|
+
async execute(_toolCallId, params) {
|
|
131
|
+
const available = availableInstallations(deps);
|
|
132
|
+
const installedToolkits = available.installations.map(toolkitFromInstallation);
|
|
133
|
+
const requested = params.toolkits?.length ? params.toolkits.map((toolkit) => toolkit.toLowerCase()).filter((toolkit) => installedToolkits.includes(toolkit)) : installedToolkits;
|
|
134
|
+
if (requested.length === 0) return textResult("No connected apps are allowed for this user and agent.");
|
|
135
|
+
const result = await (await adapter.createSession({
|
|
136
|
+
principalId: available.principalId,
|
|
137
|
+
toolkits: requested
|
|
138
|
+
})).search({
|
|
139
|
+
query: params.query,
|
|
140
|
+
toolkits: requested
|
|
141
|
+
});
|
|
142
|
+
let visibleResult = result;
|
|
143
|
+
if (result && typeof result === "object" && !Array.isArray(result)) {
|
|
144
|
+
const schemas = result.toolSchemas;
|
|
145
|
+
if (schemas && typeof schemas === "object" && !Array.isArray(schemas)) {
|
|
146
|
+
const visibleSchemas = {};
|
|
147
|
+
for (const [actionId, schema] of Object.entries(schemas)) {
|
|
148
|
+
const toolkit = toolkitForAction(actionId, requested);
|
|
149
|
+
if (toolkit && requested.includes(toolkit)) {
|
|
150
|
+
if (!isComposioActionAllowedByCatalog(actionId)) continue;
|
|
151
|
+
visibleSchemas[actionId] = schema;
|
|
152
|
+
const installation = available.installations.find((candidate) => toolkitFromInstallation(candidate) === toolkit);
|
|
153
|
+
if (installation) upsertConnectorActionMetadata(contractFromSearch(installation.connectorId, toolkit, actionId, schema));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
visibleResult = {
|
|
157
|
+
...result,
|
|
158
|
+
toolSchemas: visibleSchemas
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return textResult(visibleResult);
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: "composio_connect",
|
|
167
|
+
label: "🔐 Connect App Account",
|
|
168
|
+
description: "Create an authorization link for an installed app. Never claims the connection succeeded until it is checked again.",
|
|
169
|
+
parameters: ComposioConnectSchema,
|
|
170
|
+
async execute(_toolCallId, params) {
|
|
171
|
+
const available = availableInstallations(deps);
|
|
172
|
+
const toolkit = params.toolkit.trim().toLowerCase();
|
|
173
|
+
const installation = available.installations.find((candidate) => toolkitFromInstallation(candidate) === toolkit);
|
|
174
|
+
if (!installation) return textResult("This app is not installed or is not allowed for this user and agent.");
|
|
175
|
+
const authorization = await adapter.authorize({
|
|
176
|
+
principalId: available.principalId,
|
|
177
|
+
toolkit,
|
|
178
|
+
installationId: installation.id,
|
|
179
|
+
alias: params.alias
|
|
180
|
+
});
|
|
181
|
+
return textResult({
|
|
182
|
+
status: authorization.status,
|
|
183
|
+
toolkit,
|
|
184
|
+
authorizationUrl: authorization.connectUrl,
|
|
185
|
+
connectionId: authorization.connectionId,
|
|
186
|
+
instruction: "Ask the user to open the authorization URL. Check the connection again after they finish."
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
name: "composio_execute",
|
|
192
|
+
label: "🔌 Connected App Action",
|
|
193
|
+
description: "Execute an exact action returned by composio_search. Write and admin actions require a user-approved approvalId.",
|
|
194
|
+
parameters: ComposioExecuteSchema,
|
|
195
|
+
async execute(_toolCallId, params) {
|
|
196
|
+
const available = availableInstallations(deps);
|
|
197
|
+
const toolkit = toolkitForAction(params.actionId, available.installations.map(toolkitFromInstallation));
|
|
198
|
+
if (!toolkit) return textResult("Unknown toolkit for this action. Call composio_search first.");
|
|
199
|
+
const installation = available.installations.find((candidate) => toolkitFromInstallation(candidate) === toolkit);
|
|
200
|
+
if (!installation) return textResult("This app is not allowed for this user and agent.");
|
|
201
|
+
if (!isComposioActionAllowedByCatalog(params.actionId)) return textResult("This action is not in the connector curated action catalog.");
|
|
202
|
+
const action = listConnectorActionMetadata(installation.connectorId).find((candidate) => candidate.actionId === params.actionId);
|
|
203
|
+
if (!action?.inputSchema) return textResult("The exact action contract is not cached. Call composio_search for this task before executing.");
|
|
204
|
+
await adapter.syncConnections({ principalId: available.principalId }).catch(() => []);
|
|
205
|
+
const connections = listConnectorConnections({
|
|
206
|
+
principalId: available.principalId,
|
|
207
|
+
connectorId: installation.connectorId
|
|
208
|
+
}).filter((connection) => connection.status === "active");
|
|
209
|
+
const connection = params.connectionId ? connections.find((candidate) => candidate.id === params.connectionId) : connections.find((candidate) => candidate.isDefault) ?? connections[0];
|
|
210
|
+
const args = params.arguments ?? {};
|
|
211
|
+
const argsHash = connectorArgumentsHash(args);
|
|
212
|
+
let confirmed = false;
|
|
213
|
+
if (params.approvalId) {
|
|
214
|
+
const pending = getConnectorApproval(params.approvalId);
|
|
215
|
+
if (!pending || pending.principalId !== available.principalId || pending.connectorId !== installation.connectorId || pending.actionId !== action.actionId || pending.sessionKey !== available.context?.sessionKey) return textResult("The connector approval is invalid for this session or action.");
|
|
216
|
+
confirmed = Boolean(consumeConnectorApproval(params.approvalId, argsHash));
|
|
217
|
+
if (!confirmed) return textResult("The connector approval is not approved, has expired, or was already used.");
|
|
218
|
+
}
|
|
219
|
+
const result = await adapter.executeWithPolicy({
|
|
220
|
+
context: {
|
|
221
|
+
principalId: available.principalId,
|
|
222
|
+
toolkits: [toolkit]
|
|
223
|
+
},
|
|
224
|
+
installation,
|
|
225
|
+
connection,
|
|
226
|
+
action,
|
|
227
|
+
args,
|
|
228
|
+
agentId: available.agentId,
|
|
229
|
+
sessionKey: available.context?.sessionKey,
|
|
230
|
+
confirmed
|
|
231
|
+
});
|
|
232
|
+
if (result.decision === "confirmation_required") {
|
|
233
|
+
const approval = createConnectorApproval({
|
|
234
|
+
principalId: available.principalId,
|
|
235
|
+
connectorId: installation.connectorId,
|
|
236
|
+
connectionId: connection?.id,
|
|
237
|
+
agentId: available.agentId,
|
|
238
|
+
sessionKey: available.context?.sessionKey,
|
|
239
|
+
actionId: action.actionId,
|
|
240
|
+
scope: action.scope,
|
|
241
|
+
argumentsHash: argsHash,
|
|
242
|
+
argumentsPreview: connectorArgumentsPreview(args),
|
|
243
|
+
expiresAt: new Date(Date.now() + 10 * 6e4).toISOString()
|
|
244
|
+
});
|
|
245
|
+
return textResult({
|
|
246
|
+
status: "confirmation_required",
|
|
247
|
+
approvalId: approval.id,
|
|
248
|
+
actionId: approval.actionId,
|
|
249
|
+
scope: approval.scope,
|
|
250
|
+
argumentsPreview: approval.argumentsPreview,
|
|
251
|
+
expiresAt: approval.expiresAt,
|
|
252
|
+
instruction: "Ask the user to approve this exact action in xopc, then retry with the approvalId and unchanged arguments."
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
return textResult(result.decision === "allowed" ? result.result : result.reason);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
];
|
|
259
|
+
}
|
|
43
260
|
//#endregion
|
|
44
|
-
export {
|
|
261
|
+
export { connectorPrincipalForSession, createComposioTools };
|
|
45
262
|
|
|
46
263
|
//# sourceMappingURL=composio-tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composio-tool.js","names":[],"sources":["../../../../src/agent/tools/composio-tool.ts"],"sourcesContent":["import { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nimport type { Config } from '../../config/schema.js';\nimport { canUseComposioAction, executeComposioTool } from '../../connectors/composio.js';\n\nconst ComposioExecuteSchema = Type.Object({\n slug: Type.String({ description: 'Composio action slug, e.g. GMAIL_FETCH_EMAILS or SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL.' }),\n arguments: Type.Optional(Type.Any({ description: 'Action arguments matching the Composio action schema.' })),\n});\n\nfunction hasInstalledComposioConnector(config: Config | undefined): boolean {\n return Object.entries(config?.connectors?.instances ?? {}).some(([id, record]) => (\n id.startsWith('composio-') &&\n id !== 'composio-api-key' &&\n Boolean(record && typeof record === 'object' && !Array.isArray(record))\n ));\n}\n\nexport function createComposioExecuteTool(getConfig: () => Config | undefined): AgentTool<typeof ComposioExecuteSchema, {}> | null {\n if (!hasInstalledComposioConnector(getConfig())) {\n return null;\n }\n return {\n name: 'composio_execute',\n label: '🔌 Composio Execute',\n description: 'Execute an installed Composio integration action. Actions are gated by the connector curated allowlist and read/write/admin scope.',\n parameters: ComposioExecuteSchema,\n async execute(_toolCallId, params): Promise<AgentToolResult<{}>> {\n const config = getConfig();\n const allowed = canUseComposioAction(config, params.slug);\n if (allowed.ok === false) {\n return { content: [{ type: 'text', text: allowed.reason }], details: {} };\n }\n const result = await executeComposioTool({ slug: params.slug, arguments: params.arguments, config });\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n details: {},\n };\n },\n };\n}\n"],"mappings":";;;AAMA,MAAM,wBAAwB,KAAK,OAAO;CACxC,MAAM,KAAK,OAAO,EAAE,aAAa,8FAA8F,CAAC;CAChI,WAAW,KAAK,SAAS,KAAK,IAAI,EAAE,aAAa,yDAAyD,CAAC,CAAC;CAC7G,CAAC;AAEF,SAAS,8BAA8B,QAAqC;AAC1E,QAAO,OAAO,QAAQ,QAAQ,YAAY,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,YACpE,GAAG,WAAW,YAAY,IAC1B,OAAO,sBACP,QAAQ,UAAU,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,OAAO,CAAC,CACvE;;AAGJ,SAAgB,0BAA0B,WAAyF;AACjI,KAAI,CAAC,8BAA8B,WAAW,CAAC,CAC7C,QAAO;AAET,QAAO;EACL,MAAM;EACN,OAAO;EACP,aAAa;EACb,YAAY;EACZ,MAAM,QAAQ,aAAa,QAAsC;GAC/D,MAAM,SAAS,WAAW;GAC1B,MAAM,UAAU,qBAAqB,QAAQ,OAAO,KAAK;AACzD,OAAI,QAAQ,OAAO,MACjB,QAAO;IAAE,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM,QAAQ;KAAQ,CAAC;IAAE,SAAS,EAAE;IAAE;GAE3E,MAAM,SAAS,MAAM,oBAAoB;IAAE,MAAM,OAAO;IAAM,WAAW,OAAO;IAAW;IAAQ,CAAC;AACpG,UAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,EAAE;KAAE,CAAC;IAClE,SAAS,EAAE;IACZ;;EAEJ"}
|
|
1
|
+
{"version":3,"file":"composio-tool.js","names":[],"sources":["../../../../src/agent/tools/composio-tool.ts"],"sourcesContent":["import type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\nimport { Type } from '@sinclair/typebox';\n\nimport type { Config } from '../../config/schema.js';\nimport { connectorArgumentsHash, connectorArgumentsPreview } from '../../connectors/approval.js';\nimport { getConnectorDefinition } from '../../connectors/catalog.js';\nimport { ComposioSessionsAdapter } from '../../connectors/composio-sessions.js';\nimport {\n getComposioToolkitScope,\n isComposioActionAllowedByCatalog,\n scopeForComposioAction,\n} from '../../connectors/composio.js';\nimport type { ConnectorActionMetadata, ConnectorInstallationPolicy } from '../../connectors/types.js';\nimport { parseSessionKey } from '../../routing/session-key.js';\nimport {\n consumeConnectorApproval,\n createConnectorApproval,\n getConnectorApproval,\n getConnectorInstallation,\n listConnectorActionMetadata,\n listConnectorConnections,\n listConnectorInstallations,\n upsertConnectorActionMetadata,\n upsertConnectorInstallation,\n} from '../../storage/sqlite/index.js';\n\nconst ComposioSearchSchema = Type.Object({\n query: Type.String({ description: 'Describe the task or information you need from connected apps.' }),\n toolkits: Type.Optional(Type.Array(Type.String(), { maxItems: 8, description: 'Optional installed app slugs to search.' })),\n});\n\nconst ComposioConnectSchema = Type.Object({\n toolkit: Type.String({ description: 'Installed Composio app slug, for example gmail or notion.' }),\n alias: Type.Optional(Type.String({ description: 'Optional account label such as Personal or Work.' })),\n});\n\nconst ComposioExecuteSchema = Type.Object({\n actionId: Type.String({ description: 'Exact action slug returned by composio_search.' }),\n arguments: Type.Optional(Type.Record(Type.String(), Type.Unknown(), { description: 'Arguments matching the exact contract returned by composio_search.' })),\n connectionId: Type.Optional(Type.String({ description: 'Local connection id when more than one account is connected.' })),\n approvalId: Type.Optional(Type.String({ description: 'Approval id after the user explicitly approves a pending write/admin action.' })),\n});\n\ntype CurrentContext = { channel: string; chatId: string; sessionKey: string } | null;\n\nexport type ComposioToolDeps = {\n getConfig: () => Config | undefined;\n getCurrentContext: () => CurrentContext;\n agentId?: string;\n adapter?: ComposioSessionsAdapter;\n};\n\nfunction textResult(value: unknown): AgentToolResult<Record<string, unknown>> {\n return {\n content: [{ type: 'text', text: typeof value === 'string' ? value : JSON.stringify(value, null, 2) }],\n details: {},\n };\n}\n\nexport function connectorPrincipalForSession(sessionKey: string | undefined): { principalId: string; agentId?: string; isLocalOwner: boolean } {\n const parsed = parseSessionKey(sessionKey);\n if (!parsed || parsed.source === 'cli' || parsed.source === 'webchat') {\n return { principalId: 'local-owner', agentId: parsed?.agentId, isLocalOwner: true };\n }\n return {\n principalId: `channel:${parsed.source}:${parsed.accountId}:${parsed.peerKind}:${parsed.peerId}`,\n agentId: parsed.agentId,\n isLocalOwner: false,\n };\n}\n\ntype InstalledComposioToolkit = { connectorId: string; toolkit: string };\n\nfunction installedConfigToolkits(config: Config | undefined): InstalledComposioToolkit[] {\n return Object.entries(config?.connectors?.instances ?? {}).flatMap(([_instanceId, record]) => {\n if (!record || typeof record !== 'object' || Array.isArray(record)) return [];\n const row = record as Record<string, unknown>;\n const marker = row.xopcConnector;\n if (marker && typeof marker === 'object' && !Array.isArray(marker) && (marker as Record<string, unknown>).enabled === false) return [];\n const connectorId = marker && typeof marker === 'object' && !Array.isArray(marker)\n ? (marker as Record<string, unknown>).connectorId\n : undefined;\n const runtime = row.runtime;\n if (\n typeof connectorId !== 'string' ||\n !runtime ||\n typeof runtime !== 'object' ||\n Array.isArray(runtime) ||\n (runtime as Record<string, unknown>).type !== 'composio' ||\n (runtime as Record<string, unknown>).role !== 'toolkit' ||\n typeof (runtime as Record<string, unknown>).toolkit !== 'string'\n ) return [];\n return [{ connectorId, toolkit: (runtime as Record<string, string>).toolkit }];\n });\n}\n\nfunction syncLocalOwnerInstallations(config: Config | undefined): void {\n for (const { connectorId, toolkit } of installedConfigToolkits(config)) {\n const id = `${connectorId}-local-owner`;\n const existing = getConnectorInstallation(id);\n upsertConnectorInstallation({\n id,\n connectorId,\n principalId: 'local-owner',\n enabled: true,\n allowedAgentIds: existing?.allowedAgentIds ?? [],\n maxScope: getComposioToolkitScope(config, toolkit),\n confirmationPolicy: existing?.confirmationPolicy ?? 'writes',\n selectedConnectionIds: existing?.selectedConnectionIds ?? [],\n createdAt: existing?.createdAt,\n });\n }\n}\n\nfunction availableInstallations(deps: ComposioToolDeps): {\n principalId: string;\n agentId?: string;\n context: CurrentContext;\n installations: ConnectorInstallationPolicy[];\n} {\n const context = deps.getCurrentContext();\n const principal = connectorPrincipalForSession(context?.sessionKey);\n if (principal.isLocalOwner) syncLocalOwnerInstallations(deps.getConfig());\n const agentId = deps.agentId ?? principal.agentId;\n const installations = listConnectorInstallations(principal.principalId).filter((installation) => (\n installation.enabled &&\n composioToolkitFromConnectorId(installation.connectorId) !== undefined &&\n (installation.allowedAgentIds.length === 0 || Boolean(agentId && installation.allowedAgentIds.includes(agentId)))\n ));\n return { principalId: principal.principalId, agentId, context, installations };\n}\n\nfunction composioToolkitFromConnectorId(connectorId: string): string | undefined {\n const definition = getConnectorDefinition(connectorId);\n return definition?.runtime.type === 'composio' && definition.runtime.role === 'toolkit'\n ? definition.runtime.toolkit\n : undefined;\n}\n\nfunction toolkitFromInstallation(installation: ConnectorInstallationPolicy): string {\n const toolkit = composioToolkitFromConnectorId(installation.connectorId);\n if (!toolkit) throw new Error(`Connector installation is not a Composio toolkit: ${installation.connectorId}`);\n return toolkit;\n}\n\nfunction toolkitForAction(actionId: string, candidates: string[]): string | undefined {\n const normalizedAction = actionId.trim().toUpperCase();\n return [...candidates]\n .sort((left, right) => right.length - left.length)\n .find((toolkit) => normalizedAction === toolkit.toUpperCase() || normalizedAction.startsWith(`${toolkit.toUpperCase()}_`));\n}\n\nfunction contractFromSearch(connectorId: string, toolkit: string, actionId: string, value: unknown): ConnectorActionMetadata {\n const row = value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : {};\n const risk = scopeForComposioAction(actionId);\n return {\n connectorId,\n actionId,\n toolkit,\n scope: risk.scope,\n curated: risk.curated,\n inputSchema: row.inputSchema,\n cachedAt: new Date().toISOString(),\n };\n}\n\nexport function createComposioTools(deps: ComposioToolDeps): AgentTool[] {\n if (installedConfigToolkits(deps.getConfig()).length === 0) return [];\n const adapter = deps.adapter ?? new ComposioSessionsAdapter();\n\n const searchTool: AgentTool<typeof ComposioSearchSchema, Record<string, unknown>> = {\n name: 'composio_search',\n label: '🔎 Connected Apps Search',\n description: 'Discover exact actions and argument contracts for the connected apps allowed in this session. Call this before composio_execute.',\n parameters: ComposioSearchSchema,\n async execute(_toolCallId, params) {\n const available = availableInstallations(deps);\n const installedToolkits = available.installations.map(toolkitFromInstallation);\n const requested = params.toolkits?.length\n ? params.toolkits.map((toolkit) => toolkit.toLowerCase()).filter((toolkit) => installedToolkits.includes(toolkit))\n : installedToolkits;\n if (requested.length === 0) return textResult('No connected apps are allowed for this user and agent.');\n const session = await adapter.createSession({ principalId: available.principalId, toolkits: requested });\n const result = await session.search({ query: params.query, toolkits: requested });\n let visibleResult = result;\n if (result && typeof result === 'object' && !Array.isArray(result)) {\n const schemas = (result as Record<string, unknown>).toolSchemas;\n if (schemas && typeof schemas === 'object' && !Array.isArray(schemas)) {\n const visibleSchemas: Record<string, unknown> = {};\n for (const [actionId, schema] of Object.entries(schemas)) {\n const toolkit = toolkitForAction(actionId, requested);\n if (toolkit && requested.includes(toolkit)) {\n if (!isComposioActionAllowedByCatalog(actionId)) continue;\n visibleSchemas[actionId] = schema;\n const installation = available.installations.find((candidate) => toolkitFromInstallation(candidate) === toolkit);\n if (installation) upsertConnectorActionMetadata(contractFromSearch(installation.connectorId, toolkit, actionId, schema));\n }\n }\n visibleResult = { ...(result as Record<string, unknown>), toolSchemas: visibleSchemas };\n }\n }\n return textResult(visibleResult);\n },\n };\n\n const connectTool: AgentTool<typeof ComposioConnectSchema, Record<string, unknown>> = {\n name: 'composio_connect',\n label: '🔐 Connect App Account',\n description: 'Create an authorization link for an installed app. Never claims the connection succeeded until it is checked again.',\n parameters: ComposioConnectSchema,\n async execute(_toolCallId, params) {\n const available = availableInstallations(deps);\n const toolkit = params.toolkit.trim().toLowerCase();\n const installation = available.installations.find((candidate) => toolkitFromInstallation(candidate) === toolkit);\n if (!installation) return textResult('This app is not installed or is not allowed for this user and agent.');\n const authorization = await adapter.authorize({\n principalId: available.principalId,\n toolkit,\n installationId: installation.id,\n alias: params.alias,\n });\n return textResult({\n status: authorization.status,\n toolkit,\n authorizationUrl: authorization.connectUrl,\n connectionId: authorization.connectionId,\n instruction: 'Ask the user to open the authorization URL. Check the connection again after they finish.',\n });\n },\n };\n\n const executeTool: AgentTool<typeof ComposioExecuteSchema, Record<string, unknown>> = {\n name: 'composio_execute',\n label: '🔌 Connected App Action',\n description: 'Execute an exact action returned by composio_search. Write and admin actions require a user-approved approvalId.',\n parameters: ComposioExecuteSchema,\n async execute(_toolCallId, params) {\n const available = availableInstallations(deps);\n const toolkit = toolkitForAction(params.actionId, available.installations.map(toolkitFromInstallation));\n if (!toolkit) return textResult('Unknown toolkit for this action. Call composio_search first.');\n const installation = available.installations.find((candidate) => toolkitFromInstallation(candidate) === toolkit);\n if (!installation) return textResult('This app is not allowed for this user and agent.');\n if (!isComposioActionAllowedByCatalog(params.actionId)) {\n return textResult('This action is not in the connector curated action catalog.');\n }\n const action = listConnectorActionMetadata(installation.connectorId)\n .find((candidate) => candidate.actionId === params.actionId);\n if (!action?.inputSchema) {\n return textResult('The exact action contract is not cached. Call composio_search for this task before executing.');\n }\n await adapter.syncConnections({ principalId: available.principalId }).catch(() => []);\n const connections = listConnectorConnections({\n principalId: available.principalId,\n connectorId: installation.connectorId,\n }).filter((connection) => connection.status === 'active');\n const connection = params.connectionId\n ? connections.find((candidate) => candidate.id === params.connectionId)\n : connections.find((candidate) => candidate.isDefault) ?? connections[0];\n const args = params.arguments ?? {};\n const argsHash = connectorArgumentsHash(args);\n let confirmed = false;\n if (params.approvalId) {\n const pending = getConnectorApproval(params.approvalId);\n if (\n !pending ||\n pending.principalId !== available.principalId ||\n pending.connectorId !== installation.connectorId ||\n pending.actionId !== action.actionId ||\n pending.sessionKey !== available.context?.sessionKey\n ) {\n return textResult('The connector approval is invalid for this session or action.');\n }\n confirmed = Boolean(consumeConnectorApproval(params.approvalId, argsHash));\n if (!confirmed) return textResult('The connector approval is not approved, has expired, or was already used.');\n }\n const result = await adapter.executeWithPolicy({\n context: { principalId: available.principalId, toolkits: [toolkit] },\n installation,\n connection,\n action,\n args,\n agentId: available.agentId,\n sessionKey: available.context?.sessionKey,\n confirmed,\n });\n if (result.decision === 'confirmation_required') {\n const approval = createConnectorApproval({\n principalId: available.principalId,\n connectorId: installation.connectorId,\n connectionId: connection?.id,\n agentId: available.agentId,\n sessionKey: available.context?.sessionKey,\n actionId: action.actionId,\n scope: action.scope,\n argumentsHash: argsHash,\n argumentsPreview: connectorArgumentsPreview(args),\n expiresAt: new Date(Date.now() + 10 * 60_000).toISOString(),\n });\n return textResult({\n status: 'confirmation_required',\n approvalId: approval.id,\n actionId: approval.actionId,\n scope: approval.scope,\n argumentsPreview: approval.argumentsPreview,\n expiresAt: approval.expiresAt,\n instruction: 'Ask the user to approve this exact action in xopc, then retry with the approvalId and unchanged arguments.',\n });\n }\n return textResult(result.decision === 'allowed' ? result.result : result.reason);\n },\n };\n\n return [searchTool, connectTool, executeTool];\n}\n"],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ import { createFindTool } from "./find.js";
|
|
|
13
13
|
import { createWebFetchTool, createWebSearchTool } from "./web.js";
|
|
14
14
|
import { createWebExtractTool } from "./web-extract.js";
|
|
15
15
|
import { createMessageTool } from "./communication.js";
|
|
16
|
-
import {
|
|
16
|
+
import { createComposioTools } from "./composio-tool.js";
|
|
17
17
|
import { createSendMediaTool } from "./send-media.js";
|
|
18
18
|
import { createReadMediaTool } from "./media-read-tool.js";
|
|
19
19
|
import { createCreateShareTool, isShareToolAvailable } from "./create-share-tool.js";
|
|
@@ -29,7 +29,6 @@ import { checkBrowserReadiness } from "../../browser/readiness.js";
|
|
|
29
29
|
import { CdpSupervisor } from "../../browser/cdp-supervisor.js";
|
|
30
30
|
import "../../browser/index.js";
|
|
31
31
|
import "./delegate-tool.js";
|
|
32
|
-
import { createWorkflowCatalog } from "../workflow/catalog.js";
|
|
33
32
|
import { createWorkflowTool } from "./workflow-tool.js";
|
|
34
33
|
import "./execute-code-tool.js";
|
|
35
34
|
import { createAutomationTool } from "./automation-tool.js";
|
|
@@ -46,6 +45,7 @@ import { createImageGenerateTool } from "./image-generate-tool.js";
|
|
|
46
45
|
import "./index.js";
|
|
47
46
|
import { shouldRegisterCuratedMemoryTool } from "../memory/memory-config.js";
|
|
48
47
|
import { createBrowserUseTool } from "./browser/tool/browser-use-tool.js";
|
|
48
|
+
import { createWorkflowCatalog } from "../workflow/catalog.js";
|
|
49
49
|
import { resolveDreamingRootForAgent } from "../memory/dreaming/scope.js";
|
|
50
50
|
import { wrapToolsWithProtection } from "./executor.js";
|
|
51
51
|
import { mergeTtsConfigFromAppConfig } from "../../voice/tts/merge-config.js";
|
|
@@ -179,7 +179,11 @@ var AgentToolsFactory = class {
|
|
|
179
179
|
const optionalTools = [
|
|
180
180
|
imageTool,
|
|
181
181
|
imageGenerateTool,
|
|
182
|
-
|
|
182
|
+
...createComposioTools({
|
|
183
|
+
getConfig: () => this.deps.getConfig?.(),
|
|
184
|
+
getCurrentContext: this.deps.getCurrentContext,
|
|
185
|
+
agentId
|
|
186
|
+
})
|
|
183
187
|
].filter((t) => t != null);
|
|
184
188
|
const readTool = createReadFileTool(workspace, { profileMarkdownRoot: options?.profileMarkdownRoot });
|
|
185
189
|
const writeTool = createWriteFileTool(workspace, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","names":[],"sources":["../../../../src/agent/tools/factory.ts"],"sourcesContent":["/**\n * Agent Tools Factory - Creates and configures agent tools\n *\n * Centralizes tool creation logic to keep service.ts focused on orchestration.\n *\n * TTS: auto TTS is applied at the ChannelManager via maybeApplyTtsToPayload().\n * Optional \\`text_to_speech\\` tool sends explicit voice when TTS is enabled.\n */\n\nimport type { AgentTool } from '@earendil-works/pi-agent-core';\nimport type { Model, Api } from '@earendil-works/pi-ai';\nimport type { Page } from 'playwright-core';\nimport type { Config } from '../../config/schema.js';\nimport type { MessageBus } from '../../infra/bus/index.js';\nimport {\n createReadFileTool,\n createWriteFileTool,\n createApplyPatchTool,\n createListDirTool,\n createGrepTool,\n createFindTool,\n createExecCommandTool,\n createWebSearchTool,\n createWebFetchTool,\n createWebExtractTool,\n createMessageTool,\n createComposioExecuteTool,\n createSendMediaTool,\n createReadMediaTool,\n createCreateShareTool,\n isShareToolAvailable,\n createMemorySearchTool,\n createMemoryGetTool,\n createTodoTool,\n createUpdatePlanTool,\n createSessionStatusTool,\n createDreamingTool,\n createClarifyTool,\n createToolManualTool,\n createGoalTool,\n createAutomationTool,\n createXopcUseTool,\n createDesktopPetTool,\n createSkillInstallTool,\n createCodeIntelligenceTools,\n type SkillInstallToolOptions,\n type SkillInstallToolResult,\n} from './index.js';\nimport { createCuratedMemoryTool } from './curated-memory-tool.js';\nimport { createSessionSearchTool } from './session-search-tool.js';\nimport type { MemoryManager } from '../memory/manager.js';\nimport { shouldRegisterCuratedMemoryTool } from '../memory/memory-config.js';\nimport type { SessionStore } from '../../session/store.js';\nimport type { GatewayClarifyRequestFn } from './clarify-tool.js';\nimport { createImageTool } from './image-tool.js';\nimport { createImageGenerateTool } from './image-generate-tool.js';\nimport {\n BrowserManager,\n BrowserNotReadyError,\n CdpSupervisor,\n checkBrowserReadiness,\n resolveBrowserBackendFromConfig,\n} from '../../browser/index.js';\nimport { createBrowserUseTool } from './browser/tool/browser-use-tool.js';\nimport { createDelegateTool } from './delegate-tool.js';\nimport { createWorkflowTool } from './workflow-tool.js';\nimport { createWorkflowCatalog } from '../workflow/catalog.js';\nimport { resolveDreamingRootForAgent } from '../memory/dreaming/scope.js';\nimport { resolveDreamingConfig } from '../memory/dreaming/config.js';\nimport { buildSandboxToolMap, createExecuteCodeTool } from './execute-code-tool.js';\nimport type { AutomationService } from '../../automations/index.js';\nimport type { NotesService } from '../../notes/index.js';\nimport type { ProjectService } from '../../projects/index.js';\nimport type { WorkItemService } from '../../work-items/index.js';\nimport type { WorkflowRunServiceLike } from '../../workflows/service/workflow-run-service.types.js';\nimport { createLogger } from '../../utils/logger.js';\nimport type { SkillManager } from '../skills/skill-manager.js';\nimport { wrapToolsWithProtection, type ToolExecutorConfig } from './executor.js';\nimport { createSkillsListTool, createSkillViewTool } from './skills-tools.js';\nimport { createSkillManageTool } from './skill-manage-tool.js';\nimport { createTextToSpeechTool } from './tts-tool.js';\nimport { mergeTtsConfigFromAppConfig } from '../../voice/tts/merge-config.js';\nimport { createGoalEvidenceRecorder } from './goal-evidence-recorder.js';\nimport { getAgentCapabilityToolNames } from '../capabilities/index.js';\nimport type { CodeIntelligenceRuntimeLike } from '../code-intelligence/index.js';\n\nconst log = createLogger('AgentToolsFactory');\n\n/** Channels where `clarify` can block for a user answer (web UI, Telegram, CLI readline). */\nconst CLARIFY_SUPPORTED_CHANNELS = new Set(['webchat', 'telegram', 'cli']);\n\nexport interface ToolFactoryDeps {\n workspace: string;\n extensionRegistry?: any;\n getCurrentContext: () => { channel: string; chatId: string; sessionKey: string } | null;\n hookRunner?: import('../../extensions/index.js').ExtensionHookRunner;\n bus: MessageBus;\n toolExecutorConfig?: Partial<ToolExecutorConfig>;\n /** Agent defaults (image tools, etc.); use getter so hot-reloaded config applies. */\n getConfig?: () => Config | undefined;\n /** Session / default chat model for vision tool description. */\n getPrimaryModel?: () => Model<Api>;\n /** Memory orchestration (prefetch/sync + external tools). */\n getMemoryManager?: () => MemoryManager;\n /** Session store for `session_search`. */\n getSessionStore?: () => SessionStore;\n /** When set (gateway webchat), enables the `clarify` tool. */\n gatewayClarify?: { requestClarification: GatewayClarifyRequestFn };\n /** Gateway: enables the `automation` tool. */\n getAutomationService?: () => AutomationService | undefined;\n /** Gateway: enables the `xopc_use` product-object tool. */\n getNotesService?: () => NotesService | undefined;\n getProjectService?: () => ProjectService | undefined;\n getWorkItemService?: () => WorkItemService | undefined;\n /** Gateway: starts persisted workflow runs (dedicated chat session per run). */\n getWorkflowRunService?: () => WorkflowRunServiceLike | undefined;\n /** Current session skill indexing (tool gating + allowlist); used by skills_list / skill_view. */\n getSkillIndexingContext?: () =>\n | { registeredToolNames: string[]; skillAllowlist?: string[] }\n | undefined;\n /** After skill_manage mutates disk, reload skills + refresh agent prompts (optional). */\n onSkillsFilesystemMutate?: () => void;\n /** Names registered via skill_view for command env passthrough. */\n getSkillPassthroughEnvVarNames?: () => string[];\n /** Add declared env names for the current session (no values stored). */\n registerSkillEnvPassthrough?: (names: string[]) => void;\n /** Install managed skills from explicit sources when a capability/tool enables it. */\n installSkillFromSource?: (opts: SkillInstallToolOptions) => Promise<SkillInstallToolResult>;\n /** Workspace-scoped structural code intelligence runtime. */\n getCodeIntelligenceRuntime?: (workspace: string) => CodeIntelligenceRuntimeLike;\n}\n\nexport interface CreateCoreToolsOptions {\n /** Workspace root for file/command tools (defaults to factory workspace). */\n workspace?: string;\n /** Canonical `agents/<id>/profile/`: bare SOUL.md / IDENTITY.md resolve here after the workspace. */\n profileMarkdownRoot?: string;\n /** Tool `name` values to omit (e.g. `exec_command`, `extensions` for extension tools). */\n disabledTools?: Set<string>;\n /** Optional primary model for image tool heuristics. */\n getPrimaryModel?: () => Model<Api>;\n getMemoryManager?: () => MemoryManager;\n /** Agent-scoped memories directory used for dreaming state (`agents/<id>/memories`). */\n dreamingRoot?: string;\n agentId?: string;\n /** When set, registers `skills_list` and `skill_view` bound to this workspace\\'s skills. */\n getSkillManager?: () => SkillManager;\n}\n\nexport class AgentToolsFactory {\n private browserManager: BrowserManager | null = null;\n /** One dialog/console supervisor per chat session (browser tab). */\n private readonly browserTaskSupervisors = new Map<string, CdpSupervisor>();\n /** Cached readiness probe — keyed by backend mode + extension host:port. */\n private browserReadinessCache: {\n key: string;\n expiresAt: number;\n inflight?: Promise<BrowserNotReadyError | null>;\n result?: BrowserNotReadyError | null;\n } | null = null;\n\n constructor(private deps: ToolFactoryDeps) {}\n\n private browserReadinessKey(): string {\n const cfg = this.deps.getConfig?.();\n const backend = resolveBrowserBackendFromConfig(cfg);\n const host = '127.0.0.1';\n const port = 19820;\n const cdpUrl = backend.mode === 'cdp' ? backend.config.wsEndpoint : '';\n const cloudKind = backend.mode === 'cloud' ? backend.config.type : '';\n return `${backend.mode}@${host}:${port}|${cdpUrl}|${cloudKind}`;\n }\n\n private async checkBrowserReadinessCached(): Promise<BrowserNotReadyError | null> {\n const key = this.browserReadinessKey();\n const now = Date.now();\n const cached = this.browserReadinessCache;\n if (cached && cached.key === key && cached.expiresAt > now && cached.inflight === undefined) {\n return cached.result ?? null;\n }\n if (cached && cached.key === key && cached.inflight) {\n return cached.inflight;\n }\n const inflight = checkBrowserReadiness(this.deps.getConfig?.());\n this.browserReadinessCache = { key, expiresAt: now + 30_000, inflight };\n try {\n const result = await inflight;\n this.browserReadinessCache = { key, expiresAt: Date.now() + 30_000, result };\n return result;\n } catch (e) {\n // Probe should never throw, but if it does we just bypass the cache.\n this.browserReadinessCache = null;\n log.warn({ err: e }, 'browserReadiness probe failed');\n return null;\n }\n }\n\n /** Invalidate the readiness cache (config hot-reload, settings-page save, etc.). */\n invalidateBrowserReadinessCache(): void {\n this.browserReadinessCache = null;\n }\n\n private browserSupervisorForTask(taskId: string): CdpSupervisor {\n let s = this.browserTaskSupervisors.get(taskId);\n if (!s) {\n s = new CdpSupervisor({ dialogPolicy: 'auto_dismiss', dialogTimeoutSeconds: 300 });\n this.browserTaskSupervisors.set(taskId, s);\n }\n return s;\n }\n\n private async acquireBrowserPage(): Promise<Page> {\n const taskId = this.deps.getCurrentContext()?.sessionKey ?? 'default';\n const mgr = this.ensureBrowserManager();\n await mgr.ensureConnected();\n if (mgr.getExtensionProvider()) {\n return null as unknown as Page;\n }\n const page = await mgr.getPage(taskId);\n this.browserSupervisorForTask(taskId).attach(page);\n return page;\n }\n\n private ensureBrowserManager(): BrowserManager {\n if (!this.browserManager) {\n this.browserManager = new BrowserManager({\n getHeadless: () => false,\n getBackend: () => resolveBrowserBackendFromConfig(this.deps.getConfig?.()),\n });\n }\n return this.browserManager;\n }\n\n /** Close Playwright and all pages (gateway stop, agent manager dispose, or config hot-reload). */\n async shutdownBrowser(): Promise<void> {\n this.browserReadinessCache = null;\n if (!this.browserManager) {\n return;\n }\n await this.browserManager.shutdown();\n this.browserManager = null;\n this.browserTaskSupervisors.clear();\n }\n\n /** Drop the tab for a session when its agent instance is removed. */\n async closeBrowserPageForSession(sessionKey: string): Promise<void> {\n this.browserTaskSupervisors.delete(sessionKey);\n await this.browserManager?.closePage(sessionKey);\n }\n\n createCoreTools(options?: CreateCoreToolsOptions): AgentTool<any, any>[] {\n const workspace = options?.workspace ?? this.deps.workspace;\n const { bus } = this.deps;\n const getPrimary = options?.getPrimaryModel ?? this.deps.getPrimaryModel;\n const getMemMgr = options?.getMemoryManager ?? this.deps.getMemoryManager;\n const getSkillMgr = options?.getSkillManager;\n const disabled = options?.disabledTools;\n\n const primary = getPrimary?.();\n const modelHasVision = primary?.input?.includes('image') ?? false;\n const cfg = this.deps.getConfig?.();\n const dreamingRoot = options?.dreamingRoot ?? (cfg ? resolveDreamingRootForAgent(cfg, options?.agentId) : workspace);\n const browserEnabled = cfg?.browser?.enabled !== false;\n const recordGoalEvidence = createGoalEvidenceRecorder({\n getSessionKey: () => this.deps.getCurrentContext()?.sessionKey,\n });\n const imageTool = createImageTool({\n config: cfg,\n workspace,\n modelHasVision,\n agentId: options?.agentId,\n });\n const imageGenerateTool = createImageGenerateTool({\n config: cfg,\n workspace,\n });\n const codeIntelligenceConfig = cfg?.codeIntelligence;\n const agentId = options?.agentId;\n const codeIntelligenceEnabled =\n codeIntelligenceConfig?.enabled === true &&\n agentId !== undefined &&\n codeIntelligenceConfig.agentIds.includes(agentId);\n const codeIntelligenceTools = codeIntelligenceEnabled && this.deps.getCodeIntelligenceRuntime\n ? createCodeIntelligenceTools({\n getRuntime: () => this.deps.getCodeIntelligenceRuntime!(workspace),\n })\n : [];\n\n const composioTool = createComposioExecuteTool(() => this.deps.getConfig?.());\n const optionalTools = [imageTool, imageGenerateTool, composioTool].filter((t) => t != null) as any[];\n\n const readTool = createReadFileTool(workspace, {\n profileMarkdownRoot: options?.profileMarkdownRoot,\n });\n const writeTool = createWriteFileTool(workspace, {\n profileMarkdownRoot: options?.profileMarkdownRoot,\n recordGoalEvidence,\n });\n const applyPatchTool = createApplyPatchTool(workspace, { recordGoalEvidence });\n const listDir = createListDirTool(workspace);\n const grep = createGrepTool(workspace);\n const find = createFindTool(workspace);\n\n const core: AgentTool<any, any>[] = [\n createSessionStatusTool(),\n createDreamingTool({\n getWorkspace: () => workspace,\n getDreamingRoot: () => dreamingRoot,\n getConfig: () => this.deps.getConfig?.(),\n getAgentId: () => options?.agentId,\n }),\n createToolManualTool(),\n createClarifyTool({\n resolveAskUser: () => {\n const req = this.deps.gatewayClarify?.requestClarification;\n if (!req) return null;\n const ctx = this.deps.getCurrentContext();\n if (!ctx?.sessionKey) return null;\n if (!CLARIFY_SUPPORTED_CHANNELS.has(ctx.channel)) return null;\n return (r) => req(ctx.sessionKey, r);\n },\n }),\n createTodoTool({\n getSessionKey: () => this.deps.getCurrentContext()?.sessionKey,\n }),\n createUpdatePlanTool(),\n ...(getSkillMgr\n ? [\n createSkillsListTool({\n getSkillManager: getSkillMgr,\n getSkillIndexingContext: this.deps.getSkillIndexingContext,\n }),\n createSkillViewTool({\n getSkillManager: getSkillMgr,\n getSkillIndexingContext: this.deps.getSkillIndexingContext,\n registerSkillEnvPassthrough: this.deps.registerSkillEnvPassthrough,\n }),\n createSkillManageTool({\n getSkillManager: getSkillMgr,\n getWorkspace: () => workspace,\n onSkillsFilesystemMutate: this.deps.onSkillsFilesystemMutate,\n }),\n ]\n : []),\n readTool,\n ...codeIntelligenceTools,\n writeTool,\n applyPatchTool,\n listDir,\n grep,\n find,\n createExecCommandTool(workspace, {\n getSkillPassthroughEnvVarNames: this.deps.getSkillPassthroughEnvVarNames,\n recordGoalEvidence,\n }),\n createWebSearchTool(() => this.deps.getConfig?.()),\n createWebFetchTool(() => this.deps.getConfig?.()),\n createWebExtractTool({ getConfig: () => this.deps.getConfig?.() }),\n // Note: TTS is NOT handled by send_message tool anymore\n // TTS is applied at the ChannelManager dispatch layer\n createMessageTool(bus, () => this.deps.getCurrentContext()),\n ...(mergeTtsConfigFromAppConfig(cfg?.messages?.tts).enabled\n ? [\n createTextToSpeechTool({\n bus,\n getContext: () => this.deps.getCurrentContext(),\n getConfig: () => this.deps.getConfig?.(),\n }),\n ]\n : []),\n createSendMediaTool(workspace, bus, () => this.deps.getCurrentContext()),\n createReadMediaTool(),\n ...(isShareToolAvailable(cfg)\n ? [\n createCreateShareTool({\n workspace,\n getConfig: () => this.deps.getConfig?.(),\n }),\n ]\n : []),\n ...(getMemMgr\n ? [\n createMemorySearchTool({\n workspaceDir: workspace,\n dreamingRoot,\n getMemoryManager: () => getMemMgr(),\n getScope: () => ({\n ...(options?.agentId ? { agentId: options.agentId } : {}),\n workspaceId: workspace,\n ...(this.deps.getCurrentContext?.()?.sessionKey\n ? { sessionKey: this.deps.getCurrentContext!()!.sessionKey }\n : {}),\n }),\n shouldRecordDreamingRecalls: () =>\n resolveDreamingConfig(this.deps.getConfig?.(), options?.agentId).enabled,\n }),\n createMemoryGetTool({\n workspaceDir: workspace,\n dreamingRoot,\n getMemoryManager: () => getMemMgr(),\n getScope: () => ({\n ...(options?.agentId ? { agentId: options.agentId } : {}),\n workspaceId: workspace,\n ...(this.deps.getCurrentContext?.()?.sessionKey\n ? { sessionKey: this.deps.getCurrentContext!()!.sessionKey }\n : {}),\n }),\n }),\n ]\n : []),\n ...(getMemMgr && shouldRegisterCuratedMemoryTool(this.deps.getConfig?.())\n ? [\n createCuratedMemoryTool(() => getMemMgr()),\n ]\n : []),\n ...(getMemMgr?.().getAdditionalTools() ?? []),\n ...(this.deps.getSessionStore\n ? [\n createSessionSearchTool({\n getSessionStore: this.deps.getSessionStore,\n getConfig: this.deps.getConfig,\n getCurrentSessionKey: () => this.deps.getCurrentContext()?.sessionKey,\n }),\n ]\n : []),\n ...(this.deps.getAutomationService\n ? [\n createAutomationTool({\n getAutomationService: this.deps.getAutomationService,\n }),\n ]\n : []),\n ...(this.deps.getProjectService || this.deps.getNotesService || this.deps.getWorkItemService\n ? [\n createXopcUseTool({\n getConfig: () => this.deps.getConfig?.(),\n getCurrentAgentId: () => options.agentId,\n getCurrentSessionKey: () => this.deps.getCurrentContext()?.sessionKey,\n getNotesService: this.deps.getNotesService,\n getProjectService: this.deps.getProjectService,\n getWorkItemService: this.deps.getWorkItemService,\n }),\n ]\n : []),\n createGoalTool({\n getCurrentSessionKey: () => this.deps.getCurrentContext()?.sessionKey,\n }),\n ...(browserEnabled\n ? [\n createBrowserUseTool({\n getManager: () => this.ensureBrowserManager(),\n getPageForTask: () => this.acquireBrowserPage(),\n getTaskId: () => this.deps.getCurrentContext()?.sessionKey ?? 'default',\n getConfig: () => this.deps.getConfig?.(),\n getReadiness: () => this.checkBrowserReadinessCached(),\n getSupervisor: () =>\n this.browserSupervisorForTask(this.deps.getCurrentContext()?.sessionKey ?? 'default'),\n notifyBrowserPageClosed: (taskId) => {\n this.browserTaskSupervisors.delete(taskId);\n },\n }),\n ]\n : []),\n ...(primary\n ? [\n createWorkflowTool({\n catalog: createWorkflowCatalog(),\n getCurrentSessionKey: () => this.deps.getCurrentContext()?.sessionKey,\n getConfig: () => this.deps.getConfig?.(),\n startWorkflowRun: this.deps.getWorkflowRunService\n ? (params) => this.deps.getWorkflowRunService!().startWorkflowRun(params)\n : undefined,\n }),\n ]\n : []),\n ...(false && primary\n ? [\n createDelegateTool({\n workspace,\n getSubagentModel: () => {\n const gp = options?.getPrimaryModel ?? this.deps.getPrimaryModel;\n const m = gp?.();\n if (!m) {\n throw new Error('No primary model configured for delegate_task');\n }\n return m;\n },\n bus: this.deps.bus,\n getConfig: () => this.deps.getConfig?.(),\n getCurrentContext: () => this.deps.getCurrentContext?.() ?? null,\n hookRunner: this.deps.hookRunner,\n toolExecutorConfig: this.deps.toolExecutorConfig,\n // Injected so `child-agent-factory.ts` does not need to import\n // `AgentToolsFactory` directly (which would form a cycle).\n buildChildTools: (childOpts) => {\n const childFactory = new AgentToolsFactory({\n workspace: childOpts.workspace,\n bus: childOpts.bus,\n getCurrentContext: () => null,\n getConfig: childOpts.getConfig,\n getPrimaryModel: () => childOpts.model,\n toolExecutorConfig: childOpts.toolExecutorConfig,\n });\n return childFactory.createAllTools({\n workspace: childOpts.workspace,\n getPrimaryModel: () => childOpts.model,\n agentId: options?.agentId ?? childOpts.agentId,\n dreamingRoot: options?.dreamingRoot,\n disabledTools: new Set(['extensions']),\n });\n },\n }),\n ]\n : []),\n ...optionalTools,\n ];\n\n return filterToolsByDisabledSet(core, disabled);\n }\n\n createCapabilityTools(\n capabilityNames: readonly string[],\n options?: Pick<CreateCoreToolsOptions, 'disabledTools'>,\n ): AgentTool<any, any>[] {\n const disabled = options?.disabledTools;\n const raw: AgentTool<any, any>[] = [];\n const toolNames = new Set<string>();\n for (const toolName of getAgentCapabilityToolNames(capabilityNames)) {\n if (disabled?.has(toolName) || toolNames.has(toolName)) continue;\n toolNames.add(toolName);\n if (toolName === 'create_desktop_pet') raw.push(createDesktopPetTool() as AgentTool<any, any>);\n if (toolName === 'skill_install') {\n raw.push(createSkillInstallTool({\n installSkillFromSource: this.deps.installSkillFromSource,\n getSessionKey: () => this.deps.getCurrentContext()?.sessionKey,\n }) as AgentTool<any, any>);\n }\n }\n return wrapToolsWithProtection(raw, this.deps.toolExecutorConfig);\n }\n\n getLazyCapabilityToolNames(): string[] {\n return [\n 'create_desktop_pet',\n ...(this.deps.installSkillFromSource ? ['skill_install'] : []),\n ];\n }\n\n createAllTools(coreOptions?: CreateCoreToolsOptions): AgentTool<any, any>[] {\n const coreTools = this.createCoreTools(coreOptions);\n const disableExtensions = coreOptions?.disabledTools?.has('extensions');\n\n let bundled: AgentTool<any, any>[];\n if (!this.deps.extensionRegistry || disableExtensions) {\n bundled = coreTools;\n } else {\n const extensionTools = this.deps.extensionRegistry.getAllTools();\n log.info({ count: extensionTools.length }, 'Loaded extension tools');\n bundled = [...coreTools, ...extensionTools];\n }\n\n const wrapped = wrapToolsWithProtection(bundled, this.deps.toolExecutorConfig);\n\n const executeEnabled = false && !coreOptions?.disabledTools?.has('execute_code');\n\n if (executeEnabled) {\n const sandboxMap = buildSandboxToolMap(wrapped);\n const executeTool = createExecuteCodeTool({ getSandboxToolMap: () => sandboxMap });\n const wrappedExecute = wrapToolsWithProtection([executeTool as any], this.deps.toolExecutorConfig);\n return [...wrapped, ...wrappedExecute];\n }\n\n return wrapped;\n }\n}\n\nfunction filterToolsByDisabledSet(\n tools: any[],\n disabled: Set<string> | undefined,\n): any[] {\n if (!disabled || disabled.size === 0) {\n return tools;\n }\n return tools.filter((t) => !disabled.has(t.name));\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"factory.js","names":[],"sources":["../../../../src/agent/tools/factory.ts"],"sourcesContent":["/**\n * Agent Tools Factory - Creates and configures agent tools\n *\n * Centralizes tool creation logic to keep service.ts focused on orchestration.\n *\n * TTS: auto TTS is applied at the ChannelManager via maybeApplyTtsToPayload().\n * Optional \\`text_to_speech\\` tool sends explicit voice when TTS is enabled.\n */\n\nimport type { AgentTool } from '@earendil-works/pi-agent-core';\nimport type { Model, Api } from '@earendil-works/pi-ai';\nimport type { Page } from 'playwright-core';\nimport type { Config } from '../../config/schema.js';\nimport type { MessageBus } from '../../infra/bus/index.js';\nimport {\n createReadFileTool,\n createWriteFileTool,\n createApplyPatchTool,\n createListDirTool,\n createGrepTool,\n createFindTool,\n createExecCommandTool,\n createWebSearchTool,\n createWebFetchTool,\n createWebExtractTool,\n createMessageTool,\n createComposioTools,\n createSendMediaTool,\n createReadMediaTool,\n createCreateShareTool,\n isShareToolAvailable,\n createMemorySearchTool,\n createMemoryGetTool,\n createTodoTool,\n createUpdatePlanTool,\n createSessionStatusTool,\n createDreamingTool,\n createClarifyTool,\n createToolManualTool,\n createGoalTool,\n createAutomationTool,\n createXopcUseTool,\n createDesktopPetTool,\n createSkillInstallTool,\n createCodeIntelligenceTools,\n type SkillInstallToolOptions,\n type SkillInstallToolResult,\n} from './index.js';\nimport { createCuratedMemoryTool } from './curated-memory-tool.js';\nimport { createSessionSearchTool } from './session-search-tool.js';\nimport type { MemoryManager } from '../memory/manager.js';\nimport { shouldRegisterCuratedMemoryTool } from '../memory/memory-config.js';\nimport type { SessionStore } from '../../session/store.js';\nimport type { GatewayClarifyRequestFn } from './clarify-tool.js';\nimport { createImageTool } from './image-tool.js';\nimport { createImageGenerateTool } from './image-generate-tool.js';\nimport {\n BrowserManager,\n BrowserNotReadyError,\n CdpSupervisor,\n checkBrowserReadiness,\n resolveBrowserBackendFromConfig,\n} from '../../browser/index.js';\nimport { createBrowserUseTool } from './browser/tool/browser-use-tool.js';\nimport { createDelegateTool } from './delegate-tool.js';\nimport { createWorkflowTool } from './workflow-tool.js';\nimport { createWorkflowCatalog } from '../workflow/catalog.js';\nimport { resolveDreamingRootForAgent } from '../memory/dreaming/scope.js';\nimport { resolveDreamingConfig } from '../memory/dreaming/config.js';\nimport { buildSandboxToolMap, createExecuteCodeTool } from './execute-code-tool.js';\nimport type { AutomationService } from '../../automations/index.js';\nimport type { NotesService } from '../../notes/index.js';\nimport type { ProjectService } from '../../projects/index.js';\nimport type { WorkItemService } from '../../work-items/index.js';\nimport type { WorkflowRunServiceLike } from '../../workflows/service/workflow-run-service.types.js';\nimport { createLogger } from '../../utils/logger.js';\nimport type { SkillManager } from '../skills/skill-manager.js';\nimport { wrapToolsWithProtection, type ToolExecutorConfig } from './executor.js';\nimport { createSkillsListTool, createSkillViewTool } from './skills-tools.js';\nimport { createSkillManageTool } from './skill-manage-tool.js';\nimport { createTextToSpeechTool } from './tts-tool.js';\nimport { mergeTtsConfigFromAppConfig } from '../../voice/tts/merge-config.js';\nimport { createGoalEvidenceRecorder } from './goal-evidence-recorder.js';\nimport { getAgentCapabilityToolNames } from '../capabilities/index.js';\nimport type { CodeIntelligenceRuntimeLike } from '../code-intelligence/index.js';\n\nconst log = createLogger('AgentToolsFactory');\n\n/** Channels where `clarify` can block for a user answer (web UI, Telegram, CLI readline). */\nconst CLARIFY_SUPPORTED_CHANNELS = new Set(['webchat', 'telegram', 'cli']);\n\nexport interface ToolFactoryDeps {\n workspace: string;\n extensionRegistry?: any;\n getCurrentContext: () => { channel: string; chatId: string; sessionKey: string } | null;\n hookRunner?: import('../../extensions/index.js').ExtensionHookRunner;\n bus: MessageBus;\n toolExecutorConfig?: Partial<ToolExecutorConfig>;\n /** Agent defaults (image tools, etc.); use getter so hot-reloaded config applies. */\n getConfig?: () => Config | undefined;\n /** Session / default chat model for vision tool description. */\n getPrimaryModel?: () => Model<Api>;\n /** Memory orchestration (prefetch/sync + external tools). */\n getMemoryManager?: () => MemoryManager;\n /** Session store for `session_search`. */\n getSessionStore?: () => SessionStore;\n /** When set (gateway webchat), enables the `clarify` tool. */\n gatewayClarify?: { requestClarification: GatewayClarifyRequestFn };\n /** Gateway: enables the `automation` tool. */\n getAutomationService?: () => AutomationService | undefined;\n /** Gateway: enables the `xopc_use` product-object tool. */\n getNotesService?: () => NotesService | undefined;\n getProjectService?: () => ProjectService | undefined;\n getWorkItemService?: () => WorkItemService | undefined;\n /** Gateway: starts persisted workflow runs (dedicated chat session per run). */\n getWorkflowRunService?: () => WorkflowRunServiceLike | undefined;\n /** Current session skill indexing (tool gating + allowlist); used by skills_list / skill_view. */\n getSkillIndexingContext?: () =>\n | { registeredToolNames: string[]; skillAllowlist?: string[] }\n | undefined;\n /** After skill_manage mutates disk, reload skills + refresh agent prompts (optional). */\n onSkillsFilesystemMutate?: () => void;\n /** Names registered via skill_view for command env passthrough. */\n getSkillPassthroughEnvVarNames?: () => string[];\n /** Add declared env names for the current session (no values stored). */\n registerSkillEnvPassthrough?: (names: string[]) => void;\n /** Install managed skills from explicit sources when a capability/tool enables it. */\n installSkillFromSource?: (opts: SkillInstallToolOptions) => Promise<SkillInstallToolResult>;\n /** Workspace-scoped structural code intelligence runtime. */\n getCodeIntelligenceRuntime?: (workspace: string) => CodeIntelligenceRuntimeLike;\n}\n\nexport interface CreateCoreToolsOptions {\n /** Workspace root for file/command tools (defaults to factory workspace). */\n workspace?: string;\n /** Canonical `agents/<id>/profile/`: bare SOUL.md / IDENTITY.md resolve here after the workspace. */\n profileMarkdownRoot?: string;\n /** Tool `name` values to omit (e.g. `exec_command`, `extensions` for extension tools). */\n disabledTools?: Set<string>;\n /** Optional primary model for image tool heuristics. */\n getPrimaryModel?: () => Model<Api>;\n getMemoryManager?: () => MemoryManager;\n /** Agent-scoped memories directory used for dreaming state (`agents/<id>/memories`). */\n dreamingRoot?: string;\n agentId?: string;\n /** When set, registers `skills_list` and `skill_view` bound to this workspace\\'s skills. */\n getSkillManager?: () => SkillManager;\n}\n\nexport class AgentToolsFactory {\n private browserManager: BrowserManager | null = null;\n /** One dialog/console supervisor per chat session (browser tab). */\n private readonly browserTaskSupervisors = new Map<string, CdpSupervisor>();\n /** Cached readiness probe — keyed by backend mode + extension host:port. */\n private browserReadinessCache: {\n key: string;\n expiresAt: number;\n inflight?: Promise<BrowserNotReadyError | null>;\n result?: BrowserNotReadyError | null;\n } | null = null;\n\n constructor(private deps: ToolFactoryDeps) {}\n\n private browserReadinessKey(): string {\n const cfg = this.deps.getConfig?.();\n const backend = resolveBrowserBackendFromConfig(cfg);\n const host = '127.0.0.1';\n const port = 19820;\n const cdpUrl = backend.mode === 'cdp' ? backend.config.wsEndpoint : '';\n const cloudKind = backend.mode === 'cloud' ? backend.config.type : '';\n return `${backend.mode}@${host}:${port}|${cdpUrl}|${cloudKind}`;\n }\n\n private async checkBrowserReadinessCached(): Promise<BrowserNotReadyError | null> {\n const key = this.browserReadinessKey();\n const now = Date.now();\n const cached = this.browserReadinessCache;\n if (cached && cached.key === key && cached.expiresAt > now && cached.inflight === undefined) {\n return cached.result ?? null;\n }\n if (cached && cached.key === key && cached.inflight) {\n return cached.inflight;\n }\n const inflight = checkBrowserReadiness(this.deps.getConfig?.());\n this.browserReadinessCache = { key, expiresAt: now + 30_000, inflight };\n try {\n const result = await inflight;\n this.browserReadinessCache = { key, expiresAt: Date.now() + 30_000, result };\n return result;\n } catch (e) {\n // Probe should never throw, but if it does we just bypass the cache.\n this.browserReadinessCache = null;\n log.warn({ err: e }, 'browserReadiness probe failed');\n return null;\n }\n }\n\n /** Invalidate the readiness cache (config hot-reload, settings-page save, etc.). */\n invalidateBrowserReadinessCache(): void {\n this.browserReadinessCache = null;\n }\n\n private browserSupervisorForTask(taskId: string): CdpSupervisor {\n let s = this.browserTaskSupervisors.get(taskId);\n if (!s) {\n s = new CdpSupervisor({ dialogPolicy: 'auto_dismiss', dialogTimeoutSeconds: 300 });\n this.browserTaskSupervisors.set(taskId, s);\n }\n return s;\n }\n\n private async acquireBrowserPage(): Promise<Page> {\n const taskId = this.deps.getCurrentContext()?.sessionKey ?? 'default';\n const mgr = this.ensureBrowserManager();\n await mgr.ensureConnected();\n if (mgr.getExtensionProvider()) {\n return null as unknown as Page;\n }\n const page = await mgr.getPage(taskId);\n this.browserSupervisorForTask(taskId).attach(page);\n return page;\n }\n\n private ensureBrowserManager(): BrowserManager {\n if (!this.browserManager) {\n this.browserManager = new BrowserManager({\n getHeadless: () => false,\n getBackend: () => resolveBrowserBackendFromConfig(this.deps.getConfig?.()),\n });\n }\n return this.browserManager;\n }\n\n /** Close Playwright and all pages (gateway stop, agent manager dispose, or config hot-reload). */\n async shutdownBrowser(): Promise<void> {\n this.browserReadinessCache = null;\n if (!this.browserManager) {\n return;\n }\n await this.browserManager.shutdown();\n this.browserManager = null;\n this.browserTaskSupervisors.clear();\n }\n\n /** Drop the tab for a session when its agent instance is removed. */\n async closeBrowserPageForSession(sessionKey: string): Promise<void> {\n this.browserTaskSupervisors.delete(sessionKey);\n await this.browserManager?.closePage(sessionKey);\n }\n\n createCoreTools(options?: CreateCoreToolsOptions): AgentTool<any, any>[] {\n const workspace = options?.workspace ?? this.deps.workspace;\n const { bus } = this.deps;\n const getPrimary = options?.getPrimaryModel ?? this.deps.getPrimaryModel;\n const getMemMgr = options?.getMemoryManager ?? this.deps.getMemoryManager;\n const getSkillMgr = options?.getSkillManager;\n const disabled = options?.disabledTools;\n\n const primary = getPrimary?.();\n const modelHasVision = primary?.input?.includes('image') ?? false;\n const cfg = this.deps.getConfig?.();\n const dreamingRoot = options?.dreamingRoot ?? (cfg ? resolveDreamingRootForAgent(cfg, options?.agentId) : workspace);\n const browserEnabled = cfg?.browser?.enabled !== false;\n const recordGoalEvidence = createGoalEvidenceRecorder({\n getSessionKey: () => this.deps.getCurrentContext()?.sessionKey,\n });\n const imageTool = createImageTool({\n config: cfg,\n workspace,\n modelHasVision,\n agentId: options?.agentId,\n });\n const imageGenerateTool = createImageGenerateTool({\n config: cfg,\n workspace,\n });\n const codeIntelligenceConfig = cfg?.codeIntelligence;\n const agentId = options?.agentId;\n const codeIntelligenceEnabled =\n codeIntelligenceConfig?.enabled === true &&\n agentId !== undefined &&\n codeIntelligenceConfig.agentIds.includes(agentId);\n const codeIntelligenceTools = codeIntelligenceEnabled && this.deps.getCodeIntelligenceRuntime\n ? createCodeIntelligenceTools({\n getRuntime: () => this.deps.getCodeIntelligenceRuntime!(workspace),\n })\n : [];\n\n const composioTools = createComposioTools({\n getConfig: () => this.deps.getConfig?.(),\n getCurrentContext: this.deps.getCurrentContext,\n agentId,\n });\n const optionalTools = [imageTool, imageGenerateTool, ...composioTools].filter((t) => t != null) as any[];\n\n const readTool = createReadFileTool(workspace, {\n profileMarkdownRoot: options?.profileMarkdownRoot,\n });\n const writeTool = createWriteFileTool(workspace, {\n profileMarkdownRoot: options?.profileMarkdownRoot,\n recordGoalEvidence,\n });\n const applyPatchTool = createApplyPatchTool(workspace, { recordGoalEvidence });\n const listDir = createListDirTool(workspace);\n const grep = createGrepTool(workspace);\n const find = createFindTool(workspace);\n\n const core: AgentTool<any, any>[] = [\n createSessionStatusTool(),\n createDreamingTool({\n getWorkspace: () => workspace,\n getDreamingRoot: () => dreamingRoot,\n getConfig: () => this.deps.getConfig?.(),\n getAgentId: () => options?.agentId,\n }),\n createToolManualTool(),\n createClarifyTool({\n resolveAskUser: () => {\n const req = this.deps.gatewayClarify?.requestClarification;\n if (!req) return null;\n const ctx = this.deps.getCurrentContext();\n if (!ctx?.sessionKey) return null;\n if (!CLARIFY_SUPPORTED_CHANNELS.has(ctx.channel)) return null;\n return (r) => req(ctx.sessionKey, r);\n },\n }),\n createTodoTool({\n getSessionKey: () => this.deps.getCurrentContext()?.sessionKey,\n }),\n createUpdatePlanTool(),\n ...(getSkillMgr\n ? [\n createSkillsListTool({\n getSkillManager: getSkillMgr,\n getSkillIndexingContext: this.deps.getSkillIndexingContext,\n }),\n createSkillViewTool({\n getSkillManager: getSkillMgr,\n getSkillIndexingContext: this.deps.getSkillIndexingContext,\n registerSkillEnvPassthrough: this.deps.registerSkillEnvPassthrough,\n }),\n createSkillManageTool({\n getSkillManager: getSkillMgr,\n getWorkspace: () => workspace,\n onSkillsFilesystemMutate: this.deps.onSkillsFilesystemMutate,\n }),\n ]\n : []),\n readTool,\n ...codeIntelligenceTools,\n writeTool,\n applyPatchTool,\n listDir,\n grep,\n find,\n createExecCommandTool(workspace, {\n getSkillPassthroughEnvVarNames: this.deps.getSkillPassthroughEnvVarNames,\n recordGoalEvidence,\n }),\n createWebSearchTool(() => this.deps.getConfig?.()),\n createWebFetchTool(() => this.deps.getConfig?.()),\n createWebExtractTool({ getConfig: () => this.deps.getConfig?.() }),\n // Note: TTS is NOT handled by send_message tool anymore\n // TTS is applied at the ChannelManager dispatch layer\n createMessageTool(bus, () => this.deps.getCurrentContext()),\n ...(mergeTtsConfigFromAppConfig(cfg?.messages?.tts).enabled\n ? [\n createTextToSpeechTool({\n bus,\n getContext: () => this.deps.getCurrentContext(),\n getConfig: () => this.deps.getConfig?.(),\n }),\n ]\n : []),\n createSendMediaTool(workspace, bus, () => this.deps.getCurrentContext()),\n createReadMediaTool(),\n ...(isShareToolAvailable(cfg)\n ? [\n createCreateShareTool({\n workspace,\n getConfig: () => this.deps.getConfig?.(),\n }),\n ]\n : []),\n ...(getMemMgr\n ? [\n createMemorySearchTool({\n workspaceDir: workspace,\n dreamingRoot,\n getMemoryManager: () => getMemMgr(),\n getScope: () => ({\n ...(options?.agentId ? { agentId: options.agentId } : {}),\n workspaceId: workspace,\n ...(this.deps.getCurrentContext?.()?.sessionKey\n ? { sessionKey: this.deps.getCurrentContext!()!.sessionKey }\n : {}),\n }),\n shouldRecordDreamingRecalls: () =>\n resolveDreamingConfig(this.deps.getConfig?.(), options?.agentId).enabled,\n }),\n createMemoryGetTool({\n workspaceDir: workspace,\n dreamingRoot,\n getMemoryManager: () => getMemMgr(),\n getScope: () => ({\n ...(options?.agentId ? { agentId: options.agentId } : {}),\n workspaceId: workspace,\n ...(this.deps.getCurrentContext?.()?.sessionKey\n ? { sessionKey: this.deps.getCurrentContext!()!.sessionKey }\n : {}),\n }),\n }),\n ]\n : []),\n ...(getMemMgr && shouldRegisterCuratedMemoryTool(this.deps.getConfig?.())\n ? [\n createCuratedMemoryTool(() => getMemMgr()),\n ]\n : []),\n ...(getMemMgr?.().getAdditionalTools() ?? []),\n ...(this.deps.getSessionStore\n ? [\n createSessionSearchTool({\n getSessionStore: this.deps.getSessionStore,\n getConfig: this.deps.getConfig,\n getCurrentSessionKey: () => this.deps.getCurrentContext()?.sessionKey,\n }),\n ]\n : []),\n ...(this.deps.getAutomationService\n ? [\n createAutomationTool({\n getAutomationService: this.deps.getAutomationService,\n }),\n ]\n : []),\n ...(this.deps.getProjectService || this.deps.getNotesService || this.deps.getWorkItemService\n ? [\n createXopcUseTool({\n getConfig: () => this.deps.getConfig?.(),\n getCurrentAgentId: () => options.agentId,\n getCurrentSessionKey: () => this.deps.getCurrentContext()?.sessionKey,\n getNotesService: this.deps.getNotesService,\n getProjectService: this.deps.getProjectService,\n getWorkItemService: this.deps.getWorkItemService,\n }),\n ]\n : []),\n createGoalTool({\n getCurrentSessionKey: () => this.deps.getCurrentContext()?.sessionKey,\n }),\n ...(browserEnabled\n ? [\n createBrowserUseTool({\n getManager: () => this.ensureBrowserManager(),\n getPageForTask: () => this.acquireBrowserPage(),\n getTaskId: () => this.deps.getCurrentContext()?.sessionKey ?? 'default',\n getConfig: () => this.deps.getConfig?.(),\n getReadiness: () => this.checkBrowserReadinessCached(),\n getSupervisor: () =>\n this.browserSupervisorForTask(this.deps.getCurrentContext()?.sessionKey ?? 'default'),\n notifyBrowserPageClosed: (taskId) => {\n this.browserTaskSupervisors.delete(taskId);\n },\n }),\n ]\n : []),\n ...(primary\n ? [\n createWorkflowTool({\n catalog: createWorkflowCatalog(),\n getCurrentSessionKey: () => this.deps.getCurrentContext()?.sessionKey,\n getConfig: () => this.deps.getConfig?.(),\n startWorkflowRun: this.deps.getWorkflowRunService\n ? (params) => this.deps.getWorkflowRunService!().startWorkflowRun(params)\n : undefined,\n }),\n ]\n : []),\n ...(false && primary\n ? [\n createDelegateTool({\n workspace,\n getSubagentModel: () => {\n const gp = options?.getPrimaryModel ?? this.deps.getPrimaryModel;\n const m = gp?.();\n if (!m) {\n throw new Error('No primary model configured for delegate_task');\n }\n return m;\n },\n bus: this.deps.bus,\n getConfig: () => this.deps.getConfig?.(),\n getCurrentContext: () => this.deps.getCurrentContext?.() ?? null,\n hookRunner: this.deps.hookRunner,\n toolExecutorConfig: this.deps.toolExecutorConfig,\n // Injected so `child-agent-factory.ts` does not need to import\n // `AgentToolsFactory` directly (which would form a cycle).\n buildChildTools: (childOpts) => {\n const childFactory = new AgentToolsFactory({\n workspace: childOpts.workspace,\n bus: childOpts.bus,\n getCurrentContext: () => null,\n getConfig: childOpts.getConfig,\n getPrimaryModel: () => childOpts.model,\n toolExecutorConfig: childOpts.toolExecutorConfig,\n });\n return childFactory.createAllTools({\n workspace: childOpts.workspace,\n getPrimaryModel: () => childOpts.model,\n agentId: options?.agentId ?? childOpts.agentId,\n dreamingRoot: options?.dreamingRoot,\n disabledTools: new Set(['extensions']),\n });\n },\n }),\n ]\n : []),\n ...optionalTools,\n ];\n\n return filterToolsByDisabledSet(core, disabled);\n }\n\n createCapabilityTools(\n capabilityNames: readonly string[],\n options?: Pick<CreateCoreToolsOptions, 'disabledTools'>,\n ): AgentTool<any, any>[] {\n const disabled = options?.disabledTools;\n const raw: AgentTool<any, any>[] = [];\n const toolNames = new Set<string>();\n for (const toolName of getAgentCapabilityToolNames(capabilityNames)) {\n if (disabled?.has(toolName) || toolNames.has(toolName)) continue;\n toolNames.add(toolName);\n if (toolName === 'create_desktop_pet') raw.push(createDesktopPetTool() as AgentTool<any, any>);\n if (toolName === 'skill_install') {\n raw.push(createSkillInstallTool({\n installSkillFromSource: this.deps.installSkillFromSource,\n getSessionKey: () => this.deps.getCurrentContext()?.sessionKey,\n }) as AgentTool<any, any>);\n }\n }\n return wrapToolsWithProtection(raw, this.deps.toolExecutorConfig);\n }\n\n getLazyCapabilityToolNames(): string[] {\n return [\n 'create_desktop_pet',\n ...(this.deps.installSkillFromSource ? ['skill_install'] : []),\n ];\n }\n\n createAllTools(coreOptions?: CreateCoreToolsOptions): AgentTool<any, any>[] {\n const coreTools = this.createCoreTools(coreOptions);\n const disableExtensions = coreOptions?.disabledTools?.has('extensions');\n\n let bundled: AgentTool<any, any>[];\n if (!this.deps.extensionRegistry || disableExtensions) {\n bundled = coreTools;\n } else {\n const extensionTools = this.deps.extensionRegistry.getAllTools();\n log.info({ count: extensionTools.length }, 'Loaded extension tools');\n bundled = [...coreTools, ...extensionTools];\n }\n\n const wrapped = wrapToolsWithProtection(bundled, this.deps.toolExecutorConfig);\n\n const executeEnabled = false && !coreOptions?.disabledTools?.has('execute_code');\n\n if (executeEnabled) {\n const sandboxMap = buildSandboxToolMap(wrapped);\n const executeTool = createExecuteCodeTool({ getSandboxToolMap: () => sandboxMap });\n const wrappedExecute = wrapToolsWithProtection([executeTool as any], this.deps.toolExecutorConfig);\n return [...wrapped, ...wrappedExecute];\n }\n\n return wrapped;\n }\n}\n\nfunction filterToolsByDisabledSet(\n tools: any[],\n disabled: Set<string> | undefined,\n): any[] {\n if (!disabled || disabled.size === 0) {\n return tools;\n }\n return tools.filter((t) => !disabled.has(t.name));\n}\n"],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ export { findTool, createFindTool, type FindToolInput, type FindToolDetails, } f
|
|
|
13
13
|
export { createWebSearchTool, createWebFetchTool } from './web.js';
|
|
14
14
|
export { createWebExtractTool, stripHtmlBoilerplate, DEFAULT_WEB_EXTRACT_MAX_LENGTH, MAX_RAW_HTML_CHARS_FOR_WEB_EXTRACT, } from './web-extract.js';
|
|
15
15
|
export { createMessageTool } from './communication.js';
|
|
16
|
-
export {
|
|
16
|
+
export { createComposioTools } from './composio-tool.js';
|
|
17
17
|
export { createSendMediaTool } from './send-media.js';
|
|
18
18
|
export { createReadMediaTool } from './media-read-tool.js';
|
|
19
19
|
export { createCreateShareTool, isShareToolAvailable, type CreateShareToolDeps, } from './create-share-tool.js';
|
|
@@ -15,7 +15,7 @@ import { createFindTool, findTool } from "./find.js";
|
|
|
15
15
|
import { createWebFetchTool, createWebSearchTool } from "./web.js";
|
|
16
16
|
import { DEFAULT_WEB_EXTRACT_MAX_LENGTH, MAX_RAW_HTML_CHARS_FOR_WEB_EXTRACT, createWebExtractTool, stripHtmlBoilerplate } from "./web-extract.js";
|
|
17
17
|
import { createMessageTool } from "./communication.js";
|
|
18
|
-
import {
|
|
18
|
+
import { createComposioTools } from "./composio-tool.js";
|
|
19
19
|
import { createSendMediaTool } from "./send-media.js";
|
|
20
20
|
import { createReadMediaTool } from "./media-read-tool.js";
|
|
21
21
|
import { createCreateShareTool, isShareToolAvailable } from "./create-share-tool.js";
|
|
@@ -42,4 +42,4 @@ import { createCodeIntelligenceTools } from "../code-intelligence/tools.js";
|
|
|
42
42
|
import { resolveImageModelConfigForTool } from "../image/tool-model-config.js";
|
|
43
43
|
import { createImageTool } from "./image-tool.js";
|
|
44
44
|
import { createImageGenerateTool, resolveImageGenerationModelConfigForTool } from "./image-generate-tool.js";
|
|
45
|
-
export { BrowserManager, DEFAULT_DELEGATE_TOOLS, DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, DEFAULT_TOOL_METADATA, DEFAULT_WEB_EXTRACT_MAX_LENGTH, DELEGATE_BLOCKED_TOOLS, GREP_MAX_LINE_LENGTH, MAX_RAW_HTML_CHARS_FOR_WEB_EXTRACT, SANDBOX_ALLOWED_TOOLS, TodoStore, ToolConcurrencyController, assertBrowserUrlAllowed, buildSandboxToolMap, createApplyPatchTool, createAutomationTool, createClarifyTool, createCodeIntelligenceTools,
|
|
45
|
+
export { BrowserManager, DEFAULT_DELEGATE_TOOLS, DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, DEFAULT_TOOL_METADATA, DEFAULT_WEB_EXTRACT_MAX_LENGTH, DELEGATE_BLOCKED_TOOLS, GREP_MAX_LINE_LENGTH, MAX_RAW_HTML_CHARS_FOR_WEB_EXTRACT, SANDBOX_ALLOWED_TOOLS, TodoStore, ToolConcurrencyController, assertBrowserUrlAllowed, buildSandboxToolMap, createApplyPatchTool, createAutomationTool, createClarifyTool, createCodeIntelligenceTools, createComposioTools, createCreateShareTool, createCuratedMemoryTool, createDelegateTool, createDesktopPetTool, createDreamingTool, createExecCommandTool, createExecuteCodeTool, createFindTool, createGoalTool, createGrepTool, createImageGenerateTool, createImageTool, createListDirTool, createMemoryGetTool, createMemorySearchTool, createMessageTool, createReadFileTool, createReadMediaTool, createSendMediaTool, createSessionSearchTool, createSessionStatusTool, createSkillInstallTool, createSkillManageTool, createSkillViewTool, createSkillsListTool, createTodoTool, createToolManualTool, createUpdatePlanTool, createWebExtractTool, createWebFetchTool, createWebSearchTool, createWorkflowTool, createWriteFileTool, createXopcUseTool, findTool, formatSize, fuzzyFindText, generateDiffString, getToolMetadata, grepTool, isShareToolAvailable, listDirTool, normalizeForFuzzyMatch, normalizeToLF, resolveImageGenerationModelConfigForTool, resolveImageModelConfigForTool, resolveToolLockMode, restoreLineEndings, stripBom, stripHtmlBoilerplate, truncateHead, truncateLine, truncateTail, writeFileTool };
|
|
@@ -6,7 +6,6 @@ import type { WorkflowCatalog } from '../workflow/catalog.js';
|
|
|
6
6
|
import type { StartWorkflowRunServiceParams, WorkflowRunServiceResult } from '../../workflows/service/workflow-run-service.types.js';
|
|
7
7
|
export type WorkflowToolInput = {
|
|
8
8
|
name?: string;
|
|
9
|
-
script?: string;
|
|
10
9
|
args?: unknown;
|
|
11
10
|
goal?: string;
|
|
12
11
|
goalId?: string;
|