@xopcai/xopc 0.0.187 → 0.0.189

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 (385) hide show
  1. package/README.md +1 -1
  2. package/dist/browser-ext/manifest.json +1 -1
  3. package/dist/extensions/demo-memory/src/index.js +1 -0
  4. package/dist/extensions/feishu/src/streaming/streaming-adapter.js +1 -3
  5. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +0 -2
  6. package/dist/extensions/telegram/src/draft-stream.d.ts +0 -4
  7. package/dist/extensions/telegram/src/draft-stream.js +1 -53
  8. package/dist/extensions/telegram/xopc.extension.json +1 -1
  9. package/dist/gateway/static/root/assets/{activity-store-WlR2zEvA.js → activity-store-DTFKTPs8.js} +1 -1
  10. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-RedDszrG.js → agent-avatar-dicebear-DqO25Qe5.js} +1 -1
  11. package/dist/gateway/static/root/assets/agents-BvdqdER9.js +2 -0
  12. package/dist/gateway/static/root/assets/{api-tVOllncq.js → api-DWeXfwVU.js} +1 -1
  13. package/dist/gateway/static/root/assets/{app-management-settings-panel-C9hKBzaF.js → app-management-settings-panel-BRpV8PXG.js} +1 -1
  14. package/dist/gateway/static/root/assets/{appearance-settings-5cQvq7hd.js → appearance-settings-3ntKM9nQ.js} +1 -1
  15. package/dist/gateway/static/root/assets/apps-page-nKLsfy6C.js +1 -0
  16. package/dist/gateway/static/root/assets/{archive-plugin-Ct-shK4n.js → archive-plugin-Df7Ycj_7.js} +1 -1
  17. package/dist/gateway/static/root/assets/{attachment-load-CpPj3m-q.js → attachment-load-UHgfZYtj.js} +1 -1
  18. package/dist/gateway/static/root/assets/automations-page-Dh5bdZiN.js +6 -0
  19. package/dist/gateway/static/root/assets/{binary-plugins-BpSXZBle.js → binary-plugins-BJah99wE.js} +1 -1
  20. package/dist/gateway/static/root/assets/{block-editor-B8hR2tXc.js → block-editor-DNlY5KqF.js} +46 -46
  21. package/dist/gateway/static/root/assets/browser-settings-page-CRJ_nAuh.js +8 -0
  22. package/dist/gateway/static/root/assets/{browser-workflow-inputs-D_LAXUrh.js → browser-workflow-inputs-vyUfdzAd.js} +1 -1
  23. package/dist/gateway/static/root/assets/{browser-workflows-page-CPAs7-6s.js → browser-workflows-page-C1cKZjx-.js} +2 -2
  24. package/dist/gateway/static/root/assets/capabilities-settings-panel-DeQR5BZt.js +7 -0
  25. package/dist/gateway/static/root/assets/{capability-presets-api-CKklVY2p.js → capability-presets-api-D7tkhDMv.js} +1 -1
  26. package/dist/gateway/static/root/assets/capability-presets-settings-panel-D7uK3q1p.js +1 -0
  27. package/dist/gateway/static/root/assets/{channel-recipient-api-WWN-nbFL.js → channel-recipient-api-BGG2kpJB.js} +1 -1
  28. package/dist/gateway/static/root/assets/channels-settings-Bw6Dniyq.js +1 -0
  29. package/dist/gateway/static/root/assets/channels-status-swr-BrUTz4uU.js +1 -0
  30. package/dist/gateway/static/root/assets/{connector-logo-CdNkVFdB.js → connector-logo-8YU53RUT.js} +1 -1
  31. package/dist/gateway/static/root/assets/connectors-page-k9tMiOL5.js +2 -0
  32. package/dist/gateway/static/root/assets/{desktop-pet-Bm_IEAf3.js → desktop-pet-BUuBEJuP.js} +1 -1
  33. package/dist/gateway/static/root/assets/{desktop-pet-settings-C0Ve04-G.js → desktop-pet-settings-BGfVIJM3.js} +1 -1
  34. package/dist/gateway/static/root/assets/{directory-picker-path-field-B2cvhvAI.js → directory-picker-path-field-DrQFfHH_.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-debug-page-DNashgGu.js → extension-debug-page-CEnIFOX-.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-page-Bvo-5htX.js → extension-page-CCqHbexs.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-settings-page-BBESdISV.js → extension-settings-page-DEZw_7zN.js} +1 -1
  38. package/dist/gateway/static/root/assets/{gateway-config-api-ClQvokMo.js → gateway-config-api-CgUE2Ii1.js} +1 -1
  39. package/dist/gateway/static/root/assets/gateway-settings-Dg8qCiIp.js +1 -0
  40. package/dist/gateway/static/root/assets/{gateway-startup-retry-CntXJF6W.js → gateway-startup-retry-DxhKNiCF.js} +1 -1
  41. package/dist/gateway/static/root/assets/{heartbeat-settings-CWKcZuvc.js → heartbeat-settings-27tRzDEo.js} +1 -1
  42. package/dist/gateway/static/root/assets/home-page-VA511kMr.js +3 -0
  43. package/dist/gateway/static/root/assets/{image-generation-api-DjSAQwGy.js → image-generation-api-DCFdc-HD.js} +1 -1
  44. package/dist/gateway/static/root/assets/index-BvR-i-m6.js +216 -0
  45. package/dist/gateway/static/root/assets/index-zybP34zk.css +1 -0
  46. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-ahKHpjoW.js → keyboard-shortcuts-settings-Bf2VLtXW.js} +1 -1
  47. package/dist/gateway/static/root/assets/local-app-workbench-page-CaJq4-wV.js +2 -0
  48. package/dist/gateway/static/root/assets/{local-apps-page-B6GKdgza.js → local-apps-page-Ca1RuI13.js} +1 -1
  49. package/dist/gateway/static/root/assets/{locale-store-Bff30u5V.js → locale-store-DUW5YE3R.js} +1 -1
  50. package/dist/gateway/static/root/assets/logs-page-BLTCg69e.js +2 -0
  51. package/dist/gateway/static/root/assets/management-settings-B3Eop1zn.js +1 -0
  52. package/dist/gateway/static/root/assets/{markdown-split-BeNMJm_i.js → markdown-split-BGOYjgnM.js} +1 -1
  53. package/dist/gateway/static/root/assets/{media-plugins-Bdzrj_-6.js → media-plugins-CT0txyM4.js} +1 -1
  54. package/dist/gateway/static/root/assets/messages-CMjnbdbn.js +3 -0
  55. package/dist/gateway/static/root/assets/{notes-page-MYIi-9S9.js → notes-page-DfKgAe78.js} +1 -1
  56. package/dist/gateway/static/root/assets/notes-workbench-Bp1w9UM1.js +4 -0
  57. package/dist/gateway/static/root/assets/{page-tabs-3t88bbGx.js → page-tabs-DNrbCgmC.js} +1 -1
  58. package/dist/gateway/static/root/assets/{preview-open-alternatives-Cf_BWbeE.js → preview-open-alternatives-BTqViDOR.js} +1 -1
  59. package/dist/gateway/static/root/assets/product-delivery-tRr-7IxY.js +1 -0
  60. package/dist/gateway/static/root/assets/{product-open-page-CKq73c98.js → product-open-page-C_2L4_Iu.js} +1 -1
  61. package/dist/gateway/static/root/assets/project-detail-page-CZmbPDQN.js +1 -0
  62. package/dist/gateway/static/root/assets/projects-page-D5pzqfm5.js +1 -0
  63. package/dist/gateway/static/root/assets/remote-access-hub-CC-XhVGI.js +1 -0
  64. package/dist/gateway/static/root/assets/{schema-form-NqOm-OG1.js → schema-form-BFLfkDGG.js} +1 -1
  65. package/dist/gateway/static/root/assets/{schemas-C6onAggk.js → schemas-zIBW3wiV.js} +1 -1
  66. package/dist/gateway/static/root/assets/sessions-page-B2eTLVDV.js +1 -0
  67. package/dist/gateway/static/root/assets/settings-advanced-gate-CRuZ_bl0.js +1 -0
  68. package/dist/gateway/static/root/assets/{settings-form-section-DYAS8p8z.js → settings-form-section-C4GXGeA4.js} +1 -1
  69. package/dist/gateway/static/root/assets/{settings-loading-skeleton-DZFhxihA.js → settings-loading-skeleton-C9a-EbTZ.js} +1 -1
  70. package/dist/gateway/static/root/assets/settings-page-DI9qDH5x.js +1 -0
  71. package/dist/gateway/static/root/assets/{settings-page-layout-DfFfkdED.js → settings-page-layout-D-LWQdI5.js} +1 -1
  72. package/dist/gateway/static/root/assets/setup-status-panel-CJwmPvgs.js +1 -0
  73. package/dist/gateway/static/root/assets/{share-preview-page-CYtrQaZN.js → share-preview-page-BKSMG9r5.js} +1 -1
  74. package/dist/gateway/static/root/assets/shares-settings-YzSDS4G_.js +1 -0
  75. package/dist/gateway/static/root/assets/skill-reload-api-CwOo8zZk.js +1 -0
  76. package/dist/gateway/static/root/assets/skills-page-xd1cgSGN.js +2 -0
  77. package/dist/gateway/static/root/assets/{skills-page.utils-BBXirAjc.js → skills-page.utils-zsz2HIlZ.js} +1 -1
  78. package/dist/gateway/static/root/assets/{system-settings-panel-DLf5YvFl.js → system-settings-panel-IWNDBI1O.js} +1 -1
  79. package/dist/gateway/static/root/assets/{task-detail-page-DFGkuYfl.js → task-detail-page-CgtK02kP.js} +1 -1
  80. package/dist/gateway/static/root/assets/{theme-store-y7e_tvYi.js → theme-store-BkJe7UDo.js} +1 -1
  81. package/dist/gateway/static/root/assets/time-picker-CstQ___Y.js +1 -0
  82. package/dist/gateway/static/root/assets/{typed-models-lib-DR12j_dr.js → typed-models-lib-C07LGthO.js} +1 -1
  83. package/dist/gateway/static/root/assets/{use-save-bar-registration-BsvcJgZl.js → use-save-bar-registration-CQYE0l6z.js} +1 -1
  84. package/dist/gateway/static/root/assets/user-context-page-BnQAWS_B.js +1 -0
  85. package/dist/gateway/static/root/assets/{voice-api-key-field-DKADXFWD.js → voice-api-key-field-Boue1D46.js} +1 -1
  86. package/dist/gateway/static/root/assets/{work-discovery-overlay-BC1nExf8.js → work-discovery-overlay-bbmvCmc8.js} +1 -1
  87. package/dist/gateway/static/root/assets/work-discovery-page-CAszL1y8.js +1 -0
  88. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-C8X5W-8k.js → workflow-run-setup-panel-DlHv-GZC.js} +2 -2
  89. package/dist/gateway/static/root/assets/workflows-page-DxGzo3-x.js +11 -0
  90. package/dist/gateway/static/root/index.html +9 -9
  91. package/dist/package.js +1 -1
  92. package/dist/packages/endpoint-tools-protocol/src/index.js +184 -0
  93. package/dist/packages/gateway-contract/src/tool-activity.js +223 -0
  94. package/dist/packages/realtime-client/src/index.js +199 -0
  95. package/dist/packages/realtime-protocol/src/index.js +83 -0
  96. package/dist/src/agent/agent-manager.d.ts +1 -0
  97. package/dist/src/agent/agent-manager.js +3 -8
  98. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  99. package/dist/src/agent/background-review/prompts.js +3 -1
  100. package/dist/src/agent/background-review/run-background-review.d.ts +2 -0
  101. package/dist/src/agent/background-review/run-background-review.js +5 -2
  102. package/dist/src/agent/client-error-format.d.ts +1 -1
  103. package/dist/src/agent/client-error-format.js +1 -1
  104. package/dist/src/agent/code-intelligence/binary.js +1 -1
  105. package/dist/src/agent/embedded/run-for-session.d.ts +0 -2
  106. package/dist/src/agent/embedded/run-for-session.js +99 -112
  107. package/dist/src/agent/external-tools/composio-provider.d.ts +29 -0
  108. package/dist/src/agent/external-tools/composio-provider.js +307 -0
  109. package/dist/src/agent/external-tools/endpoint-provider.d.ts +17 -0
  110. package/dist/src/agent/external-tools/endpoint-provider.js +93 -0
  111. package/dist/src/agent/external-tools/extension-provider.d.ts +20 -0
  112. package/dist/src/agent/external-tools/extension-provider.js +68 -0
  113. package/dist/src/agent/external-tools/gateway-tools.d.ts +8 -0
  114. package/dist/src/agent/external-tools/gateway-tools.js +89 -0
  115. package/dist/src/agent/external-tools/index.d.ts +23 -0
  116. package/dist/src/agent/external-tools/index.js +46 -0
  117. package/dist/src/agent/external-tools/mcp-provider.d.ts +29 -0
  118. package/dist/src/agent/external-tools/mcp-provider.js +118 -0
  119. package/dist/src/agent/external-tools/memory-provider.d.ts +21 -0
  120. package/dist/src/agent/external-tools/memory-provider.js +56 -0
  121. package/dist/src/agent/external-tools/refs.d.ts +5 -0
  122. package/dist/src/agent/external-tools/refs.js +18 -0
  123. package/dist/src/agent/external-tools/service.d.ts +26 -0
  124. package/dist/src/agent/external-tools/service.js +117 -0
  125. package/dist/src/agent/external-tools/types.d.ts +35 -0
  126. package/dist/src/agent/external-tools/types.js +10 -0
  127. package/dist/src/agent/inbound/inbound-loop.d.ts +0 -2
  128. package/dist/src/agent/inbound/inbound-loop.js +4 -3
  129. package/dist/src/agent/inbound/turn-dispatcher.d.ts +9 -8
  130. package/dist/src/agent/inbound/turn-dispatcher.js +13 -11
  131. package/dist/src/agent/mcp/{bundle-mcp-materialize.d.ts → bundle-mcp-gateway.d.ts} +1 -19
  132. package/dist/src/agent/mcp/bundle-mcp-gateway.js +60 -0
  133. package/dist/src/agent/mcp/bundle-mcp-names.d.ts +0 -8
  134. package/dist/src/agent/mcp/bundle-mcp-names.js +2 -29
  135. package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +4 -7
  136. package/dist/src/agent/mcp/bundle-mcp-policy.js +6 -20
  137. package/dist/src/agent/mcp/bundle-mcp-runtime.js +2 -2
  138. package/dist/src/agent/mcp/bundle-mcp-tools.d.ts +1 -2
  139. package/dist/src/agent/mcp/bundle-mcp-tools.js +1 -2
  140. package/dist/src/agent/mcp/bundle-mcp-types.d.ts +0 -5
  141. package/dist/src/agent/mcp/index.d.ts +0 -2
  142. package/dist/src/agent/mcp/index.js +2 -5
  143. package/dist/src/agent/mcp/mcp-stdio-transport.js +1 -1
  144. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  145. package/dist/src/agent/memory/context/planner.d.ts +1 -0
  146. package/dist/src/agent/memory/context/planner.js +22 -7
  147. package/dist/src/agent/memory/manager.d.ts +4 -1
  148. package/dist/src/agent/memory/manager.js +5 -2
  149. package/dist/src/agent/memory/types.d.ts +2 -0
  150. package/dist/src/agent/messaging/command-handler.d.ts +2 -2
  151. package/dist/src/agent/messaging/command-handler.js +3 -3
  152. package/dist/src/agent/messaging/stream-manager.d.ts +2 -14
  153. package/dist/src/agent/messaging/stream-manager.js +0 -12
  154. package/dist/src/agent/orchestration/agent-event-handler.d.ts +1 -3
  155. package/dist/src/agent/orchestration/agent-event-handler.js +0 -36
  156. package/dist/src/agent/orchestration/agent-orchestrator.d.ts +0 -5
  157. package/dist/src/agent/orchestration/agent-orchestrator.js +0 -5
  158. package/dist/src/agent/prompt/sections/behavior.js +6 -4
  159. package/dist/src/agent/service/async-queue.d.ts +1 -1
  160. package/dist/src/agent/service/async-queue.js +1 -1
  161. package/dist/src/agent/service/direct-turn-helpers.d.ts +1 -1
  162. package/dist/src/agent/service/direct-turn-helpers.js +1 -1
  163. package/dist/src/agent/service/process-direct-one-shot.d.ts +3 -1
  164. package/dist/src/agent/service/process-direct-one-shot.js +1 -1
  165. package/dist/src/agent/service/process-direct-streaming.d.ts +7 -5
  166. package/dist/src/agent/service/process-direct-streaming.js +5 -5
  167. package/dist/src/agent/service.d.ts +1 -4
  168. package/dist/src/agent/service.js +6 -32
  169. package/dist/src/agent/service.types.d.ts +2 -3
  170. package/dist/src/agent/session/index.d.ts +1 -1
  171. package/dist/src/agent/session/session-context.d.ts +2 -0
  172. package/dist/src/agent/session/session-context.js +4 -0
  173. package/dist/src/agent/session/session-state-bag.d.ts +4 -4
  174. package/dist/src/agent/session/session-state-bag.js +1 -1
  175. package/dist/src/agent/skills/hub-pull.js +1 -1
  176. package/dist/src/agent/starter-agents.js +2 -2
  177. package/dist/src/agent/streaming/reasoning-visibility.d.ts +6 -0
  178. package/dist/src/agent/streaming/{reasoning-visibility-sse.js → reasoning-visibility.js} +3 -6
  179. package/dist/src/agent/tools/delegate-tool.js +5 -1
  180. package/dist/src/agent/tools/executor.js +1 -1
  181. package/dist/src/agent/tools/factory.d.ts +6 -1
  182. package/dist/src/agent/tools/factory.js +17 -22
  183. package/dist/src/agent/tools/index.d.ts +0 -1
  184. package/dist/src/agent/tools/index.js +1 -2
  185. package/dist/src/agent/workflow/workflow-child-tools.js +7 -1
  186. package/dist/src/automations/domain/types.d.ts +2 -1
  187. package/dist/src/automations/domain/validation.d.ts +1 -1
  188. package/dist/src/automations/service/action-executor.js +4 -1
  189. package/dist/src/browser/providers/cloakbrowser.js +1 -1
  190. package/dist/src/channels/channel-domain.d.ts +0 -4
  191. package/dist/src/channels/pairing/pairing-challenge.d.ts +1 -1
  192. package/dist/src/channels/pairing/pairing-challenge.js +1 -1
  193. package/dist/src/channels/plugin-types.d.ts +0 -2
  194. package/dist/src/cli/commands/agent/stream-renderer.js +4 -1
  195. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  196. package/dist/src/config/rules.js +0 -5
  197. package/dist/src/config/schema.d.ts +3 -5
  198. package/dist/src/config/schema.js +0 -3
  199. package/dist/src/config/web-patch.js +0 -1
  200. package/dist/src/connectors/health.js +1 -1
  201. package/dist/src/endpoint-tools/auth.d.ts +20 -0
  202. package/dist/src/endpoint-tools/auth.js +51 -0
  203. package/dist/src/endpoint-tools/index.d.ts +5 -0
  204. package/dist/src/endpoint-tools/index.js +6 -0
  205. package/dist/src/endpoint-tools/invocation-service.d.ts +68 -0
  206. package/dist/src/endpoint-tools/invocation-service.js +190 -0
  207. package/dist/src/endpoint-tools/policy.d.ts +10 -0
  208. package/dist/src/endpoint-tools/policy.js +18 -0
  209. package/dist/src/endpoint-tools/registry.d.ts +45 -0
  210. package/dist/src/endpoint-tools/registry.js +121 -0
  211. package/dist/src/endpoint-tools/runtime.d.ts +23 -0
  212. package/dist/src/endpoint-tools/runtime.js +86 -0
  213. package/dist/src/endpoint-tools/upload-service.d.ts +41 -0
  214. package/dist/src/endpoint-tools/upload-service.js +103 -0
  215. package/dist/src/extensions/extension-registry-impl.d.ts +3 -1
  216. package/dist/src/extensions/extension-registry-impl.js +7 -1
  217. package/dist/src/extensions/loader.js +1 -1
  218. package/dist/src/extensions/types/core.d.ts +2 -1
  219. package/dist/src/extensions/types/hooks.d.ts +1 -1
  220. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  221. package/dist/src/gateway/agent-builtin-tools.js +5 -2
  222. package/dist/src/gateway/chat-stream/mapper.js +16 -1
  223. package/dist/src/gateway/chat-stream/protocol.d.ts +4 -1
  224. package/dist/src/gateway/clarify-bridge.d.ts +5 -4
  225. package/dist/src/gateway/clarify-bridge.js +3 -4
  226. package/dist/src/gateway/file-reference-errors.d.ts +6 -0
  227. package/dist/src/gateway/file-reference-errors.js +21 -0
  228. package/dist/src/gateway/heartbeat/service.js +5 -2
  229. package/dist/src/gateway/hono/app.js +1 -5
  230. package/dist/src/gateway/hono/index.d.ts +0 -1
  231. package/dist/src/gateway/hono/index.js +1 -2
  232. package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -2
  233. package/dist/src/gateway/hono/lib/config-payload.js +1 -2
  234. package/dist/src/gateway/hono/middleware/auth.js +3 -5
  235. package/dist/src/gateway/hono/routes/agent-stream.js +49 -6
  236. package/dist/src/gateway/hono/routes/config-patch/gateway.d.ts +2 -2
  237. package/dist/src/gateway/hono/routes/config-patch/gateway.js +0 -19
  238. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  239. package/dist/src/gateway/hono/routes/deps.d.ts +0 -2
  240. package/dist/src/gateway/hono/routes/endpoint-tools.d.ts +3 -0
  241. package/dist/src/gateway/hono/routes/endpoint-tools.js +196 -0
  242. package/dist/src/gateway/hono/routes/index.js +4 -0
  243. package/dist/src/gateway/hono/routes/logs.js +0 -4
  244. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  245. package/dist/src/gateway/hono/routes/projects.js +34 -13
  246. package/dist/src/gateway/hono/routes/public-gateway.js +2 -2
  247. package/dist/src/gateway/hono/routes/realtime.d.ts +3 -0
  248. package/dist/src/gateway/hono/routes/realtime.js +35 -0
  249. package/dist/src/gateway/hono/routes/workspace.js +34 -13
  250. package/dist/src/gateway/hono/routes/you.d.ts +0 -9
  251. package/dist/src/gateway/hono/routes/you.js +81 -128
  252. package/dist/src/gateway/index.d.ts +1 -1
  253. package/dist/src/gateway/index.js +1 -2
  254. package/dist/src/gateway/protocol.d.ts +1 -7
  255. package/dist/src/gateway/security/index.js +1 -1
  256. package/dist/src/gateway/security/operator-scopes.js +1 -1
  257. package/dist/src/gateway/server.js +4 -4
  258. package/dist/src/gateway/service/agent-runner.d.ts +11 -9
  259. package/dist/src/gateway/service/agent-runner.js +18 -18
  260. package/dist/src/gateway/service/config-coordinator.d.ts +2 -2
  261. package/dist/src/gateway/service/config-coordinator.js +1 -1
  262. package/dist/src/gateway/service/run-gateway-agent.d.ts +4 -3
  263. package/dist/src/gateway/service/run-gateway-agent.js +17 -14
  264. package/dist/src/gateway/service/session-input-coordinator.d.ts +3 -0
  265. package/dist/src/gateway/service/session-input-coordinator.js +4 -2
  266. package/dist/src/gateway/service/types.d.ts +0 -5
  267. package/dist/src/gateway/service.d.ts +7 -6
  268. package/dist/src/gateway/service.js +39 -22
  269. package/dist/src/heartbeat/index.js +1 -1
  270. package/dist/src/mcp/channel-bridge.d.ts +6 -9
  271. package/dist/src/mcp/channel-bridge.js +48 -76
  272. package/dist/src/mcp/channel-server.js +2 -6
  273. package/dist/src/realtime/broker.d.ts +30 -0
  274. package/dist/src/realtime/broker.js +97 -0
  275. package/dist/src/realtime/runtime.d.ts +20 -0
  276. package/dist/src/realtime/runtime.js +258 -0
  277. package/dist/src/realtime/tickets.d.ts +15 -0
  278. package/dist/src/realtime/tickets.js +38 -0
  279. package/dist/src/realtime/writer.d.ts +15 -0
  280. package/dist/src/realtime/writer.js +78 -0
  281. package/dist/src/share/share-config.js +0 -1
  282. package/dist/src/share/share-zip.js +1 -1
  283. package/dist/src/share/site-share-config.js +0 -1
  284. package/dist/src/storage/sqlite/endpoint-principal-repository.d.ts +17 -0
  285. package/dist/src/storage/sqlite/endpoint-principal-repository.js +54 -0
  286. package/dist/src/storage/sqlite/endpoint-tool-invocation-repository.d.ts +25 -0
  287. package/dist/src/storage/sqlite/endpoint-tool-invocation-repository.js +42 -0
  288. package/dist/src/storage/sqlite/index.d.ts +2 -0
  289. package/dist/src/storage/sqlite/index.js +3 -1
  290. package/dist/src/storage/sqlite/memory-records-repository.js +3 -1
  291. package/dist/src/storage/sqlite/migrations/108_repair_user_memory_provider.sql +18 -0
  292. package/dist/src/storage/sqlite/migrations/109_endpoint_principals.sql +14 -0
  293. package/dist/src/storage/sqlite/migrations/110_session_input_origin.sql +43 -0
  294. package/dist/src/storage/sqlite/migrations/111_endpoint_tool_invocations.sql +18 -0
  295. package/dist/src/storage/sqlite/migrations/112_endpoint_instance_bindings.sql +8 -0
  296. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  297. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  298. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  299. package/dist/src/storage/sqlite/schema.js +1 -1
  300. package/dist/src/storage/sqlite/session-input-repository.d.ts +3 -0
  301. package/dist/src/storage/sqlite/session-input-repository.js +5 -3
  302. package/dist/src/tasks/home-query-service.d.ts +1 -1
  303. package/dist/src/tui/backends/embedded-backend.js +5 -2
  304. package/dist/src/tui/backends/{gateway-sse-backend.d.ts → gateway-realtime-backend.d.ts} +13 -10
  305. package/dist/src/tui/backends/{gateway-sse-backend.js → gateway-realtime-backend.js} +114 -151
  306. package/dist/src/tui/tool-summary.d.ts +1 -2
  307. package/dist/src/tui/tool-summary.js +2 -18
  308. package/dist/src/tui/tui-agent-events.d.ts +0 -1
  309. package/dist/src/tui/tui-agent-events.js +2 -15
  310. package/dist/src/tui/tui-backend.d.ts +4 -4
  311. package/dist/src/tui/tui-run-state.js +0 -4
  312. package/dist/src/tui/tui-types.d.ts +2 -9
  313. package/dist/src/tui/tui-types.js +0 -1
  314. package/dist/src/tui/tui.js +5 -5
  315. package/dist/src/tunnel/frpc-binary.js +1 -1
  316. package/dist/src/tunnel/gateway-lifecycle.d.ts +1 -1
  317. package/dist/src/tunnel/gateway-lifecycle.js +1 -1
  318. package/dist/src/user-context/actionableInsights.d.ts +14 -0
  319. package/dist/src/user-context/actionableInsights.js +34 -0
  320. package/dist/src/user-context/manual-understanding.js +6 -1
  321. package/dist/src/user-context/projection.d.ts +2 -1
  322. package/dist/src/user-context/projection.js +2 -1
  323. package/dist/src/user-context/understandingQuality.d.ts +5 -0
  324. package/dist/src/user-context/understandingQuality.js +44 -0
  325. package/dist/src/utils/logger/log-stream.d.ts +3 -10
  326. package/dist/src/utils/logger/log-stream.js +2 -73
  327. package/dist/src/utils/logger/pino-record.d.ts +1 -1
  328. package/dist/src/utils/logger/streams.js +1 -1
  329. package/dist/src/voice/local/model-files.js +1 -1
  330. package/dist/src/work-discovery/service.js +1 -1
  331. package/package.json +6 -3
  332. package/dist/gateway/static/root/assets/agents-Df9mTa-K.js +0 -2
  333. package/dist/gateway/static/root/assets/apps-page-Bd3tN-k2.js +0 -1
  334. package/dist/gateway/static/root/assets/automations-page-w6K9GZQ7.js +0 -6
  335. package/dist/gateway/static/root/assets/browser-settings-page-jb5Hf-hm.js +0 -8
  336. package/dist/gateway/static/root/assets/capabilities-settings-panel-BjUe4raq.js +0 -7
  337. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DiWIMYRr.js +0 -1
  338. package/dist/gateway/static/root/assets/channels-settings-D8IkjMuX.js +0 -1
  339. package/dist/gateway/static/root/assets/channels-status-swr-CySs1GQX.js +0 -1
  340. package/dist/gateway/static/root/assets/connectors-page-BT2ahw52.js +0 -2
  341. package/dist/gateway/static/root/assets/gateway-settings-CIRs2QVy.js +0 -1
  342. package/dist/gateway/static/root/assets/home-page-C59f8UJw.js +0 -3
  343. package/dist/gateway/static/root/assets/index-D-YfWVyS.css +0 -1
  344. package/dist/gateway/static/root/assets/index-vi5KlR5_.js +0 -222
  345. package/dist/gateway/static/root/assets/local-app-workbench-page-DRB4UQBE.js +0 -2
  346. package/dist/gateway/static/root/assets/logs-page-CNp4XiBN.js +0 -7
  347. package/dist/gateway/static/root/assets/messages-CPxz48hr.js +0 -3
  348. package/dist/gateway/static/root/assets/notes-workbench-DqSkeDXX.js +0 -4
  349. package/dist/gateway/static/root/assets/product-delivery-C8JbSj5Y.js +0 -1
  350. package/dist/gateway/static/root/assets/project-detail-page-BrbHs4Wp.js +0 -1
  351. package/dist/gateway/static/root/assets/projects-page-B80rtkj6.js +0 -1
  352. package/dist/gateway/static/root/assets/remote-access-hub-_Q3GEznb.js +0 -1
  353. package/dist/gateway/static/root/assets/sessions-page-55dJOUVg.js +0 -1
  354. package/dist/gateway/static/root/assets/settings-advanced-gate-CSFCZj14.js +0 -1
  355. package/dist/gateway/static/root/assets/settings-page-BSIiMLi-.js +0 -1
  356. package/dist/gateway/static/root/assets/setup-status-panel-q_yE6-H1.js +0 -1
  357. package/dist/gateway/static/root/assets/shares-settings-gYkRX9Ik.js +0 -1
  358. package/dist/gateway/static/root/assets/skill-reload-api-BoNBMKW6.js +0 -1
  359. package/dist/gateway/static/root/assets/skills-page-GZHKDFSb.js +0 -2
  360. package/dist/gateway/static/root/assets/time-picker-5sHEZ5w5.js +0 -1
  361. package/dist/gateway/static/root/assets/user-context-page-q5dr8JFG.js +0 -1
  362. package/dist/gateway/static/root/assets/work-discovery-page-fNvSg40M.js +0 -1
  363. package/dist/gateway/static/root/assets/workflows-page-YJBKmPYK.js +0 -11
  364. package/dist/src/agent/feedback/feedback-coordinator.d.ts +0 -73
  365. package/dist/src/agent/feedback/feedback-coordinator.js +0 -156
  366. package/dist/src/agent/feedback/index.d.ts +0 -4
  367. package/dist/src/agent/feedback/index.js +0 -2
  368. package/dist/src/agent/lifecycle/progress.d.ts +0 -90
  369. package/dist/src/agent/lifecycle/progress.js +0 -339
  370. package/dist/src/agent/mcp/bundle-mcp-materialize.js +0 -183
  371. package/dist/src/agent/mcp/mcp-tool-meta.d.ts +0 -8
  372. package/dist/src/agent/mcp/mcp-tool-meta.js +0 -13
  373. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.d.ts +0 -14
  374. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +0 -48
  375. package/dist/src/agent/streaming/reasoning-visibility-sse.d.ts +0 -15
  376. package/dist/src/agent/tools/composio-tool.d.ts +0 -21
  377. package/dist/src/agent/tools/composio-tool.js +0 -261
  378. package/dist/src/gateway/agent-run-relay.d.ts +0 -19
  379. package/dist/src/gateway/agent-run-relay.js +0 -169
  380. package/dist/src/gateway/hono/sse.d.ts +0 -53
  381. package/dist/src/gateway/hono/sse.js +0 -207
  382. package/dist/src/gateway/service/sse-hub.d.ts +0 -10
  383. package/dist/src/gateway/service/sse-hub.js +0 -53
  384. package/dist/src/tui/sse-consumer.d.ts +0 -15
  385. package/dist/src/tui/sse-consumer.js +0 -73
