@pikku/cli 0.12.122 → 0.12.124

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 (237) hide show
  1. package/CHANGELOG.md +143 -0
  2. package/console-app/assets/{abnfDiagram-N423BO3Z-Dfq94a7u.js → abnfDiagram-N423BO3Z-BP7zxMq6.js} +1 -1
  3. package/console-app/assets/architecture-TIHT7OUA-D4Hj6824.js +1 -0
  4. package/console-app/assets/{architectureDiagram-T3A2C74G-C9MjP0IU.js → architectureDiagram-T3A2C74G-mvqdkIfF.js} +1 -1
  5. package/console-app/assets/{blockDiagram-VBNYF7ZC-CGgHSlOO.js → blockDiagram-VBNYF7ZC-daD8h3VT.js} +1 -1
  6. package/console-app/assets/{c4Diagram-5PPSVZJV-3kzckivq.js → c4Diagram-5PPSVZJV-Bd0_wKJj.js} +1 -1
  7. package/console-app/assets/channel-09aKDzM0.js +1 -0
  8. package/console-app/assets/{chunk-2GRJ4B5K-UZ1q29J_.js → chunk-2GRJ4B5K-BFRr_H2V.js} +1 -1
  9. package/console-app/assets/{chunk-4I5QYGJK-bq4iSS6S.js → chunk-4I5QYGJK-BXWo5Xyx.js} +1 -1
  10. package/console-app/assets/{chunk-5RXB4S5H-BCeU8nXq.js → chunk-5RXB4S5H-BFnXfzzz.js} +1 -1
  11. package/console-app/assets/{chunk-6Q2QTUOP-DpsTVhit.js → chunk-6Q2QTUOP-Bswg4T3s.js} +1 -1
  12. package/console-app/assets/{chunk-7Z6QIM7H-I6XKkv2A.js → chunk-7Z6QIM7H-StNGH40U.js} +1 -1
  13. package/console-app/assets/{chunk-GF5L2VYU-aYODFCZ6.js → chunk-GF5L2VYU-QwXKtQxa.js} +1 -1
  14. package/console-app/assets/{chunk-I66GZJ75-CWdPrY4a.js → chunk-I66GZJ75-DDQhhfA0.js} +1 -1
  15. package/console-app/assets/{chunk-JQJVKLGR-D5bHP4bt.js → chunk-JQJVKLGR-wFyF2bUv.js} +1 -1
  16. package/console-app/assets/{chunk-KBJHAD2P-B-Spac9o.js → chunk-KBJHAD2P-CQPQVDkD.js} +1 -1
  17. package/console-app/assets/{chunk-NSK5VX7P-0jZVLBhi.js → chunk-NSK5VX7P-DZhjvnHm.js} +1 -1
  18. package/console-app/assets/{chunk-QR6OTTB3-BurXFOtV.js → chunk-QR6OTTB3-D1-TbcCP.js} +1 -1
  19. package/console-app/assets/{chunk-RYQCIY6F-C4zacxhH.js → chunk-RYQCIY6F-82OYF6U8.js} +1 -1
  20. package/console-app/assets/{chunk-UBXNYLIW-7RthekQ-.js → chunk-UBXNYLIW-D85x6Zh2.js} +1 -1
  21. package/console-app/assets/{chunk-W5SLKNZC-rq3UcMTy.js → chunk-W5SLKNZC-B1Ps46_n.js} +1 -1
  22. package/console-app/assets/{chunk-WRU74C26-DUX-oZjQ.js → chunk-WRU74C26-Ct8XrToU.js} +1 -1
  23. package/console-app/assets/chunk-XXDRQBXY-C1KaR4pt.js +1 -0
  24. package/console-app/assets/classDiagram-JCYQIIEL-23nagJMi.js +1 -0
  25. package/console-app/assets/classDiagram-v2-OCEON4UE-23nagJMi.js +1 -0
  26. package/console-app/assets/{cose-bilkent-JH36ORCC-DZn35HFs.js → cose-bilkent-JH36ORCC-DdevwV5Y.js} +1 -1
  27. package/console-app/assets/{cynefin-VYW2F7L2-mZlOMKNi.js → cynefin-VYW2F7L2-Dj55csoo.js} +1 -1
  28. package/console-app/assets/{cynefinDiagram-MW4NZA55-uUAfUoag.js → cynefinDiagram-MW4NZA55-XWSzdajo.js} +1 -1
  29. package/console-app/assets/{dagre-DfTmIhGN.js → dagre-CLoXIMX5.js} +1 -1
  30. package/console-app/assets/{dagre-VZM6K2ZE-7oTddCss.js → dagre-VZM6K2ZE-BV2l3zSF.js} +1 -1
  31. package/console-app/assets/{diagram-7IWD3JNH-D6TR4TlN.js → diagram-7IWD3JNH-DC9NK-nv.js} +1 -1
  32. package/console-app/assets/{diagram-B4RE2ZJO-BZwUFLzC.js → diagram-B4RE2ZJO-Cirfb0aN.js} +1 -1
  33. package/console-app/assets/{diagram-LBJQPF4R-B4Ug2xRo.js → diagram-LBJQPF4R-BuRRy5X5.js} +1 -1
  34. package/console-app/assets/{diagram-Q27KOJAE-Fpr_Cahs.js → diagram-Q27KOJAE-CAOKQ2xs.js} +1 -1
  35. package/console-app/assets/{diagram-UB23O5K3-d0X7PA-5.js → diagram-UB23O5K3-Bto5kBJo.js} +1 -1
  36. package/console-app/assets/{ebnfDiagram-BXEA7PRR-DExP954c.js → ebnfDiagram-BXEA7PRR-C5OndYGC.js} +1 -1
  37. package/console-app/assets/{erDiagram-JOGREHBK-WdnXmG8f.js → erDiagram-JOGREHBK-DqU4xV4C.js} +1 -1
  38. package/console-app/assets/eventmodeling-45OFAUF4-RyG54ZHy.js +1 -0
  39. package/console-app/assets/flowDiagram-UKHOOZJN-DNdfrnRg.js +1 -0
  40. package/console-app/assets/{ganttDiagram-PKOTCBZU-ADJHCyvl.js → ganttDiagram-PKOTCBZU-D5_DE9R0.js} +1 -1
  41. package/console-app/assets/{gitGraph-TEB2WS4Q-BPcXt1vK.js → gitGraph-TEB2WS4Q-nuqfz7Fd.js} +1 -1
  42. package/console-app/assets/{gitGraphDiagram-DS77QQ5N-DFhenfUX.js → gitGraphDiagram-DS77QQ5N-BtJwp2Y3.js} +1 -1
  43. package/console-app/assets/{index-BwP6EcJr.js → index-DRfts2XF.js} +184 -184
  44. package/console-app/assets/{index-Mq-YbqNO.css → index-DXcH2K9z.css} +1 -1
  45. package/console-app/assets/{info-DKCQHKI2-BsE7egna.js → info-DKCQHKI2-CIfPVqHr.js} +1 -1
  46. package/console-app/assets/{infoDiagram-6WML65LV-BmVqXMw0.js → infoDiagram-6WML65LV-B-gTHQad.js} +1 -1
  47. package/console-app/assets/{ishikawaDiagram-WSZJBQD7-CdFTPIY5.js → ishikawaDiagram-WSZJBQD7-CCwAWb1g.js} +1 -1
  48. package/console-app/assets/{journeyDiagram-NVQOT4AX-DC8CKdJk.js → journeyDiagram-NVQOT4AX-DhqNj_ci.js} +1 -1
  49. package/console-app/assets/{kanban-definition-27J2QSJJ-Bo7kRcLN.js → kanban-definition-27J2QSJJ-DspZ1b3Y.js} +1 -1
  50. package/console-app/assets/{line-5nUqh22u.js → line-D7ZCpNkR.js} +1 -1
  51. package/console-app/assets/{linear-82KoPtTH.js → linear-B5jMy_q9.js} +1 -1
  52. package/console-app/assets/{mermaid-parser.core-R240ylPw.js → mermaid-parser.core-CMBFGJ0U.js} +3 -3
  53. package/console-app/assets/{mermaid.core-BZ3jSM6D.js → mermaid.core-DYoDrSEJ.js} +4 -4
  54. package/console-app/assets/{mindmap-definition-FAOFIHXS-x1K54VeO.js → mindmap-definition-FAOFIHXS-DsHwd2K9.js} +1 -1
  55. package/console-app/assets/{packet-7NZHBO7P-CE2Lun0t.js → packet-7NZHBO7P-BSRRjf4H.js} +1 -1
  56. package/console-app/assets/{pegDiagram-VL7TDLO6-CpGZYdUz.js → pegDiagram-VL7TDLO6-Bi0OlzgS.js} +1 -1
  57. package/console-app/assets/{pie-RZYD4A2V-Hf5MOyY8.js → pie-RZYD4A2V-D-8tgqYW.js} +1 -1
  58. package/console-app/assets/{pieDiagram-7S7Q4E2Y-0J5H7r7g.js → pieDiagram-7S7Q4E2Y-CsYbVqaR.js} +1 -1
  59. package/console-app/assets/{quadrantDiagram-CIZ2JOQS-DWtYi8O-.js → quadrantDiagram-CIZ2JOQS-LkLWrWKK.js} +1 -1
  60. package/console-app/assets/{radar-I7S5WNFK-BgtvrX4w.js → radar-I7S5WNFK-Bst62XZP.js} +1 -1
  61. package/console-app/assets/{railroad-3IZDKUUU-CeR0NhLL.js → railroad-3IZDKUUU-zJswMQYF.js} +1 -1
  62. package/console-app/assets/railroad-abnf-AHOZXSZD-DX4FqVY6.js +1 -0
  63. package/console-app/assets/railroad-ebnf-EBAXGLYW-DdyOtX1l.js +1 -0
  64. package/console-app/assets/railroad-peg-LSFZ7HO6-CclC1sXF.js +1 -0
  65. package/console-app/assets/{railroadDiagram-AXF67PYL-CUIn_gPf.js → railroadDiagram-AXF67PYL-C0QZkg7m.js} +1 -1
  66. package/console-app/assets/{requirementDiagram-LRYGKXZP-Ds9Aqcts.js → requirementDiagram-LRYGKXZP-BQg0AbLI.js} +1 -1
  67. package/console-app/assets/{sankeyDiagram-W5VNT64P-CKhuya4d.js → sankeyDiagram-W5VNT64P-CQb0BMMi.js} +1 -1
  68. package/console-app/assets/{sequenceDiagram-SI44F4Z6-DKgOmdzz.js → sequenceDiagram-SI44F4Z6-BzgBi0a5.js} +1 -1
  69. package/console-app/assets/{src-DwHVY--Z.js → src-Dg-KiSsV.js} +1 -1
  70. package/console-app/assets/{stateDiagram-OKZ733FA-CPIfaZie.js → stateDiagram-OKZ733FA-BiqXn68g.js} +1 -1
  71. package/console-app/assets/stateDiagram-v2-UEYNNEHI-I34jrzP0.js +1 -0
  72. package/console-app/assets/{swimlanes-SLNWSIFB-8q3lK4RS.js → swimlanes-SLNWSIFB-Dy7wDP1q.js} +1 -1
  73. package/console-app/assets/swimlanesDiagram-ULZ7WXOC-C1PrPB0G.js +8 -0
  74. package/console-app/assets/{timeline-definition-Z64GVDOM-CHHi2Rpq.js → timeline-definition-Z64GVDOM-DSWXli8X.js} +1 -1
  75. package/console-app/assets/{treeView-QDETBFTQ-DrLHlsII.js → treeView-QDETBFTQ-CeWwcs9r.js} +1 -1
  76. package/console-app/assets/{treemap-6X3UGDF4-C3saYKuK.js → treemap-6X3UGDF4-BfrumiJh.js} +1 -1
  77. package/console-app/assets/{vennDiagram-T6HMQDX7-CdyzNiAu.js → vennDiagram-T6HMQDX7-BsuldZ1n.js} +1 -1
  78. package/console-app/assets/{wardley-OPB4EBWU-BSrymyse.js → wardley-OPB4EBWU-oZldxS8z.js} +1 -1
  79. package/console-app/assets/{wardleyDiagram-T6FBY63Y-CCW6rhEo.js → wardleyDiagram-T6FBY63Y-C5LXyHMj.js} +1 -1
  80. package/console-app/assets/{xychartDiagram-ELKLHX3M-BQvPaxzg.js → xychartDiagram-ELKLHX3M-CwhqhNkO.js} +1 -1
  81. package/console-app/index.html +2 -2
  82. package/dist/.pikku/addon/index.d.ts +1 -1
  83. package/dist/.pikku/addon/index.js +1 -1
  84. package/dist/.pikku/addon/pikku-addon-types.gen.d.ts +1 -1
  85. package/dist/.pikku/addon/pikku-addon-types.gen.js +1 -1
  86. package/dist/.pikku/agent/index.d.ts +1 -1
  87. package/dist/.pikku/agent/index.js +1 -1
  88. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
  89. package/dist/.pikku/agent/pikku-model-aliases.gen.js +1 -1
  90. package/dist/.pikku/auth/index.d.ts +1 -1
  91. package/dist/.pikku/auth/index.js +1 -1
  92. package/dist/.pikku/auth/pikku-auth-types.gen.d.ts +1 -1
  93. package/dist/.pikku/auth/pikku-auth-types.gen.js +1 -1
  94. package/dist/.pikku/channel/index.d.ts +1 -1
  95. package/dist/.pikku/channel/index.js +1 -1
  96. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
  97. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  98. package/dist/.pikku/cli/index.d.ts +1 -1
  99. package/dist/.pikku/cli/index.js +1 -1
  100. package/dist/.pikku/cli/pikku-cli-channel.js +1 -1
  101. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  102. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
  103. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +1 -1
  104. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +1 -1
  105. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  106. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  107. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
  108. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  109. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  110. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  111. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  112. package/dist/.pikku/error/index.d.ts +1 -1
  113. package/dist/.pikku/error/index.js +1 -1
  114. package/dist/.pikku/error/pikku-error-types.gen.d.ts +1 -1
  115. package/dist/.pikku/error/pikku-error-types.gen.js +1 -1
  116. package/dist/.pikku/function/index.d.ts +1 -1
  117. package/dist/.pikku/function/index.js +1 -1
  118. package/dist/.pikku/function/pikku-function-types.gen.d.ts +1 -1
  119. package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
  120. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  121. package/dist/.pikku/function/pikku-functions-meta.gen.json +1 -1
  122. package/dist/.pikku/function/pikku-functions.gen.js +1 -1
  123. package/dist/.pikku/gateway/index.d.ts +1 -1
  124. package/dist/.pikku/gateway/index.js +1 -1
  125. package/dist/.pikku/gateway/pikku-gateway-types.gen.d.ts +1 -1
  126. package/dist/.pikku/gateway/pikku-gateway-types.gen.js +1 -1
  127. package/dist/.pikku/http/index.d.ts +1 -1
  128. package/dist/.pikku/http/index.js +1 -1
  129. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  130. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  131. package/dist/.pikku/mcp/index.d.ts +1 -1
  132. package/dist/.pikku/mcp/index.js +1 -1
  133. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  134. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  135. package/dist/.pikku/middleware/index.d.ts +1 -1
  136. package/dist/.pikku/middleware/index.js +1 -1
  137. package/dist/.pikku/middleware/pikku-middleware-types.gen.d.ts +2 -2
  138. package/dist/.pikku/middleware/pikku-middleware-types.gen.js +2 -2
  139. package/dist/.pikku/pikku-bootstrap-scenarios.gen.d.ts +1 -1
  140. package/dist/.pikku/pikku-bootstrap-scenarios.gen.js +1 -1
  141. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
  142. package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
  143. package/dist/.pikku/pikku-services.gen.d.ts +1 -1
  144. package/dist/.pikku/queue/index.d.ts +1 -1
  145. package/dist/.pikku/queue/index.js +1 -1
  146. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  147. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  148. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +1 -1
  149. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  150. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  151. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  152. package/dist/.pikku/scenarios/index.d.ts +1 -1
  153. package/dist/.pikku/scenarios/index.js +1 -1
  154. package/dist/.pikku/scenarios/pikku-personas.gen.js +1 -1
  155. package/dist/.pikku/scenarios/pikku-scenario-functions-meta.gen.js +1 -1
  156. package/dist/.pikku/scenarios/pikku-scenario-functions.gen.d.ts +1 -1
  157. package/dist/.pikku/scenarios/pikku-scenario-types.gen.d.ts +3 -3
  158. package/dist/.pikku/scenarios/pikku-scenario-wirings-meta.gen.js +1 -1
  159. package/dist/.pikku/scenarios/pikku-scenario-wirings.gen.d.ts +1 -1
  160. package/dist/.pikku/scenarios/schemas/register.gen.d.ts +1 -1
  161. package/dist/.pikku/scenarios/schemas/register.gen.js +1 -1
  162. package/dist/.pikku/scheduler/index.d.ts +1 -1
  163. package/dist/.pikku/scheduler/index.js +1 -1
  164. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  165. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  166. package/dist/.pikku/schemas/register.gen.js +1 -1
  167. package/dist/.pikku/scopes/index.d.ts +1 -1
  168. package/dist/.pikku/scopes/index.js +1 -1
  169. package/dist/.pikku/scopes/pikku-personas.gen.js +1 -1
  170. package/dist/.pikku/scopes/pikku-roles.gen.d.ts +1 -1
  171. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +1 -1
  172. package/dist/.pikku/scopes/pikku-scope-types.gen.js +1 -1
  173. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +1 -1
  174. package/dist/.pikku/secrets/index.d.ts +1 -1
  175. package/dist/.pikku/secrets/index.js +1 -1
  176. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  177. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  178. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  179. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  180. package/dist/.pikku/services/pikku-meta-service.gen.d.ts +1 -1
  181. package/dist/.pikku/services/pikku-meta-service.gen.js +1 -1
  182. package/dist/.pikku/setup/index.d.ts +1 -1
  183. package/dist/.pikku/setup/index.js +1 -1
  184. package/dist/.pikku/setup/pikku-setup-types.gen.d.ts +1 -1
  185. package/dist/.pikku/setup/pikku-setup-types.gen.js +1 -1
  186. package/dist/.pikku/trigger/index.d.ts +1 -1
  187. package/dist/.pikku/trigger/index.js +1 -1
  188. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  189. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  190. package/dist/.pikku/variables/index.d.ts +1 -1
  191. package/dist/.pikku/variables/index.js +1 -1
  192. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  193. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  194. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  195. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  196. package/dist/.pikku/workflow/index.d.ts +1 -1
  197. package/dist/.pikku/workflow/index.js +1 -1
  198. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
  199. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  200. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  201. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  202. package/dist/bin/pikku-bin.mjs +2 -2
  203. package/dist/src/deploy/bundler/bundler.js +1 -15
  204. package/dist/src/deploy/bundler/service-module-map.d.ts +17 -0
  205. package/dist/src/deploy/bundler/service-module-map.js +19 -0
  206. package/dist/src/fabric/functions/deploy.function.js +4 -2
  207. package/dist/src/fabric/functions/validate.function.js +70 -7
  208. package/dist/src/fabric/lib/deployment.d.ts +14 -0
  209. package/dist/src/fabric/lib/deployment.js +24 -0
  210. package/dist/src/functions/commands/scenario-formatter.js +6 -3
  211. package/dist/src/functions/commands/scenario-ladder.d.ts +8 -1
  212. package/dist/src/functions/commands/scenario-ladder.js +56 -12
  213. package/dist/src/functions/commands/scenario.js +1 -1
  214. package/dist/src/functions/validate/shared-checks.d.ts +25 -0
  215. package/dist/src/functions/validate/shared-checks.js +86 -2
  216. package/dist/src/functions/wirings/middleware/serialize-middleware-types.js +1 -1
  217. package/dist/src/functions/wirings/variables/serialize-variables-types.js +5 -1
  218. package/dist/src/functions/wirings/workflow/serialize-scenario-types.js +2 -2
  219. package/dist/src/services/cli-logger-forwarder.service.d.ts +2 -0
  220. package/dist/src/services/cli-logger-forwarder.service.js +10 -0
  221. package/dist/src/services/cli-logger.service.d.ts +21 -0
  222. package/dist/src/services/cli-logger.service.js +41 -4
  223. package/dist/tsconfig.tsbuildinfo +1 -1
  224. package/package.json +6 -6
  225. package/surface.json +88 -7
  226. package/console-app/assets/architecture-TIHT7OUA-CA-Di-O3.js +0 -1
  227. package/console-app/assets/channel-UOxM22B3.js +0 -1
  228. package/console-app/assets/chunk-XXDRQBXY-gIL1rRSY.js +0 -1
  229. package/console-app/assets/classDiagram-JCYQIIEL-BwV1w5At.js +0 -1
  230. package/console-app/assets/classDiagram-v2-OCEON4UE-BwV1w5At.js +0 -1
  231. package/console-app/assets/eventmodeling-45OFAUF4-DXnDrAdV.js +0 -1
  232. package/console-app/assets/flowDiagram-UKHOOZJN-UixAvy5Z.js +0 -1
  233. package/console-app/assets/railroad-abnf-AHOZXSZD-BEVU16-y.js +0 -1
  234. package/console-app/assets/railroad-ebnf-EBAXGLYW-WT4rrGXf.js +0 -1
  235. package/console-app/assets/railroad-peg-LSFZ7HO6-BnObCMjn.js +0 -1
  236. package/console-app/assets/stateDiagram-v2-UEYNNEHI-DHcCmJ1C.js +0 -1
  237. package/console-app/assets/swimlanesDiagram-ULZ7WXOC-B1uT0NiL.js +0 -8
