@pikku/cli 0.12.124 → 0.12.126

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 (296) hide show
  1. package/CHANGELOG.md +245 -0
  2. package/console-app/assets/{abnfDiagram-N423BO3Z-BP7zxMq6.js → abnfDiagram-N423BO3Z-B2suyn6i.js} +1 -1
  3. package/console-app/assets/architecture-TIHT7OUA-DmG0bXDT.js +1 -0
  4. package/console-app/assets/{architectureDiagram-T3A2C74G-mvqdkIfF.js → architectureDiagram-T3A2C74G-BQ5Dfvpo.js} +1 -1
  5. package/console-app/assets/{blockDiagram-VBNYF7ZC-daD8h3VT.js → blockDiagram-VBNYF7ZC-D4pVRDiF.js} +1 -1
  6. package/console-app/assets/{c4Diagram-5PPSVZJV-Bd0_wKJj.js → c4Diagram-5PPSVZJV-Da04jGpq.js} +1 -1
  7. package/console-app/assets/channel-BgCT5gon.js +1 -0
  8. package/console-app/assets/{chunk-2GRJ4B5K-BFRr_H2V.js → chunk-2GRJ4B5K-CwODIPP4.js} +1 -1
  9. package/console-app/assets/{chunk-4I5QYGJK-BXWo5Xyx.js → chunk-4I5QYGJK-Bep4akjR.js} +1 -1
  10. package/console-app/assets/{chunk-5RXB4S5H-BFnXfzzz.js → chunk-5RXB4S5H-CGyCRU9L.js} +1 -1
  11. package/console-app/assets/{chunk-6Q2QTUOP-Bswg4T3s.js → chunk-6Q2QTUOP-D0IK0SMT.js} +1 -1
  12. package/console-app/assets/{chunk-7Z6QIM7H-StNGH40U.js → chunk-7Z6QIM7H-D12vS1jX.js} +1 -1
  13. package/console-app/assets/{chunk-GF5L2VYU-QwXKtQxa.js → chunk-GF5L2VYU-kOLwTzIA.js} +1 -1
  14. package/console-app/assets/{chunk-I66GZJ75-DDQhhfA0.js → chunk-I66GZJ75-Cb2nDoa3.js} +1 -1
  15. package/console-app/assets/{chunk-JQJVKLGR-wFyF2bUv.js → chunk-JQJVKLGR-B3a_ctfQ.js} +1 -1
  16. package/console-app/assets/{chunk-KBJHAD2P-CQPQVDkD.js → chunk-KBJHAD2P-DeP2Lqwp.js} +1 -1
  17. package/console-app/assets/{chunk-NSK5VX7P-DZhjvnHm.js → chunk-NSK5VX7P-BO8vlGrO.js} +1 -1
  18. package/console-app/assets/{chunk-QR6OTTB3-D1-TbcCP.js → chunk-QR6OTTB3-sX5V0Lok.js} +1 -1
  19. package/console-app/assets/{chunk-RYQCIY6F-82OYF6U8.js → chunk-RYQCIY6F-DoCObEhk.js} +1 -1
  20. package/console-app/assets/{chunk-UBXNYLIW-D85x6Zh2.js → chunk-UBXNYLIW-BndMXU5r.js} +1 -1
  21. package/console-app/assets/{chunk-W5SLKNZC-B1Ps46_n.js → chunk-W5SLKNZC--VrZN8EC.js} +1 -1
  22. package/console-app/assets/{chunk-WRU74C26-Ct8XrToU.js → chunk-WRU74C26-DdS0mzXO.js} +1 -1
  23. package/console-app/assets/chunk-XXDRQBXY-EP2C9tTO.js +1 -0
  24. package/console-app/assets/classDiagram-JCYQIIEL-D9wGqB4J.js +1 -0
  25. package/console-app/assets/classDiagram-v2-OCEON4UE-D9wGqB4J.js +1 -0
  26. package/console-app/assets/{cose-bilkent-JH36ORCC-DdevwV5Y.js → cose-bilkent-JH36ORCC-C5EnHkFn.js} +1 -1
  27. package/console-app/assets/{cynefin-VYW2F7L2-Dj55csoo.js → cynefin-VYW2F7L2-9irdkTt4.js} +1 -1
  28. package/console-app/assets/{cynefinDiagram-MW4NZA55-XWSzdajo.js → cynefinDiagram-MW4NZA55-DY19660c.js} +1 -1
  29. package/console-app/assets/{dagre-VZM6K2ZE-BV2l3zSF.js → dagre-VZM6K2ZE-BYFZSaSb.js} +1 -1
  30. package/console-app/assets/{dagre-CLoXIMX5.js → dagre-nXgDYqvf.js} +1 -1
  31. package/console-app/assets/{diagram-7IWD3JNH-DC9NK-nv.js → diagram-7IWD3JNH-oDftiTp1.js} +1 -1
  32. package/console-app/assets/{diagram-B4RE2ZJO-Cirfb0aN.js → diagram-B4RE2ZJO-Cbj-pPbH.js} +1 -1
  33. package/console-app/assets/{diagram-LBJQPF4R-BuRRy5X5.js → diagram-LBJQPF4R-Ch53oSKw.js} +1 -1
  34. package/console-app/assets/{diagram-Q27KOJAE-CAOKQ2xs.js → diagram-Q27KOJAE-DA7K814v.js} +1 -1
  35. package/console-app/assets/{diagram-UB23O5K3-Bto5kBJo.js → diagram-UB23O5K3-B-_C-ctS.js} +1 -1
  36. package/console-app/assets/{ebnfDiagram-BXEA7PRR-C5OndYGC.js → ebnfDiagram-BXEA7PRR-DsOdsKXy.js} +1 -1
  37. package/console-app/assets/{erDiagram-JOGREHBK-DqU4xV4C.js → erDiagram-JOGREHBK-XB1mP5_A.js} +1 -1
  38. package/console-app/assets/eventmodeling-45OFAUF4-NKFCZ8Fj.js +1 -0
  39. package/console-app/assets/flowDiagram-UKHOOZJN-BpdPkmum.js +1 -0
  40. package/console-app/assets/{ganttDiagram-PKOTCBZU-D5_DE9R0.js → ganttDiagram-PKOTCBZU-knk0XSHi.js} +1 -1
  41. package/console-app/assets/{gitGraph-TEB2WS4Q-nuqfz7Fd.js → gitGraph-TEB2WS4Q-COJnK2tM.js} +1 -1
  42. package/console-app/assets/{gitGraphDiagram-DS77QQ5N-BtJwp2Y3.js → gitGraphDiagram-DS77QQ5N-sF0v605q.js} +1 -1
  43. package/console-app/assets/{index-DXcH2K9z.css → index-C8MC-uMB.css} +1 -1
  44. package/console-app/assets/{index-DRfts2XF.js → index-DMnbsgzs.js} +3 -3
  45. package/console-app/assets/{info-DKCQHKI2-CIfPVqHr.js → info-DKCQHKI2-Cbatr0w6.js} +1 -1
  46. package/console-app/assets/{infoDiagram-6WML65LV-B-gTHQad.js → infoDiagram-6WML65LV-93TFPCu2.js} +1 -1
  47. package/console-app/assets/{ishikawaDiagram-WSZJBQD7-CCwAWb1g.js → ishikawaDiagram-WSZJBQD7-BBR8_Qms.js} +1 -1
  48. package/console-app/assets/{journeyDiagram-NVQOT4AX-DhqNj_ci.js → journeyDiagram-NVQOT4AX-zG55yDoc.js} +1 -1
  49. package/console-app/assets/{kanban-definition-27J2QSJJ-DspZ1b3Y.js → kanban-definition-27J2QSJJ-DonGcEAY.js} +1 -1
  50. package/console-app/assets/{line-D7ZCpNkR.js → line-D1WdVm1S.js} +1 -1
  51. package/console-app/assets/{linear-B5jMy_q9.js → linear-D2GQL4Cm.js} +1 -1
  52. package/console-app/assets/{mermaid-parser.core-CMBFGJ0U.js → mermaid-parser.core-b4yKyO56.js} +3 -3
  53. package/console-app/assets/{mermaid.core-DYoDrSEJ.js → mermaid.core-Cwfec1gr.js} +4 -4
  54. package/console-app/assets/{mindmap-definition-FAOFIHXS-DsHwd2K9.js → mindmap-definition-FAOFIHXS-D0G4yKgw.js} +1 -1
  55. package/console-app/assets/{packet-7NZHBO7P-BSRRjf4H.js → packet-7NZHBO7P-DDa4HL2T.js} +1 -1
  56. package/console-app/assets/{pegDiagram-VL7TDLO6-Bi0OlzgS.js → pegDiagram-VL7TDLO6-fPdN5VZs.js} +1 -1
  57. package/console-app/assets/{pie-RZYD4A2V-D-8tgqYW.js → pie-RZYD4A2V-DRHURUqo.js} +1 -1
  58. package/console-app/assets/{pieDiagram-7S7Q4E2Y-CsYbVqaR.js → pieDiagram-7S7Q4E2Y-DMYn8ga_.js} +1 -1
  59. package/console-app/assets/{quadrantDiagram-CIZ2JOQS-LkLWrWKK.js → quadrantDiagram-CIZ2JOQS-C190OamC.js} +1 -1
  60. package/console-app/assets/{radar-I7S5WNFK-Bst62XZP.js → radar-I7S5WNFK-Djvqzz9A.js} +1 -1
  61. package/console-app/assets/{railroad-3IZDKUUU-zJswMQYF.js → railroad-3IZDKUUU-C9YvFeFq.js} +1 -1
  62. package/console-app/assets/railroad-abnf-AHOZXSZD-B3CYVW4p.js +1 -0
  63. package/console-app/assets/railroad-ebnf-EBAXGLYW-DrZ2yF62.js +1 -0
  64. package/console-app/assets/railroad-peg-LSFZ7HO6-CWAmMyxd.js +1 -0
  65. package/console-app/assets/{railroadDiagram-AXF67PYL-C0QZkg7m.js → railroadDiagram-AXF67PYL-IRFg1VrU.js} +1 -1
  66. package/console-app/assets/{requirementDiagram-LRYGKXZP-BQg0AbLI.js → requirementDiagram-LRYGKXZP-L-7ubbcT.js} +1 -1
  67. package/console-app/assets/{sankeyDiagram-W5VNT64P-CQb0BMMi.js → sankeyDiagram-W5VNT64P-DBttV6Gt.js} +1 -1
  68. package/console-app/assets/{sequenceDiagram-SI44F4Z6-BzgBi0a5.js → sequenceDiagram-SI44F4Z6-Bg15oKAB.js} +1 -1
  69. package/console-app/assets/{src-Dg-KiSsV.js → src-DUC7tLWb.js} +1 -1
  70. package/console-app/assets/{stateDiagram-OKZ733FA-BiqXn68g.js → stateDiagram-OKZ733FA-PWl0XGs5.js} +1 -1
  71. package/console-app/assets/stateDiagram-v2-UEYNNEHI-Celbgz4u.js +1 -0
  72. package/console-app/assets/{swimlanes-SLNWSIFB-Dy7wDP1q.js → swimlanes-SLNWSIFB-CyXEtGBV.js} +1 -1
  73. package/console-app/assets/swimlanesDiagram-ULZ7WXOC-zxpNaB4U.js +8 -0
  74. package/console-app/assets/{timeline-definition-Z64GVDOM-DSWXli8X.js → timeline-definition-Z64GVDOM-BLA-DhBt.js} +1 -1
  75. package/console-app/assets/{treeView-QDETBFTQ-CeWwcs9r.js → treeView-QDETBFTQ-Bfnmn2UY.js} +1 -1
  76. package/console-app/assets/{treemap-6X3UGDF4-BfrumiJh.js → treemap-6X3UGDF4-DTA0wveO.js} +1 -1
  77. package/console-app/assets/{vennDiagram-T6HMQDX7-BsuldZ1n.js → vennDiagram-T6HMQDX7-CLXYZln0.js} +1 -1
  78. package/console-app/assets/{wardley-OPB4EBWU-oZldxS8z.js → wardley-OPB4EBWU-zwxqisG0.js} +1 -1
  79. package/console-app/assets/{wardleyDiagram-T6FBY63Y-C5LXyHMj.js → wardleyDiagram-T6FBY63Y-hKtKvNlv.js} +1 -1
  80. package/console-app/assets/{xychartDiagram-ELKLHX3M-CwhqhNkO.js → xychartDiagram-ELKLHX3M-BGf8p4bo.js} +1 -1
  81. package/console-app/index.html +2 -2
  82. package/dist/.pikku/addon/index.d.ts +1 -1
  83. package/dist/.pikku/addon/index.js +1 -1
  84. package/dist/.pikku/addon/pikku-addon-types.gen.d.ts +1 -1
  85. package/dist/.pikku/addon/pikku-addon-types.gen.js +1 -1
  86. package/dist/.pikku/agent/index.d.ts +1 -1
  87. package/dist/.pikku/agent/index.js +1 -1
  88. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
  89. package/dist/.pikku/agent/pikku-model-aliases.gen.js +1 -1
  90. package/dist/.pikku/auth/index.d.ts +1 -1
  91. package/dist/.pikku/auth/index.js +1 -1
  92. package/dist/.pikku/auth/pikku-auth-types.gen.d.ts +1 -1
  93. package/dist/.pikku/auth/pikku-auth-types.gen.js +1 -1
  94. package/dist/.pikku/channel/index.d.ts +1 -1
  95. package/dist/.pikku/channel/index.js +1 -1
  96. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
  97. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  98. package/dist/.pikku/cli/index.d.ts +1 -1
  99. package/dist/.pikku/cli/index.js +1 -1
  100. package/dist/.pikku/cli/pikku-cli-channel.js +11 -1
  101. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  102. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
  103. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +1 -1
  104. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +1 -1
  105. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.json +7 -0
  106. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  107. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  108. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
  109. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +27 -0
  110. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  111. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  112. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  113. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  114. package/dist/.pikku/error/index.d.ts +1 -1
  115. package/dist/.pikku/error/index.js +1 -1
  116. package/dist/.pikku/error/pikku-error-types.gen.d.ts +1 -1
  117. package/dist/.pikku/error/pikku-error-types.gen.js +1 -1
  118. package/dist/.pikku/function/index.d.ts +1 -1
  119. package/dist/.pikku/function/index.js +1 -1
  120. package/dist/.pikku/function/pikku-function-types.gen.d.ts +1 -1
  121. package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
  122. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  123. package/dist/.pikku/function/pikku-functions-meta.gen.json +59 -23
  124. package/dist/.pikku/function/pikku-functions.gen.js +1 -1
  125. package/dist/.pikku/gateway/index.d.ts +1 -1
  126. package/dist/.pikku/gateway/index.js +1 -1
  127. package/dist/.pikku/gateway/pikku-gateway-types.gen.d.ts +1 -1
  128. package/dist/.pikku/gateway/pikku-gateway-types.gen.js +1 -1
  129. package/dist/.pikku/http/index.d.ts +1 -1
  130. package/dist/.pikku/http/index.js +1 -1
  131. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  132. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  133. package/dist/.pikku/mcp/index.d.ts +1 -1
  134. package/dist/.pikku/mcp/index.js +1 -1
  135. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  136. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  137. package/dist/.pikku/middleware/index.d.ts +1 -1
  138. package/dist/.pikku/middleware/index.js +1 -1
  139. package/dist/.pikku/middleware/pikku-middleware-types.gen.d.ts +1 -1
  140. package/dist/.pikku/middleware/pikku-middleware-types.gen.js +1 -1
  141. package/dist/.pikku/pikku-bootstrap-scenarios.gen.d.ts +1 -1
  142. package/dist/.pikku/pikku-bootstrap-scenarios.gen.js +1 -1
  143. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
  144. package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
  145. package/dist/.pikku/pikku-services.gen.d.ts +1 -1
  146. package/dist/.pikku/queue/index.d.ts +1 -1
  147. package/dist/.pikku/queue/index.js +1 -1
  148. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  149. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  150. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +1 -1
  151. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  152. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  153. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  154. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +2 -0
  155. package/dist/.pikku/scenarios/index.d.ts +1 -1
  156. package/dist/.pikku/scenarios/index.js +1 -1
  157. package/dist/.pikku/scenarios/pikku-personas.gen.js +1 -1
  158. package/dist/.pikku/scenarios/pikku-scenario-functions-meta.gen.js +1 -1
  159. package/dist/.pikku/scenarios/pikku-scenario-functions.gen.d.ts +1 -1
  160. package/dist/.pikku/scenarios/pikku-scenario-types.gen.d.ts +1 -1
  161. package/dist/.pikku/scenarios/pikku-scenario-wirings-meta.gen.js +1 -1
  162. package/dist/.pikku/scenarios/pikku-scenario-wirings.gen.d.ts +1 -1
  163. package/dist/.pikku/scenarios/schemas/register.gen.d.ts +1 -1
  164. package/dist/.pikku/scenarios/schemas/register.gen.js +1 -1
  165. package/dist/.pikku/scheduler/index.d.ts +1 -1
  166. package/dist/.pikku/scheduler/index.js +1 -1
  167. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  168. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  169. package/dist/.pikku/schemas/register.gen.js +7 -1
  170. package/dist/.pikku/schemas/schemas/DeployApplyInput.schema.json +1 -1
  171. package/dist/.pikku/schemas/schemas/FabricProjectsListInput.schema.json +1 -0
  172. package/dist/.pikku/schemas/schemas/FabricProjectsListOutput.schema.json +1 -0
  173. package/dist/.pikku/schemas/schemas/FabricSecretsListInput.schema.json +1 -1
  174. package/dist/.pikku/schemas/schemas/FabricSecretsRotateInput.schema.json +1 -1
  175. package/dist/.pikku/schemas/schemas/FabricSecretsSetInput.schema.json +1 -1
  176. package/dist/.pikku/schemas/schemas/FabricVariablesGetInput.schema.json +1 -1
  177. package/dist/.pikku/schemas/schemas/FabricVariablesSetInput.schema.json +1 -1
  178. package/dist/.pikku/schemas/schemas/PersonaSecretInput.schema.json +1 -0
  179. package/dist/.pikku/scopes/index.d.ts +1 -1
  180. package/dist/.pikku/scopes/index.js +1 -1
  181. package/dist/.pikku/scopes/pikku-personas.gen.js +1 -1
  182. package/dist/.pikku/scopes/pikku-roles.gen.d.ts +1 -1
  183. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +1 -1
  184. package/dist/.pikku/scopes/pikku-scope-types.gen.js +1 -1
  185. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +1 -1
  186. package/dist/.pikku/secrets/index.d.ts +1 -1
  187. package/dist/.pikku/secrets/index.js +1 -1
  188. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  189. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  190. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  191. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  192. package/dist/.pikku/services/pikku-meta-service.gen.d.ts +1 -1
  193. package/dist/.pikku/services/pikku-meta-service.gen.js +1 -1
  194. package/dist/.pikku/setup/index.d.ts +1 -1
  195. package/dist/.pikku/setup/index.js +1 -1
  196. package/dist/.pikku/setup/pikku-setup-types.gen.d.ts +1 -1
  197. package/dist/.pikku/setup/pikku-setup-types.gen.js +1 -1
  198. package/dist/.pikku/trigger/index.d.ts +1 -1
  199. package/dist/.pikku/trigger/index.js +1 -1
  200. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  201. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  202. package/dist/.pikku/variables/index.d.ts +1 -1
  203. package/dist/.pikku/variables/index.js +1 -1
  204. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  205. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  206. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  207. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  208. package/dist/.pikku/workflow/index.d.ts +1 -1
  209. package/dist/.pikku/workflow/index.js +1 -1
  210. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
  211. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  212. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  213. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  214. package/dist/bin/pikku-bin.mjs +2 -2
  215. package/dist/src/cli.wiring.js +13 -1
  216. package/dist/src/deploy/build-pipeline.d.ts +10 -0
  217. package/dist/src/deploy/build-pipeline.js +16 -1
  218. package/dist/src/deploy/bundler/bun-bundler.js +12 -5
  219. package/dist/src/deploy/frontend-assets.d.ts +50 -0
  220. package/dist/src/deploy/frontend-assets.js +82 -0
  221. package/dist/src/fabric/fabric-commands.d.ts +55 -15
  222. package/dist/src/fabric/fabric-commands.js +6 -0
  223. package/dist/src/fabric/functions/deploy.function.js +12 -2
  224. package/dist/src/fabric/functions/projects-list.function.d.ts +72 -0
  225. package/dist/src/fabric/functions/projects-list.function.js +63 -0
  226. package/dist/src/fabric/functions/secrets-list.function.d.ts +4 -4
  227. package/dist/src/fabric/functions/secrets-list.function.js +4 -4
  228. package/dist/src/fabric/functions/secrets-rotate.function.d.ts +4 -4
  229. package/dist/src/fabric/functions/secrets-rotate.function.js +8 -5
  230. package/dist/src/fabric/functions/secrets-set.function.d.ts +4 -4
  231. package/dist/src/fabric/functions/secrets-set.function.js +4 -4
  232. package/dist/src/fabric/functions/validate.function.js +49 -24
  233. package/dist/src/fabric/functions/variables-get.function.d.ts +4 -4
  234. package/dist/src/fabric/functions/variables-get.function.js +4 -4
  235. package/dist/src/fabric/functions/variables-set.function.d.ts +4 -4
  236. package/dist/src/fabric/functions/variables-set.function.js +4 -4
  237. package/dist/src/fabric/lib/blank-comments.d.ts +21 -0
  238. package/dist/src/fabric/lib/blank-comments.js +71 -0
  239. package/dist/src/fabric/lib/blank-scenario-meta.d.ts +1 -0
  240. package/dist/src/fabric/lib/blank-scenario-meta.js +110 -0
  241. package/dist/src/fabric/lib/deployment.d.ts +26 -0
  242. package/dist/src/fabric/lib/deployment.js +35 -0
  243. package/dist/src/fabric/lib/stage.d.ts +19 -3
  244. package/dist/src/fabric/lib/stage.js +29 -6
  245. package/dist/src/functions/commands/db-reset.js +6 -2
  246. package/dist/src/functions/commands/deploy-apply.d.ts +10 -0
  247. package/dist/src/functions/commands/deploy-apply.js +8 -0
  248. package/dist/src/functions/commands/deploy-plan.js +1 -0
  249. package/dist/src/functions/commands/dev.js +18 -3
  250. package/dist/src/functions/commands/environment.d.ts +10 -0
  251. package/dist/src/functions/commands/environment.js +24 -0
  252. package/dist/src/functions/commands/persona.d.ts +18 -0
  253. package/dist/src/functions/commands/persona.js +41 -2
  254. package/dist/src/functions/commands/scenario-browser.d.ts +13 -5
  255. package/dist/src/functions/commands/serve-frontend.d.ts +11 -0
  256. package/dist/src/functions/commands/serve-frontend.js +17 -0
  257. package/dist/src/functions/commands/serve.js +16 -3
  258. package/dist/src/functions/db/annotation-parser.d.ts +8 -0
  259. package/dist/src/functions/db/annotation-parser.js +2 -0
  260. package/dist/src/functions/db/check-enums.d.ts +38 -0
  261. package/dist/src/functions/db/check-enums.js +103 -0
  262. package/dist/src/functions/db/db-codegen.js +35 -1
  263. package/dist/src/functions/db/postgres/postgres-introspector.d.ts +14 -0
  264. package/dist/src/functions/db/postgres/postgres-introspector.js +48 -0
  265. package/dist/src/functions/db/sqlite/sqlite-introspector.d.ts +3 -4
  266. package/dist/src/functions/db/sqlite/sqlite-introspector.js +5 -17
  267. package/dist/src/functions/wirings/virtual-user/serialize-virtual-user-functions.d.ts +9 -6
  268. package/dist/src/functions/wirings/virtual-user/serialize-virtual-user-functions.js +57 -30
  269. package/dist/src/server/actor-sign-in.d.ts +24 -1
  270. package/dist/src/server/actor-sign-in.js +45 -2
  271. package/dist/src/server/dev-server-runner.interface.d.ts +9 -0
  272. package/dist/src/server/node-server-runner.js +3 -0
  273. package/dist/src/server/server-ready.d.ts +6 -9
  274. package/dist/src/server/server-ready.js +6 -9
  275. package/dist/src/utils/frontend.d.ts +9 -0
  276. package/dist/src/utils/frontend.js +18 -0
  277. package/dist/src/utils/persona-credentials.d.ts +23 -2
  278. package/dist/src/utils/persona-credentials.js +55 -2
  279. package/dist/src/utils/pikku-cli-config.d.ts +14 -5
  280. package/dist/src/utils/pikku-cli-config.js +57 -10
  281. package/dist/tsconfig.tsbuildinfo +1 -1
  282. package/package.json +12 -12
  283. package/snippets.json +2 -2
  284. package/surface.json +101 -51
  285. package/console-app/assets/architecture-TIHT7OUA-D4Hj6824.js +0 -1
  286. package/console-app/assets/channel-09aKDzM0.js +0 -1
  287. package/console-app/assets/chunk-XXDRQBXY-C1KaR4pt.js +0 -1
  288. package/console-app/assets/classDiagram-JCYQIIEL-23nagJMi.js +0 -1
  289. package/console-app/assets/classDiagram-v2-OCEON4UE-23nagJMi.js +0 -1
  290. package/console-app/assets/eventmodeling-45OFAUF4-RyG54ZHy.js +0 -1
  291. package/console-app/assets/flowDiagram-UKHOOZJN-DNdfrnRg.js +0 -1
  292. package/console-app/assets/railroad-abnf-AHOZXSZD-DX4FqVY6.js +0 -1
  293. package/console-app/assets/railroad-ebnf-EBAXGLYW-DdyOtX1l.js +0 -1
  294. package/console-app/assets/railroad-peg-LSFZ7HO6-CclC1sXF.js +0 -1
  295. package/console-app/assets/stateDiagram-v2-UEYNNEHI-I34jrzP0.js +0 -1
  296. package/console-app/assets/swimlanesDiagram-ULZ7WXOC-C1PrPB0G.js +0 -8
