@hexabot-ai/api 3.2.2-alpha.9 → 3.2.2-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/dist/actions/actions.service.d.ts +1 -0
  2. package/dist/actions/actions.service.js +19 -1
  3. package/dist/actions/actions.service.js.map +1 -1
  4. package/dist/actions/types.d.ts +3 -1
  5. package/dist/app.controller.d.ts +1 -0
  6. package/dist/app.controller.js +1 -0
  7. package/dist/app.controller.js.map +1 -1
  8. package/dist/app.module.js +13 -1
  9. package/dist/app.module.js.map +1 -1
  10. package/dist/config/index.js +14 -2
  11. package/dist/config/index.js.map +1 -1
  12. package/dist/config/types.d.ts +9 -0
  13. package/dist/extensions/actions/ai/agent.action.d.ts +1 -1
  14. package/dist/extensions/actions/ai/agent.action.js +6 -3
  15. package/dist/extensions/actions/ai/agent.action.js.map +1 -1
  16. package/dist/extensions/actions/ai/ai-base.action.d.ts +1 -1
  17. package/dist/extensions/actions/ai/ai-base.action.js +18 -5
  18. package/dist/extensions/actions/ai/ai-base.action.js.map +1 -1
  19. package/dist/extensions/actions/ai/generate-object.base.action.d.ts +1 -1
  20. package/dist/extensions/actions/ai/generate-object.base.action.js +3 -2
  21. package/dist/extensions/actions/ai/generate-object.base.action.js.map +1 -1
  22. package/dist/extensions/actions/ai/generate-text.base.action.d.ts +1 -1
  23. package/dist/extensions/actions/ai/generate-text.base.action.js +3 -2
  24. package/dist/extensions/actions/ai/generate-text.base.action.js.map +1 -1
  25. package/dist/extensions/actions/ai/mcp.binding.js +2 -0
  26. package/dist/extensions/actions/ai/mcp.binding.js.map +1 -1
  27. package/dist/extensions/actions/ai/memory.binding.js +2 -0
  28. package/dist/extensions/actions/ai/memory.binding.js.map +1 -1
  29. package/dist/extensions/actions/ai/retrieve-content-rag.action.js +2 -0
  30. package/dist/extensions/actions/ai/retrieve-content-rag.action.js.map +1 -1
  31. package/dist/extensions/actions/messaging/list.action.d.ts +2 -2
  32. package/dist/extensions/actions/messaging/list.action.js +7 -0
  33. package/dist/extensions/actions/messaging/list.action.js.map +1 -1
  34. package/dist/extensions/actions/subscriber/update-labels.action.js +3 -0
  35. package/dist/extensions/actions/subscriber/update-labels.action.js.map +1 -1
  36. package/dist/extensions/actions/web/http-request.action.js +12 -1
  37. package/dist/extensions/actions/web/http-request.action.js.map +1 -1
  38. package/dist/extensions/actions/workflow/call-workflow.action.d.ts +19 -0
  39. package/dist/extensions/actions/workflow/call-workflow.action.js +83 -0
  40. package/dist/extensions/actions/workflow/call-workflow.action.js.map +1 -0
  41. package/dist/extensions/actions/workflow/i18n/en.translations.json +9 -0
  42. package/dist/extensions/actions/workflow/i18n/fr.translations.json +9 -0
  43. package/dist/extensions/index.d.ts +1 -0
  44. package/dist/extensions/index.js +1 -0
  45. package/dist/extensions/index.js.map +1 -1
  46. package/dist/index.d.ts +1 -0
  47. package/dist/index.js +1 -0
  48. package/dist/index.js.map +1 -1
  49. package/dist/mcp/controllers/mcp-token.controller.d.ts +47 -0
  50. package/dist/mcp/controllers/mcp-token.controller.js +70 -0
  51. package/dist/mcp/controllers/mcp-token.controller.js.map +1 -0
  52. package/dist/mcp/decorators/mcp-permission.decorator.d.ts +8 -0
  53. package/dist/mcp/decorators/mcp-permission.decorator.js +11 -0
  54. package/dist/mcp/decorators/mcp-permission.decorator.js.map +1 -0
  55. package/dist/mcp/dto/mcp-token.dto.d.ts +17 -0
  56. package/dist/mcp/dto/mcp-token.dto.js +40 -0
  57. package/dist/mcp/dto/mcp-token.dto.js.map +1 -0
  58. package/dist/mcp/entities/mcp-token.entity.d.ts +111 -0
  59. package/dist/mcp/entities/mcp-token.entity.js +69 -0
  60. package/dist/mcp/entities/mcp-token.entity.js.map +1 -0
  61. package/dist/mcp/guards/hexabot-mcp-token.guard.d.ts +9 -0
  62. package/dist/mcp/guards/hexabot-mcp-token.guard.js +49 -0
  63. package/dist/mcp/guards/hexabot-mcp-token.guard.js.map +1 -0
  64. package/dist/mcp/guards/mcp-permission.guard.d.ts +9 -0
  65. package/dist/mcp/guards/mcp-permission.guard.js +47 -0
  66. package/dist/mcp/guards/mcp-permission.guard.js.map +1 -0
  67. package/dist/mcp/mcp-api.module.d.ts +2 -0
  68. package/dist/mcp/mcp-api.module.js +65 -0
  69. package/dist/mcp/mcp-api.module.js.map +1 -0
  70. package/dist/mcp/repositories/mcp-token.repository.d.ts +8 -0
  71. package/dist/mcp/repositories/mcp-token.repository.js +41 -0
  72. package/dist/mcp/repositories/mcp-token.repository.js.map +1 -0
  73. package/dist/mcp/services/mcp-token.service.d.ts +24 -0
  74. package/dist/mcp/services/mcp-token.service.js +106 -0
  75. package/dist/mcp/services/mcp-token.service.js.map +1 -0
  76. package/dist/mcp/tools/catalog-mcp.tools.d.ts +63 -0
  77. package/dist/mcp/tools/catalog-mcp.tools.js +135 -0
  78. package/dist/mcp/tools/catalog-mcp.tools.js.map +1 -0
  79. package/dist/mcp/tools/cms-mcp.tools.d.ts +128 -0
  80. package/dist/mcp/tools/cms-mcp.tools.js +242 -0
  81. package/dist/mcp/tools/cms-mcp.tools.js.map +1 -0
  82. package/dist/mcp/tools/credential-mcp.tools.d.ts +19 -0
  83. package/dist/mcp/tools/credential-mcp.tools.js +82 -0
  84. package/dist/mcp/tools/credential-mcp.tools.js.map +1 -0
  85. package/dist/mcp/tools/hexabot-mcp-tool.base.d.ts +22 -0
  86. package/dist/mcp/tools/hexabot-mcp-tool.base.js +48 -0
  87. package/dist/mcp/tools/hexabot-mcp-tool.base.js.map +1 -0
  88. package/dist/mcp/tools/hexabot-mcp.schemas.d.ts +41 -0
  89. package/dist/mcp/tools/hexabot-mcp.schemas.js +36 -0
  90. package/dist/mcp/tools/hexabot-mcp.schemas.js.map +1 -0
  91. package/dist/mcp/tools/hexabot-mcp.tools.d.ts +1 -0
  92. package/dist/mcp/tools/hexabot-mcp.tools.js +18 -0
  93. package/dist/mcp/tools/hexabot-mcp.tools.js.map +1 -0
  94. package/dist/mcp/tools/hexabot-mcp.utils.d.ts +2 -0
  95. package/dist/mcp/tools/hexabot-mcp.utils.js +21 -0
  96. package/dist/mcp/tools/hexabot-mcp.utils.js.map +1 -0
  97. package/dist/mcp/tools/index.d.ts +22 -0
  98. package/dist/mcp/tools/index.js +50 -0
  99. package/dist/mcp/tools/index.js.map +1 -0
  100. package/dist/mcp/tools/mcp-server-mcp.tools.d.ts +77 -0
  101. package/dist/mcp/tools/mcp-server-mcp.tools.js +130 -0
  102. package/dist/mcp/tools/mcp-server-mcp.tools.js.map +1 -0
  103. package/dist/mcp/tools/memory-definition-mcp.tools.d.ts +57 -0
  104. package/dist/mcp/tools/memory-definition-mcp.tools.js +128 -0
  105. package/dist/mcp/tools/memory-definition-mcp.tools.js.map +1 -0
  106. package/dist/mcp/tools/workflow-mcp.helper.d.ts +156 -0
  107. package/dist/mcp/tools/workflow-mcp.helper.js +128 -0
  108. package/dist/mcp/tools/workflow-mcp.helper.js.map +1 -0
  109. package/dist/mcp/tools/workflow-mcp.tools.d.ts +790 -0
  110. package/dist/mcp/tools/workflow-mcp.tools.js +227 -0
  111. package/dist/mcp/tools/workflow-mcp.tools.js.map +1 -0
  112. package/dist/mcp/tools/workflow-run-mcp.tools.d.ts +349 -0
  113. package/dist/mcp/tools/workflow-run-mcp.tools.js +242 -0
  114. package/dist/mcp/tools/workflow-run-mcp.tools.js.map +1 -0
  115. package/dist/mcp/tools/workflow-version-mcp.tools.d.ts +238 -0
  116. package/dist/mcp/tools/workflow-version-mcp.tools.js +368 -0
  117. package/dist/mcp/tools/workflow-version-mcp.tools.js.map +1 -0
  118. package/dist/mcp/types.d.ts +7 -0
  119. package/dist/mcp/types.js +3 -0
  120. package/dist/mcp/types.js.map +1 -0
  121. package/dist/static/assets/{browser-ponyfill-Qk7qpw-i.js → browser-ponyfill-AQYxeOz6.js} +1 -1
  122. package/dist/static/assets/{cssMode-CdhvY6oD.js → cssMode-CU7XHFDD.js} +1 -1
  123. package/dist/static/assets/{freemarker2-BPoURZH1.js → freemarker2-DA_oH4Qs.js} +1 -1
  124. package/dist/static/assets/{handlebars-C4oubER1.js → handlebars-DXFzBSlw.js} +1 -1
  125. package/dist/static/assets/{html-CDE5RgVN.js → html-CnQNXujK.js} +1 -1
  126. package/dist/static/assets/{htmlMode-C8edIUUq.js → htmlMode-BpX8KTMR.js} +1 -1
  127. package/dist/static/assets/{index-C1NxBXuS.js → index-BIqNbcu4.js} +2379 -2330
  128. package/dist/static/assets/{index-BI1BtkYv.css → index-D-b9KTZd.css} +1 -1
  129. package/dist/static/assets/{javascript-Wp5m7adK.js → javascript-DeoOxUBN.js} +1 -1
  130. package/dist/static/assets/{jsonMode-0eww5Srr.js → jsonMode-YGmaNoOG.js} +1 -1
  131. package/dist/static/assets/{liquid-DTktXITv.js → liquid-K6wF5n3k.js} +1 -1
  132. package/dist/static/assets/{lspLanguageFeatures-BzIRlKhn.js → lspLanguageFeatures-DFIoRPyQ.js} +1 -1
  133. package/dist/static/assets/{mdx-D508emqD.js → mdx-CWEgpRjI.js} +1 -1
  134. package/dist/static/assets/{python-BfhIq2kX.js → python-22vBz2Ov.js} +1 -1
  135. package/dist/static/assets/{razor-C7F8fOds.js → razor-CEUwDwv_.js} +1 -1
  136. package/dist/static/assets/{tsMode-B8zPu6Wl.js → tsMode-kpHfzhoP.js} +1 -1
  137. package/dist/static/assets/{typescript-Dew3VavZ.js → typescript-PCkEoDOe.js} +1 -1
  138. package/dist/static/assets/{xml-B_2tc6Mh.js → xml-OzOqd-hy.js} +1 -1
  139. package/dist/static/assets/{yaml-pHcw4KrS.js → yaml-B3P_vvCy.js} +1 -1
  140. package/dist/static/index.html +2 -2
  141. package/dist/static/locales/en/translation.json +89 -4
  142. package/dist/static/locales/fr/translation.json +90 -5
  143. package/dist/transfer/adapters/content-type-transfer.adapter.d.ts +14 -0
  144. package/dist/transfer/adapters/content-type-transfer.adapter.js +102 -0
  145. package/dist/transfer/adapters/content-type-transfer.adapter.js.map +1 -0
  146. package/dist/transfer/adapters/credential-transfer.adapter.d.ts +13 -0
  147. package/dist/transfer/adapters/credential-transfer.adapter.js +110 -0
  148. package/dist/transfer/adapters/credential-transfer.adapter.js.map +1 -0
  149. package/dist/transfer/adapters/label-transfer.adapter.d.ts +15 -0
  150. package/dist/transfer/adapters/label-transfer.adapter.js +189 -0
  151. package/dist/transfer/adapters/label-transfer.adapter.js.map +1 -0
  152. package/dist/transfer/adapters/mcp-server-transfer.adapter.d.ts +16 -0
  153. package/dist/transfer/adapters/mcp-server-transfer.adapter.js +169 -0
  154. package/dist/transfer/adapters/mcp-server-transfer.adapter.js.map +1 -0
  155. package/dist/transfer/adapters/memory-definition-transfer.adapter.d.ts +14 -0
  156. package/dist/transfer/adapters/memory-definition-transfer.adapter.js +111 -0
  157. package/dist/transfer/adapters/memory-definition-transfer.adapter.js.map +1 -0
  158. package/dist/transfer/index.d.ts +7 -0
  159. package/dist/transfer/index.js +24 -0
  160. package/dist/transfer/index.js.map +1 -0
  161. package/dist/transfer/workflow-transfer-adapter.registry.d.ts +27 -0
  162. package/dist/transfer/workflow-transfer-adapter.registry.js +164 -0
  163. package/dist/transfer/workflow-transfer-adapter.registry.js.map +1 -0
  164. package/dist/transfer/workflow-transfer-definition.service.d.ts +40 -0
  165. package/dist/transfer/workflow-transfer-definition.service.js +353 -0
  166. package/dist/transfer/workflow-transfer-definition.service.js.map +1 -0
  167. package/dist/transfer/workflow-transfer-resource-adapter.d.ts +33 -0
  168. package/dist/transfer/workflow-transfer-resource-adapter.js +81 -0
  169. package/dist/transfer/workflow-transfer-resource-adapter.js.map +1 -0
  170. package/dist/transfer/workflow-transfer.controller.d.ts +9 -0
  171. package/dist/transfer/workflow-transfer.controller.js +63 -0
  172. package/dist/transfer/workflow-transfer.controller.js.map +1 -0
  173. package/dist/transfer/workflow-transfer.module.d.ts +2 -0
  174. package/dist/transfer/workflow-transfer.module.js +47 -0
  175. package/dist/transfer/workflow-transfer.module.js.map +1 -0
  176. package/dist/transfer/workflow-transfer.service.d.ts +51 -0
  177. package/dist/transfer/workflow-transfer.service.js +509 -0
  178. package/dist/transfer/workflow-transfer.service.js.map +1 -0
  179. package/dist/transfer/workflow-transfer.types.d.ts +31 -0
  180. package/dist/transfer/workflow-transfer.types.js +35 -0
  181. package/dist/transfer/workflow-transfer.types.js.map +1 -0
  182. package/dist/tsconfig.build.tsbuildinfo +1 -1
  183. package/dist/types/event-emitter.d.ts +12 -5
  184. package/dist/user/dto/user.dto.d.ts +1 -1
  185. package/dist/user/guards/ability.guard.js +12 -2
  186. package/dist/user/guards/ability.guard.js.map +1 -1
  187. package/dist/utils/test/fixtures/label-group.d.ts +1 -1
  188. package/dist/utils/test/fixtures/label.d.ts +1 -1
  189. package/dist/utils/test/fixtures/subscriber.d.ts +1 -1
  190. package/dist/utils/test/fixtures/workflow-run.js +4 -1
  191. package/dist/utils/test/fixtures/workflow-run.js.map +1 -1
  192. package/dist/utils/test/port.d.ts +8 -0
  193. package/dist/utils/test/port.js +34 -0
  194. package/dist/utils/test/port.js.map +1 -0
  195. package/dist/websocket/websocket.gateway.d.ts +2 -1
  196. package/dist/websocket/websocket.gateway.js.map +1 -1
  197. package/dist/workflow/contexts/workflow-runtime.context.d.ts +3 -1
  198. package/dist/workflow/contexts/workflow-runtime.context.js +5 -0
  199. package/dist/workflow/contexts/workflow-runtime.context.js.map +1 -1
  200. package/dist/workflow/controllers/workflow-run.controller.js +2 -0
  201. package/dist/workflow/controllers/workflow-run.controller.js.map +1 -1
  202. package/dist/workflow/dto/workflow-run.dto.d.ts +1 -0
  203. package/dist/workflow/dto/workflow-run.dto.js +11 -0
  204. package/dist/workflow/dto/workflow-run.dto.js.map +1 -1
  205. package/dist/workflow/entities/memory-record.entity.d.ts +2 -0
  206. package/dist/workflow/entities/workflow-run.entity.d.ts +62 -0
  207. package/dist/workflow/entities/workflow-run.entity.js +15 -1
  208. package/dist/workflow/entities/workflow-run.entity.js.map +1 -1
  209. package/dist/workflow/index.d.ts +7 -0
  210. package/dist/workflow/index.js +7 -0
  211. package/dist/workflow/index.js.map +1 -1
  212. package/dist/workflow/repositories/workflow-run.repository.js +7 -1
  213. package/dist/workflow/repositories/workflow-run.repository.js.map +1 -1
  214. package/dist/workflow/resource-refs.d.ts +17 -0
  215. package/dist/workflow/resource-refs.js +15 -0
  216. package/dist/workflow/resource-refs.js.map +1 -0
  217. package/dist/workflow/services/agentic.service.d.ts +9 -2
  218. package/dist/workflow/services/agentic.service.js +142 -19
  219. package/dist/workflow/services/agentic.service.js.map +1 -1
  220. package/dist/workflow/services/workflow-run.service.d.ts +3 -0
  221. package/dist/workflow/services/workflow-run.service.js +75 -3
  222. package/dist/workflow/services/workflow-run.service.js.map +1 -1
  223. package/dist/workflow/services/workflow-version.service.d.ts +2 -0
  224. package/dist/workflow/services/workflow-version.service.js +19 -0
  225. package/dist/workflow/services/workflow-version.service.js.map +1 -1
  226. package/dist/workflow/services/workflow.service.d.ts +13 -9
  227. package/dist/workflow/services/workflow.service.js +64 -35
  228. package/dist/workflow/services/workflow.service.js.map +1 -1
  229. package/dist/workflow/types.d.ts +31 -0
  230. package/dist/workflow/types.js +2 -1
  231. package/dist/workflow/types.js.map +1 -1
  232. package/dist/workflow/workflow.module.js +3 -0
  233. package/dist/workflow/workflow.module.js.map +1 -1
  234. package/package.json +7 -5
  235. package/src/actions/actions.service.ts +34 -4
  236. package/src/actions/types.ts +6 -5
  237. package/src/app.controller.ts +1 -0
  238. package/src/app.module.ts +17 -1
  239. package/src/config/index.ts +17 -2
  240. package/src/config/types.ts +9 -0
  241. package/src/extensions/actions/ai/agent.action.ts +6 -1
  242. package/src/extensions/actions/ai/ai-base.action.ts +39 -5
  243. package/src/extensions/actions/ai/generate-object.base.action.ts +3 -0
  244. package/src/extensions/actions/ai/generate-text.base.action.ts +3 -0
  245. package/src/extensions/actions/ai/mcp.binding.ts +2 -0
  246. package/src/extensions/actions/ai/memory.binding.ts +2 -0
  247. package/src/extensions/actions/ai/retrieve-content-rag.action.ts +2 -0
  248. package/src/extensions/actions/messaging/list.action.ts +7 -0
  249. package/src/extensions/actions/subscriber/update-labels.action.ts +3 -0
  250. package/src/extensions/actions/web/http-request.action.ts +17 -1
  251. package/src/extensions/actions/workflow/call-workflow.action.ts +112 -0
  252. package/src/extensions/actions/workflow/i18n/en.translations.json +9 -0
  253. package/src/extensions/actions/workflow/i18n/fr.translations.json +9 -0
  254. package/src/extensions/index.ts +2 -0
  255. package/src/index.ts +2 -0
  256. package/src/mcp/README.md +277 -0
  257. package/src/mcp/controllers/mcp-token.controller.ts +64 -0
  258. package/src/mcp/decorators/mcp-permission.decorator.ts +23 -0
  259. package/src/mcp/dto/mcp-token.dto.ts +48 -0
  260. package/src/mcp/entities/mcp-token.entity.ts +60 -0
  261. package/src/mcp/guards/hexabot-mcp-token.guard.ts +55 -0
  262. package/src/mcp/guards/mcp-permission.guard.ts +61 -0
  263. package/src/mcp/mcp-api.module.ts +61 -0
  264. package/src/mcp/repositories/mcp-token.repository.ts +34 -0
  265. package/src/mcp/services/mcp-token.service.ts +138 -0
  266. package/src/mcp/tools/catalog-mcp.tools.ts +122 -0
  267. package/src/mcp/tools/cms-mcp.tools.ts +239 -0
  268. package/src/mcp/tools/credential-mcp.tools.ts +81 -0
  269. package/src/mcp/tools/hexabot-mcp-tool.base.ts +74 -0
  270. package/src/mcp/tools/hexabot-mcp.schemas.ts +55 -0
  271. package/src/mcp/tools/hexabot-mcp.tools.ts +7 -0
  272. package/src/mcp/tools/hexabot-mcp.utils.ts +29 -0
  273. package/src/mcp/tools/index.ts +51 -0
  274. package/src/mcp/tools/mcp-server-mcp.tools.ts +135 -0
  275. package/src/mcp/tools/memory-definition-mcp.tools.ts +125 -0
  276. package/src/mcp/tools/workflow-mcp.helper.ts +219 -0
  277. package/src/mcp/tools/workflow-mcp.tools.ts +271 -0
  278. package/src/mcp/tools/workflow-run-mcp.tools.ts +292 -0
  279. package/src/mcp/tools/workflow-version-mcp.tools.ts +459 -0
  280. package/src/mcp/types.ts +14 -0
  281. package/src/transfer/adapters/content-type-transfer.adapter.ts +154 -0
  282. package/src/transfer/adapters/credential-transfer.adapter.ts +158 -0
  283. package/src/transfer/adapters/label-transfer.adapter.ts +291 -0
  284. package/src/transfer/adapters/mcp-server-transfer.adapter.ts +255 -0
  285. package/src/transfer/adapters/memory-definition-transfer.adapter.ts +167 -0
  286. package/src/transfer/index.ts +19 -0
  287. package/src/transfer/workflow-transfer-adapter.registry.ts +250 -0
  288. package/src/transfer/workflow-transfer-definition.service.ts +587 -0
  289. package/src/transfer/workflow-transfer-resource-adapter.ts +132 -0
  290. package/src/transfer/workflow-transfer.controller.ts +86 -0
  291. package/src/transfer/workflow-transfer.module.ts +46 -0
  292. package/src/transfer/workflow-transfer.service.ts +858 -0
  293. package/src/transfer/workflow-transfer.types.ts +98 -0
  294. package/src/user/guards/ability.guard.ts +15 -3
  295. package/src/utils/test/fixtures/workflow-run.ts +4 -1
  296. package/src/utils/test/port.ts +48 -0
  297. package/src/websocket/websocket.gateway.ts +2 -1
  298. package/src/workflow/contexts/workflow-runtime.context.ts +12 -1
  299. package/src/workflow/controllers/workflow-run.controller.ts +2 -0
  300. package/src/workflow/dto/workflow-run.dto.ts +10 -0
  301. package/src/workflow/entities/workflow-run.entity.ts +22 -1
  302. package/src/workflow/index.ts +14 -0
  303. package/src/workflow/repositories/workflow-run.repository.ts +7 -1
  304. package/src/workflow/resource-refs.ts +44 -0
  305. package/src/workflow/services/agentic.service.ts +271 -30
  306. package/src/workflow/services/workflow-run.service.ts +120 -7
  307. package/src/workflow/services/workflow-version.service.ts +33 -0
  308. package/src/workflow/services/workflow.service.ts +86 -31
  309. package/src/workflow/types.ts +52 -0
  310. package/src/workflow/workflow.module.ts +3 -0
  311. package/types/event-emitter.d.ts +12 -5
