@pikku/core 0.11.2 → 0.12.1

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 (436) hide show
  1. package/CHANGELOG.md +57 -2
  2. package/dist/crypto-utils.d.ts +2 -0
  3. package/dist/crypto-utils.js +78 -0
  4. package/dist/errors/errors.d.ts +14 -0
  5. package/dist/errors/errors.js +26 -0
  6. package/dist/errors/index.d.ts +1 -1
  7. package/dist/errors/index.js +1 -1
  8. package/dist/function/function-runner.d.ts +10 -4
  9. package/dist/function/function-runner.js +126 -45
  10. package/dist/function/functions.types.d.ts +32 -87
  11. package/dist/function/functions.types.js +16 -46
  12. package/dist/function/index.d.ts +2 -2
  13. package/dist/function/index.js +1 -2
  14. package/dist/handle-error.d.ts +2 -2
  15. package/dist/handle-error.js +3 -12
  16. package/dist/index.d.ts +30 -26
  17. package/dist/index.js +19 -29
  18. package/dist/internal.d.ts +3 -0
  19. package/dist/internal.js +2 -0
  20. package/dist/middleware/auth-apikey.d.ts +2 -2
  21. package/dist/middleware/auth-apikey.js +3 -3
  22. package/dist/middleware/auth-bearer.d.ts +3 -3
  23. package/dist/middleware/auth-bearer.js +4 -7
  24. package/dist/middleware/auth-cookie.d.ts +4 -4
  25. package/dist/middleware/auth-cookie.js +7 -9
  26. package/dist/middleware/cors.d.ts +46 -0
  27. package/dist/middleware/cors.js +81 -0
  28. package/dist/middleware/index.d.ts +5 -3
  29. package/dist/middleware/index.js +5 -3
  30. package/dist/middleware/remote-auth.d.ts +5 -0
  31. package/dist/middleware/remote-auth.js +55 -0
  32. package/dist/middleware/timeout.d.ts +2 -2
  33. package/dist/middleware-runner.d.ts +1 -1
  34. package/dist/middleware-runner.js +8 -10
  35. package/dist/permissions.d.ts +2 -2
  36. package/dist/permissions.js +11 -15
  37. package/dist/pikku-state.d.ts +10 -8
  38. package/dist/pikku-state.js +48 -25
  39. package/dist/schema.d.ts +4 -4
  40. package/dist/schema.js +20 -15
  41. package/dist/services/ai-agent-runner-service.d.ts +43 -0
  42. package/dist/services/ai-agent-runner-service.js +1 -0
  43. package/dist/services/ai-run-state-service.d.ts +13 -0
  44. package/dist/services/ai-run-state-service.js +1 -0
  45. package/dist/services/ai-storage-service.d.ts +18 -0
  46. package/dist/services/ai-storage-service.js +1 -0
  47. package/dist/services/content-service.d.ts +6 -0
  48. package/dist/services/deployment-service.d.ts +19 -0
  49. package/dist/services/deployment-service.js +1 -0
  50. package/dist/services/gopass-secrets.d.ts +47 -0
  51. package/dist/services/gopass-secrets.js +97 -0
  52. package/dist/services/in-memory-ai-run-state-service.d.ts +15 -0
  53. package/dist/services/in-memory-ai-run-state-service.js +44 -0
  54. package/dist/services/in-memory-trigger-service.d.ts +22 -0
  55. package/dist/services/in-memory-trigger-service.js +48 -0
  56. package/dist/services/in-memory-workflow-service.d.ts +59 -0
  57. package/dist/services/in-memory-workflow-service.js +287 -0
  58. package/dist/services/index.d.ts +26 -11
  59. package/dist/services/index.js +11 -13
  60. package/dist/services/local-content.d.ts +2 -1
  61. package/dist/services/local-content.js +6 -1
  62. package/dist/services/local-secrets.d.ts +25 -2
  63. package/dist/services/local-secrets.js +45 -0
  64. package/dist/services/local-variables.d.ts +6 -1
  65. package/dist/services/local-variables.js +18 -0
  66. package/dist/services/logger-console.d.ts +2 -1
  67. package/dist/services/scheduler-service.d.ts +9 -1
  68. package/dist/services/scheduler-service.js +8 -0
  69. package/dist/services/schema-service.d.ts +6 -0
  70. package/dist/services/scoped-secret-service.d.ts +16 -0
  71. package/dist/services/scoped-secret-service.js +35 -0
  72. package/dist/services/secret-service.d.ts +25 -4
  73. package/dist/services/trigger-service.d.ts +16 -0
  74. package/dist/services/trigger-service.js +1 -0
  75. package/dist/services/typed-secret-service.d.ts +30 -0
  76. package/dist/services/typed-secret-service.js +40 -0
  77. package/dist/services/typed-variables-service.d.ts +27 -0
  78. package/dist/services/typed-variables-service.js +46 -0
  79. package/dist/services/user-session-service.d.ts +15 -2
  80. package/dist/services/user-session-service.js +17 -0
  81. package/dist/services/variables-service.d.ts +5 -0
  82. package/dist/services/workflow-service.d.ts +9 -5
  83. package/dist/types/core.types.d.ts +67 -25
  84. package/dist/types/core.types.js +8 -1
  85. package/dist/types/state.types.d.ts +53 -59
  86. package/dist/utils.d.ts +7 -6
  87. package/dist/utils.js +27 -12
  88. package/dist/version.d.ts +6 -0
  89. package/dist/version.js +19 -0
  90. package/dist/wirings/ai-agent/ai-agent-assistant-ui.d.ts +5 -0
  91. package/dist/wirings/ai-agent/ai-agent-assistant-ui.js +146 -0
  92. package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +28 -0
  93. package/dist/wirings/ai-agent/ai-agent-helpers.js +40 -0
  94. package/dist/wirings/ai-agent/ai-agent-memory.d.ts +29 -0
  95. package/dist/wirings/ai-agent/ai-agent-memory.js +199 -0
  96. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +9 -0
  97. package/dist/wirings/ai-agent/ai-agent-model-config.js +36 -0
  98. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +59 -0
  99. package/dist/wirings/ai-agent/ai-agent-prepare.js +348 -0
  100. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +15 -0
  101. package/dist/wirings/ai-agent/ai-agent-registry.js +47 -0
  102. package/dist/wirings/ai-agent/ai-agent-runner.d.ts +3 -0
  103. package/dist/wirings/ai-agent/ai-agent-runner.js +195 -0
  104. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +12 -0
  105. package/dist/wirings/ai-agent/ai-agent-stream.js +662 -0
  106. package/dist/wirings/ai-agent/ai-agent.types.d.ts +313 -0
  107. package/dist/wirings/ai-agent/ai-agent.types.js +1 -0
  108. package/dist/wirings/ai-agent/index.d.ts +7 -0
  109. package/dist/wirings/ai-agent/index.js +6 -0
  110. package/dist/wirings/channel/channel-common.d.ts +8 -5
  111. package/dist/wirings/channel/channel-common.js +15 -8
  112. package/dist/wirings/channel/channel-handler.d.ts +3 -3
  113. package/dist/wirings/channel/channel-handler.js +15 -6
  114. package/dist/wirings/channel/channel-middleware-runner.d.ts +9 -0
  115. package/dist/wirings/channel/channel-middleware-runner.js +73 -0
  116. package/dist/wirings/channel/channel-runner.d.ts +5 -5
  117. package/dist/wirings/channel/channel-runner.js +10 -9
  118. package/dist/wirings/channel/channel-store.d.ts +1 -1
  119. package/dist/wirings/channel/channel.types.d.ts +9 -7
  120. package/dist/wirings/channel/define-channel-routes.d.ts +21 -0
  121. package/dist/wirings/channel/define-channel-routes.js +23 -0
  122. package/dist/wirings/channel/index.d.ts +10 -8
  123. package/dist/wirings/channel/index.js +7 -8
  124. package/dist/wirings/channel/local/index.d.ts +3 -3
  125. package/dist/wirings/channel/local/index.js +3 -3
  126. package/dist/wirings/channel/local/local-channel-runner.d.ts +7 -2
  127. package/dist/wirings/channel/local/local-channel-runner.js +22 -9
  128. package/dist/wirings/channel/local/local-eventhub-service.d.ts +2 -2
  129. package/dist/wirings/channel/log-channels.d.ts +1 -1
  130. package/dist/wirings/channel/pikku-abstract-channel-handler.d.ts +1 -1
  131. package/dist/wirings/channel/serverless/index.d.ts +1 -1
  132. package/dist/wirings/channel/serverless/index.js +1 -1
  133. package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +4 -4
  134. package/dist/wirings/channel/serverless/serverless-channel-runner.js +40 -23
  135. package/dist/wirings/cli/channel/cli-channel-runner.d.ts +1 -1
  136. package/dist/wirings/cli/channel/index.d.ts +1 -1
  137. package/dist/wirings/cli/channel/index.js +1 -1
  138. package/dist/wirings/cli/cli-runner.d.ts +3 -3
  139. package/dist/wirings/cli/cli-runner.js +12 -8
  140. package/dist/wirings/cli/cli.types.d.ts +9 -9
  141. package/dist/wirings/cli/command-parser.d.ts +1 -1
  142. package/dist/wirings/cli/define-cli-commands.d.ts +19 -0
  143. package/dist/wirings/cli/define-cli-commands.js +20 -0
  144. package/dist/wirings/cli/index.d.ts +2 -3
  145. package/dist/wirings/cli/index.js +1 -3
  146. package/dist/wirings/http/http-routes.d.ts +69 -0
  147. package/dist/wirings/http/http-routes.js +139 -0
  148. package/dist/wirings/http/http-runner.d.ts +9 -9
  149. package/dist/wirings/http/http-runner.js +79 -34
  150. package/dist/wirings/http/http.types.d.ts +77 -41
  151. package/dist/wirings/http/index.d.ts +5 -4
  152. package/dist/wirings/http/index.js +4 -3
  153. package/dist/wirings/http/log-http-routes.d.ts +1 -1
  154. package/dist/wirings/http/pikku-fetch-http-request.d.ts +1 -1
  155. package/dist/wirings/http/pikku-fetch-http-response.d.ts +2 -2
  156. package/dist/wirings/http/pikku-fetch-http-response.js +6 -1
  157. package/dist/wirings/http/routers/http-router.d.ts +1 -1
  158. package/dist/wirings/http/routers/path-to-regex.d.ts +2 -2
  159. package/dist/wirings/mcp/index.d.ts +4 -3
  160. package/dist/wirings/mcp/index.js +3 -3
  161. package/dist/wirings/mcp/mcp-endpoint-registry.d.ts +1 -1
  162. package/dist/wirings/mcp/mcp-runner.d.ts +1 -6
  163. package/dist/wirings/mcp/mcp-runner.js +28 -40
  164. package/dist/wirings/mcp/mcp.types.d.ts +5 -5
  165. package/dist/wirings/node/index.d.ts +2 -0
  166. package/dist/wirings/node/index.js +1 -0
  167. package/dist/wirings/node/node.types.d.ts +20 -0
  168. package/dist/wirings/node/node.types.js +1 -0
  169. package/dist/wirings/oauth2/index.d.ts +3 -0
  170. package/dist/wirings/oauth2/index.js +2 -0
  171. package/dist/wirings/oauth2/oauth2-client.d.ts +47 -0
  172. package/dist/wirings/oauth2/oauth2-client.js +267 -0
  173. package/dist/wirings/oauth2/oauth2.types.d.ts +65 -0
  174. package/dist/wirings/oauth2/oauth2.types.js +4 -0
  175. package/dist/wirings/oauth2/wire-oauth2-credential.d.ts +20 -0
  176. package/dist/wirings/oauth2/wire-oauth2-credential.js +21 -0
  177. package/dist/wirings/queue/index.d.ts +1 -1
  178. package/dist/wirings/queue/queue-runner.d.ts +1 -5
  179. package/dist/wirings/queue/queue-runner.js +11 -8
  180. package/dist/wirings/queue/queue.types.d.ts +5 -5
  181. package/dist/wirings/queue/register-queue-helper.d.ts +2 -2
  182. package/dist/wirings/queue/register-queue-helper.js +1 -1
  183. package/dist/wirings/queue/validate-worker-config.d.ts +1 -1
  184. package/dist/wirings/rpc/index.d.ts +3 -1
  185. package/dist/wirings/rpc/index.js +2 -1
  186. package/dist/wirings/rpc/rpc-runner.d.ts +58 -8
  187. package/dist/wirings/rpc/rpc-runner.js +177 -31
  188. package/dist/wirings/rpc/rpc-types.d.ts +20 -4
  189. package/dist/wirings/rpc/wire-addon.d.ts +10 -0
  190. package/dist/wirings/rpc/wire-addon.js +9 -0
  191. package/dist/wirings/scheduler/index.d.ts +2 -2
  192. package/dist/wirings/scheduler/index.js +1 -2
  193. package/dist/wirings/scheduler/log-schedulers.d.ts +1 -1
  194. package/dist/wirings/scheduler/scheduler-runner.d.ts +3 -5
  195. package/dist/wirings/scheduler/scheduler-runner.js +11 -14
  196. package/dist/wirings/scheduler/scheduler.types.d.ts +2 -2
  197. package/dist/wirings/secret/index.d.ts +3 -0
  198. package/dist/wirings/secret/index.js +2 -0
  199. package/dist/wirings/secret/secret.types.d.ts +27 -0
  200. package/dist/wirings/secret/secret.types.js +1 -0
  201. package/dist/wirings/secret/validate-secret-definitions.d.ts +6 -0
  202. package/dist/wirings/secret/validate-secret-definitions.js +55 -0
  203. package/dist/wirings/trigger/index.d.ts +3 -2
  204. package/dist/wirings/trigger/index.js +2 -2
  205. package/dist/wirings/trigger/pikku-trigger-service.d.ts +22 -0
  206. package/dist/wirings/trigger/pikku-trigger-service.js +70 -0
  207. package/dist/wirings/trigger/trigger-runner.d.ts +18 -9
  208. package/dist/wirings/trigger/trigger-runner.js +48 -19
  209. package/dist/wirings/trigger/trigger.types.d.ts +99 -11
  210. package/dist/wirings/trigger/trigger.types.js +40 -1
  211. package/dist/wirings/variable/index.d.ts +3 -0
  212. package/dist/wirings/variable/index.js +2 -0
  213. package/dist/wirings/variable/validate-variable-definitions.d.ts +6 -0
  214. package/dist/wirings/variable/validate-variable-definitions.js +45 -0
  215. package/dist/wirings/variable/variable.types.d.ts +18 -0
  216. package/dist/wirings/variable/variable.types.js +1 -0
  217. package/dist/wirings/workflow/dsl/index.d.ts +1 -1
  218. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +7 -1
  219. package/dist/wirings/workflow/dsl/workflow-runner.js +3 -2
  220. package/dist/wirings/workflow/graph/graph-node.d.ts +1 -6
  221. package/dist/wirings/workflow/graph/graph-runner.d.ts +5 -31
  222. package/dist/wirings/workflow/graph/graph-runner.js +384 -296
  223. package/dist/wirings/workflow/graph/index.d.ts +4 -3
  224. package/dist/wirings/workflow/graph/index.js +3 -3
  225. package/dist/wirings/workflow/graph/template.d.ts +15 -0
  226. package/dist/wirings/workflow/graph/template.js +27 -0
  227. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +15 -0
  228. package/dist/wirings/workflow/graph/wire-workflow-graph.js +8 -0
  229. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -13
  230. package/dist/wirings/workflow/index.d.ts +6 -6
  231. package/dist/wirings/workflow/index.js +6 -4
  232. package/dist/wirings/workflow/pikku-workflow-service.d.ts +29 -19
  233. package/dist/wirings/workflow/pikku-workflow-service.js +217 -82
  234. package/dist/wirings/workflow/workflow-helpers.d.ts +36 -0
  235. package/dist/wirings/workflow/workflow-helpers.js +38 -0
  236. package/dist/wirings/workflow/workflow.types.d.ts +42 -95
  237. package/package.json +14 -15
  238. package/run-tests.sh +4 -1
  239. package/src/crypto-utils.test.ts +116 -0
  240. package/src/crypto-utils.ts +99 -0
  241. package/src/errors/error.test.ts +143 -2
  242. package/src/errors/errors.ts +27 -0
  243. package/src/errors/index.ts +1 -1
  244. package/src/factory-functions.test.ts +42 -2
  245. package/src/function/function-runner.test.ts +6 -13
  246. package/src/function/function-runner.ts +161 -53
  247. package/src/function/functions.types.ts +63 -132
  248. package/src/function/index.ts +5 -2
  249. package/src/handle-error.test.ts +361 -0
  250. package/src/handle-error.ts +6 -14
  251. package/src/index.ts +97 -30
  252. package/src/internal.ts +6 -0
  253. package/src/middleware/auth-apikey.test.ts +16 -13
  254. package/src/middleware/auth-apikey.ts +3 -3
  255. package/src/middleware/auth-bearer.test.ts +18 -15
  256. package/src/middleware/auth-bearer.ts +27 -32
  257. package/src/middleware/auth-cookie.test.ts +17 -14
  258. package/src/middleware/auth-cookie.ts +9 -13
  259. package/src/middleware/cors.test.ts +424 -0
  260. package/src/middleware/cors.ts +104 -0
  261. package/src/middleware/index.ts +5 -3
  262. package/src/middleware/remote-auth.test.ts +488 -0
  263. package/src/middleware/remote-auth.ts +68 -0
  264. package/src/middleware-runner.test.ts +123 -1
  265. package/src/middleware-runner.ts +13 -13
  266. package/src/permissions.test.ts +83 -9
  267. package/src/permissions.ts +17 -19
  268. package/src/pikku-state.test.ts +224 -0
  269. package/src/pikku-state.ts +59 -35
  270. package/src/run-tests-script.test.ts +49 -0
  271. package/src/schema.test.ts +198 -6
  272. package/src/schema.ts +28 -21
  273. package/src/services/ai-agent-runner-service.ts +41 -0
  274. package/src/services/ai-run-state-service.ts +20 -0
  275. package/src/services/ai-storage-service.ts +39 -0
  276. package/src/services/content-service.ts +7 -0
  277. package/src/services/deployment-service.ts +22 -0
  278. package/src/services/gopass-secrets.ts +98 -0
  279. package/src/services/in-memory-ai-run-state-service.ts +73 -0
  280. package/src/services/in-memory-trigger-service.ts +64 -0
  281. package/src/services/in-memory-workflow-service.test.ts +351 -0
  282. package/src/services/in-memory-workflow-service.ts +395 -0
  283. package/src/services/index.ts +50 -14
  284. package/src/services/local-content.ts +9 -3
  285. package/src/services/local-secrets.test.ts +80 -0
  286. package/src/services/local-secrets.ts +53 -2
  287. package/src/services/local-variables.test.ts +61 -0
  288. package/src/services/local-variables.ts +23 -1
  289. package/src/services/logger-console.test.ts +118 -0
  290. package/src/services/logger-console.ts +2 -1
  291. package/src/services/scheduler-service.ts +11 -1
  292. package/src/services/schema-service.ts +7 -0
  293. package/src/services/scoped-secret-service.test.ts +74 -0
  294. package/src/services/scoped-secret-service.ts +41 -0
  295. package/src/services/secret-service.ts +25 -4
  296. package/src/services/trigger-service.ts +17 -0
  297. package/src/services/typed-secret-service.test.ts +93 -0
  298. package/src/services/typed-secret-service.ts +70 -0
  299. package/src/services/typed-variables-service.test.ts +73 -0
  300. package/src/services/typed-variables-service.ts +81 -0
  301. package/src/services/user-session-service.test.ts +113 -0
  302. package/src/services/user-session-service.ts +25 -2
  303. package/src/services/variables-service.ts +5 -0
  304. package/src/services/workflow-service.ts +23 -13
  305. package/src/time-utils.test.ts +1 -1
  306. package/src/types/core.types.ts +95 -24
  307. package/src/types/state.types.ts +56 -73
  308. package/src/utils.test.ts +350 -0
  309. package/src/utils.ts +33 -18
  310. package/src/version.test.ts +80 -0
  311. package/src/version.ts +25 -0
  312. package/src/wirings/ai-agent/ai-agent-assistant-ui.test.ts +363 -0
  313. package/src/wirings/ai-agent/ai-agent-assistant-ui.ts +214 -0
  314. package/src/wirings/ai-agent/ai-agent-helpers.test.ts +152 -0
  315. package/src/wirings/ai-agent/ai-agent-helpers.ts +76 -0
  316. package/src/wirings/ai-agent/ai-agent-memory.ts +300 -0
  317. package/src/wirings/ai-agent/ai-agent-model-config.test.ts +115 -0
  318. package/src/wirings/ai-agent/ai-agent-model-config.ts +43 -0
  319. package/src/wirings/ai-agent/ai-agent-prepare.ts +504 -0
  320. package/src/wirings/ai-agent/ai-agent-registry.test.ts +37 -0
  321. package/src/wirings/ai-agent/ai-agent-registry.ts +82 -0
  322. package/src/wirings/ai-agent/ai-agent-runner.test.ts +317 -0
  323. package/src/wirings/ai-agent/ai-agent-runner.ts +251 -0
  324. package/src/wirings/ai-agent/ai-agent-stream.test.ts +652 -0
  325. package/src/wirings/ai-agent/ai-agent-stream.ts +1049 -0
  326. package/src/wirings/ai-agent/ai-agent.types.ts +328 -0
  327. package/src/wirings/ai-agent/index.ts +39 -0
  328. package/src/wirings/channel/channel-common.ts +33 -20
  329. package/src/wirings/channel/channel-handler.ts +26 -9
  330. package/src/wirings/channel/channel-middleware-runner.ts +119 -0
  331. package/src/wirings/channel/channel-runner.ts +15 -16
  332. package/src/wirings/channel/channel-store.ts +1 -1
  333. package/src/wirings/channel/channel.types.ts +21 -9
  334. package/src/wirings/channel/define-channel-routes.ts +25 -0
  335. package/src/wirings/channel/index.ts +23 -8
  336. package/src/wirings/channel/local/index.ts +3 -3
  337. package/src/wirings/channel/local/local-channel-runner.test.ts +57 -7
  338. package/src/wirings/channel/local/local-channel-runner.ts +40 -19
  339. package/src/wirings/channel/local/local-eventhub-service.test.ts +2 -2
  340. package/src/wirings/channel/local/local-eventhub-service.ts +2 -2
  341. package/src/wirings/channel/log-channels.ts +1 -1
  342. package/src/wirings/channel/pikku-abstract-channel-handler.ts +1 -1
  343. package/src/wirings/channel/serverless/index.ts +5 -1
  344. package/src/wirings/channel/serverless/serverless-channel-runner.ts +57 -36
  345. package/src/wirings/cli/channel/cli-channel-runner.ts +1 -1
  346. package/src/wirings/cli/channel/index.ts +1 -1
  347. package/src/wirings/cli/cli-runner.test.ts +10 -10
  348. package/src/wirings/cli/cli-runner.ts +28 -14
  349. package/src/wirings/cli/cli.types.ts +14 -14
  350. package/src/wirings/cli/command-parser.test.ts +9 -9
  351. package/src/wirings/cli/command-parser.ts +1 -1
  352. package/src/wirings/cli/define-cli-commands.ts +24 -0
  353. package/src/wirings/cli/index.ts +10 -4
  354. package/src/wirings/http/http-routes.test.ts +322 -0
  355. package/src/wirings/http/http-routes.ts +198 -0
  356. package/src/wirings/http/http-runner.test.ts +12 -20
  357. package/src/wirings/http/http-runner.ts +101 -51
  358. package/src/wirings/http/http.types.ts +119 -48
  359. package/src/wirings/http/index.ts +16 -4
  360. package/src/wirings/http/log-http-routes.ts +1 -1
  361. package/src/wirings/http/pikku-fetch-http-request.ts +1 -1
  362. package/src/wirings/http/pikku-fetch-http-response.ts +12 -5
  363. package/src/wirings/http/routers/http-router.ts +1 -1
  364. package/src/wirings/http/routers/path-to-regex.test.ts +1 -1
  365. package/src/wirings/http/routers/path-to-regex.ts +4 -3
  366. package/src/wirings/mcp/index.ts +27 -3
  367. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +3 -3
  368. package/src/wirings/mcp/mcp-endpoint-registry.ts +5 -1
  369. package/src/wirings/mcp/mcp-runner.ts +48 -65
  370. package/src/wirings/mcp/mcp.types.ts +5 -5
  371. package/src/wirings/node/index.ts +2 -0
  372. package/src/wirings/node/node.types.ts +23 -0
  373. package/src/wirings/oauth2/index.ts +3 -0
  374. package/src/wirings/oauth2/oauth2-client.test.ts +929 -0
  375. package/src/wirings/oauth2/oauth2-client.ts +335 -0
  376. package/src/wirings/oauth2/oauth2.types.ts +69 -0
  377. package/src/wirings/oauth2/wire-oauth2-credential.ts +23 -0
  378. package/src/wirings/queue/index.ts +13 -2
  379. package/src/wirings/queue/queue-runner.test.ts +142 -73
  380. package/src/wirings/queue/queue-runner.ts +18 -14
  381. package/src/wirings/queue/queue.types.ts +5 -5
  382. package/src/wirings/queue/register-queue-helper.ts +3 -5
  383. package/src/wirings/queue/validate-worker-config.test.ts +108 -0
  384. package/src/wirings/queue/validate-worker-config.ts +4 -1
  385. package/src/wirings/rpc/index.ts +3 -1
  386. package/src/wirings/rpc/rpc-runner.ts +254 -41
  387. package/src/wirings/rpc/rpc-types.ts +28 -4
  388. package/src/wirings/rpc/wire-addon.ts +20 -0
  389. package/src/wirings/scheduler/index.ts +6 -4
  390. package/src/wirings/scheduler/log-schedulers.ts +1 -1
  391. package/src/wirings/scheduler/scheduler-runner.test.ts +78 -45
  392. package/src/wirings/scheduler/scheduler-runner.ts +20 -27
  393. package/src/wirings/scheduler/scheduler.types.ts +2 -2
  394. package/src/wirings/secret/index.ts +9 -0
  395. package/src/wirings/secret/secret.types.ts +32 -0
  396. package/src/wirings/secret/validate-secret-definitions.test.ts +140 -0
  397. package/src/wirings/secret/validate-secret-definitions.ts +82 -0
  398. package/src/wirings/trigger/index.ts +10 -2
  399. package/src/wirings/trigger/pikku-trigger-service.ts +112 -0
  400. package/src/wirings/trigger/trigger-runner.test.ts +79 -0
  401. package/src/wirings/trigger/trigger-runner.ts +80 -41
  402. package/src/wirings/trigger/trigger.types.ts +144 -22
  403. package/src/wirings/variable/index.ts +8 -0
  404. package/src/wirings/variable/validate-variable-definitions.test.ts +91 -0
  405. package/src/wirings/variable/validate-variable-definitions.ts +69 -0
  406. package/src/wirings/variable/variable.types.ts +22 -0
  407. package/src/wirings/workflow/dsl/index.ts +1 -0
  408. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +9 -1
  409. package/src/wirings/workflow/dsl/workflow-runner.ts +4 -3
  410. package/src/wirings/workflow/graph/graph-node.ts +1 -6
  411. package/src/wirings/workflow/graph/graph-runner.test.ts +487 -0
  412. package/src/wirings/workflow/graph/graph-runner.ts +496 -374
  413. package/src/wirings/workflow/graph/index.ts +14 -3
  414. package/src/wirings/workflow/graph/template.test.ts +49 -0
  415. package/src/wirings/workflow/graph/template.ts +42 -0
  416. package/src/wirings/workflow/graph/wire-workflow-graph.ts +29 -0
  417. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -22
  418. package/src/wirings/workflow/index.ts +21 -10
  419. package/src/wirings/workflow/pikku-workflow-service.test.ts +200 -0
  420. package/src/wirings/workflow/pikku-workflow-service.ts +308 -105
  421. package/src/wirings/workflow/workflow-helpers.test.ts +129 -0
  422. package/src/wirings/workflow/workflow-helpers.ts +79 -0
  423. package/src/wirings/workflow/workflow.types.ts +47 -92
  424. package/tsconfig.tsbuildinfo +1 -1
  425. package/dist/wirings/forge-node/forge-node.types.d.ts +0 -120
  426. package/dist/wirings/forge-node/forge-node.types.js +0 -38
  427. package/dist/wirings/forge-node/index.d.ts +0 -1
  428. package/dist/wirings/forge-node/index.js +0 -1
  429. package/dist/wirings/workflow/wire-workflow.d.ts +0 -42
  430. package/dist/wirings/workflow/wire-workflow.js +0 -53
  431. package/dist/wirings/workflow/workflow-utils.d.ts +0 -23
  432. package/dist/wirings/workflow/workflow-utils.js +0 -66
  433. package/src/wirings/forge-node/forge-node.types.ts +0 -135
  434. package/src/wirings/forge-node/index.ts +0 -1
  435. package/src/wirings/workflow/wire-workflow.ts +0 -94
  436. package/src/wirings/workflow/workflow-utils.ts +0 -120
