@pikku/cli 0.11.2 → 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 (301) hide show
  1. package/.pikku/channel/pikku-channel-types.gen.ts +63 -6
  2. package/.pikku/channel/pikku-channels-map.gen.d.ts +4 -4
  3. package/.pikku/channel/pikku-channels-meta.gen.ts +4 -2
  4. package/.pikku/channel/pikku-channels.gen.ts +1 -1
  5. package/.pikku/cli/pikku-cli-channel.ts +1 -1
  6. package/.pikku/cli/pikku-cli-client.gen.ts +1 -1
  7. package/.pikku/cli/pikku-cli-types.gen.ts +1 -1
  8. package/.pikku/cli/pikku-cli-wirings-meta.gen.json +2 -1
  9. package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +2 -2
  10. package/.pikku/cli/pikku-cli-wirings.gen.ts +1 -1
  11. package/.pikku/cli/pikku-cli.gen.ts +1 -1
  12. package/.pikku/forge/pikku-forge-types.gen.ts +83 -0
  13. package/.pikku/function/pikku-function-types.gen.ts +181 -35
  14. package/.pikku/function/pikku-functions-meta-verbose.gen.json +1030 -0
  15. package/.pikku/function/pikku-functions-meta.gen.json +88 -420
  16. package/.pikku/function/pikku-functions-meta.gen.ts +2 -2
  17. package/.pikku/http/pikku-http-types.gen.ts +19 -3
  18. package/.pikku/http/pikku-http-wirings-map.gen.d.ts +4 -4
  19. package/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
  20. package/.pikku/http/pikku-http-wirings-meta.gen.ts +4 -10
  21. package/.pikku/http/pikku-http-wirings.gen.ts +1 -1
  22. package/.pikku/mcp/pikku-mcp-types.gen.ts +69 -17
  23. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.ts +4 -4
  24. package/.pikku/mcp/pikku-mcp-wirings.gen.ts +1 -1
  25. package/.pikku/pikku-bootstrap.gen.ts +7 -9
  26. package/.pikku/pikku-services.gen.ts +3 -2
  27. package/.pikku/pikku-types.gen.ts +4 -1
  28. package/.pikku/pikku-websocket.gen.ts +1 -1
  29. package/.pikku/queue/pikku-queue-types.gen.ts +1 -1
  30. package/.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts +4 -4
  31. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts +2 -2
  32. package/.pikku/queue/pikku-queue-workers-wirings.gen.ts +1 -1
  33. package/.pikku/rpc/pikku-remote-rpc-workers.gen.ts +4 -1
  34. package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +12 -7
  35. package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +15 -9
  36. package/.pikku/scheduler/pikku-scheduler-types.gen.ts +1 -1
  37. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.ts +2 -2
  38. package/.pikku/scheduler/pikku-schedulers-wirings.gen.ts +1 -1
  39. package/.pikku/schemas/register.gen.ts +9 -1
  40. package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  41. package/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
  42. package/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  43. package/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
  44. package/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
  45. package/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
  46. package/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
  47. package/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
  48. package/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
  49. package/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
  50. package/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
  51. package/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
  52. package/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
  53. package/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
  54. package/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
  55. package/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  56. package/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
  57. package/.pikku/services/config.gen.json +11 -6
  58. package/.pikku/services/getInspectorState.gen.json +2 -2
  59. package/.pikku/services/jwt.gen.json +2 -2
  60. package/.pikku/services/logger.gen.json +2 -2
  61. package/.pikku/services/queueService.gen.json +2 -2
  62. package/.pikku/services/schedulerService.gen.json +2 -2
  63. package/.pikku/services/schema.gen.json +2 -2
  64. package/.pikku/services/secrets.gen.json +13 -0
  65. package/.pikku/services/variables.gen.json +2 -2
  66. package/.pikku/services/workflowService.gen.json +6 -6
  67. package/.pikku/workflow/pikku-workflow-map.gen.d.ts +2 -36
  68. package/.pikku/workflow/pikku-workflow-types.gen.ts +297 -45
  69. package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +5 -4
  70. package/.pikku/workflow/pikku-workflow-wirings.gen.ts +1 -6
  71. package/CHANGELOG.md +23 -1
  72. package/cli.schema.json +1 -1
  73. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +47 -5
  74. package/dist/.pikku/channel/pikku-channel-types.gen.js +3 -13
  75. package/dist/.pikku/channel/pikku-channels-meta.gen.js +3 -2
  76. package/dist/.pikku/channel/pikku-channels.gen.d.ts +1 -1
  77. package/dist/.pikku/channel/pikku-channels.gen.js +1 -1
  78. package/dist/.pikku/cli/pikku-cli-channel.js +1 -1
  79. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  80. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
  81. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  82. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  83. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +2 -2
  84. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +2 -1
  85. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  86. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  87. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  88. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  89. package/dist/.pikku/forge/pikku-forge-types.gen.d.ts +72 -0
  90. package/dist/.pikku/forge/pikku-forge-types.gen.js +55 -0
  91. package/dist/.pikku/function/pikku-function-types.gen.d.ts +123 -31
  92. package/dist/.pikku/function/pikku-function-types.gen.js +37 -51
  93. package/dist/.pikku/function/pikku-functions-meta.gen.js +2 -2
  94. package/dist/.pikku/function/pikku-functions-meta.gen.json +88 -420
  95. package/dist/.pikku/http/pikku-http-types.gen.d.ts +18 -3
  96. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  97. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +3 -10
  98. package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
  99. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  100. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  101. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +54 -14
  102. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +7 -31
  103. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +4 -4
  104. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.d.ts +1 -1
  105. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.js +1 -1
  106. package/dist/.pikku/pikku-bootstrap.gen.d.ts +7 -9
  107. package/dist/.pikku/pikku-bootstrap.gen.js +7 -9
  108. package/dist/.pikku/pikku-services.gen.d.ts +3 -2
  109. package/dist/.pikku/pikku-services.gen.js +1 -0
  110. package/dist/.pikku/pikku-types.gen.d.ts +2 -1
  111. package/dist/.pikku/pikku-types.gen.js +3 -1
  112. package/dist/.pikku/pikku-websocket.gen.d.ts +1 -1
  113. package/dist/.pikku/pikku-websocket.gen.js +1 -1
  114. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  115. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  116. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +2 -2
  117. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  118. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  119. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.d.ts +4 -1
  120. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +4 -1
  121. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  122. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  123. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +2 -2
  124. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.d.ts +1 -1
  125. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.js +1 -1
  126. package/dist/.pikku/schemas/register.gen.js +5 -1
  127. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  128. package/dist/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
  129. package/dist/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  130. package/dist/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
  131. package/dist/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
  132. package/dist/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
  133. package/dist/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
  134. package/dist/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
  135. package/dist/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
  136. package/dist/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
  137. package/dist/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
  138. package/dist/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
  139. package/dist/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
  140. package/dist/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
  141. package/dist/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
  142. package/dist/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  143. package/dist/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
  144. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +207 -37
  145. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +104 -28
  146. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +3 -3
  147. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +2 -6
  148. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +2 -6
  149. package/dist/src/functions/commands/all.js +117 -79
  150. package/dist/src/functions/commands/bootstrap.js +2 -9
  151. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +0 -1
  152. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +49 -35
  153. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +49 -35
  154. package/dist/src/functions/wirings/channels/pikku-channels.js +1 -1
  155. package/dist/src/functions/wirings/channels/pikku-command-channels.js +18 -2
  156. package/dist/src/functions/wirings/channels/serialize-channel-types.js +62 -5
  157. package/dist/src/functions/wirings/channels/serialize-typed-channel-map.js +1 -2
  158. package/dist/src/functions/wirings/cli/pikku-command-cli.js +10 -2
  159. package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.d.ts +1 -0
  160. package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.js +90 -0
  161. package/dist/src/functions/wirings/forge/pikku-command-forge-types.d.ts +1 -0
  162. package/dist/src/functions/wirings/forge/pikku-command-forge-types.js +26 -0
  163. package/dist/src/functions/wirings/forge/serialize-forge-types.d.ts +4 -0
  164. package/dist/src/functions/wirings/forge/serialize-forge-types.js +90 -0
  165. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +1 -1
  166. package/dist/src/functions/wirings/functions/pikku-command-function-types.js +7 -2
  167. package/dist/src/functions/wirings/functions/pikku-command-functions.js +33 -18
  168. package/dist/src/functions/wirings/functions/pikku-command-services.js +1 -1
  169. package/dist/src/functions/wirings/functions/pikku-function-types.js +2 -2
  170. package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
  171. package/dist/src/functions/wirings/functions/schemas.js +5 -4
  172. package/dist/src/functions/wirings/functions/serialize-function-imports.d.ts +3 -1
  173. package/dist/src/functions/wirings/functions/serialize-function-imports.js +7 -3
  174. package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
  175. package/dist/src/functions/wirings/functions/serialize-function-types.js +181 -34
  176. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.d.ts +1 -1
  177. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.js +19 -21
  178. package/dist/src/functions/wirings/http/openapi-spec-generator.js +1 -1
  179. package/dist/src/functions/wirings/http/pikku-command-http-routes.js +18 -2
  180. package/dist/src/functions/wirings/http/pikku-command-openapi.js +2 -2
  181. package/dist/src/functions/wirings/http/pikku-http-routes.js +1 -1
  182. package/dist/src/functions/wirings/http/serialize-http-types.js +18 -2
  183. package/dist/src/functions/wirings/http/serialize-typed-http-map.js +33 -8
  184. package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +15 -6
  185. package/dist/src/functions/wirings/mcp/serialize-mcp-json.js +3 -2
  186. package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +68 -16
  187. package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +5 -2
  188. package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -0
  189. package/dist/src/functions/wirings/package/pikku-command-package.js +58 -0
  190. package/dist/src/functions/wirings/package/serialize-package.d.ts +5 -0
  191. package/dist/src/functions/wirings/package/serialize-package.js +32 -0
  192. package/dist/src/functions/wirings/queue/pikku-command-queue.js +10 -2
  193. package/dist/src/functions/wirings/queue/pikku-queue.js +1 -9
  194. package/dist/src/functions/wirings/queue/serialize-queue-map.js +20 -3
  195. package/dist/src/functions/wirings/queue/serialize-queue-meta.js +1 -1
  196. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.js +4 -4
  197. package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +1 -1
  198. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +3 -0
  199. package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +1 -1
  200. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.d.ts +1 -1
  201. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +54 -8
  202. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +10 -1
  203. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.js +1 -1
  204. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +56 -18
  205. package/dist/src/functions/wirings/workflow/serialize-workflow-map.d.ts +3 -0
  206. package/dist/src/functions/wirings/workflow/serialize-workflow-map.js +30 -32
  207. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.d.ts +1 -3
  208. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +43 -18
  209. package/dist/src/functions/wirings/workflow/serialize-workflow-registration.d.ts +7 -0
  210. package/dist/src/functions/wirings/workflow/serialize-workflow-registration.js +53 -0
  211. package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +3 -1
  212. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +299 -45
  213. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.d.ts +1 -1
  214. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +14 -27
  215. package/dist/src/services.js +4 -1
  216. package/dist/src/utils/command-summary.d.ts +2 -0
  217. package/dist/src/utils/command-summary.js +2 -0
  218. package/dist/src/utils/custom-types-generator.js +13 -15
  219. package/dist/src/utils/generate-bootstrap-file.js +1 -1
  220. package/dist/src/utils/pikku-cli-config.js +37 -9
  221. package/dist/src/utils/schema-generator.d.ts +4 -3
  222. package/dist/src/utils/schema-generator.js +135 -15
  223. package/dist/src/utils/strip-verbose-meta.d.ts +43 -0
  224. package/dist/src/utils/strip-verbose-meta.js +210 -0
  225. package/dist/tsconfig.tsbuildinfo +1 -1
  226. package/package.json +7 -4
  227. package/src/functions/commands/all.ts +144 -97
  228. package/src/functions/commands/bootstrap.ts +2 -10
  229. package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +0 -1
  230. package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +49 -35
  231. package/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +49 -35
  232. package/src/functions/wirings/channels/pikku-channels.ts +1 -1
  233. package/src/functions/wirings/channels/pikku-command-channels.ts +46 -3
  234. package/src/functions/wirings/channels/serialize-channel-types.ts +62 -5
  235. package/src/functions/wirings/channels/serialize-typed-channel-map.ts +3 -2
  236. package/src/functions/wirings/cli/pikku-command-cli.ts +21 -2
  237. package/src/functions/wirings/forge/pikku-command-forge-nodes.ts +135 -0
  238. package/src/functions/wirings/forge/pikku-command-forge-types.ts +38 -0
  239. package/src/functions/wirings/forge/serialize-forge-types.ts +94 -0
  240. package/src/functions/wirings/functions/pikku-command-function-types-split.ts +3 -2
  241. package/src/functions/wirings/functions/pikku-command-function-types.ts +17 -10
  242. package/src/functions/wirings/functions/pikku-command-functions.ts +47 -37
  243. package/src/functions/wirings/functions/pikku-command-services.ts +1 -1
  244. package/src/functions/wirings/functions/pikku-function-types.ts +3 -1
  245. package/src/functions/wirings/functions/schemas.ts +14 -4
  246. package/src/functions/wirings/functions/serialize-function-imports.ts +12 -3
  247. package/src/functions/wirings/functions/serialize-function-types.ts +182 -34
  248. package/src/functions/wirings/functions/serialize-pikku-types-hub.ts +27 -26
  249. package/src/functions/wirings/http/openapi-spec-generator.ts +1 -1
  250. package/src/functions/wirings/http/pikku-command-http-routes.ts +46 -2
  251. package/src/functions/wirings/http/pikku-command-openapi.ts +3 -2
  252. package/src/functions/wirings/http/pikku-http-routes.ts +1 -1
  253. package/src/functions/wirings/http/serialize-http-types.ts +18 -2
  254. package/src/functions/wirings/http/serialize-typed-http-map.ts +32 -8
  255. package/src/functions/wirings/mcp/pikku-command-mcp.ts +32 -10
  256. package/src/functions/wirings/mcp/serialize-mcp-json.ts +8 -6
  257. package/src/functions/wirings/mcp/serialize-mcp-types.ts +68 -16
  258. package/src/functions/wirings/middleware/pikku-command-middleware.ts +6 -2
  259. package/src/functions/wirings/package/pikku-command-package.ts +81 -0
  260. package/src/functions/wirings/package/serialize-package.ts +69 -0
  261. package/src/functions/wirings/queue/pikku-command-queue.ts +22 -2
  262. package/src/functions/wirings/queue/pikku-queue.ts +1 -10
  263. package/src/functions/wirings/queue/serialize-queue-map.ts +18 -3
  264. package/src/functions/wirings/queue/serialize-queue-meta.ts +1 -1
  265. package/src/functions/wirings/rpc/pikku-command-rpc-map.ts +7 -4
  266. package/src/functions/wirings/rpc/pikku-command-rpc.ts +1 -1
  267. package/src/functions/wirings/rpc/serialize-remote-rpc.ts +3 -0
  268. package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +1 -1
  269. package/src/functions/wirings/rpc/serialize-typed-rpc-map.ts +74 -8
  270. package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +22 -1
  271. package/src/functions/wirings/scheduler/serialize-scheduler-meta.ts +1 -1
  272. package/src/functions/wirings/workflow/pikku-command-workflow.ts +104 -37
  273. package/src/functions/wirings/workflow/serialize-workflow-map.ts +38 -40
  274. package/src/functions/wirings/workflow/serialize-workflow-meta.ts +66 -26
  275. package/src/functions/wirings/workflow/serialize-workflow-registration.ts +83 -0
  276. package/src/functions/wirings/workflow/serialize-workflow-types.ts +299 -45
  277. package/src/functions/wirings/workflow/serialize-workflow-workers.ts +14 -27
  278. package/src/services.ts +8 -1
  279. package/src/utils/command-summary.ts +4 -0
  280. package/src/utils/custom-types-generator.ts +15 -15
  281. package/src/utils/generate-bootstrap-file.ts +1 -1
  282. package/src/utils/pikku-cli-config.ts +51 -18
  283. package/src/utils/schema-generator.ts +185 -22
  284. package/src/utils/strip-verbose-meta.ts +254 -0
  285. package/types/config.d.ts +37 -3
  286. package/.pikku/function/pikku-functions-meta.min.gen.json +0 -212
  287. package/.pikku/function/pikku-functions-meta.min.gen.ts +0 -6
  288. package/dist/.pikku/function/pikku-functions-meta.min.gen.d.ts +0 -1
  289. package/dist/.pikku/function/pikku-functions-meta.min.gen.js +0 -6
  290. package/dist/.pikku/function/pikku-functions-meta.min.gen.json +0 -212
  291. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.d.ts +0 -1
  292. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.js +0 -12
  293. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.d.ts +0 -1
  294. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.js +0 -13
  295. package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.d.ts +0 -8
  296. package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.js +0 -30
  297. package/src/functions/wirings/workflow/pikku-command-workflow-map.ts +0 -24
  298. package/src/functions/wirings/workflow/pikku-command-workflow-types.ts +0 -29
  299. package/src/functions/wirings/workflow/serialize-workflow-wirings.ts +0 -47
  300. /package/.pikku/{workflow/pikku-workflow-wirings-meta.gen.json → channel/pikku-channels-meta.gen.json} +0 -0
  301. /package/dist/.pikku/{workflow/pikku-workflow-wirings-meta.gen.json → channel/pikku-channels-meta.gen.json} +0 -0