@@ -1,4 +1,4 @@
1
- import type { PikkuCLIConfig } from '../../types/config.js';
1
+ import type { PikkuCLIConfig, PikkuCLIInput } from '../../types/config.js';
2
2
  import type { CLILogger } from '../services/cli-logger.service.js';
3
3
  import { PikkuCLIConfigError } from './pikku-cli-config-error.js';
4
4
  export declare const getPikkuCLIConfig: (logger: CLILogger, configFile: string | undefined, requiredFields: Array<keyof PikkuCLIConfig>, exitProcess?: boolean, outDirOverride?: string) => Promise<PikkuCLIConfig>;
@@ -26,14 +26,14 @@ export { PikkuCLIConfigError };
26
26
  */
27
27
  export declare const assertSchemaDirectoriesAreDistinct: (config: Pick<PikkuCLIConfig, "schemaDirectory" | "scenarioSchemaDirectory">) => void;
28
28
  /**
29
- * The `locale` a project gets when its config does not name one.
29
+ * The `metaLocale` a project gets when its config does not name one.
30
30
  *
31
31
  * English, and it stays English for almost every project — the field changes
32
32
  * what the Console reads back to a human, not who the product is for.
33
33
  */
34
- export declare const DEFAULT_LOCALE = "en";
34
+ export declare const DEFAULT_META_LOCALE = "en";
35
35
  /**
36
- * `locale` is handed on to codegen and the Console as a language tag, so a
36
+ * `metaLocale` is handed on to codegen and the Console as a language tag, so a
37
37
  * value they cannot interpret is worse than none: it degrades quietly to "some
38
38
  * language" a long way from the line that is wrong. `Intl.getCanonicalLocales`
39
39
  * is the BCP-47 grammar Node already ships, and it catches the mistake people
@@ -42,5 +42,14 @@ export declare const DEFAULT_LOCALE = "en";
42
42
  * It returns the canonical spelling rather than what was typed, so `EN-gb` and
43
43
  * `en-GB` are one value downstream instead of two that never compare equal.
44
44
  */
