@sprinterai/runtime 0.3.0 → 0.5.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 (385) hide show
  1. package/LICENSE +21 -0
  2. package/dist/adapters/a2a-adapter.d.ts +37 -9
  3. package/dist/adapters/a2a-adapter.d.ts.map +1 -1
  4. package/dist/adapters/a2a-adapter.js +132 -9
  5. package/dist/adapters/a2a-adapter.js.map +1 -1
  6. package/dist/adapters/a2a-adapter.test.d.ts +2 -0
  7. package/dist/adapters/a2a-adapter.test.d.ts.map +1 -0
  8. package/dist/adapters/a2a-adapter.test.js +295 -0
  9. package/dist/adapters/a2a-adapter.test.js.map +1 -0
  10. package/dist/adapters/http-agent-adapter.d.ts +19 -9
  11. package/dist/adapters/http-agent-adapter.d.ts.map +1 -1
  12. package/dist/adapters/http-agent-adapter.js +55 -9
  13. package/dist/adapters/http-agent-adapter.js.map +1 -1
  14. package/dist/adapters/http-agent-adapter.test.d.ts +2 -0
  15. package/dist/adapters/http-agent-adapter.test.d.ts.map +1 -0
  16. package/dist/adapters/http-agent-adapter.test.js +164 -0
  17. package/dist/adapters/http-agent-adapter.test.js.map +1 -0
  18. package/dist/adapters/index.d.ts +8 -8
  19. package/dist/adapters/index.d.ts.map +1 -1
  20. package/dist/adapters/index.js +4 -4
  21. package/dist/adapters/index.js.map +1 -1
  22. package/dist/adapters/mcp-adapter.d.ts +29 -9
  23. package/dist/adapters/mcp-adapter.d.ts.map +1 -1
  24. package/dist/adapters/mcp-adapter.js +43 -8
  25. package/dist/adapters/mcp-adapter.js.map +1 -1
  26. package/dist/adapters/mcp-adapter.test.d.ts +2 -0
  27. package/dist/adapters/mcp-adapter.test.d.ts.map +1 -0
  28. package/dist/adapters/mcp-adapter.test.js +118 -0
  29. package/dist/adapters/mcp-adapter.test.js.map +1 -0
  30. package/dist/adapters/openclaw-adapter.d.ts +34 -8
  31. package/dist/adapters/openclaw-adapter.d.ts.map +1 -1
  32. package/dist/adapters/openclaw-adapter.js +38 -8
  33. package/dist/adapters/openclaw-adapter.js.map +1 -1
  34. package/dist/adapters/openclaw-adapter.test.d.ts +2 -0
  35. package/dist/adapters/openclaw-adapter.test.d.ts.map +1 -0
  36. package/dist/adapters/openclaw-adapter.test.js +77 -0
  37. package/dist/adapters/openclaw-adapter.test.js.map +1 -0
  38. package/dist/agent/agent-registry.test.js +1 -1
  39. package/dist/agent/agent-resolver.d.ts +8 -2
  40. package/dist/agent/agent-resolver.d.ts.map +1 -1
  41. package/dist/agent/agent-resolver.js +7 -1
  42. package/dist/agent/agent-resolver.js.map +1 -1
  43. package/dist/agent/agent-resolver.test.js +21 -3
  44. package/dist/agent/agent-resolver.test.js.map +1 -1
  45. package/dist/agent/delegate.test.js +1 -1
  46. package/dist/agent/execute-agent.d.ts +32 -8
  47. package/dist/agent/execute-agent.d.ts.map +1 -1
  48. package/dist/agent/execute-agent.js +40 -3
  49. package/dist/agent/execute-agent.js.map +1 -1
  50. package/dist/agent/index.d.ts +9 -9
  51. package/dist/agent/index.d.ts.map +1 -1
  52. package/dist/agent/index.js +5 -5
  53. package/dist/agent/index.js.map +1 -1
  54. package/dist/agent/prompt-builder.test.js +1 -1
  55. package/dist/approval/approval-manager.d.ts +19 -0
  56. package/dist/approval/approval-manager.d.ts.map +1 -0
  57. package/dist/approval/approval-manager.js +36 -0
  58. package/dist/approval/approval-manager.js.map +1 -0
  59. package/dist/approval/approval-manager.test.d.ts +2 -0
  60. package/dist/approval/approval-manager.test.d.ts.map +1 -0
  61. package/dist/approval/approval-manager.test.js +239 -0
  62. package/dist/approval/approval-manager.test.js.map +1 -0
  63. package/dist/approval/index.d.ts +3 -0
  64. package/dist/approval/index.d.ts.map +1 -0
  65. package/dist/approval/index.js +2 -0
  66. package/dist/approval/index.js.map +1 -0
  67. package/dist/chat/chat-handler.d.ts +14 -7
  68. package/dist/chat/chat-handler.d.ts.map +1 -1
  69. package/dist/chat/chat-handler.js +56 -11
  70. package/dist/chat/chat-handler.js.map +1 -1
  71. package/dist/chat/chat-handler.test.js +100 -11
  72. package/dist/chat/chat-handler.test.js.map +1 -1
  73. package/dist/chat/index.d.ts +3 -3
  74. package/dist/chat/index.js +2 -2
  75. package/dist/chat/message-utils.d.ts +15 -7
  76. package/dist/chat/message-utils.d.ts.map +1 -1
  77. package/dist/chat/message-utils.js +94 -22
  78. package/dist/chat/message-utils.js.map +1 -1
  79. package/dist/chat/message-utils.test.js +71 -1
  80. package/dist/chat/message-utils.test.js.map +1 -1
  81. package/dist/document/chunk-generator.d.ts +6 -0
  82. package/dist/document/chunk-generator.d.ts.map +1 -0
  83. package/dist/document/chunk-generator.js +107 -0
  84. package/dist/document/chunk-generator.js.map +1 -0
  85. package/dist/document/chunk-generator.test.d.ts +2 -0
  86. package/dist/document/chunk-generator.test.d.ts.map +1 -0
  87. package/dist/document/chunk-generator.test.js +166 -0
  88. package/dist/document/chunk-generator.test.js.map +1 -0
  89. package/dist/document/document-processor.d.ts +27 -0
  90. package/dist/document/document-processor.d.ts.map +1 -0
  91. package/dist/document/document-processor.js +44 -0
  92. package/dist/document/document-processor.js.map +1 -0
  93. package/dist/document/document-processor.test.d.ts +2 -0
  94. package/dist/document/document-processor.test.d.ts.map +1 -0
  95. package/dist/document/document-processor.test.js +197 -0
  96. package/dist/document/document-processor.test.js.map +1 -0
  97. package/dist/document/index.d.ts +5 -0
  98. package/dist/document/index.d.ts.map +1 -0
  99. package/dist/document/index.js +4 -0
  100. package/dist/document/index.js.map +1 -0
  101. package/dist/document/parsers/index.d.ts +2 -0
  102. package/dist/document/parsers/index.d.ts.map +1 -0
  103. package/dist/document/parsers/index.js +2 -0
  104. package/dist/document/parsers/index.js.map +1 -0
  105. package/dist/document/parsers/text-parser.d.ts +4 -0
  106. package/dist/document/parsers/text-parser.d.ts.map +1 -0
  107. package/dist/document/parsers/text-parser.js +23 -0
  108. package/dist/document/parsers/text-parser.js.map +1 -0
  109. package/dist/document/parsers/text-parser.test.d.ts +2 -0
  110. package/dist/document/parsers/text-parser.test.d.ts.map +1 -0
  111. package/dist/document/parsers/text-parser.test.js +64 -0
  112. package/dist/document/parsers/text-parser.test.js.map +1 -0
  113. package/dist/eval/eval-runner.test.js +2 -2
  114. package/dist/eval/index.d.ts +3 -3
  115. package/dist/eval/index.js +2 -2
  116. package/dist/eval/scorers.test.js +1 -1
  117. package/dist/events/event-bus.d.ts +12 -0
  118. package/dist/events/event-bus.d.ts.map +1 -0
  119. package/dist/events/event-bus.js +77 -0
  120. package/dist/events/event-bus.js.map +1 -0
  121. package/dist/events/event-bus.test.d.ts +2 -0
  122. package/dist/events/event-bus.test.d.ts.map +1 -0
  123. package/dist/events/event-bus.test.js +155 -0
  124. package/dist/events/event-bus.test.js.map +1 -0
  125. package/dist/events/index.d.ts +2 -0
  126. package/dist/events/index.d.ts.map +1 -0
  127. package/dist/events/index.js +2 -0
  128. package/dist/events/index.js.map +1 -0
  129. package/dist/guardrail/guardrail-pipeline.test.js +1 -1
  130. package/dist/guardrail/index.d.ts +2 -2
  131. package/dist/guardrail/index.js +1 -1
  132. package/dist/index.d.ts +81 -45
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +55 -27
  135. package/dist/index.js.map +1 -1
  136. package/dist/jobs/in-memory-job-queue.d.ts +20 -0
  137. package/dist/jobs/in-memory-job-queue.d.ts.map +1 -0
  138. package/dist/jobs/in-memory-job-queue.js +120 -0
  139. package/dist/jobs/in-memory-job-queue.js.map +1 -0
  140. package/dist/jobs/in-memory-job-queue.test.d.ts +2 -0
  141. package/dist/jobs/in-memory-job-queue.test.d.ts.map +1 -0
  142. package/dist/jobs/in-memory-job-queue.test.js +146 -0
  143. package/dist/jobs/in-memory-job-queue.test.js.map +1 -0
  144. package/dist/jobs/index.d.ts +4 -0
  145. package/dist/jobs/index.d.ts.map +1 -0
  146. package/dist/jobs/index.js +3 -0
  147. package/dist/jobs/index.js.map +1 -0
  148. package/dist/jobs/job-runner.d.ts +42 -0
  149. package/dist/jobs/job-runner.d.ts.map +1 -0
  150. package/dist/jobs/job-runner.js +119 -0
  151. package/dist/jobs/job-runner.js.map +1 -0
  152. package/dist/jobs/job-runner.test.d.ts +2 -0
  153. package/dist/jobs/job-runner.test.d.ts.map +1 -0
  154. package/dist/jobs/job-runner.test.js +190 -0
  155. package/dist/jobs/job-runner.test.js.map +1 -0
  156. package/dist/memory/index.d.ts +3 -3
  157. package/dist/memory/index.js +2 -2
  158. package/dist/memory/memory-prompt.d.ts +1 -1
  159. package/dist/module/create-runtime.d.ts +21 -6
  160. package/dist/module/create-runtime.d.ts.map +1 -1
  161. package/dist/module/create-runtime.js +7 -7
  162. package/dist/module/create-runtime.js.map +1 -1
  163. package/dist/module/create-runtime.test.js +8 -8
  164. package/dist/module/index.d.ts +5 -4
  165. package/dist/module/index.d.ts.map +1 -1
  166. package/dist/module/index.js +3 -2
  167. package/dist/module/index.js.map +1 -1
  168. package/dist/module/map-supabase-stores.d.ts +33 -0
  169. package/dist/module/map-supabase-stores.d.ts.map +1 -0
  170. package/dist/module/map-supabase-stores.js +28 -0
  171. package/dist/module/map-supabase-stores.js.map +1 -0
  172. package/dist/module/module-loader.d.ts +9 -1
  173. package/dist/module/module-loader.d.ts.map +1 -1
  174. package/dist/module/module-loader.js +40 -1
  175. package/dist/module/module-loader.js.map +1 -1
  176. package/dist/module/module-loader.test.js +38 -1
  177. package/dist/module/module-loader.test.js.map +1 -1
  178. package/dist/notification/digest-scheduler.d.ts +18 -0
  179. package/dist/notification/digest-scheduler.d.ts.map +1 -0
  180. package/dist/notification/digest-scheduler.js +44 -0
  181. package/dist/notification/digest-scheduler.js.map +1 -0
  182. package/dist/notification/digest-scheduler.test.d.ts +2 -0
  183. package/dist/notification/digest-scheduler.test.d.ts.map +1 -0
  184. package/dist/notification/digest-scheduler.test.js +306 -0
  185. package/dist/notification/digest-scheduler.test.js.map +1 -0
  186. package/dist/notification/index.d.ts +5 -0
  187. package/dist/notification/index.d.ts.map +1 -0
  188. package/dist/notification/index.js +3 -0
  189. package/dist/notification/index.js.map +1 -0
  190. package/dist/notification/notification-engine.d.ts +20 -0
  191. package/dist/notification/notification-engine.d.ts.map +1 -0
  192. package/dist/notification/notification-engine.js +78 -0
  193. package/dist/notification/notification-engine.js.map +1 -0
  194. package/dist/notification/notification-engine.test.d.ts +2 -0
  195. package/dist/notification/notification-engine.test.d.ts.map +1 -0
  196. package/dist/notification/notification-engine.test.js +364 -0
  197. package/dist/notification/notification-engine.test.js.map +1 -0
  198. package/dist/providers/index.d.ts +5 -0
  199. package/dist/providers/index.d.ts.map +1 -0
  200. package/dist/providers/index.js +3 -0
  201. package/dist/providers/index.js.map +1 -0
  202. package/dist/providers/model-resolver.d.ts +93 -0
  203. package/dist/providers/model-resolver.d.ts.map +1 -0
  204. package/dist/providers/model-resolver.js +152 -0
  205. package/dist/providers/model-resolver.js.map +1 -0
  206. package/dist/providers/model-resolver.test.d.ts +2 -0
  207. package/dist/providers/model-resolver.test.d.ts.map +1 -0
  208. package/dist/providers/model-resolver.test.js +199 -0
  209. package/dist/providers/model-resolver.test.js.map +1 -0
  210. package/dist/providers/noop-providers.d.ts +6 -0
  211. package/dist/providers/noop-providers.d.ts.map +1 -0
  212. package/dist/providers/noop-providers.js +15 -0
  213. package/dist/providers/noop-providers.js.map +1 -0
  214. package/dist/providers/noop-providers.test.d.ts +2 -0
  215. package/dist/providers/noop-providers.test.d.ts.map +1 -0
  216. package/dist/providers/noop-providers.test.js +63 -0
  217. package/dist/providers/noop-providers.test.js.map +1 -0
  218. package/dist/providers/provider-interfaces.d.ts +65 -0
  219. package/dist/providers/provider-interfaces.d.ts.map +1 -0
  220. package/dist/providers/provider-interfaces.js +2 -0
  221. package/dist/providers/provider-interfaces.js.map +1 -0
  222. package/dist/realtime/index.d.ts +3 -0
  223. package/dist/realtime/index.d.ts.map +1 -0
  224. package/dist/realtime/index.js +2 -0
  225. package/dist/realtime/index.js.map +1 -0
  226. package/dist/realtime/realtime-manager.d.ts +20 -0
  227. package/dist/realtime/realtime-manager.d.ts.map +1 -0
  228. package/dist/realtime/realtime-manager.js +110 -0
  229. package/dist/realtime/realtime-manager.js.map +1 -0
  230. package/dist/realtime/realtime-manager.test.d.ts +2 -0
  231. package/dist/realtime/realtime-manager.test.d.ts.map +1 -0
  232. package/dist/realtime/realtime-manager.test.js +273 -0
  233. package/dist/realtime/realtime-manager.test.js.map +1 -0
  234. package/dist/scoring/compute-score.test.js +1 -1
  235. package/dist/scoring/index.d.ts +2 -2
  236. package/dist/scoring/index.js +1 -1
  237. package/dist/search/cosine-similarity.d.ts +8 -0
  238. package/dist/search/cosine-similarity.d.ts.map +1 -0
  239. package/dist/search/cosine-similarity.js +28 -0
  240. package/dist/search/cosine-similarity.js.map +1 -0
  241. package/dist/search/cosine-similarity.test.d.ts +2 -0
  242. package/dist/search/cosine-similarity.test.d.ts.map +1 -0
  243. package/dist/search/cosine-similarity.test.js +49 -0
  244. package/dist/search/cosine-similarity.test.js.map +1 -0
  245. package/dist/search/hybrid-search.d.ts +47 -0
  246. package/dist/search/hybrid-search.d.ts.map +1 -0
  247. package/dist/search/hybrid-search.js +111 -0
  248. package/dist/search/hybrid-search.js.map +1 -0
  249. package/dist/search/hybrid-search.test.d.ts +2 -0
  250. package/dist/search/hybrid-search.test.d.ts.map +1 -0
  251. package/dist/search/hybrid-search.test.js +238 -0
  252. package/dist/search/hybrid-search.test.js.map +1 -0
  253. package/dist/search/in-memory-search.d.ts +17 -0
  254. package/dist/search/in-memory-search.d.ts.map +1 -0
  255. package/dist/search/in-memory-search.js +59 -0
  256. package/dist/search/in-memory-search.js.map +1 -0
  257. package/dist/search/in-memory-search.test.d.ts +2 -0
  258. package/dist/search/in-memory-search.test.d.ts.map +1 -0
  259. package/dist/search/in-memory-search.test.js +169 -0
  260. package/dist/search/in-memory-search.test.js.map +1 -0
  261. package/dist/search/index.d.ts +6 -0
  262. package/dist/search/index.d.ts.map +1 -0
  263. package/dist/search/index.js +4 -0
  264. package/dist/search/index.js.map +1 -0
  265. package/dist/testing/in-memory-agent-store.d.ts +5 -1
  266. package/dist/testing/in-memory-agent-store.d.ts.map +1 -1
  267. package/dist/testing/in-memory-agent-store.js +19 -0
  268. package/dist/testing/in-memory-agent-store.js.map +1 -1
  269. package/dist/testing/in-memory-agent-store.test.js +1 -1
  270. package/dist/testing/in-memory-chat-store.d.ts.map +1 -1
  271. package/dist/testing/in-memory-chat-store.js +2 -1
  272. package/dist/testing/in-memory-chat-store.js.map +1 -1
  273. package/dist/testing/in-memory-entity-store.d.ts +5 -1
  274. package/dist/testing/in-memory-entity-store.d.ts.map +1 -1
  275. package/dist/testing/in-memory-entity-store.js +69 -4
  276. package/dist/testing/in-memory-entity-store.js.map +1 -1
  277. package/dist/testing/in-memory-entity-store.test.js +1 -1
  278. package/dist/testing/in-memory-memory-store.d.ts +3 -1
  279. package/dist/testing/in-memory-memory-store.d.ts.map +1 -1
  280. package/dist/testing/in-memory-memory-store.js +20 -0
  281. package/dist/testing/in-memory-memory-store.js.map +1 -1
  282. package/dist/testing/in-memory-tool-store.d.ts +13 -2
  283. package/dist/testing/in-memory-tool-store.d.ts.map +1 -1
  284. package/dist/testing/in-memory-tool-store.js +51 -0
  285. package/dist/testing/in-memory-tool-store.js.map +1 -1
  286. package/dist/testing/index.d.ts +7 -7
  287. package/dist/testing/index.js +7 -7
  288. package/dist/tool/ai-bridge.d.ts +1 -0
  289. package/dist/tool/ai-bridge.d.ts.map +1 -1
  290. package/dist/tool/ai-bridge.js +1 -0
  291. package/dist/tool/ai-bridge.js.map +1 -1
  292. package/dist/tool/ai-bridge.test.js +1 -1
  293. package/dist/tool/catalog.d.ts +19 -0
  294. package/dist/tool/catalog.d.ts.map +1 -0
  295. package/dist/tool/catalog.js +88 -0
  296. package/dist/tool/catalog.js.map +1 -0
  297. package/dist/tool/catalog.test.d.ts +2 -0
  298. package/dist/tool/catalog.test.d.ts.map +1 -0
  299. package/dist/tool/catalog.test.js +129 -0
  300. package/dist/tool/catalog.test.js.map +1 -0
  301. package/dist/tool/entity-tools-factory.test.js +2 -2
  302. package/dist/tool/execute-registered-tool.d.ts +17 -0
  303. package/dist/tool/execute-registered-tool.d.ts.map +1 -0
  304. package/dist/tool/execute-registered-tool.js +24 -0
  305. package/dist/tool/execute-registered-tool.js.map +1 -0
  306. package/dist/tool/execute-registered-tool.test.d.ts +2 -0
  307. package/dist/tool/execute-registered-tool.test.d.ts.map +1 -0
  308. package/dist/tool/execute-registered-tool.test.js +73 -0
  309. package/dist/tool/execute-registered-tool.test.js.map +1 -0
  310. package/dist/tool/index.d.ts +11 -7
  311. package/dist/tool/index.d.ts.map +1 -1
  312. package/dist/tool/index.js +7 -5
  313. package/dist/tool/index.js.map +1 -1
  314. package/dist/tool/resolve-tools.d.ts +3 -1
  315. package/dist/tool/resolve-tools.d.ts.map +1 -1
  316. package/dist/tool/resolve-tools.js +1 -1
  317. package/dist/tool/resolve-tools.js.map +1 -1
  318. package/dist/tool/resolve-tools.test.js +1 -1
  319. package/dist/tool/tool-executor.d.ts +3 -2
  320. package/dist/tool/tool-executor.d.ts.map +1 -1
  321. package/dist/tool/tool-executor.js +4 -2
  322. package/dist/tool/tool-executor.js.map +1 -1
  323. package/dist/tool/tool-executor.test.js +2 -2
  324. package/dist/tool/tool-registry.test.js +1 -1
  325. package/dist/tool/zod-to-json-schema.d.ts +7 -0
  326. package/dist/tool/zod-to-json-schema.d.ts.map +1 -0
  327. package/dist/tool/zod-to-json-schema.js +12 -0
  328. package/dist/tool/zod-to-json-schema.js.map +1 -0
  329. package/dist/tool/zod-to-json-schema.test.d.ts +2 -0
  330. package/dist/tool/zod-to-json-schema.test.d.ts.map +1 -0
  331. package/dist/tool/zod-to-json-schema.test.js +127 -0
  332. package/dist/tool/zod-to-json-schema.test.js.map +1 -0
  333. package/dist/webhook/index.d.ts +4 -0
  334. package/dist/webhook/index.d.ts.map +1 -0
  335. package/dist/webhook/index.js +3 -0
  336. package/dist/webhook/index.js.map +1 -0
  337. package/dist/webhook/webhook-delivery.d.ts +12 -0
  338. package/dist/webhook/webhook-delivery.d.ts.map +1 -0
  339. package/dist/webhook/webhook-delivery.js +102 -0
  340. package/dist/webhook/webhook-delivery.js.map +1 -0
  341. package/dist/webhook/webhook-delivery.test.d.ts +2 -0
  342. package/dist/webhook/webhook-delivery.test.d.ts.map +1 -0
  343. package/dist/webhook/webhook-delivery.test.js +284 -0
  344. package/dist/webhook/webhook-delivery.test.js.map +1 -0
  345. package/dist/webhook/webhook-signer.d.ts +14 -0
  346. package/dist/webhook/webhook-signer.d.ts.map +1 -0
  347. package/dist/webhook/webhook-signer.js +31 -0
  348. package/dist/webhook/webhook-signer.js.map +1 -0
  349. package/dist/webhook/webhook-signer.test.d.ts +2 -0
  350. package/dist/webhook/webhook-signer.test.d.ts.map +1 -0
  351. package/dist/webhook/webhook-signer.test.js +74 -0
  352. package/dist/webhook/webhook-signer.test.js.map +1 -0
  353. package/dist/workflow/compile.js +4 -1
  354. package/dist/workflow/compile.js.map +1 -1
  355. package/dist/workflow/compile.test.js +1 -1
  356. package/dist/workflow/evaluate-nodes.d.ts +24 -0
  357. package/dist/workflow/evaluate-nodes.d.ts.map +1 -0
  358. package/dist/workflow/evaluate-nodes.js +126 -0
  359. package/dist/workflow/evaluate-nodes.js.map +1 -0
  360. package/dist/workflow/evaluate-nodes.test.d.ts +2 -0
  361. package/dist/workflow/evaluate-nodes.test.d.ts.map +1 -0
  362. package/dist/workflow/evaluate-nodes.test.js +363 -0
  363. package/dist/workflow/evaluate-nodes.test.js.map +1 -0
  364. package/dist/workflow/index.d.ts +8 -3
  365. package/dist/workflow/index.d.ts.map +1 -1
  366. package/dist/workflow/index.js +4 -2
  367. package/dist/workflow/index.js.map +1 -1
  368. package/dist/workflow/node-executor.d.ts +40 -0
  369. package/dist/workflow/node-executor.d.ts.map +1 -0
  370. package/dist/workflow/node-executor.js +2 -0
  371. package/dist/workflow/node-executor.js.map +1 -0
  372. package/dist/workflow/node-executor.test.d.ts +2 -0
  373. package/dist/workflow/node-executor.test.d.ts.map +1 -0
  374. package/dist/workflow/node-executor.test.js +91 -0
  375. package/dist/workflow/node-executor.test.js.map +1 -0
  376. package/dist/workflow/status.test.js +1 -1
  377. package/dist/workflow/workflow-runner.d.ts +57 -0
  378. package/dist/workflow/workflow-runner.d.ts.map +1 -0
  379. package/dist/workflow/workflow-runner.js +263 -0
  380. package/dist/workflow/workflow-runner.js.map +1 -0
  381. package/dist/workflow/workflow-runner.test.d.ts +2 -0
  382. package/dist/workflow/workflow-runner.test.d.ts.map +1 -0
  383. package/dist/workflow/workflow-runner.test.js +657 -0
  384. package/dist/workflow/workflow-runner.test.js.map +1 -0
  385. package/package.json +19 -14
