@pikku/cli 0.12.20 → 0.12.22

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 (455) hide show
  1. package/cli.schema.json +1 -1
  2. package/console-app/assets/index-C52h1B_L.css +1 -0
  3. package/console-app/assets/index-CAk106ji.js +232 -0
  4. package/console-app/index.html +3 -6
  5. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
  6. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +3 -3
  7. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  8. package/dist/.pikku/cli/pikku-cli-channel.d.ts +6 -6
  9. package/dist/.pikku/cli/pikku-cli-channel.js +280 -1
  10. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  11. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  12. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
  13. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +792 -8
  14. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  15. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  16. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  17. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  18. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  19. package/dist/.pikku/function/pikku-function-types.gen.d.ts +44 -70
  20. package/dist/.pikku/function/pikku-function-types.gen.js +33 -40
  21. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  22. package/dist/.pikku/function/pikku-functions-meta.gen.json +1439 -316
  23. package/dist/.pikku/function/pikku-functions.gen.js +21 -9
  24. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  25. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  26. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +1 -1
  27. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  28. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  29. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  30. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  31. package/dist/.pikku/pikku-bootstrap.gen.d.ts +3 -1
  32. package/dist/.pikku/pikku-bootstrap.gen.js +3 -1
  33. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  34. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  35. package/dist/.pikku/pikku-services.gen.d.ts +2 -1
  36. package/dist/.pikku/pikku-services.gen.js +1 -0
  37. package/dist/.pikku/pikku-types.gen.d.ts +1 -1
  38. package/dist/.pikku/pikku-types.gen.js +1 -1
  39. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  40. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  41. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.d.ts +1 -0
  42. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +6 -0
  43. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +250 -0
  44. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +4 -0
  45. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +5 -0
  46. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  47. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +66 -10
  48. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  49. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  50. package/dist/.pikku/schemas/register.gen.js +157 -11
  51. package/dist/.pikku/schemas/schemas/BinaryInput.schema.json +1 -0
  52. package/dist/.pikku/schemas/schemas/DbMigrateInput.schema.json +1 -0
  53. package/dist/.pikku/schemas/schemas/DbResetInput.schema.json +1 -0
  54. package/dist/.pikku/schemas/schemas/DbSeedInput.schema.json +1 -0
  55. package/dist/.pikku/schemas/schemas/FabricDbSchemaInput.schema.json +1 -0
  56. package/dist/.pikku/schemas/schemas/FabricDbSchemaOutput.schema.json +1 -0
  57. package/dist/.pikku/schemas/schemas/FabricDeployApplyInput.schema.json +1 -0
  58. package/dist/.pikku/schemas/schemas/FabricDeployApplyOutput.schema.json +1 -0
  59. package/dist/.pikku/schemas/schemas/FabricDeployListInput.schema.json +1 -0
  60. package/dist/.pikku/schemas/schemas/FabricDeployListOutput.schema.json +1 -0
  61. package/dist/.pikku/schemas/schemas/FabricDeployPlanInput.schema.json +1 -0
  62. package/dist/.pikku/schemas/schemas/FabricDeployPlanOutput.schema.json +1 -0
  63. package/dist/.pikku/schemas/schemas/FabricDeployUnitsInput.schema.json +1 -0
  64. package/dist/.pikku/schemas/schemas/FabricDeployUnitsOutput.schema.json +1 -0
  65. package/dist/.pikku/schemas/schemas/FabricDomainsAddInput.schema.json +1 -0
  66. package/dist/.pikku/schemas/schemas/FabricDomainsAddOutput.schema.json +1 -0
  67. package/dist/.pikku/schemas/schemas/FabricDomainsListInput.schema.json +1 -0
  68. package/dist/.pikku/schemas/schemas/FabricDomainsListOutput.schema.json +1 -0
  69. package/dist/.pikku/schemas/schemas/FabricDomainsRemoveInput.schema.json +1 -0
  70. package/dist/.pikku/schemas/schemas/FabricDomainsRemoveOutput.schema.json +1 -0
  71. package/dist/.pikku/schemas/schemas/FabricErrorsInput.schema.json +1 -0
  72. package/dist/.pikku/schemas/schemas/FabricErrorsOutput.schema.json +1 -0
  73. package/dist/.pikku/schemas/schemas/FabricInitInput.schema.json +1 -0
  74. package/dist/.pikku/schemas/schemas/FabricInitOutput.schema.json +1 -0
  75. package/dist/.pikku/schemas/schemas/FabricLLMKeyInput.schema.json +1 -0
  76. package/dist/.pikku/schemas/schemas/FabricLLMKeyOutput.schema.json +1 -0
  77. package/dist/.pikku/schemas/schemas/FabricLinkInput.schema.json +1 -0
  78. package/dist/.pikku/schemas/schemas/FabricLinkOutput.schema.json +1 -0
  79. package/dist/.pikku/schemas/schemas/FabricLoginInput.schema.json +1 -0
  80. package/dist/.pikku/schemas/schemas/FabricLoginOutput.schema.json +1 -0
  81. package/dist/.pikku/schemas/schemas/FabricLogsInput.schema.json +1 -0
  82. package/dist/.pikku/schemas/schemas/FabricLogsOutput.schema.json +1 -0
  83. package/dist/.pikku/schemas/schemas/FabricMetricsInput.schema.json +1 -0
  84. package/dist/.pikku/schemas/schemas/FabricMetricsOutput.schema.json +1 -0
  85. package/dist/.pikku/schemas/schemas/FabricRollbackInput.schema.json +1 -0
  86. package/dist/.pikku/schemas/schemas/FabricRollbackOutput.schema.json +1 -0
  87. package/dist/.pikku/schemas/schemas/FabricSecretsListInput.schema.json +1 -0
  88. package/dist/.pikku/schemas/schemas/FabricSecretsListOutput.schema.json +1 -0
  89. package/dist/.pikku/schemas/schemas/FabricSecretsSetInput.schema.json +1 -0
  90. package/dist/.pikku/schemas/schemas/FabricSecretsSetOutput.schema.json +1 -0
  91. package/dist/.pikku/schemas/schemas/FabricStatusInput.schema.json +1 -0
  92. package/dist/.pikku/schemas/schemas/FabricStatusOutput.schema.json +1 -0
  93. package/dist/.pikku/schemas/schemas/FabricTraceInput.schema.json +1 -0
  94. package/dist/.pikku/schemas/schemas/FabricTraceOutput.schema.json +1 -0
  95. package/dist/.pikku/schemas/schemas/FabricValidateInput.schema.json +1 -0
  96. package/dist/.pikku/schemas/schemas/FabricValidateOutput.schema.json +1 -0
  97. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  98. package/dist/.pikku/schemas/schemas/PikkuCommandChannelsOutput.schema.json +1 -0
  99. package/dist/.pikku/schemas/schemas/PikkuCommandHTTPOutput.schema.json +1 -0
  100. package/dist/.pikku/schemas/schemas/PikkuCommandQueueOutput.schema.json +1 -0
  101. package/dist/.pikku/schemas/schemas/PikkuEventsScaffoldOutput.schema.json +1 -0
  102. package/dist/.pikku/schemas/schemas/PikkuMetaClientsInput.schema.json +1 -0
  103. package/dist/.pikku/schemas/schemas/PikkuMetaContextInput.schema.json +1 -0
  104. package/dist/.pikku/schemas/schemas/PikkuMetaFunctionsGetInput.schema.json +1 -0
  105. package/dist/.pikku/schemas/schemas/PikkuMetaFunctionsListInput.schema.json +1 -0
  106. package/dist/.pikku/schemas/schemas/PikkuMetaMiddlewareGetInput.schema.json +1 -0
  107. package/dist/.pikku/schemas/schemas/PikkuMetaMiddlewareListInput.schema.json +1 -0
  108. package/dist/.pikku/schemas/schemas/PikkuMetaPermissionsGetInput.schema.json +1 -0
  109. package/dist/.pikku/schemas/schemas/PikkuMetaPermissionsListInput.schema.json +1 -0
  110. package/dist/.pikku/schemas/schemas/PikkuMetaSchemasGetInput.schema.json +1 -0
  111. package/dist/.pikku/schemas/schemas/PikkuMetaSchemasListInput.schema.json +1 -0
  112. package/dist/.pikku/schemas/schemas/PikkuMetaWiresChannelInput.schema.json +1 -0
  113. package/dist/.pikku/schemas/schemas/PikkuMetaWiresHttpInput.schema.json +1 -0
  114. package/dist/.pikku/schemas/schemas/PikkuMetaWiresListInput.schema.json +1 -0
  115. package/dist/.pikku/schemas/schemas/PikkuMetaWiresQueueInput.schema.json +1 -0
  116. package/dist/.pikku/schemas/schemas/PikkuMetaWiresSchedulerInput.schema.json +1 -0
  117. package/dist/.pikku/schemas/schemas/PikkuMetaWiresTriggerInput.schema.json +1 -0
  118. package/dist/.pikku/schemas/schemas/PikkuMetaWiresTypeInput.schema.json +1 -0
  119. package/dist/.pikku/schemas/schemas/PikkuMetaWorkflowsGetInput.schema.json +1 -0
  120. package/dist/.pikku/schemas/schemas/PikkuMetaWorkflowsListInput.schema.json +1 -0
  121. package/dist/.pikku/schemas/schemas/PikkuSkillsInstallInput.schema.json +1 -0
  122. package/dist/.pikku/schemas/schemas/PikkuSkillsListInput.schema.json +1 -0
  123. package/dist/.pikku/schemas/schemas/PikkuTestsCoverageInput.schema.json +1 -0
  124. package/dist/.pikku/schemas/schemas/PikkuTestsInitInput.schema.json +1 -0
  125. package/dist/.pikku/schemas/schemas/WorkflowRunStatus.schema.json +1 -1
  126. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  127. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  128. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  129. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  130. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  131. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  132. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  133. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  134. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  135. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  136. package/dist/.pikku/workflow/meta/allWorkflow.gen.json +237 -629
  137. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
  138. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  139. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  140. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  141. package/dist/bin/pikku-bin.mjs +23 -0
  142. package/dist/bin/pikku.js +28 -1
  143. package/dist/src/cli.wiring.js +286 -10
  144. package/dist/src/deploy/analyzer/analyzer.d.ts +16 -1
  145. package/dist/src/deploy/analyzer/analyzer.js +83 -43
  146. package/dist/src/deploy/analyzer/manifest.d.ts +10 -0
  147. package/dist/src/deploy/build-pipeline.d.ts +2 -0
  148. package/dist/src/deploy/build-pipeline.js +123 -19
  149. package/dist/src/deploy/bundler/bundler.d.ts +3 -1
  150. package/dist/src/deploy/bundler/bundler.js +40 -9
  151. package/dist/src/deploy/bundler/dep-extractor.d.ts +5 -2
  152. package/dist/src/deploy/bundler/dep-extractor.js +103 -23
  153. package/dist/src/deploy/bundler/types.d.ts +5 -1
  154. package/dist/src/deploy/codegen/per-unit-codegen.d.ts +11 -1
  155. package/dist/src/deploy/codegen/per-unit-codegen.js +49 -6
  156. package/dist/src/deploy/plan/planner.js +25 -3
  157. package/dist/src/deploy/plan/provider.d.ts +2 -0
  158. package/dist/src/deploy/provider-adapter.d.ts +34 -0
  159. package/dist/src/deploy/server-entry.d.ts +16 -0
  160. package/dist/src/deploy/server-entry.js +81 -0
  161. package/dist/src/fabric/fabric-commands.d.ts +522 -0
  162. package/dist/src/fabric/fabric-commands.js +299 -0
  163. package/dist/src/fabric/functions/db-schema.function.d.ts +35 -0
  164. package/dist/src/fabric/functions/db-schema.function.js +37 -0
  165. package/dist/src/fabric/functions/deploy-list.function.d.ts +41 -0
  166. package/dist/src/fabric/functions/deploy-list.function.js +43 -0
  167. package/dist/src/fabric/functions/deploy-units.function.d.ts +35 -0
  168. package/dist/src/fabric/functions/deploy-units.function.js +41 -0
  169. package/dist/src/fabric/functions/deploy.function.d.ts +105 -0
  170. package/dist/src/fabric/functions/deploy.function.js +122 -0
  171. package/dist/src/fabric/functions/domains-add.function.d.ts +35 -0
  172. package/dist/src/fabric/functions/domains-add.function.js +46 -0
  173. package/dist/src/fabric/functions/domains-list.function.d.ts +20 -0
  174. package/dist/src/fabric/functions/domains-list.function.js +50 -0
  175. package/dist/src/fabric/functions/domains-remove.function.d.ts +24 -0
  176. package/dist/src/fabric/functions/domains-remove.function.js +44 -0
  177. package/dist/src/fabric/functions/errors.function.d.ts +44 -0
  178. package/dist/src/fabric/functions/errors.function.js +50 -0
  179. package/dist/src/fabric/functions/init.function.d.ts +51 -0
  180. package/dist/src/fabric/functions/init.function.js +54 -0
  181. package/dist/src/fabric/functions/link.function.d.ts +28 -0
  182. package/dist/src/fabric/functions/link.function.js +77 -0
  183. package/dist/src/fabric/functions/llm-key.function.d.ts +46 -0
  184. package/dist/src/fabric/functions/llm-key.function.js +76 -0
  185. package/dist/src/fabric/functions/login.function.d.ts +42 -0
  186. package/dist/src/fabric/functions/login.function.js +68 -0
  187. package/dist/src/fabric/functions/logs.function.d.ts +40 -0
  188. package/dist/src/fabric/functions/logs.function.js +84 -0
  189. package/dist/src/fabric/functions/metrics.function.d.ts +32 -0
  190. package/dist/src/fabric/functions/metrics.function.js +49 -0
  191. package/dist/src/fabric/functions/rollback.function.d.ts +76 -0
  192. package/dist/src/fabric/functions/rollback.function.js +69 -0
  193. package/dist/src/fabric/functions/secrets-list.function.d.ts +24 -0
  194. package/dist/src/fabric/functions/secrets-list.function.js +37 -0
  195. package/dist/src/fabric/functions/secrets-set.function.d.ts +32 -0
  196. package/dist/src/fabric/functions/secrets-set.function.js +36 -0
  197. package/dist/src/fabric/functions/status.function.d.ts +34 -0
  198. package/dist/src/fabric/functions/status.function.js +43 -0
  199. package/dist/src/fabric/functions/trace.function.d.ts +28 -0
  200. package/dist/src/fabric/functions/trace.function.js +45 -0
  201. package/dist/src/fabric/functions/validate.function.d.ts +50 -0
  202. package/dist/src/fabric/functions/validate.function.js +363 -0
  203. package/dist/src/fabric/lib/config.d.ts +64 -0
  204. package/dist/src/fabric/lib/config.js +62 -0
  205. package/dist/src/fabric/lib/console-url.d.ts +5 -0
  206. package/dist/src/fabric/lib/console-url.js +13 -0
  207. package/dist/src/fabric/lib/git.d.ts +53 -0
  208. package/dist/src/fabric/lib/git.js +151 -0
  209. package/dist/src/fabric/lib/http.d.ts +4 -0
  210. package/dist/src/fabric/lib/http.js +12 -0
  211. package/dist/src/fabric/lib/not-implemented.d.ts +5 -0
  212. package/dist/src/fabric/lib/not-implemented.js +8 -0
  213. package/dist/src/fabric/lib/output.d.ts +23 -0
  214. package/dist/src/fabric/lib/output.js +39 -0
  215. package/dist/src/fabric/lib/prompt.d.ts +12 -0
  216. package/dist/src/fabric/lib/prompt.js +32 -0
  217. package/dist/src/fabric/lib/stage.d.ts +7 -0
  218. package/dist/src/fabric/lib/stage.js +14 -0
  219. package/dist/src/fabric/sdk/pikku-fetch.gen.d.ts +14 -0
  220. package/dist/src/fabric/sdk/pikku-fetch.gen.js +30 -0
  221. package/dist/src/fabric/sdk/pikku-rpc.gen.d.ts +105 -0
  222. package/dist/src/fabric/sdk/pikku-rpc.gen.js +126 -0
  223. package/dist/src/functions/commands/all.d.ts +1 -1
  224. package/dist/src/functions/commands/binary.d.ts +7 -0
  225. package/dist/src/functions/commands/binary.js +40 -0
  226. package/dist/src/functions/commands/bootstrap.d.ts +1 -1
  227. package/dist/src/functions/commands/bootstrap.js +7 -4
  228. package/dist/src/functions/commands/console.d.ts +3 -3
  229. package/dist/src/functions/commands/db-migrate.d.ts +1 -0
  230. package/dist/src/functions/commands/db-migrate.js +35 -0
  231. package/dist/src/functions/commands/db-reset.d.ts +1 -0
  232. package/dist/src/functions/commands/db-reset.js +36 -0
  233. package/dist/src/functions/commands/db-seed.d.ts +1 -0
  234. package/dist/src/functions/commands/db-seed.js +27 -0
  235. package/dist/src/functions/commands/db-shared.d.ts +32 -0
  236. package/dist/src/functions/commands/db-shared.js +26 -0
  237. package/dist/src/functions/commands/deploy-apply.d.ts +3 -3
  238. package/dist/src/functions/commands/deploy-apply.js +6 -4
  239. package/dist/src/functions/commands/deploy-info.d.ts +1 -1
  240. package/dist/src/functions/commands/deploy-plan.d.ts +3 -3
  241. package/dist/src/functions/commands/deploy-plan.js +7 -1
  242. package/dist/src/functions/commands/dev.d.ts +3 -3
  243. package/dist/src/functions/commands/dev.js +142 -86
  244. package/dist/src/functions/commands/enable.d.ts +5 -4
  245. package/dist/src/functions/commands/enable.js +4 -0
  246. package/dist/src/functions/commands/info.d.ts +4 -4
  247. package/dist/src/functions/commands/load-user-project.d.ts +11 -0
  248. package/dist/src/functions/commands/load-user-project.js +40 -0
  249. package/dist/src/functions/commands/meta.d.ts +82 -0
  250. package/dist/src/functions/commands/meta.js +454 -0
  251. package/dist/src/functions/commands/new-addon.d.ts +3 -3
  252. package/dist/src/functions/commands/new-function.d.ts +3 -3
  253. package/dist/src/functions/commands/new-middleware.d.ts +3 -3
  254. package/dist/src/functions/commands/new-permission.d.ts +3 -3
  255. package/dist/src/functions/commands/new-wiring.d.ts +3 -3
  256. package/dist/src/functions/commands/pikku-command-bootstrap.d.ts +1 -1
  257. package/dist/src/functions/commands/pikku-command-bootstrap.js +15 -1
  258. package/dist/src/functions/commands/pikku-command-summary.d.ts +1 -1
  259. package/dist/src/functions/commands/pikku-command-summary.js +7 -1
  260. package/dist/src/functions/commands/skills.d.ts +26 -0
  261. package/dist/src/functions/commands/skills.js +184 -0
  262. package/dist/src/functions/commands/tests-coverage.d.ts +7 -0
  263. package/dist/src/functions/commands/tests-coverage.js +231 -0
  264. package/dist/src/functions/commands/tests-init.d.ts +7 -0
  265. package/dist/src/functions/commands/tests-init.js +225 -0
  266. package/dist/src/functions/commands/versions-check.d.ts +1 -1
  267. package/dist/src/functions/commands/versions-init.d.ts +3 -3
  268. package/dist/src/functions/commands/versions-update.d.ts +1 -1
  269. package/dist/src/functions/commands/versions-update.js +4 -2
  270. package/dist/src/functions/commands/watch.d.ts +3 -3
  271. package/dist/src/functions/commands/watch.js +1 -1
  272. package/dist/src/functions/db/local-db.d.ts +48 -0
  273. package/dist/src/functions/db/local-db.js +106 -0
  274. package/dist/src/functions/db/seed.d.ts +11 -0
  275. package/dist/src/functions/db/seed.js +22 -0
  276. package/dist/src/functions/db/sql-migrator.d.ts +26 -0
  277. package/dist/src/functions/db/sql-migrator.js +104 -0
  278. package/dist/src/functions/db/sqlite-codegen.d.ts +45 -0
  279. package/dist/src/functions/db/sqlite-codegen.js +294 -0
  280. package/dist/src/functions/db/zod-codegen.d.ts +10 -0
  281. package/dist/src/functions/db/zod-codegen.js +109 -0
  282. package/dist/src/functions/runtimes/fetch/index.d.ts +1 -1
  283. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.d.ts +1 -1
  284. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +21 -2
  285. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-worker-rpc-wrapper.d.ts +1 -0
  286. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-worker-rpc-wrapper.js +163 -0
  287. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.d.ts +1 -1
  288. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +5 -2
  289. package/dist/src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.d.ts +1 -0
  290. package/dist/src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.js +32 -0
  291. package/dist/src/functions/runtimes/tanstack-start/serialize-tanstack-start-shim.d.ts +11 -0
  292. package/dist/src/functions/runtimes/tanstack-start/serialize-tanstack-start-shim.js +36 -0
  293. package/dist/src/functions/runtimes/websocket/pikku-command-websocket-typed.d.ts +1 -1
  294. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent-types.d.ts +1 -1
  295. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent.d.ts +1 -1
  296. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent.js +1 -10
  297. package/dist/src/functions/wirings/ai-agent/pikku-command-public-agent.d.ts +1 -1
  298. package/dist/src/functions/wirings/ai-agent/serialize-public-agent.js +76 -1
  299. package/dist/src/functions/wirings/channels/pikku-channels.d.ts +1 -1
  300. package/dist/src/functions/wirings/channels/pikku-command-channel-types.d.ts +1 -1
  301. package/dist/src/functions/wirings/channels/pikku-command-channels-map.d.ts +1 -1
  302. package/dist/src/functions/wirings/channels/pikku-command-channels.d.ts +1 -1
  303. package/dist/src/functions/wirings/channels/pikku-command-channels.js +1 -1
  304. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.d.ts +1 -1
  305. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +5 -2
  306. package/dist/src/functions/wirings/cli/pikku-command-cli-types.d.ts +5 -1
  307. package/dist/src/functions/wirings/cli/pikku-command-cli-types.js +8 -2
  308. package/dist/src/functions/wirings/cli/pikku-command-cli.d.ts +1 -1
  309. package/dist/src/functions/wirings/cli/serialize-channel-cli-client.js +27 -9
  310. package/dist/src/functions/wirings/cli/serialize-channel-cli.d.ts +5 -1
  311. package/dist/src/functions/wirings/cli/serialize-channel-cli.js +13 -3
  312. package/dist/src/functions/wirings/console/pikku-command-console-functions.d.ts +1 -1
  313. package/dist/src/functions/wirings/console/pikku-command-console-functions.js +5 -1
  314. package/dist/src/functions/wirings/console/pikku-command-node-types.d.ts +1 -1
  315. package/dist/src/functions/wirings/console/pikku-command-nodes-meta.d.ts +1 -1
  316. package/dist/src/functions/wirings/console/serialize-console-functions.js +5 -0
  317. package/dist/src/functions/wirings/credentials/pikku-command-credentials.d.ts +1 -1
  318. package/dist/src/functions/wirings/functions/pikku-command-addon-types.d.ts +5 -1
  319. package/dist/src/functions/wirings/functions/pikku-command-addon-types.js +7 -2
  320. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.d.ts +1 -1
  321. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +1 -1
  322. package/dist/src/functions/wirings/functions/pikku-command-function-types.d.ts +1 -1
  323. package/dist/src/functions/wirings/functions/pikku-command-functions.d.ts +1 -1
  324. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
  325. package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
  326. package/dist/src/functions/wirings/functions/serialize-function-types.js +105 -80
  327. package/dist/src/functions/wirings/gateway/pikku-command-gateway.d.ts +1 -1
  328. package/dist/src/functions/wirings/http/pikku-command-http-map.d.ts +1 -1
  329. package/dist/src/functions/wirings/http/pikku-command-http-routes.d.ts +1 -1
  330. package/dist/src/functions/wirings/http/pikku-command-http-routes.js +1 -1
  331. package/dist/src/functions/wirings/http/pikku-command-http-types.d.ts +1 -1
  332. package/dist/src/functions/wirings/http/pikku-command-openapi.d.ts +1 -1
  333. package/dist/src/functions/wirings/http/pikku-http-routes.d.ts +1 -1
  334. package/dist/src/functions/wirings/mcp/pikku-command-mcp-json.d.ts +1 -1
  335. package/dist/src/functions/wirings/mcp/pikku-command-mcp-types.d.ts +1 -1
  336. package/dist/src/functions/wirings/mcp/pikku-command-mcp.d.ts +1 -1
  337. package/dist/src/functions/wirings/middleware/pikku-command-middleware.d.ts +1 -1
  338. package/dist/src/functions/wirings/package/pikku-command-package-types.d.ts +2 -2
  339. package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -1
  340. package/dist/src/functions/wirings/permissions/pikku-command-permissions.d.ts +1 -1
  341. package/dist/src/functions/wirings/queue/pikku-command-queue-map.d.ts +1 -1
  342. package/dist/src/functions/wirings/queue/pikku-command-queue-map.js +1 -1
  343. package/dist/src/functions/wirings/queue/pikku-command-queue-service.d.ts +1 -1
  344. package/dist/src/functions/wirings/queue/pikku-command-queue-types.d.ts +1 -1
  345. package/dist/src/functions/wirings/queue/pikku-command-queue.d.ts +1 -1
  346. package/dist/src/functions/wirings/queue/pikku-command-queue.js +1 -1
  347. package/dist/src/functions/wirings/queue/pikku-queue-map.d.ts +1 -1
  348. package/dist/src/functions/wirings/queue/pikku-queue.d.ts +1 -1
  349. package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.d.ts +1 -0
  350. package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.js +26 -0
  351. package/dist/src/functions/wirings/realtime/pikku-command-realtime.d.ts +1 -0
  352. package/dist/src/functions/wirings/realtime/pikku-command-realtime.js +35 -0
  353. package/dist/src/functions/wirings/realtime/serialize-events-scaffold.d.ts +23 -0
  354. package/dist/src/functions/wirings/realtime/serialize-events-scaffold.js +98 -0
  355. package/dist/src/functions/wirings/realtime/serialize-realtime-client.d.ts +22 -0
  356. package/dist/src/functions/wirings/realtime/serialize-realtime-client.js +337 -0
  357. package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.d.ts +1 -1
  358. package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.js +5 -1
  359. package/dist/src/functions/wirings/rpc/pikku-command-react-query.d.ts +1 -1
  360. package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.d.ts +1 -1
  361. package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.js +5 -1
  362. package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.d.ts +1 -1
  363. package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.js +3 -1
  364. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.d.ts +2 -2
  365. package/dist/src/functions/wirings/rpc/pikku-command-rpc.d.ts +2 -1
  366. package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +13 -7
  367. package/dist/src/functions/wirings/rpc/serialize-public-rpc.js +1 -0
  368. package/dist/src/functions/wirings/rpc/serialize-react-query-hooks.js +1 -1
  369. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +7 -1
  370. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +16 -2
  371. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler-types.d.ts +1 -1
  372. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.d.ts +1 -1
  373. package/dist/src/functions/wirings/secrets/pikku-command-secrets.d.ts +1 -1
  374. package/dist/src/functions/wirings/triggers/pikku-command-trigger-types.d.ts +1 -1
  375. package/dist/src/functions/wirings/triggers/pikku-command-trigger-types.js +1 -1
  376. package/dist/src/functions/wirings/triggers/pikku-command-trigger.d.ts +1 -1
  377. package/dist/src/functions/wirings/variables/pikku-command-variables.d.ts +1 -1
  378. package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.d.ts +1 -1
  379. package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.js +1 -1
  380. package/dist/src/functions/wirings/workflow/pikku-command-workflow.d.ts +5 -1
  381. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +18 -4
  382. package/dist/src/functions/wirings/workflow/serialize-workflow-bootstrap-map.d.ts +3 -0
  383. package/dist/src/functions/wirings/workflow/serialize-workflow-bootstrap-map.js +40 -0
  384. package/dist/src/functions/wirings/workflow/serialize-workflow-routes.js +56 -2
  385. package/dist/src/functions/workflows/all.workflow.js +45 -12
  386. package/dist/src/scaffold/rpc-remote.gen.d.ts +3 -3
  387. package/dist/src/scaffold/rpc-remote.gen.js +7 -2
  388. package/dist/src/scaffold/workflow-routes.gen.d.ts +18 -18
  389. package/dist/src/scaffold/workflow-routes.gen.js +33 -1
  390. package/dist/src/services/cli-logger.service.d.ts +22 -3
  391. package/dist/src/services/cli-logger.service.js +107 -41
  392. package/dist/src/services.js +32 -67
  393. package/dist/src/utils/generate-bootstrap-file.js +3 -0
  394. package/dist/src/utils/parse-cli-filters.d.ts +18 -0
  395. package/dist/src/utils/parse-cli-filters.js +99 -0
  396. package/dist/src/utils/pikku-cli-config.js +29 -9
  397. package/dist/tsconfig.tsbuildinfo +1 -1
  398. package/package.json +9 -4
  399. package/skills/pikku-addon/SKILL.md +330 -0
  400. package/skills/pikku-ai-agent/SKILL.md +227 -0
  401. package/skills/pikku-ai-vercel/SKILL.md +78 -0
  402. package/skills/pikku-ai-voice/SKILL.md +85 -0
  403. package/skills/pikku-auth-js/SKILL.md +106 -0
  404. package/skills/pikku-aws/SKILL.md +107 -0
  405. package/skills/pikku-backblaze/SKILL.md +70 -0
  406. package/skills/pikku-cli/SKILL.md +281 -0
  407. package/skills/pikku-concepts/SKILL.md +281 -0
  408. package/skills/pikku-concepts/references/concept-mapping.md +528 -0
  409. package/skills/pikku-config/SKILL.md +208 -0
  410. package/skills/pikku-cron/SKILL.md +211 -0
  411. package/skills/pikku-deploy-azure/SKILL.md +69 -0
  412. package/skills/pikku-deploy-cloudflare/SKILL.md +80 -0
  413. package/skills/pikku-deploy-express/SKILL.md +83 -0
  414. package/skills/pikku-deploy-fastify/SKILL.md +70 -0
  415. package/skills/pikku-deploy-lambda/SKILL.md +107 -0
  416. package/skills/pikku-deploy-nextjs/SKILL.md +76 -0
  417. package/skills/pikku-deploy-uws/SKILL.md +85 -0
  418. package/skills/pikku-fabric/SKILL.md +245 -0
  419. package/skills/pikku-feature/SKILL.md +258 -0
  420. package/skills/pikku-gateway-slack/SKILL.md +112 -0
  421. package/skills/pikku-http/SKILL.md +317 -0
  422. package/skills/pikku-i18n/SKILL.md +208 -0
  423. package/skills/pikku-info/SKILL.md +95 -0
  424. package/skills/pikku-jose/SKILL.md +102 -0
  425. package/skills/pikku-kysely/SKILL.md +145 -0
  426. package/skills/pikku-mcp/SKILL.md +237 -0
  427. package/skills/pikku-mongodb/SKILL.md +102 -0
  428. package/skills/pikku-n8n-addon-map/SKILL.md +178 -0
  429. package/skills/pikku-n8n-code-translate/SKILL.md +166 -0
  430. package/skills/pikku-pino/SKILL.md +77 -0
  431. package/skills/pikku-queue/SKILL.md +237 -0
  432. package/skills/pikku-react/SKILL.md +183 -0
  433. package/skills/pikku-react-query/SKILL.md +205 -0
  434. package/skills/pikku-realtime/SKILL.md +285 -0
  435. package/skills/pikku-redis/SKILL.md +87 -0
  436. package/skills/pikku-rpc/SKILL.md +168 -0
  437. package/skills/pikku-rtl/SKILL.md +205 -0
  438. package/skills/pikku-schedule/SKILL.md +54 -0
  439. package/skills/pikku-schema-ajv/SKILL.md +60 -0
  440. package/skills/pikku-schema-cfworker/SKILL.md +60 -0
  441. package/skills/pikku-security/SKILL.md +243 -0
  442. package/skills/pikku-services/SKILL.md +247 -0
  443. package/skills/pikku-template-clone/SKILL.md +39 -0
  444. package/skills/pikku-testing/SKILL.md +428 -0
  445. package/skills/pikku-trigger/SKILL.md +177 -0
  446. package/skills/pikku-versioning/SKILL.md +169 -0
  447. package/skills/pikku-websocket/SKILL.md +239 -0
  448. package/skills/pikku-workflow/SKILL.md +283 -0
  449. package/skills/pikku-workflows-client/SKILL.md +150 -0
  450. package/skills/pikku-ws/SKILL.md +45 -0
  451. package/console-app/assets/index-BpY2pSuA.css +0 -10
  452. package/console-app/assets/index-DXLy-_D4.js +0 -717
  453. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +0 -10
  454. package/dist/.pikku/cli/pikku-cli-client.gen.js +0 -44
  455. /package/dist/.pikku/schemas/schemas/{PikkuChannelsOutput.schema.json → PikkuCLIEntryOutput.schema.json} +0 -0