@@ -0,0 +1,29 @@
1
+ import type { AgentToolResult } from '@earendil-works/pi-agent-core';
2
+ import type { Config } from '../../config/schema.js';
3
+ import type { ExtensionHookRunner } from '../../extensions/index.js';
4
+ import type { SessionMcpRuntime } from '../mcp/bundle-mcp-types.js';
5
+ import type { ExternalToolDescriptor, ExternalToolExecutionContext, ExternalToolProvider, ExternalToolSearchHit } from './types.js';
6
+ export interface McpToolProviderDeps {
7
+ workspace: string;
8
+ getConfig: () => Config | undefined;
9
+ getSessionKey: () => string | undefined;
10
+ agentId?: string;
11
+ hookRunner?: ExtensionHookRunner;
12
+ getRuntime?: (params: {
13
+ sessionId: string;
14
+ sessionKey?: string;
15
+ workspaceDir: string;
16
+ cfg?: Config;
17
+ }) => Promise<SessionMcpRuntime>;
18
+ }
19
+ export declare class McpToolProvider implements ExternalToolProvider {
20
+ private readonly deps;
21
+ readonly source: "mcp";
22
+ constructor(deps: McpToolProviderDeps);
23
+ search(_query: string): Promise<ExternalToolSearchHit[]>;
24
+ describe(toolRef: string): Promise<ExternalToolDescriptor | undefined>;
25
+ execute(toolRef: string, args: Record<string, unknown>, _approvalId: string | undefined, context: ExternalToolExecutionContext): Promise<AgentToolResult<Record<string, unknown>>>;
26
+ private resolve;
27
+ private isAllowed;
28
+ private withRuntime;
29
+ }
@@ -0,0 +1,118 @@
1
+ import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
2
+ import { externalToolRef, parseExternalToolRef } from "./refs.js";
3
+ import { isMcpCatalogToolDenied, mcpToolPolicyId } from "../mcp/bundle-mcp-policy.js";
4
+ import { getOrCreateSessionMcpRuntime } from "../mcp/bundle-mcp-runtime.js";
5
+ //#region src/agent/external-tools/mcp-provider.ts
6
+ function policyToolId(tool) {
7
+ return mcpToolPolicyId(tool.safeServerName, tool.toolName);
8
+ }
9
+ function toAgentToolResult(params) {
10
+ const content = Array.isArray(params.result.content) ? params.result.content : [];
11
+ return {
12
+ content: content.length > 0 ? content : [{
13
+ type: "text",
14
+ text: JSON.stringify(params.result.structuredContent ?? {
15
+ status: params.result.isError === true ? "error" : "ok",
16
+ server: params.serverName,
17
+ tool: params.toolName
18
+ }, null, 2)
19
+ }],
20
+ details: {
21
+ mcpServer: params.serverName,
22
+ mcpTool: params.toolName,
23
+ ...params.result.structuredContent !== void 0 ? { structuredContent: params.result.structuredContent } : {},
24
+ ...params.result.isError === true ? { status: "error" } : {}
25
+ }
26
+ };
27
+ }
28
+ var McpToolProvider = class {
29
+ source = "mcp";
30
+ constructor(deps) {
31
+ this.deps = deps;
32
+ }
33
+ async search(_query) {
34
+ return this.withRuntime(async (runtime) => {
35
+ return (await runtime.getCatalog()).tools.filter((tool) => this.isAllowed(tool)).map((tool) => ({
36
+ toolRef: externalToolRef(this.source, tool.serverName, tool.toolName),
37
+ source: this.source,
38
+ namespace: tool.serverName,
39
+ title: tool.title || tool.toolName,
40
+ summary: tool.description || tool.fallbackDescription
41
+ }));
42
+ });
43
+ }
44
+ async describe(toolRef) {
45
+ return this.withRuntime(async (runtime) => {
46
+ const tool = await this.resolve(runtime, toolRef);
47
+ if (!tool) return void 0;
48
+ const summary = tool.description || tool.fallbackDescription;
49
+ return {
50
+ toolRef,
51
+ source: this.source,
52
+ namespace: tool.serverName,
53
+ title: tool.title || tool.toolName,
54
+ summary,
55
+ description: summary,
56
+ inputSchema: tool.inputSchema
57
+ };
58
+ });
59
+ }
60
+ async execute(toolRef, args, _approvalId, context) {
61
+ return this.withRuntime(async (runtime) => {
62
+ const tool = await this.resolve(runtime, toolRef);
63
+ if (!tool) throw new Error(`MCP tool is unavailable or denied: ${toolRef}`);
64
+ let executionArgs = args;
65
+ if (this.deps.hookRunner) {
66
+ const hook = await this.deps.hookRunner.runBeforeToolCall(policyToolId(tool), args, {
67
+ sessionKey: this.deps.getSessionKey(),
68
+ isMcpTool: true,
69
+ mcpServerId: tool.serverName
70
+ });
71
+ if (!hook.allowed) throw new Error(hook.reason ?? "MCP tool call blocked by policy hook.");
72
+ executionArgs = hook.params ?? args;
73
+ }
74
+ const result = await runtime.callTool(tool.serverName, tool.toolName, executionArgs, context.signal);
75
+ return toAgentToolResult({
76
+ serverName: tool.serverName,
77
+ toolName: tool.toolName,
78
+ result
79
+ });
80
+ });
81
+ }
82
+ async resolve(runtime, toolRef) {
83
+ const parsed = parseExternalToolRef(toolRef, this.source);
84
+ if (!parsed) return void 0;
85
+ const tool = (await runtime.getCatalog()).tools.find((candidate) => candidate.serverName === parsed.namespace && candidate.toolName === parsed.toolName);
86
+ return tool && this.isAllowed(tool) ? tool : void 0;
87
+ }
88
+ isAllowed(tool) {
89
+ const cfg = this.deps.getConfig();
90
+ const sessionKey = this.deps.getSessionKey();
91
+ const profile = cfg && sessionKey ? resolveEffectiveAgentProfileForSession(cfg, sessionKey) : void 0;
92
+ const policyName = policyToolId(tool);
93
+ return !profile?.tools.denied.has(policyName) && !isMcpCatalogToolDenied({
94
+ serverId: tool.safeServerName,
95
+ policyToolId: policyName
96
+ }, profile?.manifest.tools.mcp);
97
+ }
98
+ async withRuntime(run) {
99
+ const cfg = this.deps.getConfig();
100
+ const sessionKey = this.deps.getSessionKey();
101
+ const sessionId = sessionKey ?? `agent:${this.deps.agentId ?? "main"}`;
102
+ const runtime = await (this.deps.getRuntime ?? getOrCreateSessionMcpRuntime)({
103
+ sessionId,
104
+ sessionKey,
105
+ workspaceDir: this.deps.workspace,
106
+ cfg
107
+ });
108
+ const releaseLease = runtime.acquireLease?.();
109
+ runtime.markUsed();
110
+ try {
111
+ return await run(runtime);
112
+ } finally {
113
+ releaseLease?.();
114
+ }
115
+ }
116
+ };
117
+ //#endregion
118
+ export { McpToolProvider };
@@ -0,0 +1,21 @@
1
+ import type { ExtensionHookRunner } from '../../extensions/index.js';
2
+ import type { MemoryManager } from '../memory/manager.js';
3
+ import { type ToolExecutorConfig } from '../tools/executor.js';
4
+ import type { ExternalToolDescriptor, ExternalToolExecutionContext, ExternalToolProvider, ExternalToolSearchHit } from './types.js';
5
+ export interface MemoryToolProviderDeps {
6
+ getMemoryManager?: () => MemoryManager;
7
+ disabledTools?: Set<string>;
8
+ getSessionKey: () => string | undefined;
9
+ hookRunner?: ExtensionHookRunner;
10
+ toolExecutorConfig?: Partial<ToolExecutorConfig>;
11
+ }
12
+ export declare class MemoryToolProvider implements ExternalToolProvider {
13
+ private readonly deps;
14
+ readonly source: "memory";
15
+ constructor(deps: MemoryToolProviderDeps);
16
+ search(_query: string): Promise<ExternalToolSearchHit[]>;
17
+ describe(toolRef: string): Promise<ExternalToolDescriptor | undefined>;
18
+ execute(toolRef: string, args: Record<string, unknown>, _approvalId: string | undefined, context: ExternalToolExecutionContext): Promise<import("@earendil-works/pi-agent-core").AgentToolResult<any>>;
19
+ private entries;
20
+ private resolve;
21
+ }
@@ -0,0 +1,56 @@
1
+ import { externalToolRef, parseExternalToolRef } from "./refs.js";
2
+ import { executeToolWithProtection } from "../tools/executor.js";
3
+ //#region src/agent/external-tools/memory-provider.ts
4
+ function toolSummary(tool) {
5
+ return tool.description || tool.label || tool.name;
6
+ }
7
+ var MemoryToolProvider = class {
8
+ source = "memory";
9
+ constructor(deps) {
10
+ this.deps = deps;
11
+ }
12
+ async search(_query) {
13
+ return this.entries().map(({ providerId, tool }) => ({
14
+ toolRef: externalToolRef(this.source, providerId, tool.name),
15
+ source: this.source,
16
+ namespace: providerId,
17
+ title: tool.label || tool.name,
18
+ summary: toolSummary(tool)
19
+ }));
20
+ }
21
+ async describe(toolRef) {
22
+ const resolved = this.resolve(toolRef);
23
+ if (!resolved) return void 0;
24
+ const summary = toolSummary(resolved.tool);
25
+ return {
26
+ toolRef,
27
+ source: this.source,
28
+ namespace: resolved.providerId,
29
+ title: resolved.tool.label || resolved.tool.name,
30
+ summary,
31
+ description: summary,
32
+ inputSchema: resolved.tool.parameters
33
+ };
34
+ }
35
+ async execute(toolRef, args, _approvalId, context) {
36
+ const resolved = this.resolve(toolRef);
37
+ if (!resolved) throw new Error(`Memory provider tool is unavailable: ${toolRef}`);
38
+ let executionArgs = args;
39
+ if (this.deps.hookRunner) {
40
+ const hook = await this.deps.hookRunner.runBeforeToolCall(resolved.tool.name, args, { sessionKey: this.deps.getSessionKey() });
41
+ if (!hook.allowed) throw new Error(hook.reason ?? "Memory provider tool call blocked by policy hook.");
42
+ executionArgs = hook.params ?? args;
43
+ }
44
+ return executeToolWithProtection(resolved.tool, context.toolCallId, executionArgs, context.signal, context.onUpdate, this.deps.toolExecutorConfig);
45
+ }
46
+ entries() {
47
+ return (this.deps.getMemoryManager?.().getExternalToolEntries() ?? []).filter(({ tool }) => !this.deps.disabledTools?.has(tool.name));
48
+ }
49
+ resolve(toolRef) {
50
+ const parsed = parseExternalToolRef(toolRef, this.source);
51
+ if (!parsed) return void 0;
52
+ return this.entries().find(({ providerId, tool }) => providerId === parsed.namespace && tool.name === parsed.toolName);
53
+ }
54
+ };
55
+ //#endregion
56
+ export { MemoryToolProvider };
@@ -0,0 +1,5 @@
1
+ export declare function externalToolRef(source: string, namespace: string, toolName: string): string;
2
+ export declare function parseExternalToolRef(toolRef: string, expectedSource: string): {
3
+ namespace: string;
4
+ toolName: string;
5
+ } | undefined;
@@ -0,0 +1,18 @@
1
+ //#region src/agent/external-tools/refs.ts
2
+ function externalToolRef(source, namespace, toolName) {
3
+ return `${source}:${encodeURIComponent(namespace)}:${encodeURIComponent(toolName)}`;
4
+ }
5
+ function parseExternalToolRef(toolRef, expectedSource) {
6
+ const parts = toolRef.split(":");
7
+ if (parts.length !== 3 || parts[0] !== expectedSource) return void 0;
8
+ try {
9
+ return {
10
+ namespace: decodeURIComponent(parts[1]),
11
+ toolName: decodeURIComponent(parts[2])
12
+ };
13
+ } catch {
14
+ return;
15
+ }
16
+ }
17
+ //#endregion
18
+ export { externalToolRef, parseExternalToolRef };
@@ -0,0 +1,26 @@
1
+ import type { ExternalToolExecutionContext, ExternalToolProvider, ExternalToolSearchHit, ExternalToolSource, VersionedExternalToolDescriptor } from './types.js';
2
+ export declare class ExternalToolService {
3
+ private readonly providerBySource;
4
+ private readonly ajv;
5
+ constructor(providers: ExternalToolProvider[]);
6
+ search(params: {
7
+ query: string;
8
+ sources?: ExternalToolSource[];
9
+ limit?: number;
10
+ }): Promise<{
11
+ tools: ExternalToolSearchHit[];
12
+ unavailableSources: ExternalToolSource[];
13
+ }>;
14
+ describe(toolRefs: string[]): Promise<{
15
+ tools: VersionedExternalToolDescriptor[];
16
+ notFound: string[];
17
+ }>;
18
+ execute(params: {
19
+ toolRef: string;
20
+ revision: string;
21
+ arguments?: Record<string, unknown>;
22
+ approvalId?: string;
23
+ context: ExternalToolExecutionContext;
24
+ }): Promise<import("@earendil-works/pi-agent-core").AgentToolResult<Record<string, unknown>>>;
25
+ private providerForRef;
26
+ }
@@ -0,0 +1,117 @@
1
+ import crypto from "node:crypto";
2
+ import Ajv2020 from "ajv/dist/2020.js";
3
+ //#region src/agent/external-tools/service.ts
4
+ const DEFAULT_SEARCH_LIMIT = 8;
5
+ const MAX_SEARCH_LIMIT = 20;
6
+ const MAX_DESCRIBE_COUNT = 3;
7
+ const MAX_DESCRIPTOR_BYTES = 64 * 1024;
8
+ function normalizedTokens(value) {
9
+ return value.toLowerCase().split(/[^\p{L}\p{N}_-]+/u).filter(Boolean);
10
+ }
11
+ function relevanceScore(hit, query) {
12
+ const haystack = `${hit.title} ${hit.summary} ${hit.namespace}`.toLowerCase();
13
+ const tokens = normalizedTokens(query);
14
+ if (tokens.length === 0) return 0;
15
+ return tokens.reduce((score, token) => {
16
+ if (hit.title.toLowerCase() === token) return score + 8;
17
+ if (hit.title.toLowerCase().includes(token)) return score + 4;
18
+ return haystack.includes(token) ? score + 1 : score;
19
+ }, 0);
20
+ }
21
+ function descriptorRevision(descriptor) {
22
+ return crypto.createHash("sha256").update(JSON.stringify({
23
+ toolRef: descriptor.toolRef,
24
+ description: descriptor.description,
25
+ inputSchema: descriptor.inputSchema
26
+ })).digest("hex").slice(0, 16);
27
+ }
28
+ function versionDescriptor(descriptor) {
29
+ return {
30
+ ...descriptor,
31
+ revision: descriptorRevision(descriptor)
32
+ };
33
+ }
34
+ var ExternalToolService = class {
35
+ providerBySource;
36
+ ajv = new Ajv2020({
37
+ allErrors: true,
38
+ strict: false,
39
+ validateFormats: false,
40
+ validateSchema: false
41
+ });
42
+ constructor(providers) {
43
+ this.providerBySource = new Map(providers.map((provider) => [provider.source, provider]));
44
+ }
45
+ async search(params) {
46
+ const selected = params.sources?.length ? params.sources.map((source) => this.providerBySource.get(source)).filter((provider) => provider !== void 0) : [...this.providerBySource.values()];
47
+ const settled = await Promise.allSettled(selected.map(async (provider) => ({
48
+ provider,
49
+ hits: await provider.search(params.query)
50
+ })));
51
+ const unavailableSources = [];
52
+ const hits = [];
53
+ for (const [index, result] of settled.entries()) if (result.status === "fulfilled") hits.push(...result.value.hits);
54
+ else {
55
+ const provider = selected[index];
56
+ if (provider) unavailableSources.push(provider.source);
57
+ }
58
+ const limit = Math.min(MAX_SEARCH_LIMIT, Math.max(1, params.limit ?? DEFAULT_SEARCH_LIMIT));
59
+ return {
60
+ tools: hits.map((hit) => ({
61
+ hit,
62
+ score: relevanceScore(hit, params.query)
63
+ })).filter((entry) => entry.score > 0 || normalizedTokens(params.query).length === 0).toSorted((left, right) => right.score - left.score || left.hit.toolRef.localeCompare(right.hit.toolRef)).slice(0, limit).map(({ hit }) => ({
64
+ toolRef: hit.toolRef,
65
+ source: hit.source,
66
+ namespace: hit.namespace,
67
+ title: hit.title,
68
+ summary: hit.summary.slice(0, 300)
69
+ })),
70
+ unavailableSources
71
+ };
72
+ }
73
+ async describe(toolRefs) {
74
+ if (toolRefs.length === 0 || toolRefs.length > MAX_DESCRIBE_COUNT) throw new Error(`Describe between 1 and ${MAX_DESCRIBE_COUNT} tools per call.`);
75
+ const tools = [];
76
+ const notFound = [];
77
+ for (const toolRef of toolRefs) {
78
+ const provider = this.providerForRef(toolRef);
79
+ const descriptor = provider ? await provider.describe(toolRef) : void 0;
80
+ if (!descriptor) {
81
+ notFound.push(toolRef);
82
+ continue;
83
+ }
84
+ const versioned = versionDescriptor(descriptor);
85
+ if (Buffer.byteLength(JSON.stringify(versioned), "utf8") > MAX_DESCRIPTOR_BYTES) throw new Error(`Tool contract is too large to expose safely: ${toolRef}`);
86
+ tools.push(versioned);
87
+ }
88
+ return {
89
+ tools,
90
+ notFound
91
+ };
92
+ }
93
+ async execute(params) {
94
+ const provider = this.providerForRef(params.toolRef);
95
+ if (!provider) throw new Error(`Unknown external tool source: ${params.toolRef}`);
96
+ const descriptor = await provider.describe(params.toolRef);
97
+ if (!descriptor) throw new Error(`External tool is unavailable: ${params.toolRef}`);
98
+ const current = versionDescriptor(descriptor);
99
+ if (current.revision !== params.revision) throw new Error(`Tool contract changed. Describe ${params.toolRef} again before executing it.`);
100
+ const args = params.arguments ?? {};
101
+ let validate;
102
+ try {
103
+ validate = this.ajv.compile(current.inputSchema);
104
+ } catch (error) {
105
+ throw new Error(`Tool contract is invalid: ${params.toolRef}`, { cause: error });
106
+ }
107
+ if (!validate(args)) throw new Error(`Arguments do not match ${params.toolRef}: ${this.ajv.errorsText(validate.errors)}`);
108
+ return provider.execute(params.toolRef, args, params.approvalId, params.context);
109
+ }
110
+ providerForRef(toolRef) {
111
+ const separator = toolRef.indexOf(":");
112
+ if (separator <= 0) return void 0;
113
+ return this.providerBySource.get(toolRef.slice(0, separator));
114
+ }
115
+ };
116
+ //#endregion
117
+ export { ExternalToolService };
@@ -0,0 +1,35 @@
1
+ import type { AgentToolResult, AgentToolUpdateCallback } from '@earendil-works/pi-agent-core';
2
+ import type { TurnOrigin } from '@xopcai/endpoint-tools-protocol';
3
+ export declare const EXTERNAL_TOOL_SOURCES: readonly ["mcp", "composio", "extension", "memory", "endpoint"];
4
+ export type ExternalToolSource = (typeof EXTERNAL_TOOL_SOURCES)[number];
5
+ export interface ExternalToolSearchHit {
6
+ toolRef: string;
7
+ source: ExternalToolSource;
8
+ namespace: string;
9
+ title: string;
10
+ summary: string;
11
+ }
12
+ export interface ExternalToolDescriptor extends ExternalToolSearchHit {
13
+ description: string;
14
+ inputSchema: Record<string, unknown>;
15
+ }
16
+ export interface VersionedExternalToolDescriptor extends ExternalToolDescriptor {
17
+ revision: string;
18
+ }
19
+ export interface ExternalToolExecutionContext {
20
+ toolCallId: string;
21
+ signal?: AbortSignal;
22
+ onUpdate?: AgentToolUpdateCallback<Record<string, unknown>>;
23
+ }
24
+ export interface ExternalToolTurnContext {
25
+ channel: string;
26
+ chatId: string;
27
+ sessionKey: string;
28
+ origin: TurnOrigin;
29
+ }
30
+ export interface ExternalToolProvider {
31
+ readonly source: ExternalToolSource;
32
+ search(query: string): Promise<ExternalToolSearchHit[]>;
33
+ describe(toolRef: string): Promise<ExternalToolDescriptor | undefined>;
34
+ execute(toolRef: string, args: Record<string, unknown>, approvalId: string | undefined, context: ExternalToolExecutionContext): Promise<AgentToolResult<Record<string, unknown>>>;
35
+ }
@@ -0,0 +1,10 @@
1
+ //#region src/agent/external-tools/types.ts
2
+ const EXTERNAL_TOOL_SOURCES = [
3
+ "mcp",
4
+ "composio",
5
+ "extension",
6
+ "memory",
7
+ "endpoint"
8
+ ];
9
+ //#endregion
10
+ export { EXTERNAL_TOOL_SOURCES };
@@ -23,7 +23,6 @@ import type { CommandHandler, OutboundCoordinator, StreamManager } from '../mess
23
23
  import type { MessageRouter } from '../messaging/message-router.js';
