@slowcook-ai/cli 0.19.6 → 0.21.0

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 (138) hide show
  1. package/README.md +22 -2
  2. package/dist/cli.js +30 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/brand/index.d.ts.map +1 -1
  5. package/dist/commands/brand/index.js +6 -0
  6. package/dist/commands/brand/index.js.map +1 -1
  7. package/dist/commands/brand/logo-cmd.d.ts +2 -0
  8. package/dist/commands/brand/logo-cmd.d.ts.map +1 -0
  9. package/dist/commands/brand/logo-cmd.js +90 -0
  10. package/dist/commands/brand/logo-cmd.js.map +1 -0
  11. package/dist/commands/brand/logo.d.ts +23 -0
  12. package/dist/commands/brand/logo.d.ts.map +1 -0
  13. package/dist/commands/brand/logo.js +60 -0
  14. package/dist/commands/brand/logo.js.map +1 -0
  15. package/dist/commands/brew/fidelity-loop.d.ts +71 -0
  16. package/dist/commands/brew/fidelity-loop.d.ts.map +1 -0
  17. package/dist/commands/brew/fidelity-loop.js +108 -0
  18. package/dist/commands/brew/fidelity-loop.js.map +1 -0
  19. package/dist/commands/brew/fidelity-phase.d.ts +49 -0
  20. package/dist/commands/brew/fidelity-phase.d.ts.map +1 -0
  21. package/dist/commands/brew/fidelity-phase.js +75 -0
  22. package/dist/commands/brew/fidelity-phase.js.map +1 -0
  23. package/dist/commands/eye/index.d.ts +2 -0
  24. package/dist/commands/eye/index.d.ts.map +1 -0
  25. package/dist/commands/eye/index.js +83 -0
  26. package/dist/commands/eye/index.js.map +1 -0
  27. package/dist/commands/eye/plan.d.ts +69 -0
  28. package/dist/commands/eye/plan.d.ts.map +1 -0
  29. package/dist/commands/eye/plan.js +87 -0
  30. package/dist/commands/eye/plan.js.map +1 -0
  31. package/dist/commands/eye/run.d.ts +42 -0
  32. package/dist/commands/eye/run.d.ts.map +1 -0
  33. package/dist/commands/eye/run.js +116 -0
  34. package/dist/commands/eye/run.js.map +1 -0
  35. package/dist/commands/eye/spec-modes.d.ts +5 -0
  36. package/dist/commands/eye/spec-modes.d.ts.map +1 -0
  37. package/dist/commands/eye/spec-modes.js +36 -0
  38. package/dist/commands/eye/spec-modes.js.map +1 -0
  39. package/dist/commands/gate/github.d.ts +27 -0
  40. package/dist/commands/gate/github.d.ts.map +1 -0
  41. package/dist/commands/gate/github.js +46 -0
  42. package/dist/commands/gate/github.js.map +1 -0
  43. package/dist/commands/gate/index.d.ts +2 -0
  44. package/dist/commands/gate/index.d.ts.map +1 -0
  45. package/dist/commands/gate/index.js +68 -0
  46. package/dist/commands/gate/index.js.map +1 -0
  47. package/dist/commands/gate/model.d.ts +55 -0
  48. package/dist/commands/gate/model.d.ts.map +1 -0
  49. package/dist/commands/gate/model.js +64 -0
  50. package/dist/commands/gate/model.js.map +1 -0
  51. package/dist/commands/gate/reviewers.d.ts +24 -0
  52. package/dist/commands/gate/reviewers.d.ts.map +1 -0
  53. package/dist/commands/gate/reviewers.js +69 -0
  54. package/dist/commands/gate/reviewers.js.map +1 -0
  55. package/dist/commands/greenfield/index.d.ts +2 -0
  56. package/dist/commands/greenfield/index.d.ts.map +1 -0
  57. package/dist/commands/greenfield/index.js +80 -0
  58. package/dist/commands/greenfield/index.js.map +1 -0
  59. package/dist/commands/greenfield/status.d.ts +38 -0
  60. package/dist/commands/greenfield/status.d.ts.map +1 -0
  61. package/dist/commands/greenfield/status.js +52 -0
  62. package/dist/commands/greenfield/status.js.map +1 -0
  63. package/dist/commands/menu/assemble.d.ts +31 -0
  64. package/dist/commands/menu/assemble.d.ts.map +1 -0
  65. package/dist/commands/menu/assemble.js +37 -0
  66. package/dist/commands/menu/assemble.js.map +1 -0
  67. package/dist/commands/menu/index.d.ts +5 -0
  68. package/dist/commands/menu/index.d.ts.map +1 -0
  69. package/dist/commands/menu/index.js +111 -0
  70. package/dist/commands/menu/index.js.map +1 -0
  71. package/dist/commands/menu/prd.d.ts +33 -0
  72. package/dist/commands/menu/prd.d.ts.map +1 -0
  73. package/dist/commands/menu/prd.js +68 -0
  74. package/dist/commands/menu/prd.js.map +1 -0
  75. package/dist/commands/plate/index.d.ts.map +1 -1
  76. package/dist/commands/plate/index.js +5 -1
  77. package/dist/commands/plate/index.js.map +1 -1
  78. package/dist/commands/plate/route-hint.d.ts +18 -0
  79. package/dist/commands/plate/route-hint.d.ts.map +1 -0
  80. package/dist/commands/plate/route-hint.js +21 -0
  81. package/dist/commands/plate/route-hint.js.map +1 -0
  82. package/dist/commands/recon/shape-preserve.d.ts +38 -0
  83. package/dist/commands/recon/shape-preserve.d.ts.map +1 -1
  84. package/dist/commands/recon/shape-preserve.js +112 -1
  85. package/dist/commands/recon/shape-preserve.js.map +1 -1
  86. package/dist/commands/refine/spec-yaml.d.ts +26 -0
  87. package/dist/commands/refine/spec-yaml.d.ts.map +1 -1
  88. package/dist/commands/refine/spec-yaml.js +29 -0
  89. package/dist/commands/refine/spec-yaml.js.map +1 -1
  90. package/dist/commands/run-mock/index.d.ts.map +1 -1
  91. package/dist/commands/run-mock/index.js +69 -16
  92. package/dist/commands/run-mock/index.js.map +1 -1
  93. package/dist/commands/run-mock/reviewer-auth-server.d.ts +40 -0
  94. package/dist/commands/run-mock/reviewer-auth-server.d.ts.map +1 -0
  95. package/dist/commands/run-mock/reviewer-auth-server.js +124 -0
  96. package/dist/commands/run-mock/reviewer-auth-server.js.map +1 -0
  97. package/dist/commands/serve/config.d.ts +28 -9
  98. package/dist/commands/serve/config.d.ts.map +1 -1
  99. package/dist/commands/serve/config.js +43 -1
  100. package/dist/commands/serve/config.js.map +1 -1
  101. package/dist/commands/serve/dev.d.ts +14 -19
  102. package/dist/commands/serve/dev.d.ts.map +1 -1
  103. package/dist/commands/serve/dev.js +46 -50
  104. package/dist/commands/serve/dev.js.map +1 -1
  105. package/dist/commands/serve/index.d.ts.map +1 -1
  106. package/dist/commands/serve/index.js +30 -22
  107. package/dist/commands/serve/index.js.map +1 -1
  108. package/dist/commands/serve/mock.d.ts +5 -20
  109. package/dist/commands/serve/mock.d.ts.map +1 -1
  110. package/dist/commands/serve/mock.js +44 -65
  111. package/dist/commands/serve/mock.js.map +1 -1
  112. package/dist/commands/serve/runner.d.ts +52 -0
  113. package/dist/commands/serve/runner.d.ts.map +1 -0
  114. package/dist/commands/serve/runner.js +53 -0
  115. package/dist/commands/serve/runner.js.map +1 -0
  116. package/dist/commands/serve/staging.d.ts +8 -19
  117. package/dist/commands/serve/staging.d.ts.map +1 -1
  118. package/dist/commands/serve/staging.js +53 -91
  119. package/dist/commands/serve/staging.js.map +1 -1
  120. package/dist/commands/trace/check.d.ts +67 -0
  121. package/dist/commands/trace/check.d.ts.map +1 -0
  122. package/dist/commands/trace/check.js +82 -0
  123. package/dist/commands/trace/check.js.map +1 -0
  124. package/dist/commands/trace/index.d.ts +2 -0
  125. package/dist/commands/trace/index.d.ts.map +1 -0
  126. package/dist/commands/trace/index.js +86 -0
  127. package/dist/commands/trace/index.js.map +1 -0
  128. package/dist/commands/upsert-agent-docs.d.ts.map +1 -1
  129. package/dist/commands/upsert-agent-docs.js +12 -0
  130. package/dist/commands/upsert-agent-docs.js.map +1 -1
  131. package/dist/commands.manifest.d.ts.map +1 -1
  132. package/dist/commands.manifest.js +32 -2
  133. package/dist/commands.manifest.js.map +1 -1
  134. package/dist/lib/mock-shape.d.ts +6 -0
  135. package/dist/lib/mock-shape.d.ts.map +1 -1
  136. package/dist/lib/mock-shape.js +26 -0
  137. package/dist/lib/mock-shape.js.map +1 -1
  138. package/package.json +8 -6
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/serve/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/serve/index.ts"],"names":[],"mappings":"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"}
@@ -2,23 +2,12 @@
2
2
  * `slowcook serve mock <verb>` — Phase 2 implementation.
