@crewx/sdk 0.8.0-rc.72 → 0.8.0-rc.74

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 (548) hide show
  1. package/README.md +380 -818
  2. package/dist/adapter/context-builder.d.ts +35 -0
  3. package/dist/adapter/context-builder.js +87 -0
  4. package/dist/adapter/index.d.ts +5 -0
  5. package/dist/{core/remote → adapter}/index.js +3 -2
  6. package/dist/adapter/plugin-helper.d.ts +19 -0
  7. package/dist/adapter/plugin-helper.js +45 -0
  8. package/dist/adapter/scoped-store.d.ts +12 -0
  9. package/dist/adapter/scoped-store.js +43 -0
  10. package/dist/adapter/types.d.ts +264 -0
  11. package/dist/adapter/types.js +23 -0
  12. package/dist/agent/resolver.d.ts +18 -0
  13. package/dist/agent/resolver.js +46 -0
  14. package/dist/boxing/box-storage.interface.d.ts +12 -0
  15. package/dist/boxing/box-storage.interface.js +3 -0
  16. package/dist/boxing/box.service.d.ts +4 -0
  17. package/dist/boxing/box.service.js +5 -1
  18. package/dist/boxing/box.types.d.ts +4 -0
  19. package/dist/boxing/box.types.js +3 -0
  20. package/dist/boxing/context-builder.d.ts +6 -7
  21. package/dist/boxing/context-builder.js +3 -0
  22. package/dist/client/CrewxClient.d.ts +65 -0
  23. package/dist/client/CrewxClient.js +86 -0
  24. package/dist/client/index.d.ts +3 -0
  25. package/dist/client/index.js +6 -0
  26. package/dist/config/loader.browser.d.ts +14 -0
  27. package/dist/config/loader.browser.js +59 -0
  28. package/dist/config/loader.d.ts +19 -0
  29. package/dist/config/loader.js +95 -0
  30. package/dist/conversation/index.d.ts +5 -3
  31. package/dist/conversation/index.js +8 -3
  32. package/dist/conversation/sqlite-provider.d.ts +21 -0
  33. package/dist/conversation/sqlite-provider.js +178 -0
  34. package/dist/conversation/to-task-reader.d.ts +14 -0
  35. package/dist/conversation/to-task-reader.js +28 -0
  36. package/dist/conversation/to-template-messages.d.ts +15 -0
  37. package/dist/conversation/to-template-messages.js +34 -0
  38. package/dist/conversation/types.d.ts +101 -0
  39. package/dist/conversation/types.js +10 -0
  40. package/dist/esm/agent/resolver.js +41 -0
  41. package/dist/esm/boxing/box-storage.interface.js +5 -0
  42. package/dist/esm/boxing/box.service.js +69 -0
  43. package/dist/esm/boxing/box.types.js +5 -0
  44. package/dist/esm/boxing/context-builder.js +76 -0
  45. package/dist/esm/client/CrewxClient.js +82 -0
  46. package/dist/esm/client/index.js +2 -0
  47. package/dist/esm/config/loader.browser.js +54 -0
  48. package/dist/esm/config/loader.js +77 -0
  49. package/dist/esm/events/TypedEventEmitter.js +61 -0
  50. package/dist/esm/events/types.js +8 -0
  51. package/dist/esm/facade/Crewx.browser.js +310 -0
  52. package/dist/esm/facade/Crewx.js +941 -0
  53. package/dist/esm/hooks/define.js +10 -0
  54. package/dist/esm/hooks/dispatch.js +76 -0
  55. package/dist/esm/hooks/index.js +6 -0
  56. package/dist/esm/hooks/observer.js +56 -0
  57. package/dist/esm/hooks/plugin.js +12 -0
  58. package/dist/esm/hooks/types.js +9 -0
  59. package/dist/esm/index.browser.js +15 -0
  60. package/dist/esm/index.js +60 -0
  61. package/dist/esm/layout/loader.js +268 -0
  62. package/dist/esm/layout/props-validator.js +297 -0
  63. package/dist/esm/layout/renderer.js +180 -0
  64. package/dist/esm/layout/types.js +31 -0
  65. package/dist/esm/parallel/agent-runtime.js +21 -0
  66. package/dist/esm/parallel/helpers.js +214 -0
  67. package/dist/esm/parallel/index.js +5 -0
  68. package/dist/esm/parallel/parallel-runner.js +221 -0
  69. package/dist/esm/parallel/types.js +5 -0
  70. package/dist/esm/parsers/agent-call.util.js +15 -0
  71. package/dist/esm/parsers/claude.parser.js +64 -0
  72. package/dist/esm/parsers/codex.parser.js +97 -0
  73. package/dist/esm/parsers/copilot.parser.js +63 -0
  74. package/dist/esm/parsers/gemini.parser.js +43 -0
  75. package/dist/esm/parsers/opencode.parser.js +73 -0
  76. package/dist/esm/parsers/router.js +53 -0
  77. package/dist/esm/platform/BrowserFsAdapter.js +80 -0
  78. package/dist/esm/platform/IFsAdapter.js +2 -0
  79. package/dist/esm/platform/NodeFsAdapter.js +34 -0
  80. package/dist/esm/plugin/plugin-provider.js +202 -0
  81. package/dist/esm/plugin/types.js +8 -0
  82. package/dist/esm/plugin.js +25 -0
  83. package/dist/esm/provider/bridge.browser.js +43 -0
  84. package/dist/esm/provider/bridge.js +373 -0
  85. package/dist/esm/provider/parse-usage.js +80 -0
  86. package/dist/esm/provider/register-api.js +21 -0
  87. package/dist/esm/provider/vercel-runtime.js +310 -0
  88. package/dist/esm/remote/index.js +10 -0
  89. package/dist/esm/remote/remote-agent-manager.js +194 -0
  90. package/dist/esm/remote/remote-provider.js +98 -0
  91. package/dist/esm/remote/remote-transport.js +79 -0
  92. package/dist/esm/remote/types.js +8 -0
  93. package/dist/esm/server/auth.js +31 -0
  94. package/dist/esm/server/handler.js +72 -0
  95. package/dist/esm/server/index.js +5 -0
  96. package/dist/esm/server/tool-adapter.js +92 -0
  97. package/dist/esm/template/engine.js +100 -0
  98. package/dist/esm/template/helpers/exec.browser.js +31 -0
  99. package/dist/esm/template/helpers/exec.js +220 -0
  100. package/dist/esm/template/helpers/fenced_code.js +17 -0
  101. package/dist/esm/template/helpers/include.js +20 -0
  102. package/dist/esm/template/helpers/p1p2.js +83 -0
  103. package/dist/esm/template/loader/DocumentLoader.js +124 -0
  104. package/dist/esm/template/types.js +5 -0
  105. package/dist/esm/tools/delegate.js +57 -0
  106. package/dist/esm/tools/index.js +5 -0
  107. package/dist/esm/tools/node/builtin.js +541 -0
  108. package/dist/esm/tools/node/index.js +54 -0
  109. package/dist/esm/types/index.js +27 -0
  110. package/dist/esm/types/task-log.types.js +5 -0
  111. package/dist/esm/utils/env-defaults.js +23 -0
  112. package/dist/esm/utils/glob-match.js +38 -0
  113. package/dist/esm/utils/id.js +46 -0
  114. package/dist/esm/utils/workspace.js +21 -0
  115. package/dist/events/TypedEventEmitter.d.ts +31 -0
  116. package/dist/events/TypedEventEmitter.js +65 -0
  117. package/dist/events/types.d.ts +139 -0
  118. package/dist/events/types.js +9 -0
  119. package/dist/facade/Crewx.browser.d.ts +73 -0
  120. package/dist/facade/Crewx.browser.js +314 -0
  121. package/dist/facade/Crewx.d.ts +267 -0
  122. package/dist/facade/Crewx.js +1299 -0
  123. package/dist/hooks/define.d.ts +10 -0
  124. package/dist/hooks/define.js +13 -0
  125. package/dist/hooks/dispatch.d.ts +61 -0
  126. package/dist/hooks/dispatch.js +147 -0
  127. package/dist/hooks/index.d.ts +13 -0
  128. package/dist/hooks/index.js +24 -0
  129. package/dist/hooks/observer.d.ts +20 -0
  130. package/dist/hooks/observer.js +60 -0
  131. package/dist/hooks/plugin.d.ts +19 -0
  132. package/dist/hooks/plugin.js +17 -0
  133. package/dist/hooks/tool-normalize.d.ts +29 -0
  134. package/dist/hooks/tool-normalize.js +110 -0
  135. package/dist/hooks/types.d.ts +79 -0
  136. package/dist/hooks/types.js +12 -0
  137. package/dist/hooks/yaml-plugin.d.ts +29 -0
  138. package/dist/hooks/yaml-plugin.js +356 -0
  139. package/dist/index.browser.d.ts +15 -0
  140. package/dist/index.browser.js +25 -0
  141. package/dist/index.d.ts +70 -58
  142. package/dist/index.js +144 -133
  143. package/dist/{services/layout-loader.service.d.ts → layout/loader.d.ts} +24 -4
  144. package/dist/{services/layout-loader.service.js → layout/loader.js} +103 -73
  145. package/dist/{services/props-validator.service.d.ts → layout/props-validator.d.ts} +7 -1
  146. package/dist/{services/props-validator.service.js → layout/props-validator.js} +28 -59
  147. package/dist/{services/layout-renderer.service.d.ts → layout/renderer.d.ts} +28 -14
  148. package/dist/layout/renderer.js +193 -0
  149. package/dist/{types/layout.types.d.ts → layout/types.d.ts} +47 -1
  150. package/dist/{types/layout.types.js → layout/types.js} +15 -1
  151. package/dist/parallel/agent-runtime.d.ts +31 -0
  152. package/dist/parallel/agent-runtime.js +25 -0
  153. package/dist/{core/parallel → parallel}/helpers.d.ts +2 -1
  154. package/dist/{core/parallel → parallel}/helpers.js +55 -88
  155. package/dist/parallel/index.d.ts +8 -0
  156. package/dist/{core/parallel → parallel}/index.js +5 -3
  157. package/dist/{core/parallel → parallel}/parallel-runner.d.ts +8 -1
  158. package/dist/{core/parallel → parallel}/parallel-runner.js +53 -57
  159. package/dist/parallel/types.d.ts +65 -0
  160. package/dist/parallel/types.js +6 -0
  161. package/dist/parsers/agent-call.util.d.ts +3 -0
  162. package/dist/parsers/agent-call.util.js +2 -0
  163. package/dist/parsers/api.parser.d.ts +10 -0
  164. package/dist/parsers/api.parser.js +26 -0
  165. package/dist/parsers/claude.parser.d.ts +8 -0
  166. package/dist/parsers/claude.parser.js +22 -1
  167. package/dist/parsers/codex.parser.d.ts +8 -0
  168. package/dist/parsers/codex.parser.js +11 -0
  169. package/dist/parsers/copilot.parser.d.ts +9 -0
  170. package/dist/parsers/copilot.parser.js +8 -0
  171. package/dist/parsers/gemini.parser.d.ts +10 -0
  172. package/dist/parsers/gemini.parser.js +10 -0
  173. package/dist/parsers/opencode.parser.d.ts +12 -0
  174. package/dist/parsers/opencode.parser.js +76 -0
  175. package/dist/parsers/router.d.ts +7 -0
  176. package/dist/parsers/router.js +56 -0
  177. package/dist/platform/BrowserFsAdapter.d.ts +37 -0
  178. package/dist/platform/BrowserFsAdapter.js +84 -0
  179. package/dist/platform/IFsAdapter.d.ts +29 -0
  180. package/dist/{core/remote/types.js → platform/IFsAdapter.js} +1 -1
  181. package/dist/platform/NodeFsAdapter.d.ts +16 -0
  182. package/dist/platform/NodeFsAdapter.js +38 -0
  183. package/dist/plugin/plugin-provider.d.ts +33 -0
  184. package/dist/plugin/plugin-provider.js +207 -0
  185. package/dist/plugin/types.d.ts +53 -0
  186. package/dist/plugin/types.js +9 -0
  187. package/dist/plugin.d.ts +33 -0
  188. package/dist/plugin.js +29 -0
  189. package/dist/plugins/conversation.d.ts +18 -0
  190. package/dist/plugins/conversation.js +59 -0
  191. package/dist/plugins/file-logger.d.ts +29 -0
  192. package/dist/plugins/file-logger.js +87 -0
  193. package/dist/plugins/index.d.ts +16 -0
  194. package/dist/plugins/index.js +19 -0
  195. package/dist/plugins/sqlite-tracing.d.ts +29 -0
  196. package/dist/plugins/sqlite-tracing.js +112 -0
  197. package/dist/provider/bridge.browser.d.ts +49 -0
  198. package/dist/provider/bridge.browser.js +49 -0
  199. package/dist/provider/bridge.d.ts +106 -0
  200. package/dist/provider/bridge.js +380 -0
  201. package/dist/provider/mastra-runtime.d.ts +45 -0
  202. package/dist/provider/mastra-runtime.js +208 -0
  203. package/dist/provider/parse-usage.d.ts +20 -0
  204. package/dist/provider/parse-usage.js +83 -0
  205. package/dist/provider/register-api.d.ts +14 -0
  206. package/dist/provider/register-api.js +24 -0
  207. package/dist/provider/vercel-runtime.d.ts +54 -0
  208. package/dist/provider/vercel-runtime.js +347 -0
  209. package/dist/remote/index.d.ts +13 -0
  210. package/dist/remote/index.js +32 -0
  211. package/dist/remote/remote-agent-manager.d.ts +54 -0
  212. package/dist/{core/remote → remote}/remote-agent-manager.js +100 -97
  213. package/dist/remote/remote-provider.d.ts +47 -0
  214. package/dist/remote/remote-provider.js +141 -0
  215. package/dist/remote/remote-transport.d.ts +32 -0
  216. package/dist/remote/remote-transport.js +83 -0
  217. package/dist/remote/types.d.ts +147 -0
  218. package/dist/remote/types.js +9 -0
  219. package/dist/server/auth.d.ts +21 -0
  220. package/dist/server/auth.js +35 -0
  221. package/dist/server/handler.d.ts +24 -0
  222. package/dist/server/handler.js +75 -0
  223. package/dist/server/index.d.ts +7 -0
  224. package/dist/server/index.js +9 -0
  225. package/dist/server/tool-adapter.d.ts +19 -0
  226. package/dist/server/tool-adapter.js +95 -0
  227. package/dist/template/engine.d.ts +28 -0
  228. package/dist/template/engine.js +137 -0
  229. package/dist/template/helpers/exec.browser.d.ts +22 -0
  230. package/dist/template/helpers/exec.browser.js +41 -0
  231. package/dist/template/helpers/exec.d.ts +60 -0
  232. package/dist/template/helpers/exec.js +230 -0
  233. package/dist/template/helpers/fenced_code.d.ts +22 -0
  234. package/dist/template/helpers/fenced_code.js +20 -0
  235. package/dist/template/helpers/format-conversation.d.ts +30 -0
  236. package/dist/template/helpers/format-conversation.js +53 -0
  237. package/dist/template/helpers/include.d.ts +16 -0
  238. package/dist/template/helpers/include.js +23 -0
  239. package/dist/template/helpers/p1p2.d.ts +37 -0
  240. package/dist/template/helpers/p1p2.js +90 -0
  241. package/dist/template/loader/DocumentLoader.d.ts +48 -0
  242. package/dist/template/loader/DocumentLoader.js +128 -0
  243. package/dist/template/types.d.ts +51 -0
  244. package/dist/template/types.js +6 -0
  245. package/dist/testing/index.d.ts +12 -0
  246. package/dist/testing/index.js +16 -0
  247. package/dist/testing/mock-audit.d.ts +10 -0
  248. package/dist/testing/mock-audit.js +13 -0
  249. package/dist/testing/mock-context.d.ts +27 -0
  250. package/dist/testing/mock-context.js +68 -0
  251. package/dist/testing/mock-logger.d.ts +15 -0
  252. package/dist/testing/mock-logger.js +27 -0
  253. package/dist/testing/mock-router.d.ts +16 -0
  254. package/dist/testing/mock-router.js +67 -0
  255. package/dist/testing/mock-storage.d.ts +9 -0
  256. package/dist/testing/mock-storage.js +21 -0
  257. package/dist/testing/mock-store.d.ts +3 -0
  258. package/dist/testing/mock-store.js +8 -0
  259. package/dist/tools/delegate.d.ts +10 -0
  260. package/dist/tools/delegate.js +60 -0
  261. package/dist/tools/index.d.ts +5 -12
  262. package/dist/tools/index.js +6 -37
  263. package/dist/tools/node/builtin.d.ts +23 -0
  264. package/dist/tools/node/builtin.js +547 -0
  265. package/dist/tools/node/index.d.ts +23 -0
  266. package/dist/tools/node/index.js +59 -0
  267. package/dist/types/index.d.ts +804 -6
  268. package/dist/types/index.js +29 -20
  269. package/dist/types/task-log.types.d.ts +4 -0
  270. package/dist/types/task-log.types.js +3 -0
  271. package/dist/utils/env-defaults.d.ts +18 -0
  272. package/dist/utils/env-defaults.js +27 -0
  273. package/dist/utils/glob-match.d.ts +18 -0
  274. package/dist/utils/glob-match.js +42 -0
  275. package/dist/{core → utils}/id.d.ts +15 -0
  276. package/dist/utils/id.js +50 -0
  277. package/dist/utils/timestamp.d.ts +2 -0
  278. package/dist/utils/timestamp.js +13 -0
  279. package/dist/{core → utils}/workspace.d.ts +4 -0
  280. package/dist/{core → utils}/workspace.js +3 -0
  281. package/package.json +67 -102
  282. package/src/schemas/hooks.schema.json +59 -0
  283. package/templates/agents/default.yaml +490 -0
  284. package/templates/agents/minimal.yaml +16 -0
  285. package/LICENSE +0 -201
  286. package/dist/adapters/MastraToolAdapter.d.ts +0 -9
  287. package/dist/adapters/MastraToolAdapter.js +0 -66
  288. package/dist/adapters/MastraToolAdapter.js.map +0 -1
  289. package/dist/api/index.d.ts +0 -2
  290. package/dist/api/index.js +0 -8
  291. package/dist/api/index.js.map +0 -1
  292. package/dist/boxing/box-storage.interface.js.map +0 -1
  293. package/dist/boxing/box.service.js.map +0 -1
  294. package/dist/boxing/box.types.js.map +0 -1
  295. package/dist/boxing/context-builder.js.map +0 -1
  296. package/dist/boxing/index.d.ts +0 -6
  297. package/dist/boxing/index.js +0 -11
  298. package/dist/boxing/index.js.map +0 -1
  299. package/dist/boxing/tokenizer.d.ts +0 -3
  300. package/dist/boxing/tokenizer.js +0 -11
  301. package/dist/boxing/tokenizer.js.map +0 -1
  302. package/dist/config/api-provider-parser.d.ts +0 -58
  303. package/dist/config/api-provider-parser.js +0 -212
  304. package/dist/config/api-provider-parser.js.map +0 -1
  305. package/dist/config/index.d.ts +0 -3
  306. package/dist/config/index.js +0 -20
  307. package/dist/config/index.js.map +0 -1
  308. package/dist/config/log.config.d.ts +0 -7
  309. package/dist/config/log.config.js +0 -20
  310. package/dist/config/log.config.js.map +0 -1
  311. package/dist/config/pricing.d.ts +0 -11
  312. package/dist/config/pricing.js +0 -53
  313. package/dist/config/pricing.js.map +0 -1
  314. package/dist/config/timeout.config.d.ts +0 -14
  315. package/dist/config/timeout.config.js +0 -34
  316. package/dist/config/timeout.config.js.map +0 -1
  317. package/dist/config/yaml-loader.d.ts +0 -8
  318. package/dist/config/yaml-loader.js +0 -155
  319. package/dist/config/yaml-loader.js.map +0 -1
  320. package/dist/constants/index.d.ts +0 -4
  321. package/dist/constants/index.js +0 -8
  322. package/dist/constants/index.js.map +0 -1
  323. package/dist/constants.d.ts +0 -1
  324. package/dist/constants.js +0 -18
  325. package/dist/constants.js.map +0 -1
  326. package/dist/conversation/conversation-config.d.ts +0 -9
  327. package/dist/conversation/conversation-config.js +0 -22
  328. package/dist/conversation/conversation-config.js.map +0 -1
  329. package/dist/conversation/conversation-history.interface.d.ts +0 -36
  330. package/dist/conversation/conversation-history.interface.js +0 -3
  331. package/dist/conversation/conversation-history.interface.js.map +0 -1
  332. package/dist/conversation/conversation-storage.service.d.ts +0 -16
  333. package/dist/conversation/conversation-storage.service.js +0 -213
  334. package/dist/conversation/conversation-storage.service.js.map +0 -1
  335. package/dist/conversation/index.js.map +0 -1
  336. package/dist/core/__tests__/id.test.d.ts +0 -1
  337. package/dist/core/__tests__/id.test.js +0 -115
  338. package/dist/core/__tests__/id.test.js.map +0 -1
  339. package/dist/core/agent/agent-factory.d.ts +0 -37
  340. package/dist/core/agent/agent-factory.js +0 -68
  341. package/dist/core/agent/agent-factory.js.map +0 -1
  342. package/dist/core/agent/agent-runtime.d.ts +0 -52
  343. package/dist/core/agent/agent-runtime.js +0 -206
  344. package/dist/core/agent/agent-runtime.js.map +0 -1
  345. package/dist/core/agent/event-bus.d.ts +0 -44
  346. package/dist/core/agent/event-bus.js +0 -43
  347. package/dist/core/agent/event-bus.js.map +0 -1
  348. package/dist/core/agent/index.d.ts +0 -3
  349. package/dist/core/agent/index.js +0 -13
  350. package/dist/core/agent/index.js.map +0 -1
  351. package/dist/core/env-defaults.d.ts +0 -1
  352. package/dist/core/env-defaults.js +0 -7
  353. package/dist/core/env-defaults.js.map +0 -1
  354. package/dist/core/id.js +0 -27
  355. package/dist/core/id.js.map +0 -1
  356. package/dist/core/parallel/helpers.js.map +0 -1
  357. package/dist/core/parallel/index.d.ts +0 -4
  358. package/dist/core/parallel/index.js.map +0 -1
  359. package/dist/core/parallel/parallel-runner.js.map +0 -1
  360. package/dist/core/parallel/types.d.ts +0 -41
  361. package/dist/core/parallel/types.js +0 -3
  362. package/dist/core/parallel/types.js.map +0 -1
  363. package/dist/core/providers/MastraAPIProvider.d.ts +0 -31
  364. package/dist/core/providers/MastraAPIProvider.js +0 -365
  365. package/dist/core/providers/MastraAPIProvider.js.map +0 -1
  366. package/dist/core/providers/ai-provider.interface.d.ts +0 -79
  367. package/dist/core/providers/ai-provider.interface.js +0 -23
  368. package/dist/core/providers/ai-provider.interface.js.map +0 -1
  369. package/dist/core/providers/base-ai.provider.d.ts +0 -84
  370. package/dist/core/providers/base-ai.provider.js +0 -1237
  371. package/dist/core/providers/base-ai.provider.js.map +0 -1
  372. package/dist/core/providers/base-ai.types.d.ts +0 -26
  373. package/dist/core/providers/base-ai.types.js +0 -3
  374. package/dist/core/providers/base-ai.types.js.map +0 -1
  375. package/dist/core/providers/claude.provider.d.ts +0 -19
  376. package/dist/core/providers/claude.provider.js +0 -170
  377. package/dist/core/providers/claude.provider.js.map +0 -1
  378. package/dist/core/providers/codex.provider.d.ts +0 -21
  379. package/dist/core/providers/codex.provider.js +0 -134
  380. package/dist/core/providers/codex.provider.js.map +0 -1
  381. package/dist/core/providers/copilot.provider.d.ts +0 -25
  382. package/dist/core/providers/copilot.provider.js +0 -146
  383. package/dist/core/providers/copilot.provider.js.map +0 -1
  384. package/dist/core/providers/dynamic-provider.factory.d.ts +0 -74
  385. package/dist/core/providers/dynamic-provider.factory.js +0 -645
  386. package/dist/core/providers/dynamic-provider.factory.js.map +0 -1
  387. package/dist/core/providers/gemini.provider.d.ts +0 -16
  388. package/dist/core/providers/gemini.provider.js +0 -101
  389. package/dist/core/providers/gemini.provider.js.map +0 -1
  390. package/dist/core/providers/index.d.ts +0 -8
  391. package/dist/core/providers/index.js +0 -20
  392. package/dist/core/providers/index.js.map +0 -1
  393. package/dist/core/providers/mock.provider.d.ts +0 -13
  394. package/dist/core/providers/mock.provider.js +0 -55
  395. package/dist/core/providers/mock.provider.js.map +0 -1
  396. package/dist/core/providers/provider-factory.d.ts +0 -3
  397. package/dist/core/providers/provider-factory.js +0 -65
  398. package/dist/core/providers/provider-factory.js.map +0 -1
  399. package/dist/core/providers/tool-call.types.d.ts +0 -39
  400. package/dist/core/providers/tool-call.types.js +0 -3
  401. package/dist/core/providers/tool-call.types.js.map +0 -1
  402. package/dist/core/remote/index.d.ts +0 -3
  403. package/dist/core/remote/index.js.map +0 -1
  404. package/dist/core/remote/remote-agent-manager.d.ts +0 -24
  405. package/dist/core/remote/remote-agent-manager.js.map +0 -1
  406. package/dist/core/remote/remote-transport.d.ts +0 -15
  407. package/dist/core/remote/remote-transport.js +0 -70
  408. package/dist/core/remote/remote-transport.js.map +0 -1
  409. package/dist/core/remote/types.d.ts +0 -79
  410. package/dist/core/remote/types.js.map +0 -1
  411. package/dist/core/workspace.js.map +0 -1
  412. package/dist/index.js.map +0 -1
  413. package/dist/internal/index.d.ts +0 -1
  414. package/dist/internal/index.js +0 -6
  415. package/dist/internal/index.js.map +0 -1
  416. package/dist/knowledge/DocumentManager.d.ts +0 -4
  417. package/dist/knowledge/DocumentManager.js +0 -119
  418. package/dist/knowledge/DocumentManager.js.map +0 -1
  419. package/dist/knowledge/index.d.ts +0 -1
  420. package/dist/knowledge/index.js +0 -18
  421. package/dist/knowledge/index.js.map +0 -1
  422. package/dist/parsers/agent-call.util.js.map +0 -1
  423. package/dist/parsers/claude.parser.js.map +0 -1
  424. package/dist/parsers/codex.parser.js.map +0 -1
  425. package/dist/parsers/copilot.parser.js.map +0 -1
  426. package/dist/parsers/gemini.parser.js.map +0 -1
  427. package/dist/parsers/index.d.ts +0 -7
  428. package/dist/parsers/index.js +0 -45
  429. package/dist/parsers/index.js.map +0 -1
  430. package/dist/schema/skills-parser.d.ts +0 -8
  431. package/dist/schema/skills-parser.js +0 -438
  432. package/dist/schema/skills-parser.js.map +0 -1
  433. package/dist/schema/skills.types.d.ts +0 -158
  434. package/dist/schema/skills.types.js +0 -41
  435. package/dist/schema/skills.types.js.map +0 -1
  436. package/dist/schemas/api-provider.schema.d.ts +0 -432
  437. package/dist/schemas/api-provider.schema.js +0 -50
  438. package/dist/schemas/api-provider.schema.js.map +0 -1
  439. package/dist/services/index.d.ts +0 -2
  440. package/dist/services/index.js +0 -19
  441. package/dist/services/index.js.map +0 -1
  442. package/dist/services/layout-loader.service.js.map +0 -1
  443. package/dist/services/layout-renderer.service.js +0 -325
  444. package/dist/services/layout-renderer.service.js.map +0 -1
  445. package/dist/services/props-validator.service.js.map +0 -1
  446. package/dist/skills/adapter/claude-skill-adapter.d.ts +0 -11
  447. package/dist/skills/adapter/claude-skill-adapter.js +0 -222
  448. package/dist/skills/adapter/claude-skill-adapter.js.map +0 -1
  449. package/dist/skills/index.d.ts +0 -6
  450. package/dist/skills/index.js +0 -31
  451. package/dist/skills/index.js.map +0 -1
  452. package/dist/skills/runtime/progressive-loader.d.ts +0 -27
  453. package/dist/skills/runtime/progressive-loader.js +0 -186
  454. package/dist/skills/runtime/progressive-loader.js.map +0 -1
  455. package/dist/skills/runtime/runtime-requirements-validator.d.ts +0 -23
  456. package/dist/skills/runtime/runtime-requirements-validator.js +0 -248
  457. package/dist/skills/runtime/runtime-requirements-validator.js.map +0 -1
  458. package/dist/skills/runtime/skill-runtime.service.d.ts +0 -42
  459. package/dist/skills/runtime/skill-runtime.service.js +0 -434
  460. package/dist/skills/runtime/skill-runtime.service.js.map +0 -1
  461. package/dist/tools/file-system.service.d.ts +0 -10
  462. package/dist/tools/file-system.service.js +0 -33
  463. package/dist/tools/file-system.service.js.map +0 -1
  464. package/dist/tools/find.tool.d.ts +0 -21
  465. package/dist/tools/find.tool.js +0 -139
  466. package/dist/tools/find.tool.js.map +0 -1
  467. package/dist/tools/glob.tool.d.ts +0 -24
  468. package/dist/tools/glob.tool.js +0 -153
  469. package/dist/tools/glob.tool.js.map +0 -1
  470. package/dist/tools/grep.tool.d.ts +0 -1
  471. package/dist/tools/grep.tool.js +0 -137
  472. package/dist/tools/grep.tool.js.map +0 -1
  473. package/dist/tools/index.js.map +0 -1
  474. package/dist/tools/ls.tool.d.ts +0 -1
  475. package/dist/tools/ls.tool.js +0 -94
  476. package/dist/tools/ls.tool.js.map +0 -1
  477. package/dist/tools/read-file.tool.d.ts +0 -1
  478. package/dist/tools/read-file.tool.js +0 -69
  479. package/dist/tools/read-file.tool.js.map +0 -1
  480. package/dist/tools/replace.tool.d.ts +0 -1
  481. package/dist/tools/replace.tool.js +0 -68
  482. package/dist/tools/replace.tool.js.map +0 -1
  483. package/dist/tools/run-shell-command.tool.d.ts +0 -1
  484. package/dist/tools/run-shell-command.tool.js +0 -64
  485. package/dist/tools/run-shell-command.tool.js.map +0 -1
  486. package/dist/tools/tree.tool.d.ts +0 -1
  487. package/dist/tools/tree.tool.js +0 -109
  488. package/dist/tools/tree.tool.js.map +0 -1
  489. package/dist/tools/types.d.ts +0 -42
  490. package/dist/tools/types.js +0 -13
  491. package/dist/tools/types.js.map +0 -1
  492. package/dist/tools/utils/file-utils.d.ts +0 -5
  493. package/dist/tools/utils/file-utils.js +0 -221
  494. package/dist/tools/utils/file-utils.js.map +0 -1
  495. package/dist/tools/write-file.tool.d.ts +0 -1
  496. package/dist/tools/write-file.tool.js +0 -55
  497. package/dist/tools/write-file.tool.js.map +0 -1
  498. package/dist/types/agent.types.d.ts +0 -134
  499. package/dist/types/agent.types.js +0 -16
  500. package/dist/types/agent.types.js.map +0 -1
  501. package/dist/types/api-provider.types.d.ts +0 -85
  502. package/dist/types/api-provider.types.js +0 -65
  503. package/dist/types/api-provider.types.js.map +0 -1
  504. package/dist/types/index.js.map +0 -1
  505. package/dist/types/layout.types.js.map +0 -1
  506. package/dist/types/provider.types.d.ts +0 -12
  507. package/dist/types/provider.types.js +0 -3
  508. package/dist/types/provider.types.js.map +0 -1
  509. package/dist/types/skill-runtime.types.d.ts +0 -244
  510. package/dist/types/skill-runtime.types.js +0 -44
  511. package/dist/types/skill-runtime.types.js.map +0 -1
  512. package/dist/types/structured-payload.types.d.ts +0 -46
  513. package/dist/types/structured-payload.types.js +0 -65
  514. package/dist/types/structured-payload.types.js.map +0 -1
  515. package/dist/types/task-log.types.js.map +0 -1
  516. package/dist/types/template.types.d.ts +0 -38
  517. package/dist/types/template.types.js +0 -3
  518. package/dist/types/template.types.js.map +0 -1
  519. package/dist/types.d.ts +0 -1
  520. package/dist/types.js +0 -18
  521. package/dist/types.js.map +0 -1
  522. package/dist/utils/api-provider-normalizer.d.ts +0 -16
  523. package/dist/utils/api-provider-normalizer.js +0 -135
  524. package/dist/utils/api-provider-normalizer.js.map +0 -1
  525. package/dist/utils/base-message-formatter.d.ts +0 -32
  526. package/dist/utils/base-message-formatter.js +0 -170
  527. package/dist/utils/base-message-formatter.js.map +0 -1
  528. package/dist/utils/error-utils.d.ts +0 -3
  529. package/dist/utils/error-utils.js +0 -27
  530. package/dist/utils/error-utils.js.map +0 -1
  531. package/dist/utils/index.d.ts +0 -4
  532. package/dist/utils/index.js +0 -21
  533. package/dist/utils/index.js.map +0 -1
  534. package/dist/utils/math-utils.d.ts +0 -3
  535. package/dist/utils/math-utils.js +0 -10
  536. package/dist/utils/math-utils.js.map +0 -1
  537. package/dist/utils/mention-parser.d.ts +0 -18
  538. package/dist/utils/mention-parser.js +0 -136
  539. package/dist/utils/mention-parser.js.map +0 -1
  540. package/dist/utils/string-utils.d.ts +0 -1
  541. package/dist/utils/string-utils.js +0 -10
  542. package/dist/utils/string-utils.js.map +0 -1
  543. package/dist/utils.d.ts +0 -3
  544. package/dist/utils.js +0 -20
  545. package/dist/utils.js.map +0 -1
  546. package/schema/api-provider-config.json +0 -138
  547. package/schema/crewx-config.json +0 -224
  548. package/schema/skills-config.json +0 -306
