@pikku/cli 0.11.1 → 0.11.3

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 (358) hide show
  1. package/.pikku/channel/pikku-channel-types.gen.ts +73 -17
  2. package/.pikku/channel/pikku-channels-map.gen.d.ts +11 -11
  3. package/.pikku/channel/pikku-channels-meta.gen.json +1 -0
  4. package/.pikku/channel/pikku-channels-meta.gen.ts +4 -2
  5. package/.pikku/channel/pikku-channels.gen.ts +1 -1
  6. package/.pikku/cli/pikku-cli-channel.ts +2 -2
  7. package/.pikku/cli/pikku-cli-client.gen.ts +1 -3
  8. package/.pikku/cli/pikku-cli-types.gen.ts +3 -3
  9. package/.pikku/cli/pikku-cli-wirings-meta.gen.json +147 -0
  10. package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +4 -157
  11. package/.pikku/cli/pikku-cli-wirings.gen.ts +3 -3
  12. package/.pikku/cli/pikku-cli.gen.ts +3 -3
  13. package/.pikku/forge/pikku-forge-types.gen.ts +83 -0
  14. package/.pikku/function/pikku-function-types.gen.ts +223 -91
  15. package/.pikku/function/pikku-functions-meta-verbose.gen.json +1030 -0
  16. package/.pikku/function/pikku-functions-meta.gen.json +656 -0
  17. package/.pikku/function/pikku-functions-meta.gen.ts +4 -970
  18. package/.pikku/http/pikku-http-types.gen.ts +20 -4
  19. package/.pikku/http/pikku-http-wirings-map.gen.d.ts +11 -11
  20. package/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
  21. package/.pikku/http/pikku-http-wirings-meta.gen.ts +4 -10
  22. package/.pikku/http/pikku-http-wirings.gen.ts +1 -1
  23. package/.pikku/mcp/pikku-mcp-types.gen.ts +72 -20
  24. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
  25. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.ts +6 -4
  26. package/.pikku/mcp/pikku-mcp-wirings.gen.ts +1 -1
  27. package/.pikku/pikku-bootstrap.gen.ts +7 -12
  28. package/.pikku/pikku-services.gen.ts +6 -7
  29. package/.pikku/pikku-types.gen.ts +4 -1
  30. package/.pikku/pikku-websocket.gen.ts +1 -1
  31. package/.pikku/queue/pikku-queue-types.gen.ts +2 -2
  32. package/.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts +11 -11
  33. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
  34. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts +5 -7
  35. package/.pikku/queue/pikku-queue-workers-wirings.gen.ts +1 -1
  36. package/.pikku/rpc/pikku-remote-rpc-workers.gen.ts +5 -2
  37. package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +19 -14
  38. package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +46 -39
  39. package/.pikku/scheduler/pikku-scheduler-types.gen.ts +2 -2
  40. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
  41. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.ts +5 -2
  42. package/.pikku/scheduler/pikku-schedulers-wirings.gen.ts +1 -1
  43. package/.pikku/schemas/register.gen.ts +31 -23
  44. package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  45. package/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
  46. package/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  47. package/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
  48. package/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
  49. package/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
  50. package/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
  51. package/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
  52. package/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
  53. package/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
  54. package/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
  55. package/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
  56. package/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
  57. package/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
  58. package/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
  59. package/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  60. package/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
  61. package/.pikku/services/config.gen.json +104 -0
  62. package/.pikku/services/getInspectorState.gen.json +10 -0
  63. package/.pikku/services/jwt.gen.json +13 -0
  64. package/.pikku/services/logger.gen.json +25 -0
  65. package/.pikku/services/queueService.gen.json +14 -0
  66. package/.pikku/services/schedulerService.gen.json +17 -0
  67. package/.pikku/services/schema.gen.json +14 -0
  68. package/.pikku/services/secrets.gen.json +13 -0
  69. package/.pikku/services/variables.gen.json +13 -0
  70. package/.pikku/services/workflowService.gen.json +31 -0
  71. package/.pikku/workflow/pikku-workflow-map.gen.d.ts +2 -36
  72. package/.pikku/workflow/pikku-workflow-types.gen.ts +305 -48
  73. package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +6 -2
  74. package/.pikku/workflow/pikku-workflow-wirings.gen.ts +1 -2
  75. package/CHANGELOG.md +44 -1
  76. package/bin/pikku.ts +6 -32
  77. package/build.sh +53 -31
  78. package/cli.schema.json +1 -1
  79. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +51 -10
  80. package/dist/.pikku/channel/pikku-channel-types.gen.js +3 -13
  81. package/dist/.pikku/channel/pikku-channels-meta.gen.js +3 -2
  82. package/dist/.pikku/channel/pikku-channels-meta.gen.json +1 -0
  83. package/dist/.pikku/channel/pikku-channels.gen.d.ts +1 -1
  84. package/dist/.pikku/channel/pikku-channels.gen.js +1 -1
  85. package/dist/.pikku/cli/pikku-cli-channel.js +2 -2
  86. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  87. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -3
  88. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +3 -3
  89. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  90. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +3 -157
  91. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +147 -0
  92. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +2 -2
  93. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +2 -2
  94. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  95. package/dist/.pikku/cli/pikku-cli.gen.js +3 -3
  96. package/dist/.pikku/forge/pikku-forge-types.gen.d.ts +72 -0
  97. package/dist/.pikku/forge/pikku-forge-types.gen.js +55 -0
  98. package/dist/.pikku/function/pikku-function-types.gen.d.ts +141 -99
  99. package/dist/.pikku/function/pikku-function-types.gen.js +52 -62
  100. package/dist/.pikku/function/pikku-functions-meta.gen.js +3 -969
  101. package/dist/.pikku/function/pikku-functions-meta.gen.json +656 -0
  102. package/dist/.pikku/http/pikku-http-types.gen.d.ts +19 -4
  103. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  104. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +3 -10
  105. package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
  106. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  107. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  108. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +57 -17
  109. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +7 -31
  110. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +5 -4
  111. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
  112. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.d.ts +1 -1
  113. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.js +1 -1
  114. package/dist/.pikku/pikku-bootstrap.gen.d.ts +7 -12
  115. package/dist/.pikku/pikku-bootstrap.gen.js +7 -12
  116. package/dist/.pikku/pikku-services.gen.d.ts +5 -7
  117. package/dist/.pikku/pikku-services.gen.js +3 -5
  118. package/dist/.pikku/pikku-types.gen.d.ts +2 -1
  119. package/dist/.pikku/pikku-types.gen.js +3 -1
  120. package/dist/.pikku/pikku-websocket.gen.d.ts +1 -1
  121. package/dist/.pikku/pikku-websocket.gen.js +1 -1
  122. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +2 -2
  123. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  124. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +3 -7
  125. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
  126. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  127. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  128. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.d.ts +9 -9
  129. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +5 -2
  130. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +2 -2
  131. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  132. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +3 -2
  133. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
  134. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.d.ts +1 -1
  135. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.js +1 -1
  136. package/dist/.pikku/schemas/register.gen.js +19 -15
  137. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  138. package/dist/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
  139. package/dist/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  140. package/dist/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
  141. package/dist/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
  142. package/dist/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
  143. package/dist/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
  144. package/dist/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
  145. package/dist/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
  146. package/dist/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
  147. package/dist/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
  148. package/dist/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
  149. package/dist/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
  150. package/dist/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
  151. package/dist/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
  152. package/dist/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  153. package/dist/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
  154. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +213 -39
  155. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +106 -16
  156. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +3 -2
  157. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +1 -1
  158. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -2
  159. package/dist/bin/pikku.js +5 -26
  160. package/dist/src/cli.wiring.js +4 -4
  161. package/dist/src/functions/commands/all.js +172 -94
  162. package/dist/src/functions/commands/bootstrap.js +21 -16
  163. package/dist/src/functions/commands/watch.js +6 -3
  164. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +12 -8
  165. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.d.ts +1 -1
  166. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +74 -22
  167. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.d.ts +1 -1
  168. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +72 -20
  169. package/dist/src/functions/wirings/channels/pikku-channels.js +9 -2
  170. package/dist/src/functions/wirings/channels/pikku-command-channels.js +18 -2
  171. package/dist/src/functions/wirings/channels/serialize-channel-types.js +72 -16
  172. package/dist/src/functions/wirings/channels/serialize-typed-channel-map.js +1 -2
  173. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +4 -4
  174. package/dist/src/functions/wirings/cli/pikku-command-cli-types.js +1 -1
  175. package/dist/src/functions/wirings/cli/pikku-command-cli.js +17 -3
  176. package/dist/src/functions/wirings/cli/serialize-channel-cli.js +1 -1
  177. package/dist/src/functions/wirings/cli/serialize-cli-types.js +2 -2
  178. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.d.ts +1 -1
  179. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.js +4 -4
  180. package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.d.ts +1 -0
  181. package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.js +90 -0
  182. package/dist/src/functions/wirings/forge/pikku-command-forge-types.d.ts +1 -0
  183. package/dist/src/functions/wirings/forge/pikku-command-forge-types.js +26 -0
  184. package/dist/src/functions/wirings/forge/serialize-forge-types.d.ts +4 -0
  185. package/dist/src/functions/wirings/forge/serialize-forge-types.js +90 -0
  186. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +4 -4
  187. package/dist/src/functions/wirings/functions/pikku-command-function-types.js +7 -2
  188. package/dist/src/functions/wirings/functions/pikku-command-functions.js +35 -10
  189. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
  190. package/dist/src/functions/wirings/functions/pikku-command-services.js +24 -24
  191. package/dist/src/functions/wirings/functions/pikku-function-types.js +2 -2
  192. package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
  193. package/dist/src/functions/wirings/functions/schemas.js +5 -4
  194. package/dist/src/functions/wirings/functions/serialize-function-imports.d.ts +3 -1
  195. package/dist/src/functions/wirings/functions/serialize-function-imports.js +7 -3
  196. package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
  197. package/dist/src/functions/wirings/functions/serialize-function-types.js +224 -91
  198. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.d.ts +1 -1
  199. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.js +19 -21
  200. package/dist/src/functions/wirings/http/openapi-spec-generator.js +5 -5
  201. package/dist/src/functions/wirings/http/pikku-command-http-routes.js +18 -2
  202. package/dist/src/functions/wirings/http/pikku-command-openapi.js +2 -2
  203. package/dist/src/functions/wirings/http/pikku-http-routes.js +9 -2
  204. package/dist/src/functions/wirings/http/serialize-http-types.js +19 -3
  205. package/dist/src/functions/wirings/http/serialize-typed-http-map.js +33 -8
  206. package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +29 -6
  207. package/dist/src/functions/wirings/mcp/serialize-mcp-json.js +3 -2
  208. package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +71 -19
  209. package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +29 -2
  210. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.d.ts +5 -2
  211. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.js +5 -13
  212. package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -0
  213. package/dist/src/functions/wirings/package/pikku-command-package.js +58 -0
  214. package/dist/src/functions/wirings/package/serialize-package.d.ts +5 -0
  215. package/dist/src/functions/wirings/package/serialize-package.js +32 -0
  216. package/dist/src/functions/wirings/queue/pikku-command-queue.js +17 -3
  217. package/dist/src/functions/wirings/queue/pikku-queue.js +9 -11
  218. package/dist/src/functions/wirings/queue/serialize-queue-map.js +20 -3
  219. package/dist/src/functions/wirings/queue/serialize-queue-meta.d.ts +2 -1
  220. package/dist/src/functions/wirings/queue/serialize-queue-meta.js +10 -1
  221. package/dist/src/functions/wirings/queue/serialize-queue-types.js +1 -1
  222. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.js +4 -4
  223. package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +9 -2
  224. package/dist/src/functions/wirings/rpc/serialize-public-rpc.js +11 -4
  225. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +4 -1
  226. package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +3 -3
  227. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.d.ts +1 -1
  228. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +54 -8
  229. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +15 -3
  230. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.d.ts +2 -1
  231. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.js +11 -1
  232. package/dist/src/functions/wirings/scheduler/serialize-scheduler-types.js +1 -1
  233. package/dist/src/functions/wirings/services/pikku-command-service-metadata.d.ts +1 -0
  234. package/dist/src/functions/wirings/services/pikku-command-service-metadata.js +22 -0
  235. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +58 -16
  236. package/dist/src/functions/wirings/workflow/serialize-workflow-map.d.ts +3 -0
  237. package/dist/src/functions/wirings/workflow/serialize-workflow-map.js +30 -32
  238. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.d.ts +1 -2
  239. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +43 -8
  240. package/dist/src/functions/wirings/workflow/serialize-workflow-registration.d.ts +7 -0
  241. package/dist/src/functions/wirings/workflow/serialize-workflow-registration.js +53 -0
  242. package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +4 -2
  243. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +308 -49
  244. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.d.ts +1 -1
  245. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +16 -29
  246. package/dist/src/middleware/log-command-info-and-time.d.ts +2 -2
  247. package/dist/src/middleware/log-command-info-and-time.js +1 -4
  248. package/dist/src/services/cli-logger-forwarder.service.js +1 -1
  249. package/dist/src/services.d.ts +2 -7
  250. package/dist/src/services.js +18 -13
  251. package/dist/src/utils/check-required-types.d.ts +2 -2
  252. package/dist/src/utils/check-required-types.js +2 -3
  253. package/dist/src/utils/command-summary.d.ts +2 -0
  254. package/dist/src/utils/command-summary.js +2 -0
  255. package/dist/src/utils/custom-types-generator.js +13 -15
  256. package/dist/src/utils/generate-bootstrap-file.js +1 -1
  257. package/dist/src/utils/pikku-cli-config.js +65 -4
  258. package/dist/src/utils/pikku-files-and-methods.d.ts +2 -2
  259. package/dist/src/utils/pikku-files-and-methods.js +4 -4
  260. package/dist/src/utils/schema-generator.d.ts +4 -3
  261. package/dist/src/utils/schema-generator.js +135 -15
  262. package/dist/src/utils/strip-verbose-meta.d.ts +43 -0
  263. package/dist/src/utils/strip-verbose-meta.js +210 -0
  264. package/dist/tsconfig.tsbuildinfo +1 -1
  265. package/package.json +11 -9
  266. package/src/cli.wiring.ts +4 -4
  267. package/src/functions/commands/all.ts +203 -107
  268. package/src/functions/commands/bootstrap.ts +23 -16
  269. package/src/functions/commands/watch.ts +6 -3
  270. package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +26 -6
  271. package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +75 -22
  272. package/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +72 -19
  273. package/src/functions/wirings/channels/pikku-channels.ts +27 -3
  274. package/src/functions/wirings/channels/pikku-command-channels.ts +46 -3
  275. package/src/functions/wirings/channels/serialize-channel-types.ts +72 -16
  276. package/src/functions/wirings/channels/serialize-typed-channel-map.ts +3 -2
  277. package/src/functions/wirings/cli/pikku-command-cli-entry.ts +4 -4
  278. package/src/functions/wirings/cli/pikku-command-cli-types.ts +1 -1
  279. package/src/functions/wirings/cli/pikku-command-cli.ts +45 -3
  280. package/src/functions/wirings/cli/serialize-channel-cli.ts +1 -1
  281. package/src/functions/wirings/cli/serialize-cli-types.ts +2 -2
  282. package/src/functions/wirings/cli/serialize-local-cli-bootstrap.ts +5 -5
  283. package/src/functions/wirings/forge/pikku-command-forge-nodes.ts +135 -0
  284. package/src/functions/wirings/forge/pikku-command-forge-types.ts +38 -0
  285. package/src/functions/wirings/forge/serialize-forge-types.ts +94 -0
  286. package/src/functions/wirings/functions/pikku-command-function-types-split.ts +9 -8
  287. package/src/functions/wirings/functions/pikku-command-function-types.ts +17 -10
  288. package/src/functions/wirings/functions/pikku-command-functions.ts +59 -14
  289. package/src/functions/wirings/functions/pikku-command-services.ts +26 -26
  290. package/src/functions/wirings/functions/pikku-function-types.ts +3 -1
  291. package/src/functions/wirings/functions/schemas.ts +14 -4
  292. package/src/functions/wirings/functions/serialize-function-imports.ts +12 -3
  293. package/src/functions/wirings/functions/serialize-function-types.ts +227 -93
  294. package/src/functions/wirings/functions/serialize-pikku-types-hub.ts +27 -26
  295. package/src/functions/wirings/http/openapi-spec-generator.ts +15 -6
  296. package/src/functions/wirings/http/pikku-command-http-routes.ts +46 -2
  297. package/src/functions/wirings/http/pikku-command-openapi.ts +3 -2
  298. package/src/functions/wirings/http/pikku-http-routes.ts +28 -2
  299. package/src/functions/wirings/http/serialize-http-types.ts +19 -3
  300. package/src/functions/wirings/http/serialize-typed-http-map.ts +32 -8
  301. package/src/functions/wirings/mcp/pikku-command-mcp.ts +58 -10
  302. package/src/functions/wirings/mcp/serialize-mcp-json.ts +8 -6
  303. package/src/functions/wirings/mcp/serialize-mcp-types.ts +71 -19
  304. package/src/functions/wirings/middleware/pikku-command-middleware.ts +39 -2
  305. package/src/functions/wirings/middleware/serialize-middleware-groups-meta.ts +4 -19
  306. package/src/functions/wirings/package/pikku-command-package.ts +81 -0
  307. package/src/functions/wirings/package/serialize-package.ts +69 -0
  308. package/src/functions/wirings/permissions/pikku-command-permissions.ts +2 -2
  309. package/src/functions/wirings/queue/pikku-command-queue.ts +47 -2
  310. package/src/functions/wirings/queue/pikku-queue.ts +26 -10
  311. package/src/functions/wirings/queue/serialize-queue-map.ts +18 -3
  312. package/src/functions/wirings/queue/serialize-queue-meta.ts +15 -1
  313. package/src/functions/wirings/queue/serialize-queue-types.ts +1 -1
  314. package/src/functions/wirings/rpc/pikku-command-rpc-map.ts +7 -4
  315. package/src/functions/wirings/rpc/pikku-command-rpc.ts +25 -2
  316. package/src/functions/wirings/rpc/serialize-public-rpc.ts +11 -4
  317. package/src/functions/wirings/rpc/serialize-remote-rpc.ts +4 -1
  318. package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +3 -3
  319. package/src/functions/wirings/rpc/serialize-typed-rpc-map.ts +74 -8
  320. package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +51 -4
  321. package/src/functions/wirings/scheduler/serialize-scheduler-meta.ts +20 -1
  322. package/src/functions/wirings/scheduler/serialize-scheduler-types.ts +1 -1
  323. package/src/functions/wirings/services/pikku-command-service-metadata.ts +25 -0
  324. package/src/functions/wirings/workflow/pikku-command-workflow.ts +114 -19
  325. package/src/functions/wirings/workflow/serialize-workflow-map.ts +38 -40
  326. package/src/functions/wirings/workflow/serialize-workflow-meta.ts +68 -11
  327. package/src/functions/wirings/workflow/serialize-workflow-registration.ts +83 -0
  328. package/src/functions/wirings/workflow/serialize-workflow-types.ts +311 -49
  329. package/src/functions/wirings/workflow/serialize-workflow-workers.ts +16 -29
  330. package/src/middleware/log-command-info-and-time.ts +3 -6
  331. package/src/services/cli-logger-forwarder.service.ts +1 -1
  332. package/src/services.ts +23 -16
  333. package/src/utils/check-required-types.ts +4 -7
  334. package/src/utils/command-summary.ts +4 -0
  335. package/src/utils/custom-types-generator.ts +15 -15
  336. package/src/utils/generate-bootstrap-file.ts +1 -1
  337. package/src/utils/pikku-cli-config.ts +105 -5
  338. package/src/utils/pikku-files-and-methods.ts +10 -13
  339. package/src/utils/schema-generator.ts +185 -22
  340. package/src/utils/strip-verbose-meta.ts +254 -0
  341. package/types/application-types.d.ts +1 -1
  342. package/types/config.d.ts +47 -2
  343. package/.pikku/function/pikku-functions-meta.min.gen.ts +0 -211
  344. package/.pikku/function/pikku-functions.gen.ts +0 -84
  345. package/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts +0 -47
  346. package/dist/.pikku/function/pikku-functions-meta.min.gen.d.ts +0 -1
  347. package/dist/.pikku/function/pikku-functions-meta.min.gen.js +0 -211
  348. package/dist/.pikku/function/pikku-functions.gen.d.ts +0 -1
  349. package/dist/.pikku/function/pikku-functions.gen.js +0 -83
  350. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.d.ts +0 -1
  351. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +0 -47
  352. package/dist/.pikku/schemas/schemas/PikkuRemoteInternalRPCInput.schema.json +0 -1
  353. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.d.ts +0 -1
  354. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.js +0 -12
  355. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.d.ts +0 -1
  356. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.js +0 -11
  357. package/src/functions/wirings/workflow/pikku-command-workflow-map.ts +0 -24
  358. package/src/functions/wirings/workflow/pikku-command-workflow-types.ts +0 -22