3
3
  *
4
4
  * The mock profile runs the consumer's `mock/` package as a vite-dev
5
- * server on a shared box, so the PM + designer + vibe-feedback loop
6
- * all hit the same artefact at the same URL. Mock-vite runs alongside
7
- * `serve dev` on the same host with distinct ports + profile-prefixed
8
- * container names (per design #5).
5
+ * server on a shared box. See `dev.ts` header for the broader pattern.
9
6
  *
10
- * Verbs (Phase 2):
11
- * - up — bring up the mock profile (vite-dev compose overlay)
12
- * - sync — force-push the mock-tracking branch (default `main`) so
13
- * the box pulls the latest mockups
14
- * - down — stop the mock services (volumes preserved)
15
- * - logs — pass-through to docker-compose logs
16
- * - reset — no-op (mock has no scenario seed)
17
- *
18
- * Auto-skip per Trade-off #4: if the consumer's `mock/package.json`
19
- * has no `scripts.dev`, slowcook prints a notice + exits 0 instead of
20
- * trying to bring up an unrunnable vite-dev. Detection runs from
21
- * `index.ts`'s dispatcher before this module is called.
7
+ * 0.19.7 (sc#173): same refactor as dev.ts — emit ShellCommand[] so
8
+ * runCommands() can actually execute (including ssh-wrapping for the
9
+ * remote case); support `compose_files` multi-`-f`; suppress `--build`
10
+ * for `bind-mount-source`.
22
11
  */
23
12
  import type { ProfileConfig, ServeConfig } from "./config.js";
24
13
  import type { DevVerbResult } from "./dev.js";
@@ -31,9 +20,5 @@ export interface MockVerbArgs {
31
20
  repoRoot: string;
32
21
  dryRun?: boolean;
33
22
  }
34
- /**
35
- * Pure planner for the mock profile. Same shape as `planServeDev` so
36
- * the cli wrapper can render output uniformly.
37
- */
38
23
  export declare function planServeMock(args: MockVerbArgs, _config: ServeConfig, profile: ProfileConfig): DevVerbResult;
39
24
  //# sourceMappingURL=mock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../src/commands/serve/mock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,aAAa,GACrB,aAAa,CAqBf"}
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../src/commands/serve/mock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,aAAa,GACrB,aAAa,CAkBf"}
@@ -2,29 +2,15 @@
2
2
  * `slowcook serve mock <verb>` — Phase 2 implementation.
3
3
  *
4
4
  * The mock profile runs the consumer's `mock/` package as a vite-dev
5
- * server on a shared box, so the PM + designer + vibe-feedback loop
6
- * all hit the same artefact at the same URL. Mock-vite runs alongside
7
- * `serve dev` on the same host with distinct ports + profile-prefixed
8
- * container names (per design #5).
5
+ * server on a shared box. See `dev.ts` header for the broader pattern.
9
6
  *
10
- * Verbs (Phase 2):
11
- * - up — bring up the mock profile (vite-dev compose overlay)
12
- * - sync — force-push the mock-tracking branch (default `main`) so
13
- * the box pulls the latest mockups
14
- * - down — stop the mock services (volumes preserved)
15
- * - logs — pass-through to docker-compose logs
16
- * - reset — no-op (mock has no scenario seed)
17
- *
18
- * Auto-skip per Trade-off #4: if the consumer's `mock/package.json`
19
- * has no `scripts.dev`, slowcook prints a notice + exits 0 instead of
20
- * trying to bring up an unrunnable vite-dev. Detection runs from
21
- * `index.ts`'s dispatcher before this module is called.
7
+ * 0.19.7 (sc#173): same refactor as dev.ts — emit ShellCommand[] so
8
+ * runCommands() can actually execute (including ssh-wrapping for the
9
+ * remote case); support `compose_files` multi-`-f`; suppress `--build`
10
+ * for `bind-mount-source`.
22
11
  */
23
12
  import { execSync } from "node:child_process";
24
- /**
25
- * Pure planner for the mock profile. Same shape as `planServeDev` so
26
- * the cli wrapper can render output uniformly.
27
- */
13
+ import { composeFiles, shouldBuildOnUp } from "./config.js";
28
14
  export function planServeMock(args, _config, profile) {
29
15
  switch (args.verb) {
30
16
  case "up":
@@ -41,28 +27,35 @@ export function planServeMock(args, _config, profile) {
41
27
  output: ["[serve mock reset] mock profile has no scenario seed; nothing to reset (only meaningful for staging)."],
42
28
  };
43
29
  default:
44
- return {
45
- exitCode: 64,
46
- output: [`Unknown verb: ${args.verb}. See \`slowcook serve --help\`.`],
47
- };
30
+ return { exitCode: 64, output: [`Unknown verb: ${args.verb}. See \`slowcook serve --help\`.`] };
48
31
  }
49
32
  }
50
33
  function planUp(_args, profile) {
51
- const overlay = profile.compose_overlay;
34
+ const files = composeFiles(profile);
52
35
  const apps = Object.keys(profile.apps);
53
- const lines = [`[serve mock up] bringing up: ${apps.join(", ") || "(no apps configured)"}`];
54
- if (overlay) {
55
- lines.push(` cmd: docker compose -f ${overlay} up -d --build`);
56
- }
57
- else {
58
- lines.push(" (no compose_overlay set; falling back to `pnpm --filter ./mock dev` if mock/ is vite-runnable)");
36
+ const output = [`[serve mock up] bringing up: ${apps.join(", ") || "(no apps configured)"}`];
37
+ if (files.length === 0) {
38
+ // Fallback: no compose, run `pnpm --filter ./mock dev` locally. Used on
39
+ // a dev's laptop without a docker box.
40
+ output.push(" (no compose_files / compose_overlay set; falling back to local pnpm filter)");
41
+ return {
42
+ exitCode: 0,
43
+ output,
44
+ commands: [{ cmd: "pnpm --filter ./mock dev", remote: false, label: "vite dev" }],
45
+ };
59
46
  }
60
47
  // PM + designer reference URL: surface the vite port if exactly one app.
61
48
  if (apps.length === 1) {
62
49
  const vitePort = profile.apps[apps[0]].port;
63
- lines.push(` vite dev URL (once up): http://<your-box>:${vitePort}`);
50
+ output.push(` vite dev URL (once up): http://<your-box>:${vitePort}`);
64
51
  }
65
- return { exitCode: 0, output: lines };
52
+ const fileFlags = files.map((f) => `-f ${f}`).join(" ");
53
+ const buildFlag = shouldBuildOnUp(profile) ? " --build" : "";
54
+ return {
55
+ exitCode: 0,
56
+ output,
57
+ commands: [{ cmd: `docker compose ${fileFlags} up -d${buildFlag}`, remote: true, label: "bring up" }],
58
+ };
66
59
  }
67
60
  function planSync(args, profile) {
68
61
  const sourceBranch = profile.source_branch;
@@ -87,46 +80,32 @@ function planSync(args, profile) {
87
80
  output: ["[serve mock sync] couldn't resolve a local branch (detached HEAD?). Pass --branch <name>."],
88
81
  };
89
82
  }
90
- const lines = [`[serve mock sync] ${localBranch} → origin/${sourceBranch}`];
91
- if (args.dryRun) {
92
- lines.push(` would run: git push --force origin ${localBranch}:${sourceBranch}`);
93
- return { exitCode: 0, output: lines };
94
- }
95
- try {
96
- execSync(`git push --force origin ${localBranch}:${sourceBranch}`, {
97
- cwd: args.repoRoot,
98
- stdio: "inherit",
99
- });
100
- }
101
- catch {
102
- return {
103
- exitCode: 1,
104
- output: [...lines, `[serve mock sync] git push failed. Check push permissions on origin/${sourceBranch}.`],
105
- };
106
- }
107
- lines.push(`[serve mock sync] done. The mock-deploy workflow on origin/${sourceBranch} will fire next.`);
108
- return { exitCode: 0, output: lines };
83
+ return {
84
+ exitCode: 0,
85
+ output: [`[serve mock sync] ${localBranch} → origin/${sourceBranch}`],
86
+ commands: [{ cmd: `git push --force origin ${localBranch}:${sourceBranch}`, remote: false, label: "git push" }],
87
+ };
109
88
  }
110
89
  function planDown(args, profile) {
111
- const overlay = profile.compose_overlay;
112
- if (!overlay) {
113
- return { exitCode: 64, output: ["[serve mock down] no compose_overlay set; nothing to stop."] };
90
+ const files = composeFiles(profile);
91
+ if (files.length === 0) {
92
+ return { exitCode: 64, output: ["[serve mock down] no compose_files / compose_overlay set; nothing to stop."] };
114
93
  }
94
+ const fileFlags = files.map((f) => `-f ${f}`).join(" ");
115
95
  const cmd = args.prune
116
- ? `docker compose -f ${overlay} down -v`
117
- : `docker compose -f ${overlay} down`;
118
- return { exitCode: 0, output: ["[serve mock down]", ` cmd: ${cmd}`] };
96
+ ? `docker compose ${fileFlags} down -v`
97
+ : `docker compose ${fileFlags} down`;
98
+ return { exitCode: 0, output: ["[serve mock down]"], commands: [{ cmd, remote: true, label: "compose down" }] };
119
99
  }
120
100
  function planLogs(args, profile) {
121
- const overlay = profile.compose_overlay;
122
- if (!overlay) {
123
- return { exitCode: 64, output: ["[serve mock logs] no compose_overlay set; nothing to tail."] };
101
+ const files = composeFiles(profile);
102
+ if (files.length === 0) {
103
+ return { exitCode: 64, output: ["[serve mock logs] no compose_files / compose_overlay set; nothing to tail."] };
124
104
  }
105
+ const fileFlags = files.map((f) => `-f ${f}`).join(" ");
125
106
  const follow = args.follow ? "-f" : "";
126
107
  const service = args.service ?? "";
127
- return {
128
- exitCode: 0,
129
- output: [` cmd: docker compose -f ${overlay} logs ${follow} ${service}`.replace(/\s+/g, " ").trim()],
130
- };
108
+ const cmd = `docker compose ${fileFlags} logs ${follow} ${service}`.replace(/\s+/g, " ").trim();
109
+ return { exitCode: 0, output: ["[serve mock logs]"], commands: [{ cmd, remote: true, label: "compose logs" }] };
131
110
  }
132
111
  //# sourceMappingURL=mock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../../src/commands/serve/mock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAc9C;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAkB,EAClB,OAAoB,EACpB,OAAsB;IAEtB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,IAAI;YACP,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/B,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjC,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjC,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjC,KAAK,OAAO;YACV,OAAO;gBACL,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,CAAC,uGAAuG,CAAC;aAClH,CAAC;QACJ;YACE,OAAO;gBACL,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,CAAC,iBAAiB,IAAI,CAAC,IAAI,kCAAkC,CAAC;aACvE,CAAC;IACN,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,KAAmB,EAAE,OAAsB;IACzD,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,KAAK,GAAa,CAAC,gCAAgC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;IACtG,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,4BAA4B,OAAO,gBAAgB,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,kGAAkG,CACnG,CAAC;IACJ,CAAC;IACD,yEAAyE;IACzE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAE,CAAC,IAAI,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,+CAA+C,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,QAAQ,CAAC,IAAkB,EAAE,OAAsB;IAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAC3C,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;IAC9B,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,WAAW,GAAG,QAAQ,CAAC,iCAAiC,EAAE;gBACxD,GAAG,EAAE,IAAI,CAAC,QAAQ;gBAClB,QAAQ,EAAE,MAAM;aACjB,CAAC,CAAC,IAAI,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACvC,WAAW,GAAG,kBAAkB,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3C,OAAO;YACL,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,CAAC,2FAA2F,CAAC;SACtG,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,qBAAqB,WAAW,aAAa,YAAY,EAAE,CAAC,CAAC;IAC5E,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,wCAAwC,WAAW,IAAI,YAAY,EAAE,CAAC,CAAC;QAClF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACxC,CAAC;IACD,IAAI,CAAC;QACH,QAAQ,CAAC,2BAA2B,WAAW,IAAI,YAAY,EAAE,EAAE;YACjE,GAAG,EAAE,IAAI,CAAC,QAAQ;YAClB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC,GAAG,KAAK,EAAE,uEAAuE,YAAY,GAAG,CAAC;SAC3G,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,8DAA8D,YAAY,kBAAkB,CAAC,CAAC;IACzG,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,QAAQ,CAAC,IAAkB,EAAE,OAAsB;IAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,4DAA4D,CAAC,EAAE,CAAC;IAClG,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK;QACpB,CAAC,CAAC,qBAAqB,OAAO,UAAU;QACxC,CAAC,CAAC,qBAAqB,OAAO,OAAO,CAAC;IACxC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,mBAAmB,EAAE,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,QAAQ,CAAC,IAAkB,EAAE,OAAsB;IAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,4DAA4D,CAAC,EAAE,CAAC;IAClG,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IACnC,OAAO;QACL,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC,4BAA4B,OAAO,SAAS,MAAM,IAAI,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;KACtG,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../../src/commands/serve/mock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Shell-command execution layer for `slowcook serve`.
3
+ *
4
+ * Closes sc#173 finding #1: prior to this, planners emitted command
5
+ * strings into `output[]` and exited without executing them, even when
6
+ * `profile.ssh_target` was set. Operators had to copy-paste the emitted
7
+ * command and run it themselves — the verb was documentation, not
8
+ * automation.
9
+ *
10
+ * Now planners populate `result.commands[]` with structured ShellCommand
11
+ * records; `runCommands()` wraps `remote: true` commands in
12
+ * `ssh user@host 'cd checkout_dir && <cmd>'` and executes (unless
13
+ * --dry-run, in which case the wrapped form is just printed).
14
+ *
15
+ * Local commands run via execSync in the repoRoot. Remote commands run
16
+ * via execSync of an ssh invocation. Either way: stdio inherited so the
17
+ * operator sees docker / git output in real time.
18
+ */
19
+ import type { ProfileConfig } from "./config.js";
20
+ export interface ShellCommand {
21
+ /** The local-shell-shape command (e.g. `docker compose -f a.yml up -d`). */
22
+ cmd: string;
23
+ /**
24
+ * When true AND `profile.ssh_target` is set, wrap the command in
25
+ * `ssh <user>@<host> 'cd <checkout_dir> && <cmd>'`. When `ssh_target`
26
+ * is absent, runs locally regardless. Use for docker / box-side
27
+ * operations (up, down, logs). Local-only operations like `git push`
28
+ * should pass `remote: false`.
29
+ */
30
+ remote?: boolean;
31
+ /** Optional label printed before the command (e.g. "bring up", "seed"). */
32
+ label?: string;
33
+ }
34
+ export interface RunCommandsArgs {
35
+ commands: ShellCommand[];
36
+ profile: ProfileConfig;
37
+ repoRoot: string;
38
+ /** When true: print the resolved command but don't execute. */
39
+ dryRun?: boolean;
40
+ }
41
+ export interface RunCommandsResult {
42
+ exitCode: number;
43
+ /** Additional human-readable lines emitted by the runner (resolved cmds, errors). */
44
+ output: string[];
45
+ }
46
+ /**
47
+ * Resolve a single ShellCommand into the wire-form string we'd actually
48
+ * pass to /bin/sh. Pure; useful for tests + the dry-run print path.
49
+ */
50
+ export declare function resolveCommand(cmd: ShellCommand, profile: ProfileConfig): string;
51
+ export declare function runCommands(args: RunCommandsArgs): RunCommandsResult;
52
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/commands/serve/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,qFAAqF;IACrF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAShF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,CAepE"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Shell-command execution layer for `slowcook serve`.
3
+ *
4
+ * Closes sc#173 finding #1: prior to this, planners emitted command
5
+ * strings into `output[]` and exited without executing them, even when
6
+ * `profile.ssh_target` was set. Operators had to copy-paste the emitted
7
+ * command and run it themselves — the verb was documentation, not
8
+ * automation.
9
+ *
10
+ * Now planners populate `result.commands[]` with structured ShellCommand
11
+ * records; `runCommands()` wraps `remote: true` commands in
12
+ * `ssh user@host 'cd checkout_dir && <cmd>'` and executes (unless
13
+ * --dry-run, in which case the wrapped form is just printed).
14
+ *
15
+ * Local commands run via execSync in the repoRoot. Remote commands run
16
+ * via execSync of an ssh invocation. Either way: stdio inherited so the
17
+ * operator sees docker / git output in real time.
18
+ */
19
+ import { execSync } from "node:child_process";
20
+ /**
21
+ * Resolve a single ShellCommand into the wire-form string we'd actually
22
+ * pass to /bin/sh. Pure; useful for tests + the dry-run print path.
23
+ */
24
+ export function resolveCommand(cmd, profile) {
25
+ if (cmd.remote && profile.ssh_target) {
26
+ const { user, host, checkout_dir } = profile.ssh_target;
27
+ // Single-quote the remote command. Inner single quotes get escaped via
28
+ // the bash `'\''` trick so paths/cmds containing `'` survive.
29
+ const inner = cmd.cmd.replace(/'/g, `'\\''`);
30
+ return `ssh ${user}@${host} 'cd ${checkout_dir} && ${inner}'`;
31
+ }
32
+ return cmd.cmd;
33
+ }
34
+ export function runCommands(args) {
35
+ const out = [];
36
+ for (const c of args.commands) {
37
+ const wire = resolveCommand(c, args.profile);
38
+ if (c.label)
39
+ out.push(` ${c.label}:`);
40
+ out.push(` ${args.dryRun ? "would run" : "run"}: ${wire}`);
41
+ if (args.dryRun)
42
+ continue;
43
+ try {
44
+ execSync(wire, { cwd: args.repoRoot, stdio: "inherit" });
45
+ }
46
+ catch {
47
+ out.push(` ✗ command failed: ${wire}`);
48
+ return { exitCode: 1, output: out };
49
+ }
50
+ }
51
+ return { exitCode: 0, output: out };
52
+ }
53
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/commands/serve/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAgC9C;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAiB,EAAE,OAAsB;IACtE,IAAI,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;QACxD,uEAAuE;QACvE,8DAA8D;QAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,OAAO,IAAI,IAAI,IAAI,QAAQ,YAAY,OAAO,KAAK,GAAG,CAAC;IAChE,CAAC;IACD,OAAO,GAAG,CAAC,GAAG,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAqB;IAC/C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,CAAC,KAAK;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,MAAM;YAAE,SAAS;QAC1B,IAAI,CAAC;YACH,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;YACxC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACtC,CAAC"}
@@ -1,27 +1,16 @@
1
1
  /**
2
2
  * `slowcook serve staging <verb>` — Phase 3 implementation.
3
3
  *
4
- * The staging profile runs a built-image deployment for PM walkthroughs +
5
- * manual QA. Distinct from `dev` (bind-mount source) and `mock` (vite-dev):
4
+ * The staging profile runs a built-image deployment for PM walkthroughs.
6
5
  *
7
- * - mode: built-image (Trade-off #3 slowcook ships zero image-build;
8
- * consumer's `bringup_cmd` does the heavy lifting).
9
- * - reset: named-scenario re-seed via `seed.scenarios: {demo: ..., ...}`
10
- * (Trade-off #5 map shape from day 1; no single-value form).
6
+ * 0.19.7 (sc#173): same refactor as dev.ts / mock.ts emit
7
+ * ShellCommand[] for the cli wrapper to execute via runCommands(),
8
+ * supporting ssh-wrap when `ssh_target` is set; honour `compose_files`
9
+ * multi-`-f`; pass `--build` (staging IS built-image).
11
10
  *
12
- * Verbs (Phase 3):
13
- * - up — bring up the staging profile via consumer's bringup_cmd
14
- * - sync — push the staging-tracking branch (default `main`); the
15
- * box's CI/deploy chain picks it up + rebuilds the image
16
- * - down — stop the profile's services (volumes preserved)
17
- * - logs — pass-through to docker-compose logs
18
- * - reset --scenario <name> — re-run the named scenario's seed scripts;
19
- * protected by the optional `seed.guard_env` env-var sentinel
20
- * to prevent accidental wipes from interactive sessions.
21
- *
22
- * Per design #5 "Additional decisions" — the staging seed is idempotent;
23
- * each scenario's scripts MUST be re-runnable. Slowcook just invokes them
24
- * via `ts-node` (Trade-off #2) inside the container.
11
+ * `reset --scenario <name>` re-runs the named scenario's seed scripts.
12
+ * Idempotency is the seed-script author's contract; slowcook bails on
13
+ * any non-zero exit. Optional `seed.guard_env` blocks accidental wipes.
25
14
  */
26
15
  import type { ProfileConfig, ServeConfig } from "./config.js";
27
16
  import type { DevVerbResult } from "./dev.js";
@@ -1 +1 @@
1
- {"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../../../src/commands/serve/staging.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,aAAa,GACrB,aAAa,CAkBf"}
1
+ {"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../../../src/commands/serve/staging.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,aAAa,GACrB,aAAa,CAef"}
@@ -1,29 +1,19 @@
1
1
  /**
2
2
  * `slowcook serve staging <verb>` — Phase 3 implementation.
3
3
  *
4
- * The staging profile runs a built-image deployment for PM walkthroughs +
5
- * manual QA. Distinct from `dev` (bind-mount source) and `mock` (vite-dev):
4
+ * The staging profile runs a built-image deployment for PM walkthroughs.
6
5
  *
7
- * - mode: built-image (Trade-off #3 slowcook ships zero image-build;
8
- * consumer's `bringup_cmd` does the heavy lifting).
9
- * - reset: named-scenario re-seed via `seed.scenarios: {demo: ..., ...}`
10
- * (Trade-off #5 map shape from day 1; no single-value form).
6
+ * 0.19.7 (sc#173): same refactor as dev.ts / mock.ts emit
7
+ * ShellCommand[] for the cli wrapper to execute via runCommands(),
8
+ * supporting ssh-wrap when `ssh_target` is set; honour `compose_files`
9
+ * multi-`-f`; pass `--build` (staging IS built-image).
11
10
  *
12
- * Verbs (Phase 3):
13
- * - up — bring up the staging profile via consumer's bringup_cmd
14
- * - sync — push the staging-tracking branch (default `main`); the
15
- * box's CI/deploy chain picks it up + rebuilds the image
16
- * - down — stop the profile's services (volumes preserved)
17
- * - logs — pass-through to docker-compose logs
18
- * - reset --scenario <name> — re-run the named scenario's seed scripts;
19
- * protected by the optional `seed.guard_env` env-var sentinel
20
- * to prevent accidental wipes from interactive sessions.
21
- *
22
- * Per design #5 "Additional decisions" — the staging seed is idempotent;
23
- * each scenario's scripts MUST be re-runnable. Slowcook just invokes them
24
- * via `ts-node` (Trade-off #2) inside the container.
11
+ * `reset --scenario <name>` re-runs the named scenario's seed scripts.
12
+ * Idempotency is the seed-script author's contract; slowcook bails on
13
+ * any non-zero exit. Optional `seed.guard_env` blocks accidental wipes.
25
14
  */
26
15
  import { execSync } from "node:child_process";
16
+ import { composeFiles, shouldBuildOnUp } from "./config.js";
27
17
  export function planServeStaging(args, _config, profile) {
28
18
  switch (args.verb) {
29
19
  case "up":
@@ -37,26 +27,32 @@ export function planServeStaging(args, _config, profile) {
37
27
  case "reset":
38
28
  return planReset(args, profile);
39
29
  default:
40
- return {
41
- exitCode: 64,
42
- output: [`Unknown verb: ${args.verb}. See \`slowcook serve --help\`.`],
43
- };
30
+ return { exitCode: 64, output: [`Unknown verb: ${args.verb}. See \`slowcook serve --help\`.`] };
44
31
  }
45
32
  }
46
33
  function planUp(_args, profile) {
47
- const lines = [`[serve staging up] mode: ${profile.mode}`];
34
+ const output = [`[serve staging up] mode: ${profile.mode}`];
35
+ // Trade-off #3: when consumer's bringup_cmd is set, slowcook just shells it out.
48
36
  if (profile.bringup_cmd) {
49
- // Trade-off #3 — consumer's bring-up runs the show. Slowcook just shells out.
50
- lines.push(` cmd: ${profile.bringup_cmd}`);
51
- return { exitCode: 0, output: lines };
37
+ return {
38
+ exitCode: 0,
39
+ output,
40
+ commands: [{ cmd: profile.bringup_cmd, remote: true, label: "bring up" }],
41
+ };
52
42
  }
53
- if (profile.compose_overlay) {
54
- lines.push(` cmd: docker compose -f ${profile.compose_overlay} up -d`);
55
- return { exitCode: 0, output: lines };
43
+ const files = composeFiles(profile);
44
+ if (files.length === 0) {
45
+ return {
46
+ exitCode: 64,
47
+ output: ["[serve staging up] neither bringup_cmd nor compose_files / compose_overlay set; nothing to bring up."],
48
+ };
56
49
  }
50
+ const fileFlags = files.map((f) => `-f ${f}`).join(" ");
51
+ const buildFlag = shouldBuildOnUp(profile) ? " --build" : "";
57
52
  return {
58
- exitCode: 64,
59
- output: ["[serve staging up] neither bringup_cmd nor compose_overlay set; nothing to bring up."],
53
+ exitCode: 0,
54
+ output,
55
+ commands: [{ cmd: `docker compose ${fileFlags} up -d${buildFlag}`, remote: true, label: "bring up" }],
60
56
  };
61
57
  }
62
58
  function planSync(args, profile) {
@@ -82,55 +78,34 @@ function planSync(args, profile) {
82
78
  output: ["[serve staging sync] couldn't resolve a local branch (detached HEAD?). Pass --branch <name>."],
83
79
  };
84
80
  }
85
- const lines = [`[serve staging sync] ${localBranch} → origin/${sourceBranch} (staging-deploy CI rebuilds)`];
86
- if (args.dryRun) {
87
- lines.push(` would run: git push --force origin ${localBranch}:${sourceBranch}`);
88
- return { exitCode: 0, output: lines };
89
- }
90
- try {
91
- execSync(`git push --force origin ${localBranch}:${sourceBranch}`, {
92
- cwd: args.repoRoot,
93
- stdio: "inherit",
94
- });
95
- }
96
- catch {
97
- return {
98
- exitCode: 1,
99
- output: [...lines, `[serve staging sync] git push failed. Check push permissions on origin/${sourceBranch}.`],
100
- };
101
- }
102
- lines.push(`[serve staging sync] done.`);
103
- return { exitCode: 0, output: lines };
81
+ return {
82
+ exitCode: 0,
83
+ output: [`[serve staging sync] ${localBranch} → origin/${sourceBranch} (staging-deploy CI rebuilds)`],
84
+ commands: [{ cmd: `git push --force origin ${localBranch}:${sourceBranch}`, remote: false, label: "git push" }],
85
+ };
104
86
  }
105
87
  function planDown(args, profile) {
106
- if (!profile.compose_overlay) {
107
- return { exitCode: 64, output: ["[serve staging down] no compose_overlay set; nothing to stop."] };
88
+ const files = composeFiles(profile);
89
+ if (files.length === 0) {
90
+ return { exitCode: 64, output: ["[serve staging down] no compose_files / compose_overlay set; nothing to stop."] };
108
91
  }
92
+ const fileFlags = files.map((f) => `-f ${f}`).join(" ");
109
93
  const cmd = args.prune
110
- ? `docker compose -f ${profile.compose_overlay} down -v`
111
- : `docker compose -f ${profile.compose_overlay} down`;
112
- return { exitCode: 0, output: ["[serve staging down]", ` cmd: ${cmd}`] };
94
+ ? `docker compose ${fileFlags} down -v`
95
+ : `docker compose ${fileFlags} down`;
96
+ return { exitCode: 0, output: ["[serve staging down]"], commands: [{ cmd, remote: true, label: "compose down" }] };
113
97
  }
114
98
  function planLogs(args, profile) {
115
- if (!profile.compose_overlay) {
116
- return { exitCode: 64, output: ["[serve staging logs] no compose_overlay set; nothing to tail."] };
99
+ const files = composeFiles(profile);
100
+ if (files.length === 0) {
101
+ return { exitCode: 64, output: ["[serve staging logs] no compose_files / compose_overlay set; nothing to tail."] };
117
102
  }
103
+ const fileFlags = files.map((f) => `-f ${f}`).join(" ");
118
104
  const follow = args.follow ? "-f" : "";
119
105
  const service = args.service ?? "";
120
- return {
121
- exitCode: 0,
122
- output: [` cmd: docker compose -f ${profile.compose_overlay} logs ${follow} ${service}`.replace(/\s+/g, " ").trim()],
123
- };
106
+ const cmd = `docker compose ${fileFlags} logs ${follow} ${service}`.replace(/\s+/g, " ").trim();
107
+ return { exitCode: 0, output: ["[serve staging logs]"], commands: [{ cmd, remote: true, label: "compose logs" }] };
124
108
  }
125
- /**
126
- * `serve staging reset --scenario <name>` — re-run the named scenario's
127
- * seed scripts. Idempotency is the seed-script author's job; slowcook
128
- * just invokes them via ts-node (Trade-off #2 — runtime model locked).
129
- *
130
- * Guard: if `seed.guard_env` is set in the profile, the named env var
131
- * must be non-empty in the caller's environment. Prevents accidental
132
- * wipes from an interactive `serve staging reset`.
133
- */
134
109
  function planReset(args, profile) {
135
110
  if (!args.scenario) {
136
111
  const available = profile.seed?.scenarios ? Object.keys(profile.seed.scenarios) : [];
@@ -166,25 +141,12 @@ function planReset(args, profile) {
166
141
  };
167
142
  }
168
143
  }
169
- const lines = [`[serve staging reset] scenario=${args.scenario}`];
170
- for (const script of scenario.scripts) {
171
- lines.push(` ts-node ${script}`);
172
- }
173
- if (args.dryRun || scenario.scripts.length === 0) {
174
- return { exitCode: 0, output: lines };
175
- }
176
- // Real reset: shell out to ts-node for each script. Idempotency is the
177
- // seed-script author's contract; slowcook bails on any non-zero exit.
178
- for (const script of scenario.scripts) {
179
- try {
180
- execSync(`pnpm exec ts-node ${script}`, { cwd: args.repoRoot, stdio: "inherit" });
181
- }
182
- catch {
183
- lines.push(`[serve staging reset] script ${script} failed; aborting.`);
184
- return { exitCode: 1, output: lines };
185
- }
186
- }
187
- lines.push(`[serve staging reset] scenario=${args.scenario} complete.`);
188
- return { exitCode: 0, output: lines };
144
+ const output = [`[serve staging reset] scenario=${args.scenario}`];
145
+ const commands = scenario.scripts.map((script) => ({
146
+ cmd: `pnpm exec ts-node ${script}`,
147
+ remote: true,
148
+ label: `seed ${script}`,
149
+ }));
150
+ return { exitCode: 0, output, commands };
189
151
  }
190
152
  //# sourceMappingURL=staging.js.map