@@ -1,13 +1,59 @@
1
1
  /**
2
- * Adapter for generic HTTP agent endpoints.
3
- *
4
- * Wraps any HTTP endpoint that accepts JSON and returns JSON
5
- * as a callable agent interface.
6
- *
7
- * Note: This is a stub. Implement with your preferred HTTP client.
8
- * Throws if not configured.
2
+ * Create a callable HTTP agent endpoint.
3
+ * Wraps any HTTP endpoint that accepts/returns JSON as a callable agent interface.
9
4
  */
10
- export async function createHTTPAgent(_config) {
11
- throw new Error("HTTP agent adapter not configured. Provide an HTTP client implementation.");
5
+ export function createHTTPAgent(config) {
6
+ const { endpointUrl, method = 'POST', headers: customHeaders = {}, authToken, timeoutMs = 30_000, } = config;
7
+ const baseHeaders = {
8
+ 'Content-Type': 'application/json',
9
+ Accept: 'application/json',
10
+ ...customHeaders,
11
+ };
12
+ if (authToken) {
13
+ baseHeaders['Authorization'] = `Bearer ${authToken}`;
14
+ }
15
+ return {
16
+ config,
17
+ async send(input) {
18
+ const controller = new AbortController();
19
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
20
+ try {
21
+ const fetchOptions = {
22
+ method,
23
+ headers: baseHeaders,
24
+ // AbortController.signal type varies across Node.js/DOM environments
25
+ signal: controller.signal,
26
+ };
27
+ let url = endpointUrl;
28
+ if (method === 'POST') {
29
+ fetchOptions.body = JSON.stringify(input);
30
+ }
31
+ else if (Object.keys(input).length > 0) {
32
+ const params = new URL(endpointUrl);
33
+ for (const [key, value] of Object.entries(input)) {
34
+ params.searchParams.set(key, String(value));
35
+ }
36
+ url = params.toString();
37
+ }
38
+ const response = await fetch(url, fetchOptions);
39
+ const responseHeaders = {};
40
+ response.headers.forEach((value, key) => {
41
+ responseHeaders[key] = value;
42
+ });
43
+ let data;
44
+ const contentType = response.headers.get('content-type') ?? '';
45
+ if (contentType.includes('application/json')) {
46
+ data = await response.json();
47
+ }
48
+ else {
49
+ data = await response.text();
50
+ }
51
+ return { status: response.status, data, headers: responseHeaders };
52
+ }
53
+ finally {
54
+ clearTimeout(timeoutId);
55
+ }
56
+ },
57
+ };
12
58
  }
13
59
  //# sourceMappingURL=http-agent-adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-agent-adapter.js","sourceRoot":"","sources":["../../src/adapters/http-agent-adapter.ts"],"names":[],"mappings":"AAYA;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAA+B;IAE/B,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"http-agent-adapter.js","sourceRoot":"","sources":["../../src/adapters/http-agent-adapter.ts"],"names":[],"mappings":"AA6BA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAA8B;IAC5D,MAAM,EACJ,WAAW,EACX,MAAM,GAAG,MAAM,EACf,OAAO,EAAE,aAAa,GAAG,EAAE,EAC3B,SAAS,EACT,SAAS,GAAG,MAAM,GACnB,GAAG,MAAM,CAAC;IAEX,MAAM,WAAW,GAA2B;QAC1C,cAAc,EAAE,kBAAkB;QAClC,MAAM,EAAE,kBAAkB;QAC1B,GAAG,aAAa;KACjB,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,WAAW,CAAC,eAAe,CAAC,GAAG,UAAU,SAAS,EAAE,CAAC;IACvD,CAAC;IAED,OAAO;QACL,MAAM;QACN,KAAK,CAAC,IAAI,CAAC,KAA8B;YACvC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;YAElE,IAAI,CAAC;gBACH,MAAM,YAAY,GAAgB;oBAChC,MAAM;oBACN,OAAO,EAAE,WAAW;oBACpB,qEAAqE;oBACrE,MAAM,EAAE,UAAU,CAAC,MAAqB;iBACzC,CAAC;gBACF,IAAI,GAAG,GAAG,WAAW,CAAC;gBACtB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;oBACtB,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC5C,CAAC;qBAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;oBACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBACjD,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC9C,CAAC;oBACD,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC1B,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;gBAChD,MAAM,eAAe,GAA2B,EAAE,CAAC;gBACnD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBACtC,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC/B,CAAC,CAAC,CAAC;gBAEH,IAAI,IAAa,CAAC;gBAClB,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;gBAC/D,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBAC7C,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACN,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC/B,CAAC;gBAED,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;YACrE,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=http-agent-adapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-agent-adapter.test.d.ts","sourceRoot":"","sources":["../../src/adapters/http-agent-adapter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,164 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { createHTTPAgent } from './http-agent-adapter.js';
3
+ /** Create a minimal mock Response compatible with the adapter's usage. */
4
+ function mockFetchResponse(body, options) {
5
+ const status = options?.status ?? 200;
6
+ const contentType = options?.contentType ?? 'application/json';
7
+ const headers = new Headers({ 'content-type': contentType });
8
+ return vi.fn().mockResolvedValue({
9
+ ok: status >= 200 && status < 300,
10
+ status,
11
+ headers,
12
+ json: () => Promise.resolve(body),
13
+ text: () => Promise.resolve(typeof body === 'string' ? body : JSON.stringify(body)),
14
+ });
15
+ }
16
+ describe('createHTTPAgent', () => {
17
+ beforeEach(() => {
18
+ vi.useFakeTimers();
19
+ });
20
+ afterEach(() => {
21
+ vi.restoreAllMocks();
22
+ vi.useRealTimers();
23
+ });
24
+ it('returns synchronously with config and send method', () => {
25
+ const mockFetch = mockFetchResponse({});
26
+ vi.stubGlobal('fetch', mockFetch);
27
+ const config = { endpointUrl: 'https://api.example.com/agent' };
28
+ const agent = createHTTPAgent(config);
29
+ expect(agent.config).toBe(config);
30
+ expect(typeof agent.send).toBe('function');
31
+ expect(mockFetch).not.toHaveBeenCalled();
32
+ });
33
+ it('send() with POST sends JSON body and returns parsed JSON response', async () => {
34
+ const responseBody = { result: 'hello' };
35
+ const mockFetch = mockFetchResponse(responseBody);
36
+ vi.stubGlobal('fetch', mockFetch);
37
+ const agent = createHTTPAgent({
38
+ endpointUrl: 'https://api.example.com/agent',
39
+ method: 'POST',
40
+ });
41
+ const result = await agent.send({ prompt: 'hi' });
42
+ expect(result.status).toBe(200);
43
+ expect(result.data).toEqual(responseBody);
44
+ expect(mockFetch).toHaveBeenCalledOnce();
45
+ const [url, options] = mockFetch.mock.calls[0];
46
+ expect(url).toBe('https://api.example.com/agent');
47
+ expect(options.method).toBe('POST');
48
+ expect(options.body).toBe(JSON.stringify({ prompt: 'hi' }));
49
+ expect(options.headers['Content-Type']).toBe('application/json');
50
+ });
51
+ it('send() with GET encodes input as query parameters (no body)', async () => {
52
+ const mockFetch = mockFetchResponse({ ok: true });
53
+ vi.stubGlobal('fetch', mockFetch);
54
+ const agent = createHTTPAgent({
55
+ endpointUrl: 'https://api.example.com/search',
56
+ method: 'GET',
57
+ });
58
+ await agent.send({ q: 'test', limit: 10 });
59
+ expect(mockFetch).toHaveBeenCalledOnce();
60
+ const [url, options] = mockFetch.mock.calls[0];
61
+ expect(url).toContain('q=test');
62
+ expect(url).toContain('limit=10');
63
+ expect(options.method).toBe('GET');
64
+ expect(options.body).toBeUndefined();
65
+ });
66
+ it('send() with GET and empty input adds no query params', async () => {
67
+ const mockFetch = mockFetchResponse({ ok: true });
68
+ vi.stubGlobal('fetch', mockFetch);
69
+ const agent = createHTTPAgent({
70
+ endpointUrl: 'https://api.example.com/search',
71
+ method: 'GET',
72
+ });
73
+ await agent.send({});
74
+ const [url] = mockFetch.mock.calls[0];
75
+ expect(url).toBe('https://api.example.com/search');
76
+ });
77
+ it('includes Bearer auth token in headers when provided', async () => {
78
+ const mockFetch = mockFetchResponse({});
79
+ vi.stubGlobal('fetch', mockFetch);
80
+ const agent = createHTTPAgent({
81
+ endpointUrl: 'https://api.example.com/agent',
82
+ authToken: 'my-secret-token',
83
+ });
84
+ await agent.send({ data: 'value' });
85
+ const [, options] = mockFetch.mock.calls[0];
86
+ const headers = options.headers;
87
+ expect(headers['Authorization']).toBe('Bearer my-secret-token');
88
+ });
89
+ it('merges custom headers with defaults', async () => {
90
+ const mockFetch = mockFetchResponse({});
91
+ vi.stubGlobal('fetch', mockFetch);
92
+ const agent = createHTTPAgent({
93
+ endpointUrl: 'https://api.example.com/agent',
94
+ headers: { 'X-Custom': 'custom-value', Accept: 'text/plain' },
95
+ });
96
+ await agent.send({});
97
+ const [, options] = mockFetch.mock.calls[0];
98
+ const headers = options.headers;
99
+ expect(headers['Content-Type']).toBe('application/json');
100
+ expect(headers['X-Custom']).toBe('custom-value');
101
+ // Custom Accept overrides default
102
+ expect(headers['Accept']).toBe('text/plain');
103
+ });
104
+ it('handles text response (non-JSON content-type)', async () => {
105
+ const mockFetch = mockFetchResponse('plain text response', {
106
+ contentType: 'text/plain',
107
+ });
108
+ vi.stubGlobal('fetch', mockFetch);
109
+ const agent = createHTTPAgent({ endpointUrl: 'https://api.example.com/agent' });
110
+ const result = await agent.send({});
111
+ expect(result.data).toBe('plain text response');
112
+ });
113
+ it('returns non-200 status codes in response (not thrown)', async () => {
114
+ const mockFetch = mockFetchResponse({ error: 'not found' }, { status: 404 });
115
+ vi.stubGlobal('fetch', mockFetch);
116
+ const agent = createHTTPAgent({ endpointUrl: 'https://api.example.com/agent' });
117
+ const result = await agent.send({});
118
+ expect(result.status).toBe(404);
119
+ expect(result.data).toEqual({ error: 'not found' });
120
+ });
121
+ it('collects response headers into a plain object', async () => {
122
+ const responseHeaders = new Headers({
123
+ 'content-type': 'application/json',
124
+ 'x-request-id': 'abc-123',
125
+ });
126
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
127
+ ok: true,
128
+ status: 200,
129
+ headers: responseHeaders,
130
+ json: () => Promise.resolve({}),
131
+ }));
132
+ const agent = createHTTPAgent({ endpointUrl: 'https://api.example.com/agent' });
133
+ const result = await agent.send({});
134
+ expect(result.headers['content-type']).toBe('application/json');
135
+ expect(result.headers['x-request-id']).toBe('abc-123');
136
+ });
137
+ it('aborts request after timeout via AbortController', async () => {
138
+ const abortError = new DOMException('The operation was aborted', 'AbortError');
139
+ const mockFetch = vi.fn().mockImplementation((_url, options) => new Promise((_resolve, reject) => {
140
+ options.signal.addEventListener('abort', () => {
141
+ reject(abortError);
142
+ });
143
+ }));
144
+ vi.stubGlobal('fetch', mockFetch);
145
+ const agent = createHTTPAgent({
146
+ endpointUrl: 'https://api.example.com/agent',
147
+ timeoutMs: 5000,
148
+ });
149
+ const sendPromise = agent.send({ data: 'test' });
150
+ // Advance past the timeout
151
+ vi.advanceTimersByTime(5001);
152
+ await expect(sendPromise).rejects.toThrow('aborted');
153
+ });
154
+ it('defaults to POST method when not specified', async () => {
155
+ const mockFetch = mockFetchResponse({});
156
+ vi.stubGlobal('fetch', mockFetch);
157
+ const agent = createHTTPAgent({ endpointUrl: 'https://api.example.com/agent' });
158
+ await agent.send({ msg: 'hello' });
159
+ const [, options] = mockFetch.mock.calls[0];
160
+ expect(options.method).toBe('POST');
161
+ expect(options.body).toBe(JSON.stringify({ msg: 'hello' }));
162
+ });
163
+ });
164
+ //# sourceMappingURL=http-agent-adapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-agent-adapter.test.js","sourceRoot":"","sources":["../../src/adapters/http-agent-adapter.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- export { discoverMCPTools } from "./mcp-adapter";
2
- export type { MCPAdapterConfig } from "./mcp-adapter";
3
- export { createA2AAgent } from "./a2a-adapter";
4
- export type { A2AAdapterConfig } from "./a2a-adapter";
5
- export { createOpenClawModel } from "./openclaw-adapter";
6
- export type { OpenClawAdapterConfig } from "./openclaw-adapter";
7
- export { createHTTPAgent } from "./http-agent-adapter";
8
- export type { HTTPAgentAdapterConfig } from "./http-agent-adapter";
1
+ export { createHTTPAgent } from './http-agent-adapter.js';
2
+ export type { HTTPAgentAdapterConfig, HTTPAgentResponse, HTTPAgentEndpoint, } from './http-agent-adapter.js';
3
+ export { createA2AAgent, discoverA2AAgent } from './a2a-adapter.js';
4
+ export type { A2AAdapterConfig, A2ATaskInput, A2ATaskResult, A2AAgentEndpoint, } from './a2a-adapter.js';
5
+ export { discoverMCPTools } from './mcp-adapter.js';
6
+ export type { MCPAdapterConfig, MCPClientLike, MCPToolInfo, MCPToolCallResult, } from './mcp-adapter.js';
7
+ export { createOpenClawModel } from './openclaw-adapter.js';
8
+ export type { OpenClawAdapterConfig, OpenClawModel } from './openclaw-adapter.js';
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,5 +1,5 @@
1
- export { discoverMCPTools } from "./mcp-adapter";
2
- export { createA2AAgent } from "./a2a-adapter";
3
- export { createOpenClawModel } from "./openclaw-adapter";
4
- export { createHTTPAgent } from "./http-agent-adapter";
1
+ export { createHTTPAgent } from './http-agent-adapter.js';
2
+ export { createA2AAgent, discoverA2AAgent } from './a2a-adapter.js';
3
+ export { discoverMCPTools } from './mcp-adapter.js';
4
+ export { createOpenClawModel } from './openclaw-adapter.js';
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAOjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAOjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,19 +1,39 @@
1
- import type { ToolDefinition } from "@sprinterai/core";
1
+ import type { ToolDefinition } from '@sprinterai/core';
2
+ /** Minimal interface for an MCP client -- inject your own implementation. */
3
+ export interface MCPClientLike {
4
+ listTools(): Promise<MCPToolInfo[]>;
5
+ callTool(name: string, args: Record<string, unknown>): Promise<MCPToolCallResult>;
6
+ }
7
+ /** MCP tool metadata returned from listTools(). */
8
+ export interface MCPToolInfo {
9
+ name: string;
10
+ description?: string;
11
+ inputSchema?: Record<string, unknown>;
12
+ }
13
+ /** Result from an MCP tool call. */
14
+ export interface MCPToolCallResult {
15
+ content: Array<{
16
+ type: string;
17
+ text?: string;
18
+ data?: unknown;
19
+ }>;
20
+ isError?: boolean;
21
+ }
2
22
  /** Configuration for an MCP server connection. */