@@ -0,0 +1,310 @@
1
+ /**
2
+ * VercelProviderRuntime — API 프로바이더를 위한 ProviderRuntime 구현.
3
+ *
4
+ * Vercel AI SDK의 generateText() + tool()을 직접 사용하여 tool calling loop를 처리한다.
5
+ * @ai-sdk/* 기반 모델 인스턴스를 생성하여 OpenRouter, OpenAI, Anthropic, Google 지원.
6
+ */
7
+ import { ProviderError, ClientToolCallRequiredError } from './bridge';
8
+ const DEFAULT_MAX_STEPS = 10;
9
+ const MAX_STEPS_LIMIT = 50;
10
+ export class VercelProviderRuntime {
11
+ config;
12
+ constructor(config) {
13
+ this.config = config;
14
+ }
15
+ async query(message, options) {
16
+ return this._run(message, 'query', options);
17
+ }
18
+ async execute(message, options) {
19
+ return this._run(message, 'execute', options);
20
+ }
21
+ async _run(message, _mode, options) {
22
+ const { generateText, tool } = await import('ai');
23
+ // 1. Vercel AI SDK tools 변환
24
+ const vercelTools = this.convertTools(options?.tools ?? [], tool);
25
+ // 2. Model 인스턴스 생성 (Vercel AI SDK)
26
+ const model = this.createModel(options?.model);
27
+ // 3. maxSteps 계산
28
+ const maxSteps = Math.min(options?.maxSteps ?? this.config.maxSteps ?? DEFAULT_MAX_STEPS, MAX_STEPS_LIMIT);
29
+ try {
30
+ // 4. generateText() — tool loop 자동 실행
31
+ let stepIndex = 0;
32
+ const result = await generateText({
33
+ model,
34
+ system: options?.systemPrompt ?? undefined,
35
+ prompt: message,
36
+ tools: vercelTools,
37
+ maxSteps,
38
+ ...(this.config.temperature !== undefined && { temperature: this.config.temperature }),
39
+ ...(this.config.maxTokens !== undefined && { maxTokens: this.config.maxTokens }),
40
+ onStepFinish: (event) => {
41
+ stepIndex++;
42
+ if (!options?.onOutput)
43
+ return;
44
+ // tool call 기록 — Claude stream-json 호환 포맷
45
+ if (event.toolCalls && event.toolCalls.length > 0) {
46
+ for (const tc of event.toolCalls) {
47
+ options.onOutput(JSON.stringify({
48
+ type: 'assistant',
49
+ message: {
50
+ content: [{ type: 'tool_use', id: tc.toolCallId, name: tc.toolName, input: tc.args }],
51
+ },
52
+ }), 'stdout');
53
+ }
54
+ }
55
+ // tool result 기록 — Claude stream-json 호환 포맷
56
+ if (event.toolResults && event.toolResults.length > 0) {
57
+ for (const tr of event.toolResults) {
58
+ const output = typeof tr.result === 'string'
59
+ ? tr.result
60
+ : JSON.stringify(tr.result);
61
+ options.onOutput(JSON.stringify({
62
+ type: 'user',
63
+ message: {
64
+ content: [{ type: 'tool_result', tool_use_id: tr.toolCallId, output, is_error: false }],
65
+ },
66
+ }), 'stdout');
67
+ }
68
+ }
69
+ },
70
+ });
71
+ // 5. Client tool detection — if generateText stopped because of a tool without execute
72
+ const clientToolNames = new Set((options?.tools ?? []).filter(t => !t.execute).map(t => t.name));
73
+ if (result.finishReason === 'tool-calls' &&
74
+ Array.isArray(result.toolCalls) &&
75
+ result.toolCalls.length > 0) {
76
+ const pendingCalls = result.toolCalls
77
+ .filter(tc => clientToolNames.has(tc.toolName));
78
+ if (pendingCalls.length > 0) {
79
+ const tc = pendingCalls[0];
80
+ throw new ClientToolCallRequiredError({ toolCallId: tc.toolCallId, toolName: tc.toolName, args: tc.args }, {
81
+ userMessage: message,
82
+ responseMessages: result.response?.messages ?? [],
83
+ toolDefinitions: options?.tools ?? [],
84
+ maxSteps,
85
+ systemPrompt: options?.systemPrompt,
86
+ modelOverride: options?.model,
87
+ });
88
+ }
89
+ }
90
+ // 6. Usage 콜백
91
+ if (options?.onUsage && result.usage) {
92
+ const usage = {
93
+ inputTokens: result.usage.promptTokens ?? 0,
94
+ outputTokens: result.usage.completionTokens ?? 0,
95
+ cachedInputTokens: 0,
96
+ costUsd: 0,
97
+ };
98
+ options.onUsage(usage);
99
+ }
100
+ // 7. Model 콜백
101
+ if (options?.onModel) {
102
+ options.onModel(options.model ?? this.config.model);
103
+ }
104
+ return result.text ?? '';
105
+ }
106
+ catch (error) {
107
+ // Re-throw ClientToolCallRequiredError as-is (not a provider error)
108
+ if (error instanceof ClientToolCallRequiredError)
109
+ throw error;
110
+ if (error.status === 401) {
111
+ throw new ProviderError(`Authentication failed for ${this.config.provider}. Check your API key.`, this.config.provider);
112
+ }
113
+ if (error.status === 429) {
114
+ throw new ProviderError(`Rate limit exceeded for ${this.config.provider}.`, this.config.provider);
115
+ }
116
+ throw new ProviderError(`Provider error: ${error.message}`, this.config.provider);
117
+ }
118
+ }
119
+ /**
120
+ * Resume a conversation after client-side tool results are provided.
121
+ * Reconstructs the message history and calls generateText() again.
122
+ */
123
+ async continueWithToolResults(state, toolResults, options) {
124
+ const { generateText, tool: toolFn } = await import('ai');
125
+ const vercelTools = this.convertTools(state.toolDefinitions, toolFn);
126
+ const model = this.createModel(state.modelOverride);
127
+ const maxSteps = Math.min(state.maxSteps ?? this.config.maxSteps ?? DEFAULT_MAX_STEPS, MAX_STEPS_LIMIT);
128
+ // Build messages: original user message + previous response + new tool results
129
+ const messages = [
130
+ { role: 'user', content: state.userMessage },
131
+ ...state.responseMessages,
132
+ {
133
+ role: 'tool',
134
+ content: toolResults.map(tr => ({
135
+ type: 'tool-result',
136
+ toolCallId: tr.toolCallId,
137
+ toolName: tr.toolName,
138
+ result: typeof tr.result === 'string' ? tr.result : JSON.stringify(tr.result),
139
+ })),
140
+ },
141
+ ];
142
+ try {
143
+ const result = await generateText({
144
+ model,
145
+ system: state.systemPrompt ?? undefined,
146
+ messages: messages,
147
+ tools: vercelTools,
148
+ maxSteps,
149
+ ...(this.config.temperature !== undefined && { temperature: this.config.temperature }),
150
+ ...(this.config.maxTokens !== undefined && { maxTokens: this.config.maxTokens }),
151
+ });
152
+ // Check again for client tool calls
153
+ const clientToolNames = new Set(state.toolDefinitions.filter(t => !t.execute).map(t => t.name));
154
+ if (result.finishReason === 'tool-calls' &&
155
+ Array.isArray(result.toolCalls) &&
156
+ result.toolCalls.length > 0) {
157
+ const pendingCalls = result.toolCalls
158
+ .filter(tc => clientToolNames.has(tc.toolName));
159
+ if (pendingCalls.length > 0) {
160
+ const tc = pendingCalls[0];
161
+ // Update continuation state with new messages
162
+ throw new ClientToolCallRequiredError({ toolCallId: tc.toolCallId, toolName: tc.toolName, args: tc.args }, {
163
+ userMessage: state.userMessage,
164
+ responseMessages: [
165
+ ...state.responseMessages,
166
+ {
167
+ role: 'tool',
168
+ content: toolResults.map(tr => ({
169
+ type: 'tool-result',
170
+ toolCallId: tr.toolCallId,
171
+ toolName: tr.toolName,
172
+ result: typeof tr.result === 'string' ? tr.result : JSON.stringify(tr.result),
173
+ })),
174
+ },
175
+ ...(result.response?.messages ?? []),
176
+ ],
177
+ toolDefinitions: state.toolDefinitions,
178
+ maxSteps: state.maxSteps,
179
+ systemPrompt: state.systemPrompt,
180
+ modelOverride: state.modelOverride,
181
+ });
182
+ }
183
+ }
184
+ // Usage/model callbacks
185
+ if (options?.onUsage && result.usage) {
186
+ options.onUsage({
187
+ inputTokens: result.usage.promptTokens ?? 0,
188
+ outputTokens: result.usage.completionTokens ?? 0,
189
+ cachedInputTokens: 0,
190
+ costUsd: 0,
191
+ });
192
+ }
193
+ if (options?.onModel) {
194
+ options.onModel(state.modelOverride ?? this.config.model);
195
+ }
196
+ return result.text ?? '';
197
+ }
198
+ catch (error) {
199
+ if (error instanceof ClientToolCallRequiredError)
200
+ throw error;
201
+ throw new ProviderError(`Provider error: ${error.message}`, this.config.provider);
202
+ }
203
+ }
204
+ /**
205
+ * CrewX ToolDefinition[] → Vercel AI SDK tool Record 변환.
206
+ * execute가 없는 tool은 client tool로 처리 (Vercel AI SDK 네이티브 지원).
207
+ */
208
+ convertTools(tools, toolFn) {
209
+ const { z } = require('zod');
210
+ const vercelTools = {};
211
+ for (const td of tools) {
212
+ const parameters = this.jsonSchemaToZod(td.parameters ?? {}, z);
213
+ if (td.execute) {
214
+ // Server tool — execute 함수 있음
215
+ vercelTools[td.name] = toolFn({
216
+ description: td.description,
217
+ parameters,
218
+ execute: async (args) => {
219
+ return td.execute(args);
220
+ },
221
+ });
222
+ }
223
+ else {
224
+ // Client tool — execute 없음 (Vercel AI SDK가 tool_result를 기다림)
225
+ vercelTools[td.name] = toolFn({
226
+ description: td.description,
227
+ parameters,
228
+ });
229
+ }
230
+ }
231
+ return vercelTools;
232
+ }
233
+ /**
234
+ * JSON Schema → Zod 간이 변환.
235
+ */
236
+ jsonSchemaToZod(schema, z) {
237
+ if (!schema || !schema.properties)
238
+ return z.object({});
239
+ const shape = {};
240
+ const props = schema.properties;
241
+ const required = schema.required ?? [];
242
+ for (const [key, prop] of Object.entries(props)) {
243
+ let field;
244
+ switch (prop.type) {
245
+ case 'string':
246
+ field = z.string();
247
+ break;
248
+ case 'number':
249
+ field = z.number();
250
+ break;
251
+ case 'integer':
252
+ field = z.number().int();
253
+ break;
254
+ case 'boolean':
255
+ field = z.boolean();
256
+ break;
257
+ case 'array':
258
+ field = z.array(z.any());
259
+ break;
260
+ default: field = z.any();
261
+ }
262
+ if (prop.description)
263
+ field = field.describe(prop.description);
264
+ if (!required.includes(key))
265
+ field = field.optional();
266
+ shape[key] = field;
267
+ }
268
+ return z.object(shape);
269
+ }
270
+ /**
271
+ * Vercel AI SDK model 인스턴스 생성.
272
+ * provider string에 따라 적절한 SDK 팩토리 사용.
273
+ */
274
+ createModel(modelOverride) {
275
+ const { provider, apiKey, baseURL } = this.config;
276
+ const model = modelOverride || this.config.model;
277
+ switch (provider) {
278
+ case 'api/openrouter': {
279
+ const { createOpenAI } = require('@ai-sdk/openai');
280
+ return createOpenAI({
281
+ apiKey: apiKey || process.env.OPENROUTER_API_KEY,
282
+ baseURL: baseURL || 'https://openrouter.ai/api/v1',
283
+ })(model);
284
+ }
285
+ case 'api/openai': {
286
+ const { createOpenAI } = require('@ai-sdk/openai');
287
+ return createOpenAI({
288
+ apiKey: apiKey || process.env.OPENAI_API_KEY,
289
+ ...(baseURL && { baseURL }),
290
+ })(model);
291
+ }
292
+ case 'api/anthropic': {
293
+ const { createAnthropic } = require('@ai-sdk/anthropic');
294
+ return createAnthropic({
295
+ apiKey: apiKey || process.env.ANTHROPIC_API_KEY,
296
+ ...(baseURL && { baseURL }),
297
+ })(model);
298
+ }
299
+ case 'api/google': {
300
+ const { createGoogleGenerativeAI } = require('@ai-sdk/google');
301
+ return createGoogleGenerativeAI({
302
+ apiKey: apiKey || process.env.GOOGLE_API_KEY,
303
+ })(model);
304
+ }
305
+ default:
306
+ throw new ProviderError(`Unsupported API provider: ${provider}`, provider);
307
+ }
308
+ }
309
+ }
310
+ //# sourceMappingURL=vercel-runtime.js.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Remote Agent Module
3
+ *
4
+ * SDK core module for remote agent communication via MCP protocol.
5
+ */
6
+ export * from './types.js';
7
+ export { McpHttpTransport } from './remote-transport.js';
8
+ export { RemoteAgentManager } from './remote-agent-manager.js';
9
+ export { RemoteProviderRuntime, createRemoteProviderFactory } from './remote-provider.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Remote Agent Manager
3
+ *
4
+ * Manages communication with remote MCP agents.
5
+ * Migrated from sdk-bak/src/core/remote/remote-agent-manager.ts
6
+ * and adapted to use the new RemoteTransport interface.
7
+ */
8
+ import { McpHttpTransport } from './remote-transport.js';
9
+ /**
10
+ * Remote Agent Manager
11
+ *
12
+ * Manages communication with remote MCP agents.
13
+ * Each loaded agent config creates its own transport instance.
14
+ */
15
+ export class RemoteAgentManager {
16
+ logger;
17
+ configs = new Map();
18
+ transports = new Map();
19
+ constructor(options = {}) {
20
+ this.logger = options.logger ?? (() => { });
21
+ }
22
+ /**
23
+ * Load configuration for a remote agent.
24
+ * Creates a transport instance for the agent.
25
+ */
26
+ loadConfig(agentId, config) {
27
+ this.validateConfig(config);
28
+ this.configs.set(agentId, config);
29
+ this.transports.set(agentId, new McpHttpTransport({
30
+ url: config.url,
31
+ apiKey: config.apiKey,
32
+ headers: config.headers,
33
+ timeoutMs: config.timeoutMs,
34
+ }));
35
+ this.logger(`Loaded remote agent config for: ${agentId}`, 'debug');
36
+ }
37
+ /**
38
+ * Load configuration with a custom transport (e.g. for testing).
39
+ */
40
+ loadConfigWithTransport(agentId, config, transport) {
41
+ this.validateConfig(config);
42
+ this.configs.set(agentId, config);
43
+ this.transports.set(agentId, transport);
44
+ this.logger(`Loaded remote agent config for: ${agentId} (custom transport)`, 'debug');
45
+ }
46
+ /** Get configuration for a remote agent. */
47
+ getConfig(agentId) {
48
+ return this.configs.get(agentId);
49
+ }
50
+ /** Check if an agent is configured as remote. */
51
+ isRemoteAgent(agentId) {
52
+ return this.configs.has(agentId);
53
+ }
54
+ /** Get all configured remote agent IDs. */
55
+ getRemoteAgentIds() {
56
+ return Array.from(this.configs.keys());
57
+ }
58
+ /** Query a remote agent. */
59
+ async query(agentId, request) {
60
+ const config = this.requireConfig(agentId);
61
+ const toolName = config.tools?.query ?? 'crewx_queryAgent';
62
+ const remoteAgentId = config.agentId ?? agentId;
63
+ const payload = {
64
+ agentId: remoteAgentId,
65
+ query: request.query,
66
+ };
67
+ if (request.context)
68
+ payload.context = request.context;
69
+ if (request.model)
70
+ payload.model = request.model;
71
+ if (request.platform)
72
+ payload.platform = request.platform;
73
+ if (request.messages?.length)
74
+ payload.messages = request.messages;
75
+ try {
76
+ const result = await this.callRemoteTool(agentId, toolName, payload);
77
+ return this.normalizeResponse(result);
78
+ }
79
+ catch (error) {
80
+ const msg = error instanceof Error ? error.message : String(error);
81
+ this.logger(`Remote query failed for agent ${agentId}: ${msg}`, 'error');
82
+ throw error;
83
+ }
84
+ }
85
+ /** Execute a task on a remote agent. */
86
+ async execute(agentId, request) {
87
+ const config = this.requireConfig(agentId);
88
+ const toolName = config.tools?.execute ?? 'crewx_executeAgent';
89
+ const remoteAgentId = config.agentId ?? agentId;
90
+ const payload = {
91
+ agentId: remoteAgentId,
92
+ task: request.task,
93
+ };
94
+ if (request.context)
95
+ payload.context = request.context;
96
+ if (request.model)
97
+ payload.model = request.model;
98
+ if (request.platform)
99
+ payload.platform = request.platform;
100
+ if (request.messages?.length)
101
+ payload.messages = request.messages;
102
+ try {
103
+ const result = await this.callRemoteTool(agentId, toolName, payload);
104
+ return this.normalizeResponse(result);
105
+ }
106
+ catch (error) {
107
+ const msg = error instanceof Error ? error.message : String(error);
108
+ this.logger(`Remote execute failed for agent ${agentId}: ${msg}`, 'error');
109
+ throw error;
110
+ }
111
+ }
112
+ /** Map tool names for a remote agent. */
113
+ mapToolNames(agentId, mapping) {
114
+ const config = this.requireConfig(agentId);
115
+ config.tools = {
116
+ query: mapping.query ?? config.tools?.query ?? 'crewx_queryAgent',
117
+ execute: mapping.execute ?? config.tools?.execute ?? 'crewx_executeAgent',
118
+ };
119
+ this.logger(`Updated tool name mapping for agent ${agentId}`, 'debug');
120
+ }
121
+ /** Clear all configurations and close transports. */
122
+ async clearConfigs() {
123
+ for (const transport of this.transports.values()) {
124
+ await transport.close();
125
+ }
126
+ this.configs.clear();
127
+ this.transports.clear();
128
+ this.logger('Cleared all remote agent configurations', 'debug');
129
+ }
130
+ // ── Private ───────────────────────────────────────────────────────────────
131
+ requireConfig(agentId) {
132
+ const config = this.configs.get(agentId);
133
+ if (!config) {
134
+ throw new Error(`Agent ${agentId} is not configured as a remote agent`);
135
+ }
136
+ return config;
137
+ }
138
+ async callRemoteTool(agentId, toolName, args) {
139
+ const transport = this.transports.get(agentId);
140
+ if (!transport) {
141
+ throw new Error(`No transport available for agent ${agentId}`);
142
+ }
143
+ const request = {
144
+ jsonrpc: '2.0',
145
+ id: `${toolName}-${Date.now()}`,
146
+ method: 'tools/call',
147
+ params: {
148
+ name: toolName,
149
+ arguments: args,
150
+ },
151
+ };
152
+ this.logger(`Calling remote MCP tool ${toolName} for agent ${agentId}`, 'debug');
153
+ const response = await transport.send(request);
154
+ if (response.error) {
155
+ throw new Error(response.error.message || 'MCP server returned an error');
156
+ }
157
+ return response.result;
158
+ }
159
+ /** Normalize remote agent response to consistent format. */
160
+ normalizeResponse(result) {
161
+ if (!result) {
162
+ return {
163
+ success: false,
164
+ content: [{ type: 'text', text: 'Remote agent returned no response.' }],
165
+ };
166
+ }
167
+ const obj = result;
168
+ // Already has content array — return as-is
169
+ if (Array.isArray(obj.content) && obj.content.length > 0) {
170
+ return obj;
171
+ }
172
+ // Extract content from various possible fields
173
+ const fallbackContent = obj.response ?? obj.implementation ?? obj.message ?? obj.output;
174
+ const text = typeof fallbackContent === 'string'
175
+ ? fallbackContent
176
+ : JSON.stringify(fallbackContent ?? result, null, 2);
177
+ return {
178
+ ...obj,
179
+ content: [{ type: 'text', text }],
180
+ };
181
+ }
182
+ validateConfig(config) {
183
+ if (!config.url) {
184
+ throw new Error('Remote agent configuration requires a URL');
185
+ }
186
+ if (!config.url.startsWith('http://') && !config.url.startsWith('https://')) {
187
+ throw new Error('Remote agent URL must start with http:// or https://');
188
+ }
189
+ if (config.type !== 'mcp-http') {
190
+ throw new Error(`Unsupported remote agent type: ${config.type}`);
191
+ }
192
+ }
193
+ }
194
+ //# sourceMappingURL=remote-agent-manager.js.map
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Remote Provider Runtime
3
+ *
4
+ * Implements ProviderRuntime for remote agents.
5
+ * Bridges crewx.yaml remote provider config → RemoteAgentManager → MCP-HTTP transport.
6
+ */
7
+ import { RemoteAgentManager } from './remote-agent-manager.js';
8
+ /**
9
+ * ProviderRuntime implementation for remote agents.
10
+ *
11
+ * Created by the `remote` namespace factory when `createProvider('remote/remote_cto')` is called.
12
+ * Wraps RemoteAgentManager to translate ProviderRuntime.query/execute into MCP-HTTP calls.
13
+ */
14
+ export class RemoteProviderRuntime {
15
+ manager;
16
+ agentId;
17
+ constructor(remoteId, providerConfig) {
18
+ this.agentId = providerConfig.external_agent_id ?? remoteId;
19
+ this.manager = new RemoteAgentManager();
20
+ const mcpConfig = toRemoteAgentConfig(remoteId, providerConfig);
21
+ this.manager.loadConfig(this.agentId, mcpConfig);
22
+ }
23
+ async query(message, options) {
24
+ const response = await this.manager.query(this.agentId, {
25
+ agentId: this.agentId,
26
+ query: message,
27
+ model: options?.model,
28
+ context: options?.context ?? options?.systemPrompt,
29
+ });
30
+ return response.content.map(c => c.text).join('\n');
31
+ }
32
+ async execute(message, options) {
33
+ const response = await this.manager.execute(this.agentId, {
34
+ agentId: this.agentId,
35
+ task: message,
36
+ model: options?.model,
37
+ context: options?.context ?? options?.systemPrompt,
38
+ });
39
+ return response.content.map(c => c.text).join('\n');
40
+ }
41
+ }
42
+ // ── Factory ─────────────────────────────────────────────────────────────────
43
+ /**
44
+ * Create a provider factory function for the `remote` namespace.
45
+ *
46
+ * @param remoteConfigs - Map of remote provider ID → config (from crewx.yaml `providers:` section)
47
+ * @returns ProviderFactory function to register via registerProviderFactory('remote', factory)
48
+ */
49
+ export function createRemoteProviderFactory(remoteConfigs) {
50
+ return (id, _providerStr) => {
51
+ const config = remoteConfigs.get(id);
52
+ if (!config) {
53
+ throw new Error(`Remote provider "${id}" not found. Available: ${Array.from(remoteConfigs.keys()).join(', ') || '(none)'}`);
54
+ }
55
+ return new RemoteProviderRuntime(id, config);
56
+ };
57
+ }
58
+ // ── Helpers ─────────────────────────────────────────────────────────────────
59
+ /**
60
+ * Convert crewx.yaml RemoteProviderConfig to SDK-internal RemoteAgentConfig.
61
+ */
62
+ function toRemoteAgentConfig(remoteId, config) {
63
+ const url = resolveLocation(config.location);
64
+ return {
65
+ type: 'mcp-http',
66
+ url,
67
+ apiKey: config.apiKey,
68
+ headers: config.headers,
69
+ timeoutMs: config.timeout?.query ?? 30000,
70
+ agentId: config.external_agent_id ?? remoteId,
71
+ };
72
+ }
73
+ /**
74
+ * Resolve a `location` field to an MCP-HTTP URL.
75
+ *
76
+ * - `http://` / `https://` → used directly as MCP endpoint.
77
+ * - `file://` → not a network endpoint; the MCP server must be started separately.
78
+ * Falls back to a conventional localhost URL for the workspace.
79
+ */
80
+ function resolveLocation(location) {
81
+ if (!location) {
82
+ throw new Error('Remote provider config requires a location');
83
+ }
84
+ // Direct HTTP(S) endpoint
85
+ if (location.startsWith('http://') || location.startsWith('https://')) {
86
+ return location;
87
+ }
88
+ // file:// protocol — remote workspace reference.
89
+ // The MCP server for this workspace needs to be running.
90
+ // We derive a conventional localhost endpoint; the actual call may fail,
91
+ // which is acceptable (connection failure ≠ provider namespace error).
92
+ if (location.startsWith('file://')) {
93
+ // Convention: workspace MCP server at http://localhost:3030
94
+ return `http://localhost:3030`;
95
+ }
96
+ throw new Error(`Unsupported remote location protocol: ${location}`);
97
+ }
98
+ //# sourceMappingURL=remote-provider.js.map
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Remote Transport Implementations
3
+ *
4
+ * MCP-HTTP JSON-RPC 2.0 transport for communicating with remote MCP servers.
5
+ * Migrated from sdk-bak and adapted to the new RemoteTransport interface.
6
+ */
7
+ /**
8
+ * MCP-HTTP transport — sends JSON-RPC 2.0 requests over HTTP POST.
9
+ *
10
+ * Endpoint: `${baseUrl}/mcp`
11
+ */
12
+ export class McpHttpTransport {
13
+ endpoint;
14
+ headers;
15
+ timeoutMs;
16
+ constructor(options) {
17
+ const baseUrl = normalizeUrl(options.url);
18
+ this.endpoint = `${baseUrl}/mcp`;
19
+ this.headers = {
20
+ 'Content-Type': 'application/json',
21
+ ...(options.headers ?? {}),
22
+ };
23
+ if (options.apiKey) {
24
+ this.headers['Authorization'] = `Bearer ${options.apiKey}`;
25
+ }
26
+ this.timeoutMs = options.timeoutMs ?? 30000;
27
+ }
28
+ async send(request) {
29
+ const controller = new AbortController();
30
+ const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
31
+ try {
32
+ const response = await fetch(this.endpoint, {
33
+ method: 'POST',
34
+ headers: this.headers,
35
+ body: JSON.stringify(request),
36
+ signal: controller.signal,
37
+ });
38
+ clearTimeout(timeout);
39
+ if (!response.ok) {
40
+ const text = await response.text();
41
+ throw new Error(`HTTP ${response.status}: ${response.statusText}${text ? ` - ${text}` : ''}`);
42
+ }
43
+ const contentType = response.headers.get('content-type');
44
+ if (contentType?.includes('application/json')) {
45
+ return (await response.json());
46
+ }
47
+ // Non-JSON response — wrap as error
48
+ const body = await response.text();
49
+ return {
50
+ jsonrpc: '2.0',
51
+ id: request.id,
52
+ error: { code: -32600, message: `Unexpected response content-type: ${contentType}`, data: body },
53
+ };
54
+ }
55
+ catch (error) {
56
+ clearTimeout(timeout);
57
+ if (error instanceof Error && error.name === 'AbortError') {
58
+ throw new Error(`MCP-HTTP request timeout after ${this.timeoutMs}ms to ${this.endpoint}`);
59
+ }
60
+ throw error;
61
+ }
62
+ }
63
+ async close() {
64
+ // No persistent connection to close for HTTP transport.
65
+ }
66
+ }
67
+ // ── Helpers ─────────────────────────────────────────────────────────────────
68
+ /**
69
+ * Normalize a URL: remove trailing slashes and redundant /mcp suffix.
70
+ */
71
+ function normalizeUrl(url) {
72
+ if (!url)
73
+ return url;
74
+ const trimmed = url.trim().replace(/\/+$/, '');
75
+ return trimmed.toLowerCase().endsWith('/mcp')
76
+ ? trimmed.slice(0, -4)
77
+ : trimmed;
78
+ }
79
+ //# sourceMappingURL=remote-transport.js.map