@@ -2,11 +2,18 @@ import { serializeImportMap } from '../../../utils/serialize-import-map.js';
2
2
  import { generateCustomTypes } from '../../../utils/custom-types-generator.js';
3
3
  export const serializeWorkflowMap = (relativeToPath, packageMappings, typesMap, functionsMeta, workflowsMeta) => {
4
4
  const requiredTypes = new Set();
5
- const serializedCustomTypes = generateCustomTypes(typesMap, requiredTypes);
5
+ // First generate workflows to collect required types
6
6
  const serializedWorkflows = generateWorkflows(workflowsMeta, functionsMeta, typesMap, requiredTypes);
7
- const serializedImportMap = serializeImportMap(relativeToPath, packageMappings, typesMap, requiredTypes);
7
+ // Only generate custom types if we have workflows with types
8
+ const hasWorkflows = Object.keys(workflowsMeta).length > 0;
9
+ const serializedCustomTypes = hasWorkflows
10
+ ? generateCustomTypes(typesMap, requiredTypes)
11
+ : '';
12
+ const serializedImportMap = hasWorkflows
13
+ ? serializeImportMap(relativeToPath, packageMappings, typesMap, requiredTypes)
14
+ : '';
8
15
  return `/**
9
- * This provides the structure needed for TypeScript to be aware of workflows and their input/output types
16
+ * Workflow type map with input/output types for each workflow
10
17
  */
11
18
 
12
19
  ${serializedImportMap}
@@ -19,38 +26,19 @@ interface WorkflowHandler<I, O> {
19
26
 
20
27
  ${serializedWorkflows}
21
28
 
22
- /**
23
- * Type-safe workflow client API
24
- */
25
29
  export type WorkflowClient<Name extends keyof WorkflowMap> = {
26
- /**
27
- * Start a new workflow run
28
- */
29
30
  start: (input: WorkflowMap[Name]['input']) => Promise<{ runId: string }>;
30
-
31
- /**
32
- * Get a workflow run by ID
33
- */
34
31
  getRun: <output extends keyof WorkflowMap[Name]>(runId: string) => Promise<WorkflowMap[Name][output]>;
35
-
36
- /**
37
- * Cancel a running workflow
38
- */
39
32
  cancelRun: (runId: string) => Promise<boolean>;
40
33
  }
41
34
 
42
- /**
43
- * Map of all registered workflows with type-safe client APIs
44
- */
45
35
  export type TypedWorkflowClients = {
46
36
  [Name in keyof WorkflowMap]: WorkflowClient<Name>;
47
37
  }
48
- `;
38
+ `;
49
39
  };
50
40
  function generateWorkflows(workflowsMeta, functionsMeta, typesMap, requiredTypes) {
51
- // Initialize an object to collect workflows
52
41
  const workflowsObj = {};
53
- // Iterate through workflow metadata
54
42
  for (const [workflowName, { pikkuFuncName }] of Object.entries(workflowsMeta)) {
55
43
  const functionMeta = functionsMeta[pikkuFuncName];
56
44
  if (!functionMeta) {
@@ -58,18 +46,28 @@ function generateWorkflows(workflowsMeta, functionsMeta, typesMap, requiredTypes
58
46
  }
59
47
  const input = functionMeta.inputs ? functionMeta.inputs[0] : undefined;
60
48
  const output = functionMeta.outputs ? functionMeta.outputs[0] : undefined;
61
- // Store the input and output types for WorkflowHandler
62
- const inputType = input ? typesMap.getTypeMeta(input).uniqueName : 'void';
63
- const outputType = output ? typesMap.getTypeMeta(output).uniqueName : 'void';
49
+ let inputType = 'void';
50
+ if (input) {
51
+ try {
52
+ inputType = typesMap.getTypeMeta(input).uniqueName;
53
+ }
54
+ catch {
55
+ inputType = input;
56
+ }
57
+ }
58
+ let outputType = 'void';
59
+ if (output) {
60
+ try {
61
+ outputType = typesMap.getTypeMeta(output).uniqueName;
62
+ }
63
+ catch {
64
+ outputType = output;
65
+ }
66
+ }
64
67
  requiredTypes.add(inputType);
65
68
  requiredTypes.add(outputType);
66
- // Add workflow entry
67
- workflowsObj[workflowName] = {
68
- inputType,
69
- outputType,
70
- };
69
+ workflowsObj[workflowName] = { inputType, outputType };
71
70
  }
72
- // Build the Workflows object as a string
73
71
  let workflowsStr = 'export type WorkflowMap = {\n';
74
72
  for (const [workflowName, handler] of Object.entries(workflowsObj)) {
75
73
  workflowsStr += ` readonly '${workflowName}': WorkflowHandler<${handler.inputType}, ${handler.outputType}>,\n`;
@@ -1,2 +1 @@
1
- import { WorkflowsMeta } from '@pikku/core/workflow';
2
- export declare const serializeWorkflowMeta: (workflowsMeta: WorkflowsMeta) => string;
1
+ export declare const serializeWorkflowMeta: (outputPath: string, metaDir: string, workflowNames: string[], packageMappings: Record<string, string>, supportsImportAttributes: boolean, packageName?: string) => string;
@@ -1,10 +1,45 @@
1
- export const serializeWorkflowMeta = (workflowsMeta) => {
2
- const serializedOutput = [];
3
- serializedOutput.push("import { pikkuState } from '@pikku/core'");
4
- serializedOutput.push(`pikkuState('workflows', 'meta', ${JSON.stringify(workflowsMeta, null, 2)})`);
5
- const workflowsMetaValues = Object.values(workflowsMeta);
6
- if (workflowsMetaValues.length > 0) {
7
- serializedOutput.push(`export type WorkflowNames = '${workflowsMetaValues.map((w) => w.workflowName).join("' | '")}'`);
1
+ /**
2
+ * Generate workflow meta aggregation file that imports individual workflow JSON files
3
+ * and registers them with pikkuState
4
+ */
5
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
6
+ export const serializeWorkflowMeta = (outputPath, metaDir, workflowNames, packageMappings, supportsImportAttributes, packageName) => {
7
+ const lines = [];
8
+ if (workflowNames.length === 0) {
9
+ // Empty meta file - still need to register empty meta
10
+ lines.push("import { pikkuState } from '@pikku/core'");
11
+ lines.push("import type { SerializedWorkflowGraphs } from '@pikku/inspector/workflow-graph'");
12
+ lines.push('');
13
+ lines.push('const workflowsMeta: SerializedWorkflowGraphs = {}');
14
+ lines.push('');
15
+ const packageNameValue = packageName ? `'${packageName}'` : 'null';
16
+ lines.push(`pikkuState(${packageNameValue}, 'workflows', 'meta', workflowsMeta)`);
17
+ return lines.join('\n');
8
18
  }
9
- return serializedOutput.join('\n');
19
+ // Imports
20
+ lines.push("import { pikkuState } from '@pikku/core'");
21
+ lines.push("import type { SerializedWorkflowGraphs } from '@pikku/inspector/workflow-graph'");
22
+ lines.push('');
23
+ // Import each workflow meta JSON
24
+ const sortedNames = [...workflowNames].sort();
25
+ for (const name of sortedNames) {
26
+ const jsonPath = `${metaDir}/${name}.gen.json`;
27
+ const importPath = getFileImportRelativePath(outputPath, jsonPath, packageMappings);
28
+ const importStatement = supportsImportAttributes
29
+ ? `import ${name}Meta from '${importPath}' with { type: 'json' }`
30
+ : `import ${name}Meta from '${importPath}'`;
31
+ lines.push(importStatement);
32
+ }
33
+ lines.push('');
34
+ // Create aggregated meta object (cast JSON imports to proper types)
35
+ lines.push('const workflowsMeta = {');
36
+ for (const name of sortedNames) {
37
+ lines.push(` '${name}': ${name}Meta,`);
38
+ }
39
+ lines.push('} as SerializedWorkflowGraphs');
40
+ lines.push('');
41
+ // Register meta with pikkuState
42
+ const packageNameValue = packageName ? `'${packageName}'` : 'null';
43
+ lines.push(`pikkuState(${packageNameValue}, 'workflows', 'meta', workflowsMeta)`);
44
+ return lines.join('\n');
10
45
  };
@@ -0,0 +1,7 @@
1
+ export declare const serializeWorkflowRegistration: (outputPath: string, metaImportPath: string, workflowNames: string[], workflowFiles: Map<string, {
2
+ path: string;
3
+ exportedName: string;
4
+ }>, graphFiles: Map<string, {
5
+ path: string;
6
+ exportedName: string;
7
+ }>, packageMappings: Record<string, string>, _packageName?: string) => string;
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Generate workflow runtime registration
3
+ * Imports meta (which registers with pikkuState) and registers DSL workflows (addWorkflow) and graph workflows (addWorkflowGraph)
4
+ */
5
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
6
+ export const serializeWorkflowRegistration = (outputPath, metaImportPath, workflowNames, workflowFiles, graphFiles, packageMappings, _packageName) => {
7
+ const lines = [];
8
+ const hasWorkflows = workflowNames.length > 0;
9
+ const hasDslWorkflows = workflowFiles.size > 0;
10
+ const hasGraphWorkflows = graphFiles.size > 0;
11
+ // Imports
12
+ const imports = [];
13
+ if (hasDslWorkflows) {
14
+ imports.push('addWorkflow');
15
+ }
16
+ if (hasGraphWorkflows) {
17
+ imports.push('addWorkflowGraph');
18
+ }
19
+ if (imports.length > 0) {
20
+ lines.push(`import { ${imports.join(', ')} } from '@pikku/core/workflow'`);
21
+ }
22
+ // Import meta file (which registers meta with pikkuState)
23
+ if (hasWorkflows) {
24
+ lines.push(`import '${metaImportPath}'`);
25
+ }
26
+ // Import DSL workflow functions
27
+ const sortedWorkflows = Array.from(workflowFiles.entries()).sort((a, b) => a[0].localeCompare(b[0]));
28
+ for (const [, { path, exportedName }] of sortedWorkflows) {
29
+ const importPath = getFileImportRelativePath(outputPath, path, packageMappings);
30
+ lines.push(`import { ${exportedName} } from '${importPath}'`);
31
+ }
32
+ // Import graph workflow definitions
33
+ const sortedGraphWorkflows = Array.from(graphFiles.entries()).sort((a, b) => a[0].localeCompare(b[0]));
34
+ for (const [, { path, exportedName }] of sortedGraphWorkflows) {
35
+ const importPath = getFileImportRelativePath(outputPath, path, packageMappings);
36
+ lines.push(`import { ${exportedName} } from '${importPath}'`);
37
+ }
38
+ lines.push('');
39
+ // Register DSL workflows
40
+ for (const [pikkuFuncName, { exportedName }] of sortedWorkflows) {
41
+ lines.push(`addWorkflow('${pikkuFuncName}', ${exportedName})`);
42
+ }
43
+ // Register graph workflows
44
+ for (const [workflowName, { exportedName }] of sortedGraphWorkflows) {
45
+ lines.push(`addWorkflowGraph('${workflowName}', ${exportedName})`);
46
+ }
47
+ // Export workflow names type
48
+ if (hasWorkflows) {
49
+ lines.push('');
50
+ lines.push(`export type WorkflowNames = '${workflowNames.join("' | '")}'`);
51
+ }
52
+ return lines.join('\n');
53
+ };
@@ -1,4 +1,6 @@
1
1
  /**
2
- * Generates type definitions for workflow wirings
2
+ * Generate all workflow type helpers for authoring workflows
3
+ * Combines DSL helpers (pikkuWorkflowFunc, pikkuWorkflowComplexFunc) and
4
+ * graph helpers (pikkuWorkflowGraph) with unified wireWorkflow
3
5
  */
4
- export declare const serializeWorkflowTypes: (functionTypesImportPath: string) => string;
6
+ export declare const serializeWorkflowTypes: (functionTypesImportPath: string, rpcMapImportPath: string) => string;
@@ -1,34 +1,32 @@
1
1
  /**
2
- * Generates type definitions for workflow wirings
2
+ * Generate all workflow type helpers for authoring workflows
3
+ * Combines DSL helpers (pikkuWorkflowFunc, pikkuWorkflowComplexFunc) and
4
+ * graph helpers (pikkuWorkflowGraph) with unified wireWorkflow
3
5
  */
4
- export const serializeWorkflowTypes = (functionTypesImportPath) => {
6
+ export const serializeWorkflowTypes = (functionTypesImportPath, rpcMapImportPath) => {
5
7
  return `/**
6
- * Workflow-specific type definitions for tree-shaking optimization
8
+ * Workflow type definitions and helpers
9
+ * Used for authoring both DSL and graph-based workflows
7
10
  */
8
11
 
9
- import { CoreWorkflow, wireWorkflow as wireWorkflowCore, PikkuWorkflowInteraction, WorkflowStepOptions } from '@pikku/core/workflow'
10
- import { CorePikkuFunctionConfig, CorePikkuFunctionSessionless } from '@pikku/core'
11
- import type { PikkuPermission, PikkuMiddleware } from '${functionTypesImportPath}'
12
- import type { UserSession, SingletonServices } from '../../types/application-types.d.js'
13
- import type { TypedPikkuRPC, RPCMap } from '../rpc/pikku-rpc-wirings-map.internal.gen.d.js'
12
+ import { PikkuWorkflowWire, WorkflowStepOptions, WorkflowCancelledException } from '@pikku/core/workflow'
14
13
 
15
- /**
16
- * Type definition for workflows that orchestrate multi-step processes.
17
- * Workflows support both inline and remote execution modes with step caching.
18
- */
19
- type WorkflowWiring = CoreWorkflow<
20
- CorePikkuFunctionConfig<PikkuFunctionWorkflow<any, any>, PikkuPermission<any>, PikkuMiddleware>
21
- >
14
+ // Re-export WorkflowCancelledException for use in workflow functions
15
+ export { WorkflowCancelledException }
16
+ import type { PikkuFunctionSessionless, PikkuFunctionConfig } from '${functionTypesImportPath}'
17
+ import type { RPCMap, FlattenedRPCMap } from '${rpcMapImportPath}'
18
+ import type { GraphNodeConfig, HTTPMethod } from '@pikku/core'
19
+ import { createGraph, wireWorkflow as coreWireWorkflow } from '@pikku/core'
20
+
21
+ // ============================================================================
22
+ // DSL Workflow Types (pikkuWorkflowFunc, pikkuWorkflowComplexFunc)
23
+ // ============================================================================
22
24
 
23
25
  /**
24
- * Typed workflow interaction with RPC awareness
26
+ * Typed workflow wire with RPC awareness
25
27
  * Provides type-safe workflow.do() for RPC steps
26
28
  */
27
- export interface TypedWorkflow extends PikkuWorkflowInteraction {
28
- /**
29
- * Execute a workflow step with RPC invocation (typed based on available RPCs)
30
- * @template K - RPC name from the RPC map
31
- */
29
+ export interface TypedWorkflow extends PikkuWorkflowWire {
32
30
  do<K extends keyof RPCMap>(
33
31
  stepName: string,
34
32
  rpcName: K,
@@ -36,10 +34,6 @@ export interface TypedWorkflow extends PikkuWorkflowInteraction {
36
34
  options?: WorkflowStepOptions
37
35
  ): Promise<RPCMap[K]['output']>
38
36
 
39
- /**
40
- * Execute a workflow step with inline function
41
- * @template T - Return type of the inline function
42
- */
43
37
  do<T>(
44
38
  stepName: string,
45
39
  fn: () => T | Promise<T>,
@@ -49,47 +43,312 @@ export interface TypedWorkflow extends PikkuWorkflowInteraction {
49
43
 
50
44
  /**
51
45
  * Workflow function type with typed workflow service
52
- * Includes the workflow interaction object with typed RPC methods
53
46
  */
54
47
  export type PikkuFunctionWorkflow<
55
48
  In = unknown,
56
49
  Out = never
57
- > = CorePikkuFunctionSessionless<
58
- In,
59
- Out,
60
- null,
61
- SingletonServices & {
62
- rpc: TypedPikkuRPC
63
- workflow: TypedWorkflow
64
- },
65
- UserSession
66
- >
50
+ > = PikkuFunctionSessionless<In, Out, 'workflow'>
67
51
 
68
52
  /**
69
- * Creates a workflow function with typed input and output.
70
- * Workflow functions have access to the workflow interaction object for step execution.
71
- *
72
- * @template In - Input type for the workflow
73
- * @template Out - Output type for the workflow
74
- * @param func - Function definition, either direct function or configuration object
75
- * @returns The normalized configuration object
53
+ * Creates a DSL-compatible workflow function (serializable, shows in Forge UI)
76
54
  */
77
55
  export const pikkuWorkflowFunc = <In, Out = unknown>(
78
56
  func:
79
57
  | PikkuFunctionWorkflow<In, Out>
80
- | CorePikkuFunctionConfig<PikkuFunctionWorkflow<In, Out>, PikkuPermission<In>, PikkuMiddleware>
58
+ | PikkuFunctionConfig<In, Out, 'workflow', PikkuFunctionWorkflow<In, Out>>
59
+ ) => {
60
+ return typeof func === 'function' ? { func } : func
61
+ }
62
+
63
+ /**
64
+ * Creates a complex workflow function (arbitrary code, hidden from Forge UI)
65
+ */
66
+ export const pikkuWorkflowComplexFunc = <In, Out = unknown>(
67
+ func:
68
+ | PikkuFunctionWorkflow<In, Out>
69
+ | PikkuFunctionConfig<In, Out, 'workflow', PikkuFunctionWorkflow<In, Out>>
81
70
  ) => {
82
71
  return typeof func === 'function' ? { func } : func
83
72
  }
84
73
 
74
+ // ============================================================================
75
+ // Graph Workflow Types (pikkuWorkflowGraph)
76
+ // ============================================================================
77
+
78
+ /**
79
+ * Type-safe graph builder with full RPC autocomplete
80
+ */
81
+ const graphBuilder = createGraph<FlattenedRPCMap>()
82
+
83
+ /** HTTP wire configuration for graph workflows */
84
+ interface GraphHttpWire<NodeIds extends string> {
85
+ route: string
86
+ method: HTTPMethod
87
+ startNode: NodeIds
88
+ }
89
+
90
+ /** Channel wire configuration for graph workflows */
91
+ interface GraphChannelWire<NodeIds extends string> {
92
+ name: string
93
+ onConnect?: NodeIds
94
+ onDisconnect?: NodeIds
95
+ onMessage?: NodeIds
96
+ }
97
+
98
+ /** Queue wire configuration for graph workflows */
99
+ interface GraphQueueWire<NodeIds extends string> {
100
+ name: string
101
+ startNode: NodeIds
102
+ }
103
+
104
+ /** CLI wire configuration for graph workflows */
105
+ interface GraphCliWire<NodeIds extends string> {
106
+ command: string
107
+ startNode: NodeIds
108
+ }
109
+
110
+ /** MCP wire configurations for graph workflows */
111
+ interface GraphMcpWires<NodeIds extends string> {
112
+ tool?: Array<{ name: string; startNode: NodeIds }>
113
+ prompt?: Array<{ name: string; startNode: NodeIds }>
114
+ resource?: Array<{ uri: string; startNode: NodeIds }>
115
+ }
116
+
117
+ /** Schedule wire configuration for graph workflows */
118
+ interface GraphScheduleWire<NodeIds extends string> {
119
+ cron?: string
120
+ interval?: string
121
+ startNode: NodeIds
122
+ }
123
+
124
+ /** Trigger wire configuration for graph workflows */
125
+ interface GraphTriggerWire<NodeIds extends string> {
126
+ name: string // RPC name of the trigger function
127
+ startNode: NodeIds
128
+ }
129
+
130
+ /** All wire configurations for graph workflows */
131
+ interface GraphWiresConfig<NodeIds extends string> {
132
+ http?: Array<GraphHttpWire<NodeIds>>
133
+ channel?: Array<GraphChannelWire<NodeIds>>
134
+ queue?: Array<GraphQueueWire<NodeIds>>
135
+ cli?: Array<GraphCliWire<NodeIds>>
136
+ mcp?: GraphMcpWires<NodeIds>
137
+ schedule?: Array<GraphScheduleWire<NodeIds>>
138
+ trigger?: Array<GraphTriggerWire<NodeIds>>
139
+ }
140
+
141
+ /** Configuration for graph-based workflow */
142
+ export interface PikkuWorkflowGraphConfig<
143
+ FuncMap extends Record<string, keyof FlattenedRPCMap & string>,
144
+ T
145
+ > {
146
+ /** Workflow name (optional - defaults to exported variable name) */
147
+ name?: string
148
+ /** Optional description */
149
+ description?: string
150
+ /** Optional tags for organization */
151
+ tags?: string[]
152
+ /** Node to RPC function mapping */
153
+ nodes: FuncMap
154
+ /** Wire configurations - how this workflow can be triggered */
155
+ wires?: GraphWiresConfig<Extract<keyof FuncMap, string>>
156
+ /** Node configurations (next, input, onError) */
157
+ config?: T
158
+ }
159
+
160
+ /** Result of pikkuWorkflowGraph - includes metadata for wiring */
161
+ export interface PikkuWorkflowGraphResult<T, NodeIds extends string = string> {
162
+ __type: 'pikkuWorkflowGraph'
163
+ name?: string
164
+ description?: string
165
+ tags?: string[]
166
+ wires?: GraphWiresConfig<NodeIds>
167
+ graph: T
168
+ }
169
+
85
170
  /**
86
- * Registers a workflow with the Pikku framework.
87
- * Workflows can run in 'inline' (synchronous) or 'remote' (queue-based) execution modes.
171
+ * Creates a graph-based workflow definition with metadata
172
+ * Name defaults to the exported variable name if not provided.
173
+ *
174
+ * @example
175
+ * // Name inferred from exported variable name
176
+ * export const myWorkflow = pikkuWorkflowGraph({
177
+ * description: 'Handles user onboarding',
178
+ * tags: ['onboarding'],
179
+ * nodes: {
180
+ * entry: 'createUser',
181
+ * sendEmail: 'sendWelcomeEmail',
182
+ * },
183
+ * config: {
184
+ * entry: { next: 'sendEmail' },
185
+ * sendEmail: { input: (ref) => ({ to: ref('entry', 'email') }) },
186
+ * },
187
+ * })
188
+ */
189
+ export function pikkuWorkflowGraph<
190
+ const FuncMap extends Record<string, keyof FlattenedRPCMap & string>
191
+ >(
192
+ config: PikkuWorkflowGraphConfig<FuncMap, GraphNodeConfigMap<FuncMap>>
193
+ ): PikkuWorkflowGraphResult<Record<Extract<keyof FuncMap, string>, GraphNodeConfig<Extract<keyof FuncMap, string>>>, Extract<keyof FuncMap, string>> {
194
+ return {
195
+ __type: 'pikkuWorkflowGraph',
196
+ name: config.name,
197
+ description: config.description,
198
+ tags: config.tags,
199
+ wires: config.wires,
200
+ graph: graphBuilder(config.nodes, config.config as any),
201
+ }
202
+ }
203
+
204
+ /** Typed ref value */
205
+ type TypedRef<T> = { $ref: string; path?: string } & { __phantomType?: T }
206
+
207
+ /** Template string type - assignable to string fields */
208
+ type TemplateString = {
209
+ $template: {
210
+ parts: string[]
211
+ expressions: Array<{ $ref: string; path?: string }>
212
+ }
213
+ } & { __brand: 'TemplateString' }
214
+
215
+ /**
216
+ * Creates a template string with variable interpolation
217
+ * Uses indexed placeholders $0, $1, etc. with refs array
218
+ *
219
+ * @example
220
+ * template('Hello $0, your order $1 is ready', [ref('trigger', 'name'), ref('step_0', 'orderId')])
221
+ */
222
+ export function template(templateStr: string, refs: TypedRef<unknown>[]): TemplateString {
223
+ const parts: string[] = []
224
+ const expressions: Array<{ $ref: string; path?: string }> = []
225
+
226
+ // Parse template string: "Hello $0" -> parts: ["Hello ", ""], use refs[0] for expression
227
+ const regex = /\$(\d+)/g
228
+ let lastIndex = 0
229
+ let match
230
+
231
+ while ((match = regex.exec(templateStr)) !== null) {
232
+ // Add the part before this match
233
+ parts.push(templateStr.slice(lastIndex, match.index))
234
+
235
+ // Get the ref by index
236
+ const refIndex = parseInt(match[1]!, 10)
237
+ const refValue = refs[refIndex]
238
+ if (refValue) {
239
+ const expr: { $ref: string; path?: string } = { $ref: refValue.$ref }
240
+ if (refValue.path) {
241
+ expr.path = refValue.path
242
+ }
243
+ expressions.push(expr)
244
+ } else {
245
+ expressions.push({ $ref: 'unknown' })
246
+ }
247
+
248
+ lastIndex = regex.lastIndex
249
+ }
250
+
251
+ // Add the remaining part
252
+ parts.push(templateStr.slice(lastIndex))
253
+
254
+ return {
255
+ $template: { parts, expressions }
256
+ } as TemplateString
257
+ }
258
+
259
+ /** Map input type fields to allow TypedRef or TemplateString for any field */
260
+ type InputWithRefs<T> = {
261
+ [K in keyof T]?: T[K] | TypedRef<T[K]> | TypedRef<unknown> | TemplateString
262
+ }
263
+
264
+ /** Get the input type for a node based on its RPC mapping */
265
+ type NodeInputType<FuncMap extends Record<string, string>, K extends keyof FuncMap> =
266
+ FuncMap[K] extends keyof FlattenedRPCMap
267
+ ? InputWithRefs<FlattenedRPCMap[FuncMap[K]]['input']>
268
+ : Record<string, unknown>
269
+
270
+ /** Get the output type keys for a node based on its RPC mapping */
271
+ type NodeOutputKeys<FuncMap extends Record<string, string>, N extends string> =
272
+ N extends keyof FuncMap
273
+ ? FuncMap[N] extends keyof FlattenedRPCMap
274
+ ? keyof FlattenedRPCMap[FuncMap[N]]['output'] & string
275
+ : string
276
+ : string
277
+
278
+ /** Ref function type with path validation */
279
+ type RefFunction<FuncMap extends Record<string, string>> = {
280
+ <N extends Extract<keyof FuncMap, string>>(
281
+ nodeId: N,
282
+ path: NodeOutputKeys<FuncMap, N>
283
+ ): TypedRef<unknown>
284
+ (nodeId: 'trigger' | '$item', path?: string): TypedRef<unknown>
285
+ }
286
+
287
+ /** Template function type */
288
+ type TemplateFunction = (templateStr: string, refs: TypedRef<unknown>[]) => TemplateString
289
+
290
+ /** Type helper for node configuration */
291
+ type GraphNodeConfigMap<FuncMap extends Record<string, string>> = {
292
+ [K in Extract<keyof FuncMap, string>]?: {
293
+ next?: NextConfig<Extract<keyof FuncMap, string>>
294
+ input?:
295
+ | NodeInputType<FuncMap, K>
296
+ | (() => NodeInputType<FuncMap, K>)
297
+ | ((ref: RefFunction<FuncMap>, template: TemplateFunction) => NodeInputType<FuncMap, K>)
298
+ onError?: Extract<keyof FuncMap, string> | Extract<keyof FuncMap, string>[]
299
+ }
300
+ }
301
+
302
+ type NextConfig<NodeIds extends string> = NodeIds | NodeIds[] | { if: string; then: NodeIds; else?: NodeIds }
303
+
304
+ // ============================================================================
305
+ // Unified wireWorkflow
306
+ // ============================================================================
307
+
308
+ /** Workflow definition with DSL function */
309
+ interface WorkflowDefinitionFunc {
310
+ /** Whether this workflow wiring is enabled (default: true) */
311
+ enabled?: boolean
312
+ /** Wire configurations for the workflow */
313
+ wires: {
314
+ http?: { route: string; method: HTTPMethod }
315
+ channel?: string
316
+ queue?: string
317
+ }
318
+ /** DSL workflow function */
319
+ func: PikkuFunctionConfig<any, any, 'workflow', PikkuFunctionWorkflow<any, any>>
320
+ }
321
+
322
+ /** Workflow definition with graph */
323
+ interface WorkflowDefinitionGraph<T, NodeIds extends string = string> {
324
+ /** Whether this workflow wiring is enabled (default: true) */
325
+ enabled?: boolean
326
+ /** Graph workflow definition - wires are defined in the graph itself */
327
+ graph: PikkuWorkflowGraphResult<T, NodeIds>
328
+ }
329
+
330
+ /**
331
+ * Wire a workflow with wires
332
+ * Accepts either a DSL function (func) or a graph definition (graph)
333
+ *
334
+ * @example
335
+ * // DSL workflow
336
+ * wireWorkflow({
337
+ * wires: { http: { route: '/start', method: 'post' } },
338
+ * func: myWorkflowFunc,
339
+ * })
88
340
  *
89
- * @param workflow - Workflow definition with name, execution mode, and handler function
341
+ * @example
342
+ * // Graph workflow - wires are defined in the graph itself
343
+ * wireWorkflow({
344
+ * enabled: true, // default: true
345
+ * graph: myGraphWorkflow,
346
+ * })
90
347
  */
91
- export const wireWorkflow = (workflow: WorkflowWiring) => {
92
- wireWorkflowCore(workflow as any)
348
+ export function wireWorkflow<T extends Record<string, GraphNodeConfig<Extract<keyof T, string>>>, NodeIds extends string = string>(
349
+ definition: WorkflowDefinitionFunc | WorkflowDefinitionGraph<T, NodeIds>
350
+ ): void {
351
+ coreWireWorkflow(definition as any)
93
352
  }
94
353
  `;
95
354
  };
@@ -1,4 +1,4 @@
1
1
  /**
2
- * Generate queue workers and RPC functions for workflow steps and orchestrator
2
+ * Generate queue workers for workflow orchestration
3
3
  */
4
4
  export declare const serializeWorkflowWorkers: (pathToPikkuTypes: string) => string;