3
23
  export interface MCPAdapterConfig {
4
- /** MCP server URL. */
24
+ /** MCP server URL (for documentation/logging; the client handles the actual connection). */
5
25
  serverUrl: string;
6
26
  /** Authentication token if required. */
7
27
  authToken?: string;
28
+ /** Pre-configured MCP client instance. */
29
+ client: MCPClientLike;
8
30
  }
9
31
  /**
10
- * Adapter to convert MCP server tools into platform ToolDefinitions.
11
- *
12
- * MCP (Model Context Protocol) servers expose tools via a standard protocol.
13
- * This adapter discovers and wraps them as platform tools.
32
+ * Discover and convert MCP server tools into platform ToolDefinitions.
14
33
  *
15
- * Note: Requires an MCP client library at runtime.
16
- * Throws if the adapter is not configured with a client.
34
+ * The caller is responsible for creating and configuring the MCP client.
35
+ * This adapter converts MCP tools into the platform's ToolDefinition format
36
+ * and proxies tool execution back through the MCP client.
17
37
  */
18
- export declare function discoverMCPTools(_config: MCPAdapterConfig): Promise<ToolDefinition[]>;
38
+ export declare function discoverMCPTools(config: MCPAdapterConfig): Promise<ToolDefinition[]>;
19
39
  //# sourceMappingURL=mcp-adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/mcp-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,cAAc,EAAE,CAAC,CAI3B"}