@@ -0,0 +1,129 @@
1
+ import { describe, test } from 'node:test'
2
+ import assert from 'node:assert'
3
+ import {
4
+ workflow,
5
+ workflowStart,
6
+ workflowStatus,
7
+ graphStart,
8
+ } from './workflow-helpers.js'
9
+
10
+ describe('workflow helpers', () => {
11
+ describe('workflow', () => {
12
+ test('should return an object with func', () => {
13
+ const wf = workflow('myWorkflow')
14
+ assert.strictEqual(typeof wf.func, 'function')
15
+ })
16
+
17
+ test('func should call workflowService.runToCompletion', async () => {
18
+ const wf = workflow('myWorkflow', { pollIntervalMs: 500 })
19
+ let calledWith: any
20
+ const services = {
21
+ workflowService: {
22
+ runToCompletion: async (...args: any[]) => {
23
+ calledWith = args
24
+ return { result: 'done' }
25
+ },
26
+ },
27
+ }
28
+ const result = await wf.func(services, { input: 1 }, { rpc: {} })
29
+ assert.strictEqual(calledWith[0], 'myWorkflow')
30
+ assert.deepStrictEqual(calledWith[1], { input: 1 })
31
+ assert.deepStrictEqual(result, { result: 'done' })
32
+ })
33
+ })
34
+
35
+ describe('workflowStart', () => {
36
+ test('should return an object with func', () => {
37
+ const wfs = workflowStart('myWorkflow')
38
+ assert.strictEqual(typeof wfs.func, 'function')
39
+ })
40
+
41
+ test('func should call rpc.startWorkflow', async () => {
42
+ const wfs = workflowStart('myWorkflow')
43
+ let calledWith: any
44
+ const rpc = {
45
+ startWorkflow: async (...args: any[]) => {
46
+ calledWith = args
47
+ return { runId: 'run-1' }
48
+ },
49
+ }
50
+ const result = await wfs.func({}, { input: 1 }, { rpc })
51
+ assert.strictEqual(calledWith[0], 'myWorkflow')
52
+ assert.deepStrictEqual(calledWith[1], { input: 1 })
53
+ assert.deepStrictEqual(result, { runId: 'run-1' })
54
+ })
55
+ })
56
+
57
+ describe('workflowStatus', () => {
58
+ test('should return an object with func', () => {
59
+ const wfst = workflowStatus('myWorkflow')
60
+ assert.strictEqual(typeof wfst.func, 'function')
61
+ })
62
+
63
+ test('func should return run status', async () => {
64
+ const wfst = workflowStatus('myWorkflow')
65
+ const services = {
66
+ workflowService: {
67
+ getRun: async (runId: string) => ({
68
+ id: runId,
69
+ status: 'completed',
70
+ output: { data: 'ok' },
71
+ }),
72
+ },
73
+ }
74
+ const result = await wfst.func(services, { runId: 'run-1' })
75
+ assert.strictEqual(result.id, 'run-1')
76
+ assert.strictEqual(result.status, 'completed')
77
+ assert.deepStrictEqual(result.output, { data: 'ok' })
78
+ })
79
+
80
+ test('func should throw WorkflowRunNotFoundError for missing run', async () => {
81
+ const wfst = workflowStatus('myWorkflow')
82
+ const services = {
83
+ workflowService: { getRun: async () => null },
84
+ }
85
+ await assert.rejects(
86
+ () => wfst.func(services, { runId: 'non-existent' }),
87
+ (err: any) => err.message.includes('non-existent')
88
+ )
89
+ })
90
+
91
+ test('func should include error message when run has error', async () => {
92
+ const wfst = workflowStatus('myWorkflow')
93
+ const services = {
94
+ workflowService: {
95
+ getRun: async () => ({
96
+ id: 'run-2',
97
+ status: 'failed',
98
+ error: { message: 'step failed', name: 'Error' },
99
+ }),
100
+ },
101
+ }
102
+ const result = await wfst.func(services, { runId: 'run-2' })
103
+ assert.strictEqual(result.status, 'failed')
104
+ assert.deepStrictEqual(result.error, { message: 'step failed' })
105
+ })
106
+ })
107
+
108
+ describe('graphStart', () => {
109
+ test('should return an object with func', () => {
110
+ const gs = graphStart('myGraph', 'startNode')
111
+ assert.strictEqual(typeof gs.func, 'function')
112
+ })
113
+
114
+ test('func should call rpc.startWorkflow with startNode', async () => {
115
+ const gs = graphStart('myGraph', 'nodeA')
116
+ let calledWith: any
117
+ const rpc = {
118
+ startWorkflow: async (...args: any[]) => {
119
+ calledWith = args
120
+ return { runId: 'run-3' }
121
+ },
122
+ }
123
+ const result = await gs.func({}, { input: 1 }, { rpc })
124
+ assert.strictEqual(calledWith[0], 'myGraph')
125
+ assert.deepStrictEqual(calledWith[2], { startNode: 'nodeA' })
126
+ assert.deepStrictEqual(result, { runId: 'run-3' })
127
+ })
128
+ })
129
+ })
@@ -0,0 +1,79 @@
1
+ import { WorkflowRunNotFoundError } from './pikku-workflow-service.js'
2
+
3
+ export function workflow<
4
+ TWorkflowMap extends Record<string, { input: any; output: any }>,
5
+ >(
6
+ workflowName: string & keyof TWorkflowMap,
7
+ options?: { pollIntervalMs?: number }
8
+ ): { func: (services: any, data: any, wire: any) => Promise<any> } {
9
+ return {
10
+ func: async (services: any, data: any, { rpc }: any) => {
11
+ return services.workflowService.runToCompletion(
12
+ workflowName,
13
+ data,
14
+ rpc,
15
+ options
16
+ )
17
+ },
18
+ }
19
+ }
20
+
21
+ export function workflowStart<
22
+ TWorkflowMap extends Record<string, { input: any; output: any }>,
23
+ >(
24
+ workflowName: string & keyof TWorkflowMap
25
+ ): {
26
+ func: (services: any, data: any, wire: any) => Promise<{ runId: string }>
27
+ } {
28
+ return {
29
+ func: async (_services: any, data: any, { rpc }: any) => {
30
+ return rpc.startWorkflow(workflowName, data)
31
+ },
32
+ }
33
+ }
34
+
35
+ export function workflowStatus<
36
+ TWorkflowMap extends Record<string, { input: any; output: any }>,
37
+ >(
38
+ _workflowName: string & keyof TWorkflowMap
39
+ ): {
40
+ func: (
41
+ services: any,
42
+ data: { runId: string }
43
+ ) => Promise<{
44
+ id: string
45
+ status: 'running' | 'suspended' | 'completed' | 'failed' | 'cancelled'
46
+ output?: any
47
+ error?: { message?: string }
48
+ }>
49
+ } {
50
+ return {
51
+ func: async (services: any, data: { runId: string }) => {
52
+ const run = await services.workflowService.getRun(data.runId)
53
+ if (!run) {
54
+ throw new WorkflowRunNotFoundError(data.runId)
55
+ }
56
+ return {
57
+ id: run.id,
58
+ status: run.status,
59
+ output: run.output,
60
+ error: run.error ? { message: run.error.message } : undefined,
61
+ }
62
+ },
63
+ }
64
+ }
65
+
66
+ export function graphStart<
67
+ TGraphsMap extends Record<string, Record<string, any>>,
68
+ >(
69
+ graphName: string & keyof TGraphsMap,
70
+ startNode: string
71
+ ): {
72
+ func: (services: any, data: any, wire: any) => Promise<{ runId: string }>
73
+ } {
74
+ return {
75
+ func: async (_services: any, data: any, { rpc }: any) => {
76
+ return rpc.startWorkflow(graphName, data, { startNode })
77
+ },
78
+ }
79
+ }
@@ -1,5 +1,5 @@
1
- import { SerializedError, CommonWireMeta } from '../../types/core.types.js'
2
- import { CorePikkuFunctionConfig } from '../../function/functions.types.js'
1
+ import type { SerializedError, CommonWireMeta } from '../../types/core.types.js'
2
+ import type { CorePikkuFunctionConfig } from '../../function/functions.types.js'
3
3
 