24
24
  import type { ModelManager } from '../models/index.js';
25
25
  import type { SessionContextManager, SessionHydrator, SessionLifecycleManager, SessionStateBag } from '../session/index.js';
26
- import type { FeedbackCoordinator } from '../feedback/index.js';
27
26
  import type { HookHandler } from '../lifecycle/hook-handler.js';
28
27
  import type { SessionStore } from '../../session/store.js';
29
28
  import type { StreamHandle } from '../service.types.js';
@@ -35,7 +34,6 @@ export interface InboundLoopConfig {
35
34
  messageRouter: MessageRouter;
36
35
  commandHandler: CommandHandler;
37
36
  sessionContextManager: SessionContextManager;
38
- feedbackCoordinator: FeedbackCoordinator;
39
37
  agentManager: AgentManager;
40
38
  sessionLifecycleManager: SessionLifecycleManager;
41
39
  agentOrchestrator: AgentOrchestrator;
@@ -83,6 +83,10 @@ var InboundLoop = class {
83
83
  chatId: context.chatId,
84
84
  senderId: context.senderId || "",
85
85
  isGroup: context.isGroup || false,
86
+ origin: {
87
+ type: "channel",
88
+ channel: context.channel
89
+ },
86
90
  metadata: { transcribedVoice: msg.metadata?.transcribedVoice === true }
87
91
  };
88
92
  const sessionMetadata = await this.cfg.sessionStore.getMetadata(sessionContext.sessionKey).catch(() => null);
@@ -91,7 +95,6 @@ var InboundLoop = class {
91
95
  ...sessionMetadata?.sessionId ? { sessionId: sessionMetadata.sessionId } : {}
92
96
  });