1
+ {"version":3,"file":"mcp-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/mcp-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,6EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC5B,SAAS,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACnF;AAED,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,oCAAoC;AACpC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,4FAA4F;IAC5F,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA2B1F"}
@@ -1,13 +1,48 @@
1
+ import { z } from 'zod';
1
2
  /**
2
- * Adapter to convert MCP server tools into platform ToolDefinitions.
3
+ * Discover and convert MCP server tools into platform ToolDefinitions.
3
4
  *
4
- * MCP (Model Context Protocol) servers expose tools via a standard protocol.
5
- * This adapter discovers and wraps them as platform tools.
6
- *
7
- * Note: Requires an MCP client library at runtime.
8
- * Throws if the adapter is not configured with a client.
5
+ * The caller is responsible for creating and configuring the MCP client.
6
+ * This adapter converts MCP tools into the platform's ToolDefinition format
7
+ * and proxies tool execution back through the MCP client.
8
+ */
9
+ export async function discoverMCPTools(config) {
10
+ const { client } = config;
11
+ const mcpTools = await client.listTools();
12
+ return mcpTools.map((tool) => ({
13
+ slug: `mcp-${tool.name}`,
14
+ name: tool.name,
15
+ description: tool.description ?? `MCP tool: ${tool.name}`,
16
+ category: 'mcp',
17
+ icon: 'plug',
18
+ inputSchema: jsonSchemaToPassthroughZod(tool.inputSchema),
19
+ async execute(input) {
20
+ const result = await client.callTool(tool.name, (input ?? {}));
21
+ if (result.isError) {
22
+ const errorText = result.content
23
+ .map((c) => c.text ?? '')
24
+ .filter(Boolean)
25
+ .join('\n');
26
+ throw new Error(errorText || `MCP tool '${tool.name}' failed`);
27
+ }
28
+ // Return text content if single text result, otherwise full content array
29
+ if (result.content.length === 1 && result.content[0].type === 'text') {
30
+ return result.content[0].text;
31
+ }
32
+ return result.content;
33
+ },
34
+ }));
35
+ }
36
+ /**
37
+ * Convert a JSON Schema object to a permissive Zod schema.
38
+ * The MCP server performs its own validation, so we use a passthrough schema
39
+ * that accepts any object shape.
9
40
  */
