@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.
Files changed (543) hide show
  1. package/README.md +1 -1
  2. package/dist/browser-ext/manifest.json +1 -1
  3. package/dist/extensions/telegram/xopc.extension.json +1 -1
  4. package/dist/gateway/static/root/assets/activity-center-store-jITiX2vJ.js +1 -0
  5. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BawPxiu5.js → agent-avatar-dicebear-DiME9u_P.js} +1 -1
  6. package/dist/gateway/static/root/assets/agents-DzBXhZXO.js +2 -0
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-81xd1p9R.js → app-management-settings-panel-Cuo7SbUP.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-DYeQsYU8.js → appearance-settings-DUfdNQqk.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-CKuKK5AU.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-D_oa7oti.js → archive-plugin-B-Qk6cGr.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-Cd-bwI2N.js → attachment-load-Di6EEbQX.js} +1 -1
  12. package/dist/gateway/static/root/assets/automation-suggestion-card-DGxvRxtO.js +1 -0
  13. package/dist/gateway/static/root/assets/automations-page-D-FF_WKV.js +4 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-O8svLKWw.js → binary-plugins-ZaOZDH2I.js} +1 -1
  15. package/dist/gateway/static/root/assets/block-editor-BTFhjWfg.js +184 -0
  16. package/dist/gateway/static/root/assets/browser-settings-page-BvKLdEQt.js +8 -0
  17. package/dist/gateway/static/root/assets/{capability-presets-api-dJy1Eqgx.js → capability-presets-api-BU-pVZiZ.js} +1 -1
  18. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DgyeEwzh.js +2 -0
  19. package/dist/gateway/static/root/assets/{channel-recipient-api-Bfuhp2ty.js → channel-recipient-api-DuulnhIj.js} +1 -1
  20. package/dist/gateway/static/root/assets/channels-settings-BbVsdD_I.js +1 -0
  21. package/dist/gateway/static/root/assets/channels-status-swr-B5lVrUsN.js +1 -0
  22. package/dist/gateway/static/root/assets/check-BODqo66o.js +1 -0
  23. package/dist/gateway/static/root/assets/chunk-QUQL4437-DXsxWP7r.js +4 -0
  24. package/dist/gateway/static/root/assets/circle-alert-RzVebuX2.js +1 -0
  25. package/dist/gateway/static/root/assets/connectors-page-B8QqVy3I.js +2 -0
  26. package/dist/gateway/static/root/assets/{desktop-pet-DFMfIb5F.js → desktop-pet---yzVxVR.js} +1 -1
  27. package/dist/gateway/static/root/assets/desktop-pet-settings-Dc3gqBJE.js +1 -0
  28. package/dist/gateway/static/root/assets/{directory-picker-path-field-BrYt1gAr.js → directory-picker-path-field-DCmOGLtK.js} +1 -1
  29. package/dist/gateway/static/root/assets/dreaming-settings-BgT5KZVe.js +3 -0
  30. package/dist/gateway/static/root/assets/{extension-debug-page-Bh630pLD.js → extension-debug-page-ByaKTTq4.js} +1 -1
  31. package/dist/gateway/static/root/assets/extension-page-BmRzHAZr.js +1 -0
  32. package/dist/gateway/static/root/assets/extension-settings-page-JUtwIhbF.js +1 -0
  33. package/dist/gateway/static/root/assets/{fetch-B1WtuprY.js → fetch-8QNN25Sh.js} +1 -1
  34. package/dist/gateway/static/root/assets/{gateway-config-api-De2N821l.js → gateway-config-api-CxicF50_.js} +1 -1
  35. package/dist/gateway/static/root/assets/gateway-settings-Bz2I_EO5.js +1 -0
  36. package/dist/gateway/static/root/assets/{gateway-startup-retry-nEujFSDj.js → gateway-startup-retry-5YBnS9Fj.js} +1 -1
  37. package/dist/gateway/static/root/assets/goal-create-dialog-VcoyuZGN.js +1 -0
  38. package/dist/gateway/static/root/assets/goal-detail-page-Cilkap2G.js +4 -0
  39. package/dist/gateway/static/root/assets/{goals-config-api-DUy3eEse.js → goals-config-api-CwcHRdC0.js} +1 -1
  40. package/dist/gateway/static/root/assets/goals-page-C6eoni4z.js +2 -0
  41. package/dist/gateway/static/root/assets/goals-settings-o4i-qAOS.js +1 -0
  42. package/dist/gateway/static/root/assets/heartbeat-settings-DQQkETX8.js +1 -0
  43. package/dist/gateway/static/root/assets/index-BKRqeRHm.js +257 -0
  44. package/dist/gateway/static/root/assets/index-CphxClbs.css +1 -0
  45. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CVIwwM15.js → keyboard-shortcuts-settings-LT6qB-ua.js} +1 -1
  46. package/dist/gateway/static/root/assets/logs-page-Dli2e3fS.js +7 -0
  47. package/dist/gateway/static/root/assets/{markdown-split-B_6us9j7.js → markdown-split-Dw-yE2-y.js} +1 -1
  48. package/dist/gateway/static/root/assets/{media-plugins-D_fryIyj.js → media-plugins-D9NNNUgE.js} +1 -1
  49. package/dist/gateway/static/root/assets/messages-CzKxM6I4.js +5 -0
  50. package/dist/gateway/static/root/assets/models-hub-panel-DVn2Q1Ik.js +2 -0
  51. package/dist/gateway/static/root/assets/notes-page-CRgbJGgk.js +1 -0
  52. package/dist/gateway/static/root/assets/notes-workbench-BxZRHLWx.js +2 -0
  53. package/dist/gateway/static/root/assets/{page-tabs-D_8jGlqx.js → page-tabs-D4hkWVt_.js} +1 -1
  54. package/dist/gateway/static/root/assets/{preview-open-alternatives-BBLMK8Mp.js → preview-open-alternatives-CIckv0uy.js} +1 -1
  55. package/dist/gateway/static/root/assets/project-detail-page-Doz53xLn.js +1 -0
  56. package/dist/gateway/static/root/assets/projects-page-DoMtcRLg.js +1 -0
  57. package/dist/gateway/static/root/assets/remote-access-hub-BeHVEgrm.js +1 -0
  58. package/dist/gateway/static/root/assets/{save-bar-controls-DVS3FR5r.js → save-bar-controls-B0b42kB2.js} +1 -1
  59. package/dist/gateway/static/root/assets/{schedule-field-D6vKd6-T.js → schedule-field-BtjEkczK.js} +1 -1
  60. package/dist/gateway/static/root/assets/{schema-form-BPy4lbIh.js → schema-form-Bf0bk3i6.js} +1 -1
  61. package/dist/gateway/static/root/assets/sessions-page-Bk4bQsBe.js +1 -0
  62. package/dist/gateway/static/root/assets/settings-advanced-gate-DdFyaRMm.js +1 -0
  63. package/dist/gateway/static/root/assets/{settings-collapsible-section-WzdikxPt.js → settings-collapsible-section-BTKTdTNX.js} +1 -1
  64. package/dist/gateway/static/root/assets/{settings-form-section-CvfzhBV-.js → settings-form-section-DL4P0sAj.js} +1 -1
  65. package/dist/gateway/static/root/assets/{settings-loading-skeleton-BxR-Ulhi.js → settings-loading-skeleton-BV6KFNj4.js} +1 -1
  66. package/dist/gateway/static/root/assets/settings-page-B_4DsX5W.js +1 -0
  67. package/dist/gateway/static/root/assets/{settings-page-layout-CKefvbYi.js → settings-page-layout-CyGlrInB.js} +1 -1
  68. package/dist/gateway/static/root/assets/setup-status-panel-DJ1_MLgX.js +1 -0
  69. package/dist/gateway/static/root/assets/share-preview-page-BQBV7YrV.js +2 -0
  70. package/dist/gateway/static/root/assets/shares-settings-0VuFLBeU.js +1 -0
  71. package/dist/gateway/static/root/assets/skill-reload-api-DO87Ckeo.js +1 -0
  72. package/dist/gateway/static/root/assets/skills-page-D3VdtxAn.js +2 -0
  73. package/dist/gateway/static/root/assets/{system-settings-panel-BokgAgf7.js → system-settings-panel-D85fBBuI.js} +1 -1
  74. package/dist/gateway/static/root/assets/{typed-models-lib-BwHlNL3L.js → typed-models-lib-CwEuYrHX.js} +1 -1
  75. package/dist/gateway/static/root/assets/{use-channel-catalog-DR11ap3A.js → use-channel-catalog-COXIfXcl.js} +1 -1
  76. package/dist/gateway/static/root/assets/user-context-page-m9JVQ73F.js +1 -0
  77. package/dist/gateway/static/root/assets/user-profile-fields-editor-DtQiuY7E.js +1 -0
  78. package/dist/gateway/static/root/assets/user-profile-settings-panel-CWM0fEpb.js +1 -0
  79. package/dist/gateway/static/root/assets/{utils-BKUWB-TT.js → utils--BO6xT3u.js} +1 -1
  80. package/dist/gateway/static/root/assets/voice-api-key-field-LoT3wgZ9.js +1 -0
  81. package/dist/gateway/static/root/assets/with-selector-aYPsXwdl.js +1 -0
  82. package/dist/gateway/static/root/assets/work-item-detail-page-DSTMz_mO.js +1 -0
  83. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CL_rnAUB.js → workflow-run-setup-panel-B35lJzvm.js} +2 -2
  84. package/dist/gateway/static/root/assets/workflows-page-BfSm9oR8.js +11 -0
  85. package/dist/gateway/static/root/assets/workflows-page-DLioOiRN.css +1 -0
  86. package/dist/gateway/static/root/connector-icons/README.md +11 -0
  87. package/dist/gateway/static/root/connector-icons/airtable.svg +13 -0
  88. package/dist/gateway/static/root/connector-icons/asana.svg +15 -0
  89. package/dist/gateway/static/root/connector-icons/brave-search.svg +1 -0
  90. package/dist/gateway/static/root/connector-icons/clickup.svg +19 -0
  91. package/dist/gateway/static/root/connector-icons/composio.svg +266 -0
  92. package/dist/gateway/static/root/connector-icons/discord.svg +15 -0
  93. package/dist/gateway/static/root/connector-icons/dropbox.svg +152 -0
  94. package/dist/gateway/static/root/connector-icons/excel.svg +56 -0
  95. package/dist/gateway/static/root/connector-icons/fetch.svg +6 -0
  96. package/dist/gateway/static/root/connector-icons/figma.svg +178 -0
  97. package/dist/gateway/static/root/connector-icons/filesystem.svg +6 -0
  98. package/dist/gateway/static/root/connector-icons/github.svg +10 -0
  99. package/dist/gateway/static/root/connector-icons/gmail.svg +3 -0
  100. package/dist/gateway/static/root/connector-icons/google-calendar.svg +3 -0
  101. package/dist/gateway/static/root/connector-icons/google-docs.svg +25 -0
  102. package/dist/gateway/static/root/connector-icons/google-drive.svg +25 -0
  103. package/dist/gateway/static/root/connector-icons/google-sheets.svg +1 -0
  104. package/dist/gateway/static/root/connector-icons/hubspot.svg +142 -0
  105. package/dist/gateway/static/root/connector-icons/jira.svg +15 -0
  106. package/dist/gateway/static/root/connector-icons/linear.svg +5 -0
  107. package/dist/gateway/static/root/connector-icons/memory.svg +5 -0
  108. package/dist/gateway/static/root/connector-icons/microsoft-teams.svg +33 -0
  109. package/dist/gateway/static/root/connector-icons/notion.svg +5 -0
  110. package/dist/gateway/static/root/connector-icons/one-drive.svg +13 -0
  111. package/dist/gateway/static/root/connector-icons/outlook.svg +76 -0
  112. package/dist/gateway/static/root/connector-icons/playwright.svg +9 -0
  113. package/dist/gateway/static/root/connector-icons/salesforce.svg +17 -0
  114. package/dist/gateway/static/root/connector-icons/sequential-thinking.svg +8 -0
  115. package/dist/gateway/static/root/connector-icons/shopify.svg +5 -0
  116. package/dist/gateway/static/root/connector-icons/slack.svg +9 -0
  117. package/dist/gateway/static/root/connector-icons/spotify.svg +43 -0
  118. package/dist/gateway/static/root/connector-icons/stripe.svg +11 -0
  119. package/dist/gateway/static/root/connector-icons/telegram.svg +130 -0
  120. package/dist/gateway/static/root/connector-icons/time.svg +6 -0
  121. package/dist/gateway/static/root/connector-icons/todoist.svg +277 -0
  122. package/dist/gateway/static/root/connector-icons/trello.svg +19 -0
  123. package/dist/gateway/static/root/connector-icons/twitter.svg +128 -0
  124. package/dist/gateway/static/root/connector-icons/whatsapp.svg +61 -0
  125. package/dist/gateway/static/root/connector-icons/youtube.svg +11 -0
  126. package/dist/gateway/static/root/index.html +9 -6
  127. package/dist/package.js +1 -1
  128. package/dist/src/agent/agent-manager.d.ts +2 -0
  129. package/dist/src/agent/agent-manager.js +8 -0
  130. package/dist/src/agent/agent-manager.js.map +1 -1
  131. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  132. package/dist/src/agent/background-review/prompts.js +3 -2
  133. package/dist/src/agent/background-review/prompts.js.map +1 -1
  134. package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
  135. package/dist/src/agent/embedded/xopc-tools-bridge.d.ts +9 -0
  136. package/dist/src/agent/embedded/xopc-tools-bridge.js +71 -3
  137. package/dist/src/agent/embedded/xopc-tools-bridge.js.map +1 -1
  138. package/dist/src/agent/goals/post-turn.js +5 -4
  139. package/dist/src/agent/goals/post-turn.js.map +1 -1
  140. package/dist/src/agent/mcp/mcp-transport.js +4 -1
  141. package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
  142. package/dist/src/agent/memory/context/planner.d.ts +1 -0
  143. package/dist/src/agent/memory/context/planner.js +60 -14
  144. package/dist/src/agent/memory/context/planner.js.map +1 -1
  145. package/dist/src/agent/memory/context/types.d.ts +3 -1
  146. package/dist/src/agent/memory/lifecycle.d.ts +11 -0
  147. package/dist/src/agent/memory/lifecycle.js +50 -0
  148. package/dist/src/agent/memory/lifecycle.js.map +1 -0
  149. package/dist/src/agent/memory/source-origin.d.ts +3 -0
  150. package/dist/src/agent/memory/source-origin.js +19 -0
  151. package/dist/src/agent/memory/source-origin.js.map +1 -0
  152. package/dist/src/agent/memory/understanding/service.js +5 -0
  153. package/dist/src/agent/memory/understanding/service.js.map +1 -1
  154. package/dist/src/agent/memory/user-context-coordinator.js +7 -2
  155. package/dist/src/agent/memory/user-context-coordinator.js.map +1 -1
  156. package/dist/src/agent/prompt/sections/behavior.d.ts +2 -0
  157. package/dist/src/agent/prompt/sections/behavior.js +30 -1
  158. package/dist/src/agent/prompt/sections/behavior.js.map +1 -1
  159. package/dist/src/agent/prompt/sections/tooling.js +1 -1
  160. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  161. package/dist/src/agent/prompt/service-prompt-builder.js +8 -1
  162. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  163. package/dist/src/agent/prompt/system-prompt.d.ts +2 -0
  164. package/dist/src/agent/prompt/system-prompt.js +6 -3
  165. package/dist/src/agent/prompt/system-prompt.js.map +1 -1
  166. package/dist/src/agent/service/process-direct-streaming.js +22 -0
  167. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  168. package/dist/src/agent/service.d.ts +2 -0
  169. package/dist/src/agent/service.js +9 -3
  170. package/dist/src/agent/service.js.map +1 -1
  171. package/dist/src/agent/starter-agents.js +1 -1
  172. package/dist/src/agent/starter-agents.js.map +1 -1
  173. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  174. package/dist/src/agent/tool-manuals/xopc-use.js +1 -1
  175. package/dist/src/agent/tool-manuals/xopc-use.js.map +1 -1
  176. package/dist/src/agent/tools/composio-tool.d.ts +18 -5
  177. package/dist/src/agent/tools/composio-tool.js +252 -35
  178. package/dist/src/agent/tools/composio-tool.js.map +1 -1
  179. package/dist/src/agent/tools/factory.js +7 -3
  180. package/dist/src/agent/tools/factory.js.map +1 -1
  181. package/dist/src/agent/tools/index.d.ts +1 -1
  182. package/dist/src/agent/tools/index.js +2 -2
  183. package/dist/src/agent/tools/workflow-tool.d.ts +0 -1
  184. package/dist/src/agent/tools/workflow-tool.js +3 -16
  185. package/dist/src/agent/tools/workflow-tool.js.map +1 -1
  186. package/dist/src/agent/workflow/builtins/index.d.ts +2 -28
  187. package/dist/src/agent/workflow/builtins/index.js +226 -41
  188. package/dist/src/agent/workflow/builtins/index.js.map +1 -1
  189. package/dist/src/agent/workflow/catalog.d.ts +32 -34
  190. package/dist/src/agent/workflow/catalog.js +158 -154
  191. package/dist/src/agent/workflow/catalog.js.map +1 -1
  192. package/dist/src/agent/workflow/index.d.ts +4 -6
  193. package/dist/src/agent/workflow/index.js +2 -5
  194. package/dist/src/agent/workflow/snapshot.d.ts +2 -2
  195. package/dist/src/agent/workflow/snapshot.js +2 -2
  196. package/dist/src/agent/workflow/snapshot.js.map +1 -1
  197. package/dist/src/agent/workflow/structured-output-tool.d.ts +2 -2
  198. package/dist/src/agent/workflow/structured-output-tool.js +2 -2
  199. package/dist/src/agent/workflow/structured-output-tool.js.map +1 -1
  200. package/dist/src/agent/workflow/subagent-runner.js +1 -1
  201. package/dist/src/agent/workflow/types.d.ts +31 -26
  202. package/dist/src/agent-manifest/index.d.ts +1 -0
  203. package/dist/src/agent-manifest/index.js +3 -1
  204. package/dist/src/agent-manifest/index.js.map +1 -1
  205. package/dist/src/agent-manifest/preset-chain.d.ts +10 -0
  206. package/dist/src/agent-manifest/preset-chain.js +32 -0
  207. package/dist/src/agent-manifest/preset-chain.js.map +1 -0
  208. package/dist/src/agent-manifest/resolver.js +3 -10
  209. package/dist/src/agent-manifest/resolver.js.map +1 -1
  210. package/dist/src/agent-manifest/schema.d.ts +4 -4
  211. package/dist/src/automations/api/routes.js +13 -1
  212. package/dist/src/automations/api/routes.js.map +1 -1
  213. package/dist/src/automations/domain/validation.d.ts +14 -14
  214. package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -3
  215. package/dist/src/browser/providers/browser-ext-install.d.ts +11 -1
  216. package/dist/src/browser/providers/browser-ext-install.js +39 -14
  217. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  218. package/dist/src/capabilities/store-connector.d.ts +0 -1
  219. package/dist/src/capabilities/store-connector.js +3 -5
  220. package/dist/src/capabilities/store-connector.js.map +1 -1
  221. package/dist/src/chat-commands/builtins/review.js +72 -73
  222. package/dist/src/chat-commands/builtins/review.js.map +1 -1
  223. package/dist/src/chat-commands/builtins/workflow.js +9 -54
  224. package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
  225. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  226. package/dist/src/cli/commands/extension-create.js +2 -2
  227. package/dist/src/cli/commands/extension-create.js.map +1 -1
  228. package/dist/src/cli/commands/extension-marketplace.js +42 -36
  229. package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
  230. package/dist/src/cli/commands/extension-pack.d.ts +6 -0
  231. package/dist/src/cli/commands/extension-pack.js +3 -2
  232. package/dist/src/cli/commands/extension-pack.js.map +1 -1
  233. package/dist/src/commands/agents.config.d.ts +1 -0
  234. package/dist/src/commands/agents.config.js +1 -0
  235. package/dist/src/commands/agents.config.js.map +1 -1
  236. package/dist/src/config/schema.d.ts +6 -6
  237. package/dist/src/config/schema.js +6 -22
  238. package/dist/src/config/schema.js.map +1 -1
  239. package/dist/src/config/web-patch.d.ts +1 -1
  240. package/dist/src/connectors/approval.d.ts +2 -0
  241. package/dist/src/connectors/approval.js +33 -0
  242. package/dist/src/connectors/approval.js.map +1 -0
  243. package/dist/src/connectors/auth-provider-registry.d.ts +9 -0
  244. package/dist/src/connectors/auth-provider-registry.js +17 -0
  245. package/dist/src/connectors/auth-provider-registry.js.map +1 -0
  246. package/dist/src/connectors/builtin-catalog.js +55 -116
  247. package/dist/src/connectors/builtin-catalog.js.map +1 -1
  248. package/dist/src/connectors/catalog.js +7 -2
  249. package/dist/src/connectors/catalog.js.map +1 -1
  250. package/dist/src/connectors/composio-catalog.d.ts +19 -0
  251. package/dist/src/connectors/composio-catalog.js +237 -0
  252. package/dist/src/connectors/composio-catalog.js.map +1 -0
  253. package/dist/src/connectors/composio-logo.d.ts +1 -0
  254. package/dist/src/connectors/composio-logo.js +51 -0
  255. package/dist/src/connectors/composio-logo.js.map +1 -0
  256. package/dist/src/connectors/composio-sessions.d.ts +116 -0
  257. package/dist/src/connectors/composio-sessions.js +296 -0
  258. package/dist/src/connectors/composio-sessions.js.map +1 -0
  259. package/dist/src/connectors/composio-triggers.d.ts +17 -0
  260. package/dist/src/connectors/composio-triggers.js +48 -5
  261. package/dist/src/connectors/composio-triggers.js.map +1 -1
  262. package/dist/src/connectors/composio.d.ts +31 -2
  263. package/dist/src/connectors/composio.js +374 -151
  264. package/dist/src/connectors/composio.js.map +1 -1
  265. package/dist/src/connectors/connector-memory-sync.d.ts +15 -0
  266. package/dist/src/connectors/connector-memory-sync.js +90 -0
  267. package/dist/src/connectors/connector-memory-sync.js.map +1 -0
  268. package/dist/src/connectors/install.js +35 -92
  269. package/dist/src/connectors/install.js.map +1 -1
  270. package/dist/src/connectors/instances.js +6 -2
  271. package/dist/src/connectors/instances.js.map +1 -1
  272. package/dist/src/connectors/integration-strategy.d.ts +3 -0
  273. package/dist/src/connectors/integration-strategy.js +29 -0
  274. package/dist/src/connectors/integration-strategy.js.map +1 -0
  275. package/dist/src/connectors/policy.d.ts +13 -0
  276. package/dist/src/connectors/policy.js +48 -0
  277. package/dist/src/connectors/policy.js.map +1 -0
  278. package/dist/src/connectors/providers.js +1 -1
  279. package/dist/src/connectors/runtime-adapter-registry.d.ts +25 -0
  280. package/dist/src/connectors/runtime-adapter-registry.js +154 -0
  281. package/dist/src/connectors/runtime-adapter-registry.js.map +1 -0
  282. package/dist/src/connectors/types.d.ts +113 -4
  283. package/dist/src/connectors/workflow-preflight.d.ts +20 -0
  284. package/dist/src/connectors/workflow-preflight.js +70 -0
  285. package/dist/src/connectors/workflow-preflight.js.map +1 -0
  286. package/dist/src/extensions/install-transaction.d.ts +16 -0
  287. package/dist/src/extensions/install-transaction.js +76 -0
  288. package/dist/src/extensions/install-transaction.js.map +1 -0
  289. package/dist/src/extensions/install.d.ts +2 -0
  290. package/dist/src/extensions/install.js +23 -1
  291. package/dist/src/extensions/install.js.map +1 -1
  292. package/dist/src/gateway/agents-admin.d.ts +2 -0
  293. package/dist/src/gateway/agents-admin.js +7 -0
  294. package/dist/src/gateway/agents-admin.js.map +1 -1
  295. package/dist/src/gateway/capability-presets-admin.d.ts +11 -0
  296. package/dist/src/gateway/capability-presets-admin.js +11 -4
  297. package/dist/src/gateway/capability-presets-admin.js.map +1 -1
  298. package/dist/src/gateway/chat-stream/mapper.js +17 -0
  299. package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
  300. package/dist/src/gateway/chat-stream/protocol.d.ts +18 -1
  301. package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -3
  302. package/dist/src/gateway/hono/routes/agents.js +3 -0
  303. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  304. package/dist/src/gateway/hono/routes/capability-presets.js +19 -1
  305. package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -1
  306. package/dist/src/gateway/hono/routes/connectors.js +188 -25
  307. package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
  308. package/dist/src/gateway/hono/routes/goals.js +22 -3
  309. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  310. package/dist/src/gateway/hono/routes/home.d.ts +60 -1
  311. package/dist/src/gateway/hono/routes/home.js +244 -18
  312. package/dist/src/gateway/hono/routes/home.js.map +1 -1
  313. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  314. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  315. package/dist/src/gateway/hono/routes/memory.js +14 -1
  316. package/dist/src/gateway/hono/routes/memory.js.map +1 -1
  317. package/dist/src/gateway/hono/routes/projects.js +103 -2
  318. package/dist/src/gateway/hono/routes/projects.js.map +1 -1
  319. package/dist/src/gateway/hono/routes/public-gateway.js +93 -0
  320. package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
  321. package/dist/src/gateway/hono/routes/workflows.js +137 -22
  322. package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
  323. package/dist/src/gateway/hono/routes/you.d.ts +23 -0
  324. package/dist/src/gateway/hono/routes/you.js +538 -0
  325. package/dist/src/gateway/hono/routes/you.js.map +1 -0
  326. package/dist/src/gateway/hono/sse.d.ts +2 -1
  327. package/dist/src/gateway/hono/sse.js +2 -1
  328. package/dist/src/gateway/hono/sse.js.map +1 -1
  329. package/dist/src/gateway/service/marketplace-service.d.ts +13 -1
  330. package/dist/src/gateway/service/marketplace-service.js +96 -40
  331. package/dist/src/gateway/service/marketplace-service.js.map +1 -1
  332. package/dist/src/gateway/service.d.ts +2 -0
  333. package/dist/src/gateway/service.js +7 -1
  334. package/dist/src/gateway/service.js.map +1 -1
  335. package/dist/src/goals/goal-service.d.ts +7 -5
  336. package/dist/src/goals/goal-service.js +25 -13
  337. package/dist/src/goals/goal-service.js.map +1 -1
  338. package/dist/src/goals/goal-store.js +46 -7
  339. package/dist/src/goals/goal-store.js.map +1 -1
  340. package/dist/src/goals/types.d.ts +24 -0
  341. package/dist/src/storage/sqlite/connector-repository.d.ts +49 -0
  342. package/dist/src/storage/sqlite/connector-repository.js +385 -0
  343. package/dist/src/storage/sqlite/connector-repository.js.map +1 -0
  344. package/dist/src/storage/sqlite/index.d.ts +3 -0
  345. package/dist/src/storage/sqlite/index.js +4 -1
  346. package/dist/src/storage/sqlite/migrations/030_connectors.sql +94 -0
  347. package/dist/src/storage/sqlite/migrations/031_connector_approvals.sql +24 -0
  348. package/dist/src/storage/sqlite/migrations/032_connector_webhook_deliveries.sql +15 -0
  349. package/dist/src/storage/sqlite/migrations/033_user_trust_policies.sql +6 -0
  350. package/dist/src/storage/sqlite/migrations/034_allow_global_auto_trust.sql +14 -0
  351. package/dist/src/storage/sqlite/migrations/035_user_profile_prompt_state.sql +7 -0
  352. package/dist/src/storage/sqlite/migrations/036_goal_outcome_metric.sql +12 -0
  353. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  354. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  355. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  356. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  357. package/dist/src/storage/sqlite/schema.js +1 -1
  358. package/dist/src/storage/sqlite/user-profile-setup-repository.d.ts +3 -0
  359. package/dist/src/storage/sqlite/user-profile-setup-repository.js +34 -0
  360. package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +1 -0
  361. package/dist/src/storage/sqlite/user-trust-repository.d.ts +3 -0
  362. package/dist/src/storage/sqlite/user-trust-repository.js +34 -0
  363. package/dist/src/storage/sqlite/user-trust-repository.js.map +1 -0
  364. package/dist/src/tui/components/assistant-message.js +15 -0
  365. package/dist/src/tui/components/assistant-message.js.map +1 -1
  366. package/dist/src/tui/tui-agent-events.js +85 -1
  367. package/dist/src/tui/tui-agent-events.js.map +1 -1
  368. package/dist/src/tui/tui-command-formatters.js +7 -7
  369. package/dist/src/tui/tui-command-formatters.js.map +1 -1
  370. package/dist/src/tui/tui-commands.js +1 -1
  371. package/dist/src/tui/tui-startup-resources.js +1 -1
  372. package/dist/src/user-context/import.d.ts +12 -0
  373. package/dist/src/user-context/import.js +48 -0
  374. package/dist/src/user-context/import.js.map +1 -0
  375. package/dist/src/user-context/profile.d.ts +37 -0
  376. package/dist/src/user-context/profile.js +165 -0
  377. package/dist/src/user-context/profile.js.map +1 -0
  378. package/dist/src/user-context/projection.d.ts +54 -0
  379. package/dist/src/user-context/projection.js +121 -0
  380. package/dist/src/user-context/projection.js.map +1 -0
  381. package/dist/src/user-context/source-recommendations.d.ts +13 -0
  382. package/dist/src/user-context/source-recommendations.js +86 -0
  383. package/dist/src/user-context/source-recommendations.js.map +1 -0
  384. package/dist/src/user-context/trust-policy.d.ts +11 -0
  385. package/dist/src/user-context/trust-policy.js +31 -0
  386. package/dist/src/user-context/trust-policy.js.map +1 -0
  387. package/dist/src/workflows/authoring/index.d.ts +1 -0
  388. package/dist/src/workflows/authoring/index.js +2 -0
  389. package/dist/src/workflows/authoring/workflow-draft-store.d.ts +33 -0
  390. package/dist/src/workflows/authoring/workflow-draft-store.js +74 -0
  391. package/dist/src/workflows/authoring/workflow-draft-store.js.map +1 -0
  392. package/dist/src/workflows/domain/definition-utils.d.ts +6 -4
  393. package/dist/src/workflows/domain/definition-utils.js +28 -26
  394. package/dist/src/workflows/domain/definition-utils.js.map +1 -1
  395. package/dist/src/workflows/domain/definition.d.ts +79 -6
  396. package/dist/src/workflows/domain/event.d.ts +18 -2
  397. package/dist/src/workflows/domain/index.js +3 -3
  398. package/dist/src/workflows/domain/run.d.ts +16 -2
  399. package/dist/src/workflows/domain/run.js.map +1 -1
  400. package/dist/src/workflows/domain/validation.d.ts +9 -5
  401. package/dist/src/workflows/domain/validation.js +183 -40
  402. package/dist/src/workflows/domain/validation.js.map +1 -1
  403. package/dist/src/workflows/draft/workflow-draft-prompt.d.ts +2 -3
  404. package/dist/src/workflows/draft/workflow-draft-prompt.js +31 -73
  405. package/dist/src/workflows/draft/workflow-draft-prompt.js.map +1 -1
  406. package/dist/src/workflows/draft/workflow-draft-service.js +4 -8
  407. package/dist/src/workflows/draft/workflow-draft-service.js.map +1 -1
  408. package/dist/src/workflows/draft/workflow-draft-validator.js +29 -37
  409. package/dist/src/workflows/draft/workflow-draft-validator.js.map +1 -1
  410. package/dist/src/workflows/draft/workflow-draft.types.d.ts +4 -4
  411. package/dist/src/workflows/engine/projector.js +43 -1
  412. package/dist/src/workflows/engine/projector.js.map +1 -1
  413. package/dist/src/workflows/engine/workflow-engine.d.ts +2 -3
  414. package/dist/src/workflows/engine/workflow-engine.js +24 -4
  415. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  416. package/dist/src/workflows/index.js +4 -7
  417. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +1 -9
  418. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -1
  419. package/dist/src/workflows/runtime/graph-workflow-runtime.d.ts +10 -0
  420. package/dist/src/workflows/runtime/graph-workflow-runtime.js +295 -0
  421. package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +1 -0
  422. package/dist/src/workflows/runtime/index.d.ts +1 -2
  423. package/dist/src/workflows/runtime/index.js +2 -5
  424. package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +5 -8
  425. package/dist/src/workflows/service/workflow-run-service.js +15 -1
  426. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  427. package/dist/src/workflows/service/workflow-run-service.types.d.ts +2 -1
  428. package/package.json +4 -3
  429. package/dist/gateway/static/root/assets/agents-CyvCIHnB.js +0 -2
  430. package/dist/gateway/static/root/assets/apps-page-DK_Vx6nl.js +0 -1
  431. package/dist/gateway/static/root/assets/automation-suggestion-card-B1LV3YYv.js +0 -1
  432. package/dist/gateway/static/root/assets/automations-page-fzrovqhv.js +0 -4
  433. package/dist/gateway/static/root/assets/block-editor-Dhj5f4Bx.js +0 -184
  434. package/dist/gateway/static/root/assets/browser-settings-page-BDn-n-UB.js +0 -8
  435. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Co5ipo_Q.js +0 -1
  436. package/dist/gateway/static/root/assets/channels-settings-BWlpaxg9.js +0 -1
  437. package/dist/gateway/static/root/assets/channels-status-swr-D_jkIZLV.js +0 -1
  438. package/dist/gateway/static/root/assets/connectors-page-BcekbW4q.js +0 -2
  439. package/dist/gateway/static/root/assets/desktop-pet-settings-BJCUuL8Y.js +0 -1
  440. package/dist/gateway/static/root/assets/dreaming-settings-BN1Z2mIo.js +0 -3
  441. package/dist/gateway/static/root/assets/extension-page-B-1KxvVy.js +0 -1
  442. package/dist/gateway/static/root/assets/extension-settings-page-BF9NACI3.js +0 -1
  443. package/dist/gateway/static/root/assets/gateway-settings-DN9sNREz.js +0 -1
  444. package/dist/gateway/static/root/assets/goal-create-dialog-BpoQW8cD.js +0 -1
  445. package/dist/gateway/static/root/assets/goal-detail-page-CBRSPd0b.js +0 -4
  446. package/dist/gateway/static/root/assets/goals-page-BCcBi407.js +0 -2
  447. package/dist/gateway/static/root/assets/goals-settings-pkTXzXkh.js +0 -1
  448. package/dist/gateway/static/root/assets/heartbeat-settings-ezsufgLQ.js +0 -1
  449. package/dist/gateway/static/root/assets/index-B8s8Pq5U.css +0 -1
  450. package/dist/gateway/static/root/assets/index-DcUaXYeb.js +0 -262
  451. package/dist/gateway/static/root/assets/logs-page-DQtTRXtj.js +0 -7
  452. package/dist/gateway/static/root/assets/messages-BXNELNBa.js +0 -3
  453. package/dist/gateway/static/root/assets/models-hub-panel-BP2M9n6Q.js +0 -2
  454. package/dist/gateway/static/root/assets/notes-page-CspveYaO.js +0 -1
  455. package/dist/gateway/static/root/assets/notes-workbench-BHwzJ0OC.js +0 -2
  456. package/dist/gateway/static/root/assets/project-detail-page-Dy3rsobs.js +0 -1
  457. package/dist/gateway/static/root/assets/projects-page-CWKpPE0L.js +0 -1
  458. package/dist/gateway/static/root/assets/remote-access-hub-CqNRyXEo.js +0 -1
  459. package/dist/gateway/static/root/assets/sessions-page-MEME7ivF.js +0 -1
  460. package/dist/gateway/static/root/assets/settings-advanced-gate-JVd0qaSF.js +0 -1
  461. package/dist/gateway/static/root/assets/settings-page-DYEbB1EV.js +0 -1
  462. package/dist/gateway/static/root/assets/setup-status-panel-dWN8BJ3z.js +0 -1
  463. package/dist/gateway/static/root/assets/share-preview-page-D8foINzP.js +0 -2
  464. package/dist/gateway/static/root/assets/shares-settings-Tgbv1s7G.js +0 -1
  465. package/dist/gateway/static/root/assets/skill-reload-api-D_YK0b_Z.js +0 -1
  466. package/dist/gateway/static/root/assets/skills-page-DGytfoZK.js +0 -2
  467. package/dist/gateway/static/root/assets/toast-z0toXu32.js +0 -1
  468. package/dist/gateway/static/root/assets/user-profile-settings-panel-8YtygcJp.js +0 -1
  469. package/dist/gateway/static/root/assets/voice-api-key-field-BVH71EFf.js +0 -1
  470. package/dist/gateway/static/root/assets/work-item-detail-page-JeTE7XNM.js +0 -1
  471. package/dist/gateway/static/root/assets/workflow-start-dialog-_u8Uc1ze.js +0 -1
  472. package/dist/gateway/static/root/assets/workflows-page-ixgk_y1l.js +0 -18
  473. package/dist/src/agent/workflow/builtins/audit-repo.d.ts +0 -13
  474. package/dist/src/agent/workflow/builtins/audit-repo.js +0 -183
  475. package/dist/src/agent/workflow/builtins/audit-repo.js.map +0 -1
  476. package/dist/src/agent/workflow/builtins/client-proposal.d.ts +0 -12
  477. package/dist/src/agent/workflow/builtins/client-proposal.js +0 -164
  478. package/dist/src/agent/workflow/builtins/client-proposal.js.map +0 -1
  479. package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +0 -12
  480. package/dist/src/agent/workflow/builtins/competitor-scan.js +0 -164
  481. package/dist/src/agent/workflow/builtins/competitor-scan.js.map +0 -1
  482. package/dist/src/agent/workflow/builtins/content-draft.d.ts +0 -13
  483. package/dist/src/agent/workflow/builtins/content-draft.js +0 -159
  484. package/dist/src/agent/workflow/builtins/content-draft.js.map +0 -1
  485. package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +0 -11
  486. package/dist/src/agent/workflow/builtins/content-repurpose.js +0 -146
  487. package/dist/src/agent/workflow/builtins/content-repurpose.js.map +0 -1
  488. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +0 -13
  489. package/dist/src/agent/workflow/builtins/debug-incident.js +0 -177
  490. package/dist/src/agent/workflow/builtins/debug-incident.js.map +0 -1
  491. package/dist/src/agent/workflow/builtins/decision-compare.d.ts +0 -13
  492. package/dist/src/agent/workflow/builtins/decision-compare.js +0 -187
  493. package/dist/src/agent/workflow/builtins/decision-compare.js.map +0 -1
  494. package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +0 -12
  495. package/dist/src/agent/workflow/builtins/implementation-plan.js +0 -185
  496. package/dist/src/agent/workflow/builtins/implementation-plan.js.map +0 -1
  497. package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +0 -11
  498. package/dist/src/agent/workflow/builtins/inbox-triage.js +0 -158
  499. package/dist/src/agent/workflow/builtins/inbox-triage.js.map +0 -1
  500. package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +0 -12
  501. package/dist/src/agent/workflow/builtins/meeting-prep.js +0 -152
  502. package/dist/src/agent/workflow/builtins/meeting-prep.js.map +0 -1
  503. package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +0 -14
  504. package/dist/src/agent/workflow/builtins/multi-perspective-review.js +0 -171
  505. package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +0 -1
  506. package/dist/src/agent/workflow/builtins/offer-design.d.ts +0 -12
  507. package/dist/src/agent/workflow/builtins/offer-design.js +0 -170
  508. package/dist/src/agent/workflow/builtins/offer-design.js.map +0 -1
  509. package/dist/src/agent/workflow/builtins/pr-review.d.ts +0 -12
  510. package/dist/src/agent/workflow/builtins/pr-review.js +0 -178
  511. package/dist/src/agent/workflow/builtins/pr-review.js.map +0 -1
  512. package/dist/src/agent/workflow/builtins/release-check.d.ts +0 -11
  513. package/dist/src/agent/workflow/builtins/release-check.js +0 -174
  514. package/dist/src/agent/workflow/builtins/release-check.js.map +0 -1
  515. package/dist/src/agent/workflow/builtins/research.d.ts +0 -13
  516. package/dist/src/agent/workflow/builtins/research.js +0 -188
  517. package/dist/src/agent/workflow/builtins/research.js.map +0 -1
  518. package/dist/src/agent/workflow/builtins/weekly-review.d.ts +0 -12
  519. package/dist/src/agent/workflow/builtins/weekly-review.js +0 -139
  520. package/dist/src/agent/workflow/builtins/weekly-review.js.map +0 -1
  521. package/dist/src/agent/workflow/last-run-memory.d.ts +0 -42
  522. package/dist/src/agent/workflow/last-run-memory.js +0 -60
  523. package/dist/src/agent/workflow/last-run-memory.js.map +0 -1
  524. package/dist/src/agent/workflow/lint.d.ts +0 -38
  525. package/dist/src/agent/workflow/lint.js +0 -74
  526. package/dist/src/agent/workflow/lint.js.map +0 -1
  527. package/dist/src/agent/workflow/meta-locale.d.ts +0 -12
  528. package/dist/src/agent/workflow/meta-locale.js +0 -62
  529. package/dist/src/agent/workflow/meta-locale.js.map +0 -1
  530. package/dist/src/agent/workflow/parser.d.ts +0 -20
  531. package/dist/src/agent/workflow/parser.js +0 -152
  532. package/dist/src/agent/workflow/parser.js.map +0 -1
  533. package/dist/src/agent/workflow/runtime.d.ts +0 -34
  534. package/dist/src/agent/workflow/runtime.js +0 -402
  535. package/dist/src/agent/workflow/runtime.js.map +0 -1
  536. package/dist/src/connectors/oauth.d.ts +0 -22
  537. package/dist/src/connectors/oauth.js +0 -99
  538. package/dist/src/connectors/oauth.js.map +0 -1
  539. package/dist/src/workflows/runtime/script-runtime.d.ts +0 -3
  540. package/dist/src/workflows/runtime/script-runtime.js +0 -3
  541. package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +0 -5
  542. package/dist/src/workflows/runtime/script-workflow-runtime.js +0 -15
  543. package/dist/src/workflows/runtime/script-workflow-runtime.js.map +0 -1