93
97
  await this.cfg.sessionContextManager.runWith(sessionContext, async () => {
94
- this.cfg.feedbackCoordinator.setContext(sessionContext);
95
98
  this.cfg.agentManager.getOrCreateAgent(sessionContext.sessionKey);
96
99
  this.cfg.setupSessionEventHandling(sessionContext.sessionKey);
97
100
  await this.cfg.sessionLifecycleManager.startSession(sessionContext);
@@ -196,8 +199,6 @@ var InboundLoop = class {
196
199
  }
197
200
  this.cfg.sessionState.endInboundTurn(sessionContext.sessionKey);
198
201
  }
199
- this.cfg.feedbackCoordinator.endTask();
200
- this.cfg.feedbackCoordinator.clearContext();
201
202
  }
202
203
  });
203
204
  });
@@ -4,7 +4,7 @@
4
4
  * Wraps the two existing direct-turn runners (one-shot and streaming) so the
5
5
  * parent `AgentService` no longer carries a pair of huge `createXxxDeps()`
6
6
  * factories. The public surface — `processDirect`, `processDirectStreaming`,
7
- * `steerWebchatSession`, `enqueueWebchatSseEvent`,
7
+ * `steerWebchatSession`, `enqueueWebchatStreamEvent`,
8
8
  * `notifyWebchatTranscriptAppend` — matches what `AgentService` exposed