@@ -1,4 +1,4 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.122
2
+ * This file was generated by @pikku/cli@0.12.124
3
3
  */
4
4
  export { defineVariable } from '@pikku/core/variable';
@@ -1,4 +1,4 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.122
2
+ * This file was generated by @pikku/cli@0.12.124
3
3
  */
4
4
  export { defineVariable } from '@pikku/core/variable';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.122
2
+ * This file was generated by @pikku/cli@0.12.124
3
3
  */
4
4
  import { TypedVariablesService as CoreTypedVariablesService } from '@pikku/core/services';
5
5
  import type { VariablesService } from '@pikku/core/services';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.122
2
+ * This file was generated by @pikku/cli@0.12.124
3
3
  */
4
4
  import { TypedVariablesService as CoreTypedVariablesService, } from '@pikku/core/services';
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.122
2
+ * This file was generated by @pikku/cli@0.12.124
3
3
  */
4
4
  /**
5
5
  * Subpath entry — `#pikku/workflow` resolves here.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.122
2
+ * This file was generated by @pikku/cli@0.12.124
3
3
  */
4
4
  /**
5
5
  * Subpath entry — `#pikku/workflow` resolves here.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.122
2
+ * This file was generated by @pikku/cli@0.12.124
3
3
  */
4
4
  import { WorkflowCancelledException } from '@pikku/core/workflow';
