@pikku/cli 0.12.93 → 0.12.99

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 (346) hide show
  1. package/console-app/assets/abnfDiagram-VRR7QNED-CytV-CG1.js +1 -0
  2. package/console-app/assets/arc-C5PvmnaA.js +1 -0
  3. package/console-app/assets/architecture-TIHT7OUA-C1_ScvPX.js +1 -0
  4. package/console-app/assets/architectureDiagram-ZJ3FMSHR-CJ2xb7C-.js +36 -0
  5. package/console-app/assets/array-BifhSqXX.js +1 -0
  6. package/console-app/assets/blockDiagram-677ZJIJ3-CCecrBrk.js +132 -0
  7. package/console-app/assets/c4Diagram-LMCZKHZV-CBnpukvQ.js +10 -0
  8. package/console-app/assets/channel-CwDOkXGI.js +1 -0
  9. package/console-app/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  10. package/console-app/assets/chunk-32BRIVSS-D8qWWZRQ.js +1 -0
  11. package/console-app/assets/chunk-52WLFC77-BEpXHMsp.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-DsHUMkOp.js +1 -0
  15. package/console-app/assets/chunk-EX3LRPZG-mM7TjVx9.js +231 -0
  16. package/console-app/assets/chunk-FWX5IMBZ-CndRAn18.js +2 -0
  17. package/console-app/assets/chunk-HOUHSVGY-D1kT8umn.js +1 -0
  18. package/console-app/assets/chunk-ICXQ74PX-CeSaGyro.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-CaZOCHYr.js +88 -0
  22. package/console-app/assets/chunk-OGEWGWER-CnB1CsPt.js +1 -0
  23. package/console-app/assets/chunk-PUDLZKDR-BbGulHJm.js +156 -0
  24. package/console-app/assets/chunk-Q4XR5HBZ-BywwzeeR.js +70 -0
  25. package/console-app/assets/chunk-RYQCIY6F-CV0R1Adv.js +1 -0
  26. package/console-app/assets/chunk-V7JOEXUC-DGFaAWzB.js +206 -0
  27. package/console-app/assets/chunk-VAUOI2AC-DxPUd8Yb.js +1 -0
  28. package/console-app/assets/chunk-VR4S4FIN-D4-UaW_J.js +1 -0
  29. package/console-app/assets/chunk-WYO6CB5R-D_TFN0d9.js +127 -0
  30. package/console-app/assets/chunk-XXDRQBXY-BzVuweA_.js +1 -0
  31. package/console-app/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  32. package/console-app/assets/chunk-ZGVPDNZ5-C6hdkGQb.js +62 -0
  33. package/console-app/assets/chunk-ZIRB5QZD-H-kepumB.js +32 -0
  34. package/console-app/assets/classDiagram-OUVF2IWQ-CTYJkTT0.js +1 -0
  35. package/console-app/assets/classDiagram-v2-EOCWNBFH-CTYJkTT0.js +1 -0
  36. package/console-app/assets/cose-bilkent-JH36ORCC-B6ZPxN6v.js +1 -0
  37. package/console-app/assets/cynefin-VYW2F7L2-D_nmxNz_.js +1 -0
  38. package/console-app/assets/cynefinDiagram-TSTJHNR4-CHy5QN0S.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-DYfukM34.js +4 -0
  42. package/console-app/assets/defaultLocale-C8Fc0cco.js +1 -0
  43. package/console-app/assets/diagram-FQU43EPY-Dgb9TPSB.js +3 -0
  44. package/console-app/assets/diagram-G47NLZAW-CnFNZs9Z.js +24 -0
  45. package/console-app/assets/diagram-NH7WQ7WH-DN7h2DU-.js +24 -0
  46. package/console-app/assets/diagram-OA4YK3LP-RLaQaNtK.js +30 -0
  47. package/console-app/assets/diagram-WEI45ONY-DxHWhVGd.js +41 -0
  48. package/console-app/assets/dist-BaJNIo4I.js +1 -0
  49. package/console-app/assets/ebnfDiagram-CCIWWBDH-UN3Z81-l.js +1 -0
  50. package/console-app/assets/erDiagram-Q63AITRT-C9lGAY3i.js +85 -0
  51. package/console-app/assets/eventmodeling-45OFAUF4-Dc5wNSSK.js +1 -0
  52. package/console-app/assets/flowDiagram-23GEKE2U-zPyGHMi4.js +1 -0
  53. package/console-app/assets/ganttDiagram-NO4QXBWP-CvBjBcdK.js +292 -0
  54. package/console-app/assets/gitGraph-TEB2WS4Q-Cs5Z9jMo.js +1 -0
  55. package/console-app/assets/gitGraphDiagram-IHSO6WYX-B0i_IJ5r.js +106 -0
  56. package/console-app/assets/graphlib-B8gBHxth.js +1 -0
  57. package/console-app/assets/{index-CmAplHjZ.js → index-71U8EEj7.js} +155 -153
  58. package/console-app/assets/{index-BYj7ZbUU.css → index-BXMjqLQ5.css} +1 -1
  59. package/console-app/assets/info-DKCQHKI2-DHL0afNl.js +1 -0
  60. package/console-app/assets/infoDiagram-FWYZ7A6U-CBWykodX.js +2 -0
  61. package/console-app/assets/init-D6jRqBbL.js +1 -0
  62. package/console-app/assets/ishikawaDiagram-FXEZZL3T-DM377eW_.js +70 -0
  63. package/console-app/assets/journeyDiagram-5HDEW3XC-BpX_-Cns.js +139 -0
  64. package/console-app/assets/kanban-definition-HUTT4EX6-D3xFsQkO.js +89 -0
  65. package/console-app/assets/katex-Vhh-h91d.js +257 -0
  66. package/console-app/assets/line-CTSKHTE0.js +1 -0
  67. package/console-app/assets/linear-R5GlBvXT.js +1 -0
  68. package/console-app/assets/map-DsCK-0Cs.js +1 -0
  69. package/console-app/assets/mermaid-parser.core-CkHk4BPi.js +7 -0
  70. package/console-app/assets/mermaid.core-CcjGXuV6.js +11 -0
  71. package/console-app/assets/mindmap-definition-LN4V7U3C-CtolazqQ.js +96 -0
  72. package/console-app/assets/ordinal-hYBb2elL.js +1 -0
  73. package/console-app/assets/packet-7NZHBO7P-BxSOj_Ny.js +1 -0
  74. package/console-app/assets/path-BWPyau1x.js +1 -0
  75. package/console-app/assets/pegDiagram-2B236MQR-BNsMtxsM.js +1 -0
  76. package/console-app/assets/pie-RZYD4A2V-BbkKQBA5.js +1 -0
  77. package/console-app/assets/pieDiagram-ENE6RG2P-BAZLIz2f.js +39 -0
  78. package/console-app/assets/quadrantDiagram-ABIIQ3AL-Dpvn-1Fs.js +7 -0
  79. package/console-app/assets/radar-I7S5WNFK-B-uKXIAH.js +1 -0
  80. package/console-app/assets/railroad-3IZDKUUU-BHXXK04t.js +1 -0
  81. package/console-app/assets/railroad-abnf-AHOZXSZD-tXSQaBvY.js +1 -0
  82. package/console-app/assets/railroad-ebnf-EBAXGLYW-DG3aohR0.js +1 -0
  83. package/console-app/assets/railroad-peg-LSFZ7HO6-DY_gBA-x.js +1 -0
  84. package/console-app/assets/railroadDiagram-RFXS5EU6-DfUApEQj.js +1 -0
  85. package/console-app/assets/requirementDiagram-TGXJPOKE-B2zX0jqo.js +84 -0
  86. package/console-app/assets/rough.esm-CSKSodPl.js +1 -0
  87. package/console-app/assets/sankeyDiagram-HTMAVEWB-CbQ2zc7z.js +40 -0
  88. package/console-app/assets/sequenceDiagram-DBY2YBRQ-BLT8PXI_.js +162 -0
  89. package/console-app/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
  90. package/console-app/assets/src-BLuPUFWW.js +1 -0
  91. package/console-app/assets/stateDiagram-2N3HPSRC-BvEyVp85.js +1 -0
  92. package/console-app/assets/stateDiagram-v2-6OUMAXLB-RGKS9iU4.js +1 -0
  93. package/console-app/assets/swimlanes-5IMT3BWC-1AZ459s6.js +2 -0
  94. package/console-app/assets/swimlanesDiagram-G3AALYLV-Ck_0-rfN.js +8 -0
  95. package/console-app/assets/timeline-definition-FHXFAJF6-dLuvH4s2.js +120 -0
  96. package/console-app/assets/treeView-QDETBFTQ-xL2msjo2.js +1 -0
  97. package/console-app/assets/treemap-6X3UGDF4-C98ichVP.js +1 -0
  98. package/console-app/assets/vennDiagram-L72KCM5P-HbUmidhv.js +34 -0
  99. package/console-app/assets/wardley-OPB4EBWU-C4gJS-m2.js +1 -0
  100. package/console-app/assets/wardleyDiagram-EHGQE667-B7b-LB02.js +78 -0
  101. package/console-app/assets/xychartDiagram-FW5EYKEG-Cm03zUGy.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 +13 -15
  109. package/dist/.pikku/cli/pikku-cli-channel.js +62 -8
  110. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +14 -4
  111. package/dist/.pikku/cli/pikku-cli-client.gen.js +55 -18
  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 +1 -1
  117. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +136 -10
  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 +64 -23
  124. package/dist/.pikku/function/pikku-function-types.gen.js +27 -1
  125. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  126. package/dist/.pikku/function/pikku-functions-meta.gen.json +171 -37
  127. package/dist/.pikku/function/pikku-functions.gen.js +13 -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 +1 -1
  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 +1 -1
  148. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +8 -1
  149. package/dist/.pikku/scenarios/pikku-scenario-functions-meta.gen.js +1 -1
  150. package/dist/.pikku/scenarios/pikku-scenario-functions.gen.d.ts +1 -1
  151. package/dist/.pikku/scenarios/pikku-scenario-wirings-meta.gen.js +1 -1
  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 +15 -5
  158. package/dist/.pikku/schemas/schemas/DbResetInput.schema.json +1 -1
  159. package/dist/.pikku/schemas/schemas/PersonaRunInput.schema.json +1 -0
  160. package/dist/.pikku/schemas/schemas/PersonaSyncInput.schema.json +1 -0
  161. package/dist/.pikku/schemas/schemas/PikkuPersonasInput.schema.json +1 -0
  162. package/dist/.pikku/schemas/schemas/PikkuRolesInput.schema.json +1 -0
  163. package/dist/.pikku/schemas/schemas/PikkuVirtualUserFunctionsOutput.schema.json +1 -0
  164. package/dist/.pikku/schemas/schemas/RolesPruneInput.schema.json +1 -0
  165. package/dist/.pikku/scopes/pikku-personas-meta.gen.json +1 -0
  166. package/dist/.pikku/scopes/pikku-personas.gen.d.ts +36 -0
  167. package/dist/.pikku/scopes/pikku-personas.gen.js +17 -0
  168. package/dist/.pikku/scopes/pikku-roles-meta.gen.json +1 -0
  169. package/dist/.pikku/scopes/pikku-roles.gen.d.ts +30 -0
  170. package/dist/.pikku/scopes/pikku-roles.gen.js +18 -0
  171. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +4 -2
  172. package/dist/.pikku/scopes/pikku-scope-types.gen.js +3 -2
  173. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +1 -1
  174. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +2 -2
  175. package/dist/.pikku/secrets/pikku-secret-types.gen.js +2 -2
  176. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  177. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  178. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  179. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  180. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +2 -2
  181. package/dist/.pikku/variables/pikku-variable-types.gen.js +2 -2
  182. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  183. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  184. package/dist/.pikku/workflow/meta/allWorkflow.gen.json +46 -16
  185. package/dist/.pikku/workflow/pikku-personas.gen.d.ts +15 -0
  186. package/dist/.pikku/workflow/pikku-personas.gen.js +17 -0
  187. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +101 -24
  188. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +22 -2
  189. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  190. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  191. package/dist/bin/pikku-bin.mjs +2 -2
  192. package/dist/bin/pikku.js +0 -0
  193. package/dist/src/cli.wiring.js +108 -8
  194. package/dist/src/deploy/analyzer/analyzer.js +14 -0
  195. package/dist/src/deploy/analyzer/manifest.d.ts +11 -0
  196. package/dist/src/fabric/functions/validate.function.js +77 -177
  197. package/dist/src/functions/commands/all.d.ts +1 -1
  198. package/dist/src/functions/commands/bootstrap.d.ts +1 -1
  199. package/dist/src/functions/commands/bootstrap.js +3 -0
  200. package/dist/src/functions/commands/db-audit.js +1 -1
  201. package/dist/src/functions/commands/db-baseline.js +1 -1
  202. package/dist/src/functions/commands/db-check.js +6 -5
  203. package/dist/src/functions/commands/db-codegen.js +1 -1
  204. package/dist/src/functions/commands/db-generate.js +1 -1
  205. package/dist/src/functions/commands/db-migrate.js +1 -1
  206. package/dist/src/functions/commands/db-reset.d.ts +15 -1
  207. package/dist/src/functions/commands/db-reset.js +18 -6
  208. package/dist/src/functions/commands/db-shared.d.ts +14 -0
  209. package/dist/src/functions/commands/deploy-info.d.ts +1 -1
  210. package/dist/src/functions/commands/dev-ai-runner.d.ts +16 -4
  211. package/dist/src/functions/commands/dev-ai-runner.js +63 -29
  212. package/dist/src/functions/commands/dev.js +10 -5
  213. package/dist/src/functions/commands/enable.d.ts +8 -8
  214. package/dist/src/functions/commands/enable.js +15 -19
  215. package/dist/src/functions/commands/{scenario-environment.d.ts → environment.d.ts} +9 -6
  216. package/dist/src/functions/commands/{scenario-environment.js → environment.js} +5 -4
  217. package/dist/src/functions/commands/new-addon.js +14 -14
  218. package/dist/src/functions/commands/persona-sync.d.ts +33 -0
  219. package/dist/src/functions/commands/persona-sync.js +151 -0
  220. package/dist/src/functions/commands/persona.d.ts +58 -0
  221. package/dist/src/functions/commands/persona.js +215 -0
  222. package/dist/src/functions/commands/roles-audit.d.ts +1 -0
  223. package/dist/src/functions/commands/roles-audit.js +37 -0
  224. package/dist/src/functions/commands/roles-prune.d.ts +16 -0
  225. package/dist/src/functions/commands/roles-prune.js +52 -0
  226. package/dist/src/functions/commands/roles-shared.d.ts +40 -0
  227. package/dist/src/functions/commands/roles-shared.js +77 -0
  228. package/dist/src/functions/commands/scenario-browser.d.ts +3 -3
  229. package/dist/src/functions/commands/scenario-browser.js +1 -1
  230. package/dist/src/functions/commands/scenario-ladder.d.ts +44 -2
  231. package/dist/src/functions/commands/scenario-ladder.js +52 -3
  232. package/dist/src/functions/commands/scenario.d.ts +7 -0
  233. package/dist/src/functions/commands/scenario.js +82 -18
  234. package/dist/src/functions/commands/scopes-shared.d.ts +12 -0
  235. package/dist/src/functions/commands/scopes-shared.js +2 -2
  236. package/dist/src/functions/commands/serve.js +8 -4
  237. package/dist/src/functions/commands/versions-check.js +3 -3
  238. package/dist/src/functions/commands/virtual-user-formatter.d.ts +30 -0
  239. package/dist/src/functions/commands/virtual-user-formatter.js +65 -0
  240. package/dist/src/functions/db/annotation-parser.d.ts +14 -0
  241. package/dist/src/functions/db/annotation-parser.js +50 -2
  242. package/dist/src/functions/db/better-auth-schema.js +2 -1
  243. package/dist/src/functions/db/db-codegen.d.ts +12 -0
  244. package/dist/src/functions/db/db-codegen.js +149 -16
  245. package/dist/src/functions/db/local-db.d.ts +87 -6
  246. package/dist/src/functions/db/local-db.js +239 -35
  247. package/dist/src/functions/db/sqlite/dev-seed.d.ts +12 -0
  248. package/dist/src/functions/db/sqlite/dev-seed.js +23 -0
  249. package/dist/src/functions/db/sqlite/sqlite-runtime-bun.js +1 -1
  250. package/dist/src/functions/validate/bootstrap-checks.d.ts +19 -0
  251. package/dist/src/functions/validate/bootstrap-checks.js +90 -0
  252. package/dist/src/functions/validate/persona-checks.d.ts +24 -0
  253. package/dist/src/functions/validate/persona-checks.js +136 -0
  254. package/dist/src/functions/validate/scenario-file-checks.d.ts +17 -0
  255. package/dist/src/functions/validate/scenario-file-checks.js +123 -0
  256. package/dist/src/functions/validate/shared-checks.d.ts +59 -0
  257. package/dist/src/functions/validate/shared-checks.js +311 -0
  258. package/dist/src/functions/validate/workspace-validate.d.ts +1 -2
  259. package/dist/src/functions/validate/workspace-validate.js +4 -196
  260. package/dist/src/functions/wirings/ai-agent/pikku-command-public-agent.js +2 -1
  261. package/dist/src/functions/wirings/ai-agent/serialize-public-agent.js +1 -0
  262. package/dist/src/functions/wirings/auth/serialize-auth-gen.d.ts +2 -2
  263. package/dist/src/functions/wirings/auth/serialize-auth-gen.js +24 -9
  264. package/dist/src/functions/wirings/auth/serialize-auth-types.d.ts +3 -1
  265. package/dist/src/functions/wirings/auth/serialize-auth-types.js +3 -1
  266. package/dist/src/functions/wirings/channels/pikku-channels.d.ts +1 -1
  267. package/dist/src/functions/wirings/channels/serialize-typed-channel-map.js +10 -2
  268. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +9 -4
  269. package/dist/src/functions/wirings/cli/serialize-channel-cli-client.d.ts +7 -3
  270. package/dist/src/functions/wirings/cli/serialize-channel-cli-client.js +64 -28
  271. package/dist/src/functions/wirings/cli/serialize-channel-cli.js +63 -6
  272. package/dist/src/functions/wirings/cli/serialize-cli-entrypoint-guard.d.ts +12 -0
  273. package/dist/src/functions/wirings/cli/serialize-cli-entrypoint-guard.js +28 -0
  274. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.js +4 -1
  275. package/dist/src/functions/wirings/console/serialize-console-functions.js +5 -8
  276. package/dist/src/functions/wirings/functions/serialize-addon-types.js +1 -1
  277. package/dist/src/functions/wirings/functions/serialize-function-types.js +106 -32
  278. package/dist/src/functions/wirings/middleware/serialize-middleware-imports.js +25 -9
  279. package/dist/src/functions/wirings/package/pikku-command-package-types.d.ts +3 -3
  280. package/dist/src/functions/wirings/package/serialize-package-types.js +5 -3
  281. package/dist/src/functions/wirings/personas/personas-secrets-file.d.ts +8 -0
  282. package/dist/src/functions/wirings/personas/personas-secrets-file.js +9 -0
  283. package/dist/src/functions/wirings/personas/pikku-command-personas.d.ts +7 -0
  284. package/dist/src/functions/wirings/personas/pikku-command-personas.js +57 -0
  285. package/dist/src/functions/wirings/personas/serialize-personas-secrets.d.ts +16 -0
  286. package/dist/src/functions/wirings/personas/serialize-personas-secrets.js +34 -0
  287. package/dist/src/functions/wirings/personas/serialize-personas-types.d.ts +18 -0
  288. package/dist/src/functions/wirings/personas/serialize-personas-types.js +76 -0
  289. package/dist/src/functions/wirings/queue/serialize-queue-map.js +2 -1
  290. package/dist/src/functions/wirings/queue/serialize-queue-wrapper.js +2 -1
  291. package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.js +2 -1
  292. package/dist/src/functions/wirings/roles/pikku-command-roles.d.ts +7 -0
  293. package/dist/src/functions/wirings/roles/pikku-command-roles.js +33 -0
  294. package/dist/src/functions/wirings/roles/serialize-roles-types.d.ts +14 -0
  295. package/dist/src/functions/wirings/roles/serialize-roles-types.js +55 -0
  296. package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.js +2 -1
  297. package/dist/src/functions/wirings/scenarios/register-scenario-instrumentation.d.ts +3 -3
  298. package/dist/src/functions/wirings/scenarios/register-scenario-instrumentation.js +3 -3
  299. package/dist/src/functions/wirings/scopes/serialize-scopes-types.d.ts +1 -1
  300. package/dist/src/functions/wirings/scopes/serialize-scopes-types.js +1 -1
  301. package/dist/src/functions/wirings/user-admin/pikku-command-user-admin-functions.js +2 -1
  302. package/dist/src/functions/wirings/user-admin/serialize-user-admin-functions.js +2 -2
  303. package/dist/src/functions/wirings/virtual-user/pikku-command-virtual-user-functions.d.ts +1 -0
  304. package/dist/src/functions/wirings/virtual-user/pikku-command-virtual-user-functions.js +42 -0
  305. package/dist/src/functions/wirings/virtual-user/serialize-virtual-user-functions.d.ts +28 -0
  306. package/dist/src/functions/wirings/virtual-user/serialize-virtual-user-functions.js +439 -0
  307. package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.js +2 -1
  308. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +13 -13
  309. package/dist/src/functions/wirings/workflow/serialize-personas.d.ts +10 -0
  310. package/dist/src/functions/wirings/workflow/serialize-personas.js +46 -0
  311. package/dist/src/functions/wirings/workflow/serialize-scenario-step-map.js +13 -4
  312. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +170 -40
  313. package/dist/src/functions/workflows/all.workflow.js +55 -16
  314. package/dist/src/server/bun-server-runner.d.ts +2 -2
  315. package/dist/src/server/bun-server-runner.js +5 -1
  316. package/dist/src/server/content-signing-jwt.d.ts +13 -0
  317. package/dist/src/server/content-signing-jwt.js +51 -0
  318. package/dist/src/server/dev-server-runner.interface.d.ts +10 -2
  319. package/dist/src/server/node-server-runner.d.ts +2 -2
  320. package/dist/src/server/node-server-runner.js +2 -1
  321. package/dist/src/services/cli-logger.service.d.ts +28 -16
  322. package/dist/src/services/cli-logger.service.js +25 -16
  323. package/dist/src/services.d.ts +3 -1
  324. package/dist/src/services.js +10 -1
  325. package/dist/src/utils/file-import-path.js +9 -0
  326. package/dist/src/utils/pikku-cli-config.js +52 -2
  327. package/dist/src/utils/resolve-personas.d.ts +27 -0
  328. package/dist/src/utils/resolve-personas.js +35 -0
  329. package/dist/src/utils/resolve-scaffold-feature.d.ts +19 -0
  330. package/dist/src/utils/resolve-scaffold-feature.js +49 -0
  331. package/dist/tsconfig.tsbuildinfo +1 -1
  332. package/package.json +20 -17
  333. package/dist/.pikku/schemas/schemas/BootstrapInput.schema.json +0 -1
  334. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +0 -1
  335. package/dist/.pikku/schemas/schemas/ScenarioRunInput.schema.json +0 -1
  336. package/dist/.pikku/workflow/pikku-scenario-actors.gen.d.ts +0 -19
  337. package/dist/.pikku/workflow/pikku-scenario-actors.gen.js +0 -17
  338. package/dist/src/functions/commands/db-seed.d.ts +0 -1
  339. package/dist/src/functions/commands/db-seed.js +0 -24
  340. package/dist/src/functions/db/sqlite/seed.d.ts +0 -11
  341. package/dist/src/functions/db/sqlite/seed.js +0 -22
  342. package/dist/src/functions/wirings/workflow/serialize-scenario-actors.d.ts +0 -2
  343. package/dist/src/functions/wirings/workflow/serialize-scenario-actors.js +0 -40
  344. package/dist/src/utils/resolve-scenario-actors.d.ts +0 -23
  345. package/dist/src/utils/resolve-scenario-actors.js +0 -74
  346. /package/dist/.pikku/schemas/schemas/{DbSeedInput.schema.json → RolesAuditInput.schema.json} +0 -0
