@pikku/core 0.11.2 → 0.12.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 (344) hide show
  1. package/CHANGELOG.md +33 -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 +8 -0
  5. package/dist/errors/errors.js +16 -0
  6. package/dist/errors/index.d.ts +0 -1
  7. package/dist/errors/index.js +0 -1
  8. package/dist/function/function-runner.d.ts +7 -1
  9. package/dist/function/function-runner.js +82 -23
  10. package/dist/function/functions.types.d.ts +31 -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.js +1 -10
  15. package/dist/index.d.ts +28 -26
  16. package/dist/index.js +18 -29
  17. package/dist/middleware/auth-apikey.d.ts +2 -2
  18. package/dist/middleware/auth-apikey.js +3 -3
  19. package/dist/middleware/auth-bearer.d.ts +2 -2
  20. package/dist/middleware/auth-bearer.js +3 -6
  21. package/dist/middleware/auth-cookie.d.ts +2 -2
  22. package/dist/middleware/auth-cookie.js +6 -8
  23. package/dist/middleware/cors.d.ts +46 -0
  24. package/dist/middleware/cors.js +73 -0
  25. package/dist/middleware/index.d.ts +5 -3
  26. package/dist/middleware/index.js +5 -3
  27. package/dist/middleware/remote-auth.d.ts +5 -0
  28. package/dist/middleware/remote-auth.js +55 -0
  29. package/dist/middleware/timeout.d.ts +2 -2
  30. package/dist/middleware-runner.js +8 -10
  31. package/dist/permissions.js +11 -15
  32. package/dist/pikku-state.d.ts +1 -0
  33. package/dist/pikku-state.js +18 -8
  34. package/dist/schema.js +12 -11
  35. package/dist/services/ai-agent-runner-service.d.ts +24 -0
  36. package/dist/services/ai-agent-runner-service.js +1 -0
  37. package/dist/services/ai-run-state-service.d.ts +13 -0
  38. package/dist/services/ai-run-state-service.js +1 -0
  39. package/dist/services/ai-storage-service.d.ts +18 -0
  40. package/dist/services/ai-storage-service.js +1 -0
  41. package/dist/services/deployment-service.d.ts +19 -0
  42. package/dist/services/deployment-service.js +1 -0
  43. package/dist/services/gopass-secrets.d.ts +47 -0
  44. package/dist/services/gopass-secrets.js +94 -0
  45. package/dist/services/in-memory-trigger-service.d.ts +23 -0
  46. package/dist/services/in-memory-trigger-service.js +50 -0
  47. package/dist/services/in-memory-workflow-service.d.ts +59 -0
  48. package/dist/services/in-memory-workflow-service.js +287 -0
  49. package/dist/services/index.d.ts +25 -11
  50. package/dist/services/index.js +10 -13
  51. package/dist/services/local-secrets.d.ts +23 -0
  52. package/dist/services/local-secrets.js +45 -0
  53. package/dist/services/local-variables.d.ts +5 -0
  54. package/dist/services/local-variables.js +18 -0
  55. package/dist/services/scheduler-service.d.ts +21 -1
  56. package/dist/services/scheduler-service.js +14 -0
  57. package/dist/services/schema-service.d.ts +6 -0
  58. package/dist/services/scoped-secret-service.d.ts +16 -0
  59. package/dist/services/scoped-secret-service.js +35 -0
  60. package/dist/services/secret-service.d.ts +25 -4
  61. package/dist/services/trigger-service.d.ts +23 -0
  62. package/dist/services/trigger-service.js +1 -0
  63. package/dist/services/typed-secret-service.d.ts +30 -0
  64. package/dist/services/typed-secret-service.js +40 -0
  65. package/dist/services/typed-variables-service.d.ts +27 -0
  66. package/dist/services/typed-variables-service.js +46 -0
  67. package/dist/services/user-session-service.d.ts +13 -0
  68. package/dist/services/user-session-service.js +17 -0
  69. package/dist/services/variables-service.d.ts +5 -0
  70. package/dist/services/workflow-service.d.ts +9 -4
  71. package/dist/types/core.types.d.ts +48 -12
  72. package/dist/types/core.types.js +8 -1
  73. package/dist/types/state.types.d.ts +43 -51
  74. package/dist/utils.d.ts +3 -2
  75. package/dist/utils.js +15 -3
  76. package/dist/version.d.ts +6 -0
  77. package/dist/version.js +19 -0
  78. package/dist/wirings/ai-agent/ai-agent-memory.d.ts +29 -0
  79. package/dist/wirings/ai-agent/ai-agent-memory.js +199 -0
  80. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +9 -0
  81. package/dist/wirings/ai-agent/ai-agent-model-config.js +36 -0
  82. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +60 -0
  83. package/dist/wirings/ai-agent/ai-agent-prepare.js +312 -0
  84. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +15 -0
  85. package/dist/wirings/ai-agent/ai-agent-registry.js +47 -0
  86. package/dist/wirings/ai-agent/ai-agent-runner.d.ts +3 -0
  87. package/dist/wirings/ai-agent/ai-agent-runner.js +96 -0
  88. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +11 -0
  89. package/dist/wirings/ai-agent/ai-agent-stream.js +503 -0
  90. package/dist/wirings/ai-agent/ai-agent.types.d.ts +254 -0
  91. package/dist/wirings/ai-agent/ai-agent.types.js +1 -0
  92. package/dist/wirings/ai-agent/index.d.ts +5 -0
  93. package/dist/wirings/ai-agent/index.js +4 -0
  94. package/dist/wirings/channel/channel-common.d.ts +7 -4
  95. package/dist/wirings/channel/channel-common.js +15 -8
  96. package/dist/wirings/channel/channel-handler.js +12 -3
  97. package/dist/wirings/channel/channel-middleware-runner.d.ts +9 -0
  98. package/dist/wirings/channel/channel-middleware-runner.js +73 -0
  99. package/dist/wirings/channel/channel-runner.js +7 -7
  100. package/dist/wirings/channel/channel.types.d.ts +5 -1
  101. package/dist/wirings/channel/define-channel-routes.d.ts +21 -0
  102. package/dist/wirings/channel/define-channel-routes.js +23 -0
  103. package/dist/wirings/channel/index.d.ts +10 -8
  104. package/dist/wirings/channel/index.js +7 -8
  105. package/dist/wirings/channel/local/index.d.ts +3 -3
  106. package/dist/wirings/channel/local/index.js +3 -3
  107. package/dist/wirings/channel/local/local-channel-runner.js +18 -6
  108. package/dist/wirings/channel/serverless/index.d.ts +1 -1
  109. package/dist/wirings/channel/serverless/index.js +1 -1
  110. package/dist/wirings/channel/serverless/serverless-channel-runner.js +15 -4
  111. package/dist/wirings/cli/channel/index.d.ts +1 -1
  112. package/dist/wirings/cli/channel/index.js +1 -1
  113. package/dist/wirings/cli/cli-runner.d.ts +1 -1
  114. package/dist/wirings/cli/cli-runner.js +12 -8
  115. package/dist/wirings/cli/cli.types.d.ts +6 -6
  116. package/dist/wirings/cli/define-cli-commands.d.ts +19 -0
  117. package/dist/wirings/cli/define-cli-commands.js +20 -0
  118. package/dist/wirings/cli/index.d.ts +2 -3
  119. package/dist/wirings/cli/index.js +1 -3
  120. package/dist/wirings/http/http-routes.d.ts +69 -0
  121. package/dist/wirings/http/http-routes.js +139 -0
  122. package/dist/wirings/http/http-runner.js +49 -23
  123. package/dist/wirings/http/http.types.d.ts +78 -38
  124. package/dist/wirings/http/index.d.ts +5 -4
  125. package/dist/wirings/http/index.js +4 -3
  126. package/dist/wirings/mcp/index.d.ts +4 -3
  127. package/dist/wirings/mcp/index.js +3 -3
  128. package/dist/wirings/mcp/mcp-runner.d.ts +1 -3
  129. package/dist/wirings/mcp/mcp-runner.js +25 -39
  130. package/dist/wirings/mcp/mcp.types.d.ts +3 -3
  131. package/dist/wirings/node/index.d.ts +2 -0
  132. package/dist/wirings/node/index.js +1 -0
  133. package/dist/wirings/node/node.types.d.ts +20 -0
  134. package/dist/wirings/node/node.types.js +1 -0
  135. package/dist/wirings/oauth2/index.d.ts +3 -0
  136. package/dist/wirings/oauth2/index.js +2 -0
  137. package/dist/wirings/oauth2/oauth2-client.d.ts +47 -0
  138. package/dist/wirings/oauth2/oauth2-client.js +267 -0
  139. package/dist/wirings/oauth2/oauth2.types.d.ts +65 -0
  140. package/dist/wirings/oauth2/oauth2.types.js +4 -0
  141. package/dist/wirings/oauth2/wire-oauth2-credential.d.ts +20 -0
  142. package/dist/wirings/oauth2/wire-oauth2-credential.js +21 -0
  143. package/dist/wirings/queue/index.d.ts +2 -2
  144. package/dist/wirings/queue/index.js +1 -1
  145. package/dist/wirings/queue/queue-runner.d.ts +7 -0
  146. package/dist/wirings/queue/queue-runner.js +17 -6
  147. package/dist/wirings/queue/queue.types.d.ts +8 -2
  148. package/dist/wirings/rpc/index.d.ts +1 -1
  149. package/dist/wirings/rpc/index.js +1 -1
  150. package/dist/wirings/rpc/rpc-runner.d.ts +33 -5
  151. package/dist/wirings/rpc/rpc-runner.js +134 -16
  152. package/dist/wirings/rpc/rpc-types.d.ts +8 -4
  153. package/dist/wirings/scheduler/index.d.ts +3 -3
  154. package/dist/wirings/scheduler/index.js +2 -3
  155. package/dist/wirings/scheduler/scheduler-runner.d.ts +5 -0
  156. package/dist/wirings/scheduler/scheduler-runner.js +23 -5
  157. package/dist/wirings/secret/index.d.ts +3 -0
  158. package/dist/wirings/secret/index.js +2 -0
  159. package/dist/wirings/secret/secret.types.d.ts +27 -0
  160. package/dist/wirings/secret/secret.types.js +1 -0
  161. package/dist/wirings/secret/validate-secret-definitions.d.ts +6 -0
  162. package/dist/wirings/secret/validate-secret-definitions.js +55 -0
  163. package/dist/wirings/trigger/index.d.ts +3 -2
  164. package/dist/wirings/trigger/index.js +2 -2
  165. package/dist/wirings/trigger/pikku-trigger-service.d.ts +26 -0
  166. package/dist/wirings/trigger/pikku-trigger-service.js +75 -0
  167. package/dist/wirings/trigger/trigger-runner.d.ts +21 -8
  168. package/dist/wirings/trigger/trigger-runner.js +46 -18
  169. package/dist/wirings/trigger/trigger.types.d.ts +99 -11
  170. package/dist/wirings/trigger/trigger.types.js +40 -1
  171. package/dist/wirings/variable/index.d.ts +3 -0
  172. package/dist/wirings/variable/index.js +2 -0
  173. package/dist/wirings/variable/validate-variable-definitions.d.ts +6 -0
  174. package/dist/wirings/variable/validate-variable-definitions.js +45 -0
  175. package/dist/wirings/variable/variable.types.d.ts +18 -0
  176. package/dist/wirings/variable/variable.types.js +1 -0
  177. package/dist/wirings/workflow/dsl/index.d.ts +1 -1
  178. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +7 -1
  179. package/dist/wirings/workflow/dsl/workflow-runner.js +3 -2
  180. package/dist/wirings/workflow/graph/graph-node.d.ts +1 -6
  181. package/dist/wirings/workflow/graph/graph-runner.d.ts +5 -31
  182. package/dist/wirings/workflow/graph/graph-runner.js +384 -296
  183. package/dist/wirings/workflow/graph/index.d.ts +4 -3
  184. package/dist/wirings/workflow/graph/index.js +3 -3
  185. package/dist/wirings/workflow/graph/template.d.ts +15 -0
  186. package/dist/wirings/workflow/graph/template.js +27 -0
  187. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +15 -0
  188. package/dist/wirings/workflow/graph/wire-workflow-graph.js +8 -0
  189. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -13
  190. package/dist/wirings/workflow/index.d.ts +6 -6
  191. package/dist/wirings/workflow/index.js +6 -4
  192. package/dist/wirings/workflow/pikku-workflow-service.d.ts +28 -14
  193. package/dist/wirings/workflow/pikku-workflow-service.js +200 -56
  194. package/dist/wirings/workflow/workflow-helpers.d.ts +36 -0
  195. package/dist/wirings/workflow/workflow-helpers.js +38 -0
  196. package/dist/wirings/workflow/workflow-utils.d.ts +1 -23
  197. package/dist/wirings/workflow/workflow-utils.js +1 -66
  198. package/dist/wirings/workflow/workflow.types.d.ts +40 -93
  199. package/package.json +13 -15
  200. package/run-tests.sh +4 -1
  201. package/src/crypto-utils.ts +99 -0
  202. package/src/errors/errors.ts +17 -0
  203. package/src/errors/index.ts +0 -1
  204. package/src/factory-functions.test.ts +42 -2
  205. package/src/function/function-runner.test.ts +4 -11
  206. package/src/function/function-runner.ts +114 -29
  207. package/src/function/functions.types.ts +62 -132
  208. package/src/function/index.ts +5 -2
  209. package/src/handle-error.ts +2 -10
  210. package/src/index.ts +99 -25
  211. package/src/middleware/auth-apikey.test.ts +15 -12
  212. package/src/middleware/auth-apikey.ts +3 -3
  213. package/src/middleware/auth-bearer.test.ts +17 -14
  214. package/src/middleware/auth-bearer.ts +25 -27
  215. package/src/middleware/auth-cookie.test.ts +16 -13
  216. package/src/middleware/auth-cookie.ts +6 -8
  217. package/src/middleware/cors.ts +96 -0
  218. package/src/middleware/index.ts +5 -3
  219. package/src/middleware/remote-auth.ts +68 -0
  220. package/src/middleware-runner.test.ts +122 -0
  221. package/src/middleware-runner.ts +12 -12
  222. package/src/permissions.test.ts +81 -7
  223. package/src/permissions.ts +15 -17
  224. package/src/pikku-state.ts +20 -8
  225. package/src/run-tests-script.test.ts +49 -0
  226. package/src/schema.ts +18 -15
  227. package/src/services/ai-agent-runner-service.ts +29 -0
  228. package/src/services/ai-run-state-service.ts +20 -0
  229. package/src/services/ai-storage-service.ts +39 -0
  230. package/src/services/deployment-service.ts +22 -0
  231. package/src/services/gopass-secrets.ts +95 -0
  232. package/src/services/in-memory-trigger-service.ts +68 -0
  233. package/src/services/in-memory-workflow-service.ts +395 -0
  234. package/src/services/index.ts +49 -14
  235. package/src/services/local-secrets.ts +51 -0
  236. package/src/services/local-variables.ts +22 -0
  237. package/src/services/scheduler-service.ts +29 -1
  238. package/src/services/schema-service.ts +7 -0
  239. package/src/services/scoped-secret-service.ts +41 -0
  240. package/src/services/secret-service.ts +25 -4
  241. package/src/services/trigger-service.ts +38 -0
  242. package/src/services/typed-secret-service.ts +70 -0
  243. package/src/services/typed-variables-service.ts +81 -0
  244. package/src/services/user-session-service.ts +23 -0
  245. package/src/services/variables-service.ts +5 -0
  246. package/src/services/workflow-service.ts +22 -2
  247. package/src/types/core.types.ts +76 -11
  248. package/src/types/state.types.ts +37 -63
  249. package/src/utils.ts +20 -6
  250. package/src/version.test.ts +80 -0
  251. package/src/version.ts +25 -0
  252. package/src/wirings/ai-agent/ai-agent-memory.ts +300 -0
  253. package/src/wirings/ai-agent/ai-agent-model-config.ts +43 -0
  254. package/src/wirings/ai-agent/ai-agent-prepare.ts +470 -0
  255. package/src/wirings/ai-agent/ai-agent-registry.test.ts +37 -0
  256. package/src/wirings/ai-agent/ai-agent-registry.ts +82 -0
  257. package/src/wirings/ai-agent/ai-agent-runner.test.ts +75 -0
  258. package/src/wirings/ai-agent/ai-agent-runner.ts +137 -0
  259. package/src/wirings/ai-agent/ai-agent-stream.test.ts +246 -0
  260. package/src/wirings/ai-agent/ai-agent-stream.ts +774 -0
  261. package/src/wirings/ai-agent/ai-agent.types.ts +273 -0
  262. package/src/wirings/ai-agent/index.ts +28 -0
  263. package/src/wirings/channel/channel-common.ts +32 -19
  264. package/src/wirings/channel/channel-handler.ts +17 -4
  265. package/src/wirings/channel/channel-middleware-runner.ts +119 -0
  266. package/src/wirings/channel/channel-runner.ts +9 -10
  267. package/src/wirings/channel/channel.types.ts +17 -1
  268. package/src/wirings/channel/define-channel-routes.ts +25 -0
  269. package/src/wirings/channel/index.ts +23 -8
  270. package/src/wirings/channel/local/index.ts +3 -3
  271. package/src/wirings/channel/local/local-channel-runner.test.ts +44 -1
  272. package/src/wirings/channel/local/local-channel-runner.ts +22 -6
  273. package/src/wirings/channel/serverless/index.ts +5 -1
  274. package/src/wirings/channel/serverless/serverless-channel-runner.ts +20 -4
  275. package/src/wirings/cli/channel/index.ts +1 -1
  276. package/src/wirings/cli/cli-runner.test.ts +9 -9
  277. package/src/wirings/cli/cli-runner.ts +17 -10
  278. package/src/wirings/cli/cli.types.ts +11 -11
  279. package/src/wirings/cli/command-parser.test.ts +8 -8
  280. package/src/wirings/cli/define-cli-commands.ts +24 -0
  281. package/src/wirings/cli/index.ts +10 -4
  282. package/src/wirings/http/http-routes.test.ts +322 -0
  283. package/src/wirings/http/http-routes.ts +198 -0
  284. package/src/wirings/http/http-runner.test.ts +3 -3
  285. package/src/wirings/http/http-runner.ts +63 -29
  286. package/src/wirings/http/http.types.ts +121 -37
  287. package/src/wirings/http/index.ts +16 -4
  288. package/src/wirings/mcp/index.ts +27 -3
  289. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +3 -3
  290. package/src/wirings/mcp/mcp-runner.ts +39 -50
  291. package/src/wirings/mcp/mcp.types.ts +3 -3
  292. package/src/wirings/node/index.ts +2 -0
  293. package/src/wirings/node/node.types.ts +23 -0
  294. package/src/wirings/oauth2/index.ts +3 -0
  295. package/src/wirings/oauth2/oauth2-client.test.ts +929 -0
  296. package/src/wirings/oauth2/oauth2-client.ts +335 -0
  297. package/src/wirings/oauth2/oauth2.types.ts +69 -0
  298. package/src/wirings/oauth2/wire-oauth2-credential.ts +23 -0
  299. package/src/wirings/queue/index.ts +14 -2
  300. package/src/wirings/queue/queue-runner.test.ts +97 -55
  301. package/src/wirings/queue/queue-runner.ts +33 -7
  302. package/src/wirings/queue/queue.types.ts +12 -2
  303. package/src/wirings/rpc/index.ts +1 -1
  304. package/src/wirings/rpc/rpc-runner.ts +187 -17
  305. package/src/wirings/rpc/rpc-types.ts +13 -4
  306. package/src/wirings/scheduler/index.ts +7 -4
  307. package/src/wirings/scheduler/scheduler-runner.test.ts +70 -26
  308. package/src/wirings/scheduler/scheduler-runner.ts +45 -5
  309. package/src/wirings/secret/index.ts +9 -0
  310. package/src/wirings/secret/secret.types.ts +32 -0
  311. package/src/wirings/secret/validate-secret-definitions.ts +82 -0
  312. package/src/wirings/trigger/index.ts +10 -2
  313. package/src/wirings/trigger/pikku-trigger-service.ts +134 -0
  314. package/src/wirings/trigger/trigger-runner.ts +80 -38
  315. package/src/wirings/trigger/trigger.types.ts +144 -22
  316. package/src/wirings/variable/index.ts +8 -0
  317. package/src/wirings/variable/validate-variable-definitions.ts +69 -0
  318. package/src/wirings/variable/variable.types.ts +22 -0
  319. package/src/wirings/workflow/dsl/index.ts +1 -0
  320. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +9 -1
  321. package/src/wirings/workflow/dsl/workflow-runner.ts +4 -3
  322. package/src/wirings/workflow/graph/graph-node.ts +1 -6
  323. package/src/wirings/workflow/graph/graph-runner.test.ts +495 -0
  324. package/src/wirings/workflow/graph/graph-runner.ts +496 -374
  325. package/src/wirings/workflow/graph/index.ts +14 -3
  326. package/src/wirings/workflow/graph/template.ts +42 -0
  327. package/src/wirings/workflow/graph/wire-workflow-graph.ts +29 -0
  328. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -22
  329. package/src/wirings/workflow/index.ts +21 -10
  330. package/src/wirings/workflow/pikku-workflow-service.test.ts +212 -0
  331. package/src/wirings/workflow/pikku-workflow-service.ts +285 -66
  332. package/src/wirings/workflow/workflow-helpers.ts +79 -0
  333. package/src/wirings/workflow/workflow-utils.ts +0 -120
  334. package/src/wirings/workflow/workflow.types.ts +45 -90
  335. package/tsconfig.tsbuildinfo +1 -1
  336. package/dist/wirings/forge-node/forge-node.types.d.ts +0 -120
  337. package/dist/wirings/forge-node/forge-node.types.js +0 -38
  338. package/dist/wirings/forge-node/index.d.ts +0 -1
  339. package/dist/wirings/forge-node/index.js +0 -1
  340. package/dist/wirings/workflow/wire-workflow.d.ts +0 -42
  341. package/dist/wirings/workflow/wire-workflow.js +0 -53
  342. package/src/wirings/forge-node/forge-node.types.ts +0 -135
  343. package/src/wirings/forge-node/index.ts +0 -1
  344. package/src/wirings/workflow/wire-workflow.ts +0 -94
