@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.
- package/CHANGELOG.md +143 -0
- package/console-app/assets/{abnfDiagram-N423BO3Z-Dfq94a7u.js → abnfDiagram-N423BO3Z-BP7zxMq6.js} +1 -1
- package/console-app/assets/architecture-TIHT7OUA-D4Hj6824.js +1 -0
- package/console-app/assets/{architectureDiagram-T3A2C74G-C9MjP0IU.js → architectureDiagram-T3A2C74G-mvqdkIfF.js} +1 -1
- package/console-app/assets/{blockDiagram-VBNYF7ZC-CGgHSlOO.js → blockDiagram-VBNYF7ZC-daD8h3VT.js} +1 -1
- package/console-app/assets/{c4Diagram-5PPSVZJV-3kzckivq.js → c4Diagram-5PPSVZJV-Bd0_wKJj.js} +1 -1
- package/console-app/assets/channel-09aKDzM0.js +1 -0
- package/console-app/assets/{chunk-2GRJ4B5K-UZ1q29J_.js → chunk-2GRJ4B5K-BFRr_H2V.js} +1 -1
- package/console-app/assets/{chunk-4I5QYGJK-bq4iSS6S.js → chunk-4I5QYGJK-BXWo5Xyx.js} +1 -1
- package/console-app/assets/{chunk-5RXB4S5H-BCeU8nXq.js → chunk-5RXB4S5H-BFnXfzzz.js} +1 -1
- package/console-app/assets/{chunk-6Q2QTUOP-DpsTVhit.js → chunk-6Q2QTUOP-Bswg4T3s.js} +1 -1
- package/console-app/assets/{chunk-7Z6QIM7H-I6XKkv2A.js → chunk-7Z6QIM7H-StNGH40U.js} +1 -1
- package/console-app/assets/{chunk-GF5L2VYU-aYODFCZ6.js → chunk-GF5L2VYU-QwXKtQxa.js} +1 -1
- package/console-app/assets/{chunk-I66GZJ75-CWdPrY4a.js → chunk-I66GZJ75-DDQhhfA0.js} +1 -1
- package/console-app/assets/{chunk-JQJVKLGR-D5bHP4bt.js → chunk-JQJVKLGR-wFyF2bUv.js} +1 -1
- package/console-app/assets/{chunk-KBJHAD2P-B-Spac9o.js → chunk-KBJHAD2P-CQPQVDkD.js} +1 -1
- package/console-app/assets/{chunk-NSK5VX7P-0jZVLBhi.js → chunk-NSK5VX7P-DZhjvnHm.js} +1 -1
- package/console-app/assets/{chunk-QR6OTTB3-BurXFOtV.js → chunk-QR6OTTB3-D1-TbcCP.js} +1 -1
- package/console-app/assets/{chunk-RYQCIY6F-C4zacxhH.js → chunk-RYQCIY6F-82OYF6U8.js} +1 -1
- package/console-app/assets/{chunk-UBXNYLIW-7RthekQ-.js → chunk-UBXNYLIW-D85x6Zh2.js} +1 -1
- package/console-app/assets/{chunk-W5SLKNZC-rq3UcMTy.js → chunk-W5SLKNZC-B1Ps46_n.js} +1 -1
- package/console-app/assets/{chunk-WRU74C26-DUX-oZjQ.js → chunk-WRU74C26-Ct8XrToU.js} +1 -1
- package/console-app/assets/chunk-XXDRQBXY-C1KaR4pt.js +1 -0
- package/console-app/assets/classDiagram-JCYQIIEL-23nagJMi.js +1 -0
- package/console-app/assets/classDiagram-v2-OCEON4UE-23nagJMi.js +1 -0
- package/console-app/assets/{cose-bilkent-JH36ORCC-DZn35HFs.js → cose-bilkent-JH36ORCC-DdevwV5Y.js} +1 -1
- package/console-app/assets/{cynefin-VYW2F7L2-mZlOMKNi.js → cynefin-VYW2F7L2-Dj55csoo.js} +1 -1
- package/console-app/assets/{cynefinDiagram-MW4NZA55-uUAfUoag.js → cynefinDiagram-MW4NZA55-XWSzdajo.js} +1 -1
- package/console-app/assets/{dagre-DfTmIhGN.js → dagre-CLoXIMX5.js} +1 -1
- package/console-app/assets/{dagre-VZM6K2ZE-7oTddCss.js → dagre-VZM6K2ZE-BV2l3zSF.js} +1 -1
- package/console-app/assets/{diagram-7IWD3JNH-D6TR4TlN.js → diagram-7IWD3JNH-DC9NK-nv.js} +1 -1
- package/console-app/assets/{diagram-B4RE2ZJO-BZwUFLzC.js → diagram-B4RE2ZJO-Cirfb0aN.js} +1 -1
- package/console-app/assets/{diagram-LBJQPF4R-B4Ug2xRo.js → diagram-LBJQPF4R-BuRRy5X5.js} +1 -1
- package/console-app/assets/{diagram-Q27KOJAE-Fpr_Cahs.js → diagram-Q27KOJAE-CAOKQ2xs.js} +1 -1
- package/console-app/assets/{diagram-UB23O5K3-d0X7PA-5.js → diagram-UB23O5K3-Bto5kBJo.js} +1 -1
- package/console-app/assets/{ebnfDiagram-BXEA7PRR-DExP954c.js → ebnfDiagram-BXEA7PRR-C5OndYGC.js} +1 -1
- package/console-app/assets/{erDiagram-JOGREHBK-WdnXmG8f.js → erDiagram-JOGREHBK-DqU4xV4C.js} +1 -1
- package/console-app/assets/eventmodeling-45OFAUF4-RyG54ZHy.js +1 -0
- package/console-app/assets/flowDiagram-UKHOOZJN-DNdfrnRg.js +1 -0
- package/console-app/assets/{ganttDiagram-PKOTCBZU-ADJHCyvl.js → ganttDiagram-PKOTCBZU-D5_DE9R0.js} +1 -1
- package/console-app/assets/{gitGraph-TEB2WS4Q-BPcXt1vK.js → gitGraph-TEB2WS4Q-nuqfz7Fd.js} +1 -1
- package/console-app/assets/{gitGraphDiagram-DS77QQ5N-DFhenfUX.js → gitGraphDiagram-DS77QQ5N-BtJwp2Y3.js} +1 -1
- package/console-app/assets/{index-BwP6EcJr.js → index-DRfts2XF.js} +184 -184
- package/console-app/assets/{index-Mq-YbqNO.css → index-DXcH2K9z.css} +1 -1
- package/console-app/assets/{info-DKCQHKI2-BsE7egna.js → info-DKCQHKI2-CIfPVqHr.js} +1 -1
- package/console-app/assets/{infoDiagram-6WML65LV-BmVqXMw0.js → infoDiagram-6WML65LV-B-gTHQad.js} +1 -1
- package/console-app/assets/{ishikawaDiagram-WSZJBQD7-CdFTPIY5.js → ishikawaDiagram-WSZJBQD7-CCwAWb1g.js} +1 -1
- package/console-app/assets/{journeyDiagram-NVQOT4AX-DC8CKdJk.js → journeyDiagram-NVQOT4AX-DhqNj_ci.js} +1 -1
- package/console-app/assets/{kanban-definition-27J2QSJJ-Bo7kRcLN.js → kanban-definition-27J2QSJJ-DspZ1b3Y.js} +1 -1
- package/console-app/assets/{line-5nUqh22u.js → line-D7ZCpNkR.js} +1 -1
- package/console-app/assets/{linear-82KoPtTH.js → linear-B5jMy_q9.js} +1 -1
- package/console-app/assets/{mermaid-parser.core-R240ylPw.js → mermaid-parser.core-CMBFGJ0U.js} +3 -3
- package/console-app/assets/{mermaid.core-BZ3jSM6D.js → mermaid.core-DYoDrSEJ.js} +4 -4
- package/console-app/assets/{mindmap-definition-FAOFIHXS-x1K54VeO.js → mindmap-definition-FAOFIHXS-DsHwd2K9.js} +1 -1
- package/console-app/assets/{packet-7NZHBO7P-CE2Lun0t.js → packet-7NZHBO7P-BSRRjf4H.js} +1 -1
- package/console-app/assets/{pegDiagram-VL7TDLO6-CpGZYdUz.js → pegDiagram-VL7TDLO6-Bi0OlzgS.js} +1 -1
- package/console-app/assets/{pie-RZYD4A2V-Hf5MOyY8.js → pie-RZYD4A2V-D-8tgqYW.js} +1 -1
- package/console-app/assets/{pieDiagram-7S7Q4E2Y-0J5H7r7g.js → pieDiagram-7S7Q4E2Y-CsYbVqaR.js} +1 -1
- package/console-app/assets/{quadrantDiagram-CIZ2JOQS-DWtYi8O-.js → quadrantDiagram-CIZ2JOQS-LkLWrWKK.js} +1 -1
- package/console-app/assets/{radar-I7S5WNFK-BgtvrX4w.js → radar-I7S5WNFK-Bst62XZP.js} +1 -1
- package/console-app/assets/{railroad-3IZDKUUU-CeR0NhLL.js → railroad-3IZDKUUU-zJswMQYF.js} +1 -1
- package/console-app/assets/railroad-abnf-AHOZXSZD-DX4FqVY6.js +1 -0
- package/console-app/assets/railroad-ebnf-EBAXGLYW-DdyOtX1l.js +1 -0
- package/console-app/assets/railroad-peg-LSFZ7HO6-CclC1sXF.js +1 -0
- package/console-app/assets/{railroadDiagram-AXF67PYL-CUIn_gPf.js → railroadDiagram-AXF67PYL-C0QZkg7m.js} +1 -1
- package/console-app/assets/{requirementDiagram-LRYGKXZP-Ds9Aqcts.js → requirementDiagram-LRYGKXZP-BQg0AbLI.js} +1 -1
- package/console-app/assets/{sankeyDiagram-W5VNT64P-CKhuya4d.js → sankeyDiagram-W5VNT64P-CQb0BMMi.js} +1 -1
- package/console-app/assets/{sequenceDiagram-SI44F4Z6-DKgOmdzz.js → sequenceDiagram-SI44F4Z6-BzgBi0a5.js} +1 -1
- package/console-app/assets/{src-DwHVY--Z.js → src-Dg-KiSsV.js} +1 -1
- package/console-app/assets/{stateDiagram-OKZ733FA-CPIfaZie.js → stateDiagram-OKZ733FA-BiqXn68g.js} +1 -1
- package/console-app/assets/stateDiagram-v2-UEYNNEHI-I34jrzP0.js +1 -0
- package/console-app/assets/{swimlanes-SLNWSIFB-8q3lK4RS.js → swimlanes-SLNWSIFB-Dy7wDP1q.js} +1 -1
- package/console-app/assets/swimlanesDiagram-ULZ7WXOC-C1PrPB0G.js +8 -0
- package/console-app/assets/{timeline-definition-Z64GVDOM-CHHi2Rpq.js → timeline-definition-Z64GVDOM-DSWXli8X.js} +1 -1
- package/console-app/assets/{treeView-QDETBFTQ-DrLHlsII.js → treeView-QDETBFTQ-CeWwcs9r.js} +1 -1
- package/console-app/assets/{treemap-6X3UGDF4-C3saYKuK.js → treemap-6X3UGDF4-BfrumiJh.js} +1 -1
- package/console-app/assets/{vennDiagram-T6HMQDX7-CdyzNiAu.js → vennDiagram-T6HMQDX7-BsuldZ1n.js} +1 -1
- package/console-app/assets/{wardley-OPB4EBWU-BSrymyse.js → wardley-OPB4EBWU-oZldxS8z.js} +1 -1
- package/console-app/assets/{wardleyDiagram-T6FBY63Y-CCW6rhEo.js → wardleyDiagram-T6FBY63Y-C5LXyHMj.js} +1 -1
- package/console-app/assets/{xychartDiagram-ELKLHX3M-BQvPaxzg.js → xychartDiagram-ELKLHX3M-CwhqhNkO.js} +1 -1
- package/console-app/index.html +2 -2
- package/dist/.pikku/addon/index.d.ts +1 -1
- package/dist/.pikku/addon/index.js +1 -1
- package/dist/.pikku/addon/pikku-addon-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/pikku-addon-types.gen.js +1 -1
- package/dist/.pikku/agent/index.d.ts +1 -1
- package/dist/.pikku/agent/index.js +1 -1
- package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
- package/dist/.pikku/agent/pikku-model-aliases.gen.js +1 -1
- package/dist/.pikku/auth/index.d.ts +1 -1
- package/dist/.pikku/auth/index.js +1 -1
- package/dist/.pikku/auth/pikku-auth-types.gen.d.ts +1 -1
- package/dist/.pikku/auth/pikku-auth-types.gen.js +1 -1
- package/dist/.pikku/channel/index.d.ts +1 -1
- package/dist/.pikku/channel/index.js +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
- package/dist/.pikku/cli/index.d.ts +1 -1
- package/dist/.pikku/cli/index.js +1 -1
- package/dist/.pikku/cli/pikku-cli-channel.js +1 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
- package/dist/.pikku/error/index.d.ts +1 -1
- package/dist/.pikku/error/index.js +1 -1
- package/dist/.pikku/error/pikku-error-types.gen.d.ts +1 -1
- package/dist/.pikku/error/pikku-error-types.gen.js +1 -1
- package/dist/.pikku/function/index.d.ts +1 -1
- package/dist/.pikku/function/index.js +1 -1
- package/dist/.pikku/function/pikku-function-types.gen.d.ts +1 -1
- package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
- package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
- package/dist/.pikku/function/pikku-functions-meta.gen.json +1 -1
- package/dist/.pikku/function/pikku-functions.gen.js +1 -1
- package/dist/.pikku/gateway/index.d.ts +1 -1
- package/dist/.pikku/gateway/index.js +1 -1
- package/dist/.pikku/gateway/pikku-gateway-types.gen.d.ts +1 -1
- package/dist/.pikku/gateway/pikku-gateway-types.gen.js +1 -1
- package/dist/.pikku/http/index.d.ts +1 -1
- package/dist/.pikku/http/index.js +1 -1
- package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
- package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
- package/dist/.pikku/mcp/index.d.ts +1 -1
- package/dist/.pikku/mcp/index.js +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
- package/dist/.pikku/middleware/index.d.ts +1 -1
- package/dist/.pikku/middleware/index.js +1 -1
- package/dist/.pikku/middleware/pikku-middleware-types.gen.d.ts +2 -2
- package/dist/.pikku/middleware/pikku-middleware-types.gen.js +2 -2
- package/dist/.pikku/pikku-bootstrap-scenarios.gen.d.ts +1 -1
- package/dist/.pikku/pikku-bootstrap-scenarios.gen.js +1 -1
- package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
- package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
- package/dist/.pikku/pikku-services.gen.d.ts +1 -1
- package/dist/.pikku/queue/index.d.ts +1 -1
- package/dist/.pikku/queue/index.js +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
- package/dist/.pikku/scenarios/index.d.ts +1 -1
- package/dist/.pikku/scenarios/index.js +1 -1
- package/dist/.pikku/scenarios/pikku-personas.gen.js +1 -1
- package/dist/.pikku/scenarios/pikku-scenario-functions-meta.gen.js +1 -1
- package/dist/.pikku/scenarios/pikku-scenario-functions.gen.d.ts +1 -1
- package/dist/.pikku/scenarios/pikku-scenario-types.gen.d.ts +3 -3
- package/dist/.pikku/scenarios/pikku-scenario-wirings-meta.gen.js +1 -1
- package/dist/.pikku/scenarios/pikku-scenario-wirings.gen.d.ts +1 -1
- package/dist/.pikku/scenarios/schemas/register.gen.d.ts +1 -1
- package/dist/.pikku/scenarios/schemas/register.gen.js +1 -1
- package/dist/.pikku/scheduler/index.d.ts +1 -1
- package/dist/.pikku/scheduler/index.js +1 -1
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
- package/dist/.pikku/schemas/register.gen.js +1 -1
- package/dist/.pikku/scopes/index.d.ts +1 -1
- package/dist/.pikku/scopes/index.js +1 -1
- package/dist/.pikku/scopes/pikku-personas.gen.js +1 -1
- package/dist/.pikku/scopes/pikku-roles.gen.d.ts +1 -1
- package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +1 -1
- package/dist/.pikku/scopes/pikku-scope-types.gen.js +1 -1
- package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +1 -1
- package/dist/.pikku/secrets/index.d.ts +1 -1
- package/dist/.pikku/secrets/index.js +1 -1
- package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
- package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
- package/dist/.pikku/services/pikku-meta-service.gen.d.ts +1 -1
- package/dist/.pikku/services/pikku-meta-service.gen.js +1 -1
- package/dist/.pikku/setup/index.d.ts +1 -1
- package/dist/.pikku/setup/index.js +1 -1
- package/dist/.pikku/setup/pikku-setup-types.gen.d.ts +1 -1
- package/dist/.pikku/setup/pikku-setup-types.gen.js +1 -1
- package/dist/.pikku/trigger/index.d.ts +1 -1
- package/dist/.pikku/trigger/index.js +1 -1
- package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
- package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
- package/dist/.pikku/variables/index.d.ts +1 -1
- package/dist/.pikku/variables/index.js +1 -1
- package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
- package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
- package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
- package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
- package/dist/.pikku/workflow/index.d.ts +1 -1
- package/dist/.pikku/workflow/index.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
- package/dist/bin/pikku-bin.mjs +2 -2
- package/dist/src/deploy/bundler/bundler.js +1 -15
- package/dist/src/deploy/bundler/service-module-map.d.ts +17 -0
- package/dist/src/deploy/bundler/service-module-map.js +19 -0
- package/dist/src/fabric/functions/deploy.function.js +4 -2
- package/dist/src/fabric/functions/validate.function.js +70 -7
- package/dist/src/fabric/lib/deployment.d.ts +14 -0
- package/dist/src/fabric/lib/deployment.js +24 -0
- package/dist/src/functions/commands/scenario-formatter.js +6 -3
- package/dist/src/functions/commands/scenario-ladder.d.ts +8 -1
- package/dist/src/functions/commands/scenario-ladder.js +56 -12
- package/dist/src/functions/commands/scenario.js +1 -1
- package/dist/src/functions/validate/shared-checks.d.ts +25 -0
- package/dist/src/functions/validate/shared-checks.js +86 -2
- package/dist/src/functions/wirings/middleware/serialize-middleware-types.js +1 -1
- package/dist/src/functions/wirings/variables/serialize-variables-types.js +5 -1
- package/dist/src/functions/wirings/workflow/serialize-scenario-types.js +2 -2
- package/dist/src/services/cli-logger-forwarder.service.d.ts +2 -0
- package/dist/src/services/cli-logger-forwarder.service.js +10 -0
- package/dist/src/services/cli-logger.service.d.ts +21 -0
- package/dist/src/services/cli-logger.service.js +41 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/surface.json +88 -7
- package/console-app/assets/architecture-TIHT7OUA-CA-Di-O3.js +0 -1
- package/console-app/assets/channel-UOxM22B3.js +0 -1
- package/console-app/assets/chunk-XXDRQBXY-gIL1rRSY.js +0 -1
- package/console-app/assets/classDiagram-JCYQIIEL-BwV1w5At.js +0 -1
- package/console-app/assets/classDiagram-v2-OCEON4UE-BwV1w5At.js +0 -1
- package/console-app/assets/eventmodeling-45OFAUF4-DXnDrAdV.js +0 -1
- package/console-app/assets/flowDiagram-UKHOOZJN-UixAvy5Z.js +0 -1
- package/console-app/assets/railroad-abnf-AHOZXSZD-BEVU16-y.js +0 -1
- package/console-app/assets/railroad-ebnf-EBAXGLYW-WT4rrGXf.js +0 -1
- package/console-app/assets/railroad-peg-LSFZ7HO6-BnObCMjn.js +0 -1
- package/console-app/assets/stateDiagram-v2-UEYNNEHI-DHcCmJ1C.js +0 -1
- package/console-app/assets/swimlanesDiagram-ULZ7WXOC-B1uT0NiL.js +0 -8
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* This file was generated by @pikku/cli@0.12.
|
|
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';
|
package/dist/bin/pikku-bin.mjs
CHANGED
|
@@ -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.
|
|
15
|
-
process.stderr.write(`\n Update available 0.12.
|
|
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
|
-
|
|
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(
|
|
502
|
+
while ((m = re.exec(src))) {
|
|
493
503
|
const spec = m[1];
|
|
494
|
-
if (spec
|
|
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
|
-
|
|
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
|
|
42
|
-
|
|
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 ` ${
|
|
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
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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) =>
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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
|
*
|