@on-par/factory-cli 0.9.14-next.3 → 0.9.14-next.30
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/dist/cli/__fixtures__/open-pr.d.ts +24 -0
- package/dist/cli/__fixtures__/open-pr.d.ts.map +1 -0
- package/dist/cli/__fixtures__/open-pr.js +15 -0
- package/dist/cli/__fixtures__/open-pr.js.map +1 -0
- package/dist/cli/cost-json.d.ts +9 -2
- package/dist/cli/cost-json.d.ts.map +1 -1
- package/dist/cli/cost-json.js +29 -2
- package/dist/cli/cost-json.js.map +1 -1
- package/dist/cli/daemon-load.d.ts +14 -0
- package/dist/cli/daemon-load.d.ts.map +1 -0
- package/dist/cli/daemon-load.js +75 -0
- package/dist/cli/daemon-load.js.map +1 -0
- package/dist/cli/daemon.d.ts +5 -1
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +15 -4
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +53 -20
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/json-contract.d.ts +24 -0
- package/dist/cli/json-contract.d.ts.map +1 -1
- package/dist/cli/json-contract.js +24 -1
- package/dist/cli/json-contract.js.map +1 -1
- package/dist/cli/land.d.ts +1 -1
- package/dist/cli/land.d.ts.map +1 -1
- package/dist/cli/land.js +27 -36
- package/dist/cli/land.js.map +1 -1
- package/dist/cli/lane-heartbeat.d.ts +7 -0
- package/dist/cli/lane-heartbeat.d.ts.map +1 -0
- package/dist/cli/lane-heartbeat.js +33 -0
- package/dist/cli/lane-heartbeat.js.map +1 -0
- package/dist/cli/notify.d.ts +37 -0
- package/dist/cli/notify.d.ts.map +1 -0
- package/dist/cli/notify.js +95 -0
- package/dist/cli/notify.js.map +1 -0
- package/dist/cli/program-advanced.d.ts.map +1 -1
- package/dist/cli/program-advanced.js +13 -1
- package/dist/cli/program-advanced.js.map +1 -1
- package/dist/cli/program-run-work.d.ts.map +1 -1
- package/dist/cli/program-run-work.js +2 -0
- package/dist/cli/program-run-work.js.map +1 -1
- package/dist/cli/queue-preflight.d.ts +5 -0
- package/dist/cli/queue-preflight.d.ts.map +1 -1
- package/dist/cli/queue-preflight.js +25 -2
- package/dist/cli/queue-preflight.js.map +1 -1
- package/dist/cli/reset.d.ts.map +1 -1
- package/dist/cli/reset.js +3 -0
- package/dist/cli/reset.js.map +1 -1
- package/dist/cli/run-lane.d.ts +2 -0
- package/dist/cli/run-lane.d.ts.map +1 -1
- package/dist/cli/run-lane.js +12 -36
- package/dist/cli/run-lane.js.map +1 -1
- package/dist/cli/run.d.ts +1 -0
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +21 -4
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/runs.d.ts +1 -1
- package/dist/cli/runs.d.ts.map +1 -1
- package/dist/cli/runs.js +8 -10
- package/dist/cli/runs.js.map +1 -1
- package/dist/cli/ship-steps.d.ts +1 -0
- package/dist/cli/ship-steps.d.ts.map +1 -1
- package/dist/cli/ship-steps.js +2 -0
- package/dist/cli/ship-steps.js.map +1 -1
- package/dist/cli/ship.d.ts +2 -0
- package/dist/cli/ship.d.ts.map +1 -1
- package/dist/cli/ship.js +1 -0
- package/dist/cli/ship.js.map +1 -1
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +61 -30
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/steer.d.ts +1 -0
- package/dist/cli/steer.d.ts.map +1 -1
- package/dist/cli/steer.js +55 -28
- package/dist/cli/steer.js.map +1 -1
- package/dist/cli/steerability-report.d.ts +1 -1
- package/dist/cli/steerability-report.d.ts.map +1 -1
- package/dist/cli/steerability-report.js +4 -7
- package/dist/cli/steerability-report.js.map +1 -1
- package/dist/cli/supervise.d.ts +1 -0
- package/dist/cli/supervise.d.ts.map +1 -1
- package/dist/cli/supervise.js +10 -3
- package/dist/cli/supervise.js.map +1 -1
- package/dist/cli/worktree-keep.d.ts +18 -0
- package/dist/cli/worktree-keep.d.ts.map +1 -0
- package/dist/cli/worktree-keep.js +47 -0
- package/dist/cli/worktree-keep.js.map +1 -0
- package/dist/cli/worktree-reap.d.ts +1 -1
- package/dist/cli/worktree-reap.d.ts.map +1 -1
- package/dist/cli/worktree-reap.js +10 -12
- package/dist/cli/worktree-reap.js.map +1 -1
- package/package.json +4 -4
- package/schemas/cost.schema.json +39 -1
- package/schemas/daemon-status.schema.json +44 -1
- package/schemas/logs-line.schema.json +10 -0
package/dist/cli/steer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steer.d.ts","sourceRoot":"","sources":["../../src/cli/steer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"steer.d.ts","sourceRoot":"","sources":["../../src/cli/steer.ts"],"names":[],"mappings":"AACA,OAAO,EASL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,UAAU,EAEhB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpG,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,qBAAa,aAAc,SAAQ,KAAK;IAGpC,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ;IAFvC,YACE,OAAO,EAAE,MAAM,EACN,IAAI,EAAE,WAAW,GAAG,QAAQ,EACrC,OAAO,CAAC,EAAE,YAAY,EAIvB;CACF;AAaD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAiCnD;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAC,CAYrH;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI,CAoBnE;AASD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,cAAc,CAAC,GAC5C,UAAU,CA6BZ;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAqBxG;AAED,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,+FAA+F;IAC/F,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACxC,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;IACtC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,gHAAgH;AAChH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB/F"}
|
package/dist/cli/steer.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
// packages/cli/src/cli/steer.ts — `factory steer <ref>`: append a human or bot steer to a run (#3401).
|
|
2
|
-
import {
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import { appendSteerEvent, readIssueRunState, runStateFile, STEER_PHASES, STEER_SOURCES, SteerEventError, writeIssueRunState, } from '@on-par/factory-core/internal';
|
|
2
|
+
import { appendSteerEvent, listIssueRuns, readIssueRunState, runStateFile, STEER_PHASES, STEER_SOURCES, SteerEventError, writeIssueRunState, } from '@on-par/factory-core/internal';
|
|
5
3
|
import { getFactoryPaths } from '@on-par/factory-core';
|
|
6
4
|
export class SteerCliError extends Error {
|
|
7
5
|
code;
|
|
@@ -11,22 +9,47 @@ export class SteerCliError extends Error {
|
|
|
11
9
|
this.name = 'SteerCliError';
|
|
12
10
|
}
|
|
13
11
|
}
|
|
12
|
+
function invalidRef(raw) {
|
|
13
|
+
return new SteerCliError(`invalid reference '${raw}' — expected an issue or PR number (42, #42) or a GitHub issue/pull URL`, 'bad-input');
|
|
14
|
+
}
|
|
15
|
+
function repoMismatch(ref, slug) {
|
|
16
|
+
return new SteerCliError(`reference is for ${ref.repo}, this repo is ${slug}`, 'bad-input');
|
|
17
|
+
}
|
|
14
18
|
export function parseSteerRef(raw) {
|
|
15
19
|
const text = raw.trim();
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
['pr', text.match(/\/pull\/(\d+)\/?$/)],
|
|
20
|
-
];
|
|
21
|
-
for (const [kind, match] of found) {
|
|
22
|
-
if (!match)
|
|
23
|
-
continue;
|
|
24
|
-
const n = Number(match[1]);
|
|
20
|
+
const bare = text.match(/^#?(\d+)$/);
|
|
21
|
+
if (bare) {
|
|
22
|
+
const n = Number(bare[1]);
|
|
25
23
|
if (Number.isSafeInteger(n) && n >= 1)
|
|
26
|
-
return { kind, number: n, raw };
|
|
27
|
-
|
|
24
|
+
return { kind: 'any', number: n, raw };
|
|
25
|
+
throw invalidRef(raw);
|
|
26
|
+
}
|
|
27
|
+
let url;
|
|
28
|
+
try {
|
|
29
|
+
url = new URL(text);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
throw invalidRef(raw);
|
|
33
|
+
}
|
|
34
|
+
const host = url.hostname.toLowerCase();
|
|
35
|
+
if ((url.protocol !== 'https:' && url.protocol !== 'http:') || (host !== 'github.com' && host !== 'www.github.com')) {
|
|
36
|
+
throw invalidRef(raw);
|
|
28
37
|
}
|
|
29
|
-
|
|
38
|
+
const segments = url.pathname.split('/').slice(1);
|
|
39
|
+
if (segments.length === 5 && segments[4] === '')
|
|
40
|
+
segments.pop();
|
|
41
|
+
const [owner, repo, type, digits] = segments;
|
|
42
|
+
if (segments.length !== 4 ||
|
|
43
|
+
!owner ||
|
|
44
|
+
!repo ||
|
|
45
|
+
(type !== 'issues' && type !== 'pull') ||
|
|
46
|
+
!/^\d+$/.test(digits ?? '')) {
|
|
47
|
+
throw invalidRef(raw);
|
|
48
|
+
}
|
|
49
|
+
const n = Number(digits);
|
|
50
|
+
if (!Number.isSafeInteger(n) || n < 1)
|
|
51
|
+
throw invalidRef(raw);
|
|
52
|
+
return { kind: type === 'pull' ? 'pr' : 'issue', number: n, raw, repo: `${owner}/${repo}`.toLowerCase() };
|
|
30
53
|
}
|
|
31
54
|
export async function resolveSteerRun(runsDir, ref) {
|
|
32
55
|
if (ref.kind !== 'pr') {
|
|
@@ -36,19 +59,10 @@ export async function resolveSteerRun(runsDir, ref) {
|
|
|
36
59
|
return { file, state };
|
|
37
60
|
}
|
|
38
61
|
if (ref.kind !== 'issue') {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
catch {
|
|
44
|
-
names = [];
|
|
45
|
-
}
|
|
46
|
-
for (const name of names.filter((n) => /^issue-(\d+)\.json$/.test(n)).sort()) {
|
|
47
|
-
const file = join(runsDir, name);
|
|
48
|
-
const state = await readIssueRunState(file);
|
|
49
|
-
if (state?.prNumber === ref.number)
|
|
50
|
-
return { file, state };
|
|
51
|
-
}
|
|
62
|
+
const { runs } = await listIssueRuns(runsDir);
|
|
63
|
+
const state = runs.find((r) => r.prNumber === ref.number);
|
|
64
|
+
if (state)
|
|
65
|
+
return { file: runStateFile(runsDir, state.issue), state };
|
|
52
66
|
}
|
|
53
67
|
throw new SteerCliError(`no run found for ${ref.raw}`, 'no-run');
|
|
54
68
|
}
|
|
@@ -77,6 +91,8 @@ function requireMessage(opts) {
|
|
|
77
91
|
const message = opts.message?.trim() ?? '';
|
|
78
92
|
if (message === '')
|
|
79
93
|
throw new SteerCliError('--message must not be empty', 'bad-input');
|
|
94
|
+
if (/[\r\n]/.test(message))
|
|
95
|
+
throw new SteerCliError('--message must be one line', 'bad-input');
|
|
80
96
|
return message;
|
|
81
97
|
}
|
|
82
98
|
export function buildSteerEvent(state, opts, deps) {
|
|
@@ -108,7 +124,18 @@ export function buildSteerEvent(state, opts, deps) {
|
|
|
108
124
|
export async function runSteer(rawRef, opts, deps) {
|
|
109
125
|
const ref = parseSteerRef(rawRef);
|
|
110
126
|
requireMessage(opts);
|
|
127
|
+
if (ref.repo) {
|
|
128
|
+
const { runs } = await listIssueRuns(deps.runsDir);
|
|
129
|
+
const known = new Set();
|
|
130
|
+
for (const r of runs)
|
|
131
|
+
if (r.repo)
|
|
132
|
+
known.add(r.repo.toLowerCase());
|
|
133
|
+
if (known.size > 0 && !known.has(ref.repo))
|
|
134
|
+
throw repoMismatch(ref, [...known].join(', '));
|
|
135
|
+
}
|
|
111
136
|
const { file, state } = await resolveSteerRun(deps.runsDir, ref);
|
|
137
|
+
if (ref.repo && state.repo && state.repo.toLowerCase() !== ref.repo)
|
|
138
|
+
throw repoMismatch(ref, state.repo);
|
|
112
139
|
const event = buildSteerEvent(state, opts, deps);
|
|
113
140
|
let next;
|
|
114
141
|
try {
|
package/dist/cli/steer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steer.js","sourceRoot":"","sources":["../../src/cli/steer.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,OAAO,
|
|
1
|
+
{"version":3,"file":"steer.js","sourceRoot":"","sources":["../../src/cli/steer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type IssueRunState, type SteerabilityReport } from '@on-par/factory-core/internal';
|
|
2
|
-
/** Every parseable `issue-<n>.json` run state in `runsDir`; phase snapshots and
|
|
2
|
+
/** Every parseable `issue-<n>.json` run state in `runsDir`; phase snapshots and invalid records are skipped (core's listIssueRuns). */
|
|
3
3
|
export declare function readRunStates(runsDir: string): Promise<IssueRunState[]>;
|
|
4
4
|
/** Steers per merged PR from local run states and classifier-outcomes.jsonl (#3403). */
|
|
5
5
|
export declare function buildSteerabilityReport(paths: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steerability-report.d.ts","sourceRoot":"","sources":["../../src/cli/steerability-report.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"steerability-report.d.ts","sourceRoot":"","sources":["../../src/cli/steerability-report.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,+BAA+B,CAAC;AAWvC,uIAAuI;AACvI,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAE7E;AAED,wFAAwF;AACxF,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,MAAM,CAAC;CAC5B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAK9B"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { join } from 'node:path';
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
3
2
|
import { parseClassifierOutcomes } from '@on-par/factory-core';
|
|
4
|
-
import { collectMergedPrSteers,
|
|
3
|
+
import { collectMergedPrSteers, listIssueRuns, summarizeSteerability, } from '@on-par/factory-core/internal';
|
|
5
4
|
async function readOrEmpty(read, empty) {
|
|
6
5
|
try {
|
|
7
6
|
return await read();
|
|
@@ -12,11 +11,9 @@ async function readOrEmpty(read, empty) {
|
|
|
12
11
|
throw err;
|
|
13
12
|
}
|
|
14
13
|
}
|
|
15
|
-
/** Every parseable `issue-<n>.json` run state in `runsDir`; phase snapshots and
|
|
14
|
+
/** Every parseable `issue-<n>.json` run state in `runsDir`; phase snapshots and invalid records are skipped (core's listIssueRuns). */
|
|
16
15
|
export async function readRunStates(runsDir) {
|
|
17
|
-
|
|
18
|
-
const states = await Promise.all(names.filter((name) => /^issue-(\d+)\.json$/.test(name)).map((name) => readIssueRunState(join(runsDir, name))));
|
|
19
|
-
return states.filter((s) => s !== null && typeof s.issue === 'number');
|
|
16
|
+
return (await listIssueRuns(runsDir)).runs;
|
|
20
17
|
}
|
|
21
18
|
/** Steers per merged PR from local run states and classifier-outcomes.jsonl (#3403). */
|
|
22
19
|
export async function buildSteerabilityReport(paths) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steerability-report.js","sourceRoot":"","sources":["../../src/cli/steerability-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"steerability-report.js","sourceRoot":"","sources":["../../src/cli/steerability-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,qBAAqB,GAGtB,MAAM,+BAA+B,CAAC;AAEvC,KAAK,UAAU,WAAW,CAAI,IAAsB,EAAE,KAAQ;IAC5D,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACnE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,uIAAuI;AACvI,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe;IACjD,OAAO,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAG7C;IACC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IACtF,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,qBAAqB,CAAC,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;IACvF,OAAO,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC"}
|
package/dist/cli/supervise.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export interface SuperviseOptions {
|
|
|
9
9
|
usageThreshold?: string;
|
|
10
10
|
usagePoll?: string;
|
|
11
11
|
branchPrefix?: string;
|
|
12
|
+
notify?: string;
|
|
12
13
|
}
|
|
13
14
|
/** index.ts's helpers for `factory supervise`, built at call time so main() deps injection reaches the handler. */
|
|
14
15
|
export interface SuperviseRuntime {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervise.d.ts","sourceRoot":"","sources":["../../src/cli/supervise.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EAEZ,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"supervise.d.ts","sourceRoot":"","sources":["../../src/cli/supervise.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EAEZ,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,mHAAmH;AACnH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,GAAG,gBAAgB,CAAC,CAAC,CAAC;IACtF,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;IACxD,oBAAoB,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC/D,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,kBAAkB,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,KAAK,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/G,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,uGAAuG;IACvG,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAChG;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuE9F"}
|
package/dist/cli/supervise.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
// packages/cli/src/cli/supervise.ts — the factory supervise handler, moved out of index.ts (#2797)
|
|
2
2
|
import { existsSync, readFileSync } from 'node:fs';
|
|
3
3
|
import { getFactoryPaths, parseQueue, resolveIngestConfig } from '@on-par/factory-core';
|
|
4
|
-
import { createGithubQueue, createOctokitQueueClient } from '@on-par/factory-core/internal';
|
|
4
|
+
import { createGithubQueue, createOctokitQueueClient, resolveQueueClaimSettleMs } from '@on-par/factory-core/internal';
|
|
5
5
|
export async function cmdSupervise(opts, rt) {
|
|
6
6
|
const branchPrefix = rt.branchPrefixOrExit(opts.branchPrefix);
|
|
7
7
|
const repoRoot = await rt.getRepoRoot();
|
|
8
8
|
const paths = getFactoryPaths(repoRoot);
|
|
9
|
-
const
|
|
9
|
+
const factoryConfig = rt.configLoaders.loadFactoryConfigForRepo(paths.config);
|
|
10
|
+
const ingestCfg = resolveIngestConfig(factoryConfig);
|
|
10
11
|
const countPending = async () => {
|
|
11
12
|
if (opts.localQueue === true) {
|
|
12
13
|
const content = existsSync(paths.queue) ? readFileSync(paths.queue, 'utf-8') : '';
|
|
@@ -15,7 +16,12 @@ export async function cmdSupervise(opts, rt) {
|
|
|
15
16
|
return parsed.entries.length;
|
|
16
17
|
}
|
|
17
18
|
const [owner, repo] = (await rt.getGitHubRepo()).split('/');
|
|
18
|
-
const gq = createGithubQueue({
|
|
19
|
+
const gq = createGithubQueue({
|
|
20
|
+
client: createOctokitQueueClient(rt.getOctokit()),
|
|
21
|
+
owner,
|
|
22
|
+
repo,
|
|
23
|
+
claimSettleMs: resolveQueueClaimSettleMs(factoryConfig),
|
|
24
|
+
});
|
|
19
25
|
const lanes = await gq.lanes();
|
|
20
26
|
const counts = await Promise.all(lanes.map((lane) => gq.list(lane)));
|
|
21
27
|
return counts.reduce((total, issues) => total + issues.length, 0);
|
|
@@ -51,6 +57,7 @@ export async function cmdSupervise(opts, rt) {
|
|
|
51
57
|
usageThreshold: opts.usageThreshold,
|
|
52
58
|
usagePoll: opts.usagePoll,
|
|
53
59
|
branchPrefix: opts.branchPrefix,
|
|
60
|
+
notify: opts.notify,
|
|
54
61
|
}),
|
|
55
62
|
pendingCount: countPending,
|
|
56
63
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervise.js","sourceRoot":"","sources":["../../src/cli/supervise.ts"],"names":[],"mappings":"AAAA,mGAAmG;AAEnG,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAExF,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"supervise.js","sourceRoot":"","sources":["../../src/cli/supervise.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface WorktreeKeepDeps {
|
|
2
|
+
keepsFile: string;
|
|
3
|
+
/** The issue's lane worktree path (worktreePathFor). */
|
|
4
|
+
worktreePath: (issue: number) => string | Promise<string>;
|
|
5
|
+
pathExists?: (p: string) => boolean;
|
|
6
|
+
now?: () => Date;
|
|
7
|
+
out?: (line: string) => void;
|
|
8
|
+
withLock?: <T>(fn: () => Promise<T>) => Promise<T>;
|
|
9
|
+
}
|
|
10
|
+
/** Writes a keep record for the issue's lane worktree so GC and the park-time reap leave it alone. */
|
|
11
|
+
export declare function runWorktreeKeep(issue: number, opts: {
|
|
12
|
+
reason?: string;
|
|
13
|
+
}, deps: WorktreeKeepDeps): Promise<void>;
|
|
14
|
+
/** Drops the issue's keep record; true when one existed. Never creates the keeps file. */
|
|
15
|
+
export declare function runWorktreeRelease(issue: number, deps: Pick<WorktreeKeepDeps, 'keepsFile' | 'out' | 'withLock'>): Promise<boolean>;
|
|
16
|
+
/** Best-effort: the factory owns the worktree again once the lane re-queues the issue. Never throws. */
|
|
17
|
+
export declare function releaseKeepOnRequeue(keepsFile: string | undefined, issue: number, warn?: (msg: string) => void): void;
|
|
18
|
+
//# sourceMappingURL=worktree-keep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-keep.d.ts","sourceRoot":"","sources":["../../src/cli/worktree-keep.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IACpC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CACpD;AAID,sGAAsG;AACtG,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrH;AAED,0FAA0F;AAC1F,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC,GAC7D,OAAO,CAAC,OAAO,CAAC,CAalB;AAED,wGAAwG;AACxG,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAOrH"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// packages/cli/src/cli/worktree-keep.ts — `factory worktree keep|release` and the re-queue release (#3318)
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { findWorktreeKeep, removeWorktreeKeep, upsertWorktreeKeep } from '@on-par/factory-core/internal';
|
|
4
|
+
import { CliExitError } from './index.js';
|
|
5
|
+
const direct = (fn) => fn();
|
|
6
|
+
/** Writes a keep record for the issue's lane worktree so GC and the park-time reap leave it alone. */
|
|
7
|
+
export async function runWorktreeKeep(issue, opts, deps) {
|
|
8
|
+
const { pathExists = existsSync, now = () => new Date(), out = console.log, withLock = direct } = deps;
|
|
9
|
+
const reason = opts.reason ?? 'manual';
|
|
10
|
+
if (reason.trim() === '')
|
|
11
|
+
throw new CliExitError('factory worktree keep: --reason must not be empty', 2);
|
|
12
|
+
const path = await deps.worktreePath(issue);
|
|
13
|
+
if (!pathExists(path)) {
|
|
14
|
+
throw new CliExitError(`factory worktree keep: #${issue} has no lane worktree (looked for ${path})`, 2);
|
|
15
|
+
}
|
|
16
|
+
await withLock(async () => upsertWorktreeKeep(deps.keepsFile, { issue, path, reason: reason.trim(), since: now().toISOString() }));
|
|
17
|
+
out(`kept ${path} for #${issue} (${reason.trim()}) — worktree gc leaves it until the issue closes or 'factory worktree release ${issue}'`);
|
|
18
|
+
}
|
|
19
|
+
/** Drops the issue's keep record; true when one existed. Never creates the keeps file. */
|
|
20
|
+
export async function runWorktreeRelease(issue, deps) {
|
|
21
|
+
const { out = console.log, withLock = direct } = deps;
|
|
22
|
+
const had = await withLock(async () => {
|
|
23
|
+
const found = findWorktreeKeep(deps.keepsFile, issue);
|
|
24
|
+
if (found)
|
|
25
|
+
removeWorktreeKeep(deps.keepsFile, issue);
|
|
26
|
+
return found;
|
|
27
|
+
});
|
|
28
|
+
if (had) {
|
|
29
|
+
out(`released the keep record for #${issue} (${had.reason}) — the next worktree gc treats ${had.path} normally`);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
out(`#${issue} had no keep record — nothing to release`);
|
|
33
|
+
}
|
|
34
|
+
return had !== undefined;
|
|
35
|
+
}
|
|
36
|
+
/** Best-effort: the factory owns the worktree again once the lane re-queues the issue. Never throws. */
|
|
37
|
+
export function releaseKeepOnRequeue(keepsFile, issue, warn) {
|
|
38
|
+
if (keepsFile === undefined)
|
|
39
|
+
return;
|
|
40
|
+
try {
|
|
41
|
+
removeWorktreeKeep(keepsFile, issue);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
warn?.(`could not drop the keep record for #${issue}: ${err instanceof Error ? err.message : String(err)}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=worktree-keep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-keep.js","sourceRoot":"","sources":["../../src/cli/worktree-keep.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ declare function reapUnderLock<R>(rt: ReapRuntime, [issue, repoRoot, ghRepo, pat
|
|
|
17
17
|
result: R | undefined;
|
|
18
18
|
}>;
|
|
19
19
|
/** Eagerly reaps a parked lane's own worktree inside `factory run` (#1007). All the safety
|
|
20
|
-
* gates live in reapLaneWorktree. A reap failure is logged as a warn and never surfaces —
|
|
20
|
+
* gates, the keep record included, live in reapLaneWorktree. A reap failure is logged as a warn and never surfaces —
|
|
21
21
|
* parking must always succeed. */
|
|
22
22
|
export declare function reapParkedLane(rt: ReapRuntime, reap: typeof reapLaneWorktree, args: Parameters<typeof reapUnderLock>[1]): Promise<void>;
|
|
23
23
|
/** The one run-output line for a PR-less ship's reap: where the worktree is and why it was kept
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-reap.d.ts","sourceRoot":"","sources":["../../src/cli/worktree-reap.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEtF,OAAO,EACL,KAAK,sBAAsB,
|
|
1
|
+
{"version":3,"file":"worktree-reap.d.ts","sourceRoot":"","sources":["../../src/cli/worktree-reap.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEtF,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EAGpB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EAItB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAEhD,mGAAmG;AACnG,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,GAAG,gBAAgB,CAAC,CAAC,CAAC;IACtF,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/F;AAED;2FAC2F;AAC3F,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,EAChD,QAAQ,EAAE,MAAM,GACf,eAAe,GAAG,SAAS,CAI7B;AAED;uGACuG;AACvG,iBAAe,aAAa,CAAC,CAAC,EAC5B,EAAE,EAAE,WAAW,EACf,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC,EACrG,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GACvF,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAA;CAAE,CAAC,CAoBtE;AAED;;mCAEmC;AACnC,wBAAsB,cAAc,CAClC,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,OAAO,gBAAgB,EAC7B,IAAI,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;qFACqF;AACrF,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAsBlH;AAED;;qEAEqE;AACrE,wBAAsB,cAAc,CAClC,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,OAAO,qBAAqB,EAClC,IAAI,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CASf"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// packages/cli/src/cli/worktree-reap.ts — eager lane-worktree reaps (#1007, #3008), moved out of index.ts
|
|
2
2
|
import { resolveSandboxPolicy } from '@on-par/factory-core';
|
|
3
|
-
import {
|
|
3
|
+
import { logEvent, resolveEffectiveConfig, withFileLock, withGitLock, worktreeSandboxFor, } from '@on-par/factory-core/internal';
|
|
4
4
|
/** The repo's current docker-sandbox descriptor for worktree-gc sweeps, or undefined for
|
|
5
5
|
* every other runtime/config state (including a fixture config with no `sandbox` key). */
|
|
6
6
|
export function gcWorktreeSandbox(sandboxCfg, repoRoot) {
|
|
@@ -20,7 +20,7 @@ async function reapUnderLock(rt, [issue, repoRoot, ghRepo, paths, prefixOverride
|
|
|
20
20
|
worktreePath = resolved;
|
|
21
21
|
const log = (type, msg) => logEvent(paths.events, type, issue, msg);
|
|
22
22
|
const sandbox = gcWorktreeSandbox(factoryConfig.sandbox, repoRoot);
|
|
23
|
-
const result = await withGitLock(repoRoot, () => withFileLock(paths.gitLock, () => reap(resolved, { issue, branchPrefix, log, sandbox })));
|
|
23
|
+
const result = await withGitLock(repoRoot, () => withFileLock(paths.gitLock, () => reap(resolved, { issue, branchPrefix, log, sandbox, keepsFile: paths.worktreeKeeps })));
|
|
24
24
|
return { worktreePath, result };
|
|
25
25
|
}
|
|
26
26
|
catch (err) {
|
|
@@ -29,15 +29,9 @@ async function reapUnderLock(rt, [issue, repoRoot, ghRepo, paths, prefixOverride
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
/** Eagerly reaps a parked lane's own worktree inside `factory run` (#1007). All the safety
|
|
32
|
-
* gates live in reapLaneWorktree. A reap failure is logged as a warn and never surfaces —
|
|
32
|
+
* gates, the keep record included, live in reapLaneWorktree. A reap failure is logged as a warn and never surfaces —
|
|
33
33
|
* parking must always succeed. */
|
|
34
34
|
export async function reapParkedLane(rt, reap, args) {
|
|
35
|
-
const [issue, , , paths] = args;
|
|
36
|
-
const keep = findWorktreeKeep(paths.worktreeKeeps, issue, (type, msg) => logEvent(paths.events, type, issue, msg));
|
|
37
|
-
if (keep) {
|
|
38
|
-
logEvent(paths.events, 'worktree-gc', issue, `kept ${keep.path} — kept (${keep.reason}); not reaping the parked lane's worktree or branch`);
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
35
|
await reapUnderLock(rt, args, 'parked-lane worktree reap failed', (worktreePath, opts) => reap(args[1], worktreePath, opts));
|
|
42
36
|
}
|
|
43
37
|
/** The one run-output line for a PR-less ship's reap: where the worktree is and why it was kept
|
|
@@ -52,6 +46,10 @@ export function formatShipReapLine(worktreePath, result) {
|
|
|
52
46
|
return `🧹 Removed worktree ${worktreePath}${result.branchDeleted ? ` and branch ${result.branch}` : ''} — no PR was opened and nothing was committed`;
|
|
53
47
|
case 'kept-dirty':
|
|
54
48
|
return `📌 Kept worktree ${worktreePath}${withBranch} — it has uncommitted changes`;
|
|
49
|
+
case 'kept-untracked':
|
|
50
|
+
return `📌 Kept worktree ${worktreePath}${withBranch} — it has untracked files`;
|
|
51
|
+
case 'kept-record':
|
|
52
|
+
return `📌 Kept worktree ${worktreePath}${withBranch} — it has a keep record`;
|
|
55
53
|
case 'kept-committed':
|
|
56
54
|
return `📌 Kept worktree ${worktreePath}${withBranch} — it has commits beyond the base`;
|
|
57
55
|
case 'kept-branch-mismatch':
|
|
@@ -67,10 +65,10 @@ export function formatShipReapLine(worktreePath, result) {
|
|
|
67
65
|
* failure is logged as a warn and never changes the ship's exit. */
|
|
68
66
|
export async function reapPrlessShip(rt, reap, args) {
|
|
69
67
|
const done = await reapUnderLock(rt, args, 'PR-less ship worktree cleanup failed', (worktreePath, opts) => reap(args[1], worktreePath, opts));
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
// No path means the config load failed, so ship never resolved (or created) a worktree here;
|
|
69
|
+
// the failure is already logged as a warn event by reapUnderLock.
|
|
70
|
+
if (done.worktreePath === undefined)
|
|
72
71
|
return;
|
|
73
|
-
}
|
|
74
72
|
const line = formatShipReapLine(done.worktreePath, done.result);
|
|
75
73
|
if (line !== null)
|
|
76
74
|
console.log(line);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-reap.js","sourceRoot":"","sources":["../../src/cli/worktree-reap.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAG1G,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"worktree-reap.js","sourceRoot":"","sources":["../../src/cli/worktree-reap.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAG1G,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAGL,QAAQ,EACR,sBAAsB,EAGtB,YAAY,EACZ,WAAW,EACX,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AAYvC;2FAC2F;AAC3F,MAAM,UAAU,iBAAiB,CAC/B,UAAgD,EAChD,QAAgB;IAEhB,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClF,OAAO,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED;uGACuG;AACvG,KAAK,UAAU,aAAa,CAC1B,EAAe,EACf,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,CAAsD,EACrG,OAAe,EACf,IAAwF;IAExF,IAAI,YAAgC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9E,MAAM,YAAY,GAChB,cAAc,IAAI,sBAAsB,CAAC,EAAE,CAAC,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;QACnG,MAAM,QAAQ,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAC3E,YAAY,GAAG,QAAQ,CAAC;QACxB,MAAM,GAAG,GAAG,CAAC,IAAe,EAAE,GAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,iBAAiB,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,CAC9C,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,CAC/B,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CACtF,CACF,CAAC;QACF,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,KAAK,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpF,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7C,CAAC;AACH,CAAC;AAED;;mCAEmC;AACnC,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAe,EACf,IAA6B,EAC7B,IAAyC;IAEzC,MAAM,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,kCAAkC,EAAE,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,CACvF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAClC,CAAC;AACJ,CAAC;AAED;qFACqF;AACrF,MAAM,UAAU,kBAAkB,CAAC,YAAoB,EAAE,MAA0C;IACjG,MAAM,UAAU,GAAG,oBAAoB,YAAY,4DAA4D,CAAC;IAChH,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,SAAS;YACZ,OAAO,uBAAuB,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,+CAA+C,CAAC;QACzJ,KAAK,YAAY;YACf,OAAO,oBAAoB,YAAY,GAAG,UAAU,+BAA+B,CAAC;QACtF,KAAK,gBAAgB;YACnB,OAAO,oBAAoB,YAAY,GAAG,UAAU,2BAA2B,CAAC;QAClF,KAAK,aAAa;YAChB,OAAO,oBAAoB,YAAY,GAAG,UAAU,yBAAyB,CAAC;QAChF,KAAK,gBAAgB;YACnB,OAAO,oBAAoB,YAAY,GAAG,UAAU,mCAAmC,CAAC;QAC1F,KAAK,sBAAsB;YACzB,OAAO,oBAAoB,YAAY,gBAAgB,MAAM,CAAC,MAAM,iCAAiC,CAAC;QACxG,KAAK,iBAAiB;YACpB,OAAO,UAAU,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;qEAEqE;AACrE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAe,EACf,IAAkC,EAClC,IAAyC;IAEzC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,sCAAsC,EAAE,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,CACxG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAClC,CAAC;IACF,6FAA6F;IAC7F,kEAAkE;IAClE,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO;IAC5C,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAChE,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@on-par/factory-cli",
|
|
3
|
-
"version": "0.9.14-next.
|
|
3
|
+
"version": "0.9.14-next.30",
|
|
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.14-next.
|
|
52
|
-
"@on-par/factory-core": "0.9.14-next.
|
|
53
|
-
"@on-par/factory-tui": "0.9.14-next.
|
|
51
|
+
"@on-par/factory-config": "0.9.14-next.30",
|
|
52
|
+
"@on-par/factory-core": "0.9.14-next.30",
|
|
53
|
+
"@on-par/factory-tui": "0.9.14-next.30",
|
|
54
54
|
"commander": "^15.0.0",
|
|
55
55
|
"zod": "^4.6.5"
|
|
56
56
|
},
|
package/schemas/cost.schema.json
CHANGED
|
@@ -29,6 +29,9 @@
|
|
|
29
29
|
"outputTokens": {
|
|
30
30
|
"type": "number"
|
|
31
31
|
},
|
|
32
|
+
"rawInputTokens": {
|
|
33
|
+
"type": ["number", "null"]
|
|
34
|
+
},
|
|
32
35
|
"cacheReadTokens": {
|
|
33
36
|
"type": ["number", "null"]
|
|
34
37
|
},
|
|
@@ -46,6 +49,7 @@
|
|
|
46
49
|
"model",
|
|
47
50
|
"inputTokens",
|
|
48
51
|
"outputTokens",
|
|
52
|
+
"rawInputTokens",
|
|
49
53
|
"cacheReadTokens",
|
|
50
54
|
"cacheCreationTokens",
|
|
51
55
|
"cost"
|
|
@@ -70,6 +74,15 @@
|
|
|
70
74
|
"outputTokens": {
|
|
71
75
|
"type": "number"
|
|
72
76
|
},
|
|
77
|
+
"rawInputTokens": {
|
|
78
|
+
"type": "number"
|
|
79
|
+
},
|
|
80
|
+
"cacheReadTokens": {
|
|
81
|
+
"type": "number"
|
|
82
|
+
},
|
|
83
|
+
"cacheCreationTokens": {
|
|
84
|
+
"type": "number"
|
|
85
|
+
},
|
|
73
86
|
"cost": {
|
|
74
87
|
"type": ["number", "null"]
|
|
75
88
|
},
|
|
@@ -85,6 +98,9 @@
|
|
|
85
98
|
"tasks",
|
|
86
99
|
"inputTokens",
|
|
87
100
|
"outputTokens",
|
|
101
|
+
"rawInputTokens",
|
|
102
|
+
"cacheReadTokens",
|
|
103
|
+
"cacheCreationTokens",
|
|
88
104
|
"cost",
|
|
89
105
|
"unpricedCount",
|
|
90
106
|
"cachedRateMissingCount"
|
|
@@ -103,9 +119,31 @@
|
|
|
103
119
|
},
|
|
104
120
|
"cachedRateMissingCount": {
|
|
105
121
|
"type": "number"
|
|
122
|
+
},
|
|
123
|
+
"tokens": {
|
|
124
|
+
"type": "object",
|
|
125
|
+
"properties": {
|
|
126
|
+
"input": {
|
|
127
|
+
"type": "number"
|
|
128
|
+
},
|
|
129
|
+
"output": {
|
|
130
|
+
"type": "number"
|
|
131
|
+
},
|
|
132
|
+
"rawInput": {
|
|
133
|
+
"type": "number"
|
|
134
|
+
},
|
|
135
|
+
"cacheRead": {
|
|
136
|
+
"type": "number"
|
|
137
|
+
},
|
|
138
|
+
"cacheCreation": {
|
|
139
|
+
"type": "number"
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"required": ["input", "output", "rawInput", "cacheRead", "cacheCreation"],
|
|
143
|
+
"additionalProperties": false
|
|
106
144
|
}
|
|
107
145
|
},
|
|
108
|
-
"required": ["cost", "unpricedCount", "cachedRateMissingCount"],
|
|
146
|
+
"required": ["cost", "unpricedCount", "cachedRateMissingCount", "tokens"],
|
|
109
147
|
"additionalProperties": false
|
|
110
148
|
}
|
|
111
149
|
},
|
|
@@ -37,8 +37,51 @@
|
|
|
37
37
|
"required": ["slug", "checkoutPath", "state"],
|
|
38
38
|
"additionalProperties": false
|
|
39
39
|
}
|
|
40
|
+
},
|
|
41
|
+
"load": {
|
|
42
|
+
"type": "object",
|
|
43
|
+
"properties": {
|
|
44
|
+
"activeRuns": {
|
|
45
|
+
"anyOf": [
|
|
46
|
+
{
|
|
47
|
+
"type": "integer",
|
|
48
|
+
"minimum": 0,
|
|
49
|
+
"maximum": 9007199254740991
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"type": "null"
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
"maxSlots": {
|
|
57
|
+
"anyOf": [
|
|
58
|
+
{
|
|
59
|
+
"type": "integer",
|
|
60
|
+
"exclusiveMinimum": 0,
|
|
61
|
+
"maximum": 9007199254740991
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"type": "null"
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
"queueDepth": {
|
|
69
|
+
"anyOf": [
|
|
70
|
+
{
|
|
71
|
+
"type": "integer",
|
|
72
|
+
"minimum": 0,
|
|
73
|
+
"maximum": 9007199254740991
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"type": "null"
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"required": ["activeRuns", "maxSlots", "queueDepth"],
|
|
82
|
+
"additionalProperties": false
|
|
40
83
|
}
|
|
41
84
|
},
|
|
42
|
-
"required": ["schemaVersion", "running", "pid", "uptimeSec", "plistInstalled", "repos"],
|
|
85
|
+
"required": ["schemaVersion", "running", "pid", "uptimeSec", "plistInstalled", "repos", "load"],
|
|
43
86
|
"additionalProperties": false
|
|
44
87
|
}
|