@@ -1,46 +1,263 @@
1
- import { canUseComposioAction, executeComposioTool } from "../../connectors/composio.js";
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
- slug: Type.String({ description: "Composio action slug, e.g. GMAIL_FETCH_EMAILS or SLACK_SENDS_A_MESSAGE_TO_A_SLACK_CHANNEL." }),
6
- arguments: Type.Optional(Type.Any({ description: "Action arguments matching the Composio action schema." }))
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 hasInstalledComposioConnector(config) {
9
- return Object.entries(config?.connectors?.instances ?? {}).some(([id, record]) => id.startsWith("composio-") && id !== "composio-api-key" && Boolean(record && typeof record === "object" && !Array.isArray(record)));
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 createComposioExecuteTool(getConfig) {
12
- if (!hasInstalledComposioConnector(getConfig())) return null;
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
- name: "composio_execute",
15
- label: "🔌 Composio Execute",
16
- description: "Execute an installed Composio integration action. Actions are gated by the connector curated allowlist and read/write/admin scope.",
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 { createComposioExecuteTool };
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 { createComposioExecuteTool } from "./composio-tool.js";
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
- createComposioExecuteTool(() => this.deps.getConfig?.())
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 { createComposioExecuteTool } from './composio-tool.js';
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 { createComposioExecuteTool } from "./composio-tool.js";
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, createComposioExecuteTool, 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 };
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;