@pikku/cli 0.12.96 → 0.12.100

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 (423) hide show
  1. package/console-app/assets/abnfDiagram-VRR7QNED-Icjp9hnB.js +1 -0
  2. package/console-app/assets/arc-BfGls--L.js +1 -0
  3. package/console-app/assets/architecture-TIHT7OUA-C8l7I5Lm.js +1 -0
  4. package/console-app/assets/architectureDiagram-ZJ3FMSHR-CpnsLBns.js +36 -0
  5. package/console-app/assets/array-BifhSqXX.js +1 -0
  6. package/console-app/assets/blockDiagram-677ZJIJ3-ByKRMGSr.js +132 -0
  7. package/console-app/assets/c4Diagram-LMCZKHZV-CzJSbsUo.js +10 -0
  8. package/console-app/assets/channel-BgJ-Z0cx.js +1 -0
  9. package/console-app/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  10. package/console-app/assets/chunk-32BRIVSS-D_tc4HCY.js +1 -0
  11. package/console-app/assets/chunk-52WLFC77-wkQkuUXG.js +10 -0
  12. package/console-app/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  13. package/console-app/assets/chunk-7BUUIJ7U-Bb538aSH.js +1 -0
  14. package/console-app/assets/chunk-C7G6YPKG-BFW3xG3R.js +1 -0
  15. package/console-app/assets/chunk-EX3LRPZG-Car090Sw.js +231 -0
  16. package/console-app/assets/chunk-FWX5IMBZ-c2ud9kQ-.js +2 -0
  17. package/console-app/assets/chunk-HOUHSVGY-RYmQka5R.js +1 -0
  18. package/console-app/assets/chunk-ICXQ74PX-C-dqYC_9.js +2 -0
  19. package/console-app/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  20. package/console-app/assets/chunk-KEIR6QF5-DNzq6p3w.js +161 -0
  21. package/console-app/assets/chunk-MOJQB5TN-Cu3FUWwl.js +88 -0
  22. package/console-app/assets/chunk-OGEWGWER-Z7f1yArD.js +1 -0
  23. package/console-app/assets/chunk-PUDLZKDR-Bp68DuRj.js +156 -0
  24. package/console-app/assets/chunk-Q4XR5HBZ-CdKSYWZ4.js +70 -0
  25. package/console-app/assets/chunk-RYQCIY6F-9ISCAKm2.js +1 -0
  26. package/console-app/assets/chunk-V7JOEXUC-2EOc1nQB.js +206 -0
  27. package/console-app/assets/chunk-VAUOI2AC-DwKsbf70.js +1 -0
  28. package/console-app/assets/chunk-VR4S4FIN-BPvN0PUm.js +1 -0
  29. package/console-app/assets/chunk-WYO6CB5R-DOpurCTP.js +127 -0
  30. package/console-app/assets/chunk-XXDRQBXY-RuYSFsQb.js +1 -0
  31. package/console-app/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  32. package/console-app/assets/chunk-ZGVPDNZ5-Bu2weVOL.js +62 -0
  33. package/console-app/assets/chunk-ZIRB5QZD-H-kepumB.js +32 -0
  34. package/console-app/assets/classDiagram-OUVF2IWQ-ohoLCI8g.js +1 -0
  35. package/console-app/assets/classDiagram-v2-EOCWNBFH-ohoLCI8g.js +1 -0
  36. package/console-app/assets/cose-bilkent-JH36ORCC-nau-QGCX.js +1 -0
  37. package/console-app/assets/cynefin-VYW2F7L2-BBw-E7lg.js +1 -0
  38. package/console-app/assets/cynefinDiagram-TSTJHNR4-BvnMvOvH.js +62 -0
  39. package/console-app/assets/cytoscape.esm-h6BdjjI9.js +321 -0
  40. package/console-app/assets/dagre-CXRCoUWR.js +1 -0
  41. package/console-app/assets/dagre-VKFMJZFB-CHEqPR29.js +4 -0
  42. package/console-app/assets/defaultLocale-C8Fc0cco.js +1 -0
  43. package/console-app/assets/diagram-FQU43EPY-JijKRWyb.js +3 -0
  44. package/console-app/assets/diagram-G47NLZAW-G5UsB31f.js +24 -0
  45. package/console-app/assets/diagram-NH7WQ7WH-BhuJ6fPu.js +24 -0
  46. package/console-app/assets/diagram-OA4YK3LP-DaUF-8N4.js +30 -0
  47. package/console-app/assets/diagram-WEI45ONY-wLsJIhoM.js +41 -0
  48. package/console-app/assets/dist-fbBkbDNG.js +1 -0
  49. package/console-app/assets/ebnfDiagram-CCIWWBDH-BZCEa3Dz.js +1 -0
  50. package/console-app/assets/erDiagram-Q63AITRT-4XoEUtEh.js +85 -0
  51. package/console-app/assets/eventmodeling-45OFAUF4-DZ7z4YJO.js +1 -0
  52. package/console-app/assets/flowDiagram-23GEKE2U-rd7-NwZT.js +1 -0
  53. package/console-app/assets/ganttDiagram-NO4QXBWP-BXU7pfq6.js +292 -0
  54. package/console-app/assets/gitGraph-TEB2WS4Q-BdMAmvpU.js +1 -0
  55. package/console-app/assets/gitGraphDiagram-IHSO6WYX-3Hn0zwZR.js +106 -0
  56. package/console-app/assets/graphlib-B8gBHxth.js +1 -0
  57. package/console-app/assets/{index-CyYHTGWZ.css → index-BXMjqLQ5.css} +1 -1
  58. package/console-app/assets/{index-CeQodYfg.js → index-Din2vBeb.js} +153 -165
  59. package/console-app/assets/info-DKCQHKI2-Dc_oQkp5.js +1 -0
  60. package/console-app/assets/infoDiagram-FWYZ7A6U-B3v4xCUn.js +2 -0
  61. package/console-app/assets/init-D6jRqBbL.js +1 -0
  62. package/console-app/assets/ishikawaDiagram-FXEZZL3T-DzWq9Vtp.js +70 -0
  63. package/console-app/assets/journeyDiagram-5HDEW3XC-C0buWi_a.js +139 -0
  64. package/console-app/assets/kanban-definition-HUTT4EX6-DRAN9HhV.js +89 -0
  65. package/console-app/assets/katex-Vhh-h91d.js +257 -0
  66. package/console-app/assets/line-UqgRNiAC.js +1 -0
  67. package/console-app/assets/linear-FTAGuk_3.js +1 -0
  68. package/console-app/assets/map-DsCK-0Cs.js +1 -0
  69. package/console-app/assets/mermaid-parser.core-DIHI27FL.js +7 -0
  70. package/console-app/assets/mermaid.core-D4q8kvcu.js +11 -0
  71. package/console-app/assets/mindmap-definition-LN4V7U3C-DN-_CNLb.js +96 -0
  72. package/console-app/assets/ordinal-hYBb2elL.js +1 -0
  73. package/console-app/assets/packet-7NZHBO7P-8a3PoQAb.js +1 -0
  74. package/console-app/assets/path-BWPyau1x.js +1 -0
  75. package/console-app/assets/pegDiagram-2B236MQR-Bh2MhzCN.js +1 -0
  76. package/console-app/assets/pie-RZYD4A2V-Bi6zbJDl.js +1 -0
  77. package/console-app/assets/pieDiagram-ENE6RG2P-D2Z0W5UU.js +39 -0
  78. package/console-app/assets/quadrantDiagram-ABIIQ3AL-DNOKka0p.js +7 -0
  79. package/console-app/assets/radar-I7S5WNFK-CAxa68Sg.js +1 -0
  80. package/console-app/assets/railroad-3IZDKUUU-CZb1usP7.js +1 -0
  81. package/console-app/assets/railroad-abnf-AHOZXSZD-DkQZciri.js +1 -0
  82. package/console-app/assets/railroad-ebnf-EBAXGLYW-CPBeASA9.js +1 -0
  83. package/console-app/assets/railroad-peg-LSFZ7HO6-CXEVIZ0g.js +1 -0
  84. package/console-app/assets/railroadDiagram-RFXS5EU6-B1K2hbTD.js +1 -0
  85. package/console-app/assets/requirementDiagram-TGXJPOKE-K8wcOO0Q.js +84 -0
  86. package/console-app/assets/rough.esm-CSKSodPl.js +1 -0
  87. package/console-app/assets/sankeyDiagram-HTMAVEWB-WBPBkgNx.js +40 -0
  88. package/console-app/assets/sequenceDiagram-DBY2YBRQ-Dz80qZZv.js +162 -0
  89. package/console-app/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
  90. package/console-app/assets/src-CnJCXDL0.js +1 -0
  91. package/console-app/assets/stateDiagram-2N3HPSRC-DMur7lZf.js +1 -0
  92. package/console-app/assets/stateDiagram-v2-6OUMAXLB-BDgLCrot.js +1 -0
  93. package/console-app/assets/swimlanes-5IMT3BWC-BlLdYcPU.js +2 -0
  94. package/console-app/assets/swimlanesDiagram-G3AALYLV-CZ5rQIcE.js +8 -0
  95. package/console-app/assets/timeline-definition-FHXFAJF6-CBOit0JY.js +120 -0
  96. package/console-app/assets/treeView-QDETBFTQ-DM1i1ast.js +1 -0
  97. package/console-app/assets/treemap-6X3UGDF4-ACrBEfY6.js +1 -0
  98. package/console-app/assets/vennDiagram-L72KCM5P-BmeFWb5N.js +34 -0
  99. package/console-app/assets/wardley-OPB4EBWU-BpIbeh58.js +1 -0
  100. package/console-app/assets/wardleyDiagram-EHGQE667-CxL7Mv7y.js +78 -0
  101. package/console-app/assets/xychartDiagram-FW5EYKEG-DkV75xT2.js +7 -0
  102. package/console-app/index.html +2 -2
  103. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
  104. package/dist/.pikku/auth/auth.types.d.ts +1 -1
  105. package/dist/.pikku/auth/auth.types.js +1 -1
  106. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
  107. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  108. package/dist/.pikku/cli/pikku-cli-channel.d.ts +11 -2
  109. package/dist/.pikku/cli/pikku-cli-channel.js +23 -8
  110. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  111. package/dist/.pikku/cli/pikku-cli-client.gen.js +36 -9
  112. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +1 -1
  113. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +1 -1
  114. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  115. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  116. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +2 -2
  117. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +7 -8
  118. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  119. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  120. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  121. package/dist/.pikku/cli/pikku-cli.gen.js +18 -2
  122. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  123. package/dist/.pikku/function/pikku-function-types.gen.d.ts +24 -9
  124. package/dist/.pikku/function/pikku-function-types.gen.js +2 -2
  125. package/dist/.pikku/function/pikku-functions-meta.gen.js +2 -2
  126. package/dist/.pikku/function/pikku-functions-meta.gen.json +48 -39
  127. package/dist/.pikku/function/pikku-functions.gen.js +3 -3
  128. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  129. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  130. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  131. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  132. package/dist/.pikku/pikku-bootstrap-scenarios.gen.d.ts +1 -1
  133. package/dist/.pikku/pikku-bootstrap-scenarios.gen.js +1 -1
  134. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
  135. package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
  136. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  137. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  138. package/dist/.pikku/pikku-services.gen.d.ts +2 -1
  139. package/dist/.pikku/pikku-services.gen.js +1 -0
  140. package/dist/.pikku/pikku-types.gen.d.ts +1 -1
  141. package/dist/.pikku/pikku-types.gen.js +1 -1
  142. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  143. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  144. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +2 -2
  145. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  146. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  147. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +2 -2
  148. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +1 -1
  149. package/dist/.pikku/scenarios/pikku-scenario-functions-meta.gen.js +2 -2
  150. package/dist/.pikku/scenarios/pikku-scenario-functions.gen.d.ts +1 -1
  151. package/dist/.pikku/scenarios/pikku-scenario-wirings-meta.gen.js +2 -2
  152. package/dist/.pikku/scenarios/pikku-scenario-wirings.gen.d.ts +1 -1
  153. package/dist/.pikku/scenarios/schemas/register.gen.d.ts +1 -1
  154. package/dist/.pikku/scenarios/schemas/register.gen.js +1 -1
  155. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  156. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  157. package/dist/.pikku/schemas/register.gen.js +3 -3
  158. package/dist/.pikku/schemas/schemas/DbResetInput.schema.json +1 -1
  159. package/dist/.pikku/schemas/schemas/{DbSeedInput.schema.json → PikkuVirtualUserFunctionsOutput.schema.json} +1 -1
  160. package/dist/.pikku/scopes/pikku-personas.gen.js +1 -1
  161. package/dist/.pikku/scopes/pikku-roles.gen.d.ts +1 -1
  162. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +1 -1
  163. package/dist/.pikku/scopes/pikku-scope-types.gen.js +1 -1
  164. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +1 -1
  165. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  166. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  167. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  168. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  169. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  170. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  171. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  172. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  173. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  174. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  175. package/dist/.pikku/workflow/meta/allWorkflow.gen.json +20 -14
  176. package/dist/.pikku/workflow/pikku-personas.gen.js +1 -1
  177. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +29 -13
  178. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  179. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +2 -2
  180. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  181. package/dist/bin/pikku-bin.mjs +2 -2
  182. package/dist/src/cli.wiring.js +8 -7
  183. package/dist/src/deploy/analyzer/analyzer.js +0 -6
  184. package/dist/src/deploy/codegen/per-unit-codegen.js +0 -3
  185. package/dist/src/deploy/server-entry.js +1 -1
  186. package/dist/src/fabric/fabric-commands.d.ts +26 -26
  187. package/dist/src/fabric/functions/add.function.d.ts +1 -1
  188. package/dist/src/fabric/functions/addon-verify.function.d.ts +1 -1
  189. package/dist/src/fabric/functions/db-schema.function.d.ts +1 -1
  190. package/dist/src/fabric/functions/deploy-list.function.d.ts +1 -1
  191. package/dist/src/fabric/functions/deploy-units.function.d.ts +1 -1
  192. package/dist/src/fabric/functions/deploy.function.d.ts +2 -2
  193. package/dist/src/fabric/functions/domains-add.function.d.ts +1 -1
  194. package/dist/src/fabric/functions/domains-list.function.d.ts +1 -1
  195. package/dist/src/fabric/functions/domains-remove.function.d.ts +1 -1
  196. package/dist/src/fabric/functions/errors.function.d.ts +1 -1
  197. package/dist/src/fabric/functions/init.function.d.ts +1 -1
  198. package/dist/src/fabric/functions/link.function.d.ts +1 -1
  199. package/dist/src/fabric/functions/llm-key.function.d.ts +1 -1
  200. package/dist/src/fabric/functions/login.function.d.ts +1 -1
  201. package/dist/src/fabric/functions/logs.function.d.ts +1 -1
  202. package/dist/src/fabric/functions/metrics.function.d.ts +1 -1
  203. package/dist/src/fabric/functions/publish.function.d.ts +1 -1
  204. package/dist/src/fabric/functions/rollback.function.d.ts +1 -1
  205. package/dist/src/fabric/functions/secrets-list.function.d.ts +1 -1
  206. package/dist/src/fabric/functions/secrets-rotate.function.d.ts +1 -1
  207. package/dist/src/fabric/functions/secrets-set.function.d.ts +1 -1
  208. package/dist/src/fabric/functions/smoke.function.d.ts +1 -1
  209. package/dist/src/fabric/functions/status.function.d.ts +1 -1
  210. package/dist/src/fabric/functions/trace.function.d.ts +1 -1
  211. package/dist/src/fabric/functions/validate.function.d.ts +1 -1
  212. package/dist/src/fabric/functions/validate.function.js +76 -176
  213. package/dist/src/functions/commands/all.d.ts +1 -1
  214. package/dist/src/functions/commands/audit.d.ts +1 -1
  215. package/dist/src/functions/commands/binary.d.ts +1 -1
  216. package/dist/src/functions/commands/bootstrap.d.ts +1 -1
  217. package/dist/src/functions/commands/db-audit.d.ts +1 -1
  218. package/dist/src/functions/commands/db-audit.js +1 -1
  219. package/dist/src/functions/commands/db-baseline.d.ts +1 -1
  220. package/dist/src/functions/commands/db-baseline.js +1 -1
  221. package/dist/src/functions/commands/db-check.d.ts +1 -1
  222. package/dist/src/functions/commands/db-check.js +6 -5
  223. package/dist/src/functions/commands/db-codegen.d.ts +1 -1
  224. package/dist/src/functions/commands/db-codegen.js +1 -1
  225. package/dist/src/functions/commands/db-export.d.ts +1 -1
  226. package/dist/src/functions/commands/db-generate.d.ts +1 -1
  227. package/dist/src/functions/commands/db-generate.js +1 -1
  228. package/dist/src/functions/commands/db-migrate.d.ts +1 -1
  229. package/dist/src/functions/commands/db-migrate.js +1 -1
  230. package/dist/src/functions/commands/db-reset.d.ts +15 -1
  231. package/dist/src/functions/commands/db-reset.js +18 -6
  232. package/dist/src/functions/commands/db-shared.d.ts +14 -0
  233. package/dist/src/functions/commands/deploy-apply.d.ts +1 -1
  234. package/dist/src/functions/commands/deploy-info.d.ts +1 -1
  235. package/dist/src/functions/commands/deploy-plan.d.ts +1 -1
  236. package/dist/src/functions/commands/dev.d.ts +1 -1
  237. package/dist/src/functions/commands/dev.js +2 -2
  238. package/dist/src/functions/commands/emails-init.d.ts +1 -1
  239. package/dist/src/functions/commands/enable.d.ts +8 -8
  240. package/dist/src/functions/commands/import-n8n.d.ts +1 -1
  241. package/dist/src/functions/commands/info.d.ts +4 -4
  242. package/dist/src/functions/commands/knowledge-index.d.ts +1 -1
  243. package/dist/src/functions/commands/knowledge-validate.d.ts +1 -1
  244. package/dist/src/functions/commands/login.d.ts +3 -3
  245. package/dist/src/functions/commands/meta.d.ts +19 -19
  246. package/dist/src/functions/commands/new-addon.d.ts +1 -1
  247. package/dist/src/functions/commands/new-addon.js +2 -2
  248. package/dist/src/functions/commands/new-function.d.ts +1 -1
  249. package/dist/src/functions/commands/new-middleware.d.ts +1 -1
  250. package/dist/src/functions/commands/new-permission.d.ts +1 -1
  251. package/dist/src/functions/commands/new-wiring.d.ts +1 -1
  252. package/dist/src/functions/commands/persona-sync.d.ts +2 -2
  253. package/dist/src/functions/commands/persona-sync.js +1 -1
  254. package/dist/src/functions/commands/persona.d.ts +2 -2
  255. package/dist/src/functions/commands/persona.js +16 -18
  256. package/dist/src/functions/commands/pikku-command-bootstrap.d.ts +1 -1
  257. package/dist/src/functions/commands/pikku-command-summary.d.ts +1 -1
  258. package/dist/src/functions/commands/roles-audit.d.ts +1 -1
  259. package/dist/src/functions/commands/roles-prune.d.ts +1 -1
  260. package/dist/src/functions/commands/scenario-ladder.js +1 -1
  261. package/dist/src/functions/commands/scenario.d.ts +2 -2
  262. package/dist/src/functions/commands/scenario.js +40 -11
  263. package/dist/src/functions/commands/scopes-audit.d.ts +1 -1
  264. package/dist/src/functions/commands/scopes-prune.d.ts +1 -1
  265. package/dist/src/functions/commands/scopes-shared.d.ts +4 -0
  266. package/dist/src/functions/commands/scopes-shared.js +1 -1
  267. package/dist/src/functions/commands/serve.d.ts +1 -1
  268. package/dist/src/functions/commands/serve.js +2 -2
  269. package/dist/src/functions/commands/skills.d.ts +2 -2
  270. package/dist/src/functions/commands/versions-check.d.ts +1 -1
  271. package/dist/src/functions/commands/versions-check.js +3 -3
  272. package/dist/src/functions/commands/versions-init.d.ts +1 -1
  273. package/dist/src/functions/commands/versions-update.d.ts +1 -1
  274. package/dist/src/functions/commands/watch.d.ts +1 -1
  275. package/dist/src/functions/commands/workspace-validate.d.ts +1 -1
  276. package/dist/src/functions/db/annotation-parser.d.ts +14 -0
  277. package/dist/src/functions/db/annotation-parser.js +50 -2
  278. package/dist/src/functions/db/better-auth-schema.js +2 -1
  279. package/dist/src/functions/db/db-codegen.d.ts +12 -0
  280. package/dist/src/functions/db/db-codegen.js +149 -16
  281. package/dist/src/functions/db/local-db.d.ts +87 -6
  282. package/dist/src/functions/db/local-db.js +202 -35
  283. package/dist/src/functions/db/sqlite/dev-seed.d.ts +12 -0
  284. package/dist/src/functions/db/sqlite/dev-seed.js +23 -0
  285. package/dist/src/functions/db/sqlite/sqlite-runtime-bun.js +1 -1
  286. package/dist/src/functions/runtimes/fetch/index.d.ts +1 -1
  287. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.d.ts +1 -1
  288. package/dist/src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.d.ts +1 -1
  289. package/dist/src/functions/runtimes/websocket/pikku-command-websocket-typed.d.ts +1 -1
  290. package/dist/src/functions/validate/bootstrap-checks.d.ts +19 -0
  291. package/dist/src/functions/validate/bootstrap-checks.js +90 -0
  292. package/dist/src/functions/validate/persona-checks.d.ts +24 -0
  293. package/dist/src/functions/validate/persona-checks.js +136 -0
  294. package/dist/src/functions/validate/scenario-file-checks.d.ts +17 -0
  295. package/dist/src/functions/validate/scenario-file-checks.js +123 -0
  296. package/dist/src/functions/validate/shared-checks.d.ts +59 -0
  297. package/dist/src/functions/validate/shared-checks.js +311 -0
  298. package/dist/src/functions/validate/workspace-validate.d.ts +1 -2
  299. package/dist/src/functions/validate/workspace-validate.js +4 -196
  300. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent-types.d.ts +1 -1
  301. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent.d.ts +1 -1
  302. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent.js +1 -1
  303. package/dist/src/functions/wirings/ai-agent/pikku-command-public-agent.d.ts +1 -1
  304. package/dist/src/functions/wirings/auth/pikku-command-auth.d.ts +1 -1
  305. package/dist/src/functions/wirings/auth/serialize-auth-gen.js +16 -1
  306. package/dist/src/functions/wirings/auth/serialize-auth-types.d.ts +3 -1
  307. package/dist/src/functions/wirings/auth/serialize-auth-types.js +3 -1
  308. package/dist/src/functions/wirings/channels/pikku-channels.d.ts +1 -1
  309. package/dist/src/functions/wirings/channels/pikku-channels.js +1 -1
  310. package/dist/src/functions/wirings/channels/pikku-command-channel-types.d.ts +1 -1
  311. package/dist/src/functions/wirings/channels/pikku-command-channels-map.d.ts +1 -1
  312. package/dist/src/functions/wirings/channels/pikku-command-channels.d.ts +1 -1
  313. package/dist/src/functions/wirings/channels/pikku-command-channels.js +1 -1
  314. package/dist/src/functions/wirings/channels/serialize-typed-channel-map.js +10 -2
  315. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.d.ts +1 -1
  316. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +9 -4
  317. package/dist/src/functions/wirings/cli/pikku-command-cli-types.d.ts +1 -1
  318. package/dist/src/functions/wirings/cli/pikku-command-cli.d.ts +1 -1
  319. package/dist/src/functions/wirings/cli/pikku-command-cli.js +1 -1
  320. package/dist/src/functions/wirings/cli/serialize-channel-cli-client.js +32 -10
  321. package/dist/src/functions/wirings/cli/serialize-channel-cli.js +4 -4
  322. package/dist/src/functions/wirings/cli/serialize-cli-entrypoint-guard.d.ts +12 -0
  323. package/dist/src/functions/wirings/cli/serialize-cli-entrypoint-guard.js +28 -0
  324. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.js +4 -1
  325. package/dist/src/functions/wirings/console/pikku-command-console-functions.d.ts +1 -1
  326. package/dist/src/functions/wirings/console/pikku-command-node-types.d.ts +1 -1
  327. package/dist/src/functions/wirings/console/pikku-command-nodes-meta.d.ts +1 -1
  328. package/dist/src/functions/wirings/console/serialize-console-functions.js +1 -1
  329. package/dist/src/functions/wirings/credentials/pikku-command-credentials.d.ts +1 -1
  330. package/dist/src/functions/wirings/emails/pikku-command-emails.d.ts +1 -1
  331. package/dist/src/functions/wirings/functions/pikku-command-addon-types.d.ts +1 -1
  332. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.d.ts +1 -1
  333. package/dist/src/functions/wirings/functions/pikku-command-function-types.d.ts +1 -1
  334. package/dist/src/functions/wirings/functions/pikku-command-functions.d.ts +1 -1
  335. package/dist/src/functions/wirings/functions/pikku-command-functions.js +1 -1
  336. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
  337. package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
  338. package/dist/src/functions/wirings/functions/serialize-addon-types.js +1 -1
  339. package/dist/src/functions/wirings/functions/serialize-function-types.js +37 -9
  340. package/dist/src/functions/wirings/gateway/pikku-command-gateway.d.ts +1 -1
  341. package/dist/src/functions/wirings/graph/pikku-command-graph-wirings.d.ts +1 -1
  342. package/dist/src/functions/wirings/http/pikku-command-http-map.d.ts +1 -1
  343. package/dist/src/functions/wirings/http/pikku-command-http-routes.d.ts +1 -1
  344. package/dist/src/functions/wirings/http/pikku-command-http-routes.js +1 -1
  345. package/dist/src/functions/wirings/http/pikku-command-http-types.d.ts +1 -1
  346. package/dist/src/functions/wirings/http/pikku-command-openapi.d.ts +1 -1
  347. package/dist/src/functions/wirings/http/pikku-http-routes.d.ts +1 -1
  348. package/dist/src/functions/wirings/http/pikku-http-routes.js +1 -1
  349. package/dist/src/functions/wirings/mcp/pikku-command-mcp-json.d.ts +1 -1
  350. package/dist/src/functions/wirings/mcp/pikku-command-mcp-types.d.ts +1 -1
  351. package/dist/src/functions/wirings/mcp/pikku-command-mcp.d.ts +1 -1
  352. package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +1 -1
  353. package/dist/src/functions/wirings/middleware/pikku-command-middleware.d.ts +1 -1
  354. package/dist/src/functions/wirings/package/pikku-command-package-types.d.ts +3 -3
  355. package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -1
  356. package/dist/src/functions/wirings/package/serialize-package.js +1 -1
  357. package/dist/src/functions/wirings/permissions/pikku-command-permissions.d.ts +1 -1
  358. package/dist/src/functions/wirings/personas/personas-secrets-file.d.ts +8 -0
  359. package/dist/src/functions/wirings/personas/personas-secrets-file.js +9 -0
  360. package/dist/src/functions/wirings/personas/pikku-command-personas.d.ts +1 -1
  361. package/dist/src/functions/wirings/personas/pikku-command-personas.js +14 -0
  362. package/dist/src/functions/wirings/personas/serialize-personas-secrets.d.ts +16 -0
  363. package/dist/src/functions/wirings/personas/serialize-personas-secrets.js +34 -0
  364. package/dist/src/functions/wirings/queue/pikku-command-queue-map.d.ts +1 -1
  365. package/dist/src/functions/wirings/queue/pikku-command-queue-service.d.ts +1 -1
  366. package/dist/src/functions/wirings/queue/pikku-command-queue-types.d.ts +1 -1
  367. package/dist/src/functions/wirings/queue/pikku-command-queue.d.ts +1 -1
  368. package/dist/src/functions/wirings/queue/pikku-queue-map.d.ts +1 -1
  369. package/dist/src/functions/wirings/queue/pikku-queue.d.ts +1 -1
  370. package/dist/src/functions/wirings/queue/serialize-queue-map.js +2 -1
  371. package/dist/src/functions/wirings/queue/serialize-queue-wrapper.js +2 -1
  372. package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.d.ts +1 -1
  373. package/dist/src/functions/wirings/realtime/pikku-command-realtime.d.ts +1 -1
  374. package/dist/src/functions/wirings/roles/pikku-command-roles.d.ts +1 -1
  375. package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.d.ts +1 -1
  376. package/dist/src/functions/wirings/rpc/pikku-command-react-query.d.ts +1 -1
  377. package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.d.ts +1 -1
  378. package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.d.ts +1 -1
  379. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.d.ts +3 -3
  380. package/dist/src/functions/wirings/rpc/pikku-command-rpc.d.ts +1 -1
  381. package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +1 -1
  382. package/dist/src/functions/wirings/scenarios/register-scenario-instrumentation.js +1 -1
  383. package/dist/src/functions/wirings/scenarios/serialize-scenario-meta.js +2 -2
  384. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler-types.d.ts +1 -1
  385. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.d.ts +1 -1
  386. package/dist/src/functions/wirings/scopes/pikku-command-scopes.d.ts +1 -1
  387. package/dist/src/functions/wirings/secrets/pikku-command-secrets.d.ts +1 -1
  388. package/dist/src/functions/wirings/triggers/pikku-command-trigger-types.d.ts +1 -1
  389. package/dist/src/functions/wirings/triggers/pikku-command-trigger.d.ts +1 -1
  390. package/dist/src/functions/wirings/triggers/serialize-trigger-meta.js +2 -2
  391. package/dist/src/functions/wirings/user-admin/pikku-command-user-admin-functions.d.ts +1 -1
  392. package/dist/src/functions/wirings/variables/pikku-command-variables.d.ts +1 -1
  393. package/dist/src/functions/wirings/virtual-user/pikku-command-virtual-user-functions.d.ts +1 -0
  394. package/dist/src/functions/wirings/virtual-user/pikku-command-virtual-user-functions.js +42 -0
  395. package/dist/src/functions/wirings/virtual-user/serialize-virtual-user-functions.d.ts +28 -0
  396. package/dist/src/functions/wirings/virtual-user/serialize-virtual-user-functions.js +439 -0
  397. package/dist/src/functions/wirings/webhook/pikku-command-webhook.d.ts +1 -1
  398. package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.d.ts +1 -1
  399. package/dist/src/functions/wirings/workflow/pikku-command-workflow.d.ts +1 -1
  400. package/dist/src/functions/wirings/workflow/serialize-scenario-step-map.js +2 -2
  401. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +2 -2
  402. package/dist/src/functions/wirings/workflow/serialize-workflow-routes.js +15 -32
  403. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +36 -23
  404. package/dist/src/functions/workflows/all.workflow.js +49 -16
  405. package/dist/src/server/bun-server-runner.d.ts +2 -2
  406. package/dist/src/server/bun-server-runner.js +5 -1
  407. package/dist/src/services/cli-logger.service.d.ts +28 -16
  408. package/dist/src/services/cli-logger.service.js +25 -16
  409. package/dist/src/services.d.ts +1 -1
  410. package/dist/src/services.js +8 -0
  411. package/dist/src/utils/file-import-path.js +9 -0
  412. package/dist/src/utils/pikku-cli-config.js +7 -0
  413. package/dist/src/utils/resolve-personas.d.ts +4 -9
  414. package/dist/src/utils/resolve-personas.js +4 -15
  415. package/dist/src/utils/serialize-meta-ts.js +1 -1
  416. package/dist/tsconfig.tsbuildinfo +1 -1
  417. package/package.json +13 -13
  418. package/dist/.pikku/schemas/schemas/BootstrapInput.schema.json +0 -1
  419. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +0 -1
  420. package/dist/src/functions/commands/db-seed.d.ts +0 -1
  421. package/dist/src/functions/commands/db-seed.js +0 -24
  422. package/dist/src/functions/db/sqlite/seed.d.ts +0 -11
  423. package/dist/src/functions/db/sqlite/seed.js +0 -22