4
4
  // Re-export WorkflowService from services module
5
5
  export type { WorkflowService } from '../../services/workflow-service.js'
@@ -10,6 +10,7 @@ export type {
10
10
  WorkflowWireDoRPC,
11
11
  WorkflowWireDoInline,
12
12
  WorkflowWireSleep,
13
+ WorkflowWireSuspend,
13
14
  InputSource,
14
15
  OutputBinding,
15
16
  RpcStepMeta,
@@ -35,6 +36,12 @@ export type {
35
36
 
36
37
  import type { WorkflowStepMeta } from './dsl/workflow-dsl.types.js'
37
38
 
39
+ export interface WorkflowRunWire {
40
+ type: string
41
+ id?: string
42
+ parentRunId?: string
43
+ }
44
+
38
45
  export interface WorkflowServiceConfig {
39
46
  retries: number
40
47
  retryDelay: number
@@ -43,94 +50,15 @@ export interface WorkflowServiceConfig {
43
50
  sleeperRPCName: string
44
51
  }
45
52
 
46
- /**
47
- * HTTP wire configuration for workflows
48
- */
49
- export interface WorkflowHTTPWire {
50
- route: string
51
- method: 'get' | 'post' | 'put' | 'patch' | 'delete'
52
- startNode: string
53
- }
54
-
55
- /**
56
- * Channel wire configuration for workflows
57
- */
58
- export interface WorkflowChannelWire {
59
- name: string
60
- onConnect?: string
61
- onDisconnect?: string
62
- onMessage?: string
63
- }
64
-
65
- /**
66
- * Queue wire configuration for workflows
67
- */
68
- export interface WorkflowQueueWire {
69
- name: string
70
- startNode: string
71
- }
72
-
73
- /**
74
- * CLI wire configuration for workflows
75
- */
76
- export interface WorkflowCliWire {
77
- command: string
78
- startNode: string
79
- }
80
-
81
- /**
82
- * MCP wire configurations for workflows
83
- */
84
- export interface WorkflowMcpWires {
85
- tool?: Array<{ name: string; startNode: string }>
86
- prompt?: Array<{ name: string; startNode: string }>
87
- resource?: Array<{ uri: string; startNode: string }>
88
- }
89
-
90
- /**
91
- * Schedule wire configuration for workflows
92
- */
93
- export interface WorkflowScheduleWire {
94
- cron?: string
95
- interval?: string
96
- startNode: string
97
- }
98
-
99
- /**
100
- * Trigger wire configuration for workflows
101
- */
102
- export interface WorkflowTriggerWire {
103
- name: string
104
- startNode: string
105
- }
106
-
107
- /**
108
- * Wire configuration for workflows
109
- * Defines how a workflow can be triggered
110
- */
111
- export interface WorkflowWires {
112
- /** API entry point - node ID for startWorkflow() calls */
113
- api?: string
114
- /** HTTP triggers */
115
- http?: WorkflowHTTPWire[]
116
- /** Channel triggers */
117
- channel?: WorkflowChannelWire[]
118
- /** Queue triggers */
119
- queue?: WorkflowQueueWire[]
120
- /** CLI triggers */
121
- cli?: WorkflowCliWire[]
122
- /** MCP triggers (tool, prompt, resource) */
123
- mcp?: WorkflowMcpWires
124
- /** Schedule triggers */
125
- schedule?: WorkflowScheduleWire[]
126
- /** Named trigger wires */
127
- trigger?: WorkflowTriggerWire[]
128
- }
129
-
130
53
  /**
131
54
  * Workflow run status
132
55
  */
133
- export type WorkflowStatus = 'running' | 'completed' | 'failed' | 'cancelled'
56
+ export type WorkflowStatus =
57
+ | 'running'
58
+ | 'suspended'
59
+ | 'completed'
60
+ | 'failed'
61
+ | 'cancelled'
134
62
 
135
63
  /**
136
64
  * Workflow step status
@@ -141,6 +69,7 @@ export type StepStatus =
141
69
  | 'scheduled'
142
70
  | 'succeeded'
143
71
  | 'failed'
72
+ | 'suspended'
144
73
 
145
74
  /**
146
75
  * Workflow run representation
@@ -160,6 +89,10 @@ export interface WorkflowRun {
160
89
  error?: SerializedError
161
90
  /** If true, workflow executes inline without queues */
162
91
  inline?: boolean
92
+ /** Graph hash of the workflow definition at run creation time */
93
+ graphHash?: string
94
+ /** Wire origin info (how this run was started) */
95
+ wire: WorkflowRunWire
163
96
  /** Creation timestamp */
164
97
  createdAt: Date
165
98
  /** Last update timestamp */
@@ -198,6 +131,28 @@ export interface StepState {
198
131
  failedAt?: Date
199
132
  }
200
133
 
134
+ export interface WorkflowRunService {
135
+ listRuns(options?: {
136
+ workflowName?: string
137
+ status?: string
138
+ limit?: number
139
+ offset?: number
140
+ }): Promise<WorkflowRun[]>
141
+ getRun(id: string): Promise<WorkflowRun | null>
142
+ getRunSteps(
143
+ runId: string
144
+ ): Promise<
145
+ Array<StepState & { stepName: string; rpcName?: string; data?: any }>
146
+ >
147
+ getRunHistory(runId: string): Promise<Array<StepState & { stepName: string }>>
148
+ getDistinctWorkflowNames(): Promise<string[]>
149
+ getWorkflowVersion(
150
+ name: string,
151
+ graphHash: string
152
+ ): Promise<{ graph: any; source: string } | null>
153
+ deleteRun(id: string): Promise<boolean>
154
+ }
155
+
201
156
  /**
202
157
  * Core workflow definition
203
158
  */
@@ -255,7 +210,7 @@ export type WorkflowContext = Record<string, ContextVariable>
255
210
  export type WorkflowsMeta = Record<
256
211
  string,
257
212
  CommonWireMeta & {
258
- workflowName: string
213
+ name: string
259
214
  steps: WorkflowStepMeta[]
260
215
  context?: WorkflowContext
261
216
  dsl?: boolean
@@ -271,19 +226,19 @@ export interface WorkflowRuntimeMeta {
271
226
  /** Workflow name (used as key in registrations) */
272
227
  name: string
273
228
  /** Pikku function name (for execution) */
274
- pikkuFuncName: string
229
+ pikkuFuncId: string
275
230
  /** Source type: 'dsl' (serializable), 'complex' (has inline steps), 'graph' */
276
- source?: 'dsl' | 'complex' | 'graph'
231
+ source: 'dsl' | 'complex' | 'graph'
277
232
  /** Optional description */
278
233
  description?: string
279
234
  /** Tags for organization */
280
235
  tags?: string[]
281
- /** Wires - how the workflow is triggered */
282
- wires?: WorkflowWires
283
236
  /** Serialized nodes */
284
237
  nodes?: Record<string, any>
285
238
  /** Entry node IDs for graph workflows (computed at build time) */
286
239
  entryNodeIds?: string[]
240
+ /** Hash of graph topology (nodes, edges, input mappings) */
241
+ graphHash?: string
287
242
  }
288
243
 
289
244
  /**