@@ -10,13 +10,15 @@ export const serializeFunctionTypes = (
10
10
  wireServicesTypeName: string,
11
11
  rpcMapTypeImport: string,
12
12
  requiredServicesTypeImport: string,
13
- configTypeImport: string
13
+ configTypeImport: string,
14
+ packageName?: string
14
15
  ) => {
16
+ const packageNameValue = packageName ? `'${packageName}'` : 'null'
15
17
  return `/**
16
18
  * Core function, middleware, and permission types for all wirings
17
19
  */
18
20
 
19
- import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore, PikkuWire, PickRequired } from '@pikku/core'
21
+ import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore, PikkuWire, PickRequired, ZodLike, CreateWireServices } from '@pikku/core'
20
22
  import { CorePikkuFunction, CorePikkuFunctionSessionless } from '@pikku/core/function'
21
23
 
22
24
  ${userSessionTypeImport}
@@ -218,6 +220,11 @@ export type PikkuFunction<
218
220
  PickRequired<PikkuWire<In, Out, true, Session, TypedPikkuRPC, null, any>, RequiredWires>
219
221
  >
220
222
 
223
+ /**
224
+ * Helper type to infer the output type from a Zod schema
225
+ */
226
+ export type InferZodOutput<T> = T extends ZodLike<infer U> ? U : never
227
+
221
228
  /**
222
229
  * Configuration object for Pikku functions with optional middleware, permissions, tags, and documentation.
223
230
  * This type wraps CorePikkuFunctionConfig with the user's custom types.
@@ -230,64 +237,166 @@ export type PikkuFunctionConfig<
230
237
  In = unknown,
231
238
  Out = unknown,
232
239
  RequiredWires extends keyof PikkuWire = never,
233
- PikkuFunc extends PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires>
234
- > = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware>
240
+ PikkuFunc extends PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires>,
241
+ InputSchema extends ZodLike | undefined = undefined,
242
+ OutputSchema extends ZodLike | undefined = undefined
243
+ > = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware, InputSchema, OutputSchema>
244
+
245
+ /**
246
+ * Configuration object for Pikku functions with Zod schema validation.
247
+ * Use this when you want to define input/output schemas using Zod.
248
+ * Types are automatically inferred from the schemas.
249
+ */
250
+ export type PikkuFunctionConfigWithSchema<
251
+ InputSchema extends ZodLike,
252
+ OutputSchema extends ZodLike | undefined = undefined,
253
+ RequiredWires extends keyof PikkuWire = never
254
+ > = {
255
+ name?: string
256
+ tags?: string[]
257
+ expose?: boolean
258
+ internal?: boolean
259
+ func: PikkuFunction<
260
+ InferZodOutput<InputSchema>,
261
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
262
+ RequiredWires
263
+ > | PikkuFunctionSessionless<
264
+ InferZodOutput<InputSchema>,
265
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
266
+ RequiredWires
267
+ >
268
+ auth?: boolean
269
+ permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
270
+ middleware?: PikkuMiddleware[]
271
+ input: InputSchema
272
+ output?: OutputSchema
273
+ }
235
274
 
236
275
  /**
237
276
  * Creates a Pikku function that can be either session-aware or sessionless.
238
277
  * This is the main function wrapper for creating API endpoints.
239
278
  *
240
- * @template In - Input type for the function
241
- * @template Out - Output type for the function
279
+ * Supports two patterns:
280
+ * 1. Generic types: \`pikkuFunc<Input, Output>({ func: ... })\`
281
+ * 2. Zod schemas: \`pikkuFunc({ input: z.object(...), output: z.object(...), func: ... })\`
282
+ *
283
+ * @template In - Input type for the function (inferred from schema if provided)
284
+ * @template Out - Output type for the function (inferred from schema if provided)
242
285
  * @param func - Function definition, either direct function or configuration object
243
286
  * @returns The normalized configuration object
244
287
  *
245
288
  * @example
246
- * \\\`\\\`\\\`typescript
247
- * const createUser = pikkuFunc<{name: string, email: string}, {id: number, message: string}>({
248
- * func: async ({db, logger}, input, wire) => {
249
- * const session = await wire.session.get()
250
- * logger.info('Creating user', input.name)
289
+ * \`\`\`typescript
290
+ * // Pattern 1: Using generic types
291
+ * const createUser = pikkuFunc<{name: string, email: string}, {id: number}>({
292
+ * func: async ({db}, input) => {
251
293
  * const user = await db.users.create(input)
252
- * return {id: user.id, message: \\\`User \\\${input.name} created successfully\\\`}
253
- * },
254
- * auth: true
294
+ * return { id: user.id }
295
+ * }
255
296
  * })
256
- * \\\`\\\`\\\`
297
+ *
298
+ * // Pattern 2: Using Zod schemas (types inferred automatically)
299
+ * const createUserInput = z.object({ name: z.string(), email: z.string() })
300
+ * const createUserOutput = z.object({ id: z.number() })
301
+ *
302
+ * const createUser = pikkuFunc({
303
+ * input: createUserInput,
304
+ * output: createUserOutput,
305
+ * func: async ({db}, input) => {
306
+ * // input is typed as { name: string, email: string }
307
+ * const user = await db.users.create(input)
308
+ * return { id: user.id } // must match output schema
309
+ * }
310
+ * })
311
+ * \`\`\`
257
312
  */
258
- export const pikkuFunc = <In, Out = unknown>(
313
+ export function pikkuFunc<
314
+ InputSchema extends ZodLike,
315
+ OutputSchema extends ZodLike | undefined = undefined
316
+ >(
317
+ config: PikkuFunctionConfigWithSchema<InputSchema, OutputSchema, 'session' | 'rpc'>
318
+ ): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'session' | 'rpc'>
319
+ export function pikkuFunc<In, Out = unknown>(
259
320
  func:
260
321
  | PikkuFunction<In, Out, 'session' | 'rpc'>
261
322
  | PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
262
- ) => {
323
+ ): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
324
+ export function pikkuFunc(func: any) {
263
325
  return typeof func === 'function' ? { func } : func
264
326
  }
265
327
 
328
+ /**
329
+ * Configuration object for sessionless Pikku functions with Zod schema validation.
330
+ */
331
+ export type PikkuFunctionSessionlessConfigWithSchema<
332
+ InputSchema extends ZodLike,
333
+ OutputSchema extends ZodLike | undefined = undefined,
334
+ RequiredWires extends keyof PikkuWire = never
335
+ > = {
336
+ name?: string
337
+ description?: string
338
+ tags?: string[]
339
+ expose?: boolean
340
+ internal?: boolean
341
+ func: PikkuFunctionSessionless<
342
+ InferZodOutput<InputSchema>,
343
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
344
+ RequiredWires
345
+ >
346
+ auth?: boolean
347
+ permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
348
+ middleware?: PikkuMiddleware[]
349
+ input: InputSchema
350
+ output?: OutputSchema
351
+ }
352
+
266
353
  /**
267
354
  * Creates a sessionless Pikku function that doesn't require user authentication.
268
355
  * Use this for public endpoints, webhooks, or background tasks.
269
356
  *
270
- * @template In - Input type for the function
271
- * @template Out - Output type for the function
357
+ * Supports two patterns:
358
+ * 1. Generic types: \`pikkuSessionlessFunc<Input, Output>({ func: ... })\`
359
+ * 2. Zod schemas: \`pikkuSessionlessFunc({ input: z.object(...), func: ... })\`
360
+ *
361
+ * @template In - Input type for the function (inferred from schema if provided)
362
+ * @template Out - Output type for the function (inferred from schema if provided)
272
363
  * @param func - Function definition, either direct function or configuration object
273
364
  * @returns The normalized configuration object
274
365
  *
275
366
  * @example
276
- * \\\`\\\`\\\`typescript
277
- * const healthCheck = pikkuSessionlessFunc<void, {status: string, timestamp: string}>({
278
- * func: async ({logger}, input) => {
279
- * logger.info('Health check requested')
280
- * return {status: 'healthy', timestamp: new Date().toISOString()}
281
- * },
282
- * name: 'healthCheck'
367
+ * \`\`\`typescript
368
+ * // Pattern 1: Using generic types
369
+ * const healthCheck = pikkuSessionlessFunc<void, {status: string}>({
370
+ * func: async ({logger}) => {
371
+ * return { status: 'healthy' }
372
+ * }
373
+ * })
374
+ *
375
+ * // Pattern 2: Using Zod schemas
376
+ * const greetInput = z.object({ name: z.string() })
377
+ * const greetOutput = z.object({ message: z.string() })
378
+ *
379
+ * const greet = pikkuSessionlessFunc({
380
+ * input: greetInput,
381
+ * output: greetOutput,
382
+ * func: async (_services, { name }) => {
383
+ * return { message: \`Hello, \${name}!\` }
384
+ * }
283
385
  * })
284
- * \\\`\\\`\\\`
386
+ * \`\`\`
285
387
  */
286
- export const pikkuSessionlessFunc = <In, Out = unknown>(
388
+ export function pikkuSessionlessFunc<
389
+ InputSchema extends ZodLike,
390
+ OutputSchema extends ZodLike | undefined = undefined
391
+ >(
392
+ config: PikkuFunctionSessionlessConfigWithSchema<InputSchema, OutputSchema, 'session' | 'rpc'>
393
+ ): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'session' | 'rpc'>
394
+ export function pikkuSessionlessFunc<In, Out = unknown>(
287
395
  func:
288
396
  | PikkuFunctionSessionless<In, Out, 'session' | 'rpc'>
289
397
  | PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
290
- ) => {
398
+ ): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
399
+ export function pikkuSessionlessFunc(func: any) {
291
400
  return typeof func === 'function' ? { func } : func
292
401
  }
293
402
 
@@ -299,13 +408,13 @@ export const pikkuSessionlessFunc = <In, Out = unknown>(
299
408
  * @returns The normalized configuration object
300
409
  *
301
410
  * @example
302
- * \\\`\\\`\\\`typescript
411
+ * \`\`\`typescript
303
412
  * const cleanupTempFiles = pikkuVoidFunc(async ({fileSystem, logger}) => {
304
413
  * logger.info('Starting cleanup of temporary files')
305
414
  * await fileSystem.deleteDirectory('/tmp/uploads')
306
415
  * logger.info('Cleanup completed')
307
416
  * })
308
- * \\\`\\\`\\\`
417
+ * \`\`\`
309
418
  */
310
419
  export const pikkuVoidFunc = (
311
420
  func:
@@ -315,6 +424,45 @@ export const pikkuVoidFunc = (
315
424
  return typeof func === 'function' ? { func } : func
316
425
  }
317
426
 
427
+ /**
428
+ * Creates a wrapper function for external package functions that are exposed via RPC.
429
+ * This allows you to wire external functions to any wiring type (HTTP, queue, etc.)
430
+ * without type compatibility issues.
431
+ *
432
+ * @template Name - The RPC method name (must be a key in FlattenedRPCMap)
433
+ * @param rpcName - The name of the RPC method to invoke
434
+ * @returns A Pikku function that proxies calls to the external RPC method
435
+ *
436
+ * @example
437
+ * \`\`\`typescript
438
+ * // Wire an external function via HTTP
439
+ * wireHTTP({
440
+ * auth: false,
441
+ * method: 'get',
442
+ * route: '/external/hello',
443
+ * func: external('ext:hello'),
444
+ * tags: ['external'],
445
+ * })
446
+ * \`\`\`
447
+ */
448
+ export const external = <Name extends keyof FlattenedRPCMap>(
449
+ rpcName: Name
450
+ ): PikkuFunctionConfig<
451
+ FlattenedRPCMap[Name]['input'],
452
+ FlattenedRPCMap[Name]['output'],
453
+ 'session' | 'rpc'
454
+ > => {
455
+ return {
456
+ func: (async (_services: any, data: any, { rpc }: any) => {
457
+ return rpc.invoke(rpcName, data)
458
+ }) as any
459
+ } as PikkuFunctionConfig<
460
+ FlattenedRPCMap[Name]['input'],
461
+ FlattenedRPCMap[Name]['output'],
462
+ 'session' | 'rpc'
463
+ >
464
+ }
465
+
318
466
  /**
319
467
  * Creates a Pikku config factory.
320
468
  * Use this to define your application's configuration factory.
@@ -380,7 +528,7 @@ export const pikkuWireServices = (
380
528
  services: SingletonServices,
381
529
  wire: any
382
530
  ) => Promise<RequiredWireServices>
383
- ) => func
531
+ ): CreateWireServices => func as unknown as CreateWireServices
384
532
 
385
533
  /**
386
534
  * Adds global middleware for a specific tag.
@@ -406,7 +554,7 @@ export const pikkuWireServices = (
406
554
  * \`\`\`
407
555
  */
408
556
  export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
409
- addMiddlewareCore(tag, middleware as any)
557
+ addMiddlewareCore(tag, middleware as any, ${packageNameValue})
410
558
  }
411
559
 
412
560
  /**
@@ -433,7 +581,7 @@ export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
433
581
  * \`\`\`
434
582
  */
435
583
  export const addPermission = <In = unknown>(tag: string, permissions: CorePermissionGroup<PikkuPermission<In>> | PikkuPermission<In>[]) => {
436
- addPermissionCore(tag, permissions as any)
584
+ addPermissionCore(tag, permissions as any, ${packageNameValue})
437
585
  }
438
586
  `
439
587
  }