10
- export async function discoverMCPTools(_config) {
11
- throw new Error("MCP adapter not configured. Install an MCP client library and provide it to the adapter.");
41
+ function jsonSchemaToPassthroughZod(schema) {
42
+ if (!schema || schema.type !== 'object') {
43
+ return z.record(z.unknown());
44
+ }
45
+ // Use z.object({}).passthrough() for object schemas -- accepts any keys
46
+ return z.object({}).passthrough();
12
47
  }
13
48
  //# sourceMappingURL=mcp-adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-adapter.js","sourceRoot":"","sources":["../../src/adapters/mcp-adapter.ts"],"names":[],"mappings":"AAUA;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAyB;IAEzB,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"mcp-adapter.js","sourceRoot":"","sources":["../../src/adapters/mcp-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA+BxB;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAwB;IAC7D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC1B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;IAE1C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7B,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,aAAa,IAAI,CAAC,IAAI,EAAE;QACzD,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,0BAA0B,CAAC,IAAI,CAAC,WAAW,CAAC;QACzD,KAAK,CAAC,OAAO,CAAC,KAAc;YAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC,CAAC;YAC1F,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO;qBAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;qBACxB,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,aAAa,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC;YACjE,CAAC;YACD,0EAA0E;YAC1E,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACrE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAChC,CAAC;YACD,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;KACF,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B,CAAC,MAAgC;IAClE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,wEAAwE;IACxE,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mcp-adapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-adapter.test.d.ts","sourceRoot":"","sources":["../../src/adapters/mcp-adapter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,118 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { discoverMCPTools } from './mcp-adapter.js';
3
+ function createMockClient(tools = [], callResult) {
4
+ return {
5
+ listTools: vi.fn().mockResolvedValue(tools),
6
+ callTool: vi.fn().mockResolvedValue(callResult ?? {
7
+ content: [{ type: 'text', text: 'ok' }],
8
+ isError: false,
9
+ }),
10
+ };
11
+ }
12
+ describe('discoverMCPTools', () => {
13
+ it('returns empty array when server has no tools', async () => {
14
+ const client = createMockClient([]);
15
+ const tools = await discoverMCPTools({ serverUrl: 'http://localhost', client });
16
+ expect(tools).toEqual([]);
17
+ });
18
+ it('converts MCP tools to ToolDefinitions', async () => {
19
+ const mcpTools = [
20
+ { name: 'search', description: 'Search the web', inputSchema: { type: 'object' } },
21
+ { name: 'calc' },
22
+ ];
23
+ const client = createMockClient(mcpTools);
24
+ const tools = await discoverMCPTools({ serverUrl: 'http://localhost', client });
25
+ expect(tools).toHaveLength(2);
26
+ expect(tools[0].slug).toBe('mcp-search');
27
+ expect(tools[0].name).toBe('search');
28
+ expect(tools[0].description).toBe('Search the web');
29
+ expect(tools[0].category).toBe('mcp');
30
+ expect(tools[0].icon).toBe('plug');
31
+ expect(tools[1].slug).toBe('mcp-calc');
32
+ expect(tools[1].name).toBe('calc');
33
+ expect(tools[1].description).toBe('MCP tool: calc');
34
+ });
35
+ it('creates a passthrough zod schema for object inputSchema', async () => {
36
+ const mcpTools = [
37
+ { name: 'test', inputSchema: { type: 'object', properties: { q: { type: 'string' } } } },
38
+ ];
39
+ const client = createMockClient(mcpTools);
40
+ const tools = await discoverMCPTools({ serverUrl: 'http://localhost', client });
41
+ const schema = tools[0].inputSchema;
42
+ // Passthrough schema should accept any object
43
+ const result = schema.safeParse({ q: 'hello', extra: 123 });
44
+ expect(result.success).toBe(true);
45
+ });
46
+ it('creates a record schema for non-object inputSchema', async () => {
47
+ const mcpTools = [{ name: 'test', inputSchema: { type: 'string' } }];
48
+ const client = createMockClient(mcpTools);
49
+ const tools = await discoverMCPTools({ serverUrl: 'http://localhost', client });
50
+ const schema = tools[0].inputSchema;
51
+ const result = schema.safeParse({ anything: 'works' });
52
+ expect(result.success).toBe(true);
53
+ });
54
+ it('creates a record schema when inputSchema is undefined', async () => {
55
+ const mcpTools = [{ name: 'test' }];
56
+ const client = createMockClient(mcpTools);
57
+ const tools = await discoverMCPTools({ serverUrl: 'http://localhost', client });
58
+ const schema = tools[0].inputSchema;
59
+ const result = schema.safeParse({ key: 'value' });
60
+ expect(result.success).toBe(true);
61
+ });
62
+ it('execute proxies to MCP client and returns single text content', async () => {
63
+ const mcpTools = [{ name: 'greet' }];
64
+ const client = createMockClient(mcpTools, {
65
+ content: [{ type: 'text', text: 'Hello world' }],
66
+ isError: false,
67
+ });
68
+ const tools = await discoverMCPTools({ serverUrl: 'http://localhost', client });
69
+ const result = await tools[0].execute({ name: 'Alice' });
70
+ expect(result).toBe('Hello world');
71
+ expect(client.callTool).toHaveBeenCalledWith('greet', { name: 'Alice' });
72
+ });
73
+ it('execute returns full content array for non-text or multiple results', async () => {
74
+ const multiContent = [
75
+ { type: 'text', text: 'part1' },
76
+ { type: 'image', data: 'base64data' },
77
+ ];
78
+ const mcpTools = [{ name: 'multi' }];
79
+ const client = createMockClient(mcpTools, {
80
+ content: multiContent,
81
+ isError: false,
82
+ });
83
+ const tools = await discoverMCPTools({ serverUrl: 'http://localhost', client });
84
+ const result = await tools[0].execute({});
85
+ expect(result).toEqual(multiContent);
86
+ });
87
+ it('execute throws on error result with error text', async () => {
88
+ const mcpTools = [{ name: 'fail' }];
89
+ const client = createMockClient(mcpTools, {
90
+ content: [{ type: 'text', text: 'Something went wrong' }],
91
+ isError: true,
92
+ });
93
+ const tools = await discoverMCPTools({ serverUrl: 'http://localhost', client });
94
+ await expect(tools[0].execute({})).rejects.toThrow('Something went wrong');
95
+ });
96
+ it('execute throws generic error when error result has no text', async () => {
97
+ const mcpTools = [{ name: 'fail' }];
98
+ const client = createMockClient(mcpTools, {
99
+ content: [{ type: 'binary' }],
100
+ isError: true,
101
+ });
102
+ const tools = await discoverMCPTools({ serverUrl: 'http://localhost', client });
103
+ await expect(tools[0].execute({})).rejects.toThrow("MCP tool 'fail' failed");
104
+ });
105
+ it('execute passes empty object when input is null/undefined', async () => {
106
+ const mcpTools = [{ name: 'noargs' }];
107
+ const client = createMockClient(mcpTools, {
108
+ content: [{ type: 'text', text: 'done' }],
109
+ isError: false,
110
+ });
111
+ const tools = await discoverMCPTools({ serverUrl: 'http://localhost', client });
112
+ await tools[0].execute(null);
113
+ expect(client.callTool).toHaveBeenCalledWith('noargs', {});
114
+ await tools[0].execute(undefined);
115
+ expect(client.callTool).toHaveBeenCalledWith('noargs', {});
116
+ });
117
+ });
118
+ //# sourceMappingURL=mcp-adapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-adapter.test.js","sourceRoot":"","sources":["../../src/adapters/mcp-adapter.test.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,46 @@
1
+ import type { LanguageModel } from 'ai';
1
2
  /** Configuration for an OpenClaw connection. */
2
3
  export interface OpenClawAdapterConfig {
3
4
  /** OpenClaw base URL. */
4
5
  baseUrl: string;
5
6
  /** API key for authentication. */
6
7
  apiKey: string;
7
- /** Model identifier on the OpenClaw endpoint. */
8
+ /** Model identifier on the OpenClaw endpoint (default: 'default'). */
8
9
  modelId?: string;
10
+ /**
11
+ * Model factory function. Creates a LanguageModel from the endpoint config.
12
+ *
13
+ * If not provided, the adapter attempts to dynamically import @ai-sdk/openai-compatible.
14
+ *
15
+ * Example using @ai-sdk/openai-compatible:
16
+ * ```
17
+ * import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
18
+ * const provider = createOpenAICompatible({ baseURL: 'https://...', name: 'openclaw' });
19
+ * createOpenClawModel({ baseUrl, apiKey, createModel: () => provider.languageModel('model-id') });
20
+ * ```
21
+ */
22
+ createModel?: (config: {
23
+ baseUrl: string;
24
+ apiKey: string;
25
+ modelId: string;
26
+ }) => LanguageModel;
27
+ }
28
+ /** Result from creating an OpenClaw model. */
29
+ export interface OpenClawModel {
30
+ /** The AI SDK LanguageModel instance. */
31
+ model: LanguageModel;
32
+ /** Provider name. */
33
+ provider: string;
34
+ /** Base URL of the endpoint. */
35
+ baseUrl: string;
36
+ /** Model ID used. */
37
+ modelId: string;
9
38
  }
10
39
  /**
11
- * Adapter for OpenClaw-compatible endpoints.
12
- *
13
- * OpenClaw provides an OpenAI-compatible API for accessing various models.
14
- * This adapter wraps an OpenClaw endpoint as a LanguageModelV1 provider.
40
+ * Create a LanguageModel from an OpenClaw-compatible endpoint.
15
41
  *
16
- * Note: Use @ai-sdk/openai-compatible to create the model provider.
17
- * Throws if not configured.
42
+ * Uses the provided createModel factory if available. Otherwise attempts
43
+ * to dynamically import @ai-sdk/openai-compatible.
18
44
  */
19
- export declare function createOpenClawModel(_config: OpenClawAdapterConfig): Promise<never>;
45
+ export declare function createOpenClawModel(config: OpenClawAdapterConfig): Promise<OpenClawModel>;
20
46
  //# sourceMappingURL=openclaw-adapter.d.ts.map