5
5
  import type { PikkuWorkflowGraphConfig, PikkuWorkflowGraphResult } from '@pikku/core/workflow';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.122
2
+ * This file was generated by @pikku/cli@0.12.124
3
3
  */
4
4
  import { WorkflowCancelledException } from '@pikku/core/workflow';
5
5
  import { pikkuWorkflowGraph as corePikkuWorkflowGraph } from '@pikku/core/workflow';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.122
2
+ * This file was generated by @pikku/cli@0.12.124
3
3
  */
4
4
  import { pikkuState } from '@pikku/core/state';
5
5
  import allWorkflowMeta from './meta/allWorkflow.gen.json' with { type: 'json' };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.12.122
2
+ * This file was generated by @pikku/cli@0.12.124
3
3
  */
4
4
  import { addWorkflow } from '@pikku/core/workflow';
5
5
  import './pikku-workflow-wirings-meta.gen.js';
@@ -11,8 +11,8 @@ async function checkForUpdate() {
11
11
  })
12
12
  if (!res.ok) return
13
13
  const { version: latest } = await res.json()
14
- if (latest !== '0.12.122') {
15
- process.stderr.write(`\n Update available 0.12.122 → ${latest}\n brew upgrade pikku or npm install -g @pikku/cli\n\n`)
14
+ if (latest !== '0.12.124') {
15
+ process.stderr.write(`\n Update available 0.12.124 → ${latest}\n brew upgrade pikku or npm install -g @pikku/cli\n\n`)
16
16
  }
17
17
  } catch {}