@@ -3,36 +3,37 @@
3
3
  */
4
4
  export const serializePikkuTypesHub = (
5
5
  functionTypesImportPath: string,
6
- httpTypesImportPath: string,
7
- channelTypesImportPath: string,
8
- schedulerTypesImportPath: string,
9
- queueTypesImportPath: string,
10
- mcpTypesImportPath: string,
11
- cliTypesImportPath: string
6
+ httpTypesImportPath: string | null,
7
+ channelTypesImportPath: string | null,
8
+ schedulerTypesImportPath: string | null,
9
+ queueTypesImportPath: string | null,
10
+ mcpTypesImportPath: string | null,
11
+ cliTypesImportPath: string | null,
12
+ forgeTypesImportPath: string | null
12
13
  ) => {
14
+ const exports = [
15
+ {
16
+ comment: 'Core function, middleware, and permission types',
17
+ path: functionTypesImportPath,
18
+ },
19
+ { comment: 'HTTP wiring types', path: httpTypesImportPath },
20
+ { comment: 'Channel wiring types', path: channelTypesImportPath },
21
+ { comment: 'Scheduler wiring types', path: schedulerTypesImportPath },
22
+ { comment: 'Queue wiring types', path: queueTypesImportPath },
23
+ { comment: 'MCP wiring types', path: mcpTypesImportPath },
24
+ { comment: 'CLI wiring types', path: cliTypesImportPath },
25
+ { comment: 'Forge wiring types', path: forgeTypesImportPath },
26
+ ]
27
+
28
+ const exportStatements = exports
29
+ .filter((e) => e.path)
30
+ .map((e) => `// ${e.comment}\nexport * from '${e.path}'`)
31
+ .join('\n\n')
32
+
13
33
  return `/**
14
34
  * Main type export hub - re-exports all wiring-specific types
15
35
  */
16
36
 
17
- // Core function, middleware, and permission types
18
- export * from '${functionTypesImportPath}'
19
-
20
- // HTTP wiring types
21
- export * from '${httpTypesImportPath}'
22
-
23
- // Channel wiring types
24
- export * from '${channelTypesImportPath}'
25
-
26
- // Scheduler wiring types
27
- export * from '${schedulerTypesImportPath}'
28
-
29
- // Queue wiring types
30
- export * from '${queueTypesImportPath}'
31
-
32
- // MCP wiring types
33
- export * from '${mcpTypesImportPath}'
34
-
35
- // CLI wiring types
36
- export * from '${cliTypesImportPath}'
37
+ ${exportStatements}
37
38
  `
38
39
  }