@@ -0,0 +1,285 @@
1
+ ---
2
+ name: pikku-realtime
3
+ description: 'Use Pikku''s realtime feature — typed pub/sub events over WebSocket (multi-topic) or SSE (single-topic, auto-cleanup). Covers declaring EventHubTopics, scaffolding the /events channel, the auto-generated `PikkuRealtime` client, and publishing events from a function. TRIGGER when: the user asks for realtime updates, pub/sub, push notifications, server-sent events, websocket events, eventhub, or "live" data on the frontend. DO NOT TRIGGER when: the user wants RPC-style request/response (use pikku-rpc / pikku-react-query) or a custom one-off WebSocket channel (use pikku-websocket).'
4
+ installGroups: [core]
5
+ ---
6
+
7
+ # Pikku Realtime
8
+
9
+ ## Agent Operating Procedure
10
+
11
+ Use this skill as an execution checklist, not reference material.
12
+
13
+ 1. Discover before editing. Prefer OpenCode tools such as `pikku-meta` when available; otherwise run the relevant `pikku meta ... --json` command and inspect only the focused output you need.
14
+ 2. Identify the source files that own the behavior. Do not start by reading generated output, `.pikku`, `node_modules`, vendored packages, or broad build artifacts.
15
+ 3. Make the smallest source change that satisfies the task. Keep generated files generated, and avoid hand-editing SDKs, schema output, or typegen.
16
+ 4. Validate with the narrowest relevant command first, then run `pikku-verify` or `pikku all` when functions, wirings, schemas, or generated clients may have changed.
17
+ 5. If validation fails, fix the source cause and rerun validation. Do not paper over generated errors by editing generated files.
18
+
19
+ Most realtime UI is just typed pub/sub: a server pushes `todo-created`, the
20
+ client renders it. Pikku's realtime feature ships exactly that, two ways:
21
+
22
+ - **WebSocket** at `/events` — one connection, many topic subscriptions.
23
+ - **SSE** at `GET /events/:topic` — one connection per topic, auto-cleanup
24
+ on disconnect. Good for environments where WebSocket is blocked or for
25
+ trivially streaming one topic.
26
+
27
+ Both transports use the same `EventHubService` and the same publish call.
28
+ Choose by transport, not by code shape.
29
+
30
+ ## 1. Declare your topics
31
+
32
+ In your project's types file (e.g. `types/eventhub-topics.d.ts`):
33
+
34
+ ```ts
35
+ import type { Todo } from '../src/schemas.js'
36
+
37
+ export type EventHubTopics = {
38
+ 'todo-created': { todo: Todo }
39
+ 'todo-updated': { todo: Todo }
40
+ 'todo-deleted': { todoId: string }
41
+ }
42
+ ```
43
+
44
+ Reference it in `application-types.d.ts`:
45
+
46
+ ```ts
47
+ import type { EventHubService } from '@pikku/core/channel'
48
+ import type { EventHubTopics } from './eventhub-topics.js'
49
+
50
+ export interface SingletonServices extends CoreSingletonServices<Config> {
51
+ eventHub?: EventHubService<EventHubTopics>
52
+ // ...
53
+ }
54
+ ```
55
+
56
+ And instantiate it in `services.ts`:
57
+
58
+ ```ts
59
+ import { LocalEventHubService } from '@pikku/core/channel'
60
+ // ...
61
+ const eventHub = new LocalEventHubService<EventHubTopics>()
62
+ ```
63
+
64
+ (For multi-instance deployments use `CloudflareEventHubService` /
65
+ `LambdaEventHubService` / `UWSEventHubService` instead — same interface.)
66
+
67
+ ## 2. Enable the server side
68
+
69
+ ```bash
70
+ yarn pikku enable events # auth required by default
71
+ yarn pikku enable events --noAuth # public events
72
+ ```
73
+
74
+ This sets `scaffold.events` in `pikku.config.json`. The next `pikku all`
75
+ generates `events.gen.ts` in your scaffold dir, which wires:
76
+
77
+ - A WebSocket channel at `/events` handling `{action: 'subscribe' | 'unsubscribe', topic}` messages.
78
+ - An SSE handler at `GET /events/:topic`.
79
+
80
+ You don't write either by hand. They use whatever `eventHub` service is
81
+ in your singletons.
82
+
83
+ ## 3. Generate the typed client
84
+
85
+ Add to `pikku.config.json`:
86
+
87
+ ```jsonc
88
+ {
89
+ "clientFiles": {
90
+ // ...
91
+ "realtimeFile": "packages/sdk/src/pikku/realtime.gen.ts",
92
+ // Optional: full type inference for subscribe/unsubscribe
93
+ "realtimeEventHubTopicsImport": "../../../functions/types/eventhub-topics.js#EventHubTopics",
94
+ },
95
+ }
96
+ ```
97
+
98
+ Run `pikku all` (or `pikku realtime` to regenerate just this file). The
99
+ generated file exports two surfaces:
100
+
101
+ ```ts
102
+ export class PikkuRealtime {
103
+ constructor(options: { url: string; reconnect?: boolean; ... })
104
+ subscribe<K extends keyof EventHubTopics>(topic: K, handler: (data: EventHubTopics[K]) => void): () => void
105
+ unsubscribe<K extends keyof EventHubTopics>(topic: K, handler?: ...): void
106
+ close(): void
107
+ }
108
+
109
+ export function subscribeToTopicViaSSE<K extends keyof EventHubTopics>(
110
+ baseUrl: string, topic: K, handler: (data: EventHubTopics[K]) => void
111
+ ): { close: () => void }
112
+ ```
113
+
114
+ Without `realtimeEventHubTopicsImport`, the client falls back to
115
+ `Record<string, unknown>` — usable but untyped. Set the import for full
116
+ typed subscribe/unsubscribe.
117
+
118
+ ## 4. Publish events from a function
119
+
120
+ The `/events` channel listens for client subscriptions; the eventHub fans
121
+ out publishes. Functions publish like this:
122
+
123
+ ```ts
124
+ import { pikkuFunc } from '#pikku'
125
+
126
+ export const createTodo = pikkuFunc({
127
+ input: CreateTodoInput,
128
+ output: CreateTodoOutput,
129
+ func: async ({ kysely, eventHub }, data) => {
130
+ const todo = await kysely
131
+ .insertInto('todos')
132
+ .values(data)
133
+ .returningAll()
134
+ .executeTakeFirstOrThrow()
135
+
136
+ if (eventHub) {
137
+ // Envelope the payload with `topic` so the client dispatcher works.
138
+ await eventHub.publish('todo-created', null, {
139
+ topic: 'todo-created',
140
+ data: { todo },
141
+ })
142
+ }
143
+
144
+ return { id: todo.id }
145
+ },
146
+ })
147
+ ```
148
+
149
+ The `null` channelId means "broadcast to all subscribers." Pass a
150
+ specific channel id to exclude/include a single connection.
151
+
152
+ A thin helper removes the duplication:
153
+
154
+ ```ts
155
+ async function publishEvent<K extends keyof EventHubTopics>(
156
+ hub: EventHubService<EventHubTopics>,
157
+ topic: K,
158
+ data: EventHubTopics[K]
159
+ ) {
160
+ return hub.publish(topic, null, { topic, data })
161
+ }
162
+
163
+ // usage:
164
+ await publishEvent(eventHub, 'todo-created', { todo })
165
+ ```
166
+
167
+ ## 5. Wire it up — share fetch with PikkuRPC
168
+
169
+ `PikkuRealtime` mirrors `PikkuRPC`: it wraps the same `PikkuFetch`, so
170
+ server URL + auth are configured **once** and shared across HTTP, RPC,
171
+ and realtime transports.
172
+
173
+ ```tsx
174
+ import { createPikku, PikkuProvider } from '@pikku/react'
175
+ import { PikkuFetch } from './pikku/pikku-fetch.gen'
176
+ import { PikkuRPC } from './pikku/pikku-rpc.gen'
177
+ import { PikkuRealtime } from './pikku/realtime.gen'
178
+
179
+ const pikku = createPikku(
180
+ PikkuFetch,
181
+ PikkuRPC,
182
+ PikkuRealtime, // pass the realtime class as the third arg
183
+ { serverUrl: import.meta.env.VITE_API_URL ?? 'http://localhost:3000' }
184
+ )
185
+ // pikku.fetch / pikku.rpc / pikku.realtime — all share the same fetch.
186
+
187
+ createRoot(document.getElementById('root')!).render(
188
+ <PikkuProvider pikku={pikku}>
189
+ <App />
190
+ </PikkuProvider>
191
+ )
192
+ ```
193
+
194
+ Or wire manually:
195
+
196
+ ```ts
197
+ const realtime = new PikkuRealtime()
198
+ realtime.setPikkuFetch(pikku.fetch) // inherits serverUrl + auth
199
+ ```
200
+
201
+ ## 6. Subscribe from React
202
+
203
+ ```tsx
204
+ import { useEffect, useState } from 'react'
205
+
206
+ function TodoList() {
207
+ const { realtime } = usePikku() // assuming you expose a hook over your context
208
+ const [todos, setTodos] = useState<Todo[]>([])
209
+
210
+ useEffect(() => {
211
+ const off = realtime.subscribe('todo-created', ({ todo }) => {
212
+ setTodos((prev) => [...prev, todo])
213
+ })
214
+ return off
215
+ }, [realtime])
216
+
217
+ return (
218
+ <ul>
219
+ {todos.map((t) => (
220
+ <li key={t.id}>{t.title}</li>
221
+ ))}
222
+ </ul>
223
+ )
224
+ }
225
+ ```
226
+
227
+ Single-topic SSE (auto-cleanup on close):
228
+
229
+ ```tsx
230
+ useEffect(() => {
231
+ const sub = realtime.subscribeToTopic('todo-created', ({ todo }) => {
232
+ setTodos((prev) => [...prev, todo])
233
+ })
234
+ return () => sub.close()
235
+ }, [realtime])
236
+ ```
237
+
238
+ ## Subscribing to other SSE / WebSocket routes
239
+
240
+ Same client also handles generic SSE + channel routes — use the path,
241
+ the base URL is inherited from PikkuFetch:
242
+
243
+ ```ts
244
+ // Any sse: true HTTP route
245
+ const sub = realtime.subscribeToSSE<{ progress: number }>(
246
+ `/workflow-run/${runId}/stream`,
247
+ (event) => setProgress(event.progress)
248
+ )
249
+ // later: sub.close()
250
+
251
+ // Any wireChannel — open a raw socket, wrap in PikkuWebSocket for typed I/O
252
+ const ws = realtime.connectToChannel('/ws/kanban')
253
+ const typed = new PikkuWebSocket<'kanban-live'>(ws)
254
+ typed.getRoute('command').subscribe('message', (data) => {
255
+ /* ... */
256
+ })
257
+ ```
258
+
259
+ Discover what's available with `pikku meta clients --json` — `channels`
260
+ and any HTTP `sse: true` routes are listed there.
261
+
262
+ ## When to pick which transport
263
+
264
+ | Need | Use |
265
+ | ------------------------------------------ | ----------------------------- |
266
+ | Many topics in one connection | **PikkuRealtime** (WebSocket) |
267
+ | Single live stream, simple cleanup | **subscribeToTopicViaSSE** |
268
+ | Bidirectional (client also sends messages) | **PikkuRealtime** |
269
+ | WebSockets blocked by infra | **subscribeToTopicViaSSE** |
270
+
271
+ Both auto-clean on the server (the eventHub's `onChannelClosed` hook
272
+ unsubscribes all topics for the dead channel id). Don't write manual
273
+ cleanup unless you're unsubscribing partway through a session.
274
+
275
+ ## What NOT to do
276
+
277
+ - Don't call `eventHub.publish(topic, ..., rawData)` without the
278
+ `{topic, data}` envelope — clients use `topic` to dispatch handlers.
279
+ - Don't create your own `/events` channel by hand — `pikku enable events`
280
+ already does it correctly with disconnect cleanup.
281
+ - Don't subscribe inside the render path — use `useEffect`. Otherwise
282
+ you'll create a subscription per render.
283
+ - Don't subscribe to topics that don't exist in `EventHubTopics`. The
284
+ generated client's types prevent it; if you find yourself reaching for
285
+ `as any` to subscribe to a string, declare the topic first.
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: pikku-redis
3
+ description: 'Use when setting up Redis-backed services in a Pikku app. Covers channel stores, workflow services, secret services, event hubs, agent runs, and deployment services backed by Redis.
4
+ TRIGGER when: code uses RedisChannelStore, RedisWorkflowService, RedisSecretService, or user asks about Redis setup with Pikku.
5
+ DO NOT TRIGGER when: user asks about BullMQ queues (use pikku-queue) or SQL databases (use pikku-kysely).'
6
+ ---
7
+
8
+ # Pikku Redis
9
+
10
+ ## Agent Operating Procedure
11
+
12
+ Use this skill as an execution checklist, not reference material.
13
+
14
+ 1. Discover before editing. Prefer OpenCode tools such as `pikku-meta` when available; otherwise run the relevant `pikku meta ... --json` command and inspect only the focused output you need.
15
+ 2. Identify the source files that own the behavior. Do not start by reading generated output, `.pikku`, `node_modules`, vendored packages, or broad build artifacts.
16
+ 3. Make the smallest source change that satisfies the task. Keep generated files generated, and avoid hand-editing SDKs, schema output, or typegen.
17
+ 4. Validate with the narrowest relevant command first, then run `pikku-verify` or `pikku all` when functions, wirings, schemas, or generated clients may have changed.
18
+ 5. If validation fails, fix the source cause and rerun validation. Do not paper over generated errors by editing generated files.
19
+
20
+ `@pikku/redis` provides Redis-backed implementations of Pikku's core service interfaces using [ioredis](https://github.com/redis/ioredis).
21
+
22
+ ## Installation
23
+
24
+ ```bash
25
+ yarn add @pikku/redis
26
+ ```
27
+
28
+ ## API Reference
29
+
30
+ ### Available Services
31
+
32
+ All services accept a Redis connection (ioredis `Redis` instance, `RedisOptions`, or connection string) in their constructor.
33
+
34
+ | Service | Interface | Purpose |
35
+ | ------------------------- | ---------------------- | ---------------------------------------------- |
36
+ | `RedisChannelStore` | `ChannelStore` | WebSocket channel state persistence |
37
+ | `RedisEventHubStore` | `EventHubStore` | Event hub state persistence |
38
+ | `RedisWorkflowService` | `PikkuWorkflowService` | Workflow definition storage |
39
+ | `RedisWorkflowRunService` | `WorkflowRunService` | Workflow execution tracking |
40
+ | `RedisDeploymentService` | `DeploymentService` | Deployment state management |
41
+ | `RedisAgentRunService` | `AgentRunService` | Agent execution tracking |
42
+ | `RedisSecretService` | `SecretService` | Encrypted secret storage (envelope encryption) |
43
+
44
+ ### Secret Service
45
+
46
+ ```typescript
47
+ import { RedisSecretService } from '@pikku/redis'
48
+
49
+ const secrets = new RedisSecretService(
50
+ connectionOrConfig: Redis | RedisOptions | string,
51
+ config: { kekSecret: string; salt: string }
52
+ )
53
+
54
+ await secrets.getSecret(key: string): Promise<string>
55
+ await secrets.getSecretJSON<R>(key: string): Promise<R>
56
+ await secrets.hasSecret(key: string): Promise<boolean>
57
+ await secrets.setSecretJSON(key: string, value: unknown): Promise<void>
58
+ await secrets.deleteSecret(key: string): Promise<void>
59
+ await secrets.rotateKEK(): Promise<number>
60
+ await secrets.close(): Promise<void>
61
+ ```
62
+
63
+ ## Usage Patterns
64
+
65
+ ### Full Setup
66
+
67
+ ```typescript
68
+ import {
69
+ RedisChannelStore,
70
+ RedisWorkflowService,
71
+ RedisSecretService,
72
+ } from '@pikku/redis'
73
+
74
+ const createSingletonServices = pikkuServices(async (config) => {
75
+ const logger = new PinoLogger()
76
+
77
+ const channelStore = new RedisChannelStore(config.redisUrl)
78
+ const workflowService = new RedisWorkflowService(config.redisUrl)
79
+
80
+ const secrets = new RedisSecretService(config.redisUrl, {
81
+ kekSecret: config.kekSecret,
82
+ salt: config.salt,
83
+ })
84
+
85
+ return { config, logger, channelStore, workflowService, secrets }
86
+ })
87
+ ```
@@ -0,0 +1,168 @@
1
+ ---
2
+ name: pikku-rpc
3
+ description: 'Use when making internal function-to-function calls within a Pikku app, composing functions, or exposing RPC endpoints. Covers rpc.invoke, rpc.remote, rpc.exposed, and generated RPC client.
4
+ TRIGGER when: code uses wire.rpc or expose: true, user asks about calling one Pikku function from another, function composition, or RPC endpoints.
5
+ DO NOT TRIGGER when: user asks about HTTP routes (use pikku-http) or addon cross-package calls (use pikku-addon).'
6
+ installGroups: [core]
7
+ ---
8
+
9
+ # Pikku RPC Wiring
10
+
11
+ ## Agent Operating Procedure
12
+
13
+ Use this skill as an execution checklist, not reference material.
14
+
15
+ 1. Discover before editing. Prefer OpenCode tools such as `pikku-meta` when available; otherwise run the relevant `pikku meta ... --json` command and inspect only the focused output you need.
16
+ 2. Identify the source files that own the behavior. Do not start by reading generated output, `.pikku`, `node_modules`, vendored packages, or broad build artifacts.
17
+ 3. Make the smallest source change that satisfies the task. Keep generated files generated, and avoid hand-editing SDKs, schema output, or typegen.
18
+ 4. Validate with the narrowest relevant command first, then run `pikku-verify` or `pikku all` when functions, wirings, schemas, or generated clients may have changed.
19
+ 5. If validation fails, fix the source cause and rerun validation. Do not paper over generated errors by editing generated files.
20
+
21
+ Call Pikku functions from other Pikku functions internally with full type safety. Use RPC to compose business logic without importing functions directly.
22
+
23
+ ## Before You Start
24
+
25
+ ```bash
26
+ pikku info functions --verbose # See existing functions and which could be called via RPC
27
+ pikku info tags --verbose # Understand project organization
28
+ ```
29
+
30
+ See `pikku-concepts` for the core mental model.
31
+
32
+ ## API Reference
33
+
34
+ ### RPC Methods (on `wire.rpc`)
35
+
36
+ Four ways to call functions via RPC:
37
+
38
+ | Method | Purpose |
39
+ | -------------------------------- | ----------------------------------------- |
40
+ | `rpc.invoke(name, data)` | Internal call to any wired function |
41
+ | `rpc.remote(name, data)` | Remote call via DeploymentService |
42
+ | `rpc.exposed(name, data)` | Call functions marked with `expose: true` |
43
+ | `rpc.startWorkflow(name, input)` | Start a workflow |
44
+
45
+ ### Exposed Functions
46
+
47
+ Mark a function as externally callable via RPC:
48
+
49
+ ```typescript
50
+ const greet = pikkuSessionlessFunc({
51
+ title: 'Greet',
52
+ expose: true, // ← callable via rpc.exposed()
53
+ func: async ({}, { name }) => {
54
+ return { message: `Hello, ${name}!` }
55
+ },
56
+ })
57
+ ```
58
+
59
+ ### HTTP RPC Endpoint
60
+
61
+ Expose all `expose: true` functions over HTTP:
62
+
63
+ ```typescript
64
+ wireHTTP({
65
+ route: '/rpc/:rpcName',
66
+ method: 'post',
67
+ auth: false,
68
+ func: rpcCaller,
69
+ })
70
+ ```
71
+
72
+ ## Usage Patterns
73
+
74
+ ### Internal Function Composition
75
+
76
+ ```typescript
77
+ const calculateTax = pikkuSessionlessFunc({
78
+ title: 'Calculate Tax',
79
+ func: async ({}, { amount, rate }) => {
80
+ return { tax: amount * rate }
81
+ },
82
+ })
83
+
84
+ const processOrder = pikkuFunc({
85
+ title: 'Process Order',
86
+ func: async ({ db }, { orderId }, { rpc }) => {
87
+ const order = await db.getOrder(orderId)
88
+
89
+ // Call another pikku function internally — fully typed
90
+ const { tax } = await rpc.invoke('calculateTax', {
91
+ amount: order.total,
92
+ rate: 0.08,
93
+ })
94
+
95
+ return { orderId, total: order.total + tax }
96
+ },
97
+ })
98
+ ```
99
+
100
+ ### When to Use RPC vs Direct Imports
101
+
102
+ | Approach | Use When |
103
+ | -------------- | -------------------------------------------------------------------------------------------- |
104
+ | `rpc.invoke()` | Cross-domain calls, maintaining separation of concerns, function may be in different package |
105
+ | Direct import | Same module, tightly coupled logic, performance critical |
106
+
107
+ RPC calls go through Pikku's middleware and permission pipeline. Direct imports skip them.
108
+
109
+ ### Generated RPC Client
110
+
111
+ After `npx pikku prebuild`:
112
+
113
+ ```typescript
114
+ import { pikkuRPC } from '.pikku/pikku-rpc.gen.js'
115
+
116
+ pikkuRPC.setServerUrl('http://localhost:4002')
117
+
118
+ const result = await pikkuRPC.invoke('calculateTax', {
119
+ amount: 100,
120
+ rate: 0.08,
121
+ })
122
+
123
+ pikkuRPC.setAuthorizationJWT(token)
124
+ ```
125
+
126
+ ## Complete Example
127
+
128
+ ```typescript
129
+ // functions/billing.functions.ts
130
+ export const calculateTax = pikkuSessionlessFunc({
131
+ title: 'Calculate Tax',
132
+ func: async ({}, { amount, region }) => {
133
+ const rates = { US: 0.08, EU: 0.2, UK: 0.2 }
134
+ return { tax: amount * (rates[region] || 0) }
135
+ },
136
+ })
137
+
138
+ export const calculateShipping = pikkuSessionlessFunc({
139
+ title: 'Calculate Shipping',
140
+ func: async ({}, { weight, region }) => {
141
+ const base = region === 'US' ? 5 : 15
142
+ return { shipping: base + weight * 0.5 }
143
+ },
144
+ })
145
+
146
+ // functions/orders.functions.ts
147
+ export const processOrder = pikkuFunc({
148
+ title: 'Process Order',
149
+ func: async ({ db }, { orderId }, { rpc }) => {
150
+ const order = await db.getOrder(orderId)
151
+
152
+ const { tax } = await rpc.invoke('calculateTax', {
153
+ amount: order.total,
154
+ region: order.region,
155
+ })
156
+
157
+ const { shipping } = await rpc.invoke('calculateShipping', {
158
+ weight: order.totalWeight,
159
+ region: order.region,
160
+ })
161
+
162
+ const finalTotal = order.total + tax + shipping
163
+ await db.updateOrder(orderId, { tax, shipping, finalTotal })
164
+
165
+ return { orderId, total: finalTotal, tax, shipping }
166
+ },
167
+ })
168
+ ```