@illuma-ai/agents 1.3.2 → 1.4.0-alpha.0

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 (353) hide show
  1. package/dist/cjs/graphs/Graph.cjs +3 -18
  2. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  3. package/dist/cjs/llm/openai/index.cjs +3 -0
  4. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  5. package/dist/cjs/main.cjs +58 -0
  6. package/dist/cjs/main.cjs.map +1 -1
  7. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs +288 -0
  8. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs.map +1 -0
  9. package/dist/cjs/providers/a2a/client.cjs +92 -0
  10. package/dist/cjs/providers/a2a/client.cjs.map +1 -0
  11. package/dist/cjs/providers/a2a/config.cjs +38 -0
  12. package/dist/cjs/providers/a2a/config.cjs.map +1 -0
  13. package/dist/cjs/providers/capabilityNaming.cjs +43 -0
  14. package/dist/cjs/providers/capabilityNaming.cjs.map +1 -0
  15. package/dist/cjs/providers/composite/CompositeCapabilityProvider.cjs +80 -0
  16. package/dist/cjs/providers/composite/CompositeCapabilityProvider.cjs.map +1 -0
  17. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs +244 -0
  18. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs.map +1 -0
  19. package/dist/cjs/providers/mcp/config.cjs +42 -0
  20. package/dist/cjs/providers/mcp/config.cjs.map +1 -0
  21. package/dist/cjs/providers/mcp/transport.cjs +65 -0
  22. package/dist/cjs/providers/mcp/transport.cjs.map +1 -0
  23. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs +121 -0
  24. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs.map +1 -0
  25. package/dist/cjs/providers/types.cjs +51 -0
  26. package/dist/cjs/providers/types.cjs.map +1 -0
  27. package/dist/cjs/tools/ToolNode.cjs +3 -0
  28. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  29. package/dist/cjs/tools/proxyTool.cjs +100 -0
  30. package/dist/cjs/tools/proxyTool.cjs.map +1 -0
  31. package/dist/cjs/utils/credentials.cjs +142 -0
  32. package/dist/cjs/utils/credentials.cjs.map +1 -0
  33. package/dist/cjs/utils/httpClient.cjs +74 -0
  34. package/dist/cjs/utils/httpClient.cjs.map +1 -0
  35. package/dist/cjs/utils/toolManifest.cjs +100 -0
  36. package/dist/cjs/utils/toolManifest.cjs.map +1 -0
  37. package/dist/esm/graphs/Graph.mjs +3 -18
  38. package/dist/esm/graphs/Graph.mjs.map +1 -1
  39. package/dist/esm/llm/openai/index.mjs +3 -0
  40. package/dist/esm/llm/openai/index.mjs.map +1 -1
  41. package/dist/esm/main.mjs +14 -0
  42. package/dist/esm/main.mjs.map +1 -1
  43. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs +281 -0
  44. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs.map +1 -0
  45. package/dist/esm/providers/a2a/client.mjs +88 -0
  46. package/dist/esm/providers/a2a/client.mjs.map +1 -0
  47. package/dist/esm/providers/a2a/config.mjs +35 -0
  48. package/dist/esm/providers/a2a/config.mjs.map +1 -0
  49. package/dist/esm/providers/capabilityNaming.mjs +39 -0
  50. package/dist/esm/providers/capabilityNaming.mjs.map +1 -0
  51. package/dist/esm/providers/composite/CompositeCapabilityProvider.mjs +78 -0
  52. package/dist/esm/providers/composite/CompositeCapabilityProvider.mjs.map +1 -0
  53. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs +240 -0
  54. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs.map +1 -0
  55. package/dist/esm/providers/mcp/config.mjs +39 -0
  56. package/dist/esm/providers/mcp/config.mjs.map +1 -0
  57. package/dist/esm/providers/mcp/transport.mjs +63 -0
  58. package/dist/esm/providers/mcp/transport.mjs.map +1 -0
  59. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs +119 -0
  60. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs.map +1 -0
  61. package/dist/esm/providers/types.mjs +51 -0
  62. package/dist/esm/providers/types.mjs.map +1 -0
  63. package/dist/esm/tools/ToolNode.mjs +3 -0
  64. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  65. package/dist/esm/tools/proxyTool.mjs +98 -0
  66. package/dist/esm/tools/proxyTool.mjs.map +1 -0
  67. package/dist/esm/utils/credentials.mjs +135 -0
  68. package/dist/esm/utils/credentials.mjs.map +1 -0
  69. package/dist/esm/utils/httpClient.mjs +70 -0
  70. package/dist/esm/utils/httpClient.mjs.map +1 -0
  71. package/dist/esm/utils/toolManifest.mjs +96 -0
  72. package/dist/esm/utils/toolManifest.mjs.map +1 -0
  73. package/dist/types/index.d.ts +2 -0
  74. package/dist/types/providers/a2a/A2ACapabilityProvider.d.ts +89 -0
  75. package/dist/types/providers/a2a/client.d.ts +47 -0
  76. package/dist/types/providers/a2a/config.d.ts +18 -0
  77. package/dist/types/providers/a2a/index.d.ts +6 -0
  78. package/dist/types/providers/a2a/types.d.ts +173 -0
  79. package/dist/types/providers/capabilityNaming.d.ts +25 -0
  80. package/dist/types/providers/composite/CompositeCapabilityProvider.d.ts +22 -0
  81. package/dist/types/providers/composite/index.d.ts +1 -0
  82. package/dist/types/providers/index.d.ts +13 -0
  83. package/dist/types/providers/mcp/MCPCapabilityProvider.d.ts +54 -0
  84. package/dist/types/providers/mcp/config.d.ts +20 -0
  85. package/dist/types/providers/mcp/index.d.ts +5 -0
  86. package/dist/types/providers/mcp/transport.d.ts +18 -0
  87. package/dist/types/providers/mcp/types.d.ts +112 -0
  88. package/dist/types/providers/tools-server/ToolsServerCapabilityProvider.d.ts +45 -0
  89. package/dist/types/providers/tools-server/index.d.ts +1 -0
  90. package/dist/types/providers/types.d.ts +170 -0
  91. package/dist/types/tools/proxyTool.d.ts +55 -0
  92. package/dist/types/utils/credentials.d.ts +77 -0
  93. package/dist/types/utils/httpClient.d.ts +46 -0
  94. package/dist/types/utils/index.d.ts +3 -0
  95. package/dist/types/utils/toolManifest.d.ts +49 -0
  96. package/package.json +21 -1
  97. package/src/graphs/Graph.ts +0 -23
  98. package/src/index.ts +4 -0
  99. package/src/providers/__tests__/CompositeCapabilityProvider.test.ts +93 -0
  100. package/src/providers/__tests__/ToolsServerCapabilityProvider.integration.spec.ts +79 -0
  101. package/src/providers/__tests__/ToolsServerCapabilityProvider.test.ts +206 -0
  102. package/src/providers/__tests__/types.test.ts +64 -0
  103. package/src/providers/a2a/A2ACapabilityProvider.ts +384 -0
  104. package/src/providers/a2a/__tests__/A2ACapabilityProvider.integration.spec.ts +345 -0
  105. package/src/providers/a2a/__tests__/A2ACapabilityProvider.test.ts +460 -0
  106. package/src/providers/a2a/client.ts +115 -0
  107. package/src/providers/a2a/config.ts +40 -0
  108. package/src/providers/a2a/index.ts +29 -0
  109. package/src/providers/a2a/types.ts +191 -0
  110. package/src/providers/capabilityNaming.ts +42 -0
  111. package/src/providers/composite/CompositeCapabilityProvider.ts +112 -0
  112. package/src/providers/composite/index.ts +1 -0
  113. package/src/providers/index.ts +65 -0
  114. package/src/providers/mcp/MCPCapabilityProvider.ts +345 -0
  115. package/src/providers/mcp/__tests__/MCPCapabilityProvider.integration.spec.ts +386 -0
  116. package/src/providers/mcp/__tests__/MCPCapabilityProvider.test.ts +371 -0
  117. package/src/providers/mcp/config.ts +45 -0
  118. package/src/providers/mcp/index.ts +21 -0
  119. package/src/providers/mcp/transport.ts +76 -0
  120. package/src/providers/mcp/types.ts +139 -0
  121. package/src/providers/tools-server/ToolsServerCapabilityProvider.ts +220 -0
  122. package/src/providers/tools-server/index.ts +1 -0
  123. package/src/providers/types.ts +187 -0
  124. package/src/tools/proxyTool.ts +146 -0
  125. package/src/utils/__tests__/credentials.test.ts +130 -0
  126. package/src/utils/__tests__/httpClient.test.ts +75 -0
  127. package/src/utils/__tests__/toolManifest.test.ts +116 -0
  128. package/src/utils/credentials.ts +157 -0
  129. package/src/utils/httpClient.ts +92 -0
  130. package/src/utils/index.ts +3 -0
  131. package/src/utils/toolManifest.ts +109 -0
  132. package/src/agents/AgentContext.js.map +0 -1
  133. package/src/agents/AgentContext.test.js.map +0 -1
  134. package/src/agents/__tests__/AgentContext.test.js.map +0 -1
  135. package/src/agents/__tests__/resolveStructuredOutputMode.test.js.map +0 -1
  136. package/src/common/enum.js.map +0 -1
  137. package/src/common/index.js.map +0 -1
  138. package/src/events.js.map +0 -1
  139. package/src/graphs/Graph.js.map +0 -1
  140. package/src/graphs/MultiAgentGraph.js.map +0 -1
  141. package/src/graphs/__tests__/structured-output.integration.test.js.map +0 -1
  142. package/src/graphs/__tests__/structured-output.test.js.map +0 -1
  143. package/src/graphs/contextManagement.e2e.test.js.map +0 -1
  144. package/src/graphs/contextManagement.test.js.map +0 -1
  145. package/src/graphs/handoffValidation.test.js.map +0 -1
  146. package/src/graphs/index.js.map +0 -1
  147. package/src/index.js.map +0 -1
  148. package/src/instrumentation.js.map +0 -1
  149. package/src/llm/anthropic/index.js.map +0 -1
  150. package/src/llm/anthropic/types.js.map +0 -1
  151. package/src/llm/anthropic/utils/message_inputs.js.map +0 -1
  152. package/src/llm/anthropic/utils/message_outputs.js.map +0 -1
  153. package/src/llm/anthropic/utils/output_parsers.js.map +0 -1
  154. package/src/llm/anthropic/utils/tools.js.map +0 -1
  155. package/src/llm/bedrock/__tests__/bedrock-caching.test.js.map +0 -1
  156. package/src/llm/bedrock/index.js.map +0 -1
  157. package/src/llm/bedrock/types.js.map +0 -1
  158. package/src/llm/bedrock/utils/index.js.map +0 -1
  159. package/src/llm/bedrock/utils/message_inputs.js.map +0 -1
  160. package/src/llm/bedrock/utils/message_outputs.js.map +0 -1
  161. package/src/llm/fake.js.map +0 -1
  162. package/src/llm/google/index.js.map +0 -1
  163. package/src/llm/google/types.js.map +0 -1
  164. package/src/llm/google/utils/common.js.map +0 -1
  165. package/src/llm/google/utils/tools.js.map +0 -1
  166. package/src/llm/google/utils/zod_to_genai_parameters.js.map +0 -1
  167. package/src/llm/openai/index.js.map +0 -1
  168. package/src/llm/openai/types.js.map +0 -1
  169. package/src/llm/openai/utils/index.js.map +0 -1
  170. package/src/llm/openai/utils/isReasoningModel.test.js.map +0 -1
  171. package/src/llm/openrouter/index.js.map +0 -1
  172. package/src/llm/openrouter/reasoning.test.js.map +0 -1
  173. package/src/llm/providers.js.map +0 -1
  174. package/src/llm/text.js.map +0 -1
  175. package/src/llm/vertexai/index.js.map +0 -1
  176. package/src/messages/__tests__/tools.test.js.map +0 -1
  177. package/src/messages/cache.js.map +0 -1
  178. package/src/messages/cache.test.js.map +0 -1
  179. package/src/messages/content.js.map +0 -1
  180. package/src/messages/content.test.js.map +0 -1
  181. package/src/messages/core.js.map +0 -1
  182. package/src/messages/ensureThinkingBlock.test.js.map +0 -1
  183. package/src/messages/format.js.map +0 -1
  184. package/src/messages/formatAgentMessages.test.js.map +0 -1
  185. package/src/messages/formatAgentMessages.tools.test.js.map +0 -1
  186. package/src/messages/formatMessage.test.js.map +0 -1
  187. package/src/messages/ids.js.map +0 -1
  188. package/src/messages/index.js.map +0 -1
  189. package/src/messages/labelContentByAgent.test.js.map +0 -1
  190. package/src/messages/prune.js.map +0 -1
  191. package/src/messages/reducer.js.map +0 -1
  192. package/src/messages/shiftIndexTokenCountMap.test.js.map +0 -1
  193. package/src/messages/summarize.js.map +0 -1
  194. package/src/messages/summarize.test.js.map +0 -1
  195. package/src/messages/tools.js.map +0 -1
  196. package/src/mockStream.js.map +0 -1
  197. package/src/prompts/collab.js.map +0 -1
  198. package/src/prompts/index.js.map +0 -1
  199. package/src/prompts/taskmanager.js.map +0 -1
  200. package/src/run.js.map +0 -1
  201. package/src/schemas/index.js.map +0 -1
  202. package/src/schemas/schema-preparation.test.js.map +0 -1
  203. package/src/schemas/validate.js.map +0 -1
  204. package/src/schemas/validate.test.js.map +0 -1
  205. package/src/scripts/abort.js.map +0 -1
  206. package/src/scripts/ant_web_search.js.map +0 -1
  207. package/src/scripts/ant_web_search_edge_case.js.map +0 -1
  208. package/src/scripts/ant_web_search_error_edge_case.js.map +0 -1
  209. package/src/scripts/args.js.map +0 -1
  210. package/src/scripts/bedrock-cache-debug.js.map +0 -1
  211. package/src/scripts/bedrock-content-aggregation-test.js.map +0 -1
  212. package/src/scripts/bedrock-merge-test.js.map +0 -1
  213. package/src/scripts/bedrock-parallel-tools-test.js.map +0 -1
  214. package/src/scripts/caching.js.map +0 -1
  215. package/src/scripts/cli.js.map +0 -1
  216. package/src/scripts/cli2.js.map +0 -1
  217. package/src/scripts/cli3.js.map +0 -1
  218. package/src/scripts/cli4.js.map +0 -1
  219. package/src/scripts/cli5.js.map +0 -1
  220. package/src/scripts/code_exec.js.map +0 -1
  221. package/src/scripts/code_exec_files.js.map +0 -1
  222. package/src/scripts/code_exec_multi_session.js.map +0 -1
  223. package/src/scripts/code_exec_ptc.js.map +0 -1
  224. package/src/scripts/code_exec_session.js.map +0 -1
  225. package/src/scripts/code_exec_simple.js.map +0 -1
  226. package/src/scripts/content.js.map +0 -1
  227. package/src/scripts/empty_input.js.map +0 -1
  228. package/src/scripts/handoff-test.js.map +0 -1
  229. package/src/scripts/image.js.map +0 -1
  230. package/src/scripts/memory.js.map +0 -1
  231. package/src/scripts/multi-agent-chain.js.map +0 -1
  232. package/src/scripts/multi-agent-conditional.js.map +0 -1
  233. package/src/scripts/multi-agent-document-review-chain.js.map +0 -1
  234. package/src/scripts/multi-agent-hybrid-flow.js.map +0 -1
  235. package/src/scripts/multi-agent-parallel-start.js.map +0 -1
  236. package/src/scripts/multi-agent-parallel.js.map +0 -1
  237. package/src/scripts/multi-agent-sequence.js.map +0 -1
  238. package/src/scripts/multi-agent-supervisor.js.map +0 -1
  239. package/src/scripts/multi-agent-test.js.map +0 -1
  240. package/src/scripts/parallel-asymmetric-tools-test.js.map +0 -1
  241. package/src/scripts/parallel-full-metadata-test.js.map +0 -1
  242. package/src/scripts/parallel-tools-test.js.map +0 -1
  243. package/src/scripts/programmatic_exec.js.map +0 -1
  244. package/src/scripts/programmatic_exec_agent.js.map +0 -1
  245. package/src/scripts/search.js.map +0 -1
  246. package/src/scripts/sequential-full-metadata-test.js.map +0 -1
  247. package/src/scripts/simple.js.map +0 -1
  248. package/src/scripts/single-agent-metadata-test.js.map +0 -1
  249. package/src/scripts/stream.js.map +0 -1
  250. package/src/scripts/test-custom-prompt-key.js.map +0 -1
  251. package/src/scripts/test-handoff-input.js.map +0 -1
  252. package/src/scripts/test-handoff-preamble.js.map +0 -1
  253. package/src/scripts/test-handoff-steering.js.map +0 -1
  254. package/src/scripts/test-multi-agent-list-handoff.js.map +0 -1
  255. package/src/scripts/test-parallel-agent-labeling.js.map +0 -1
  256. package/src/scripts/test-parallel-handoffs.js.map +0 -1
  257. package/src/scripts/test-thinking-handoff-bedrock.js.map +0 -1
  258. package/src/scripts/test-thinking-handoff.js.map +0 -1
  259. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js.map +0 -1
  260. package/src/scripts/test-tool-before-handoff-role-order.js.map +0 -1
  261. package/src/scripts/test-tools-before-handoff.js.map +0 -1
  262. package/src/scripts/test_code_api.js.map +0 -1
  263. package/src/scripts/thinking-bedrock.js.map +0 -1
  264. package/src/scripts/thinking-vertexai.js.map +0 -1
  265. package/src/scripts/thinking.js.map +0 -1
  266. package/src/scripts/tool_search.js.map +0 -1
  267. package/src/scripts/tools.js.map +0 -1
  268. package/src/specs/agent-handoffs-bedrock.integration.test.js.map +0 -1
  269. package/src/specs/agent-handoffs.test.js.map +0 -1
  270. package/src/specs/anthropic.simple.test.js.map +0 -1
  271. package/src/specs/azure.simple.test.js.map +0 -1
  272. package/src/specs/cache.simple.test.js.map +0 -1
  273. package/src/specs/custom-event-await.test.js.map +0 -1
  274. package/src/specs/deepseek.simple.test.js.map +0 -1
  275. package/src/specs/emergency-prune.test.js.map +0 -1
  276. package/src/specs/moonshot.simple.test.js.map +0 -1
  277. package/src/specs/observability.integration.test.js.map +0 -1
  278. package/src/specs/openai.simple.test.js.map +0 -1
  279. package/src/specs/openrouter.simple.test.js.map +0 -1
  280. package/src/specs/prune.test.js.map +0 -1
  281. package/src/specs/reasoning.test.js.map +0 -1
  282. package/src/specs/spec.utils.js.map +0 -1
  283. package/src/specs/thinking-handoff.test.js.map +0 -1
  284. package/src/specs/thinking-prune.test.js.map +0 -1
  285. package/src/specs/token-distribution-edge-case.test.js.map +0 -1
  286. package/src/specs/token-memoization.test.js.map +0 -1
  287. package/src/specs/tokens.test.js.map +0 -1
  288. package/src/specs/tool-error.test.js.map +0 -1
  289. package/src/splitStream.js.map +0 -1
  290. package/src/splitStream.test.js.map +0 -1
  291. package/src/stream.js.map +0 -1
  292. package/src/stream.test.js.map +0 -1
  293. package/src/test/mockTools.js.map +0 -1
  294. package/src/tools/BrowserTools.js.map +0 -1
  295. package/src/tools/Calculator.js.map +0 -1
  296. package/src/tools/Calculator.test.js.map +0 -1
  297. package/src/tools/CodeExecutor.js.map +0 -1
  298. package/src/tools/ProgrammaticToolCalling.js.map +0 -1
  299. package/src/tools/StreamingToolCallBuffer.js.map +0 -1
  300. package/src/tools/ToolNode.js.map +0 -1
  301. package/src/tools/ToolSearch.js.map +0 -1
  302. package/src/tools/__tests__/BrowserTools.test.js.map +0 -1
  303. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js.map +0 -1
  304. package/src/tools/__tests__/ProgrammaticToolCalling.test.js.map +0 -1
  305. package/src/tools/__tests__/StreamingToolCallBuffer.test.js.map +0 -1
  306. package/src/tools/__tests__/ToolApproval.test.js.map +0 -1
  307. package/src/tools/__tests__/ToolNode.recovery.test.js.map +0 -1
  308. package/src/tools/__tests__/ToolNode.session.test.js.map +0 -1
  309. package/src/tools/__tests__/ToolSearch.integration.test.js.map +0 -1
  310. package/src/tools/__tests__/ToolSearch.test.js.map +0 -1
  311. package/src/tools/__tests__/handlers.test.js.map +0 -1
  312. package/src/tools/__tests__/truncation-recovery.integration.test.js.map +0 -1
  313. package/src/tools/handlers.js.map +0 -1
  314. package/src/tools/schema.js.map +0 -1
  315. package/src/tools/search/anthropic.js.map +0 -1
  316. package/src/tools/search/content.js.map +0 -1
  317. package/src/tools/search/content.test.js.map +0 -1
  318. package/src/tools/search/firecrawl.js.map +0 -1
  319. package/src/tools/search/format.js.map +0 -1
  320. package/src/tools/search/highlights.js.map +0 -1
  321. package/src/tools/search/index.js.map +0 -1
  322. package/src/tools/search/jina-reranker.test.js.map +0 -1
  323. package/src/tools/search/rerankers.js.map +0 -1
  324. package/src/tools/search/schema.js.map +0 -1
  325. package/src/tools/search/search.js.map +0 -1
  326. package/src/tools/search/serper-scraper.js.map +0 -1
  327. package/src/tools/search/test.js.map +0 -1
  328. package/src/tools/search/tool.js.map +0 -1
  329. package/src/tools/search/types.js.map +0 -1
  330. package/src/tools/search/utils.js.map +0 -1
  331. package/src/types/graph.js.map +0 -1
  332. package/src/types/graph.test.js.map +0 -1
  333. package/src/types/index.js.map +0 -1
  334. package/src/types/llm.js.map +0 -1
  335. package/src/types/messages.js.map +0 -1
  336. package/src/types/run.js.map +0 -1
  337. package/src/types/stream.js.map +0 -1
  338. package/src/types/tools.js.map +0 -1
  339. package/src/utils/contextAnalytics.js.map +0 -1
  340. package/src/utils/contextAnalytics.test.js.map +0 -1
  341. package/src/utils/events.js.map +0 -1
  342. package/src/utils/graph.js.map +0 -1
  343. package/src/utils/handlers.js.map +0 -1
  344. package/src/utils/index.js.map +0 -1
  345. package/src/utils/llm.js.map +0 -1
  346. package/src/utils/llmConfig.js.map +0 -1
  347. package/src/utils/logging.js.map +0 -1
  348. package/src/utils/misc.js.map +0 -1
  349. package/src/utils/run.js.map +0 -1
  350. package/src/utils/schema.js.map +0 -1
  351. package/src/utils/title.js.map +0 -1
  352. package/src/utils/tokens.js.map +0 -1
  353. package/src/utils/toonFormat.js.map +0 -1
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Types for the A2A capability provider.
3
+ *
4
+ * A2A (Agent-to-Agent) is a public HTTP + JSON-RPC 2.0 protocol for
5
+ * invoking one agent from another. When an agent has been served over
6
+ * A2A (e.g., via `ranger agents serve` or any compliant runtime), a
7
+ * caller agent can use `A2ACapabilityProvider` to:
8
+ * - discover the remote agent's skills via `GET /.well-known/agent.json`
9
+ * - invoke it by POSTing JSON-RPC `tasks/send` to its base URL
10
+ *
11
+ * The types here mirror the public A2A protocol shape at the subset
12
+ * needed for client-side integration.
13
+ */
14
+
15
+ /** Capabilities advertised on the remote agent's agent card. */
16
+ export interface A2ACardCapabilities {
17
+ /** True when the agent supports SSE streaming via `tasks/sendSubscribe`. */
18
+ streaming: boolean;
19
+ pushNotifications?: boolean;
20
+ stateTransitionHistory?: boolean;
21
+ }
22
+
23
+ /** A single skill exposed by a remote agent on its agent card. */
24
+ export interface A2ASkill {
25
+ /** Stable skill identifier. */
26
+ id: string;
27
+ /** Human-readable name. */
28
+ name: string;
29
+ /** Description of what the skill does. */
30
+ description: string;
31
+ /** Optional tags (e.g., "search", "analysis"). */
32
+ tags?: string[];
33
+ /** Optional example inputs. */
34
+ examples?: string[];
35
+ }
36
+
37
+ /** Shape served at `GET /.well-known/agent.json`. */
38
+ export interface A2AAgentCard {
39
+ name: string;
40
+ description?: string;
41
+ /** Base URL clients should POST task requests to. */
42
+ url: string;
43
+ /** Card version — independent of the underlying model/agent version. */
44
+ version: string;
45
+ capabilities: A2ACardCapabilities;
46
+ defaultInputModes?: string[];
47
+ defaultOutputModes?: string[];
48
+ skills: A2ASkill[];
49
+ provider?: {
50
+ organization: string;
51
+ url?: string;
52
+ };
53
+ }
54
+
55
+ /** Spec describing one remote A2A-served agent the provider should connect to. */
56
+ export interface A2ARemoteSpec {
57
+ /**
58
+ * Base URL of the remote A2A endpoint. The provider will fetch the
59
+ * card from `<url>/.well-known/agent.json` and POST task requests to
60
+ * `<url>/` (JSON-RPC root).
61
+ */
62
+ url: string;
63
+ /**
64
+ * Optional static headers to include on every request. Auth headers
65
+ * should be provided via the `getAuthHeaders` callback instead, so
66
+ * token refresh doesn't require rebuilding the provider.
67
+ */
68
+ headers?: Record<string, string>;
69
+ /**
70
+ * When true, expose the remote agent as a single coarse-grained
71
+ * Capability (one per remote, named after the agent). When false
72
+ * (default), expose one Capability per skill advertised on the card.
73
+ */
74
+ flattenAsSingleTool?: boolean;
75
+ /**
76
+ * Optional override of the agent card URL. Defaults to
77
+ * `<url>/.well-known/agent.json`.
78
+ */
79
+ cardPath?: string;
80
+ /**
81
+ * Optional override of the JSON-RPC endpoint path. Defaults to `/`.
82
+ */
83
+ rpcPath?: string;
84
+ }
85
+
86
+ /** Configuration for the A2A capability provider. */
87
+ export interface A2AProviderConfig {
88
+ /**
89
+ * Map of remoteName → spec. Remote names are stable identifiers used
90
+ * as the capability name prefix and as keys for `getAuthHeaders`.
91
+ */
92
+ remotes: Record<string, A2ARemoteSpec>;
93
+ /**
94
+ * Optional callback to resolve auth headers for a given remote at
95
+ * connect-time. Returns a header map merged over `spec.headers`.
96
+ *
97
+ * The library never stores tokens — the host owns auth lifecycle and
98
+ * provides resolved values here.
99
+ */
100
+ getAuthHeaders?: (
101
+ remoteName: string
102
+ ) =>
103
+ | Promise<Record<string, string> | undefined>
104
+ | Record<string, string>
105
+ | undefined;
106
+ /**
107
+ * Identity announced to remotes on every request via `user-agent` /
108
+ * provider headers. Defaults to env vars (`A2A_CLIENT_NAME` /
109
+ * `A2A_CLIENT_VERSION`) or a library fallback.
110
+ */
111
+ clientInfo?: { name: string; version: string };
112
+ /** HTTP request timeout in ms. Defaults to 30_000. */
113
+ timeoutMs?: number;
114
+ /** Optional logger. Defaults to a console-based one. */
115
+ logger?: A2ALogger;
116
+ }
117
+
118
+ /** Minimal logger interface — matches pino-style signatures. */
119
+ export interface A2ALogger {
120
+ debug: (...args: unknown[]) => void;
121
+ info: (...args: unknown[]) => void;
122
+ warn: (...args: unknown[]) => void;
123
+ error: (...args: unknown[]) => void;
124
+ }
125
+
126
+ // ---------------------------------------------------------------------------
127
+ // JSON-RPC 2.0 shapes (subset used by the provider)
128
+ // ---------------------------------------------------------------------------
129
+
130
+ export interface JsonRpcRequest<P = unknown> {
131
+ jsonrpc: '2.0';
132
+ id: string | number | null;
133
+ method: string;
134
+ params?: P;
135
+ }
136
+
137
+ export interface JsonRpcSuccess<R = unknown> {
138
+ jsonrpc: '2.0';
139
+ id: string | number | null;
140
+ result: R;
141
+ }
142
+
143
+ export interface JsonRpcErrorResponse {
144
+ jsonrpc: '2.0';
145
+ id: string | number | null;
146
+ error: { code: number; message: string; data?: unknown };
147
+ }
148
+
149
+ export type JsonRpcResponse<R = unknown> =
150
+ | JsonRpcSuccess<R>
151
+ | JsonRpcErrorResponse;
152
+
153
+ // ---------------------------------------------------------------------------
154
+ // A2A task message shapes
155
+ // ---------------------------------------------------------------------------
156
+
157
+ export interface A2AMessage {
158
+ role: 'user' | 'agent';
159
+ parts: Array<{ type: 'text'; text: string }>;
160
+ }
161
+
162
+ export interface A2ATaskParams {
163
+ /** Caller-assigned task id — echoed back by the server. */
164
+ id: string;
165
+ /** Optional session id for multi-turn continuity. */
166
+ sessionId?: string;
167
+ /** The message to deliver to the remote agent. */
168
+ message: A2AMessage;
169
+ }
170
+
171
+ export type A2ATaskState =
172
+ | 'submitted'
173
+ | 'working'
174
+ | 'input-required'
175
+ | 'completed'
176
+ | 'failed'
177
+ | 'canceled';
178
+
179
+ export interface A2ATaskStatus {
180
+ state: A2ATaskState;
181
+ timestamp: string;
182
+ }
183
+
184
+ export interface A2ATask {
185
+ id: string;
186
+ sessionId?: string;
187
+ status: A2ATaskStatus;
188
+ /** Final agent response — populated when status is `completed`. */
189
+ artifacts?: Array<{ parts: Array<{ type: 'text'; text: string }> }>;
190
+ error?: { code: number; message: string };
191
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Shared capability-name encoding used by source-specific providers
3
+ * (MCP, A2A, and future providers that expose multi-level namespaces).
4
+ *
5
+ * A capability name encodes `<sourceName>__<itemName>` where:
6
+ * - `sourceName` is the provider-level identifier (MCP server name,
7
+ * A2A remote name, etc.)
8
+ * - `itemName` is the per-source sub-unit (MCP tool name, A2A skill id)
9
+ *
10
+ * Centralizing the separator + parsing here keeps both providers in lockstep
11
+ * and prevents collisions when re-exported from the provider barrel.
12
+ */
13
+
14
+ /** Separator between source and item in an encoded capability name. */
15
+ export const CAPABILITY_NAME_SEPARATOR = '__';
16
+
17
+ /** Compose a capability name. If `itemName` is omitted, returns just `sourceName`. */
18
+ export function formatCapabilityName(
19
+ sourceName: string,
20
+ itemName?: string
21
+ ): string {
22
+ return itemName
23
+ ? `${sourceName}${CAPABILITY_NAME_SEPARATOR}${itemName}`
24
+ : sourceName;
25
+ }
26
+
27
+ /**
28
+ * Parse a capability name into its components. Returns `null` when `name`
29
+ * is empty. When the name has no separator, `itemName` is undefined
30
+ * (the caller can treat that as a whole-source invocation).
31
+ */
32
+ export function parseCapabilityName(
33
+ name: string
34
+ ): { sourceName: string; itemName?: string } | null {
35
+ if (!name) return null;
36
+ const sepIdx = name.indexOf(CAPABILITY_NAME_SEPARATOR);
37
+ if (sepIdx < 0) return { sourceName: name };
38
+ return {
39
+ sourceName: name.slice(0, sepIdx),
40
+ itemName: name.slice(sepIdx + CAPABILITY_NAME_SEPARATOR.length),
41
+ };
42
+ }
@@ -0,0 +1,112 @@
1
+ /**
2
+ * CompositeCapabilityProvider — fans out to multiple CapabilityProviders
3
+ * and merges their manifests + runnables into one.
4
+ *
5
+ * Use case: an agent that consumes tools from tools-server AND MCP servers
6
+ * AND (future) skills. The composite exposes a single CapabilityProvider
7
+ * interface to the agent runtime so it doesn't know or care how many
8
+ * backing sources exist.
9
+ *
10
+ * Precedence: later providers do NOT override earlier ones on name
11
+ * collision — collisions are logged and the first-registered capability
12
+ * wins. Callers should ensure providers expose disjoint name spaces.
13
+ */
14
+
15
+ import type { StructuredToolInterface } from '@langchain/core/tools';
16
+ import type {
17
+ Capability,
18
+ CapabilityFilter,
19
+ CapabilityProvider,
20
+ CredentialMap,
21
+ } from '@/providers/types';
22
+
23
+ export class CompositeCapabilityProvider implements CapabilityProvider {
24
+ readonly providerId: string;
25
+ private readonly providers: CapabilityProvider[];
26
+
27
+ constructor(providers: CapabilityProvider[]) {
28
+ if (!providers.length) {
29
+ throw new Error(
30
+ 'CompositeCapabilityProvider: at least one provider is required'
31
+ );
32
+ }
33
+ this.providers = providers;
34
+ this.providerId = `composite:${providers.map((p) => p.providerId).join(',')}`;
35
+ }
36
+
37
+ async fetchManifest(filter?: CapabilityFilter): Promise<Capability[]> {
38
+ // Fetch all providers in parallel. One provider failing should not
39
+ // prevent others from contributing — log and continue.
40
+ const results = await Promise.allSettled(
41
+ this.providers.map((p) => p.fetchManifest(filter))
42
+ );
43
+
44
+ const merged: Capability[] = [];
45
+ const seen = new Set<string>();
46
+
47
+ for (let i = 0; i < results.length; i++) {
48
+ const result = results[i];
49
+ const provider = this.providers[i];
50
+
51
+ if (result.status === 'rejected') {
52
+ // DEBUG
53
+ // eslint-disable-next-line no-console
54
+ console.debug(
55
+ `[composite] provider ${provider.providerId} fetchManifest failed — ${String(result.reason)}`
56
+ );
57
+ continue;
58
+ }
59
+
60
+ for (const cap of result.value) {
61
+ if (seen.has(cap.name)) {
62
+ // DEBUG
63
+ // eslint-disable-next-line no-console
64
+ console.debug(
65
+ `[composite] name collision on "${cap.name}" from ${provider.providerId} — keeping first`
66
+ );
67
+ continue;
68
+ }
69
+ seen.add(cap.name);
70
+ merged.push(cap);
71
+ }
72
+ }
73
+
74
+ // DEBUG
75
+ // eslint-disable-next-line no-console
76
+ console.debug(
77
+ `[composite] merged manifest: ${merged.length} caps from ${this.providers.length} providers`
78
+ );
79
+
80
+ return merged;
81
+ }
82
+
83
+ async createRunnables(
84
+ capabilities: Capability[],
85
+ credentials: CredentialMap
86
+ ): Promise<StructuredToolInterface[]> {
87
+ // Determine which capabilities belong to which provider by refetching
88
+ // each provider's manifest and intersecting with the requested set.
89
+ // This keeps providers stateless — we don't require Capability to
90
+ // carry a back-reference to its provider.
91
+ const capabilityNames = new Set(capabilities.map((c) => c.name));
92
+ const perProviderCaps = await Promise.all(
93
+ this.providers.map(async (p) => {
94
+ const manifest = await p.fetchManifest();
95
+ return manifest.filter((c) => capabilityNames.has(c.name));
96
+ })
97
+ );
98
+
99
+ const allRunnables: StructuredToolInterface[] = [];
100
+ for (let i = 0; i < this.providers.length; i++) {
101
+ const providerCaps = perProviderCaps[i];
102
+ if (!providerCaps.length) continue;
103
+ const runnables = await this.providers[i].createRunnables(
104
+ providerCaps,
105
+ credentials
106
+ );
107
+ allRunnables.push(...runnables);
108
+ }
109
+
110
+ return allRunnables;
111
+ }
112
+ }
@@ -0,0 +1 @@
1
+ export * from './CompositeCapabilityProvider';
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Capability provider abstraction.
3
+ *
4
+ * See docs/architecture-capability-layer.md for the full design rationale.
5
+ */
6
+
7
+ export * from './types';
8
+ // Shared capability-name helpers — single source of truth so both MCP and
9
+ // A2A consumers get the same encoding without re-export duplication.
10
+ export * from './capabilityNaming';
11
+ export * from './tools-server';
12
+ export * from './composite';
13
+ // MCP + A2A barrels intentionally namespaced to avoid re-exporting
14
+ // `CAPABILITY_NAME_SEPARATOR` / `formatCapabilityName` twice (each
15
+ // provider module re-exports them internally; the canonical export
16
+ // comes from `./capabilityNaming` above).
17
+ export {
18
+ MCPCapabilityProvider,
19
+ flattenToolCallResponse,
20
+ createTransport,
21
+ mcpConsoleLogger,
22
+ getMCPEnvDefaults,
23
+ } from './mcp';
24
+ export type {
25
+ MCPLogger,
26
+ MCPProviderConfig,
27
+ MCPServerSpec,
28
+ MCPTransportKind,
29
+ StdioSpec,
30
+ SSESpec,
31
+ StreamableHTTPSpec,
32
+ WebSocketSpec,
33
+ MCPToolDescriptor,
34
+ MCPToolCallResult,
35
+ MCPStructuredTool,
36
+ } from './mcp';
37
+ export {
38
+ A2ACapabilityProvider,
39
+ A2AClient,
40
+ extractTaskText,
41
+ generateRpcId,
42
+ skillToCapability,
43
+ coerceInputToA2AMessage,
44
+ MESSAGE_INPUT_SCHEMA,
45
+ a2aConsoleLogger,
46
+ getA2AEnvDefaults,
47
+ } from './a2a';
48
+ export type {
49
+ A2AAgentCard,
50
+ A2ACardCapabilities,
51
+ A2AClientOptions,
52
+ A2ALogger,
53
+ A2AMessage,
54
+ A2AProviderConfig,
55
+ A2ARemoteSpec,
56
+ A2ASkill,
57
+ A2ATask,
58
+ A2ATaskParams,
59
+ A2ATaskState,
60
+ A2ATaskStatus,
61
+ JsonRpcRequest,
62
+ JsonRpcResponse,
63
+ JsonRpcSuccess,
64
+ JsonRpcErrorResponse,
65
+ } from './a2a';