9
9
  * previously, so callers (gateway, CLI) are unchanged.
10
10
  *
@@ -14,6 +14,7 @@
14
14
  * that wires those dependencies together; individual responsibilities now live
15
15
  * in their own classes and are unit-testable.
16
16
  */
17
+ import type { TurnOrigin } from '@xopcai/endpoint-tools-protocol';
17
18
  import type { Config } from '../../config/schema.js';
18
19
  import type { ContextualLogger } from '../../utils/logger/types.js';
19
20
  import type { AgentManager } from '../agent-manager.js';
@@ -23,7 +24,7 @@ import type { SessionConfigStore } from '../../session/index.js';
23
24
  import type { SessionStore } from '../../session/store.js';
24
25
  import type { SessionContext, SessionHydrator, SessionStateBag } from '../session/index.js';
25
26
  import type { InboundAttachmentInput, MediaRef } from '../../channels/attachments/inbound-persist.js';
26
- import { type ProcessDirectStreamingSseEvent } from '../service/process-direct-streaming.js';
27
+ import { type ProcessDirectStreamEvent } from '../service/process-direct-streaming.js';
27
28
  import type { AgentSourceContextResolver } from '../source-context/types.js';
28
29
  export interface TurnDispatcherConfig {
29
30
  log: ContextualLogger;
@@ -41,7 +42,7 @@ export interface TurnDispatcherConfig {
41
42
  chatId: string;
42
43
  }>;
43
44
  /** Establish per-session context (also creates the Agent + subscribes to events). */
44
- initSessionContext: (sessionKey: string, channel: string, chatId: string) => SessionContext;
45
+ initSessionContext: (sessionKey: string, channel: string, chatId: string, origin: TurnOrigin) => SessionContext;
45
46
  /** Per-session config hydration: workspace, model, thinking. */
46
47
  sessionHydrator: SessionHydrator;
47
48
  prepareInboundAttachments: (sessionKey: string, attachments?: InboundAttachmentInput[]) => Promise<MediaRef[] | undefined>;
@@ -67,14 +68,14 @@ export declare class TurnDispatcher {
67
68
  private readonly log;
68
69
  constructor(cfg: TurnDispatcherConfig);
69
70
  /** One-shot direct turn (CLI / embedded TUI). */
70
- processDirect(content: string, sessionKey?: string, attachments?: DirectAttachment[], thinking?: string, options?: ProcessDirectOptions): Promise<string>;
71
- /** Streaming direct turn (webchat SSE / CLI streaming). */
72
- processDirectStreaming(content: string, sessionKey?: string, attachments?: DirectAttachment[], thinking?: string, options?: {
71
+ processDirect(content: string, sessionKey: string, origin: TurnOrigin, attachments?: DirectAttachment[], thinking?: string, options?: ProcessDirectOptions): Promise<string>;
72
+ /** Streaming direct turn (webchat realtime / CLI streaming). */
73
+ processDirectStreaming(content: string, sessionKey: string, origin: TurnOrigin, attachments?: DirectAttachment[], thinking?: string, options?: {
73
74
  signal?: AbortSignal;
74
75
  runId?: string;
75
- }): AsyncGenerator<ProcessDirectStreamingSseEvent, void, unknown>;
76
+ }): AsyncGenerator<ProcessDirectStreamEvent, void, unknown>;
76
77
  /** Push an out-of-band event into the live webchat stream for a session. */
77
- enqueueWebchatSseEvent(sessionKey: string, event: {
78
+ enqueueWebchatStreamEvent(sessionKey: string, event: {
78
79
  type: string;
79
80
  [key: string]: unknown;
80
81
  }): void;
@@ -12,10 +12,11 @@ var TurnDispatcher = class {
12
12
  this.log = cfg.log;
13
13
  }
14
14
  /** One-shot direct turn (CLI / embedded TUI). */
15
- processDirect(content, sessionKey = "agent:main:main", attachments, thinking, options) {
15
+ processDirect(content, sessionKey, origin, attachments, thinking, options) {
16
16
  return runProcessDirect(this.buildOneShotDeps(), {
17
17
  content,
18
18
  sessionKey,
19
+ origin,
19
20
  attachments,
20
21
  thinking,
21
22
  signal: options?.signal,
@@ -23,11 +24,12 @@ var TurnDispatcher = class {
23
24
  deadlineAtMs: options?.deadlineAtMs
24
25
  });
25
26
  }
26
- /** Streaming direct turn (webchat SSE / CLI streaming). */
27
- async *processDirectStreaming(content, sessionKey = "agent:main:main", attachments, thinking, options) {
27
+ /** Streaming direct turn (webchat realtime / CLI streaming). */
28
+ async *processDirectStreaming(content, sessionKey, origin, attachments, thinking, options) {
28
29
  yield* runProcessDirectStreaming(this.buildStreamingDeps(), {
29
30
  content,
30
31
  sessionKey,
32
+ origin,
31
33
  attachments,
32
34
  thinking,
33
35
  signal: options?.signal,
@@ -35,7 +37,7 @@ var TurnDispatcher = class {
35
37
  });
36
38
  }
37
39
  /** Push an out-of-band event into the live webchat stream for a session. */
38
- enqueueWebchatSseEvent(sessionKey, event) {
40
+ enqueueWebchatStreamEvent(sessionKey, event) {
39
41
  const pub = this.cfg.sessionState.getWebchatPublisher(sessionKey);
40
42
  if (pub) pub(event);
41
43
  }
@@ -51,15 +53,15 @@ var TurnDispatcher = class {
51
53
  }],
52
54
  timestamp: Date.now()
53
55
  };
54
- this.enqueueWebchatSseEvent(sessionKey, {
56
+ this.enqueueWebchatStreamEvent(sessionKey, {
55
57
  type: "message_start",
56
58
  message
57
59
  });
58
- this.enqueueWebchatSseEvent(sessionKey, {
60
+ this.enqueueWebchatStreamEvent(sessionKey, {
59
61
  type: "message_update",
60
62
  message
61
63
  });
62
- this.enqueueWebchatSseEvent(sessionKey, {
64
+ this.enqueueWebchatStreamEvent(sessionKey, {
63
65
  type: "message_end",
64
66
  message
65
67
  });
@@ -90,8 +92,8 @@ var TurnDispatcher = class {
90
92
  log: this.log,
91
93
  resolveSessionEndpoint: c.resolveSessionEndpoint,
92
94
  initDirectStreamingSession: c.initSessionContext,
93
- registerWebchatSsePublisher: (sk, publisher) => c.sessionState.registerWebchatPublisher(sk, publisher),
94
- unregisterWebchatSsePublisher: (sk) => c.sessionState.unregisterWebchatPublisher(sk),
95
+ registerWebchatStreamPublisher: (sk, publisher) => c.sessionState.registerWebchatPublisher(sk, publisher),
96
+ unregisterWebchatStreamPublisher: (sk) => c.sessionState.unregisterWebchatPublisher(sk),
95
97
  agentManager: c.agentManager,
96
98
  hydrateSessionWorkspaceFromStore: (sk) => c.sessionHydrator.workspace(sk),
97
99
  hydrateSessionModelFromStore: (sk) => c.sessionHydrator.model(sk),
@@ -139,8 +141,8 @@ var TurnDispatcher = class {
139
141
  log: this.log,
140
142
  config: cfg,
141
143
  resolveSessionEndpoint: c.resolveSessionEndpoint,
142
- initSessionContext: (sk, channel, chatId) => {
143
- c.initSessionContext(sk, channel, chatId);
144
+ initSessionContext: (sk, channel, chatId, origin) => {
145
+ c.initSessionContext(sk, channel, chatId, origin);
144
146
  },
145
147
  hydrateSessionWorkspaceFromStore: (sk) => c.sessionHydrator.workspace(sk),
146
148
  hydrateSessionModelFromStore: (sk) => c.sessionHydrator.model(sk),
@@ -1,6 +1,4 @@
1
- import type { AgentTool as AnyAgentTool } from "@earendil-works/pi-agent-core";
2
- import type { Config } from "../../config/schema.js";
3
- import type { BundleMcpToolRuntime, SessionMcpRuntime } from "./bundle-mcp-types.js";
1
+ import type { Config } from '../../config/schema.js';
4
2
  export type McpGatewayToolEntry = {
5
3
  name: string;
6
4
  shortName: string;
@@ -28,7 +26,6 @@ export type McpGatewayCapabilitySummary = {
28
26
  resources: McpGatewayResourceEntry[];
29
27
  prompts: McpGatewayPromptEntry[];
30
28
  };
31
- export declare function mapBundleMcpToolsForGateway(tools: AnyAgentTool[], serverId: string): McpGatewayToolEntry[];
32
29
  export declare function listBundleMcpServerToolsForGateway(params: {
33
30
  workspaceDir: string;
34
31
  cfg?: Config;
@@ -39,18 +36,3 @@ export declare function listBundleMcpServerCapabilitiesForGateway(params: {
39
36
  cfg?: Config;
40
37
  serverId: string;
41
38
  }): Promise<McpGatewayCapabilitySummary>;
42
- export declare function materializeBundleMcpToolsForRun(params: {
43
- runtime: SessionMcpRuntime;
44
- reservedToolNames?: Iterable<string>;
45
- disposeRuntime?: () => Promise<void>;
46
- }): Promise<BundleMcpToolRuntime>;
47
- export declare function createBundleMcpToolRuntime(params: {
48
- workspaceDir: string;
49
- cfg?: Config;
50
- reservedToolNames?: Iterable<string>;
51
- createRuntime?: (params: {
52
- sessionId: string;
53
- workspaceDir: string;
54
- cfg?: Config;
55
- }) => SessionMcpRuntime;
56
- }): Promise<BundleMcpToolRuntime>;