45
- export declare const normalizeLocale: (locale: unknown) => string;
45
+ export declare const normalizeMetaLocale: (metaLocale: unknown) => string;
46
+ /**
47
+ * Fill in the mount defaults and make `dir` absolute.
48
+ *
49
+ * The trailing slash is stripped because a mount matches with
50
+ * `pathname === prefix || pathname.startsWith(prefix + '/')`, under which a
51
+ * stored `/app/` matches nothing at all — a frontend that silently never
52
+ * appears rather than an error anyone can act on.
53
+ */
54
+ export declare const resolveFrontendConfig: (frontend: NonNullable<PikkuCLIInput["frontend"]>, configDir: string) => NonNullable<PikkuCLIConfig["frontend"]>;
46
55
  export declare const validateCLIConfig: (cliConfig: PikkuCLIConfig, required: Array<keyof PikkuCLIConfig>) => void;
@@ -81,14 +81,14 @@ export const assertSchemaDirectoriesAreDistinct = (config) => {
81
81
  }
82
82
  };
83
83
  /**
84
- * The `locale` a project gets when its config does not name one.
84
+ * The `metaLocale` a project gets when its config does not name one.
85
85
  *
86
86
  * English, and it stays English for almost every project — the field changes
87
87
  * what the Console reads back to a human, not who the product is for.
88
88
  */
89
- export const DEFAULT_LOCALE = 'en';
89
+ export const DEFAULT_META_LOCALE = 'en';
90
90
  /**
91
- * `locale` is handed on to codegen and the Console as a language tag, so a
91
+ * `metaLocale` is handed on to codegen and the Console as a language tag, so a
92
92
  * value they cannot interpret is worse than none: it degrades quietly to "some
93
93
  * language" a long way from the line that is wrong. `Intl.getCanonicalLocales`
94
94
  * is the BCP-47 grammar Node already ships, and it catches the mistake people
@@ -97,13 +97,13 @@ export const DEFAULT_LOCALE = 'en';
97
97
  * It returns the canonical spelling rather than what was typed, so `EN-gb` and
98
98
  * `en-GB` are one value downstream instead of two that never compare equal.
99
99
  */
