@pikku/cli 0.12.118 → 0.12.119
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 +172 -0
- package/console-app/assets/{abnfDiagram-N423BO3Z-WNIAg_Oa.js → abnfDiagram-N423BO3Z-CiK5F2ml.js} +1 -1
- package/console-app/assets/architecture-TIHT7OUA-FMO1RByN.js +1 -0
- package/console-app/assets/{architectureDiagram-T3A2C74G-DM698mgf.js → architectureDiagram-T3A2C74G-g4Elcs_0.js} +1 -1
- package/console-app/assets/{blockDiagram-VBNYF7ZC-DPfy9K5S.js → blockDiagram-VBNYF7ZC-CI6muc3M.js} +1 -1
- package/console-app/assets/{c4Diagram-5PPSVZJV-DhLbbBbX.js → c4Diagram-5PPSVZJV-CjzL9yGp.js} +1 -1
- package/console-app/assets/channel-Dp8A5NJg.js +1 -0
- package/console-app/assets/{chunk-2GRJ4B5K-C1RQ1gvs.js → chunk-2GRJ4B5K-C68TKOLb.js} +1 -1
- package/console-app/assets/{chunk-4I5QYGJK-BkzSdNc_.js → chunk-4I5QYGJK-D_DINIPO.js} +1 -1
- package/console-app/assets/{chunk-5RXB4S5H-DZpBpdcU.js → chunk-5RXB4S5H-D8mEuiea.js} +1 -1
- package/console-app/assets/{chunk-6Q2QTUOP-mZObxdld.js → chunk-6Q2QTUOP-CVNqLnb8.js} +1 -1
- package/console-app/assets/{chunk-7Z6QIM7H-C0HbxZEa.js → chunk-7Z6QIM7H-Bnih6HyS.js} +1 -1
- package/console-app/assets/{chunk-GF5L2VYU-DXPVwWqW.js → chunk-GF5L2VYU-C5efrbFt.js} +1 -1
- package/console-app/assets/{chunk-I66GZJ75-pVpq9ckD.js → chunk-I66GZJ75-dckv50K3.js} +1 -1
- package/console-app/assets/{chunk-JQJVKLGR-DJQ8K4wK.js → chunk-JQJVKLGR-HirBo6LQ.js} +1 -1
- package/console-app/assets/{chunk-KBJHAD2P-B8XuxRCO.js → chunk-KBJHAD2P-lknhmPj0.js} +1 -1
- package/console-app/assets/{chunk-NSK5VX7P-cYzQU4bD.js → chunk-NSK5VX7P-tGAl7zxF.js} +1 -1
- package/console-app/assets/{chunk-QR6OTTB3-CNoTFsqn.js → chunk-QR6OTTB3-BlSKCrEq.js} +1 -1
- package/console-app/assets/{chunk-RYQCIY6F-DoKRUO_N.js → chunk-RYQCIY6F-CwQmwEV-.js} +1 -1
- package/console-app/assets/{chunk-UBXNYLIW-BqcIoUpU.js → chunk-UBXNYLIW-D1Dn6ZK0.js} +1 -1
- package/console-app/assets/{chunk-W5SLKNZC-p0Qalbjj.js → chunk-W5SLKNZC-DOkZHhST.js} +1 -1
- package/console-app/assets/{chunk-WRU74C26-DUMn96Dr.js → chunk-WRU74C26-CB4orIKm.js} +1 -1
- package/console-app/assets/chunk-XXDRQBXY-BMybY6E-.js +1 -0
- package/console-app/assets/classDiagram-JCYQIIEL-C-K-UAUR.js +1 -0
- package/console-app/assets/classDiagram-v2-OCEON4UE-C-K-UAUR.js +1 -0
- package/console-app/assets/{cose-bilkent-JH36ORCC-BCh3BlPI.js → cose-bilkent-JH36ORCC-stBhaqpU.js} +1 -1
- package/console-app/assets/{cynefin-VYW2F7L2-ZfghUZsD.js → cynefin-VYW2F7L2-Bb1nmKWZ.js} +1 -1
- package/console-app/assets/{cynefinDiagram-MW4NZA55-DcV3QXCe.js → cynefinDiagram-MW4NZA55-Bp8fMJi-.js} +1 -1
- package/console-app/assets/{dagre-BPFWXLBN.js → dagre-DshmzimC.js} +1 -1
- package/console-app/assets/{dagre-VZM6K2ZE-DETshBO-.js → dagre-VZM6K2ZE-DIl1klf5.js} +1 -1
- package/console-app/assets/{diagram-7IWD3JNH-CsLX3P2o.js → diagram-7IWD3JNH-DdkSOxKT.js} +1 -1
- package/console-app/assets/{diagram-B4RE2ZJO-o2zcxm5S.js → diagram-B4RE2ZJO-9Dj9O4L8.js} +1 -1
- package/console-app/assets/{diagram-LBJQPF4R-BD2zKU21.js → diagram-LBJQPF4R-CxBb73tU.js} +1 -1
- package/console-app/assets/{diagram-Q27KOJAE-DHaacyna.js → diagram-Q27KOJAE-CPpUmnvb.js} +1 -1
- package/console-app/assets/{diagram-UB23O5K3-pSLCMUyV.js → diagram-UB23O5K3-7wV_Db6W.js} +1 -1
- package/console-app/assets/{ebnfDiagram-BXEA7PRR-BDzawX3O.js → ebnfDiagram-BXEA7PRR-Cxzbf8pk.js} +1 -1
- package/console-app/assets/{erDiagram-JOGREHBK-CyYnPmbN.js → erDiagram-JOGREHBK-BBPLq83P.js} +1 -1
- package/console-app/assets/eventmodeling-45OFAUF4-CLUnygIv.js +1 -0
- package/console-app/assets/flowDiagram-UKHOOZJN-D3mDcWWx.js +1 -0
- package/console-app/assets/{ganttDiagram-PKOTCBZU-3fhCBbPA.js → ganttDiagram-PKOTCBZU-Erh7WK4H.js} +1 -1
- package/console-app/assets/{gitGraph-TEB2WS4Q-CdLRkVux.js → gitGraph-TEB2WS4Q-o5FLRF57.js} +1 -1
- package/console-app/assets/{gitGraphDiagram-DS77QQ5N-CC1epdKw.js → gitGraphDiagram-DS77QQ5N-BFbsaenX.js} +1 -1
- package/console-app/assets/{index-GruDnAhJ.css → index-Mq-YbqNO.css} +1 -1
- package/console-app/assets/{index-BRmokG9t.js → index-w2ZoJr8X.js} +178 -178
- package/console-app/assets/{info-DKCQHKI2-BJs8WkzC.js → info-DKCQHKI2-Dkcrdr1w.js} +1 -1
- package/console-app/assets/{infoDiagram-6WML65LV-uoOwoIeI.js → infoDiagram-6WML65LV-iZVC5Wzy.js} +1 -1
- package/console-app/assets/{ishikawaDiagram-WSZJBQD7-vCUJhwTi.js → ishikawaDiagram-WSZJBQD7-BjV8LLeA.js} +1 -1
- package/console-app/assets/{journeyDiagram-NVQOT4AX-D2QcIlLG.js → journeyDiagram-NVQOT4AX-D3rpLjYi.js} +1 -1
- package/console-app/assets/{kanban-definition-27J2QSJJ-JwwKowmR.js → kanban-definition-27J2QSJJ-Dds5TFyv.js} +1 -1
- package/console-app/assets/{line-h2oRreYF.js → line-D1rUAT18.js} +1 -1
- package/console-app/assets/{linear-Dz002X_a.js → linear-fQ_6Sc79.js} +1 -1
- package/console-app/assets/{mermaid-parser.core-DTgmT0AA.js → mermaid-parser.core-B9Q-4IXF.js} +3 -3
- package/console-app/assets/{mermaid.core-1jSEDr-j.js → mermaid.core-bPhADShw.js} +4 -4
- package/console-app/assets/{mindmap-definition-FAOFIHXS-C3Txxhj4.js → mindmap-definition-FAOFIHXS-CULlU6Fy.js} +1 -1
- package/console-app/assets/{packet-7NZHBO7P-BGG7zIK2.js → packet-7NZHBO7P-DpwzoQpc.js} +1 -1
- package/console-app/assets/{pegDiagram-VL7TDLO6--g1r_rov.js → pegDiagram-VL7TDLO6-B9fKKc4F.js} +1 -1
- package/console-app/assets/{pie-RZYD4A2V-C5OepMH7.js → pie-RZYD4A2V-DkXpqWAI.js} +1 -1
- package/console-app/assets/{pieDiagram-7S7Q4E2Y-DGD_LzGm.js → pieDiagram-7S7Q4E2Y-Bcpn2rUM.js} +1 -1
- package/console-app/assets/{quadrantDiagram-CIZ2JOQS-CyBQQlD2.js → quadrantDiagram-CIZ2JOQS-Bd5wWFj_.js} +1 -1
- package/console-app/assets/{radar-I7S5WNFK-CaBOAO95.js → radar-I7S5WNFK-ylw-u3HI.js} +1 -1
- package/console-app/assets/{railroad-3IZDKUUU-2aTWN4Pw.js → railroad-3IZDKUUU-D4LMucL-.js} +1 -1
- package/console-app/assets/railroad-abnf-AHOZXSZD-CRTVzK1g.js +1 -0
- package/console-app/assets/railroad-ebnf-EBAXGLYW-CB13ugAF.js +1 -0
- package/console-app/assets/railroad-peg-LSFZ7HO6-AN8zyQYp.js +1 -0
- package/console-app/assets/{railroadDiagram-AXF67PYL-3Nr0rlTp.js → railroadDiagram-AXF67PYL-CZukQql9.js} +1 -1
- package/console-app/assets/{requirementDiagram-LRYGKXZP-BN7sEwSa.js → requirementDiagram-LRYGKXZP-Ou4nRENK.js} +1 -1
- package/console-app/assets/{sankeyDiagram-W5VNT64P-CXZR46wO.js → sankeyDiagram-W5VNT64P-BKdG-c_o.js} +1 -1
- package/console-app/assets/{sequenceDiagram-SI44F4Z6-DNtmdJ4U.js → sequenceDiagram-SI44F4Z6-Dc7d5obe.js} +1 -1
- package/console-app/assets/{src-x1E3pJJ-.js → src-BFb2oeKx.js} +1 -1
- package/console-app/assets/{stateDiagram-OKZ733FA-B_GyYdl_.js → stateDiagram-OKZ733FA-BA9fuN7b.js} +1 -1
- package/console-app/assets/stateDiagram-v2-UEYNNEHI-D13a6mUd.js +1 -0
- package/console-app/assets/{swimlanes-SLNWSIFB-D4N7VdF7.js → swimlanes-SLNWSIFB-l-ETgM83.js} +1 -1
- package/console-app/assets/swimlanesDiagram-ULZ7WXOC-BsC-B2Z9.js +8 -0
- package/console-app/assets/{timeline-definition-Z64GVDOM-DU5rsOWQ.js → timeline-definition-Z64GVDOM-Uj_ByeVr.js} +1 -1
- package/console-app/assets/{treeView-QDETBFTQ-DaKM_9sB.js → treeView-QDETBFTQ-BvFRkVGY.js} +1 -1
- package/console-app/assets/{treemap-6X3UGDF4-BabsKtZY.js → treemap-6X3UGDF4-BV5T7Dw9.js} +1 -1
- package/console-app/assets/{vennDiagram-T6HMQDX7-Dniftpq0.js → vennDiagram-T6HMQDX7-DAFU8gAo.js} +1 -1
- package/console-app/assets/{wardley-OPB4EBWU-BWffQNys.js → wardley-OPB4EBWU-MLNuhuiA.js} +1 -1
- package/console-app/assets/{wardleyDiagram-T6FBY63Y-CQ74fVdn.js → wardleyDiagram-T6FBY63Y-B1lCTfi1.js} +1 -1
- package/console-app/assets/{xychartDiagram-ELKLHX3M-D-XxbGIL.js → xychartDiagram-ELKLHX3M-Bw3zhuWc.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-meta.gen.json +2 -9
- 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 +8 -6
- package/dist/.pikku/function/pikku-functions.gen.js +1 -3
- 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 +1 -1
- package/dist/.pikku/middleware/pikku-middleware-types.gen.js +1 -1
- 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.d.ts +11 -0
- package/dist/.pikku/scenarios/pikku-personas.gen.js +12 -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 +1 -1
- 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/schemas/schemas/PersonaSyncInput.schema.json +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/cli.wiring.js +1 -9
- package/dist/src/fabric/lib/git.js +31 -1
- package/dist/src/functions/commands/dev.js +2 -0
- package/dist/src/functions/commands/persona-sync.d.ts +14 -22
- package/dist/src/functions/commands/persona-sync.js +29 -107
- package/dist/src/functions/commands/serve.js +2 -0
- package/dist/src/functions/validate/auth-plugin-checks.d.ts +16 -0
- package/dist/src/functions/validate/auth-plugin-checks.js +165 -0
- package/dist/src/functions/validate/persona-checks.js +1 -1
- package/dist/src/functions/validate/shared-checks.js +12 -0
- package/dist/src/functions/validate/websocket-deps-checks.d.ts +30 -0
- package/dist/src/functions/validate/websocket-deps-checks.js +42 -0
- package/dist/src/functions/wirings/personas/serialize-personas-secrets.d.ts +1 -1
- package/dist/src/functions/wirings/personas/serialize-personas-secrets.js +1 -1
- package/dist/src/functions/wirings/scopes/pikku-command-scopes.d.ts +10 -0
- package/dist/src/functions/wirings/scopes/pikku-command-scopes.js +20 -3
- package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +1 -1
- package/dist/src/functions/wirings/workflow/serialize-personas.d.ts +2 -1
- package/dist/src/functions/wirings/workflow/serialize-personas.js +20 -1
- package/dist/src/server/actor-sign-in.d.ts +5 -0
- package/dist/src/server/actor-sign-in.js +27 -0
- package/dist/src/server/node-server-runner.d.ts +11 -0
- package/dist/src/server/node-server-runner.js +33 -8
- package/dist/src/services.js +3 -1
- package/dist/src/utils/resolve-from-project.d.ts +29 -0
- package/dist/src/utils/resolve-from-project.js +45 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -10
- package/snippets.json +1 -1
- package/surface.json +2 -2
- package/console-app/assets/architecture-TIHT7OUA-CIT-Nug2.js +0 -1
- package/console-app/assets/channel-DQC6cL1c.js +0 -1
- package/console-app/assets/chunk-XXDRQBXY-Dgz5VbWO.js +0 -1
- package/console-app/assets/classDiagram-JCYQIIEL-1ASFocNV.js +0 -1
- package/console-app/assets/classDiagram-v2-OCEON4UE-1ASFocNV.js +0 -1
- package/console-app/assets/eventmodeling-45OFAUF4-BYJ0A5k-.js +0 -1
- package/console-app/assets/flowDiagram-UKHOOZJN-CVn87uiP.js +0 -1
- package/console-app/assets/railroad-abnf-AHOZXSZD-TU7k5gB_.js +0 -1
- package/console-app/assets/railroad-ebnf-EBAXGLYW-DbArPBkM.js +0 -1
- package/console-app/assets/railroad-peg-LSFZ7HO6-TzB93z4K.js +0 -1
- package/console-app/assets/stateDiagram-v2-UEYNNEHI-D7V_HITc.js +0 -1
- package/console-app/assets/swimlanesDiagram-ULZ7WXOC-C4XcIHKT.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.119
|
|
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.119') {
|
|
15
|
+
process.stderr.write(`\n Update available 0.12.119 → ${latest}\n brew upgrade pikku or npm install -g @pikku/cli\n\n`)
|
|
16
16
|
}
|
|
17
17
|
} catch {}
|
|
18
18
|
}
|
package/dist/src/cli.wiring.js
CHANGED
|
@@ -635,16 +635,8 @@ wireCLI({
|
|
|
635
635
|
}),
|
|
636
636
|
sync: pikkuCLICommand({
|
|
637
637
|
func: personaSync,
|
|
638
|
-
description: "
|
|
638
|
+
description: "Report which personas an environment will provision, with which roles, and why any of them were skipped. The provisioning itself happens in the deployment — call provisionPersonas from '@pikku/better-auth' in your server lifecycle — because the CLI has no connection to a deployed environment's database.",
|
|
639
639
|
parameters: '<environment>',
|
|
640
|
-
options: {
|
|
641
|
-
dryRun: {
|
|
642
|
-
description: 'Report who would be provisioned, with which roles, and why anyone was skipped — without touching anything',
|
|
643
|
-
},
|
|
644
|
-
apiUrl: {
|
|
645
|
-
description: "Override the environment's apiUrl — for a target that only exists at run time, such as a freshly deployed sandbox",
|
|
646
|
-
},
|
|
647
|
-
},
|
|
648
640
|
}),
|
|
649
641
|
list: pikkuCLICommand({
|
|
650
642
|
func: personaList,
|
|
@@ -15,9 +15,39 @@ export class GitError extends Error {
|
|
|
15
15
|
this.stderr = stderr;
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Repository-location variables git exports to its hooks. `git push` from a
|
|
20
|
+
* worktree sets GIT_DIR, and a hook's children inherit it — after which git
|
|
21
|
+
* answers about the hook's repository no matter which directory it is run in,
|
|
22
|
+
* so a probe given a `cwd` outside any repository reports that repository's
|
|
23
|
+
* state instead of "no repository". Every probe below picks its repository by
|
|
24
|
+
* `cwd`, so the inherited pointer is always wrong here and is dropped.
|
|
25
|
+
*/
|
|
26
|
+
const REPO_LOCATION_ENV = [
|
|
27
|
+
'GIT_DIR',
|
|
28
|
+
'GIT_COMMON_DIR',
|
|
29
|
+
'GIT_WORK_TREE',
|
|
30
|
+
'GIT_INDEX_FILE',
|
|
31
|
+
'GIT_PREFIX',
|
|
32
|
+
'GIT_NAMESPACE',
|
|
33
|
+
'GIT_OBJECT_DIRECTORY',
|
|
34
|
+
'GIT_ALTERNATE_OBJECT_DIRECTORIES',
|
|
35
|
+
'GIT_CEILING_DIRECTORIES',
|
|
36
|
+
];
|
|
37
|
+
function envWithoutInheritedRepo() {
|
|
38
|
+
const env = { ...process.env };
|
|
39
|
+
for (const key of REPO_LOCATION_ENV) {
|
|
40
|
+
delete env[key];
|
|
41
|
+
}
|
|
42
|
+
return env;
|
|
43
|
+
}
|
|
18
44
|
function git(args, cwd = process.cwd()) {
|
|
19
45
|
return new Promise((resolve, reject) => {
|
|
20
|
-
const child = spawn('git', args, {
|
|
46
|
+
const child = spawn('git', args, {
|
|
47
|
+
cwd,
|
|
48
|
+
env: envWithoutInheritedRepo(),
|
|
49
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
50
|
+
});
|
|
21
51
|
let stdout = '';
|
|
22
52
|
let stderr = '';
|
|
23
53
|
child.stdout.on('data', (b) => (stdout += b.toString()));
|
|
@@ -22,11 +22,13 @@ import { createDevAgentRunner } from './dev-agent-runner.js';
|
|
|
22
22
|
import { resolveConsoleMount } from './serve-console.js';
|
|
23
23
|
import { serverReadyLine } from '../../server/server-ready.js';
|
|
24
24
|
import { createEphemeralContentSigningJWT } from '../../server/content-signing-jwt.js';
|
|
25
|
+
import { enableDevActorSignIn } from '../../server/actor-sign-in.js';
|
|
25
26
|
import { applyModelAliasOverride } from '../../utils/model-alias-override.js';
|
|
26
27
|
export const dev = pikkuSessionlessFunc({
|
|
27
28
|
remote: true,
|
|
28
29
|
func: async ({ logger, config, getInspectorState, invalidateInspectorState, variables, devServerRunner, }, { port, watch, hmr, coverage, test, model }, { rpc }) => {
|
|
29
30
|
process.env.PIKKU_DEV_QUICK_LOGIN ??= 'true';
|
|
31
|
+
enableDevActorSignIn(logger);
|
|
30
32
|
applyModelAliasOverride(logger, model, config.models);
|
|
31
33
|
if (test) {
|
|
32
34
|
process.env.PIKKU_TEST_RUN = 'true';
|
|
@@ -1,33 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* roles they declare.
|
|
2
|
+
* Report which personas an environment will provision, and which it will not.
|
|
4
3
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* It reports rather than writes, because the writing happens somewhere this
|
|
5
|
+
* command cannot reach. Provisioning a persona means creating a user row and
|
|
6
|
+
* granting it roles, and both of those live in the deployment's database — one
|
|
7
|
+
* the CLI has no connection to for any environment that is not the developer's
|
|
8
|
+
* own. This command used to open a Kysely connection from the local project
|
|
9
|
+
* config and write through it, which provisioned a local stage correctly and
|
|
10
|
+
* silently provisioned the wrong database for every other environment.
|
|
9
11
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* It needs both halves of an environment: its API, to sign the persona in, and
|
|
17
|
-
* its database, to write the grants. They must be the same deployment — the
|
|
18
|
-
* command has no way to check that, so pointing it at a stage's API and a local
|
|
19
|
-
* database provisions nobody usefully.
|
|
12
|
+
* So the deployment provisions itself: an app calls `provisionPersonas` from
|
|
13
|
+
* `@pikku/better-auth` in its server lifecycle, where the database connection
|
|
14
|
+
* and better-auth's own adapter are both already open, and a deploy carries its
|
|
15
|
+
* personas with it. What is left here is the half that needs no database — the
|
|
16
|
+
* declaration, and the environment rule applied to it — which is what tells you
|
|
17
|
+
* before a deploy whether the accounts you expect will appear.
|
|
20
18
|
*/
|
|
21
19
|
export declare const personaSync: import("#pikku/function").PikkuFunctionConfig<{
|
|
22
20
|
environment: string;
|
|
23
|
-
apiUrl?: string;
|
|
24
|
-
dryRun?: boolean;
|
|
25
21
|
}, void, "rpc" | "session", import("#pikku/function").PikkuFunctionSessionless<{
|
|
26
22
|
environment: string;
|
|
27
|
-
apiUrl?: string;
|
|
28
|
-
dryRun?: boolean;
|
|
29
23
|
}, void, "rpc" | "session", import("#pikku/function").WiredServices, unknown> | import("#pikku/function").PikkuFunction<{
|
|
30
24
|
environment: string;
|
|
31
|
-
apiUrl?: string;
|
|
32
|
-
dryRun?: boolean;
|
|
33
25
|
}, void, "rpc" | "session", import("#pikku/function").WiredServices>, undefined, undefined>;
|
|
@@ -1,51 +1,26 @@
|
|
|
1
1
|
import { pikkuSessionlessFunc } from '#pikku/function';
|
|
2
|
-
import { createHttpPersonas } from '@pikku/core/persona';
|
|
3
2
|
import { personaEnvironmentRefusal } from '@pikku/core/persona';
|
|
4
3
|
import { resolvePersonas } from '../../utils/resolve-personas.js';
|
|
5
|
-
import { resolvePersonaCredentials } from '../../utils/persona-credentials.js';
|
|
6
|
-
import { resolveEnvironment } from './environment.js';
|
|
7
|
-
import { loadDeclaredRoles, openScopeServiceForRoles } from './roles-shared.js';
|
|
8
4
|
/**
|
|
9
|
-
*
|
|
5
|
+
* Report which personas an environment will provision, and which it will not.
|
|
10
6
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
|
|
18
|
-
const userIdByEmail = async (db, email) => {
|
|
19
|
-
const row = await db
|
|
20
|
-
.selectFrom('user')
|
|
21
|
-
.select('id')
|
|
22
|
-
.where('email', '=', email)
|
|
23
|
-
.executeTakeFirst();
|
|
24
|
-
return row ? String(row.id) : null;
|
|
25
|
-
};
|
|
26
|
-
/**
|
|
27
|
-
* Provision the declared personas into an environment: their accounts, and the
|
|
28
|
-
* roles they declare.
|
|
29
|
-
*
|
|
30
|
-
* This is deployment, not seeding. `pikku db reset` applies a project's test
|
|
31
|
-
* fixtures and does not run in production; an accountable persona doing a real
|
|
32
|
-
* job in production still needs an account and its grants, and this is where
|
|
33
|
-
* they come from.
|
|
34
|
-
*
|
|
35
|
-
* Additive in the same way `syncSystemRoles` is: it creates and grants, and
|
|
36
|
-
* never deletes or revokes. Removing a persona from the code leaves their
|
|
37
|
-
* account and their grants standing until somebody decides otherwise — which is
|
|
38
|
-
* the point, because the alternative is a rolling deploy quietly locking out the
|
|
39
|
-
* teammate that the older replica is still running.
|
|
7
|
+
* It reports rather than writes, because the writing happens somewhere this
|
|
8
|
+
* command cannot reach. Provisioning a persona means creating a user row and
|
|
9
|
+
* granting it roles, and both of those live in the deployment's database — one
|
|
10
|
+
* the CLI has no connection to for any environment that is not the developer's
|
|
11
|
+
* own. This command used to open a Kysely connection from the local project
|
|
12
|
+
* config and write through it, which provisioned a local stage correctly and
|
|
13
|
+
* silently provisioned the wrong database for every other environment.
|
|
40
14
|
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* database
|
|
15
|
+
* So the deployment provisions itself: an app calls `provisionPersonas` from
|
|
16
|
+
* `@pikku/better-auth` in its server lifecycle, where the database connection
|
|
17
|
+
* and better-auth's own adapter are both already open, and a deploy carries its
|
|
18
|
+
* personas with it. What is left here is the half that needs no database — the
|
|
19
|
+
* declaration, and the environment rule applied to it — which is what tells you
|
|
20
|
+
* before a deploy whether the accounts you expect will appear.
|
|
45
21
|
*/
|
|
46
22
|
export const personaSync = pikkuSessionlessFunc({
|
|
47
|
-
|
|
48
|
-
func: async ({ logger, config, getInspectorState, variables }, { environment, apiUrl, dryRun }) => {
|
|
23
|
+
func: async ({ logger, config, getInspectorState }, { environment }) => {
|
|
49
24
|
const state = await getInspectorState(true, false, false, true);
|
|
50
25
|
const personas = resolvePersonas(state.personas?.definitions ?? [], config.scenarios?.emailDomain);
|
|
51
26
|
if (Object.keys(personas).length === 0) {
|
|
@@ -53,9 +28,11 @@ export const personaSync = pikkuSessionlessFunc({
|
|
|
53
28
|
return;
|
|
54
29
|
}
|
|
55
30
|
const environments = config.environments ?? {};
|
|
56
|
-
|
|
31
|
+
if (!environments[environment]) {
|
|
32
|
+
throw new Error(`Unknown environment '${environment}'. Configured environments: ${Object.keys(environments).join(', ') || 'none'}.`);
|
|
33
|
+
}
|
|
57
34
|
// The same rule that decides who may *run* against an environment decides
|
|
58
|
-
// who
|
|
35
|
+
// who is provisioned into it. Two rules would drift, and the one that
|
|
59
36
|
// drifted would leave an account standing in production for a persona the
|
|
60
37
|
// engine then refuses to sign in.
|
|
61
38
|
//
|
|
@@ -73,76 +50,21 @@ export const personaSync = pikkuSessionlessFunc({
|
|
|
73
50
|
}
|
|
74
51
|
if (eligible.length === 0) {
|
|
75
52
|
logger.info(`persona sync: no persona may act in '${environment}' — ${skipped.length} declared persona(s) were all skipped.`);
|
|
76
|
-
logger.info(' Run with --dry-run for the reasons, or give the persona this environment and disposition `accountable` if it is production.');
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
if (dryRun) {
|
|
80
|
-
logger.info(`persona sync (dry run): ${eligible.length} persona(s) would be provisioned into '${environment}' at ${env.apiUrl}:`);
|
|
81
|
-
for (const [id, persona] of eligible) {
|
|
82
|
-
logger.info(` ${id.padEnd(20)} ${persona.email}${persona.roles.length
|
|
83
|
-
? ` -> ${persona.roles.join(' + ')}`
|
|
84
|
-
: ' (no roles)'}`);
|
|
85
|
-
}
|
|
86
53
|
for (const refusal of skipped) {
|
|
87
|
-
logger.info(`
|
|
54
|
+
logger.info(` ${refusal}`);
|
|
88
55
|
}
|
|
89
|
-
logger.info('
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
const credentials = await resolvePersonaCredentials(variables, 'a persona account');
|
|
93
|
-
const declaredRoles = await loadDeclaredRoles(config.rolesMetaJsonFile, logger);
|
|
94
|
-
if (!declaredRoles) {
|
|
95
|
-
throw new Error('role metadata not found');
|
|
96
|
-
}
|
|
97
|
-
const signedIn = createHttpPersonas({
|
|
98
|
-
apiUrl: env.apiUrl,
|
|
99
|
-
...credentials,
|
|
100
|
-
personas: Object.fromEntries(eligible),
|
|
101
|
-
signInPath: env.signInPath,
|
|
102
|
-
rpcPath: env.rpcPath,
|
|
103
|
-
});
|
|
104
|
-
// Roles are synced on the way in, so a grant can name a role this deploy
|
|
105
|
-
// introduced. Both that sync and everything below are additive.
|
|
106
|
-
const opened = await openScopeServiceForRoles({ config, logger }, declaredRoles, 'pikku persona sync');
|
|
107
|
-
if (!opened) {
|
|
56
|
+
logger.info(' Give the persona this environment, and disposition `accountable` if it is production.');
|
|
108
57
|
return;
|
|
109
58
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
// Signing in is what creates the account: the actor plugin upserts an
|
|
116
|
-
// `actor: true` user row on first sign-in, and nothing else does.
|
|
117
|
-
// `sessionRoles()` is the public call that forces it — its answer is a
|
|
118
|
-
// by-product here, not the reason for the call.
|
|
119
|
-
await signedIn[id].sessionRoles();
|
|
120
|
-
accounts++;
|
|
121
|
-
if (persona.roles.length === 0) {
|
|
122
|
-
logger.info(` ${id.padEnd(20)} ${persona.email} (no roles)`);
|
|
123
|
-
continue;
|
|
124
|
-
}
|
|
125
|
-
const userId = await userIdByEmail(opened.db, persona.email);
|
|
126
|
-
if (!userId) {
|
|
127
|
-
throw new Error(`persona sync: signed '${id}' in at ${env.apiUrl}, but no user row for ${persona.email} exists in the database this command opened. ` +
|
|
128
|
-
`That database is not the one '${environment}' runs on, so its grants would land nowhere.`);
|
|
129
|
-
}
|
|
130
|
-
const already = new Set(await opened.service.listUserRoles(userId));
|
|
131
|
-
const missing = persona.roles.filter((role) => !already.has(role));
|
|
132
|
-
for (const role of missing) {
|
|
133
|
-
await opened.service.addUserToRole(userId, role);
|
|
134
|
-
}
|
|
135
|
-
granted += missing.length;
|
|
136
|
-
held += persona.roles.length - missing.length;
|
|
137
|
-
logger.info(` ${id.padEnd(20)} ${persona.email} -> ${persona.roles.join(' + ')}${missing.length === 0 ? ' (already held)' : ''}`);
|
|
138
|
-
}
|
|
139
|
-
logger.info(`persona sync: ${accounts} account(s) in '${environment}', ${granted} role grant(s) applied, ${held} already held`);
|
|
140
|
-
if (skipped.length > 0) {
|
|
141
|
-
logger.info(` ${skipped.length} persona(s) skipped — they do not act in '${environment}'. Run with --dry-run for the reasons.`);
|
|
142
|
-
}
|
|
59
|
+
logger.info(`persona sync: ${eligible.length} persona(s) will be provisioned when a deployment of '${environment}' starts:`);
|
|
60
|
+
for (const [id, persona] of eligible) {
|
|
61
|
+
logger.info(` ${id.padEnd(20)} ${persona.email}${persona.roles.length
|
|
62
|
+
? ` -> ${persona.roles.join(' + ')}`
|
|
63
|
+
: ' (no roles)'}`);
|
|
143
64
|
}
|
|
144
|
-
|
|
145
|
-
|
|
65
|
+
for (const refusal of skipped) {
|
|
66
|
+
logger.info(` skipped: ${refusal}`);
|
|
146
67
|
}
|
|
68
|
+
logger.info(" Provisioning runs in the deployment: call `provisionPersonas` from '@pikku/better-auth' in your server lifecycle, passing `personaConfigs` and `personaEnvironments` from the generated personas file.");
|
|
147
69
|
},
|
|
148
70
|
});
|
|
@@ -18,11 +18,13 @@ import { createDevAgentRunner } from './dev-agent-runner.js';
|
|
|
18
18
|
import { resolveConsoleMount } from './serve-console.js';
|
|
19
19
|
import { serverReadyLine } from '../../server/server-ready.js';
|
|
20
20
|
import { createEphemeralContentSigningJWT } from '../../server/content-signing-jwt.js';
|
|
21
|
+
import { disableDevActorSignIn } from '../../server/actor-sign-in.js';
|
|
21
22
|
import { applyModelAliasOverride } from '../../utils/model-alias-override.js';
|
|
22
23
|
export const serve = pikkuSessionlessFunc({
|
|
23
24
|
remote: true,
|
|
24
25
|
func: async ({ logger, config, getInspectorState, variables, devServerRunner }, { port, console: serveConsole, model }) => {
|
|
25
26
|
process.env.PIKKU_DEV_QUICK_LOGIN ??= 'true';
|
|
27
|
+
disableDevActorSignIn(logger);
|
|
26
28
|
applyModelAliasOverride(logger, model, config.models);
|
|
27
29
|
const resolvedPort = parseInt(port || '3000', 10);
|
|
28
30
|
const hostname = 'localhost';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ValidateFinding } from './persona-checks.js';
|
|
2
|
+
export type AuthPluginCheckConfig = {
|
|
3
|
+
srcDirectories?: unknown;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Whether better-auth is configured the way pikku supports.
|
|
7
|
+
*
|
|
8
|
+
* Pikku authorizes on scopes, so better-auth's `admin()` — which authorizes its
|
|
9
|
+
* endpoints against a `user.role` column — is unsupported: wiring it means
|
|
10
|
+
* running two authorization models and projecting one onto the other. The
|
|
11
|
+
* inspector refuses it outright at prebuild; this reports the same thing
|
|
12
|
+
* without one, and additionally catches the quieter half of the migration, an
|
|
13
|
+
* app that dropped `admin()` and never wired `ban()`, which keeps its ban
|
|
14
|
+
* columns and its ban UI while silently enforcing nothing.
|
|
15
|
+
*/
|
|
16
|
+
export declare const runAuthPluginChecks: (root: string, config: AuthPluginCheckConfig | null) => Promise<ValidateFinding[]>;
|