@@ -68,7 +68,7 @@ export interface OpenAPISpecInfo {
68
68
  }
69
69
 
70
70
  const getErrorResponseForConstructorName = (constructorName: string) => {
71
- const errors = Array.from(pikkuState('misc', 'errors').entries())
71
+ const errors = Array.from(pikkuState(null, 'misc', 'errors').entries())
72
72
  const foundError = errors.find(([e]) => e.name === constructorName)
73
73
  if (foundError) {
74
74
  return foundError[1]
@@ -2,11 +2,22 @@ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js'
2
2
  import { serializeFileImports } from '../../../utils/file-imports-serializer.js'
3
3
  import { writeFileInDir } from '../../../utils/file-writer.js'
4
4
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js'
5
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
6
+ import {
7
+ stripVerboseFields,
8
+ hasVerboseFields,
9
+ } from '../../../utils/strip-verbose-meta.js'
5
10
 
6
11
  export const pikkuHTTP: any = pikkuSessionlessFunc<void, boolean | undefined>({
7
12
  func: async ({ logger, config, getInspectorState }) => {
8
13
  const visitState = await getInspectorState()
9
- const { httpWiringsFile, httpWiringMetaFile, packageMappings } = config
14
+ const {
15
+ httpWiringsFile,
16
+ httpWiringMetaFile,
17
+ httpWiringMetaJsonFile,
18
+ packageMappings,
19
+ schema,
20
+ } = config
10
21
  const { http } = visitState
11
22
 
12
23
  await writeFileInDir(
@@ -19,10 +30,43 @@ export const pikkuHTTP: any = pikkuSessionlessFunc<void, boolean | undefined>({
19
30
  packageMappings
20
31
  )
21
32
  )
33
+
34
+ // Write minimal JSON (runtime-only fields)
35
+ const minimalMeta = stripVerboseFields(http.meta)
36
+ await writeFileInDir(
37
+ logger,
38
+ httpWiringMetaJsonFile,
39
+ JSON.stringify(minimalMeta, null, 2)
40
+ )
41
+
42
+ // Write verbose JSON only if it has additional fields
43
+ if (hasVerboseFields(http.meta)) {
44
+ const verbosePath = httpWiringMetaJsonFile.replace(
45
+ /\.gen\.json$/,
46
+ '-verbose.gen.json'
47
+ )
48
+ await writeFileInDir(
49
+ logger,
50
+ verbosePath,
51
+ JSON.stringify(http.meta, null, 2)
52
+ )
53
+ }
54
+
55
+ // Generate TypeScript file that imports the minimal JSON
56
+ const jsonImportPath = getFileImportRelativePath(
57
+ httpWiringMetaFile,
58
+ httpWiringMetaJsonFile,
59
+ packageMappings
60
+ )
61
+ const supportsImportAttributes = schema?.supportsImportAttributes ?? false
62
+ const importStatement = supportsImportAttributes
63
+ ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
64
+ : `import metaData from '${jsonImportPath}'`
65
+
22
66
  await writeFileInDir(
23
67
  logger,
24
68
  httpWiringMetaFile,
25
- `import { pikkuState } from '@pikku/core'\npikkuState('http', 'meta', ${JSON.stringify(http.meta, null, 2)})`
69
+ `import { pikkuState } from '@pikku/core'\nimport type { HTTPWiringsMeta } from '@pikku/core/http'\n${importStatement}\npikkuState(null, 'http', 'meta', metaData as HTTPWiringsMeta)`
26
70
  )
27
71
 
28
72
  return true
@@ -19,7 +19,7 @@ export const pikkuOpenAPI: any = pikkuSessionlessFunc<void, void>({
19
19
  return
20
20
  }
21
21
 
22
- const { http, functions } = await getInspectorState()
22
+ const { http, functions, zodLookup } = await getInspectorState()
23
23
 
24
24
  const schemas = await generateSchemas(
25
25
  logger,
@@ -28,7 +28,8 @@ export const pikkuOpenAPI: any = pikkuSessionlessFunc<void, void>({
28
28
  functions.meta,
29
29
  http.meta,
30
30
  schemasFromTypes,
31
- config.schema?.additionalProperties
31
+ config.schema?.additionalProperties,
32
+ zodLookup
32
33
  )
33
34
  const openAPISpec = await generateOpenAPISpec(
34
35
  logger,
@@ -47,7 +47,7 @@ export const pikkuHTTP: any = pikkuSessionlessFunc<void, boolean>({
47
47
  await writeFileInDir(
48
48
  logger,
49
49
  httpWiringMetaFile,
50
- `import { pikkuState, HTTPWiringsMeta } from '@pikku/core'\n${importStatement}\npikkuState('http', 'meta', metaData as HTTPWiringsMeta)`
50
+ `import { pikkuState, HTTPWiringsMeta } from '@pikku/core'\n${importStatement}\npikkuState(null, 'http', 'meta', metaData as HTTPWiringsMeta)`
51
51
  )
52
52
 
53
53
  return true
@@ -8,7 +8,7 @@ export const serializeHTTPTypes = (functionTypesImportPath: string) => {
8
8
 
9
9
  import { AssertHTTPWiringParams, wireHTTP as wireHTTPCore, addHTTPMiddleware as addHTTPMiddlewareCore, addHTTPPermission as addHTTPPermissionCore } from '@pikku/core/http'
10
10
  import type { PikkuFunction, PikkuFunctionSessionless, PikkuPermission, PikkuMiddleware } from '${functionTypesImportPath}'
11
- import type { CoreHTTPFunctionWiring } from '@pikku/core/http'
11
+ import type { CoreHTTPFunctionWiring, HTTPMethod } from '@pikku/core/http'
12
12
 
13
13
  /**
14
14
  * Type definition for HTTP API wirings with type-safe path parameters.
@@ -20,6 +20,22 @@ import type { CoreHTTPFunctionWiring } from '@pikku/core/http'
20
20
  */
21
21
  type HTTPWiring<In, Out, Route extends string> = CoreHTTPFunctionWiring<In, Out, Route, PikkuFunction<In, Out, 'rpc' | 'session'>, PikkuFunctionSessionless<In, Out, 'rpc' | 'session'>, PikkuPermission<In>, PikkuMiddleware>
22
22
 
23
+ /**
24
+ * HTTP wiring for workflow triggers (no function needed)
25
+ */
26
+ type HTTPWorkflowWiring<Route extends string> = {
27
+ route: Route
28
+ method: HTTPMethod
29
+ workflow: true
30
+ func?: undefined
31
+ permissions?: undefined
32
+ auth?: undefined
33
+ tags?: undefined
34
+ middleware?: undefined
35
+ returnsJSON?: undefined
36
+ sse?: boolean
37
+ }
38
+
23
39
  /**
24
40
  * Registers an HTTP wiring with the Pikku framework.
25
41
  *
@@ -29,7 +45,7 @@ type HTTPWiring<In, Out, Route extends string> = CoreHTTPFunctionWiring<In, Out,
29
45
  * @param httpWiring - HTTP wiring definition with handler, method, and optional middleware
30
46
  */
31
47
  export const wireHTTP = <In, Out, Route extends string>(
32
- httpWiring: HTTPWiring<In, Out, Route> & AssertHTTPWiringParams<In, Route>
48
+ httpWiring: (HTTPWiring<In, Out, Route> & AssertHTTPWiringParams<In, Route>) | HTTPWorkflowWiring<Route>
33
49
  ) => {
34
50
  wireHTTPCore(httpWiring as any)
35
51
  }
@@ -32,7 +32,7 @@ export const serializeTypedHTTPWiringsMap = (
32
32
  return `/**
33
33
  * This provides the structure needed for typescript to be aware of routes and their return types
34
34
  */
35
-
35
+
36
36
  ${serializedImportMap}
37
37
  ${serializedCustomTypes}
38
38
  ${serializedMetaTypes}
@@ -70,6 +70,12 @@ function generateHTTPWirings(
70
70
  for (const methods of Object.values(routesMeta)) {
71
71
  for (const meta of Object.values(methods)) {
72
72
  const { route, method, pikkuFuncName } = meta
73
+
74
+ // Skip workflow-triggered routes (they don't have a function)
75
+ if (meta.workflow) {
76
+ continue
77
+ }
78
+
73
79
  const functionMeta = functionsMeta[pikkuFuncName]
74
80
  if (!functionMeta) {
75
81
  throw new Error(
@@ -79,16 +85,28 @@ function generateHTTPWirings(
79
85
  const input = functionMeta.inputs ? functionMeta.inputs[0] : undefined
80
86
  const output = functionMeta.outputs ? functionMeta.outputs[0] : undefined
81
87
 
82
- // Initialize the route entry if it doesn't exist
83
88
  if (!routesObj[route]) {
84
89
  routesObj[route] = {}
85
90
  }
86
91
 
87
- // Store the input and output types separately for RouteHandler
88
- const inputType = input ? typesMap.getTypeMeta(input).uniqueName : 'null'
89
- const outputType = output
90
- ? typesMap.getTypeMeta(output).uniqueName
91
- : 'null'
92
+ // For zod-derived schemas, the type might not be in typesMap, so use the schema name directly
93
+ let inputType = 'null'
94
+ if (input) {
95
+ try {
96
+ inputType = typesMap.getTypeMeta(input).uniqueName
97
+ } catch {
98
+ inputType = input
99
+ }
100
+ }
101
+ let outputType = 'null'
102
+ if (output) {
103
+ try {
104
+ outputType = typesMap.getTypeMeta(output).uniqueName
105
+ } catch {
106
+ // Zod-derived schema - use the schema name directly
107
+ outputType = output
108
+ }
109
+ }
92
110
 
93
111
  requiredTypes.add(inputType)
94
112
  requiredTypes.add(outputType)
@@ -121,7 +139,13 @@ const generateMetaTypes = (metaTypes: MetaInputTypes, typesMap: TypesMap) => {
121
139
  const nameToTypeMap = Array.from(metaTypes.entries()).reduce<
122
140
  Map<string, string>
123
141
  >((result, [_name, { query, body, params }]) => {
124
- const { uniqueName } = typesMap.getTypeMeta(_name)
142
+ let uniqueName: string
143
+ try {
144
+ uniqueName = typesMap.getTypeMeta(_name).uniqueName
145
+ } catch {
146
+ // Zod-derived schema - use the name directly
147
+ uniqueName = _name
148
+ }
125
149
  const queryType =
126
150
  query && query.length > 0
127
151
  ? `Pick<${uniqueName}, '${query?.join("' | '")}'>`
@@ -5,6 +5,10 @@ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-
5
5
  import { readFile } from 'fs/promises'
6
6
  import { join } from 'path'
7
7
  import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
8
+ import {
9
+ stripVerboseFields,
10
+ hasVerboseFields,
11
+ } from '../../../utils/strip-verbose-meta.js'
8
12
 
9
13
  // Helper function to generate arguments from schema
10
14
  const generateArgumentsFromSchema = async (
@@ -26,12 +30,13 @@ const generateArgumentsFromSchema = async (
26
30
  const uniqueName = typesMap.getUniqueName(inputSchema)
27
31
  if (!uniqueName) return []
28
32
 
33
+ const schemaPath = join(
34
+ schemaDirectory,
35
+ 'schemas',
36
+ `${uniqueName}.schema.json`
37
+ )
38
+
29
39
  try {
30
- const schemaPath = join(
31
- schemaDirectory,
32
- 'schemas',
33
- `${uniqueName}.schema.json`
34
- )
35
40
  const schemaContent = await readFile(schemaPath, 'utf-8')
36
41
  const schema = JSON.parse(schemaContent)
37
42
 
@@ -54,7 +59,8 @@ const generateArgumentsFromSchema = async (
54
59
  }
55
60
  return argumentsArray
56
61
  } catch (e) {
57
- logger.warn(`Could not load schema for type: ${uniqueName}`)
62
+ logger.warn(`Command MCP: Could not load schema for type: ${uniqueName} from ${schemaPath}`)
63
+ console.error(e)
58
64
  return []
59
65
  }
60
66
  }
@@ -101,12 +107,28 @@ export const pikkuMCP: any = pikkuSessionlessFunc<void, boolean | undefined>({
101
107
  toolsMeta: mcpEndpoints.toolsMeta,
102
108
  promptsMeta: promptsMetaWithArguments,
103
109
  }
110
+
111
+ // Write minimal JSON (runtime-only fields)
112
+ const minimalMeta = stripVerboseFields(metaData)
104
113
  await writeFileInDir(
105
114
  logger,
106
115
  config.mcpWiringsMetaJsonFile,
107
- JSON.stringify(metaData, null, 2)
116
+ JSON.stringify(minimalMeta, null, 2)
108
117
  )
109
118
 
119
+ // Write verbose JSON only if it has additional fields
120
+ if (hasVerboseFields(metaData)) {
121
+ const verbosePath = config.mcpWiringsMetaJsonFile.replace(
122
+ /\.gen\.json$/,
123
+ '-verbose.gen.json'
124
+ )
125
+ await writeFileInDir(
126
+ logger,
127
+ verbosePath,
128
+ JSON.stringify(metaData, null, 2)
129
+ )
130
+ }
131
+
110
132
  const jsonImportPath = getFileImportRelativePath(
111
133
  mcpWiringsMetaFile,
112
134
  config.mcpWiringsMetaJsonFile,
@@ -124,9 +146,9 @@ export const pikkuMCP: any = pikkuSessionlessFunc<void, boolean | undefined>({
124
146
  `import { pikkuState } from '@pikku/core'
125
147
  import type { MCPResourceMeta, MCPToolMeta, MCPPromptMeta } from '@pikku/core/mcp'
126
148
  ${importStatement}
127
- pikkuState('mcp', 'resourcesMeta', metaData.resourcesMeta as MCPResourceMeta)
128
- pikkuState('mcp', 'toolsMeta', metaData.toolsMeta as MCPToolMeta)
129
- pikkuState('mcp', 'promptsMeta', metaData.promptsMeta as MCPPromptMeta)`
149
+ pikkuState(null, 'mcp', 'resourcesMeta', metaData.resourcesMeta as MCPResourceMeta)
150
+ pikkuState(null, 'mcp', 'toolsMeta', metaData.toolsMeta as MCPToolMeta)
151
+ pikkuState(null, 'mcp', 'promptsMeta', metaData.promptsMeta as MCPPromptMeta)`
130
152
  )
131
153
 
132
154
  return true