18
18
  }
@@ -16,6 +16,7 @@ import { writeFile, mkdir, stat, readFile } from 'node:fs/promises';
16
16
  import { join } from 'node:path';
17
17
  import { createHash } from 'node:crypto';
18
18
  import { resolveExternalVersions, generateMinimalPackageJson, } from './dep-extractor.js';
19
+ import { SERVICE_MODULE_MAP } from './service-module-map.js';
19
20
  /**
20
21
  * Mapping of service name -> gen file pattern that should be stubbed
21
22
  * when the service is not required by a deployment unit.
@@ -23,21 +24,6 @@ import { resolveExternalVersions, generateMinimalPackageJson, } from './dep-extr
23
24
  const SERVICE_GEN_FILE_MAP = {
24
25
  metaService: /pikku-meta-service\.gen/,
25
26
  };
26
- /**
27
- * Mapping of service name -> npm module patterns to stub when the service is
28
- * NOT required by a deployment unit. Unlike SERVICE_GEN_FILE_MAP these are
29
- * external packages, not gen files: a unit that doesn't wire the service never
30
- * executes the code path that imports them, so replacing them with `export {}`
31
- * keeps their (often large) trees out of the bundle.
32
- *
33
- * The AI SDKs (@pikku/ai-vercel + @ai-sdk/* + `ai`, ~3MB) are only constructed
34
- * when `agentRunner` is wired (agent units). Every non-agent unit stubs them.
35
- * The shared services factory must guard the runner construction behind a
36
- * defined-check on the dynamic import so a stubbed unit simply skips it.
37
- */
38
- const SERVICE_MODULE_MAP = {
39
- agentRunner: [/^@pikku\/ai-vercel/, /^@ai-sdk\//, /^ai$/],
40
- };
41
27
  /**
42
28
  * Read the per-unit pikku-services.gen.ts and return the set of gen file
43
29
  * patterns that should be stubbed (because their service is not required).
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Mapping of service name -> npm module patterns to stub when the service is
3
+ * NOT required by a deployment unit. These are external packages, not gen
4
+ * files: a unit that doesn't wire the service never executes the code path
5
+ * that imports them, so replacing them with `export {}` keeps their (often
6
+ * large) trees out of the bundle.
7
+ *
8
+ * The AI SDKs (@pikku/ai-vercel + @ai-sdk/* + `ai`, ~3MB) are only constructed
9
+ * when `agentRunner` is wired (agent units). Every non-agent unit stubs them.
10
+ * The shared services factory must guard the runner construction behind a
11
+ * defined-check on the dynamic import so a stubbed unit simply skips it.
12
+ *
13
+ * It lives in its own module so `pikku validate` can warn about a static import
14
+ * of a stubbed package without pulling the bundler in — a check that reads a
15
+ * second copy of this list would go stale the first time the list changed.
16
+ */
17
+ export declare const SERVICE_MODULE_MAP: Record<string, RegExp[]>;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Mapping of service name -> npm module patterns to stub when the service is
3
+ * NOT required by a deployment unit. These are external packages, not gen
4
+ * files: a unit that doesn't wire the service never executes the code path
5
+ * that imports them, so replacing them with `export {}` keeps their (often
6
+ * large) trees out of the bundle.
7
+ *
8
+ * The AI SDKs (@pikku/ai-vercel + @ai-sdk/* + `ai`, ~3MB) are only constructed
9
+ * when `agentRunner` is wired (agent units). Every non-agent unit stubs them.
10
+ * The shared services factory must guard the runner construction behind a
11
+ * defined-check on the dynamic import so a stubbed unit simply skips it.
12
+ *
13
+ * It lives in its own module so `pikku validate` can warn about a static import
14
+ * of a stubbed package without pulling the bundler in — a check that reads a
15
+ * second copy of this list would go stale the first time the list changed.
16
+ */
17
+ export const SERVICE_MODULE_MAP = {
18
+ agentRunner: [/^@pikku\/ai-vercel/, /^@ai-sdk\//, /^ai$/],
19
+ };
@@ -5,7 +5,7 @@ import { getFabricRPC } from '../lib/http.js';
5
5
  import { assertNamedBranchDeploySafety, resolveRef } from '../lib/git.js';
6
6
  import { promptConfirm } from '../lib/prompt.js';
7
7
  import { added, changed, removed, dim, table } from '../lib/output.js';
8
- import { blockedReason, blockedSummary, changesAreEmpty, classifyStatus, describeDeployment, destructiveMigrations, isApprovable, readDeploymentStatus, readWorkers, stateLabel, waitForDeployment, } from '../lib/deployment.js';
8
+ import { blockedReason, blockedSummary, missingConfigHints, changesAreEmpty, classifyStatus, describeDeployment, destructiveMigrations, isApprovable, readDeploymentStatus, readWorkers, stateLabel, waitForDeployment, } from '../lib/deployment.js';
9
9
  const DEFAULT_TIMEOUT_SECONDS = 900;
10
10
  export const FabricDeployInput = z.object({
11
11
  branch: z.string().optional(),
@@ -359,7 +359,9 @@ export const renderDeployApply = (_s, result) => {
359
359
  console.log(dim(`Approve it with \`pikku fabric deploy apply --deployment-id ${deploymentId} --sync --auto-approve\`.`));
360
360
  }
361
361
  else if (reason === 'needs_config') {
362
- console.log(dim('Set the values with `pikku fabric secrets set <name>`.'));
362
+ for (const hint of missingConfigHints(result.missingSecrets, result.missingVariables)) {
363
+ console.log(dim(hint));
364
+ }
363
365
  }
364
366
  return;
365
367
  }
@@ -66,6 +66,15 @@ async function listSourceFiles(dir) {
66
66
  return [];
67
67
  }
68
68
  }
69
+ /**
70
+ * Blanks comment bodies so a raw-text scan cannot read prose as code. Prose in a
71
+ * scenario description ("Converted from the Gherkin scenario...") otherwise
72
+ * matches the import scanner's `from "..."` and reports a package that is really
73
+ * a sentence.
74
+ */
75
+ const stripCommentText = (text) => text
76
+ .replace(/\/\*[\s\S]*?\*\//g, (m) => m.replace(/[^\n]/g, ' '))
77
+ .replace(/(^|[^:'"`\\])\/\/[^\n]*/g, (_m, p1) => p1);
69
78
  // Heavy/generated dirs pruned during a source walk.
70
79
  const SKIP_WALK_DIRS = new Set([
71
80
  'node_modules',
@@ -487,11 +496,14 @@ export async function runValidate(startDir = process.cwd(), opts = {}) {
487
496
  const txt = await readTextSafe(file);
488
497
  if (!txt)
489
498
  continue;
499
+ const src = stripCommentText(txt);
490
500
  const re = /(?:from|import|require)\s*\(?\s*['"]([^'".#][^'"]*)['"]/g;
491
501
  let m;
492
- while ((m = re.exec(txt))) {
502
+ while ((m = re.exec(src))) {
493
503
  const spec = m[1];
494
- if (spec.startsWith('node:') ||
504
+ if (/\s/.test(spec) ||
505
+ spec.startsWith('node:') ||
506
+ spec.startsWith('bun:') ||
495
507
  spec.startsWith('@/') ||
496
508
  spec.startsWith('~') ||
497
509
  spec.startsWith('virtual:') ||
@@ -1180,23 +1192,74 @@ export async function runValidate(startDir = process.cwd(), opts = {}) {
1180
1192
  }
1181
1193
  if (keysByValue.size > 0) {
1182
1194
  const STRING_LITERAL = /(?<![A-Za-z0-9_$])(['"])((?:[^\\\n]|\\.){2,200}?)\1/g;
1195
+ // A literal in `someKey: '...'` position is only copy when the key names
1196
+ // something the browser renders. `unit: 'kg'` is an RPC payload field that
1197
+ // happens to read like the catalogue's `unit_kg` label for a form suffix —
1198
+ // rewriting it to a message lookup would bind a stored value to UI copy.
1199
+ const PROPERTY_KEY = /([A-Za-z_$][A-Za-z0-9_$]*)\s*:\s*$/;
1200
+ // The innermost call whose argument list `index` sits in. Walks back
1201
+ // balancing brackets, so in `expect(await page.getByText('Save'), ...)`
1202
+ // the literal belongs to `getByText`, which is a locator and is still
1203
+ // scanned.
1204
+ const enclosingCall = (code, index) => {
1205
+ let depth = 0;
1206
+ for (let i = index - 1; i >= 0; i--) {
1207
+ const ch = code[i];
1208
+ if (ch === ')' || ch === ']' || ch === '}')
1209
+ depth++;
1210
+ else if (ch === '(' || ch === '[' || ch === '{') {
1211
+ if (depth > 0) {
1212
+ depth--;
1213
+ continue;
1214
+ }
1215
+ if (ch !== '(')
1216
+ return null;
1217
+ return (/([A-Za-z_$][A-Za-z0-9_$]*)\s*$/.exec(code.slice(0, i))?.[1] ??
1218
+ null);
1219
+ }
1220
+ }
1221
+ return null;
1222
+ };
1223
+ const UI_TEXT_KEYS = new Set([
1224
+ 'alt',
1225
+ 'button',
1226
+ 'caption',
1227
+ 'heading',
1228
+ 'label',
1229
+ 'link',
1230
+ 'name',
1231
+ 'option',
1232
+ 'placeholder',
1233
+ 'tab',
1234
+ 'text',
1235
+ 'title',
1236
+ 'value',
1237
+ ]);
1183
1238
  for (const file of await walkSourceFiles(root)) {
1184
1239
  if (!/\.(steps|scenario)\.tsx?$/.test(file))
1185
1240
  continue;
1186
1241
  const text = await readTextSafe(file);
1187
1242
  if (!text)
1188
1243
  continue;
1189
- const code = text
1190
- .replace(/\/\*[\s\S]*?\*\//g, '')
1191
- .replace(/(^|[^:'"`\\])\/\/[^\n]*/g, '$1');
1244
+ const code = stripCommentText(text);
1192
1245
  const hits = [];
1193
1246
  for (const match of code.matchAll(STRING_LITERAL)) {
1194
1247
  const literal = match[2];
1195
1248
  if (!literal)
1196
1249
  continue;
1197
1250
  const keys = keysByValue.get(literal);
1198
- if (keys)
1199
- hits.push(`"${literal}" → ${keys.join(' | ')}`);
1251
+ if (!keys)
1252
+ continue;
1253
+ // `expect(item.unit, 'kg')` asserts on a value the RPC returned,
1254
+ // not on anything the browser rendered. Reading it from the
1255
+ // catalogue would bind a stored value to UI copy, and the assertion
1256
+ // would then pass against whatever the label happened to say.
1257
+ if (enclosingCall(code, match.index) === 'expect')
1258
+ continue;
1259
+ const property = PROPERTY_KEY.exec(code.slice(0, match.index));
1260
+ if (property && !UI_TEXT_KEYS.has(property[1]))
1261
+ continue;
1262
+ hits.push(`"${literal}" → ${keys.join(' | ')}`);
1200
1263
  }
1201
1264
  if (hits.length === 0)
1202
1265
  continue;
@@ -8,6 +8,20 @@ export declare function blockedReason(statusReason: string | null): BlockedReaso
8
8
  export declare function isApprovable(reason: BlockedReason): boolean;
9
9
  export declare function stateLabel(status: string, statusReason: string | null): string;
10
10
  export declare function blockedSummary(reason: BlockedReason): string;
11
+ /**
12
+ * What to tell someone whose deploy is blocked on config they have not set.
13
+ *
14
+ * Secrets and variables go missing in the same way and are set by two different
15
+ * commands: `pikku fabric secrets set` seals a value the stage can never read
16
+ * back, `pikku fabric variables set` writes one it can. Naming one command for
17
+ * both sends anyone blocked on the other kind to a command that refuses their
18
+ * value, which reads as the command being broken rather than as the wrong one.
19
+ */
20
+ export declare function missingConfigHints(missingSecrets: readonly {
21
+ name: string;
22
+ }[] | undefined, missingVariables: readonly {
23
+ name: string;
24
+ }[] | undefined): string[];
11
25
  export interface DeploymentStatus {
12
26
  status: string;
13
27
  statusReason: string | null;
@@ -59,6 +59,30 @@ export function blockedSummary(reason) {
59
59
  return 'Deployment is suspended';
60
60
  }
61
61
  }
62
+ /**
63
+ * What to tell someone whose deploy is blocked on config they have not set.
64
+ *
65
+ * Secrets and variables go missing in the same way and are set by two different
66
+ * commands: `pikku fabric secrets set` seals a value the stage can never read
67
+ * back, `pikku fabric variables set` writes one it can. Naming one command for
68
+ * both sends anyone blocked on the other kind to a command that refuses their
69
+ * value, which reads as the command being broken rather than as the wrong one.
70
+ */
71
+ export function missingConfigHints(missingSecrets, missingVariables) {
72
+ const secrets = missingSecrets ?? [];
73
+ const variables = missingVariables ?? [];
74
+ const hints = [];
75
+ if (secrets.length > 0) {
76
+ hints.push(`Set the secret${secrets.length > 1 ? 's' : ''} with \`pikku fabric secrets set <name>\`: ${secrets.map((s) => s.name).join(', ')}.`);
77
+ }
78
+ if (variables.length > 0) {
79
+ hints.push(`Set the variable${variables.length > 1 ? 's' : ''} with \`pikku fabric variables set <name> <value>\`: ${variables.map((v) => v.name).join(', ')}.`);
80
+ }
81
+ if (hints.length === 0) {
82
+ hints.push('Set the missing values with `pikku fabric secrets set <name>` or `pikku fabric variables set <name> <value>`.');
83
+ }
84
+ return hints;
85
+ }
62
86
  export async function readDeploymentStatus(rpc, deploymentId) {
63
87
  const s = await rpc.invoke('getDeploymentStatus', { deploymentId });
64
88
  return {
@@ -38,15 +38,18 @@ export const formatScenarioReport = (report, options = {}) => {
38
38
  return lines;
39
39
  };
40
40
  export const buildStepLadder = (steps) => {
41
- const width = Math.max(0, ...steps.map(({ sentence }) => sentence.length));
42
- return steps.map((step) => {
41
+ const sentences = steps.map(ladderSentence);
42
+ const width = Math.max(0, ...sentences.map((sentence) => sentence.length));
43
+ return steps.map((step, index) => {
43
44
  const glyph = step.status === 'succeeded' ? '✓' : '✗';
44
45
  const detail = step.status === 'succeeded' || !step.error
45
46
  ? formatDuration(step.durationMs)
46
47
  : firstLine(step.error);
47
- return ` ${step.sentence.padEnd(width)} ${glyph} ${detail}`;
48
+ return ` ${sentences[index].padEnd(width)} ${glyph} ${detail}`;
48
49
  });
49
50
  };
51
+ /** The ladder introduces an actor where the row offers an introduction. */
52
+ const ladderSentence = (step) => step.sentenceWithRole ?? step.sentence;
50
53
  /**
51
54
  * The one line a summary gets. A browser timeout's message carries its whole
52
55
  * call log; the failure block below prints all of it, so the row above only
@@ -1,6 +1,7 @@
1
1
  import type { ScenarioSurface, ScenarioStepPhase } from '@pikku/core/scenario';
2
2
  import type { WorkflowStepMeta } from '@pikku/core/workflow';
3
3
  import type { FunctionsMeta } from '@pikku/core/services';
4
+ import type { PersonaDefinitions } from '@pikku/core/persona';
4
5
  import type { ScenarioFailureDetail, ScenarioStepRow } from '@pikku/core/scenario';
5
6
  export interface ScenarioStepProse {
6
7
  phase: ScenarioStepPhase;
@@ -41,6 +42,12 @@ export interface ScenarioProse {
41
42
  * which is what it did before this index existed.
42
43
  */
43
44
  byStepFunc: Map<string, ScenarioStepProse>;
45
+ /**
46
+ * What each actor is, keyed by the persona key a step records. A persona's
47
+ * job title is what a reader wants — "the founder" — and its first role is
48
+ * the fallback for a persona that declares no title.
49
+ */
50
+ roleByActor: Map<string, string>;
44
51
  }
45
52
  /**
46
53
  * Build `durable step name → prose parts` for one scenario.
@@ -52,7 +59,7 @@ export interface ScenarioProse {
52
59
  */
53
60
  export declare const collectScenarioStepProse: (workflowMeta: {
54
61
  steps?: WorkflowStepMeta[];
55
- } | undefined, functionsMeta: FunctionsMeta) => ScenarioProse;
62
+ } | undefined, functionsMeta: FunctionsMeta, personas?: PersonaDefinitions) => ScenarioProse;
56
63
  /** The step functions in this scenario that declare a `browser` binding. */
57
64
  export declare const scenarioBrowserSteps: (workflowMeta: {
58
65
  steps?: WorkflowStepMeta[];
@@ -42,7 +42,7 @@ function* walkScenarioSteps(steps) {
42
42
  * name. A step's `template` is carried alongside and, when it exists, is what
43
43
  * actually gets rendered — filled from the input recorded on the run.
44
44
  */
45
- export const collectScenarioStepProse = (workflowMeta, functionsMeta) => {
45
+ export const collectScenarioStepProse = (workflowMeta, functionsMeta, personas = []) => {
46
46
  const byStepName = new Map();
47
47
  const byStepFunc = new Map();
48
48
  const ambiguous = new Set();
@@ -70,7 +70,21 @@ export const collectScenarioStepProse = (workflowMeta, functionsMeta) => {
70
70
  for (const stepFunc of ambiguous) {
71
71
  byStepFunc.delete(stepFunc);
72
72
  }
73
- return { byStepName, byStepFunc };
73
+ return { byStepName, byStepFunc, roleByActor: rolesByActor(personas) };
74
+ };
75
+ /**
76
+ * Only a job title introduces an actor. `roles` is authorisation — "reviewer"
77
+ * is a grant, not a description of who someone is — so a persona that declares
78
+ * no title gets no introduction rather than one assembled out of its grants.
79
+ */
80
+ const rolesByActor = (personas) => {
81
+ const roles = new Map();
82
+ for (const persona of personas) {
83
+ if (persona.jobTitle) {
84
+ roles.set(persona.id, persona.jobTitle);
85
+ }
86
+ }
87
+ return roles;
74
88
  };
75
89
  const sameProse = (a, b) => a.phase === b.phase &&
76
90
  a.description === b.description &&
@@ -143,25 +157,55 @@ export const scenarioSurfaceCoverage = (workflowMeta, functionsMeta, runSurface)
143
157
  * recorded under the name it was declared with is never re-resolved by a
144
158
  * function shared with another call site.
145
159
  */
146
- const stepSentence = (step, prose) => {
147
- const parts = prose.byStepName.get(step.stepName) ??
148
- prose.byStepName.get(baseName(step.stepName)) ??
149
- (step.stepFunc ? prose.byStepFunc.get(step.stepFunc) : undefined);
160
+ const stepProse = (step, prose) => prose.byStepName.get(step.stepName) ??
161
+ prose.byStepName.get(baseName(step.stepName)) ??
162
+ (step.stepFunc ? prose.byStepFunc.get(step.stepFunc) : undefined);
163
+ const stepSentence = (step, prose, continuation = {}) => {
164
+ const parts = stepProse(step, prose);
150
165
  return parts
151
166
  ? composeStepProse({
152
167
  ...parts,
168
+ ...continuation,
153
169
  input: step.input,
154
170
  keywordWidth: KEYWORD_WIDTH,
155
171
  })
156
172
  : `${''.padEnd(KEYWORD_WIDTH)} ${step.stepName}`;
157
173
  };
158
174
  /** The run's steps as renderable rows, in the order they were recorded. */
159
- export const scenarioStepRows = (steps, prose) => steps.map((step) => ({
160
- sentence: stepSentence(step, prose),
161
- status: step.status,
162
- durationMs: step.durationMs,
163
- error: step.error,
164
- }));
175
+ export const scenarioStepRows = (steps, prose) => {
176
+ const introduced = new Set();
177
+ let previous;
178
+ return steps.map((step) => {
179
+ const parts = stepProse(step, prose);
180
+ const actor = parts?.actor;
181
+ const role = actor ? prose.roleByActor.get(actor) : undefined;
182
+ // Only the step that first names an actor carries their role, so a run
183
+ // that is one person doing eight things says who they are once.
184
+ const firstMention = actor !== undefined && role !== undefined && !introduced.has(actor);
185
+ const continuation = {
186
+ continuesPhase: previous !== undefined && previous.phase === parts?.phase,
187
+ continuesActor: previous !== undefined && previous.actor === actor,
188
+ };
189
+ if (actor) {
190
+ introduced.add(actor);
191
+ }
192
+ previous = parts;
193
+ return {
194
+ sentence: stepSentence(step, prose, continuation),
195
+ ...(firstMention
196
+ ? {
197
+ sentenceWithRole: stepSentence(step, prose, {
198
+ ...continuation,
199
+ actorRole: role,
200
+ }),
201
+ }
202
+ : {}),
203
+ status: step.status,
204
+ durationMs: step.durationMs,
205
+ error: step.error,
206
+ };
207
+ });
208
+ };
165
209
  const baseName = (stepName) => stepName.replace(/#\d+$/, '');
166
210
  /**
167
211
  * Find the step a run died on and join it back to its declared prose, so a
@@ -331,7 +331,7 @@ export const scenarioRun = pikkuSessionlessFunc({
331
331
  * is the formatter's job.
332
332
  */
333
333
  const readRunSteps = async (service, runId, flowName) => {
334
- const prose = collectScenarioStepProse(state.workflows?.meta?.[flowName], functionsMeta);
334
+ const prose = collectScenarioStepProse(state.workflows?.meta?.[flowName], functionsMeta, state.personas?.definitions ?? []);
335
335
  const steps = (await service.getRunSteps(runId)).map((step) => ({
336
336
  stepName: step.stepName,
337
337
  status: step.status,
@@ -55,6 +55,31 @@ export declare function readTextSafe(path: string): Promise<string | null>;
55
55
  * optional schema qualifier, since `main.audit` is the same table.
56
56
  */
57
57
  export declare function migrationCreatesTable(sql: string, tableName: string): boolean;
58
+ /**
59
+ * Every table name one better-auth model can be sitting under.
60
+ *
61
+ * `modelName` renames a model's table — `user: { modelName: 'authUser' }` is
62
+ * how an app keeps better-auth's rows out of a `user` table it already owns —
63
+ * and the adapter's CamelCasePlugin then writes that as `auth_user`. An app
64
+ * that renames all four models has none of the default names in its
65
+ * migrations, so a default-names-only check reported it as having no auth
66
+ * schema at all. Accept the default, the override, and the override's
67
+ * snake_case form.
68
+ */
69
+ export declare const betterAuthTableAliases: (model: string, configText: string) => string[];
70
+ /**
71
+ * Static value imports of a package the deploy bundler stubs.
72
+ *
73
+ * A unit that does not require the service gets the package rewritten to
74
+ * `export {}`, so a static named import fails to bundle — once per unit, with
75
+ * an esbuild message that names the stub rather than the mistake. Type-only
76
+ * imports are erased before bundling and a side-effect import binds nothing,
77
+ * so neither is reported.
78
+ */
79
+ export declare const staticStubbedImports: (code: string) => Array<{
80
+ module: string;
81
+ service: string;
82
+ }>;
58
83
  /**
59
84
  * Every check that is true of any pikku project, regardless of where it deploys.
60
85
  *