@@ -1,120 +0,0 @@
1
- import { pikkuState } from '../../pikku-state.js'
2
- import { NotFoundError } from '../../errors/errors.js'
3
- import {
4
- PikkuWire,
5
- CreateWireServices,
6
- CoreSingletonServices,
7
- CoreServices,
8
- CoreUserSession,
9
- } from '../../types/core.types.js'
10
- import { HTTPWiringMeta } from '../http/http.types.js'
11
- import { ContextAwareRPCService } from '../rpc/rpc-runner.js'
12
-
13
- /**
14
- * Result of finding a workflow by HTTP wire
15
- */
16
- export interface WorkflowHttpMatch {
17
- workflowName: string
18
- startNode?: string
19
- }
20
-
21
- /**
22
- * Find workflow name by matching route and method against workflow wires
23
- */
24
- export const findWorkflowByHttpWire = (
25
- route: string,
26
- method: string
27
- ): WorkflowHttpMatch | undefined => {
28
- const wirings = pikkuState(null, 'workflows', 'wirings')
29
- const graphWirings = pikkuState(null, 'workflows', 'graphWirings')
30
-
31
- // Check DSL workflow wirings
32
- for (const [, wiring] of wirings) {
33
- const httpWires = wiring.wires?.http
34
- if (httpWires) {
35
- const matchedWire = httpWires.find(
36
- (w) => w.route === route && w.method === method
37
- )
38
- if (matchedWire) {
39
- const meta = pikkuState(null, 'workflows', 'meta')
40
- for (const [name, workflowMeta] of Object.entries(meta)) {
41
- if (workflowMeta.source !== 'graph') {
42
- const registrations = pikkuState(null, 'workflows', 'registrations')
43
- if (registrations.has(name)) {
44
- return { workflowName: name, startNode: matchedWire.startNode }
45
- }
46
- }
47
- }
48
- }
49
- }
50
- }
51
-
52
- // Check graph workflow wirings
53
- for (const [, wiring] of graphWirings) {
54
- const httpWires = wiring.wires?.http
55
- if (httpWires) {
56
- const matchedWire = httpWires.find(
57
- (w) => w.route === route && w.method === method
58
- )
59
- if (matchedWire) {
60
- const meta = pikkuState(null, 'workflows', 'meta')
61
- for (const [name, workflowMeta] of Object.entries(meta)) {
62
- if (workflowMeta.source === 'graph') {
63
- return { workflowName: name, startNode: matchedWire.startNode }
64
- }
65
- }
66
- }
67
- }
68
- }
69
-
70
- return undefined
71
- }
72
-
73
- /**
74
- * Start a workflow triggered by an HTTP wire
75
- * The workflow is responsible for handling the HTTP response
76
- */
77
- export const startWorkflowByHttpWire = async (
78
- singletonServices: CoreSingletonServices,
79
- createWireServices:
80
- | CreateWireServices<
81
- CoreSingletonServices,
82
- CoreServices<CoreSingletonServices>,
83
- CoreUserSession
84
- >
85
- | undefined,
86
- matchedRoute: {
87
- matchedPath: any
88
- params: any
89
- route: any
90
- meta: HTTPWiringMeta
91
- },
92
- wire: PikkuWire
93
- ): Promise<void> => {
94
- const { meta } = matchedRoute
95
-
96
- const match = findWorkflowByHttpWire(meta.route, meta.method)
97
- if (!match) {
98
- throw new NotFoundError(
99
- `No workflow found for route ${meta.method.toUpperCase()} ${meta.route}`
100
- )
101
- }
102
-
103
- const workflowService = singletonServices.workflowService
104
- if (!workflowService) {
105
- throw new Error('WorkflowService not available')
106
- }
107
-
108
- const data = await wire.http!.request!.data()
109
-
110
- const wireServices = createWireServices?.(singletonServices, wire)
111
- const rpcService = new ContextAwareRPCService(
112
- { ...singletonServices, ...wireServices },
113
- wire,
114
- {}
115
- )
116
- await workflowService.startWorkflow(match.workflowName, data, rpcService, {
117
- inline: true,
118
- startNode: match.startNode,
119
- })
120
- }
@@ -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
  /**