@@ -26,7 +26,7 @@ export const pikkuChannels = pikkuVoidFunc({
26
26
  const importStatement = supportsImportAttributes
27
27
  ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
28
28
  : `import metaData from '${jsonImportPath}'`;
29
- await writeFileInDir(logger, channelsWiringMetaFile, `import { pikkuState } from '@pikku/core/internal'\nimport { ChannelsMeta } from '@pikku/core/channel'\n${importStatement}\npikkuState(null, 'channel', 'meta', metaData as ChannelsMeta)`);
29
+ await writeFileInDir(logger, channelsWiringMetaFile, `import { pikkuState } from '@pikku/core/ecosystem'\nimport { ChannelsMeta } from '@pikku/core/channel'\n${importStatement}\npikkuState(null, 'channel', 'meta', metaData as ChannelsMeta)`);
30
30
  }
31
31
  },
32
32
  middleware: [
@@ -1 +1 @@
1
- export declare const pikkuChannelTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuChannelTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuChannelsMap: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuChannelsMap: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuCommandChannels: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuCommandChannels: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -41,7 +41,7 @@ export const pikkuCommandChannels = pikkuSessionlessFunc({
41
41
  const importStatement = supportsImportAttributes
42
42
  ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
43
43
  : `import metaData from '${jsonImportPath}'`;
44
- await writeFileInDir(logger, channelsWiringMetaFile, `import { pikkuState } from '@pikku/core/internal'\nimport type { ChannelsMeta } from '@pikku/core/channel'\n${importStatement}\npikkuState(null, 'channel', 'meta', metaData as ChannelsMeta)`);
44
+ await writeFileInDir(logger, channelsWiringMetaFile, `import { pikkuState } from '@pikku/core/ecosystem'\nimport type { ChannelsMeta } from '@pikku/core/channel'\n${importStatement}\npikkuState(null, 'channel', 'meta', metaData as ChannelsMeta)`);
45
45
  return true;
46
46
  },
47
47
  middleware: [
@@ -109,15 +109,23 @@ function generateChannels(logger, typesMap, functionsMeta, addonFunctions, chann
109
109
  }
110
110
  }
111
111
  }
112
+ /**
113
+ * A route or message key that is not a bare identifier has to be quoted to be
114
+ * a legal property name. Channel routes are author-chosen strings and a CLI
115
+ * channel's are command ids, where `app-smoke` and `registry.search` are the
116
+ * norm — unquoted, each one ends the property early and the whole map fails
117
+ * to parse. Quoted only when it has to be, so existing output is unchanged.
118
+ */
119
+ const propertyKey = (key) => /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key) ? key : `'${key}'`;
112
120
  let routesStr = 'export type ChannelsMap = {\n';
