@crewx/sdk 0.8.0-rc.73 → 0.8.0-rc.75

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 +68 -103
  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,43 @@
1
+ import { isAgentCallCommand, parseAgentCall } from './agent-call.util';
2
+ /**
3
+ * Parse Gemini stream-json events into TaskLogEntry[].
4
+ *
5
+ * Gemini events:
6
+ * - { type: "message", role: "assistant", delta: true, content: "..." }
7
+ * - { type: "init", ... } (ignored)
8
+ * - { type: "tool_use", tool_name, tool_id, parameters }
9
+ * - { type: "tool_result", tool_id, status, output }
10
+ */
11
+ export function parseGeminiEvent(timestamp, parsed) {
12
+ const type = parsed.type;
13
+ if (type === 'message') {
14
+ const role = parsed.role;
15
+ if (role !== 'assistant')
16
+ return [];
17
+ const content = parsed.content;
18
+ if (!content)
19
+ return [];
20
+ return [{ timestamp, type: 'text', content }];
21
+ }
22
+ if (type === 'tool_use') {
23
+ const toolName = String(parsed.tool_name || '');
24
+ const toolUseId = parsed.tool_id;
25
+ const parameters = parsed.parameters;
26
+ const inputStr = parameters?.command
27
+ ? String(parameters.command)
28
+ : JSON.stringify(parameters || {});
29
+ if (/^bash$/i.test(toolName) && isAgentCallCommand(inputStr)) {
30
+ return [parseAgentCall(timestamp, inputStr)];
31
+ }
32
+ return [{ timestamp, type: 'tool_use', toolName, toolUseId, toolInput: inputStr }];
33
+ }
34
+ if (type === 'tool_result') {
35
+ const toolUseId = parsed.tool_id;
36
+ const output = String(parsed.output || '');
37
+ const isError = parsed.status !== 'success';
38
+ return [{ timestamp, type: 'tool_result', toolUseId, resultPreview: output, isError }];
39
+ }
40
+ // init and other events: skip
41
+ return [];
42
+ }
43
+ //# sourceMappingURL=gemini.parser.js.map
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Parse OpenCode stream-json events (--format json) into TaskLogEntry[].
3
+ *
4
+ * OpenCode events:
5
+ * - { type: "step_start", sessionID: "ses_...", part: { type: "step-start" } }
6
+ * - { type: "text", part: { type: "text", text: "..." } }
7
+ * - { type: "step_finish", part: { reason: "stop", tokens: { total, input, output, reasoning, cache: { write, read } }, cost: 0 } }
8
+ * - { type: "tool_use", part: { type: "tool", tool: "bash"|"write"|..., callID: "...", state: { status, input, output } } }
9
+ */
10
+ export function parseOpencodeEvent(timestamp, parsed) {
11
+ const type = parsed.type;
12
+ if (type === 'text') {
13
+ const part = parsed.part;
14
+ const text = part?.text;
15
+ if (!text)
16
+ return [];
17
+ return [{ timestamp, type: 'text', content: text }];
18
+ }
19
+ if (type === 'tool_use') {
20
+ const part = parsed.part;
21
+ if (!part)
22
+ return [];
23
+ const tool = String(part.tool || '');
24
+ const toolUseId = String(part.callID || '');
25
+ const state = part.state;
26
+ const status = String(state?.status || '');
27
+ const input = state?.input;
28
+ const inputStr = extractToolInput(input);
29
+ const entries = [
30
+ { timestamp, type: 'tool_use', toolName: tool, toolUseId, toolInput: inputStr },
31
+ ];
32
+ if (status === 'completed' && state?.output !== undefined) {
33
+ const output = state.output;
34
+ const outputStr = typeof output === 'string' ? output : JSON.stringify(output);
35
+ entries.push({ timestamp, type: 'tool_result', toolUseId, resultPreview: outputStr, isError: false });
36
+ }
37
+ else if (status === 'error') {
38
+ entries.push({
39
+ timestamp,
40
+ type: 'tool_result',
41
+ toolUseId,
42
+ resultPreview: String(state?.error || 'tool error'),
43
+ isError: true,
44
+ });
45
+ }
46
+ return entries;
47
+ }
48
+ // step_start, step_finish: skip (usage is extracted by parse-usage.ts)
49
+ return [];
50
+ }
51
+ /**
52
+ * Extract a human-friendly string from OpenCode tool input.
53
+ *
54
+ * Matches Claude/Gemini parser behaviour:
55
+ * - bash-like → input.command ("mkdir -p /tmp/foo")
56
+ * - file tools → input.filePath ("/tmp/foo/bar.ts")
57
+ * - otherwise → JSON.stringify fallback
58
+ */
59
+ function extractToolInput(input) {
60
+ if (typeof input === 'string')
61
+ return input;
62
+ if (!input || typeof input !== 'object')
63
+ return JSON.stringify(input ?? {});
64
+ const obj = input;
65
+ if (obj.command)
66
+ return String(obj.command);
67
+ if (obj.filePath)
68
+ return String(obj.filePath);
69
+ if (obj.pattern)
70
+ return String(obj.pattern);
71
+ return JSON.stringify(obj);
72
+ }
73
+ //# sourceMappingURL=opencode.parser.js.map
@@ -0,0 +1,53 @@
1
+ /**
2
+ * parseStdoutEvent — routes a single stdout JSONL event to the appropriate provider parser.
3
+ * Returns TaskLogEntry[] (may be empty if event is not recognized or irrelevant).
4
+ */
5
+ import { parseClaudeEvent } from './claude.parser';
6
+ import { parseCopilotEvent } from './copilot.parser';
7
+ import { parseCodexEvent } from './codex.parser';
8
+ import { parseGeminiEvent } from './gemini.parser';
9
+ import { parseOpencodeEvent } from './opencode.parser';
10
+ export function parseStdoutEvent(timestamp, message) {
11
+ let parsed;
12
+ try {
13
+ parsed = JSON.parse(message);
14
+ }
15
+ catch {
16
+ return [];
17
+ }
18
+ const type = parsed.type;
19
+ if (!type)
20
+ return [];
21
+ // Claude stream-json (system event excluded — meta event)
22
+ if (type === 'assistant' || type === 'user') {
23
+ return parseClaudeEvent(timestamp, parsed);
24
+ }
25
+ // Copilot json — assistant.* check must precede Gemini "message" check
26
+ if (type.startsWith('tool.execution') || type.startsWith('assistant.') || type === 'user.message') {
27
+ return parseCopilotEvent(timestamp, parsed);
28
+ }
29
+ // Codex experimental-json
30
+ if (type.startsWith('item.') || type.startsWith('turn.') || type.startsWith('thread.')) {
31
+ return parseCodexEvent(timestamp, parsed);
32
+ }
33
+ // Gemini stream-json — tool_use/tool_result routed by structure below
34
+ if (type === 'message' || type === 'init') {
35
+ return parseGeminiEvent(timestamp, parsed);
36
+ }
37
+ // tool_use / tool_result: disambiguate by schema structure.
38
+ // OpenCode has a `part` object; Gemini is flat (tool_name, parameters).
39
+ if (type === 'tool_use' || type === 'tool_result') {
40
+ if (parsed.part && typeof parsed.part === 'object') {
41
+ return parseOpencodeEvent(timestamp, parsed);
42
+ }
43
+ return parseGeminiEvent(timestamp, parsed);
44
+ }
45
+ // OpenCode stream-json (--format json)
46
+ // Note: 'text' is a generic name but not used by any other provider currently.
47
+ // 'step_start' and 'step_finish' are OpenCode-specific.
48
+ if (type === 'text' || type === 'step_start' || type === 'step_finish') {
49
+ return parseOpencodeEvent(timestamp, parsed);
50
+ }
51
+ return [];
52
+ }
53
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1,80 @@
1
+ /**
2
+ * BrowserFsAdapter — IFsAdapter implementation for browser environments.
3
+ *
4
+ * Uses localStorage as the backing store with a key-prefix namespace.
5
+ * Paths are normalized to forward-slash POSIX style.
6
+ *
7
+ * Usage:
8
+ * const fs = new BrowserFsAdapter();
9
+ * // Pre-load content before using with DocumentLoader:
10
+ * fs.setItem('/docs/guide.md', '# Guide\n...');
11
+ */
12
+ const DEFAULT_PREFIX = 'crewx:fs:';
13
+ export class BrowserFsAdapter {
14
+ prefix;
15
+ store;
16
+ /**
17
+ * @param options.prefix - localStorage key prefix (default: 'crewx:fs:')
18
+ * @param options.storage - optional external storage map (defaults to an in-memory Map;
19
+ * pass a localStorage-backed wrapper for persistence)
20
+ */
21
+ constructor(options) {
22
+ this.prefix = options?.prefix ?? DEFAULT_PREFIX;
23
+ this.store = options?.storage ?? new Map();
24
+ }
25
+ async readFile(path) {
26
+ const key = this.toKey(path);
27
+ const content = this.store.get(key);
28
+ if (content === undefined) {
29
+ throw new Error(`BrowserFsAdapter: file not found: ${path}`);
30
+ }
31
+ return content;
32
+ }
33
+ async exists(path) {
34
+ return this.store.has(this.toKey(path));
35
+ }
36
+ resolvePath(...segments) {
37
+ // Simple POSIX-style path joining (no true "resolve" since there's no cwd)
38
+ const joined = segments
39
+ .map(s => s.replace(/\\/g, '/'))
40
+ .join('/')
41
+ .replace(/\/+/g, '/');
42
+ // Normalize . and .. segments
43
+ const parts = joined.split('/');
44
+ const resolved = [];
45
+ for (const part of parts) {
46
+ if (part === '.' || part === '')
47
+ continue;
48
+ if (part === '..') {
49
+ resolved.pop();
50
+ }
51
+ else {
52
+ resolved.push(part);
53
+ }
54
+ }
55
+ const result = resolved.join('/');
56
+ return joined.startsWith('/') ? `/${result}` : result;
57
+ }
58
+ isAbsolute(path) {
59
+ return path.startsWith('/');
60
+ }
61
+ // ── Browser-specific helpers ───────────────────────────────────────────────
62
+ /** Store a virtual file for later reading. */
63
+ setItem(path, content) {
64
+ this.store.set(this.toKey(path), content);
65
+ }
66
+ /** Remove a virtual file. */
67
+ removeItem(path) {
68
+ this.store.delete(this.toKey(path));
69
+ }
70
+ /** List all stored virtual file paths. */
71
+ keys() {
72
+ return Array.from(this.store.keys())
73
+ .filter(k => k.startsWith(this.prefix))
74
+ .map(k => k.slice(this.prefix.length));
75
+ }
76
+ toKey(path) {
77
+ return `${this.prefix}${path.replace(/\\/g, '/')}`;
78
+ }
79
+ }
80
+ //# sourceMappingURL=BrowserFsAdapter.js.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IFsAdapter.js.map
@@ -0,0 +1,34 @@
1
+ /**
2
+ * NodeFsAdapter — default IFsAdapter implementation using Node.js fs/path.
3
+ *
4
+ * This is the concrete adapter used in CLI and server contexts.
5
+ * Full platform abstraction (WEB, browser) is deferred to a future round.
6
+ */
7
+ import { readFile, access } from 'fs/promises';
8
+ import { resolve, join, isAbsolute } from 'path';
9
+ export class NodeFsAdapter {
10
+ async readFile(path) {
11
+ return readFile(path, 'utf-8');
12
+ }
13
+ async exists(path) {
14
+ try {
15
+ await access(path);
16
+ return true;
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ }
22
+ resolvePath(...segments) {
23
+ if (segments.length === 1) {
24
+ return resolve(segments[0]);
25
+ }
26
+ return resolve(join(...segments));
27
+ }
28
+ isAbsolute(path) {
29
+ return isAbsolute(path);
30
+ }
31
+ }
32
+ /** Singleton default adapter for convenience in CLI usage. */
33
+ export const defaultFsAdapter = new NodeFsAdapter();
34
+ //# sourceMappingURL=NodeFsAdapter.js.map
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Plugin Provider Runtime
3
+ *
4
+ * Implements ProviderRuntime for `type: plugin` providers in crewx.yaml.
5
+ * Wraps an arbitrary CLI tool as a CrewX agent via child_process.spawn (shell: false).
6
+ *
7
+ * Symmetric to remote/remote-provider.ts — registered as the `plugin` namespace factory.
8
+ */
9
+ import { spawn } from 'child_process';
10
+ import { ProviderError } from '../provider/bridge.js';
11
+ /**
12
+ * ProviderRuntime implementation for plugin (CLI-wrapped) providers.
13
+ *
14
+ * Created by the `plugin` namespace factory when `createProvider('plugin/mock')` is called.
15
+ * Spawns the configured CLI with args derived from query_args/execute_args,
16
+ * applies `{model}` substitution, and routes the prompt via args or stdin.
17
+ */
18
+ export class PluginProviderRuntime {
19
+ config;
20
+ providerStr;
21
+ constructor(id, config) {
22
+ this.config = config;
23
+ this.providerStr = `plugin/${id}`;
24
+ // Validate at construction time (fail early, not at call time)
25
+ validateCliCommand(config.cli_command);
26
+ validateCliArgs(config.query_args);
27
+ validateCliArgs(config.execute_args);
28
+ if (config.error_patterns)
29
+ validateErrorPatterns(config.error_patterns);
30
+ if (config.env)
31
+ validateEnv(config.env);
32
+ }
33
+ async query(message, options) {
34
+ const model = options?.model ?? this.config.default_model ?? 'default';
35
+ const args = resolveArgs(this.config.query_args, model, message, this.config.prompt_in_args);
36
+ const stdinMessage = this.config.prompt_in_args ? undefined : message;
37
+ options?.onCommand?.(`${this.config.cli_command} ${args.join(' ')}`);
38
+ const timeoutMs = this.config.timeout?.query ?? 600000;
39
+ return this.runProcess(args, options, stdinMessage, timeoutMs);
40
+ }
41
+ async execute(message, options) {
42
+ const model = options?.model ?? this.config.default_model ?? 'default';
43
+ const args = resolveArgs(this.config.execute_args, model, message, this.config.prompt_in_args);
44
+ const stdinMessage = this.config.prompt_in_args ? undefined : message;
45
+ options?.onCommand?.(`${this.config.cli_command} ${args.join(' ')}`);
46
+ const timeoutMs = this.config.timeout?.execute ?? 600000;
47
+ return this.runProcess(args, options, stdinMessage, timeoutMs);
48
+ }
49
+ runProcess(args, options, stdinMessage, timeoutMs) {
50
+ return new Promise((resolve, reject) => {
51
+ // Merge env: process.env is the base; config.env values are added on top.
52
+ // Never replaces process.env — only extends it.
53
+ const mergedEnv = {
54
+ ...process.env,
55
+ ...(this.config.env ?? {}),
56
+ };
57
+ const proc = spawn(this.config.cli_command, args, {
58
+ env: mergedEnv,
59
+ shell: false, // Security: no shell interpolation
60
+ stdio: ['pipe', 'pipe', 'pipe'],
61
+ });
62
+ // Write prompt to stdin when prompt_in_args is false
63
+ if (stdinMessage !== undefined) {
64
+ proc.stdin.write(stdinMessage);
65
+ proc.stdin.end();
66
+ }
67
+ else {
68
+ proc.stdin.end();
69
+ }
70
+ if (proc.pid !== undefined) {
71
+ options?.onPid?.(proc.pid);
72
+ }
73
+ let stdout = '';
74
+ let stderr = '';
75
+ let stdoutBuf = '';
76
+ let stderrBuf = '';
77
+ proc.stdout.on('data', (chunk) => {
78
+ const str = chunk.toString();
79
+ stdout += str;
80
+ stdoutBuf += str;
81
+ const lines = stdoutBuf.split('\n');
82
+ stdoutBuf = lines.pop() ?? '';
83
+ for (const line of lines) {
84
+ if (line.trim())
85
+ options?.onOutput?.(line, 'stdout');
86
+ }
87
+ });
88
+ proc.stderr.on('data', (chunk) => {
89
+ const str = chunk.toString();
90
+ stderr += str;
91
+ stderrBuf += str;
92
+ const lines = stderrBuf.split('\n');
93
+ stderrBuf = lines.pop() ?? '';
94
+ for (const line of lines) {
95
+ if (line.trim())
96
+ options?.onOutput?.(line, 'stderr');
97
+ }
98
+ });
99
+ // Hard timeout — terminate and reject if exceeded
100
+ const timeoutHandle = setTimeout(() => {
101
+ proc.kill('SIGTERM');
102
+ reject(new ProviderError(`Plugin provider "${this.providerStr}" timed out after ${timeoutMs}ms`, this.providerStr));
103
+ }, timeoutMs);
104
+ proc.on('error', (err) => {
105
+ clearTimeout(timeoutHandle);
106
+ if (err.code === 'ENOENT') {
107
+ const hint = this.config.not_installed_message
108
+ ?? `CLI command "${this.config.cli_command}" not found. Is ${this.config.id} installed?`;
109
+ reject(new ProviderError(hint, this.providerStr));
110
+ }
111
+ else {
112
+ reject(new ProviderError(`Spawn error: ${err.message}`, this.providerStr));
113
+ }
114
+ });
115
+ proc.on('close', (code) => {
116
+ clearTimeout(timeoutHandle);
117
+ // Flush residual buffered content (no trailing newline)
118
+ if (stdoutBuf.trim())
119
+ options?.onOutput?.(stdoutBuf, 'stdout');
120
+ if (stderrBuf.trim())
121
+ options?.onOutput?.(stderrBuf, 'stderr');
122
+ const exitCode = code ?? 0;
123
+ options?.onExitCode?.(exitCode);
124
+ // Check configured error patterns before exit code
125
+ if (this.config.error_patterns) {
126
+ const combined = stderr || stdout;
127
+ for (const ep of this.config.error_patterns) {
128
+ if (combined.includes(ep.pattern)) {
129
+ reject(new ProviderError(ep.message, this.providerStr));
130
+ return;
131
+ }
132
+ }
133
+ }
134
+ if (code !== 0) {
135
+ reject(new ProviderError(`Process exited with code ${code}: ${stderr.slice(0, 500)}`, this.providerStr));
136
+ return;
137
+ }
138
+ resolve(stdout.trim());
139
+ });
140
+ });
141
+ }
142
+ }
143
+ // ── Factory ─────────────────────────────────────────────────────────────────
144
+ /**
145
+ * Create a provider factory function for the `plugin` namespace.
146
+ *
147
+ * @param pluginConfigs - Map of plugin provider ID → config (from crewx.yaml `providers:` section)
148
+ * @returns ProviderFactory to register via registerProviderFactory('plugin', factory)
149
+ */
150
+ export function createPluginProviderFactory(pluginConfigs) {
151
+ return (id, _providerStr) => {
152
+ const config = pluginConfigs.get(id);
153
+ if (!config) {
154
+ throw new ProviderError(`Plugin provider "${id}" not found. Available: ${Array.from(pluginConfigs.keys()).join(', ') || '(none)'}`, `plugin/${id}`);
155
+ }
156
+ return new PluginProviderRuntime(id, config);
157
+ };
158
+ }
159
+ // ── Helpers ─────────────────────────────────────────────────────────────────
160
+ /**
161
+ * Build the final args array for a CLI invocation:
162
+ * 1. Replace `{model}` placeholders in each arg.
163
+ * 2. If promptInArgs is true, append the prompt as a positional argument.
164
+ */
165
+ function resolveArgs(templateArgs, model, prompt, promptInArgs) {
166
+ const args = templateArgs.map(arg => arg.replace(/\{model\}/g, model));
167
+ if (promptInArgs) {
168
+ args.push(prompt);
169
+ }
170
+ return args;
171
+ }
172
+ // ── Validation ───────────────────────────────────────────────────────────────
173
+ function validateCliCommand(cliCommand) {
174
+ if (!cliCommand || typeof cliCommand !== 'string') {
175
+ throw new Error('Plugin provider requires a cli_command');
176
+ }
177
+ }
178
+ function validateCliArgs(args) {
179
+ if (!Array.isArray(args)) {
180
+ throw new Error('CLI arguments must be an array');
181
+ }
182
+ for (const arg of args) {
183
+ if (typeof arg !== 'string') {
184
+ throw new Error('Each CLI argument must be a string');
185
+ }
186
+ }
187
+ }
188
+ function validateErrorPatterns(patterns) {
189
+ for (const { pattern } of patterns) {
190
+ if (typeof pattern !== 'string') {
191
+ throw new Error('Error pattern must be a string');
192
+ }
193
+ }
194
+ }
195
+ function validateEnv(env) {
196
+ for (const [key, value] of Object.entries(env)) {
197
+ if (typeof key !== 'string' || typeof value !== 'string') {
198
+ throw new Error('env entries must be string key/value pairs');
199
+ }
200
+ }
201
+ }
202
+ //# sourceMappingURL=plugin-provider.js.map
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Plugin Provider Types
3
+ *
4
+ * Configuration for `type: plugin` providers in crewx.yaml.
5
+ * Plugin providers wrap arbitrary CLI tools as CrewX agents.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,25 @@
1
+ /**
2
+ * CrewxPlugin — base class for SDK plugins.
3
+ *
4
+ * Plugins subscribe to Crewx events in attach() and clean up in detach().
5
+ * Register via Crewx.use(plugin).
6
+ *
7
+ * @example
8
+ * class MyPlugin extends CrewxPlugin {
9
+ * readonly name = 'my-plugin';
10
+ * attach(crewx: Crewx) {
11
+ * crewx.on('task:start', (e) => console.log(e.traceId));
12
+ * }
13
+ * }
14
+ * await crewx.use(new MyPlugin());
15
+ */
16
+ export class CrewxPlugin {
17
+ /**
18
+ * Called on Crewx.close() in LIFO order.
19
+ * Remove event listeners and release resources here.
20
+ * Default: no-op.
21
+ */
22
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
23
+ detach(_crewx) { }
24
+ }
25
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Browser-safe provider bridge.
3
+ * Registry pattern only — no child_process / CLI spawn.
4
+ */
5
+ export class ProviderError extends Error {
6
+ providerStr;
7
+ constructor(message, providerStr) {
8
+ super(message);
9
+ this.providerStr = providerStr;
10
+ this.name = 'ProviderError';
11
+ }
12
+ }
13
+ // ── Provider factory registry ───────────────────────────────────────────────
14
+ const _providerFactories = new Map();
15
+ /**
16
+ * Register a provider factory for a given namespace.
17
+ *
18
+ * @example
19
+ * registerProviderFactory('api', (id, providerStr) => ({
20
+ * async query(message, options) { ... },
21
+ * async execute(message, options) { ... },
22
+ * }));
23
+ */
24
+ export function registerProviderFactory(namespace, factory) {
25
+ _providerFactories.set(namespace, factory);
26
+ }
27
+ /**
28
+ * Create a provider runtime for the given provider string.
29
+ * Browser version — only supports registered factories (no CLI fallback).
30
+ */
31
+ export function createProvider(providerStr) {
32
+ const parts = providerStr.split('/');
33
+ if (parts.length !== 2) {
34
+ throw new ProviderError(`Invalid provider format: "${providerStr}". Expected namespace/id (e.g., api/webllm)`, providerStr);
35
+ }
36
+ const [namespace, id] = parts;
37
+ const factory = _providerFactories.get(namespace);
38
+ if (factory) {
39
+ return factory(id, providerStr);
40
+ }
41
+ throw new ProviderError(`Unsupported provider namespace: "${namespace}". Register a factory with registerProviderFactory('${namespace}', factory).`, providerStr);
42
+ }
43
+ //# sourceMappingURL=bridge.browser.js.map