100
- export const normalizeLocale = (locale) => {
101
- if (locale === undefined || locale === null) {
102
- return DEFAULT_LOCALE;
100
+ export const normalizeMetaLocale = (metaLocale) => {
101
+ if (metaLocale === undefined || metaLocale === null) {
102
+ return DEFAULT_META_LOCALE;
103
103
  }
104
- if (typeof locale === 'string') {
104
+ if (typeof metaLocale === 'string') {
105
105
  try {
106
- const [canonical] = Intl.getCanonicalLocales(locale.trim());
106
+ const [canonical] = Intl.getCanonicalLocales(metaLocale.trim());
107
107
  if (canonical) {
108
108
  return canonical;
109
109
  }
@@ -113,11 +113,54 @@ export const normalizeLocale = (locale) => {
113
113
  // explanation whether the tag was malformed or the wrong type entirely.
114
114
  }
115
115
  }
116
- throw new PikkuCLIConfigError(`locale in pikku.config.json is not a language tag: ${JSON.stringify(locale)}. ` +
116
+ throw new PikkuCLIConfigError(`metaLocale in pikku.config.json is not a language tag: ${JSON.stringify(metaLocale)}. ` +
117
117
  `Use a BCP-47 code — "en", "de", "pt-BR" — with a hyphen rather than an underscore. ` +
118
118
  `It sets the language of the meta the Console renders back to your team (function and step descriptions, feature and scenario names). ` +
119
119
  `Identifiers stay English regardless, and the language the app speaks to its users is defaultLocale in active.json, not this.`);
120
120
  };
121
+ /**
122
+ * Fill in the mount defaults and make `dir` absolute.
123
+ *
124
+ * The trailing slash is stripped because a mount matches with
125
+ * `pathname === prefix || pathname.startsWith(prefix + '/')`, under which a
126
+ * stored `/app/` matches nothing at all — a frontend that silently never
127
+ * appears rather than an error anyone can act on.
128
+ */
129
+ export const resolveFrontendConfig = (frontend, configDir) => {
130
+ if (!frontend.dir) {
131
+ throw new PikkuCLIConfigError(`frontend.dir is required — it names the directory your frontend's build already wrote, since pikku serves that output rather than building it`);
132
+ }
133
+ const urlPrefix = frontend.urlPrefix ?? '/';
134
+ if (!urlPrefix.startsWith('/')) {
135
+ throw new PikkuCLIConfigError(`frontend.urlPrefix must start with "/" — got "${urlPrefix}"`);
136
+ }
137
+ return {
138
+ dir: isAbsolute(frontend.dir)
139
+ ? frontend.dir
140
+ : join(configDir, frontend.dir),
141
+ urlPrefix: urlPrefix === '/' ? '/' : urlPrefix.replace(/\/+$/, ''),
142
+ spaFallback: frontend.spaFallback ?? true,
143
+ };
144
+ };
145
+ /**
146
+ * The field's former name, kept only to say it moved.
147
+ *
148
+ * `locale` shipped in 0.12.120 and nothing has ever read it, so dropping it
149
+ * silently would cost nobody anything at runtime — but it would cost them the
150
+ * one thing the rename was for. A config that still says `locale` is a config
151
+ * whose author believed it did something; leaving it to be ignored teaches the
152
+ * opposite of the distinction the new name exists to draw.
153
+ */
154
+ const assertMetaLocaleNotSpelledLocale = (result) => {
155
+ if (!('locale' in result)) {
156
+ return;
157
+ }
158
+ throw new PikkuCLIConfigError(`locale in pikku.config.json has been renamed to metaLocale. ` +
159
+ `Rename the field — the value is unchanged. ` +
160
+ `It was renamed because "locale", sitting beside baseLocale, defaultLocale and supportedLocales, reads as the language your app speaks to its users; it is not that. ` +
161
+ `It is the language of the meta the Console renders back to your team — function and step descriptions, feature and scenario names. ` +
162
+ `What a visitor opens the app in is defaultLocale in active.json.`);
163
+ };
121
164
  const _getPikkuCLIConfig = async (logger, configFile = undefined, requiredFields, exitProcess = false, outDirOverride) => {
122
165
  if (!configFile) {
123
166
  configFile = await findConfigFile();
@@ -740,6 +783,9 @@ const _getPikkuCLIConfig = async (logger, configFile = undefined, requiredFields
740
783
  }
741
784
  }
742
785
  }
786
+ if (result.frontend) {
787
+ result.frontend = resolveFrontendConfig(result.frontend, result.configDir);
788
+ }
743
789
  if (result.emailTemplatesDir && !isAbsolute(result.emailTemplatesDir)) {
744
790
  result.emailTemplatesDir = join(result.configDir, result.emailTemplatesDir);
745
791
  }
@@ -752,7 +798,8 @@ const _getPikkuCLIConfig = async (logger, configFile = undefined, requiredFields
752
798
  if (!isAbsolute(result.tsconfig)) {
753
799
  result.tsconfig = join(result.rootDir, result.tsconfig);
754
800
  }
755
- result.locale = normalizeLocale(result.locale);
801
+ assertMetaLocaleNotSpelledLocale(result);
802
+ result.metaLocale = normalizeMetaLocale(result.metaLocale);
756
803
  assertSchemaDirectoriesAreDistinct(result);
757
804
  if (result.addon) {
758
805
  const packageJsonPath = join(result.rootDir, 'package.json');
@@ -1 +1 @@
1
- {"root":["../bin/pikku.ts","../src/cli.wiring.ts","../src/services.ts","../src/deploy/build-pipeline.ts","../src/deploy/server-entry.ts","../src/deploy/analyzer/analyzer.ts","../src/deploy/analyzer/index.ts","../src/deploy/bundler/bun-bundler.ts","../src/deploy/bundler/bundler.interface.ts","../src/deploy/bundler/bundler.ts","../src/deploy/bundler/dep-extractor.ts","../src/deploy/bundler/index.ts","../src/deploy/bundler/node-bundler.ts","../src/deploy/bundler/service-module-map.ts","../src/deploy/bundler/types.ts","../src/deploy/codegen/index.ts","../src/deploy/codegen/per-unit-codegen.ts","../src/deploy/plan/executor.ts","../src/deploy/plan/formatter.ts","../src/deploy/plan/index.ts","../src/deploy/plan/planner.ts","../src/deploy/plan/provider.ts","../src/deploy/plan/types.ts","../src/fabric/fabric-commands.ts","../src/fabric/functions/add.function.ts","../src/fabric/functions/addon-verify.function.ts","../src/fabric/functions/db-schema.function.ts","../src/fabric/functions/deploy-list.function.ts","../src/fabric/functions/deploy-units.function.ts","../src/fabric/functions/deploy.function.ts","../src/fabric/functions/domains-add.function.ts","../src/fabric/functions/domains-list.function.ts","../src/fabric/functions/domains-remove.function.ts","../src/fabric/functions/errors.function.ts","../src/fabric/functions/init.function.ts","../src/fabric/functions/link.function.ts","../src/fabric/functions/llm-key.function.ts","../src/fabric/functions/login.function.ts","../src/fabric/functions/logs.function.ts","../src/fabric/functions/metrics.function.ts","../src/fabric/functions/publish.function.ts","../src/fabric/functions/rollback.function.ts","../src/fabric/functions/secrets-list.function.ts","../src/fabric/functions/secrets-rotate.function.ts","../src/fabric/functions/secrets-set.function.ts","../src/fabric/functions/smoke.function.ts","../src/fabric/functions/status.function.ts","../src/fabric/functions/trace.function.ts","../src/fabric/functions/validate.function.ts","../src/fabric/functions/variables-get.function.ts","../src/fabric/functions/variables-set.function.ts","../src/fabric/lib/config.ts","../src/fabric/lib/console-url.ts","../src/fabric/lib/deployment.ts","../src/fabric/lib/frontend-typecheck.ts","../src/fabric/lib/git.ts","../src/fabric/lib/http.ts","../src/fabric/lib/not-implemented.ts","../src/fabric/lib/output.ts","../src/fabric/lib/prompt.ts","../src/fabric/lib/sealed-box.ts","../src/fabric/lib/stage.ts","../src/fabric/lib/variable-value.ts","../src/fabric/sdk/http-map.gen.d.ts","../src/fabric/sdk/pikku-fetch.gen.ts","../src/fabric/sdk/pikku-rpc.gen.ts","../src/fabric/sdk/rpc-map.gen.d.ts","../src/functions/commands/all.ts","../src/functions/commands/audit.ts","../src/functions/commands/binary.ts","../src/functions/commands/bootstrap.ts","../src/functions/commands/bun-coverage-loader.ts","../src/functions/commands/db-audit.ts","../src/functions/commands/db-baseline.ts","../src/functions/commands/db-check.ts","../src/functions/commands/db-codegen.ts","../src/functions/commands/db-export.ts","../src/functions/commands/db-generate.ts","../src/functions/commands/db-migrate.ts","../src/functions/commands/db-reset.ts","../src/functions/commands/db-shared.ts","../src/functions/commands/deploy-apply.ts","../src/functions/commands/deploy-info.ts","../src/functions/commands/deploy-plan.ts","../src/functions/commands/dev-agent-runner.ts","../src/functions/commands/dev.ts","../src/functions/commands/doc.ts","../src/functions/commands/emails-init.ts","../src/functions/commands/enable.ts","../src/functions/commands/environment.ts","../src/functions/commands/import-n8n.ts","../src/functions/commands/info.ts","../src/functions/commands/knowledge-index.ts","../src/functions/commands/knowledge-validate.ts","../src/functions/commands/load-user-project.ts","../src/functions/commands/login.ts","../src/functions/commands/meta.ts","../src/functions/commands/new-addon.ts","../src/functions/commands/new-function.ts","../src/functions/commands/new-middleware.ts","../src/functions/commands/new-permission.ts","../src/functions/commands/new-wiring.ts","../src/functions/commands/persona-sync.ts","../src/functions/commands/persona.ts","../src/functions/commands/pikku-command-bootstrap.ts","../src/functions/commands/pikku-command-summary.ts","../src/functions/commands/roles-audit.ts","../src/functions/commands/roles-prune.ts","../src/functions/commands/roles-shared.ts","../src/functions/commands/scenario-browser.ts","../src/functions/commands/scenario-formatter.ts","../src/functions/commands/scenario-ladder.ts","../src/functions/commands/scenario-plan.ts","../src/functions/commands/scenario.ts","../src/functions/commands/scopes-audit.ts","../src/functions/commands/scopes-prune.ts","../src/functions/commands/scopes-shared.ts","../src/functions/commands/semver-render.ts","../src/functions/commands/semver.ts","../src/functions/commands/serve-console.ts","../src/functions/commands/serve.ts","../src/functions/commands/skills.ts","../src/functions/commands/start-coverage.ts","../src/functions/commands/update-render.ts","../src/functions/commands/update.ts","../src/functions/commands/validate.ts","../src/functions/commands/versions-check.ts","../src/functions/commands/versions-init.ts","../src/functions/commands/versions-update.ts","../src/functions/commands/virtual-user-formatter.ts","../src/functions/commands/watch.ts","../src/functions/db/annotation-parser.ts","../src/functions/db/better-auth-schema.ts","../src/functions/db/db-codegen.ts","../src/functions/db/db-introspector.ts","../src/functions/db/db-migrator.ts","../src/functions/db/local-db.ts","../src/functions/db/migration-identifiers.ts","../src/functions/db/migration-provenance.ts","../src/functions/db/schema-sql.ts","../src/functions/db/zod-codegen.ts","../src/functions/db/postgres/pglite-kysely.ts","../src/functions/db/postgres/postgres-introspector.ts","../src/functions/db/postgres/postgres-migrator.ts","../src/functions/db/sqlite/dev-seed.ts","../src/functions/db/sqlite/sqlite-introspector.ts","../src/functions/db/sqlite/sqlite-kysely.ts","../src/functions/db/sqlite/sqlite-migrator.ts","../src/functions/db/sqlite/sqlite-runtime-bun.ts","../src/functions/db/sqlite/sqlite-runtime-node.ts","../src/functions/db/sqlite/sqlite-runtime.ts","../src/functions/knowledge/render.ts","../src/functions/knowledge/schemas.ts","../src/functions/runtimes/fetch/index.ts","../src/functions/runtimes/nextjs/pikku-command-nextjs.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-worker-rpc-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts","../src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.ts","../src/functions/runtimes/tanstack-start/serialize-tanstack-start-shim.ts","../src/functions/runtimes/websocket/pikku-command-websocket-typed.ts","../src/functions/runtimes/websocket/serialize-websocket-wrapper.ts","../src/functions/surface/build-surface-doc.ts","../src/functions/surface/collect-snippets.ts","../src/functions/surface/collect-surface-usage.ts","../src/functions/surface/collect-surface.ts","../src/functions/surface/generate-surface-doc.ts","../src/functions/surface/render-surface-doc.ts","../src/functions/surface/shipped-surface-doc.ts","../src/functions/surface/surface-doc.types.ts","../src/functions/surface/surface-editorial.ts","../src/functions/surface/write-surface-usage.ts","../src/functions/validate/addon-package-checks.ts","../src/functions/validate/auth-plugin-checks.ts","../src/functions/validate/bootstrap-checks.ts","../src/functions/validate/persona-checks.ts","../src/functions/validate/pikku-barrel-checks.ts","../src/functions/validate/scenario-file-checks.ts","../src/functions/validate/shared-checks.ts","../src/functions/validate/type-identity-checks.ts","../src/functions/validate/validate-registry.ts","../src/functions/validate/validate.ts","../src/functions/validate/websocket-deps-checks.ts","../src/functions/validate/workspace-exports-checks.ts","../src/functions/wirings/agent/pikku-command-agent-types.ts","../src/functions/wirings/agent/pikku-command-agent.ts","../src/functions/wirings/agent/pikku-command-public-agent.ts","../src/functions/wirings/agent/serialize-agent-map.ts","../src/functions/wirings/agent/serialize-agent-types.ts","../src/functions/wirings/agent/serialize-model-aliases.ts","../src/functions/wirings/agent/serialize-public-agent.ts","../src/functions/wirings/agent-scorer/pikku-command-agent-scorer.ts","../src/functions/wirings/agent-scorer/serialize-scorer-names.ts","../src/functions/wirings/auth/pikku-command-auth.ts","../src/functions/wirings/auth/serialize-auth-gen.ts","../src/functions/wirings/auth/serialize-auth-guards.ts","../src/functions/wirings/auth/serialize-auth-meta.ts","../src/functions/wirings/auth/serialize-auth-types.ts","../src/functions/wirings/channels/pikku-channels.ts","../src/functions/wirings/channels/pikku-command-channel-types.ts","../src/functions/wirings/channels/pikku-command-channels-map.ts","../src/functions/wirings/channels/pikku-command-channels.ts","../src/functions/wirings/channels/serialize-channel-types.ts","../src/functions/wirings/channels/serialize-typed-channel-map.ts","../src/functions/wirings/cli/pikku-command-cli-entry.ts","../src/functions/wirings/cli/pikku-command-cli-types.ts","../src/functions/wirings/cli/pikku-command-cli.ts","../src/functions/wirings/cli/serialize-channel-cli-client.ts","../src/functions/wirings/cli/serialize-channel-cli.ts","../src/functions/wirings/cli/serialize-cli-entrypoint-guard.ts","../src/functions/wirings/cli/serialize-cli-types.ts","../src/functions/wirings/cli/serialize-local-cli-bootstrap.ts","../src/functions/wirings/console/pikku-command-console-functions.ts","../src/functions/wirings/console/pikku-command-nodes-meta.ts","../src/functions/wirings/console/serialize-console-functions.ts","../src/functions/wirings/credentials/pikku-command-credentials.ts","../src/functions/wirings/credentials/serialize-credentials-types.ts","../src/functions/wirings/emails/pikku-command-emails.ts","../src/functions/wirings/emails/serialize-emails.ts","../src/functions/wirings/errors/pikku-command-error-types.ts","../src/functions/wirings/errors/serialize-error-types.ts","../src/functions/wirings/functions/pikku-command-addon-types.ts","../src/functions/wirings/functions/pikku-command-function-types-split.ts","../src/functions/wirings/functions/pikku-command-functions.ts","../src/functions/wirings/functions/pikku-command-leaf-indexes.ts","../src/functions/wirings/functions/pikku-command-services.ts","../src/functions/wirings/functions/schemas.ts","../src/functions/wirings/functions/serialize-addon-refs.ts","../src/functions/wirings/functions/serialize-addon-types.ts","../src/functions/wirings/functions/serialize-function-imports.ts","../src/functions/wirings/functions/serialize-function-types.ts","../src/functions/wirings/functions/serialize-leaf-index.ts","../src/functions/wirings/gateway/pikku-command-gateway-types.ts","../src/functions/wirings/gateway/pikku-command-gateway.ts","../src/functions/wirings/gateway/serialize-gateway-meta.ts","../src/functions/wirings/gateway/serialize-gateway-types.ts","../src/functions/wirings/graph/pikku-command-graph-wirings.ts","../src/functions/wirings/graph/serialize-graph-wirings.ts","../src/functions/wirings/http/pikku-command-http-map.ts","../src/functions/wirings/http/pikku-command-http-routes.ts","../src/functions/wirings/http/pikku-command-http-types.ts","../src/functions/wirings/http/pikku-command-openapi.ts","../src/functions/wirings/http/pikku-http-routes.ts","../src/functions/wirings/http/serialize-fetch-wrapper.ts","../src/functions/wirings/http/serialize-http-types.ts","../src/functions/wirings/http/serialize-typed-http-map.ts","../src/functions/wirings/mcp/pikku-command-mcp-json.ts","../src/functions/wirings/mcp/pikku-command-mcp-types.ts","../src/functions/wirings/mcp/pikku-command-mcp.ts","../src/functions/wirings/mcp/serialize-mcp-types.ts","../src/functions/wirings/middleware/pikku-command-middleware.ts","../src/functions/wirings/middleware/serialize-middleware-imports.ts","../src/functions/wirings/middleware/serialize-middleware-types.ts","../src/functions/wirings/package/pikku-command-package-types.ts","../src/functions/wirings/package/pikku-command-package.ts","../src/functions/wirings/package/serialize-package-types.ts","../src/functions/wirings/package/serialize-package.ts","../src/functions/wirings/permissions/pikku-command-permissions.ts","../src/functions/wirings/permissions/serialize-permissions-imports.ts","../src/functions/wirings/personas/personas-secrets-file.ts","../src/functions/wirings/personas/pikku-command-personas.ts","../src/functions/wirings/personas/serialize-personas-secrets.ts","../src/functions/wirings/personas/serialize-personas-types.ts","../src/functions/wirings/queue/pikku-command-queue-map.ts","../src/functions/wirings/queue/pikku-command-queue-service.ts","../src/functions/wirings/queue/pikku-command-queue-types.ts","../src/functions/wirings/queue/pikku-command-queue.ts","../src/functions/wirings/queue/pikku-queue-map.ts","../src/functions/wirings/queue/pikku-queue.ts","../src/functions/wirings/queue/serialize-queue-map.ts","../src/functions/wirings/queue/serialize-queue-meta.ts","../src/functions/wirings/queue/serialize-queue-types.ts","../src/functions/wirings/queue/serialize-queue-wrapper.ts","../src/functions/wirings/realtime/pikku-command-events-scaffold.ts","../src/functions/wirings/realtime/pikku-command-realtime.ts","../src/functions/wirings/realtime/serialize-events-scaffold.ts","../src/functions/wirings/realtime/serialize-realtime-client.ts","../src/functions/wirings/roles/pikku-command-roles.ts","../src/functions/wirings/roles/serialize-roles-types.ts","../src/functions/wirings/rpc/pikku-command-public-rpc.ts","../src/functions/wirings/rpc/pikku-command-react-query.ts","../src/functions/wirings/rpc/pikku-command-remote-rpc.ts","../src/functions/wirings/rpc/pikku-command-rpc-client.ts","../src/functions/wirings/rpc/pikku-command-rpc-map.ts","../src/functions/wirings/rpc/pikku-command-rpc.ts","../src/functions/wirings/rpc/serialize-public-rpc.ts","../src/functions/wirings/rpc/serialize-react-query-hooks.ts","../src/functions/wirings/rpc/serialize-remote-rpc.ts","../src/functions/wirings/rpc/serialize-rpc-wrapper.ts","../src/functions/wirings/rpc/serialize-typed-rpc-map.ts","../src/functions/wirings/scenarios/register-scenario-instrumentation.ts","../src/functions/wirings/scenarios/scenario-partition.ts","../src/functions/wirings/scenarios/scenario-schema-partition.ts","../src/functions/wirings/scenarios/serialize-feature-meta.ts","../src/functions/wirings/scenarios/serialize-scenario-meta.ts","../src/functions/wirings/scenarios/serialize-scenario-registration.ts","../src/functions/wirings/scheduler/pikku-command-scheduler-types.ts","../src/functions/wirings/scheduler/pikku-command-scheduler.ts","../src/functions/wirings/scheduler/serialize-scheduler-meta.ts","../src/functions/wirings/scheduler/serialize-scheduler-types.ts","../src/functions/wirings/scopes/pikku-command-scopes.ts","../src/functions/wirings/scopes/serialize-scopes-client.ts","../src/functions/wirings/scopes/serialize-scopes-types.ts","../src/functions/wirings/secrets/pikku-command-secrets.ts","../src/functions/wirings/secrets/serialize-secrets-types.ts","../src/functions/wirings/setup/serialize-setup-types.ts","../src/functions/wirings/triggers/pikku-command-trigger-types.ts","../src/functions/wirings/triggers/pikku-command-trigger.ts","../src/functions/wirings/triggers/serialize-trigger-meta.ts","../src/functions/wirings/triggers/serialize-trigger-types.ts","../src/functions/wirings/user-admin/pikku-command-user-admin-functions.ts","../src/functions/wirings/user-admin/serialize-user-admin-functions.ts","../src/functions/wirings/variables/pikku-command-variables.ts","../src/functions/wirings/variables/serialize-variables-types.ts","../src/functions/wirings/virtual-user/pikku-command-virtual-user-functions.ts","../src/functions/wirings/virtual-user/serialize-virtual-user-functions.ts","../src/functions/wirings/webhook/pikku-command-webhook.ts","../src/functions/wirings/webhook/serialize-webhook.ts","../src/functions/wirings/workflow/pikku-command-workflow-routes.ts","../src/functions/wirings/workflow/pikku-command-workflow.ts","../src/functions/wirings/workflow/serialize-personas.ts","../src/functions/wirings/workflow/serialize-scenario-step-map.ts","../src/functions/wirings/workflow/serialize-scenario-types.ts","../src/functions/wirings/workflow/serialize-workflow-bootstrap-map.ts","../src/functions/wirings/workflow/serialize-workflow-map.ts","../src/functions/wirings/workflow/serialize-workflow-meta.ts","../src/functions/wirings/workflow/serialize-workflow-registration.ts","../src/functions/wirings/workflow/serialize-workflow-routes.ts","../src/functions/wirings/workflow/serialize-workflow-types.ts","../src/functions/workflows/all.workflow.ts","../src/middleware/log-command-info-and-time.ts","../src/server/actor-sign-in.ts","../src/server/bun-server-runner.ts","../src/server/content-signing-jwt.ts","../src/server/dev-server-runner.interface.ts","../src/server/node-server-runner.ts","../src/server/server-ready.ts","../src/server/spawn-dev-server.ts","../src/services/cli-logger-forwarder.service.ts","../src/services/cli-logger.service.ts","../src/utils/assert-single-core-version.ts","../src/utils/check-required-types.ts","../src/utils/cli-session.ts","../src/utils/command-summary.ts","../src/utils/contract-versions.ts","../src/utils/detect-better-auth.ts","../src/utils/device-auth.ts","../src/utils/file-import-path.ts","../src/utils/file-imports-serializer.ts","../src/utils/file-writer.ts","../src/utils/generate-bootstrap-file.ts","../src/utils/get-cli-version.ts","../src/utils/is-deploy-codegen.ts","../src/utils/leaf-import-path.ts","../src/utils/meta-diff.ts","../src/utils/model-alias-override.ts","../src/utils/parse-cli-filters.ts","../src/utils/persona-credentials.ts","../src/utils/pikku-cli-config-error.ts","../src/utils/pikku-cli-config.ts","../src/utils/pikku-files-and-methods.ts","../src/utils/precise-coverage-map.ts","../src/utils/remove-legacy-scaffold-file.ts","../src/utils/resolve-from-project.ts","../src/utils/resolve-personas.ts","../src/utils/resolve-scaffold-feature.ts","../src/utils/schema-diff.ts","../src/utils/serialize-import-map.ts","../src/utils/serialize-meta-ts.ts","../src/utils/serialize-schemas.ts","../src/utils/strip-verbose-meta.ts","../src/utils/surface-diff.ts","../src/utils/surface.ts","../src/utils/tsc-check.ts","../.pikku/pikku-bootstrap-scenarios.gen.ts","../.pikku/pikku-bootstrap.gen.ts","../.pikku/pikku-services.gen.ts","../.pikku/addon/index.ts","../.pikku/addon/pikku-addon-types.gen.ts","../.pikku/agent/index.ts","../.pikku/agent/pikku-agent-map.gen.d.ts","../.pikku/agent/pikku-agent-types.gen.ts","../.pikku/agent/pikku-model-aliases.gen.ts","../.pikku/agent/pikku-scorer-names.gen.d.ts","../.pikku/auth/auth.types.ts","../.pikku/auth/index.ts","../.pikku/auth/pikku-auth-types.gen.ts","../.pikku/channel/index.ts","../.pikku/channel/pikku-channel-types.gen.ts","../.pikku/cli/index.ts","../.pikku/cli/pikku-cli-channel.ts","../.pikku/cli/pikku-cli-client.gen.ts","../.pikku/cli/pikku-cli-contracts-meta.gen.ts","../.pikku/cli/pikku-cli-types.gen.ts","../.pikku/cli/pikku-cli-wirings-meta.gen.ts","../.pikku/cli/pikku-cli-wirings.gen.ts","../.pikku/cli/pikku-cli.gen.ts","../.pikku/error/index.ts","../.pikku/error/pikku-error-types.gen.ts","../.pikku/function/index.ts","../.pikku/function/pikku-function-types.gen.ts","../.pikku/function/pikku-functions-meta.gen.ts","../.pikku/function/pikku-functions.gen.ts","../.pikku/gateway/index.ts","../.pikku/gateway/pikku-gateway-types.gen.ts","../.pikku/http/index.ts","../.pikku/http/pikku-http-types.gen.ts","../.pikku/mcp/index.ts","../.pikku/mcp/pikku-mcp-types.gen.ts","../.pikku/middleware/index.ts","../.pikku/middleware/pikku-middleware-types.gen.ts","../.pikku/node/pikku-node-types.gen.ts","../.pikku/queue/index.ts","../.pikku/queue/pikku-queue-types.gen.ts","../.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts","../.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts","../.pikku/queue/pikku-queue-workers-wirings.gen.ts","../.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-map.remote.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts","../.pikku/scenarios/index.ts","../.pikku/scenarios/pikku-personas.gen.ts","../.pikku/scenarios/pikku-scenario-functions-meta.gen.ts","../.pikku/scenarios/pikku-scenario-functions.gen.ts","../.pikku/scenarios/pikku-scenario-types.gen.ts","../.pikku/scenarios/pikku-scenario-wirings-meta.gen.ts","../.pikku/scenarios/pikku-scenario-wirings.gen.ts","../.pikku/scenarios/schemas/register.gen.ts","../.pikku/scheduler/index.ts","../.pikku/scheduler/pikku-scheduler-types.gen.ts","../.pikku/schemas/register.gen.ts","../.pikku/scopes/index.ts","../.pikku/scopes/pikku-personas.gen.ts","../.pikku/scopes/pikku-roles.gen.ts","../.pikku/scopes/pikku-scope-types.gen.ts","../.pikku/scopes/pikku-scopes.gen.ts","../.pikku/secrets/index.ts","../.pikku/secrets/pikku-secret-types.gen.ts","../.pikku/secrets/pikku-secrets.gen.ts","../.pikku/services/pikku-meta-service.gen.ts","../.pikku/setup/index.ts","../.pikku/setup/pikku-setup-types.gen.ts","../.pikku/trigger/index.ts","../.pikku/trigger/pikku-trigger-types.gen.ts","../.pikku/variables/index.ts","../.pikku/variables/pikku-variable-types.gen.ts","../.pikku/variables/pikku-variables.gen.ts","../.pikku/workflow/index.ts","../.pikku/workflow/pikku-scenario-step-map.gen.d.ts","../.pikku/workflow/pikku-workflow-map.gen.d.ts","../.pikku/workflow/pikku-workflow-types.gen.ts","../.pikku/workflow/pikku-workflow-wirings-meta.gen.ts","../.pikku/workflow/pikku-workflow-wirings.gen.ts","../types/application-types.d.ts","../types/bun-sqlite.d.ts","../types/config.d.ts"],"version":"6.0.3"}
1
+ {"root":["../bin/pikku.ts","../src/cli.wiring.ts","../src/services.ts","../src/deploy/build-pipeline.ts","../src/deploy/frontend-assets.ts","../src/deploy/server-entry.ts","../src/deploy/analyzer/analyzer.ts","../src/deploy/analyzer/index.ts","../src/deploy/bundler/bun-bundler.ts","../src/deploy/bundler/bundler.interface.ts","../src/deploy/bundler/bundler.ts","../src/deploy/bundler/dep-extractor.ts","../src/deploy/bundler/index.ts","../src/deploy/bundler/node-bundler.ts","../src/deploy/bundler/service-module-map.ts","../src/deploy/bundler/types.ts","../src/deploy/codegen/index.ts","../src/deploy/codegen/per-unit-codegen.ts","../src/deploy/plan/executor.ts","../src/deploy/plan/formatter.ts","../src/deploy/plan/index.ts","../src/deploy/plan/planner.ts","../src/deploy/plan/provider.ts","../src/deploy/plan/types.ts","../src/fabric/fabric-commands.ts","../src/fabric/functions/add.function.ts","../src/fabric/functions/addon-verify.function.ts","../src/fabric/functions/db-schema.function.ts","../src/fabric/functions/deploy-list.function.ts","../src/fabric/functions/deploy-units.function.ts","../src/fabric/functions/deploy.function.ts","../src/fabric/functions/domains-add.function.ts","../src/fabric/functions/domains-list.function.ts","../src/fabric/functions/domains-remove.function.ts","../src/fabric/functions/errors.function.ts","../src/fabric/functions/init.function.ts","../src/fabric/functions/link.function.ts","../src/fabric/functions/llm-key.function.ts","../src/fabric/functions/login.function.ts","../src/fabric/functions/logs.function.ts","../src/fabric/functions/metrics.function.ts","../src/fabric/functions/projects-list.function.ts","../src/fabric/functions/publish.function.ts","../src/fabric/functions/rollback.function.ts","../src/fabric/functions/secrets-list.function.ts","../src/fabric/functions/secrets-rotate.function.ts","../src/fabric/functions/secrets-set.function.ts","../src/fabric/functions/smoke.function.ts","../src/fabric/functions/status.function.ts","../src/fabric/functions/trace.function.ts","../src/fabric/functions/validate.function.ts","../src/fabric/functions/variables-get.function.ts","../src/fabric/functions/variables-set.function.ts","../src/fabric/lib/blank-comments.ts","../src/fabric/lib/blank-scenario-meta.ts","../src/fabric/lib/config.ts","../src/fabric/lib/console-url.ts","../src/fabric/lib/deployment.ts","../src/fabric/lib/frontend-typecheck.ts","../src/fabric/lib/git.ts","../src/fabric/lib/http.ts","../src/fabric/lib/not-implemented.ts","../src/fabric/lib/output.ts","../src/fabric/lib/prompt.ts","../src/fabric/lib/sealed-box.ts","../src/fabric/lib/stage.ts","../src/fabric/lib/variable-value.ts","../src/fabric/sdk/http-map.gen.d.ts","../src/fabric/sdk/pikku-fetch.gen.ts","../src/fabric/sdk/pikku-rpc.gen.ts","../src/fabric/sdk/rpc-map.gen.d.ts","../src/functions/commands/all.ts","../src/functions/commands/audit.ts","../src/functions/commands/binary.ts","../src/functions/commands/bootstrap.ts","../src/functions/commands/bun-coverage-loader.ts","../src/functions/commands/db-audit.ts","../src/functions/commands/db-baseline.ts","../src/functions/commands/db-check.ts","../src/functions/commands/db-codegen.ts","../src/functions/commands/db-export.ts","../src/functions/commands/db-generate.ts","../src/functions/commands/db-migrate.ts","../src/functions/commands/db-reset.ts","../src/functions/commands/db-shared.ts","../src/functions/commands/deploy-apply.ts","../src/functions/commands/deploy-info.ts","../src/functions/commands/deploy-plan.ts","../src/functions/commands/dev-agent-runner.ts","../src/functions/commands/dev.ts","../src/functions/commands/doc.ts","../src/functions/commands/emails-init.ts","../src/functions/commands/enable.ts","../src/functions/commands/environment.ts","../src/functions/commands/import-n8n.ts","../src/functions/commands/info.ts","../src/functions/commands/knowledge-index.ts","../src/functions/commands/knowledge-validate.ts","../src/functions/commands/load-user-project.ts","../src/functions/commands/login.ts","../src/functions/commands/meta.ts","../src/functions/commands/new-addon.ts","../src/functions/commands/new-function.ts","../src/functions/commands/new-middleware.ts","../src/functions/commands/new-permission.ts","../src/functions/commands/new-wiring.ts","../src/functions/commands/persona-sync.ts","../src/functions/commands/persona.ts","../src/functions/commands/pikku-command-bootstrap.ts","../src/functions/commands/pikku-command-summary.ts","../src/functions/commands/roles-audit.ts","../src/functions/commands/roles-prune.ts","../src/functions/commands/roles-shared.ts","../src/functions/commands/scenario-browser.ts","../src/functions/commands/scenario-formatter.ts","../src/functions/commands/scenario-ladder.ts","../src/functions/commands/scenario-plan.ts","../src/functions/commands/scenario.ts","../src/functions/commands/scopes-audit.ts","../src/functions/commands/scopes-prune.ts","../src/functions/commands/scopes-shared.ts","../src/functions/commands/semver-render.ts","../src/functions/commands/semver.ts","../src/functions/commands/serve-console.ts","../src/functions/commands/serve-frontend.ts","../src/functions/commands/serve.ts","../src/functions/commands/skills.ts","../src/functions/commands/start-coverage.ts","../src/functions/commands/update-render.ts","../src/functions/commands/update.ts","../src/functions/commands/validate.ts","../src/functions/commands/versions-check.ts","../src/functions/commands/versions-init.ts","../src/functions/commands/versions-update.ts","../src/functions/commands/virtual-user-formatter.ts","../src/functions/commands/watch.ts","../src/functions/db/annotation-parser.ts","../src/functions/db/better-auth-schema.ts","../src/functions/db/check-enums.ts","../src/functions/db/db-codegen.ts","../src/functions/db/db-introspector.ts","../src/functions/db/db-migrator.ts","../src/functions/db/local-db.ts","../src/functions/db/migration-identifiers.ts","../src/functions/db/migration-provenance.ts","../src/functions/db/schema-sql.ts","../src/functions/db/zod-codegen.ts","../src/functions/db/postgres/pglite-kysely.ts","../src/functions/db/postgres/postgres-introspector.ts","../src/functions/db/postgres/postgres-migrator.ts","../src/functions/db/sqlite/dev-seed.ts","../src/functions/db/sqlite/sqlite-introspector.ts","../src/functions/db/sqlite/sqlite-kysely.ts","../src/functions/db/sqlite/sqlite-migrator.ts","../src/functions/db/sqlite/sqlite-runtime-bun.ts","../src/functions/db/sqlite/sqlite-runtime-node.ts","../src/functions/db/sqlite/sqlite-runtime.ts","../src/functions/knowledge/render.ts","../src/functions/knowledge/schemas.ts","../src/functions/runtimes/fetch/index.ts","../src/functions/runtimes/nextjs/pikku-command-nextjs.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-worker-rpc-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts","../src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.ts","../src/functions/runtimes/tanstack-start/serialize-tanstack-start-shim.ts","../src/functions/runtimes/websocket/pikku-command-websocket-typed.ts","../src/functions/runtimes/websocket/serialize-websocket-wrapper.ts","../src/functions/surface/build-surface-doc.ts","../src/functions/surface/collect-snippets.ts","../src/functions/surface/collect-surface-usage.ts","../src/functions/surface/collect-surface.ts","../src/functions/surface/generate-surface-doc.ts","../src/functions/surface/render-surface-doc.ts","../src/functions/surface/shipped-surface-doc.ts","../src/functions/surface/surface-doc.types.ts","../src/functions/surface/surface-editorial.ts","../src/functions/surface/write-surface-usage.ts","../src/functions/validate/addon-package-checks.ts","../src/functions/validate/auth-plugin-checks.ts","../src/functions/validate/bootstrap-checks.ts","../src/functions/validate/persona-checks.ts","../src/functions/validate/pikku-barrel-checks.ts","../src/functions/validate/scenario-file-checks.ts","../src/functions/validate/shared-checks.ts","../src/functions/validate/type-identity-checks.ts","../src/functions/validate/validate-registry.ts","../src/functions/validate/validate.ts","../src/functions/validate/websocket-deps-checks.ts","../src/functions/validate/workspace-exports-checks.ts","../src/functions/wirings/agent/pikku-command-agent-types.ts","../src/functions/wirings/agent/pikku-command-agent.ts","../src/functions/wirings/agent/pikku-command-public-agent.ts","../src/functions/wirings/agent/serialize-agent-map.ts","../src/functions/wirings/agent/serialize-agent-types.ts","../src/functions/wirings/agent/serialize-model-aliases.ts","../src/functions/wirings/agent/serialize-public-agent.ts","../src/functions/wirings/agent-scorer/pikku-command-agent-scorer.ts","../src/functions/wirings/agent-scorer/serialize-scorer-names.ts","../src/functions/wirings/auth/pikku-command-auth.ts","../src/functions/wirings/auth/serialize-auth-gen.ts","../src/functions/wirings/auth/serialize-auth-guards.ts","../src/functions/wirings/auth/serialize-auth-meta.ts","../src/functions/wirings/auth/serialize-auth-types.ts","../src/functions/wirings/channels/pikku-channels.ts","../src/functions/wirings/channels/pikku-command-channel-types.ts","../src/functions/wirings/channels/pikku-command-channels-map.ts","../src/functions/wirings/channels/pikku-command-channels.ts","../src/functions/wirings/channels/serialize-channel-types.ts","../src/functions/wirings/channels/serialize-typed-channel-map.ts","../src/functions/wirings/cli/pikku-command-cli-entry.ts","../src/functions/wirings/cli/pikku-command-cli-types.ts","../src/functions/wirings/cli/pikku-command-cli.ts","../src/functions/wirings/cli/serialize-channel-cli-client.ts","../src/functions/wirings/cli/serialize-channel-cli.ts","../src/functions/wirings/cli/serialize-cli-entrypoint-guard.ts","../src/functions/wirings/cli/serialize-cli-types.ts","../src/functions/wirings/cli/serialize-local-cli-bootstrap.ts","../src/functions/wirings/console/pikku-command-console-functions.ts","../src/functions/wirings/console/pikku-command-nodes-meta.ts","../src/functions/wirings/console/serialize-console-functions.ts","../src/functions/wirings/credentials/pikku-command-credentials.ts","../src/functions/wirings/credentials/serialize-credentials-types.ts","../src/functions/wirings/emails/pikku-command-emails.ts","../src/functions/wirings/emails/serialize-emails.ts","../src/functions/wirings/errors/pikku-command-error-types.ts","../src/functions/wirings/errors/serialize-error-types.ts","../src/functions/wirings/functions/pikku-command-addon-types.ts","../src/functions/wirings/functions/pikku-command-function-types-split.ts","../src/functions/wirings/functions/pikku-command-functions.ts","../src/functions/wirings/functions/pikku-command-leaf-indexes.ts","../src/functions/wirings/functions/pikku-command-services.ts","../src/functions/wirings/functions/schemas.ts","../src/functions/wirings/functions/serialize-addon-refs.ts","../src/functions/wirings/functions/serialize-addon-types.ts","../src/functions/wirings/functions/serialize-function-imports.ts","../src/functions/wirings/functions/serialize-function-types.ts","../src/functions/wirings/functions/serialize-leaf-index.ts","../src/functions/wirings/gateway/pikku-command-gateway-types.ts","../src/functions/wirings/gateway/pikku-command-gateway.ts","../src/functions/wirings/gateway/serialize-gateway-meta.ts","../src/functions/wirings/gateway/serialize-gateway-types.ts","../src/functions/wirings/graph/pikku-command-graph-wirings.ts","../src/functions/wirings/graph/serialize-graph-wirings.ts","../src/functions/wirings/http/pikku-command-http-map.ts","../src/functions/wirings/http/pikku-command-http-routes.ts","../src/functions/wirings/http/pikku-command-http-types.ts","../src/functions/wirings/http/pikku-command-openapi.ts","../src/functions/wirings/http/pikku-http-routes.ts","../src/functions/wirings/http/serialize-fetch-wrapper.ts","../src/functions/wirings/http/serialize-http-types.ts","../src/functions/wirings/http/serialize-typed-http-map.ts","../src/functions/wirings/mcp/pikku-command-mcp-json.ts","../src/functions/wirings/mcp/pikku-command-mcp-types.ts","../src/functions/wirings/mcp/pikku-command-mcp.ts","../src/functions/wirings/mcp/serialize-mcp-types.ts","../src/functions/wirings/middleware/pikku-command-middleware.ts","../src/functions/wirings/middleware/serialize-middleware-imports.ts","../src/functions/wirings/middleware/serialize-middleware-types.ts","../src/functions/wirings/package/pikku-command-package-types.ts","../src/functions/wirings/package/pikku-command-package.ts","../src/functions/wirings/package/serialize-package-types.ts","../src/functions/wirings/package/serialize-package.ts","../src/functions/wirings/permissions/pikku-command-permissions.ts","../src/functions/wirings/permissions/serialize-permissions-imports.ts","../src/functions/wirings/personas/personas-secrets-file.ts","../src/functions/wirings/personas/pikku-command-personas.ts","../src/functions/wirings/personas/serialize-personas-secrets.ts","../src/functions/wirings/personas/serialize-personas-types.ts","../src/functions/wirings/queue/pikku-command-queue-map.ts","../src/functions/wirings/queue/pikku-command-queue-service.ts","../src/functions/wirings/queue/pikku-command-queue-types.ts","../src/functions/wirings/queue/pikku-command-queue.ts","../src/functions/wirings/queue/pikku-queue-map.ts","../src/functions/wirings/queue/pikku-queue.ts","../src/functions/wirings/queue/serialize-queue-map.ts","../src/functions/wirings/queue/serialize-queue-meta.ts","../src/functions/wirings/queue/serialize-queue-types.ts","../src/functions/wirings/queue/serialize-queue-wrapper.ts","../src/functions/wirings/realtime/pikku-command-events-scaffold.ts","../src/functions/wirings/realtime/pikku-command-realtime.ts","../src/functions/wirings/realtime/serialize-events-scaffold.ts","../src/functions/wirings/realtime/serialize-realtime-client.ts","../src/functions/wirings/roles/pikku-command-roles.ts","../src/functions/wirings/roles/serialize-roles-types.ts","../src/functions/wirings/rpc/pikku-command-public-rpc.ts","../src/functions/wirings/rpc/pikku-command-react-query.ts","../src/functions/wirings/rpc/pikku-command-remote-rpc.ts","../src/functions/wirings/rpc/pikku-command-rpc-client.ts","../src/functions/wirings/rpc/pikku-command-rpc-map.ts","../src/functions/wirings/rpc/pikku-command-rpc.ts","../src/functions/wirings/rpc/serialize-public-rpc.ts","../src/functions/wirings/rpc/serialize-react-query-hooks.ts","../src/functions/wirings/rpc/serialize-remote-rpc.ts","../src/functions/wirings/rpc/serialize-rpc-wrapper.ts","../src/functions/wirings/rpc/serialize-typed-rpc-map.ts","../src/functions/wirings/scenarios/register-scenario-instrumentation.ts","../src/functions/wirings/scenarios/scenario-partition.ts","../src/functions/wirings/scenarios/scenario-schema-partition.ts","../src/functions/wirings/scenarios/serialize-feature-meta.ts","../src/functions/wirings/scenarios/serialize-scenario-meta.ts","../src/functions/wirings/scenarios/serialize-scenario-registration.ts","../src/functions/wirings/scheduler/pikku-command-scheduler-types.ts","../src/functions/wirings/scheduler/pikku-command-scheduler.ts","../src/functions/wirings/scheduler/serialize-scheduler-meta.ts","../src/functions/wirings/scheduler/serialize-scheduler-types.ts","../src/functions/wirings/scopes/pikku-command-scopes.ts","../src/functions/wirings/scopes/serialize-scopes-client.ts","../src/functions/wirings/scopes/serialize-scopes-types.ts","../src/functions/wirings/secrets/pikku-command-secrets.ts","../src/functions/wirings/secrets/serialize-secrets-types.ts","../src/functions/wirings/setup/serialize-setup-types.ts","../src/functions/wirings/triggers/pikku-command-trigger-types.ts","../src/functions/wirings/triggers/pikku-command-trigger.ts","../src/functions/wirings/triggers/serialize-trigger-meta.ts","../src/functions/wirings/triggers/serialize-trigger-types.ts","../src/functions/wirings/user-admin/pikku-command-user-admin-functions.ts","../src/functions/wirings/user-admin/serialize-user-admin-functions.ts","../src/functions/wirings/variables/pikku-command-variables.ts","../src/functions/wirings/variables/serialize-variables-types.ts","../src/functions/wirings/virtual-user/pikku-command-virtual-user-functions.ts","../src/functions/wirings/virtual-user/serialize-virtual-user-functions.ts","../src/functions/wirings/webhook/pikku-command-webhook.ts","../src/functions/wirings/webhook/serialize-webhook.ts","../src/functions/wirings/workflow/pikku-command-workflow-routes.ts","../src/functions/wirings/workflow/pikku-command-workflow.ts","../src/functions/wirings/workflow/serialize-personas.ts","../src/functions/wirings/workflow/serialize-scenario-step-map.ts","../src/functions/wirings/workflow/serialize-scenario-types.ts","../src/functions/wirings/workflow/serialize-workflow-bootstrap-map.ts","../src/functions/wirings/workflow/serialize-workflow-map.ts","../src/functions/wirings/workflow/serialize-workflow-meta.ts","../src/functions/wirings/workflow/serialize-workflow-registration.ts","../src/functions/wirings/workflow/serialize-workflow-routes.ts","../src/functions/wirings/workflow/serialize-workflow-types.ts","../src/functions/workflows/all.workflow.ts","../src/middleware/log-command-info-and-time.ts","../src/server/actor-sign-in.ts","../src/server/bun-server-runner.ts","../src/server/content-signing-jwt.ts","../src/server/dev-server-runner.interface.ts","../src/server/node-server-runner.ts","../src/server/server-ready.ts","../src/server/spawn-dev-server.ts","../src/services/cli-logger-forwarder.service.ts","../src/services/cli-logger.service.ts","../src/utils/assert-single-core-version.ts","../src/utils/check-required-types.ts","../src/utils/cli-session.ts","../src/utils/command-summary.ts","../src/utils/contract-versions.ts","../src/utils/detect-better-auth.ts","../src/utils/device-auth.ts","../src/utils/file-import-path.ts","../src/utils/file-imports-serializer.ts","../src/utils/file-writer.ts","../src/utils/frontend.ts","../src/utils/generate-bootstrap-file.ts","../src/utils/get-cli-version.ts","../src/utils/is-deploy-codegen.ts","../src/utils/leaf-import-path.ts","../src/utils/meta-diff.ts","../src/utils/model-alias-override.ts","../src/utils/parse-cli-filters.ts","../src/utils/persona-credentials.ts","../src/utils/pikku-cli-config-error.ts","../src/utils/pikku-cli-config.ts","../src/utils/pikku-files-and-methods.ts","../src/utils/precise-coverage-map.ts","../src/utils/remove-legacy-scaffold-file.ts","../src/utils/resolve-from-project.ts","../src/utils/resolve-personas.ts","../src/utils/resolve-scaffold-feature.ts","../src/utils/schema-diff.ts","../src/utils/serialize-import-map.ts","../src/utils/serialize-meta-ts.ts","../src/utils/serialize-schemas.ts","../src/utils/strip-verbose-meta.ts","../src/utils/surface-diff.ts","../src/utils/surface.ts","../src/utils/tsc-check.ts","../.pikku/pikku-bootstrap-scenarios.gen.ts","../.pikku/pikku-bootstrap.gen.ts","../.pikku/pikku-services.gen.ts","../.pikku/addon/index.ts","../.pikku/addon/pikku-addon-types.gen.ts","../.pikku/agent/index.ts","../.pikku/agent/pikku-agent-map.gen.d.ts","../.pikku/agent/pikku-agent-types.gen.ts","../.pikku/agent/pikku-model-aliases.gen.ts","../.pikku/agent/pikku-scorer-names.gen.d.ts","../.pikku/auth/auth.types.ts","../.pikku/auth/index.ts","../.pikku/auth/pikku-auth-types.gen.ts","../.pikku/channel/index.ts","../.pikku/channel/pikku-channel-types.gen.ts","../.pikku/cli/index.ts","../.pikku/cli/pikku-cli-channel.ts","../.pikku/cli/pikku-cli-client.gen.ts","../.pikku/cli/pikku-cli-contracts-meta.gen.ts","../.pikku/cli/pikku-cli-types.gen.ts","../.pikku/cli/pikku-cli-wirings-meta.gen.ts","../.pikku/cli/pikku-cli-wirings.gen.ts","../.pikku/cli/pikku-cli.gen.ts","../.pikku/error/index.ts","../.pikku/error/pikku-error-types.gen.ts","../.pikku/function/index.ts","../.pikku/function/pikku-function-types.gen.ts","../.pikku/function/pikku-functions-meta.gen.ts","../.pikku/function/pikku-functions.gen.ts","../.pikku/gateway/index.ts","../.pikku/gateway/pikku-gateway-types.gen.ts","../.pikku/http/index.ts","../.pikku/http/pikku-http-types.gen.ts","../.pikku/mcp/index.ts","../.pikku/mcp/pikku-mcp-types.gen.ts","../.pikku/middleware/index.ts","../.pikku/middleware/pikku-middleware-types.gen.ts","../.pikku/node/pikku-node-types.gen.ts","../.pikku/queue/index.ts","../.pikku/queue/pikku-queue-types.gen.ts","../.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts","../.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts","../.pikku/queue/pikku-queue-workers-wirings.gen.ts","../.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-map.remote.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts","../.pikku/scenarios/index.ts","../.pikku/scenarios/pikku-personas.gen.ts","../.pikku/scenarios/pikku-scenario-functions-meta.gen.ts","../.pikku/scenarios/pikku-scenario-functions.gen.ts","../.pikku/scenarios/pikku-scenario-types.gen.ts","../.pikku/scenarios/pikku-scenario-wirings-meta.gen.ts","../.pikku/scenarios/pikku-scenario-wirings.gen.ts","../.pikku/scenarios/schemas/register.gen.ts","../.pikku/scheduler/index.ts","../.pikku/scheduler/pikku-scheduler-types.gen.ts","../.pikku/schemas/register.gen.ts","../.pikku/scopes/index.ts","../.pikku/scopes/pikku-personas.gen.ts","../.pikku/scopes/pikku-roles.gen.ts","../.pikku/scopes/pikku-scope-types.gen.ts","../.pikku/scopes/pikku-scopes.gen.ts","../.pikku/secrets/index.ts","../.pikku/secrets/pikku-secret-types.gen.ts","../.pikku/secrets/pikku-secrets.gen.ts","../.pikku/services/pikku-meta-service.gen.ts","../.pikku/setup/index.ts","../.pikku/setup/pikku-setup-types.gen.ts","../.pikku/trigger/index.ts","../.pikku/trigger/pikku-trigger-types.gen.ts","../.pikku/variables/index.ts","../.pikku/variables/pikku-variable-types.gen.ts","../.pikku/variables/pikku-variables.gen.ts","../.pikku/workflow/index.ts","../.pikku/workflow/pikku-scenario-step-map.gen.d.ts","../.pikku/workflow/pikku-workflow-map.gen.d.ts","../.pikku/workflow/pikku-workflow-types.gen.ts","../.pikku/workflow/pikku-workflow-wirings-meta.gen.ts","../.pikku/workflow/pikku-workflow-wirings.gen.ts","../types/application-types.d.ts","../types/bun-sqlite.d.ts","../types/config.d.ts"],"version":"6.0.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pikku/cli",
3
- "version": "0.12.124",
3
+ "version": "0.12.126",
4
4
  "description": "Pikku CLI — code generation, dev server, migrations and deployment",
5
5
  "author": "yasser.fadl@gmail.com",
6
6
  "license": "BUSL-1.1",
@@ -31,20 +31,20 @@
31
31
  "@jridgewell/trace-mapping": "^0.3.31",
32
32
  "@openapi-contrib/json-schema-to-openapi-schema": "^4.3.4",
33
33
  "@pikku/ai-vercel": "^0.12.13",
34
- "@pikku/better-auth": "^0.12.31",
35
- "@pikku/bun-server": "^0.12.9",
34
+ "@pikku/better-auth": "^0.12.33",
35
+ "@pikku/bun-server": "^0.12.10",
36
36
  "@pikku/code-edit": "^0.12.1",
37
- "@pikku/deploy": "^0.12.1",
37
+ "@pikku/deploy": "^0.12.2",
38
38
  "@pikku/deploy-cloudflare": "^0.12.13",
39
39
  "@pikku/fetch": "^0.12.10",
40
- "@pikku/inspector": "^0.12.67",
40
+ "@pikku/inspector": "^0.12.68",
41
41
  "@pikku/knowledge": "^0.12.7",
42
- "@pikku/kysely": "^0.13.22",
42
+ "@pikku/kysely": "^0.13.23",
43
43
  "@pikku/n8n-import": "^0.0.7",
44
- "@pikku/node-http-server": "^0.12.11",
44
+ "@pikku/node-http-server": "^0.12.12",
45
45
  "@pikku/openapi-parser": "^0.12.20",
46
46
  "@pikku/schedule": "^0.12.7",
47
- "@pikku/skills": "^0.12.19",
47
+ "@pikku/skills": "^0.12.20",
48
48
  "@types/cookie": "^1.0.0",
49
49
  "@types/json-schema": "^7.0.15",
50
50
  "ai": "^7.0.66",
@@ -67,15 +67,15 @@
67
67
  "zod-to-ts": "^2.1.0"
68
68
  },
69
69
  "peerDependencies": {
70
- "@pikku/core": "^0.12.97",
71
- "@pikku/playwright": "^0.12.79",
70
+ "@pikku/core": "^0.12.99",
71
+ "@pikku/playwright": "^0.12.80",
72
72
  "@pikku/ws": "^0.12.9",
73
73
  "better-auth": "^1.6.0",
74
74
  "ws": "^8.21.3"
75
75
  },
76
76
  "devDependencies": {
77
- "@pikku/core": "^0.12.97",
78
- "@pikku/playwright": "^0.12.79",
77
+ "@pikku/core": "^0.12.99",
78
+ "@pikku/playwright": "^0.12.80",
79
79
  "@pikku/ws": "^0.12.9",
80
80
  "@playwright/test": "^1.50.0",
81
81
  "@types/istanbul-lib-instrument": "^1.7.8",
package/snippets.json CHANGED
@@ -40,7 +40,7 @@
40
40
  "cronWirings": "wireScheduler({\n name: 'dailySalesReport',\n schedule: '0 6 * * *', // 06:00 UTC every day\n func: dailySalesReport,\n middleware: [timingMiddleware],\n})\n\nwireScheduler({\n name: 'cleanupAbandonedBaskets',\n schedule: '0 3 * * *', // 03:00 UTC every day\n func: cleanupAbandonedBaskets,\n})",
41
41
  "dailySalesReport": "export const dailySalesReport = pikkuVoidFunc({\n // Exposed so an operator can run the sweep on demand and a scenario can\n // prove it still works. A job reachable only by its schedule is a job\n // nobody can test and nobody can force when it matters.\n expose: true,\n description: 'Cron job: compute and log a daily sales summary.',\n func: async ({ kysely, logger }) => {\n const yesterday = new Date()\n yesterday.setDate(yesterday.getDate() - 1)\n yesterday.setHours(0, 0, 0, 0)\n const dayStart = yesterday.toISOString()\n\n const today = new Date(yesterday)\n today.setDate(today.getDate() + 1)\n const dayEnd = today.toISOString()\n\n const [summary, topItems] = await Promise.all([\n kysely\n .selectFrom('order')\n .select([\n (eb) => eb.fn.countAll<number>().as('orderCount'),\n (eb) => eb.fn.sum<number>('totalCents').as('revenueCents'),\n ])\n .where('status', '=', 'paid')\n .where('createdAt', '>=', dayStart)\n .where('createdAt', '<', dayEnd)\n .executeTakeFirst(),\n kysely\n .selectFrom('orderItem')\n .innerJoin('order', 'order.orderId', 'orderItem.orderId')\n .innerJoin('item', 'item.itemId', 'orderItem.itemId')\n .select([\n 'item.name',\n (eb) => eb.fn.sum<number>('orderItem.quantity').as('unitsSold'),\n ])\n .where('order.status', '=', 'paid')\n .where('order.createdAt', '>=', dayStart)\n .where('order.createdAt', '<', dayEnd)\n .groupBy('orderItem.itemId')\n .orderBy('unitsSold', 'desc')\n .limit(5)\n .execute(),\n ])\n\n logger.info({\n event: 'daily_sales_report',\n date: yesterday.toISOString().split('T')[0],\n orders: Number(summary?.orderCount ?? 0),\n revenueCents: Number(summary?.revenueCents ?? 0),\n topItems,\n })\n },\n})",
42
42
  "definePersonas": "definePersonas({\n visitor: {\n // A customer, like the people this app is for. The catalogue happens to be\n // readable without a session, so this is not what makes the smoke gate\n // pass — it is what stops the gate depending on that staying true.\n name: 'Visitor',\n jobTitle: 'Synthetic health-check user',\n roles: ['customer'],\n personality:\n 'Signs in and checks their own session — proves auth end to end',\n account: {},\n },\n shopper: {\n name: 'Susan',\n jobTitle: 'Buys for a small caf\\u00e9',\n description: 'Orders stock every week and watches the margins',\n roles: ['customer'],\n personality:\n 'Hunts cheap deals. Tries three coupon codes before giving up, and abandons a basket if checkout asks for anything unexpected.',\n goals: ['Get the weekly order in under five minutes'],\n disposition: 'careless',\n account: {},\n },\n /**\n * Holds `orders:refund` without owning any order — the seam that makes the\n * scope-versus-permission split worth demonstrating. A scenario run as Priya\n * proves support can act on somebody else's order; one run as Susan proves a\n * customer cannot.\n */\n priya: {\n name: 'Priya from Support',\n jobTitle: 'Customer support',\n description:\n 'Handles refunds and cancellations for other people\\u2019s orders',\n roles: ['support'],\n personality:\n 'Methodical. Reads the order history before touching anything, and says what she changed.',\n goals: ['Resolve the customer\\u2019s problem without escalating'],\n account: {},\n },\n alex: {\n name: 'Alex the Owner',\n jobTitle: 'Shop owner',\n description: 'Runs the shop \\u2014 prices, stock and who works here',\n roles: ['admin'],\n personality:\n 'Impatient. Knows the catalogue by heart and expects bulk actions to exist.',\n goals: ['Keep stock accurate', 'See what sold this week'],\n account: {},\n },\n})",
43
- "defineRoles": "defineSystemRole({\n customer: {\n displayName: 'Customer',\n description: 'Browse the catalogue, place and track their own orders',\n scopes: [\n 'catalogue:read',\n 'orders:create',\n 'orders:read',\n 'payments:charge',\n ],\n },\n /**\n * Handles orders but cannot change what is for sale. `orders:refund` without\n * `catalogue:write` is the seam worth having in a template: support staff\n * routinely need to undo a payment and routinely should not be able to\n * reprice the shop.\n */\n support: {\n displayName: 'Support',\n description: 'Handle customer orders, including refunds',\n scopes: [\n 'catalogue:read',\n 'orders:read',\n 'orders:cancel',\n 'orders:refund',\n 'payments:manage',\n ],\n },\n /**\n * Names the parents rather than enumerating their children — pikku's\n * parent-grant rule means holding a node grants everything beneath it, so\n * `catalogue` is `catalogue:read` and `catalogue:write` in one word instead\n * of a list that drifts as the tree grows.\n *\n * `pikku:console` comes from `@pikku/addon-console`, not from this app: the\n * console's own surface is the addon's to declare, and the shop composes with\n * it rather than declaring a competing tree.\n */\n admin: {\n displayName: 'Administrator',\n description: 'Everything the shop can do, plus console administration',\n scopes: ['catalogue', 'orders', 'payments', 'reports', 'pikku:console'],\n },\n})",
43
+ "defineRoles": "defineSystemRole({\n customer: {\n displayName: 'Customer',\n description: 'Browse the catalogue, place and track their own orders',\n scopes: [\n 'catalogue:read',\n 'orders:create',\n 'orders:read',\n 'payments:charge',\n ],\n },\n /**\n * Handles orders but cannot change what is for sale. `orders:refund` without\n * `catalogue:write` is the seam worth having in a template: support staff\n * routinely need to undo a payment and routinely should not be able to\n * reprice the shop.\n */\n support: {\n displayName: 'Support',\n description: 'Handle customer orders, including refunds',\n scopes: [\n 'catalogue:read',\n 'orders:read',\n 'orders:cancel',\n 'orders:refund',\n 'payments:manage',\n ],\n },\n /**\n * Names the parents rather than enumerating their children — pikku's\n * parent-grant rule means holding a node grants everything beneath it, so\n * `catalogue` is `catalogue:read` and `catalogue:write` in one word instead\n * of a list that drifts as the tree grows.\n *\n * `pikku:console` comes from `@pikku/addon-console`, not from this app, and\n * `virtualUser` from the virtual-user scaffold, whose RPCs no role could\n * otherwise reach. Both are parents rather than `virtualUser:*`: a wildcard\n * has no row in pikku_scopes for pikku_role_scopes to reference.\n */\n admin: {\n displayName: 'Administrator',\n description: 'Everything the shop can do, plus console administration',\n scopes: [\n 'catalogue',\n 'orders',\n 'payments',\n 'reports',\n 'pikku:console',\n 'virtualUser',\n ],\n },\n})",
44
44
  "defineScopes": "defineScope({\n catalogue: {\n displayName: 'Catalogue',\n description: 'Browse and manage what is for sale',\n scopes: {\n read: { description: 'Browse items and categories' },\n write: { description: 'Create, edit and withdraw items' },\n },\n },\n orders: {\n displayName: 'Orders',\n description: 'Placing and handling orders',\n scopes: {\n read: { description: 'Read orders' },\n create: { description: 'Place an order' },\n cancel: { description: 'Cancel an order before it ships' },\n refund: { description: 'Refund a paid order' },\n },\n },\n payments: {\n displayName: 'Payments',\n description: 'Reaching the payment provider',\n scopes: {\n charge: { description: 'Create a payment intent for your own order' },\n manage: {\n description: 'Refunds, customers and everything else Stripe offers',\n },\n },\n },\n reports: {\n displayName: 'Reports',\n description: 'Sales and stock reporting',\n scopes: {\n read: { description: 'Read sales and stock reports' },\n },\n },\n})",
45
45
  "fetchClient": "export async function shopApiExamples() {\n pikkuFetch.setServerUrl('http://localhost:4000')\n\n const categories = await pikkuFetch.get('/categories')\n const item = await pikkuFetch.get('/items/:itemId', { itemId: 'item-001' })\n\n pikkuFetch.setAuthorizationJWT('user-jwt-token')\n const order = await pikkuFetch.post('/orders', {\n basketId: 'basket-123',\n shippingAddress: {\n line1: '1 High St',\n city: 'London',\n postcode: 'SW1A 1AA',\n country: 'GB',\n },\n })\n\n return { categories, item, order }\n}",
46
46
  "funcMultiWire": "// The same function can be wired to multiple transports without any changes.\n// Define once, wire everywhere.\nwireHTTP({ method: 'get', route: '/items/:itemId', func: getItem, auth: false })",
@@ -105,7 +105,7 @@
105
105
  "shopIsOrderOwner": "export const isOrderOwner = pikkuPermission(\n async ({ kysely }, { orderId }: { orderId: string }, { session }) => {\n const order = await kysely\n .selectFrom('order')\n .select('userId')\n .where('orderId', '=', orderId)\n .executeTakeFirst()\n return order?.userId === session?.userId\n }\n)",
106
106
  "shopRoutes": "export const shopRoutes = defineHTTPRoutes({\n auth: false,\n routes: {\n // Categories\n listCategories: {\n method: 'get',\n route: '/categories',\n func: listCategories,\n },\n createCategory: {\n method: 'post',\n route: '/categories',\n func: createCategory,\n auth: true,\n },\n\n // Items\n listItems: { method: 'get', route: '/items', func: listItems },\n getItem: { method: 'get', route: '/items/:itemId', func: getItem },\n createItem: {\n method: 'post',\n route: '/items',\n func: createItem,\n auth: true,\n },\n updateItem: {\n method: 'patch',\n route: '/items/:itemId',\n func: updateItem,\n auth: true,\n },\n\n // Account\n getProfile: {\n method: 'get',\n route: '/profile',\n func: getProfile,\n auth: true,\n },\n\n // Basket (sessionless — works for guests too)\n getBasket: { method: 'get', route: '/basket', func: getBasket },\n addToBasket: { method: 'post', route: '/basket/items', func: addToBasket },\n removeFromBasket: {\n method: 'delete',\n route: '/basket/items/:itemId',\n func: removeFromBasket,\n },\n\n // Orders (require auth)\n createOrder: {\n method: 'post',\n route: '/orders',\n func: createOrder,\n auth: true,\n },\n listOrders: {\n method: 'get',\n route: '/orders',\n func: listOrders,\n auth: true,\n },\n getOrder: {\n method: 'get',\n route: '/orders/:orderId',\n func: getOrder,\n auth: true,\n },\n cancelOrder: {\n method: 'post',\n route: '/orders/:orderId/cancel',\n func: cancelOrder,\n auth: true,\n },\n },\n})",
107
107
  "shopSecretUsage": "// Note what is *absent* here: `secrets`.\n//\n// Every function-, permission- and auth-facing services type in pikku is\n// bounded by `SecretlessServices`, which omits `secrets` outright. A function\n// cannot read one, so a secret cannot leak through a return value, a log line\n// or an error thrown from business logic — the class of bug you only find in\n// somebody else's incident report.\n//\n// Secrets are read once, where they are needed. `chargeCard` asks the Stripe\n// addon to create a payment intent; `STRIPE_SECRET_KEY` is the addon's secret\n// and never crosses into this function, so it cannot be logged here, returned\n// here, or attached to an error thrown here.\n//\n// This is the step the checkout workflow actually runs. The point used to be\n// made by a second, unwired copy of the same call that existed only to be\n// quoted — so the documented example was the one piece of payment code no\n// shopper ever reached.\nexport const chargeCard = pikkuSessionlessFunc({\n // Invoked by name from `createOrder` as well as by the workflow, so one\n // charge path exists rather than two that can drift.\n expose: true,\n description: 'Charge the card through Stripe.',\n func: async (\n { logger },\n data: { orderId: string; totalCents: number; cardToken?: string },\n { rpc }\n ) => {\n // The order id goes in the payment intent's metadata because that is the\n // only way it comes back: `applyStripeEvent` reads it off the verified\n // webhook event to decide which order was paid. Stripe knows nothing about\n // our ids otherwise.\n const intent = await rpc.invoke('stripe:paymentIntentCreate', {\n amount: data.totalCents,\n currency: 'gbp',\n ...(data.cardToken\n ? { paymentMethod: data.cardToken, confirm: true }\n : {}),\n metadata: { orderId: data.orderId },\n // Charging twice for one order is the expensive failure here, and a\n // workflow step is retried by design.\n idempotencyKey: `order_${data.orderId}`,\n description: `Order ${data.orderId}`,\n })\n\n logger.info({\n event: 'payment_intent_created',\n orderId: data.orderId,\n status: intent.status,\n })\n\n return intent.status === 'succeeded'\n ? { status: 'succeeded' as const, providerRef: intent.id }\n : { status: 'failed' as const, reason: intent.status }\n },\n})",
108
- "shopServices": "export const createSingletonServices = pikkuServices(\n async (config, existingServices) => {\n const variables =\n existingServices?.variables ??\n new TypedVariablesService(new LocalVariablesService())\n const secrets =\n existingServices?.secrets ??\n new TypedSecretService(new LocalSecretService(variables))\n const logger = existingServices?.logger ?? new JsonConsoleLogger()\n const schema = existingServices?.schema ?? new CFWorkerSchemaService(logger)\n const emailService =\n existingServices?.emailService ??\n new GeneratedTemplateEmailService({\n delegate: new LocalEmailService(),\n })\n // The durable audit sink. In a deployed stage fabric injects the platform's\n // audit service; locally it falls back to a no-op so nothing is persisted.\n const audit = existingServices?.audit ?? new NoopAuditService()\n // kysely is injected by pikku dev (node:sqlite) or the CF Worker workflow (libsql).\n // The template never constructs its own dialect — dialects are fabric/runtime\n // concerns — so it must always be provided by the runtime.\n if (!existingServices?.kysely) {\n throw new Error(\n 'kysely service was not injected by the runtime (pikku dev / fabric)'\n )\n }\n const kysely: Kysely<DB> = existingServices.kysely\n\n // Per-user credential store (wire.getCredential) — needed by addons imported\n // with --auth per-user/delegated. A deployed stage injects it: credentials are\n // sealed to the stage, and only its secrets Worker holds the key. There is no\n // fallback because there is no key to fall back to — the template used to\n // build a `KyselyCredentialService` from a `CREDENTIALS_KEY` secret, which was\n // the stage's own KEK handed to every unit. Outside a stage the app runs fine\n // and credential-using addon calls fail with a clear error from the addon's\n // wire services; wire your own `credentialService` here if you need one.\n const credentialService = existingServices?.credentialService\n\n const litellmProxyUrl = process.env.LITELLM_PROXY_URL ?? null\n const litellmApiKey = process.env.LITELLM_API_KEY ?? null\n let aiAgentRunner: VercelAgentRunner | undefined\n if (litellmProxyUrl && litellmApiKey) {\n // The AI SDKs (~3MB) are stubbed out of non-agent units at bundle time —\n // only units with the `ai-model` capability keep them. So import them\n // dynamically and guard on the module resolving to a real export; in a\n // stubbed unit the import yields `{}` and the runner is simply not built.\n const aiVercel = await import('@pikku/ai-vercel')\n const aiSdk = await import('@ai-sdk/openai-compatible')\n if (aiVercel.VercelAgentRunner && aiSdk.createOpenAICompatible) {\n const litellmProvider = aiSdk.createOpenAICompatible({\n name: 'litellm',\n baseURL: litellmProxyUrl,\n apiKey: litellmApiKey,\n })\n aiAgentRunner = new aiVercel.VercelAgentRunner({\n openai: (modelId: string) => litellmProvider.chatModel(modelId),\n anthropic: (modelId: string) => litellmProvider.chatModel(modelId),\n google: (modelId: string) => litellmProvider.chatModel(modelId),\n deepseek: (modelId: string) => litellmProvider.chatModel(modelId),\n })\n }\n }\n\n // Without a ScopeService no user can hold any scope, so every function that\n // requires one denies everybody — `defineScope`, `defineSystemRole` and the\n // role grants `pikku persona sync` writes all exist and none of them reach a\n // request. It resolves userId -> roles -> scopes out of the four pikku_* tables.\n //\n // Built as the concrete class rather than the `ScopeService` interface because\n // `init()` (which creates those tables if they are absent) is the\n // implementation's, not the contract's. The cast is the app's own `DB` — which\n // includes the pikku_* tables — against the narrower shape the service\n // declares; the two differ only in kysely's internal builder generics.\n let scopeService = existingServices?.scopeService\n if (!scopeService) {\n const kyselyScopes = new KyselyScopeService(\n kysely as unknown as Kysely<KyselyPikkuDB>\n )\n await kyselyScopes.init()\n scopeService = kyselyScopes\n }\n\n return {\n ...(existingServices ?? {}),\n config,\n scopeService,\n workflowService: existingServices?.workflowService,\n workflowRunService: existingServices?.workflowRunService,\n variables,\n secrets,\n schema,\n logger,\n emailService,\n audit,\n kysely,\n // Constructed once here rather than read per call: the payment provider's\n // credentials belong to service construction, and functions cannot reach\n // `secrets` at all (every function-facing services type is bounded by\n // SecretlessServices).\n ...(credentialService ? { credentialService } : {}),\n ...(aiAgentRunner ? { aiAgentRunner } : {}),\n }\n }\n)",
108
+ "shopServices": "export const createSingletonServices = pikkuServices(\n async (config, existingServices) => {\n const variables =\n existingServices?.variables ??\n new TypedVariablesService(new LocalVariablesService())\n const secrets =\n existingServices?.secrets ??\n new TypedSecretService(new LocalSecretService(variables))\n const logger = existingServices?.logger ?? new JsonConsoleLogger()\n const schema = existingServices?.schema ?? new CFWorkerSchemaService(logger)\n const emailService =\n existingServices?.emailService ??\n new GeneratedTemplateEmailService({\n delegate: new LocalEmailService(),\n })\n // The durable audit sink. In a deployed stage fabric injects the platform's\n // audit service; locally it falls back to a no-op so nothing is persisted.\n const audit = existingServices?.audit ?? new NoopAuditService()\n // kysely is injected by pikku dev (node:sqlite) or the CF Worker workflow (libsql).\n // The template never constructs its own dialect — dialects are fabric/runtime\n // concerns — so it must always be provided by the runtime.\n if (!existingServices?.kysely) {\n throw new Error(\n 'kysely service was not injected by the runtime (pikku dev / fabric)'\n )\n }\n const kysely: Kysely<DB> = existingServices.kysely\n\n // Per-user credential store (wire.getCredential) — needed by addons imported\n // with --auth per-user/delegated. A deployed stage injects it: credentials are\n // sealed to the stage, and only its secrets Worker holds the key. There is no\n // fallback because there is no key to fall back to — the template used to\n // build a `KyselyCredentialService` from a `CREDENTIALS_KEY` secret, which was\n // the stage's own KEK handed to every unit. Outside a stage the app runs fine\n // and credential-using addon calls fail with a clear error from the addon's\n // wire services; wire your own `credentialService` here if you need one.\n const credentialService = existingServices?.credentialService\n\n const litellmProxyUrl = process.env.LITELLM_PROXY_URL ?? null\n const litellmApiKey = process.env.LITELLM_API_KEY ?? null\n let aiAgentRunner: VercelAgentRunner | undefined\n if (litellmProxyUrl && litellmApiKey) {\n // The AI SDKs (~3MB) are stubbed out of non-agent units at bundle time —\n // only units with the `ai-model` capability keep them. So import them\n // dynamically and guard on the module resolving to a real export; in a\n // stubbed unit the import yields `{}` and the runner is simply not built.\n const aiVercel = await import('@pikku/ai-vercel')\n const aiSdk = await import('@ai-sdk/openai-compatible')\n if (aiVercel.VercelAgentRunner && aiSdk.createOpenAICompatible) {\n const litellmProvider = aiSdk.createOpenAICompatible({\n name: 'litellm',\n baseURL: litellmProxyUrl,\n apiKey: litellmApiKey,\n })\n aiAgentRunner = new aiVercel.VercelAgentRunner({\n openai: (modelId: string) => litellmProvider.chatModel(modelId),\n anthropic: (modelId: string) => litellmProvider.chatModel(modelId),\n google: (modelId: string) => litellmProvider.chatModel(modelId),\n deepseek: (modelId: string) => litellmProvider.chatModel(modelId),\n })\n }\n }\n\n // Without a ScopeService no user can hold any scope, so every function that\n // requires one denies everybody — `defineScope`, `defineSystemRole` and the\n // role grants `pikku persona sync` writes all exist and none of them reach a\n // request. It resolves userId -> roles -> scopes out of the four pikku_* tables.\n //\n // Built as the concrete class rather than the `ScopeService` interface because\n // `init()` (which creates those tables if they are absent) is the\n // implementation's, not the contract's. The cast is the app's own `DB` — which\n // includes the pikku_* tables — against the narrower shape the service\n // declares; the two differ only in kysely's internal builder generics.\n let scopeService = existingServices?.scopeService\n if (!scopeService) {\n const kyselyScopes = new KyselyScopeService(\n kysely as unknown as Kysely<KyselyPikkuDB>\n )\n await kyselyScopes.init()\n scopeService = kyselyScopes\n }\n\n // The definitions in scopes.ts and roles.ts are declarations until something\n // writes them down. Nothing else does, and a role with no row cannot be\n // granted — `addUserToRole` fails the pikku_role_scopes foreign key, which is\n // how persona provisioning discovers it.\n await scopeService.syncScopes(SCOPES)\n await scopeService.syncSystemRoles(SYSTEM_ROLES)\n\n return {\n ...(existingServices ?? {}),\n config,\n scopeService,\n workflowService: existingServices?.workflowService,\n workflowRunService: existingServices?.workflowRunService,\n variables,\n secrets,\n schema,\n logger,\n emailService,\n audit,\n kysely,\n // Constructed once here rather than read per call: the payment provider's\n // credentials belong to service construction, and functions cannot reach\n // `secrets` at all (every function-facing services type is bounded by\n // SecretlessServices).\n ...(credentialService ? { credentialService } : {}),\n ...(aiAgentRunner ? { aiAgentRunner } : {}),\n }\n }\n)",
109
109
  "shopVersionedItem": "export const GetItemOutputV1 = z.object({\n itemId: z.string(),\n name: z.string(),\n priceCents: z.number(),\n})\n\nexport const getItemV1 = pikkuSessionlessFunc({\n expose: true,\n version: 1,\n input: GetItemInput,\n output: GetItemOutputV1,\n func: async ({ kysely }, { itemId }) => {\n const row = await kysely\n .selectFrom('item')\n .select(['itemId', 'name', 'priceCents'])\n .where('itemId', '=', itemId)\n .executeTakeFirstOrThrow()\n return row\n },\n})\n\n// v2 — adds stock and imageUrl to the response\nexport const getItemV2 = pikkuSessionlessFunc({\n expose: true,\n version: 2,\n input: GetItemInput,\n output: GetItemOutput,\n func: async ({ kysely }, { itemId }) => {\n const row = await kysely\n .selectFrom('item')\n .innerJoin('category', 'category.categoryId', 'item.categoryId')\n .select([\n 'item.itemId',\n 'item.name',\n 'item.slug',\n 'item.description',\n 'item.priceCents',\n 'item.stock',\n 'item.imageUrl',\n 'item.isActive',\n 'item.createdAt',\n 'item.updatedAt',\n 'category.categoryId',\n 'category.name as categoryName',\n 'category.slug as categorySlug',\n ])\n .where('item.itemId', '=', itemId)\n .executeTakeFirstOrThrow()\n return {\n ...row,\n category: {\n categoryId: row.categoryId,\n name: row.categoryName,\n slug: row.categorySlug,\n },\n }\n },\n})",
110
110
  "shopWireServices": "export const createWireServices = pikkuWireServices(\n async (singletonServices, wire) => {\n if (!singletonServices.audit) {\n return {}\n }\n const auditLog = createInvocationAudit(singletonServices.audit, wire)\n // auditLog is ALWAYS injected, but `auditLog.write(...)` only PERSISTS when this\n // function set `audit: true` — createInvocationAudit gates on wire.audit, so\n // without it write() is a warn-only no-op (see @pikku/core audit-service.ts).\n // `auditLog.config` is set ONLY when audit: true is on, and when it is, ALSO wrap\n // kysely so every query is captured and the runner flushes the buffer on close.\n // Without audit: true, leave the plain kysely untouched — no per-query overhead.\n if (!auditLog.config) {\n return { auditLog }\n }\n return {\n auditLog,\n kysely: createAuditedKysely(singletonServices.kysely, {\n audit: auditLog,\n }),\n }\n }\n)",
111
111
  "tagMiddleware": "addTagMiddleware('checkout', [auditMiddleware('checkout')])",