113
121
  for (const [channelPath, { routes, message }] of Object.entries(channelsObject)) {
114
122
  routesStr += ` readonly '${channelPath}': {\n`;
115
123
  // Add `routes` object
116
124
  routesStr += ` readonly routes: {\n`;
117
125
  for (const [key, methods] of Object.entries(routes)) {
118
- routesStr += ` readonly ${key}: {\n`;
126
+ routesStr += ` readonly ${propertyKey(key)}: {\n`;
119
127
  for (const [method, handler] of Object.entries(methods)) {
120
- routesStr += ` readonly ${method}: ChannelHandler<${formatTypeArray(handler.inputTypes) || 'void'}, ${formatTypeArray(handler.outputTypes) || 'never'}>,\n`;
128
+ routesStr += ` readonly ${propertyKey(method)}: ChannelHandler<${formatTypeArray(handler.inputTypes) || 'void'}, ${formatTypeArray(handler.outputTypes) || 'never'}>,\n`;
121
129
  }
122
130
  routesStr += ' },\n';
123
131
  }
@@ -1 +1 @@
1
- export declare const pikkuCLIEntry: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuCLIEntry: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -64,15 +64,20 @@ export const pikkuCLIEntry = pikkuSessionlessFunc({
64
64
  // Generate client code if clientPath is provided
65
65
  if (channelClientPath) {
66
66
  const channelClientFile = join(config.rootDir, channelClientPath);
67
- // Validate that renderers don't depend on services (client-side renderers can't access server services)
67
+ // A renderer for a CLI-over-channel program runs on the client, where
68
+ // there is no service container to resolve from — the only thing the
69
+ // runtime can hand it is a logger. Anything else it destructures
70
+ // would be undefined at runtime, so it fails generation instead.
68
71
  const rendererNames = collectRendererNames(programMeta);
69
72
  const problematicRenderers = [];
70
73
  for (const rendererName of rendererNames) {
71
74
  const rendererMeta = visitState.cli.meta.renderers[rendererName];
72
- if (rendererMeta?.services?.services?.length > 0) {
75
+ const services = rendererMeta?.services?.services ?? [];
76
+ const unavailable = services.filter((name) => name !== 'logger');
77
+ if (unavailable.length > 0) {
73
78
  problematicRenderers.push({
74
79
  name: rendererName,
75
- services: rendererMeta.services.services,
80
+ services: unavailable,
76
81
  });
77
82
  }
78
83
  }
@@ -81,7 +86,7 @@ export const pikkuCLIEntry = pikkuSessionlessFunc({
81
86
  const details = problematicRenderers
82
87
  .map((r) => ` - ${r.name} depends on: ${r.services.join(', ')}`)
83
88
  .join('\n');
84
- logger.critical(ErrorCode.CLI_CLIENTSIDE_RENDERER_HAS_SERVICES, `Cannot generate CLI channel client for '${programName}': renderers cannot depend on services (client-side execution)\n${details}\n\nRenderers used in CLI-over-channel must be service-free since they execute on the client.`);
89
+ logger.critical(ErrorCode.CLI_CLIENTSIDE_RENDERER_HAS_SERVICES, `Cannot generate CLI channel client for '${programName}': a renderer reached for a service that does not exist on the client\n${details}\n\nRenderers in a CLI-over-channel program run on the client side of the socket, where the only available service is 'logger'.`);
85
90
  // Delete existing client file if it exists
86
91
  if (existsSync(channelClientFile)) {
87
92
  await rm(channelClientFile);
@@ -1,5 +1,5 @@
1
1
  type CLITypesCommandInput = {
2
2
  bootstrap?: boolean;
3
3
  };
4
- export declare const pikkuCLITypes: import("#pikku").PikkuFunctionConfig<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
4
+ export declare const pikkuCLITypes: import("#pikku").PikkuFunctionConfig<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
5
5
  export {};
@@ -1 +1 @@
1
- export declare const pikkuCLI: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuCLI: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -41,7 +41,7 @@ export const pikkuCLI = pikkuSessionlessFunc({
41
41
  const importStatement = supportsImportAttributes
42
42
  ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
43
43
  : `import metaData from '${jsonImportPath}'`;
44
- await writeFileInDir(logger, cliWiringMetaFile, `import { pikkuState } from '@pikku/core/internal'\nimport { CLIMeta } from '@pikku/core/cli'\n${importStatement}\npikkuState(null, 'cli', 'meta', metaData as CLIMeta)`);
44
+ await writeFileInDir(logger, cliWiringMetaFile, `import { pikkuState } from '@pikku/core/ecosystem'\nimport { CLIMeta } from '@pikku/core/cli'\n${importStatement}\npikkuState(null, 'cli', 'meta', metaData as CLIMeta)`);
45
45
  return true;
46
46
  },
47
47
  middleware: [
@@ -1,4 +1,5 @@
1
1
  import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
2
+ import { DIRECT_EXECUTION_GUARD } from './serialize-cli-entrypoint-guard.js';
2
3
  /**
3
4
  * Collect all unique renderer names from CLI metadata (populated by inspector)
4
5
  */
@@ -107,10 +108,11 @@ export function serializeChannelCLIClient(programName, programMeta, clientFile,
107
108
  ? resolveRendererBinding(programMeta.defaultRenderName, renderersMeta)
108
109
  : null;
109
110
  const defaultRendererCode = defaultRendererBinding
110
- ? `,\n defaultRenderer: ${defaultRendererBinding}`
111
+ ? `,\n defaultRenderer: ${defaultRendererBinding} as CorePikkuCLIClientRender<any>`
111
112
  : '';
112
113
  return `
113
114
  import { executeRawCLIViaChannel } from '@pikku/core/cli/channel'
115
+ import type { CorePikkuCLIClientRender } from '@pikku/core/cli/channel'
114
116
  import type { Capabilities } from '@pikku/core/channel'
115
117
  import { CorePikkuWebsocket } from '@pikku/websocket'
116
118
  ${rendererImports}
@@ -136,8 +138,12 @@ export async function ${capitalizedName}CLIClient(
136
138
  // Create Pikku WebSocket wrapper
137
139
  const pikkuWS = new CorePikkuWebsocket(ws)
138
140
 
139
- // Register renderers for CLI commands
140
- const renderers = ${renderersMap}
141
+ // Renderers are declared against this app's \`SingletonServices\`, but on this
142
+ // side of the socket the only service that exists is a logger. The cast is
143
+ // sound because generation refuses to emit this file at all when a renderer
144
+ // reaches for anything else — see CLI_CLIENTSIDE_RENDERER_HAS_SERVICES. It is
145
+ // localised here so \`executeRawCLIViaChannel\` can keep an honest signature.
146
+ const renderers = ${renderersMap} as Record<string, CorePikkuCLIClientRender<any>>
141
147
 
142
148
  return executeRawCLIViaChannel({
143
149
  pikkuWS,
@@ -151,15 +157,17 @@ export async function ${capitalizedName}CLIClient(
151
157
  export default ${capitalizedName}CLIClient
152
158
 
153
159
  // For direct execution (if this file is run directly)
154
- if (import.meta.url === \`file://\${process.argv[1]}\`) {
160
+ ${DIRECT_EXECUTION_GUARD}
161
+
162
+ if (isDirectExecution) {
155
163
  const url = process.env.PIKKU_WS_URL || 'ws://localhost:4002${finalChannelRoute}'
156
164
 
157
165
  // Attach credentials so the channel authenticates like any other pikku client.
158
166
  // A machine API key (PIKKU_API_KEY -> x-api-key) takes precedence; otherwise
159
167
  // the human session token saved by \`pikku login\` (~/.pikku/session.json ->
160
- // Authorization: Bearer) is used. This block only runs under Node (direct
161
- // execution), so reading the session file and using the 'ws' headers option
162
- // is safe the browser WebSocket cannot set custom headers anyway.
168
+ // Authorization: Bearer) is used. This block only runs on a server runtime
169
+ // (direct execution), so reading the session file is safe a browser could
170
+ // neither reach it nor set custom headers on its WebSocket.
163
171
  const headers: Record<string, string> = {}
164
172
  if (process.env.PIKKU_API_KEY) {
165
173
  headers['x-api-key'] = process.env.PIKKU_API_KEY
@@ -186,12 +194,26 @@ if (import.meta.url === \`file://\${process.argv[1]}\`) {
186
194
  }
187
195
  const hasAuth = Object.keys(headers).length > 0
188
196
 
189
- // Custom headers require the Node 'ws' module the global/browser WebSocket
190
- // cannot set them so prefer 'ws' whenever we have credentials to send.
197
+ // Node's global WebSocket reads its second argument as subprotocols and drops
198
+ // custom headers on the floor, so credentials there need the 'ws' module.
199
+ // Bun's honours them natively, and reaching for 'ws' under Bun would load its
200
+ // compatibility shim for nothing. Detected once, the way the CLI picks its
201
+ // dev-server runner.
202
+ const isBun = typeof (globalThis as { Bun?: unknown }).Bun !== 'undefined'
203
+
204
+ // Only the header-carrying Bun call needs the cast: the DOM lib types the
205
+ // second argument as subprotocols, which is what Node implements.
206
+ type WebSocketWithHeaders = new (
207
+ url: string,
208
+ options: { headers: Record<string, string> }
209
+ ) => WebSocket
210
+
191
211
  let ws: WebSocket
192
- if (hasAuth || typeof WebSocket === 'undefined') {
212
+ if (!isBun && (hasAuth || typeof WebSocket === 'undefined')) {
193
213
  const wsModule = await import('ws')
194
214
  ws = new wsModule.default(url, { headers }) as unknown as WebSocket
215
+ } else if (hasAuth) {
216
+ ws = new (WebSocket as unknown as WebSocketWithHeaders)(url, { headers })
195
217
  } else {
196
218
  ws = new WebSocket(url)
197
219
  }
@@ -61,7 +61,7 @@ import { wireChannel } from '${channelTypesPath}'
61
61
  import { pikkuMiddleware${hasAddonFuncs ? ', ref' : ''}, pikkuSessionlessFunc } from '${functionTypesPath}'
62
62
  import { generateCommandHelp } from '@pikku/core/cli'
63
63
  import { handleRawCLI, type RawCLIFrame } from '@pikku/core/cli/channel'
64
- import { pikkuState } from '@pikku/core/internal'
64
+ import { pikkuState } from '@pikku/core/ecosystem'
65
65
  ${imports}
66
66
 
67
67
  // Middleware to close the channel after CLI command completes
@@ -143,7 +143,7 @@ export const cliRaw = pikkuSessionlessFunc<{ args: string[] }, RawCLIFrame>({
143
143
  },
144
144
  })
145
145
 
146
- ${programMeta.auth === true
146
+ ${programMeta.auth !== false
147
147
  ? `/**
148
148
  * Refuses a connection that arrives without a session.
149
149
  *
@@ -168,8 +168,8 @@ export const cliRequireSession = pikkuSessionlessFunc<void, RawCLIFrame | void>(
168
168
  wireChannel({
169
169
  name: '${finalChannelName}',
170
170
  route: '${finalChannelRoute}',
171
- auth: ${programMeta.auth === true},
172
- ${programMeta.auth === true ? ' onConnect: cliRequireSession,\n' : ''} onMessageWiring: {
171
+ auth: ${programMeta.auth !== false},
172
+ ${programMeta.auth !== false ? ' onConnect: cliRequireSession,\n' : ''} onMessageWiring: {
173
173
  command: {
174
174
  '__help': {
175
175
  func: cliHelp,
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The snippet every generated CLI entrypoint uses to decide whether it is being
3
+ * run or merely imported. It declares `isDirectExecution`; the caller writes the
4
+ * `if`.
5
+ *
6
+ * `import.meta.url === \`file://${process.argv[1]}\`` — the shape this replaces —
7
+ * is false for any CLI invoked through a symlinked bin, because Node reports the
8
+ * symlink in argv and the realpath in the URL, so the block never ran for an
9
+ * installed `node_modules/.bin/<name>`. It also fails on paths the URL has to
10
+ * percent-encode, such as one containing a space.
11
+ */
12
+ export declare const DIRECT_EXECUTION_GUARD = "const isDirectExecution = await (async () => {\n if (typeof import.meta.main === 'boolean') {\n return import.meta.main\n }\n // Node exposes import.meta.main from 24.2; earlier 24.x compares realpaths,\n // which is what it is shorthand for.\n try {\n const { fileURLToPath } = await import('node:url')\n const { realpathSync } = await import('node:fs')\n return (\n process.argv[1] !== undefined &&\n realpathSync(process.argv[1]) === fileURLToPath(import.meta.url)\n )\n } catch {\n return false\n }\n})()";
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The snippet every generated CLI entrypoint uses to decide whether it is being
3
+ * run or merely imported. It declares `isDirectExecution`; the caller writes the
4
+ * `if`.
5
+ *
6
+ * `import.meta.url === \`file://${process.argv[1]}\`` — the shape this replaces —
7
+ * is false for any CLI invoked through a symlinked bin, because Node reports the
8
+ * symlink in argv and the realpath in the URL, so the block never ran for an
9
+ * installed `node_modules/.bin/<name>`. It also fails on paths the URL has to
10
+ * percent-encode, such as one containing a space.
11
+ */
12
+ export const DIRECT_EXECUTION_GUARD = `const isDirectExecution = await (async () => {
13
+ if (typeof import.meta.main === 'boolean') {
14
+ return import.meta.main
15
+ }
16
+ // Node exposes import.meta.main from 24.2; earlier 24.x compares realpaths,
17
+ // which is what it is shorthand for.
18
+ try {
19
+ const { fileURLToPath } = await import('node:url')
20
+ const { realpathSync } = await import('node:fs')
21
+ return (
22
+ process.argv[1] !== undefined &&
23
+ realpathSync(process.argv[1]) === fileURLToPath(import.meta.url)
24
+ )
25
+ } catch {
26
+ return false
27
+ }
28
+ })()`;
@@ -1,4 +1,5 @@
1
1
  import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
2
+ import { DIRECT_EXECUTION_GUARD } from './serialize-cli-entrypoint-guard.js';
2
3
  /**
3
4
  * Serializes the local (in-program) CLI bootstrap code
4
5
  */
@@ -40,7 +41,9 @@ ${wireServicesFactory ? ' createWireServices,' : ''}
40
41
  export default ${capitalizedName}CLI
41
42
 
42
43
  // For direct execution (if this file is run directly)
43
- if (import.meta.url === \`file://\${process.argv[1]}\`) {
44
+ ${DIRECT_EXECUTION_GUARD}
45
+
46
+ if (isDirectExecution) {
44
47
  ${capitalizedName}CLI(process.argv.slice(2)).catch(error => {
45
48
  console.error('Fatal error:', error.message)
46
49
  process.exit(1)
@@ -1 +1 @@
1
- export declare const pikkuConsoleFunctions: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuConsoleFunctions: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuNodeTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuNodeTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuNodesMeta: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuNodesMeta: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -115,7 +115,7 @@ export const pikkuConsoleGetSecret = pikkuFunc({
115
115
  return { exists: false, value: null }
116
116
  }
117
117
  const value = await secrets.getSecret(secretId)
118
- return { exists: true, value }
118
+ return { exists: true, value: value.reveal() }
119
119
  },
120
120
  })
121
121
 
@@ -1 +1 @@
1
- export declare const pikkuCredentials: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuCredentials: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1,6 +1,6 @@
1
1
  import type { PikkuCLIConfig } from '../../../../types/config.js';
2
2
  import type { CLILogger } from '../../../services/cli-logger.service.js';
3
- export declare const pikkuEmails: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
3
+ export declare const pikkuEmails: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
4
4
  export declare function generateEmailsArtifacts(logger: CLILogger, config: Pick<PikkuCLIConfig, 'outDir'> & {
5
5
  emailTemplatesDir?: string;
6
6
  }): Promise<true | undefined>;
@@ -1,5 +1,5 @@
1
1
  type AddonTypesCommandInput = {
2
2
  bootstrap?: boolean;
3
3
  };
4
- export declare const pikkuAddonTypes: import("#pikku").PikkuFunctionConfig<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
4
+ export declare const pikkuAddonTypes: import("#pikku").PikkuFunctionConfig<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
5
5
  export {};
@@ -2,6 +2,6 @@ export declare const pikkuFunctionTypesSplit: import("#pikku").PikkuFunctionConf
2
2
  bootstrap?: boolean;
3
3
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
4
4
  bootstrap?: boolean;
5
- }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
5
+ }, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<{
6
6
  bootstrap?: boolean;
7
7
  }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -2,6 +2,6 @@ export declare const pikkuFunctionTypes: import("#pikku").PikkuFunctionConfig<{
2
2
  bootstrap?: boolean;
3
3
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
4
4
  bootstrap?: boolean;
5
- }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
5
+ }, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<{
6
6
  bootstrap?: boolean;
7
7
  }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuFunctions: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuFunctions: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -27,7 +27,7 @@ export const pikkuFunctions = pikkuSessionlessFunc({
27
27
  ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
28
28
  : `import metaData from '${jsonImportPath}'`;
29
29
  const packageName = config.addonName ? `'${config.addonName}'` : 'null';
30
- await writeFileInDir(logger, functionsMetaFile, `import { pikkuState } from '@pikku/core/internal'\nimport type { FunctionsMeta } from '@pikku/core'\n${importStatement}\npikkuState(${packageName}, 'function', 'meta', metaData as FunctionsMeta)`);
30
+ await writeFileInDir(logger, functionsMetaFile, `import { pikkuState } from '@pikku/core/ecosystem'\nimport type { FunctionsMeta } from '@pikku/core'\n${importStatement}\npikkuState(${packageName}, 'function', 'meta', metaData as FunctionsMeta)`);
31
31
  // For addon packages, register ALL functions (they'll be invoked by consumers)
32
32
  // For main packages, only register functions that are invoked via internal RPCs
33
33
  const isAddon = !!config.addonName;
@@ -1,2 +1,2 @@
1
1
  export declare const serializeServicesMap: (allSingletonServices: string[], allWireServices: string[], requiredServices: Set<string>, forceRequiredServices: string[] | undefined, servicesImport: string, wireServicesImport: string, addonRequiredParentServices?: string[], authInjected?: boolean, agentScaffoldEnabled?: boolean) => string;
2
- export declare const pikkuServices: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
2
+ export declare const pikkuServices: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuSchemas: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuSchemas: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -53,7 +53,7 @@ export const pikkuAddonConfig = <ExistingServices extends Omit<Partial<Singleton
53
53
  * { secrets }
54
54
  * ) => {
55
55
  * const creds = await secrets.getSecret<GithubCredentials>('GITHUB_CREDENTIALS')
56
- * const github = new GithubService(creds)
56
+ * const github = new GithubService(creds.reveal())
57
57
  * return { github }
58
58
  * })
59
59
  * \`\`\`
@@ -16,14 +16,14 @@ export const serializeFunctionTypes = (userSessionTypeImport, userSessionTypeNam
16
16
  */
17
17
 
18
18
  import type { CorePikkuMiddleware, CorePermissionGroup, ListInput, ListOutput, PikkuWire, PickRequired, SecretlessServices, SecretService } from '@pikku/core'
19
- import type { CorePikkuFunctionConfig, CorePikkuAuth, CorePikkuAuthConfig, CorePikkuPermission } from '@pikku/core/function'
19
+ import type { CorePikkuFunctionConfig, CorePikkuSessionlessFunctionConfig, CorePikkuAuth, CorePikkuAuthConfig, CorePikkuPermission } from '@pikku/core/function'
20
20
  import { pikkuAuth as pikkuAuthCore } from '@pikku/core/function'
21
21
  import {
22
22
  addTagMiddleware as addTagMiddlewareCore,
23
23
  addGlobalMiddleware as addGlobalMiddlewareCore,
24
24
  addGlobalPermission as addGlobalPermissionCore,
25
25
  } from '@pikku/core/middleware'
26
- import { pikkuState as __pikkuState, CreateWireServices } from '@pikku/core/internal'
26
+ import { pikkuState as __pikkuState, CreateWireServices } from '@pikku/core/ecosystem'
27
27
  import type { NodeType } from '@pikku/core/node'
28
28
  ${scopesImport}
29
29
  import type { StandardSchemaV1 } from '@standard-schema/spec'
@@ -301,18 +301,28 @@ export const pikkuApprovalDescription = <In = unknown, RequiredServices extends
301
301
  * @template In - The input type
302
302
  * @template Out - The output type that the function returns
303
303
  * @template RequiredServices - Services required by this function
304
+ * @template ScenarioOut - Types \`scenario.context\`. Only scenarios set it:
305
+ * \`PikkuFunctionScenario\` passes the scenario's own output, and a *hook*
306
+ * passes the output of the scenario it belongs to (it returns void itself).
307
+ *
308
+ * It deliberately does NOT default to \`Out\`. That would make every ordinary
309
+ * function's wire type vary with its return type, and a \`func\` written
310
+ * against the \`PikkuFunction | PikkuFunctionSessionless\` union then loses
311
+ * contextual typing — its parameters fall back to \`any\` and the assignment
312
+ * fails with no hint as to why.
304
313
  */
305
314
  export type PikkuFunctionSessionless<
306
315
  In = unknown,
307
316
  Out = never,
308
317
  RequiredWires extends keyof PikkuWire = never,
309
- RequiredServices extends SecretlessServices<Services> = WiredServices
318
+ RequiredServices extends SecretlessServices<Services> = WiredServices,
319
+ ScenarioOut = unknown
310
320
  > = CorePikkuFunctionSessionless<
311
321
  In,
312
322
  Out,
313
323
  RequiredServices,
314
324
  Session,
315
- PickRequired<PikkuWire<In, Out, false, Session, TypedPikkuRPC, null, any, TypedWorkflow, unknown, TypedScenario, TypedPersonas>, RequiredWires>
325
+ PickRequired<PikkuWire<In, Out, false, Session, TypedPikkuRPC, null, any, TypedWorkflow, unknown, TypedScenario<ScenarioOut>, TypedPersonas>, RequiredWires>
316
326
  >
317
327
 
318
328
  /**
@@ -353,11 +363,28 @@ export type PikkuFunctionConfig<
353
363
  In = unknown,
354
364
  Out = unknown,
355
365
  RequiredWires extends keyof PikkuWire = never,
356
- PikkuFunc extends PikkuFunction<In, Out, RequiredWires, any> | PikkuFunctionSessionless<In, Out, RequiredWires, any> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires>,
366
+ // \`any\` in the ScenarioOut slot, not \`unknown\`: a scenario body types its
367
+ // context as its own output, and a constraint pinned to one context type
368
+ // would refuse it. \`ScenarioContext<any>\` collapses to \`any\`, so the
369
+ // constraint stays open on that axis alone.
370
+ PikkuFunc extends PikkuFunction<In, Out, RequiredWires, any> | PikkuFunctionSessionless<In, Out, RequiredWires, any, any> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires>,
357
371
  InputSchema extends StandardSchemaV1 | undefined = undefined,
358
372
  OutputSchema extends StandardSchemaV1 | undefined = undefined
359
373
  > = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware, InputSchema, OutputSchema, ScopeId>
360
374
 
375
+ /**
376
+ * {@link PikkuFunctionConfig} for a function that runs without a session.
377
+ * Has no \`scopes\`: an anonymous caller holds none, so none can ever be met.
378
+ */
379
+ export type PikkuFunctionSessionlessConfig<
380
+ In = unknown,
381
+ Out = unknown,
382
+ RequiredWires extends keyof PikkuWire = never,
383
+ PikkuFunc extends PikkuFunctionSessionless<In, Out, RequiredWires, any> = PikkuFunctionSessionless<In, Out, RequiredWires>,
384
+ InputSchema extends StandardSchemaV1 | undefined = undefined,
385
+ OutputSchema extends StandardSchemaV1 | undefined = undefined
386
+ > = CorePikkuSessionlessFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware, InputSchema, OutputSchema>
387
+
361
388
  /**
362
389
  * Configuration object for Pikku functions with Zod schema validation.
363
390
  * Use this when you want to define input/output schemas using Zod.
@@ -479,7 +506,8 @@ export const pikkuListFunc = <
479
506
  */
480
507
  /**
481
508
  * Schema-overload variant for pikkuSessionlessFunc. Derived from
482
- * CorePikkuFunctionConfig to stay in sync with the generic-typed config.
509
+ * CorePikkuSessionlessFunctionConfig to stay in sync with the generic-typed
510
+ * config — so it has no \`scopes\` either.
483
511
  */
484
512
  export type PikkuFunctionSessionlessConfigWithSchema<
485
513
  InputSchema extends StandardSchemaV1 | undefined = undefined,
@@ -487,7 +515,7 @@ export type PikkuFunctionSessionlessConfigWithSchema<
487
515
  RequiredWires extends keyof PikkuWire = never,
488
516
  RequiredServices extends SecretlessServices<Services> = WiredServices
489
517
  > = Omit<
490
- CorePikkuFunctionConfig<
518
+ CorePikkuSessionlessFunctionConfig<
491
519
  PikkuFunctionSessionless<SchemaInferred<InputSchema>, SchemaInferred<OutputSchema>, RequiredWires, RequiredServices>
492
520
  >,
493
521
  'func' | 'input' | 'output' | 'permissions' | 'approvalDescription'
@@ -542,7 +570,7 @@ export function pikkuSessionlessFunc<
542
570
  export function pikkuSessionlessFunc<In, Out = unknown, RequiredServices extends SecretlessServices<Services> = WiredServices>(
543
571
  func:
544
572
  | PikkuFunctionSessionless<In, Out, 'session' | 'rpc', RequiredServices>
545
- | PikkuFunctionConfig<In, Out, 'session' | 'rpc', PikkuFunctionSessionless<In, Out, 'session' | 'rpc', RequiredServices>>
573
+ | PikkuFunctionSessionlessConfig<In, Out, 'session' | 'rpc', PikkuFunctionSessionless<In, Out, 'session' | 'rpc', RequiredServices>>
546
574
  ): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
547
575
  export function pikkuSessionlessFunc(func: any) {
548
576
  return typeof func === 'function' ? { func } : func
@@ -567,7 +595,7 @@ export function pikkuSessionlessFunc(func: any) {
567
595
  export const pikkuVoidFunc = (
568
596
  func:
569
597
  | PikkuFunctionSessionless<void, void, 'session' | 'rpc'>
570
- | PikkuFunctionConfig<void, void, 'session' | 'rpc'>
598
+ | PikkuFunctionSessionlessConfig<void, void, 'session' | 'rpc'>
571
599
  ) => {
572
600
  return typeof func === 'function' ? { func } : func
573
601
  }
@@ -1 +1 @@
1
- export declare const pikkuGateway: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuGateway: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuGraphWirings: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuGraphWirings: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuHTTPMap: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuHTTPMap: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuCommandHTTP: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuCommandHTTP: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -42,7 +42,7 @@ export const pikkuCommandHTTP = pikkuSessionlessFunc({
42
42
  const importStatement = supportsImportAttributes
43
43
  ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
44
44
  : `import metaData from '${jsonImportPath}'`;
45
- await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState } from '@pikku/core/internal'\nimport type { HTTPWiringsMeta } from '@pikku/core/http'\n${importStatement}\npikkuState(null, 'http', 'meta', metaData as HTTPWiringsMeta)`);
45
+ await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState } from '@pikku/core/ecosystem'\nimport type { HTTPWiringsMeta } from '@pikku/core/http'\n${importStatement}\npikkuState(null, 'http', 'meta', metaData as HTTPWiringsMeta)`);
46
46
  return true;
47
47
  },
48
48
  middleware: [
@@ -1 +1 @@
1
- export declare const pikkuHTTPTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuHTTPTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuOpenAPI: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuOpenAPI: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuHTTP: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
1
+ export declare const pikkuHTTP: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -18,7 +18,7 @@ export const pikkuHTTP = pikkuSessionlessFunc({
18
18
  const importStatement = supportsImportAttributes
19
19
  ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
20
20
  : `import metaData from '${jsonImportPath}'`;
21
- await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState } from '@pikku/core/internal'\nimport type { HTTPWiringsMeta } from '@pikku/core/http'\n${importStatement}\npikkuState(null, 'http', 'meta', metaData as HTTPWiringsMeta)`);
21
+ await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState } from '@pikku/core/ecosystem'\nimport type { HTTPWiringsMeta } from '@pikku/core/http'\n${importStatement}\npikkuState(null, 'http', 'meta', metaData as HTTPWiringsMeta)`);
22
22
  return true;
23
23
  },
24
24
  middleware: [