@on-par/factory-cli 0.9.25-next.8 → 0.9.25-next.9

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.
@@ -0,0 +1,64 @@
1
+ // packages/cli/src/cli/stack-run.ts — the CLI side of the stack engine: console output and the run-issue --stack slice list (#3798)
2
+ import { styleText } from 'node:util';
3
+ import { runStack } from '@on-par/factory-core';
4
+ import { CliExitError } from './errors.js';
5
+ export function consoleStackLog(level, line) {
6
+ if (level === 'error')
7
+ console.error(styleText('red', line));
8
+ else
9
+ console.log(styleText(level === 'warn' ? 'yellow' : 'cyan', line));
10
+ }
11
+ /** Prints the engine's summary (green when every slice succeeded, yellow otherwise) and throws exit 1 on failure. */
12
+ export function printStackResult(result, failMessage) {
13
+ for (const line of result.summary) {
14
+ console.log(result.ok ? styleText('green', line) : styleText('yellow', line));
15
+ }
16
+ if (!result.ok)
17
+ throw new CliExitError(failMessage, 1);
18
+ }
19
+ /** `run-issue --stack` (#3798): sizes the issue when it has no slice plan yet, then builds every pending
20
+ * slice in order inside this one run, each slice's PR based on the previous slice's PR head. */
21
+ export async function runIssueStack(issueNum, baseBranch, deps) {
22
+ let plan = await deps.readSlicePlan();
23
+ if (plan === undefined) {
24
+ console.log(styleText('cyan', `run-issue: --stack — sizing #${issueNum}`));
25
+ let sizingError;
26
+ try {
27
+ await deps.ship(baseBranch, () => { });
28
+ }
29
+ catch (err) {
30
+ sizingError = err;
31
+ }
32
+ plan = await deps.readSlicePlan();
33
+ if (plan === undefined) {
34
+ if (sizingError !== undefined)
35
+ throw sizingError;
36
+ return;
37
+ }
38
+ }
39
+ const pending = plan.slices.filter((s) => s.state === 'pending');
40
+ if (pending.length === 0) {
41
+ console.log(styleText('cyan', `run-issue: every slice of #${issueNum} is already built`));
42
+ return;
43
+ }
44
+ const count = plan.slices.length;
45
+ const first = pending[0];
46
+ let base = baseBranch;
47
+ if (first.index > 1) {
48
+ const below = plan.slices[first.index - 2];
49
+ base = below.state === 'merged' ? baseBranch : below.branch;
50
+ }
51
+ console.log(styleText('cyan', `run-issue: --stack — #${issueNum} has ${count} slices; building ${pending.length} in order, each on the previous slice's PR head`));
52
+ const result = await runStack(pending.map((s) => ({
53
+ title: `slice ${s.index}/${count}`,
54
+ run: async (sliceBase) => {
55
+ let outcome;
56
+ await deps.ship(sliceBase, (o) => {
57
+ outcome = o;
58
+ });
59
+ return outcome && { prNumber: 'prNumber' in outcome ? outcome.prNumber : undefined, branch: outcome.branch };
60
+ },
61
+ })), { base, chain: true, prefix: 'run-issue', noun: 'slice', log: consoleStackLog });
62
+ printStackResult(result, `Run failed for one or more slices of issue #${issueNum} (listed above)`);
63
+ }
64
+ //# sourceMappingURL=stack-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-run.js","sourceRoot":"","sources":["../../src/cli/stack-run.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@on-par/factory-cli",
3
- "version": "0.9.25-next.8",
3
+ "version": "0.9.25-next.9",
4
4
  "description": "On PAR Dev's Software Factory CLI: takes a GitHub issue through plan, build and check with AI agents, then opens a ready-for-review PR.",
5
5
  "keywords": [
6
6
  "ai-agents",
@@ -48,9 +48,9 @@
48
48
  "@octokit/plugin-retry": "^8.1.1",
49
49
  "@octokit/plugin-throttling": "^11.0.5",
50
50
  "@octokit/rest": "^22.0.0",
51
- "@on-par/factory-config": "0.9.25-next.8",
52
- "@on-par/factory-core": "0.9.25-next.8",
53
- "@on-par/factory-tui": "0.9.25-next.8",
51
+ "@on-par/factory-config": "0.9.25-next.9",
52
+ "@on-par/factory-core": "0.9.25-next.9",
53
+ "@on-par/factory-tui": "0.9.25-next.9",
54
54
  "commander": "^15.0.0",
55
55
  "zod": "^4.6.5"
56
56
  },