@@ -16,6 +16,18 @@ export interface CodegenOptions {
16
16
  */
17
17
  enumsFile?: string;
18
18
  camelCase?: boolean;
19
+ /**
20
+ * Schema whose qualifier is dropped from the `DB` keys and the interface
21
+ * names, so `app.user` reads as `user`/`User` rather than `app.user`/
22
+ * `AppUser`. Tables in any other schema stay fully qualified. Omitting it
23
+ * qualifies everything, which is the safe default for a project spanning
24
+ * schemas.
25
+ *
26
+ * The key IS what Kysely puts in the SQL, so only set this for a schema the
27
+ * connection's `search_path` resolves — otherwise every query compiles and
28
+ * then fails to find the table at runtime.
29
+ */
30
+ defaultSchema?: string;
19
31
  rootDir?: string;
20
32
  /** DB dialect — drives real-type-aware date typing. Defaults to 'sqlite'. */
21
33
  dialect?: Dialect;
@@ -33,6 +33,16 @@ function snakeToPascal(name) {
33
33
  .map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())
34
34
  .join('');
35
35
  }
36
+ /**
37
+ * Drop `defaultSchema`'s qualifier from a table name, leaving every other
38
+ * schema qualified. `app.user` → `user` when the default schema is `app`.
39
+ */
40
+ function stripDefaultSchema(name, defaultSchema) {
41
+ if (!defaultSchema)
42
+ return name;
43
+ const prefix = `${defaultSchema}.`;
44
+ return name.startsWith(prefix) ? name.slice(prefix.length) : name;
45
+ }
36
46
  function tableToInterfaceName(name) {
37
47
  return name
38
48
  .split('.')
@@ -105,10 +115,54 @@ function insertBase(annotation, col) {
105
115
  return 'unknown';
106
116
  return mapType(col.type);
107
117
  }
108
- function columnTypeExpression(col, annotation, classification) {
118
+ /**
119
+ * The brand a `form` puts on a column's INSERT and UPDATE types.
120
+ *
121
+ * `plain` maps to null rather than to an identity wrapper: an unbranded column
122
+ * is the default every existing project already has, and emitting a wrapper for
123
+ * it would churn every generated file to say nothing.
124
+ */
125
+ /** The erasable sensitivity brand on a column's SELECT type. */
126
+ function classificationBrand(classification) {
127
+ return classification === 'secret'
128
+ ? 'Secret'
129
+ : classification === 'pii'
130
+ ? 'Pii'
131
+ : 'Private';
132
+ }
133
+ function formBrand(form) {
134
+ switch (form) {
135
+ case 'wrapped':
136
+ return 'WrappedValue';
137
+ case 'sealed':
138
+ return 'SealedValue';
139
+ case 'hashed':
140
+ return 'HashedValue';
141
+ default:
142
+ return null;
143
+ }
144
+ }
145
+ function columnTypeExpression(col, annotation, classification, form) {
109
146
  const nullable = !col.notNull && !col.pk;
110
147
  const isAutoInt = col.pk && mapType(col.type) === 'number';
111
148
  const isOptionalInsert = col.defaultValue !== null || isAutoInt || Boolean(col.generated);
149
+ // A declared `form` supersedes both branches below, because it constrains the
150
+ // side neither of them touches: what may be WRITTEN. The caller only reaches
151
+ // here with a form once it has confirmed the column resolves to `string`.
152
+ const brand = formBrand(form);
153
+ if (brand) {
154
+ // The two brands compose — `Secret<WrappedValue>` is still structurally
155
+ // `{ __classification__?: 'secret' }`, so the inspector's PKU910 output
156
+ // check keeps working, while a row read back is already a `WrappedValue`
157
+ // and flows into rewrap/re-seal calls without a cast.
158
+ const selectT = classification === 'public'
159
+ ? brand
160
+ : `${classificationBrand(classification)}<${brand}>`;
161
+ const insertT = `${brand}${isOptionalInsert ? ' | undefined' : ''}`;
162
+ return nullable
163
+ ? `ColumnType<${selectT} | null, ${insertT} | null, ${brand} | null>`
164
+ : `ColumnType<${selectT}, ${insertT}, ${brand}>`;
165
+ }
112
166
  if (classification === 'public') {
113
167
  const wrap = (inner) => isOptionalInsert ? `Generated<${inner}>` : inner;
114
168
  if (annotation?.kind === 'bool') {
@@ -139,11 +193,7 @@ function columnTypeExpression(col, annotation, classification) {
139
193
  return `Generated<${base}${nullable ? ' | null' : ''}>`;
140
194
  return nullable ? `${base} | null` : base;
141
195
  }
142
- const B = classification === 'secret'
143
- ? 'Secret'
144
- : classification === 'pii'
145
- ? 'Pii'
146
- : 'Private';
196
+ const B = classificationBrand(classification);
147
197
  const sBase = selectBase(annotation, col);
148
198
  const iBase = insertBase(annotation, col);
149
199
  const selectT = nullable ? `${B}<${sBase}> | null` : `${B}<${sBase}>`;
@@ -159,7 +209,7 @@ function bareTableName(name) {
159
209
  return dot >= 0 ? name.slice(dot + 1) : name;
160
210
  }
161
211
  function emitInterface(table, camelCase, explicitAnnotations, dialect, enumByName, formatHints, warnings) {
162
- const ifaceName = tableToInterfaceName(table.name);
212
+ const ifaceName = tableToInterfaceName(table.displayName ?? table.name);
163
213
  const bare = bareTableName(table.name);
164
214
  const tableCols = explicitAnnotations[bare] ?? {};
165
215
  const fields = table.columns
@@ -243,7 +293,44 @@ function emitInterface(table, camelCase, explicitAnnotations, dialect, enumByNam
243
293
  }
244
294
  }
245
295
  const classification = ann?.classification ?? 'private';
246
- const type = columnTypeExpression(col, typeAnn, classification);
296
+ // A form brands the column with a nominal string subtype, so it only
297
+ // means anything where the resolved type IS a string. On a bytea/blob or
298
+ // a coerced column the brand would not compile, so skip it and say why —
299
+ // a secret that needs wrapping in a non-text column needs the column
300
+ // migrated to text first, which is a schema decision, not a codegen one.
301
+ let form = ann?.form;
302
+ if (form && form !== 'plain') {
303
+ const base = selectBase(typeAnn, col);
304
+ if (base !== 'string') {
305
+ warnings.push({
306
+ severity: 'warn',
307
+ code: ErrorCode.DB_FORM_ON_NON_STRING,
308
+ message: `Column "${bare}.${col.name}": form '${form}' ignored — its resolved ` +
309
+ `type is ${base}, not string. Ciphertext and digests are text; ` +
310
+ `migrate the column or drop the form.`,
311
+ });
312
+ form = undefined;
313
+ }
314
+ }
315
+ // The point of the axis: a credential the application can replay is one
316
+ // that a database read alone hands to whoever has it. Warn rather than
317
+ // fail, because every project predating `form` has such columns and a
318
+ // hard error would break them all on the next migrate — `pikku db
319
+ // --fail-on-warn` is how a project opts into the ratchet.
320
+ // Checks what was DECLARED, not what survived the string test above, so a
321
+ // form rejected for a non-text column reports that one reason rather than
322
+ // two, and an explicit `form: 'plain'` is the acknowledgement that ends it.
323
+ if (classification === 'secret' && ann?.form === undefined) {
324
+ warnings.push({
325
+ severity: 'warn',
326
+ code: ErrorCode.DB_SECRET_COLUMN_STORED_PLAIN,
327
+ message: `Column "${bare}.${col.name}" is classified secret but stored in the clear. ` +
328
+ `Declare how it is held in db/annotations.ts — form: 'hashed' | 'wrapped' | ` +
329
+ `'sealed' — or form: 'plain' to state that reading the row is meant to ` +
330
+ `yield a usable credential.`,
331
+ });
332
+ }
333
+ const type = columnTypeExpression(col, typeAnn, classification, form);
247
334
  const safeName = /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(fieldName)
248
335
  ? fieldName
249
336
  : JSON.stringify(fieldName);
@@ -263,8 +350,12 @@ function emitManifest(tables, explicitAnnotations) {
263
350
  const classification = ann?.classification ?? 'private';
264
351
  const strategy = ann?.anonymize ?? null;
265
352
  const strategyLiteral = strategy === null ? 'null' : `'${strategy}'`;
353
+ // Emitted only when declared. An audit reading this manifest needs to
354
+ // tell "held in the clear, stated" from "nobody has said yet", and a
355
+ // defaulted 'plain' would erase exactly that difference.
356
+ const formLiteral = ann?.form ? `, form: '${ann.form}'` : '';
266
357
  return (` ${JSON.stringify(col.name)}: ` +
267
- `{ classification: '${classification}', anonymize_strategy: ${strategyLiteral} }`);
358
+ `{ classification: '${classification}', anonymize_strategy: ${strategyLiteral}${formLiteral} }`);
268
359
  })
269
360
  .join(',\n');
270
361
  return ` ${JSON.stringify(table.name)}: {\n${colEntries}\n }`;
@@ -292,8 +383,14 @@ function emitManifest(tables, explicitAnnotations) {
292
383
  */
293
384
  function emitClassificationMap(tables) {
294
385
  const colEntry = [
295
- ` /** Privacy level. Defaults to 'private' when omitted. */`,
386
+ ` /** Privacy level — can the value leave the process? Defaults to 'private'.`,
387
+ ` * 'encrypted' is the legacy spelling of \`security: 'secret', form: 'wrapped'\`. */`,
296
388
  ` security?: 'public' | 'private' | 'pii' | 'secret' | 'encrypted'`,
389
+ ` /** How the value is held at rest, independent of \`security\`. A form other`,
390
+ ` * than 'plain' makes the column's INSERT/UPDATE type nominal, so only a`,
391
+ ` * real encrypt/seal/hash result can be written to it. Defaults to 'plain',`,
392
+ ` * which on a \`secret\` column is warned about (PKU483) until stated here. */`,
393
+ ` form?: 'plain' | 'hashed' | 'wrapped' | 'sealed'`,
297
394
  ` /** Anonymize strategy used by \`pikku db anonymize\`. */`,
298
395
  ` classification?: 'fake:email' | 'fake:name' | 'hash' | 'keep'`,
299
396
  ` /** Column kind override for codegen coercion + typing. */`,
@@ -419,24 +516,57 @@ export async function generateSchemaTypes(introspector, options) {
419
516
  }
420
517
  // ── schema.gen.ts ────────────────────────────────────────────────────────────
421
518
  const warnings = [];
519
+ // The name each table is known by in the generated types. With a
520
+ // `defaultSchema` that is the unqualified name — unless dropping the
521
+ // qualifier would make two tables share one name, in which case the table
522
+ // keeps its qualifier rather than silently shadowing the other.
523
+ const displayNames = new Map();
524
+ const claimedBy = new Map();
525
+ for (const t of tables) {
526
+ const stripped = stripDefaultSchema(t.name, options.defaultSchema);
527
+ const owner = claimedBy.get(stripped);
528
+ if (owner !== undefined && owner !== t.name) {
529
+ warnings.push({
530
+ severity: 'warn',
531
+ code: ErrorCode.DB_DEFAULT_SCHEMA_NAME_COLLISION,
532
+ message: `Dropping the "${options.defaultSchema}" qualifier would make "${t.name}" and ` +
533
+ `"${owner}" both "${stripped}". "${t.name}" keeps its qualifier.`,
534
+ });
535
+ displayNames.set(t.name, t.name);
536
+ continue;
537
+ }
538
+ claimedBy.set(stripped, t.name);
539
+ displayNames.set(t.name, stripped);
540
+ }
541
+ const displayName = (name) => displayNames.get(name) ?? name;
422
542
  const zodFormats = {};
423
543
  const interfaces = tables
424
- .map((t) => emitInterface(t, camelCase, explicitAnnotations, dialect, enumByName, zodFormats, warnings))
544
+ .map((t) => emitInterface({ ...t, displayName: displayName(t.name) }, camelCase, explicitAnnotations, dialect, enumByName, zodFormats, warnings))
425
545
  .join('\n\n');
426
546
  const dbEntries = tables
427
547
  .map((t) => {
428
- const tableKey = camelCase ? snakeToCamel(t.name) : t.name;
548
+ const name = displayName(t.name);
549
+ const tableKey = camelCase ? snakeToCamel(name) : name;
429
550
  const safe = /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(tableKey)
430
551
  ? tableKey
431
552
  : JSON.stringify(tableKey);
432
- return ` ${safe}: ${tableToInterfaceName(t.name)}`;
553
+ return ` ${safe}: ${tableToInterfaceName(name)}`;
433
554
  })
434
555
  .join('\n');
556
+ // The form brands are nominal (`unique symbol`), so unlike the structural
557
+ // `Private`/`Secret` aliases they CANNOT be re-declared here: a local
558
+ // declaration would be a distinct type, and the ciphertext `@pikku/core`
559
+ // hands back would not be assignable to the column it belongs in. Import the
560
+ // one true declaration, and only when a column actually uses it.
561
+ const usedFormBrands = ['WrappedValue', 'SealedValue', 'HashedValue'].filter((brand) => new RegExp(`\\b${brand}\\b`).test(interfaces));
435
562
  const schemaBody = [
436
563
  `// Generated by @pikku/cli — do not edit by hand.`,
437
564
  `// Run \`pikku db migrate\` to refresh.`,
438
565
  ``,
439
566
  `import type { ColumnType } from 'kysely'`,
567
+ ...(usedFormBrands.length > 0
568
+ ? [`import type { ${usedFormBrands.join(', ')} } from '@pikku/core'`]
569
+ : []),
440
570
  ``,
441
571
  `export type Generated<T> = T extends ColumnType<infer S, infer I, infer U>`,
442
572
  ` ? ColumnType<S, I | undefined, U>`,
@@ -470,9 +600,12 @@ export async function generateSchemaTypes(introspector, options) {
470
600
  // is a string in both dialects, so it needs no runtime coercion.
471
601
  const kind = tableCols[col.name]?.kind;
472
602
  if (kind && kind !== 'uuid') {
473
- if (!coercionMap[table.name])
474
- coercionMap[table.name] = {};
475
- coercionMap[table.name][col.name] = kind;
603
+ // Keyed by the name the query is written against, since that is what
604
+ // the runtime plugin sees on the Kysely node.
605
+ const key = displayName(table.name);
606
+ if (!coercionMap[key])
607
+ coercionMap[key] = {};
608
+ coercionMap[key][col.name] = kind;
476
609
  }
477
610
  }
478
611
  }
@@ -3,7 +3,7 @@ import { type MigrateResult } from './db-migrator.js';
3
3
  import type { ColumnInfo } from './db-introspector.js';
4
4
  import { type CodegenResult } from './db-codegen.js';
5
5
  import { type ZodCodegenResult } from './zod-codegen.js';
6
- import { type SeedResult } from './sqlite/seed.js';
6
+ import { type DevSeedResult } from './sqlite/dev-seed.js';
7
7
  import type { UserConfigShape } from '../commands/db-shared.js';
8
8
  interface ResolvedDbBase {
9
9
  rootDir: string;
@@ -18,12 +18,18 @@ interface ResolvedDbBase {
18
18
  enumsFile: string;
19
19
  zodFile: string;
20
20
  camelCase: boolean;
21
+ /**
22
+ * Schema whose qualifier the generated types drop, from `db.defaultSchema`.
23
+ * Unlike `schema` this applies to both dialects — sqlite has no schemas to
24
+ * qualify with, so it is simply inert there.
25
+ */
26
+ defaultSchema?: string;
21
27
  }
22
28
  export interface ResolvedSqliteDb extends ResolvedDbBase {
23
29
  dialect: 'sqlite';
24
30
  dbFile: string;
25
31
  runtimeDir: string;
26
- seedFile: string;
32
+ devSeedFile: string;
27
33
  }
28
34
  export interface ResolvedPostgresDb extends ResolvedDbBase {
29
35
  dialect: 'postgres';
@@ -31,7 +37,25 @@ export interface ResolvedPostgresDb extends ResolvedDbBase {
31
37
  connectionString?: string;
32
38
  pgliteDir?: string;
33
39
  runtimeDir: string;
34
- seedFile: string;
40
+ devSeedFile: string;
41
+ /**
42
+ * Postgres extensions the embedded PGlite databases must load, as declared by
43
+ * `pgliteExtensions` in the project's config. See
44
+ * {@link loadPGliteExtensions}.
45
+ *
46
+ * Carried even in `url` mode: the shadow database the CLI migrates and
47
+ * introspects is PGlite whichever server the project itself runs against, so
48
+ * a migration that needs an extension needs it here too.
49
+ */
50
+ pgliteExtensions: string[];
51
+ /**
52
+ * The schema generated migrations create their tables in, from `db.schema`.
53
+ *
54
+ * Postgres only — hence its absence from `ResolvedSqliteDb` rather than a
55
+ * runtime check. sqlite's `REFERENCES` clause takes a bare table name, so
56
+ * qualified DDL does not compile there at all.
57
+ */
58
+ schema?: string;
35
59
  }
36
60
  export type ResolvedDb = ResolvedSqliteDb | ResolvedPostgresDb;
37
61
  /**
@@ -45,9 +69,47 @@ export declare function parseDatabaseUrl(url: string): Pick<UserConfigShape, 'sq
45
69
  * Resolve a UserConfigShape into an absolute-path descriptor.
46
70
  * Returns null when neither sqliteDb nor postgresUrl is configured.
47
71
  */
48
- export declare function resolveDb(userConfig: UserConfigShape, rootDir: string, outDir: string, runtimeDir?: string): ResolvedDb | null;
72
+ export declare function resolveDb(userConfig: UserConfigShape, rootDir: string, outDir: string, runtimeDir?: string, dbConfig?: {
73
+ schema?: string;
74
+ defaultSchema?: string;
75
+ } | string): ResolvedDb | null;
49
76
  /** @deprecated Use resolveDb(userConfig, ...) instead. */
50
77
  export declare function resolveLocalDb(sqliteDb: string | undefined, rootDir: string, outDir: string, runtimeDir?: string): ResolvedSqliteDb | null;
78
+ /**
79
+ * What an embedded PGlite instance needs beyond its data directory: where to
80
+ * resolve extension packages from, and which ones to load.
81
+ *
82
+ * A `ResolvedPostgresDb` already is one, which is what lets every call site
83
+ * that has one pass it straight through.
84
+ */
85
+ export interface PGliteExtensionContext {
86
+ rootDir: string;
87
+ pgliteExtensions: string[];
88
+ }
89
+ /**
90
+ * A PGlite extension, as the packages that publish one export it: an object
91
+ * carrying the `setup` that hands PGlite the WASM bundle, or a URL/string
92
+ * pointing at a remote one.
93
+ *
94
+ * Structural rather than imported from PGlite so a project's extension package
95
+ * — built against its own copy of `@electric-sql/pglite` — is recognised
96
+ * whatever the two versions are.
97
+ */
98
+ type PGliteExtension = {
99
+ name?: string;
100
+ setup: (...args: any[]) => unknown;
101
+ };
102
+ /**
103
+ * Load every extension the project declares, keyed the way PGlite wants them.
104
+ *
105
+ * The key is the export name (`vector`, `hstore`), which is also the name the
106
+ * SQL uses, so `CREATE EXTENSION vector` finds what a declaration of
107
+ * `@electric-sql/pglite-pgvector` loaded. A module exporting several is fine —
108
+ * all of them are taken — and a `default` export is used only when it is the
109
+ * only extension there, so a package that default-exports the same object it
110
+ * also names is not registered twice.
111
+ */
112
+ export declare function loadPGliteExtensions(rootDir: string, specs: string[]): Promise<Record<string, PGliteExtension>>;
51
113
  export interface MigrateAndCodegenOutcome {
52
114
  migrate: MigrateResult;
53
115
  codegen: CodegenResult;
@@ -73,7 +135,15 @@ export interface MigrateAndCodegenOptions {
73
135
  scratch?: boolean;
74
136
  }
75
137
  export declare function migrateAndCodegen(resolved: ResolvedDb, options?: MigrateAndCodegenOptions): Promise<MigrateAndCodegenOutcome>;
76
- export declare function seed(resolved: ResolvedDb): Promise<SeedResult>;
138
+ /**
139
+ * Apply the dev seed file. Only {@link reset} calls this, immediately after
140
+ * migrating a database it has just wiped, which is what lets a seed file be
141
+ * plain `INSERT`s rather than idempotent ones.
142
+ *
143
+ * `reset` refuses production before it gets here, so this guard is unreachable
144
+ * through the CLI. It stays because the export is reachable without it.
145
+ */
146
+ export declare function devSeed(resolved: ResolvedDb): Promise<DevSeedResult>;
77
147
  export declare function reset(resolved: ResolvedDb, rootDir: string): Promise<void>;
78
148
  export declare function createKysely<DB>(resolved: ResolvedDb): Promise<Kysely<DB>>;
79
149
  /**
@@ -229,6 +299,17 @@ export interface SchemaSource {
229
299
  desired: DesiredSchema;
230
300
  /** Prose for the migration header, saying where the SQL came from. */
231
301
  origin: string;
302
+ /**
303
+ * The schema this source's SQL is qualified into, when it is.
304
+ *
305
+ * Carried per source rather than read off the resolved database because only
306
+ * the sources pikku compiles can honour it. Better Auth writes its own
307
+ * migration SQL through its own migrator and an addon ships SQL as text —
308
+ * neither goes through the schema builder, so neither can be qualified from
309
+ * here, and claiming otherwise on their behalf would emit a delta that names
310
+ * a table in a schema their `CREATE TABLE` never put it in.
311
+ */
312
+ schema?: string;
232
313
  }
233
314
  /** One dialect's worth of a published schema. */
234
315
  export interface ExportedSchema {
@@ -265,7 +346,7 @@ export interface AddonDeclaration {
265
346
  * happens to be configured against — an addon is published once and consumed by
266
347
  * projects on either engine.
267
348
  */
268
- export declare function exportSchema(rootDir: string): Promise<SchemaArtifact>;
349
+ export declare function exportSchema(rootDir: string, pgliteExtensions?: string[]): Promise<SchemaArtifact>;
269
350
  /**
270
351
  * The schema every wired addon publishes, as sources.
271
352
  *