@@ -0,0 +1,98 @@
1
+ /*
2
+ * Hexabot — Fair Core License (FCL-1.0-ALv2)
3
+ * Copyright (c) 2026 Hexastack.
4
+ * Full terms: see LICENSE.md.
5
+ */
6
+
7
+ import { WorkflowImportResourceResult } from '@hexabot-ai/types';
8
+ import { BadRequestException } from '@nestjs/common';
9
+
10
+ import { BaseOrmEntity } from '@/database/entities/base.entity';
11
+
12
+ /**
13
+ * Workflow transfer persistence contract:
14
+ * - WorkflowTransferService owns the import transaction boundary.
15
+ * - Resource adapters receive EntityManager for transactional writes.
16
+ * - Export reads use owning module services wherever available.
17
+ * - Transfer does not introduce duplicate repositories for owned resources.
18
+ */
19
+
20
+ export const PLACEHOLDER_CREDENTIAL_VALUE =
21
+ '__HEXABOT_IMPORTED_CREDENTIAL_PLACEHOLDER__';
22
+
23
+ export type WorkflowTransferPostCreateEvent<
24
+ Entity extends BaseOrmEntity<any> = BaseOrmEntity<any>,
25
+ > = {
26
+ entityName: string;
27
+ entity: Entity;
28
+ payload: unknown;
29
+ };
30
+
31
+ export type WorkflowTransferImportAdapterResult = {
32
+ idMap: Record<string, string>;
33
+ resources: WorkflowImportResourceResult[];
34
+ warnings: string[];
35
+ postCreateEvents: WorkflowTransferPostCreateEvent[];
36
+ metadata?: Record<string, unknown>;
37
+ };
38
+
39
+ export type WorkflowTransferResourceIdMaps = Record<
40
+ string,
41
+ Record<string, string>
42
+ >;
43
+
44
+ export type ImportedWorkflowTransferResources = {
45
+ bindingIdMaps: WorkflowTransferResourceIdMaps;
46
+ taskIdMaps: WorkflowTransferResourceIdMaps;
47
+ resources: WorkflowImportResourceResult[];
48
+ warnings: string[];
49
+ postCreateEvents: WorkflowTransferPostCreateEvent[];
50
+ };
51
+
52
+ type ResourceActionInput = Omit<WorkflowImportResourceResult, 'localId'> & {
53
+ localId?: string;
54
+ };
55
+
56
+ export const uniqueResourceIds = (ids: string[]): string[] => {
57
+ return Array.from(new Set(ids));
58
+ };
59
+
60
+ export const assertFoundAll = (
61
+ resourceLabel: string,
62
+ expectedIds: string[],
63
+ foundIds: string[],
64
+ ): void => {
65
+ const found = new Set(foundIds);
66
+ const missing = expectedIds.filter((id) => !found.has(id));
67
+ if (missing.length > 0) {
68
+ throw new BadRequestException(
69
+ `Unable to export workflow: missing ${resourceLabel}(s): ${missing.join(
70
+ ', ',
71
+ )}`,
72
+ );
73
+ }
74
+ };
75
+
76
+ export const buildResourceResult = (
77
+ input: ResourceActionInput,
78
+ ): WorkflowImportResourceResult => {
79
+ if (!input.localId) {
80
+ throw new Error(`Missing local ID for imported ${input.kind}`);
81
+ }
82
+
83
+ return {
84
+ kind: input.kind,
85
+ exportId: input.exportId,
86
+ localId: input.localId,
87
+ name: input.name,
88
+ action: input.action,
89
+ };
90
+ };
91
+
92
+ export const buildPostCreateEvent = <Entity extends BaseOrmEntity<any>>(
93
+ entityName: string,
94
+ entity: Entity,
95
+ payload: unknown,
96
+ ): WorkflowTransferPostCreateEvent<Entity> => {
97
+ return { entityName, entity, payload };
98
+ };
@@ -17,6 +17,8 @@ import {
17
17
  import { Reflector } from '@nestjs/core';
18
18
  import { Request } from 'express';
19
19
 
20
+ import { config } from '@/config';
21
+
20
22
  import { TRole } from '../entities/role.entity';
21
23
  import { PermissionService } from '../services/permission.service';
22
24
  import { MethodToAction } from '../types/action.type';
@@ -31,12 +33,20 @@ export class Ability implements CanActivate {
31
33
 
32
34
  async canActivate(context: ExecutionContext): Promise<boolean> {
33
35
  const roles = this.reflector.get<TRole[]>('roles', context.getHandler());
36
+ const { _parsedUrl } = context
37
+ .switchToHttp()
38
+ .getRequest<Request & { _parsedUrl: Url }>();
39
+ const pathname = _parsedUrl.pathname?.replace(`/api`, '');
40
+
41
+ if (config.mcp.enabled && pathname && pathname === '/mcp') {
42
+ return true;
43
+ }
34
44
 
35
45
  if (roles?.includes('public')) {
36
46
  return true;
37
47
  }
38
48
 
39
- const { user, method, _parsedUrl, session } = context
49
+ const { user, method, session } = context
40
50
  .switchToHttp()
41
51
  .getRequest<Request & { user: User; _parsedUrl: Url }>();
42
52
  if (!user) {
@@ -49,11 +59,13 @@ export class Ability implements CanActivate {
49
59
  throw new UnauthorizedException('Session expired');
50
60
  }
51
61
 
62
+ if (config.mcp.enabled && pathname?.startsWith('/mcp-token')) {
63
+ return true;
64
+ }
65
+
52
66
  const roleIds = Array.isArray(user.roles) ? user.roles : [];
53
67
 
54
68
  if (roleIds.length) {
55
- const pathname = _parsedUrl.pathname?.replace(`/api`, '');
56
-
57
69
  if (
58
70
  pathname &&
59
71
  [
@@ -64,6 +64,7 @@ export const workflowRunOrmFixtures: WorkflowRunOrmFixture[] = [
64
64
  workflow: workflowRunWorkflowFixtureId,
65
65
  workflowVersion: workflowRunWorkflowVersionFixtureId,
66
66
  triggeredBy: userFixtureIds.admin,
67
+ parentRun: null,
67
68
  status: 'running',
68
69
  input: { source: 'fixture' },
69
70
  output: null,
@@ -92,6 +93,7 @@ export const workflowRunOrmFixtures: WorkflowRunOrmFixture[] = [
92
93
  workflow: workflowRunWorkflowFixtureId,
93
94
  workflowVersion: workflowRunWorkflowVersionFixtureId,
94
95
  triggeredBy: null,
96
+ parentRun: null,
95
97
  status: 'finished',
96
98
  input: null,
97
99
  output: { result: 'ok' },
@@ -117,7 +119,7 @@ export const workflowRunOrmFixtures: WorkflowRunOrmFixture[] = [
117
119
 
118
120
  const findRunsWithRelations = async (dataSource: DataSource) =>
119
121
  await dataSource.getRepository(WorkflowRunOrmEntity).find({
120
- relations: ['workflow', 'workflowVersion', 'triggeredBy'],
122
+ relations: ['workflow', 'workflowVersion', 'triggeredBy', 'parentRun'],
121
123
  });
122
124
  const ensureWorkflowFixture = async (dataSource: DataSource) => {
123
125
  const workflowRepository = dataSource.getRepository(WorkflowOrmEntity);
@@ -212,6 +214,7 @@ export const installWorkflowRunFixturesTypeOrm = async (
212
214
  ? { id: fixture.workflowVersion }
213
215
  : null,
214
216
  triggeredBy: fixture.triggeredBy ? { id: fixture.triggeredBy } : null,
217
+ parentRun: fixture.parentRun ? { id: fixture.parentRun } : null,
215
218
  status: fixture.status ?? 'idle',
216
219
  input: fixture.input ?? null,
217
220
  output: fixture.output ?? null,
@@ -0,0 +1,48 @@
1
+ /*
2
+ * Hexabot — Fair Core License (FCL-1.0-ALv2)
3
+ * Copyright (c) 2025 Hexastack.
4
+ * Full terms: see LICENSE.md.
5
+ */
6
+
7
+ const DEFAULT_JEST_PORT = 3001;
8
+ const JEST_HOST = '127.0.0.1';
9
+ const parsePort = (value: string | undefined, envName: string): number => {
10
+ if (!value) {
11
+ return DEFAULT_JEST_PORT;
12
+ }
13
+
14
+ if (!/^\d+$/.test(value)) {
15
+ throw new Error(
16
+ `Invalid ${envName} "${value}". Expected a TCP port between 1 and 65535.`,
17
+ );
18
+ }
19
+
20
+ const port = Number(value);
21
+
22
+ if (!Number.isInteger(port) || port < 1 || port > 65535) {
23
+ throw new Error(
24
+ `Invalid ${envName} "${value}". Expected a TCP port between 1 and 65535.`,
25
+ );
26
+ }
27
+
28
+ return port;
29
+ };
30
+
31
+ export const getJestPort = (): number =>
32
+ parsePort(process.env.JEST_PORT, 'JEST_PORT');
33
+
34
+ export const getJestHost = (): string => JEST_HOST;
35
+
36
+ export const getJestBaseUrl = (): string =>
37
+ `http://${getJestHost()}:${getJestPort()}`;
38
+
39
+ export const configureJestNetworkEnv = () => {
40
+ const port = getJestPort();
41
+ const baseUrl = `http://${getJestHost()}:${port}`;
42
+ const apiOrigin = process.env.JEST_API_ORIGIN ?? `${baseUrl}/api`;
43
+
44
+ process.env.PORT = `${port}`;
45
+ process.env.API_ORIGIN = apiOrigin;
46
+
47
+ return { port, baseUrl, apiOrigin };
48
+ };
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  import { type WorkflowEventMap } from '@hexabot-ai/agentic';
8
- import { StdEventType, Subscriber } from '@hexabot-ai/types';
8
+ import { StdEventType, Subscriber, type WorkflowRun } from '@hexabot-ai/types';
9
9
  import { ForbiddenException, Optional } from '@nestjs/common';
10
10
  import { EventEmitter2, OnEvent } from '@nestjs/event-emitter';
11
11
  import {
@@ -69,6 +69,7 @@ export class WebsocketGateway
69
69
  Partial<Pick<WorkflowContextState, 'initiatorId'>> & {
70
70
  workflowId: string;
71
71
  threadId?: string;
72
+ workflowRun?: WorkflowRun;
72
73
  workflowEvent: string;
73
74
  t: number;
74
75
  }): void {
@@ -19,7 +19,12 @@ import { LoggerService } from '@/logger/logger.service';
19
19
  import { SettingService } from '@/setting/services/setting.service';
20
20
  import { CredentialService } from '@/user/services/credential.service';
21
21
  import { cloneObject } from '@/utils/helpers/clone';
22
- import { WorkflowContextState, WorkflowType } from '@/workflow/types';
22
+ import {
23
+ WORKFLOW_CALL_SERVICE,
24
+ WorkflowContextState,
25
+ WorkflowType,
26
+ type WorkflowCallService,
27
+ } from '@/workflow/types';
23
28
 
24
29
  import { TriggerEventWrapper } from '../lib/trigger-event-wrapper';
25
30
  import { McpClientPoolService } from '../services/mcp-client-pool.service';
@@ -64,6 +69,9 @@ export abstract class WorkflowRuntimeContext<
64
69
  @Inject(McpClientPoolService)
65
70
  protected readonly mcp: McpClientPoolService;
66
71
 
72
+ @Inject(WORKFLOW_CALL_SERVICE)
73
+ protected readonly workflowCallService: WorkflowCallService;
74
+
67
75
  public memoryStore: MemoryStore;
68
76
 
69
77
  constructor() {
@@ -82,6 +90,9 @@ export abstract class WorkflowRuntimeContext<
82
90
  actions: this.actionService,
83
91
  credentials: this.credentialService,
84
92
  mcp: this.mcp,
93
+ // Expose the workflow-call contract, not the concrete AgenticService, so
94
+ // contexts do not create a JS import cycle with WorkflowContextFactory.
95
+ agentic: this.workflowCallService,
85
96
  };
86
97
  }
87
98
 
@@ -42,6 +42,7 @@ export class WorkflowRunController extends BaseOrmController<WorkflowRunOrmEntit
42
42
  'workflowVersion.version',
43
43
  'triggeredBy.id',
44
44
  'thread.id',
45
+ 'parentRun.id',
45
46
  'status',
46
47
  'suspendedStep',
47
48
  'suspensionReason',
@@ -76,6 +77,7 @@ export class WorkflowRunController extends BaseOrmController<WorkflowRunOrmEntit
76
77
  'workflowVersion.version',
77
78
  'triggeredBy.id',
78
79
  'thread.id',
80
+ 'parentRun.id',
79
81
  'status',
80
82
  'suspendedStep',
81
83
  'suspensionReason',
@@ -64,6 +64,16 @@ export class WorkflowRunCreateDto {
64
64
  })
65
65
  workflowVersion?: string | null;
66
66
 
67
+ @ApiPropertyOptional({
68
+ description: 'Parent workflow run waiting for this run',
69
+ type: String,
70
+ })
71
+ @IsOptional()
72
+ @IsUUIDv4({
73
+ message: 'Parent workflow run must be a valid UUID',
74
+ })
75
+ parentRun?: string | null;
76
+
67
77
  @ApiPropertyOptional({
68
78
  description: 'Lifecycle status of the run',
69
79
  enum: WORKFLOW_RUN_STATUSES,
@@ -12,7 +12,14 @@ import {
12
12
  type WorkflowSnapshot,
13
13
  } from '@hexabot-ai/agentic';
14
14
  import { workflowRunSchema, workflowRunFullSchema } from '@hexabot-ai/types';
15
- import { Column, Entity, JoinColumn, ManyToOne, RelationId } from 'typeorm';
15
+ import {
16
+ Column,
17
+ Entity,
18
+ Index,
19
+ JoinColumn,
20
+ ManyToOne,
21
+ RelationId,
22
+ } from 'typeorm';
16
23
 
17
24
  import { ThreadOrmEntity } from '@/chat/entities/thread.entity';
18
25
  import { DatetimeColumn } from '@/database/decorators/datetime-column.decorator';
@@ -29,6 +36,7 @@ import { WorkflowVersionOrmEntity } from './workflow-version.entity';
29
36
  import { WorkflowOrmEntity } from './workflow.entity';
30
37
 
31
38
  @Entity({ name: 'workflow_runs' })
39
+ @Index(['parentRun'])
32
40
  export class WorkflowRunOrmEntity extends BaseOrmEntity<WorkflowRunDto> {
33
41
  plainCls = workflowRunSchema;
34
42
 
@@ -86,6 +94,19 @@ export class WorkflowRunOrmEntity extends BaseOrmEntity<WorkflowRunDto> {
86
94
  @RelationId((run: WorkflowRunOrmEntity) => run.thread)
87
95
  private readonly threadId?: string | null;
88
96
 
97
+ /** Parent workflow run that is waiting for this run to return. */
98
+ @ManyToOne(() => WorkflowRunOrmEntity, {
99
+ nullable: true,
100
+ onDelete: 'SET NULL',
101
+ })
102
+ @JoinColumn({ name: 'parent_run_id' })
103
+ @AsRelation()
104
+ parentRun?: WorkflowRunOrmEntity | null;
105
+
106
+ /** Identifier of the parent run (for internal relations). */
107
+ @RelationId((run: WorkflowRunOrmEntity) => run.parentRun)
108
+ private readonly parentRunId?: string | null;
109
+
89
110
  /** Lifecycle status of the run (idle, running, suspended, finished, failed). */
90
111
  @EnumColumn({
91
112
  enum: WORKFLOW_RUN_STATUSES,
@@ -72,4 +72,18 @@ export * from './services/mcp-server.service';
72
72
 
73
73
  export * from './services/mcp-client-pool.service';
74
74
 
75
+ export * from '../transfer/workflow-transfer.module';
76
+
77
+ export * from '../transfer/workflow-transfer.controller';
78
+
79
+ export * from '../transfer/workflow-transfer-definition.service';
80
+
81
+ export * from '../transfer/workflow-transfer-resource-adapter';
82
+
83
+ export * from '../transfer/workflow-transfer-adapter.registry';
84
+
85
+ export * from '../transfer/workflow-transfer.types';
86
+
87
+ export * from '../transfer/workflow-transfer.service';
88
+
75
89
  export * from './defaults/default-workflow';
@@ -23,6 +23,12 @@ export class WorkflowRunRepository extends BaseOrmRepository<WorkflowRunOrmEntit
23
23
  @InjectRepository(WorkflowRunOrmEntity)
24
24
  repository: Repository<WorkflowRunOrmEntity>,
25
25
  ) {
26
- super(repository, ['workflow', 'workflowVersion', 'triggeredBy', 'thread']);
26
+ super(repository, [
27
+ 'workflow',
28
+ 'workflowVersion',
29
+ 'triggeredBy',
30
+ 'thread',
31
+ 'parentRun',
32
+ ]);
27
33
  }
28
34
  }
@@ -0,0 +1,44 @@
1
+ /*
2
+ * Hexabot — Fair Core License (FCL-1.0-ALv2)
3
+ * Copyright (c) 2026 Hexastack.
4
+ * Full terms: see LICENSE.md.
5
+ */
6
+
7
+ import { WORKFLOW_TRANSFER_RESOURCE_KIND_PATTERN } from '@hexabot-ai/types';
8
+
9
+ export type WorkflowResourceRefKind = string;
10
+
11
+ export const WORKFLOW_RESOURCE_REF_METADATA_KEY = 'x-hexabot:resourceRef';
12
+
13
+ export type WorkflowResourceRefMetadata = {
14
+ kind: WorkflowResourceRefKind;
15
+ };
16
+
17
+ export type WorkflowActionResourceRefSource = 'input' | 'settings';
18
+
19
+ export type WorkflowSchemaResourceRefDescriptor = {
20
+ kind: WorkflowResourceRefKind;
21
+ path: string;
22
+ };
23
+
24
+ export type WorkflowActionResourceRefDescriptor =
25
+ WorkflowSchemaResourceRefDescriptor & {
26
+ source: WorkflowActionResourceRefSource;
27
+ };
28
+
29
+ export const workflowResourceRef = (
30
+ kind: WorkflowResourceRefKind,
31
+ ): {
32
+ [WORKFLOW_RESOURCE_REF_METADATA_KEY]: WorkflowResourceRefMetadata;
33
+ } => ({
34
+ [WORKFLOW_RESOURCE_REF_METADATA_KEY]: { kind },
35
+ });
36
+
37
+ export const isWorkflowResourceRefKind = (
38
+ value: unknown,
39
+ ): value is WorkflowResourceRefKind => {
40
+ return (
41
+ typeof value === 'string' &&
42
+ WORKFLOW_TRANSFER_RESOURCE_KIND_PATTERN.test(value)
43
+ );
44
+ };