@on-par/factory-cli 0.9.3 → 0.9.5-next.1
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/README.md +3 -3
- package/dist/cli/doctor.d.ts +106 -3
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +494 -57
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/first-run.d.ts +6 -1
- package/dist/cli/first-run.d.ts.map +1 -1
- package/dist/cli/first-run.js +9 -2
- package/dist/cli/first-run.js.map +1 -1
- package/dist/cli/github-stub.d.ts +38 -0
- package/dist/cli/github-stub.d.ts.map +1 -0
- package/dist/cli/github-stub.js +206 -0
- package/dist/cli/github-stub.js.map +1 -0
- package/dist/cli/index.d.ts +25 -6
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +351 -131
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/stop-sentinel.d.ts.map +1 -1
- package/dist/cli/stop-sentinel.js +5 -4
- package/dist/cli/stop-sentinel.js.map +1 -1
- package/dist/cli/sweep-heartbeat.js +5 -5
- package/dist/cli/sweep-heartbeat.js.map +1 -1
- package/dist/entry.d.ts +4 -1
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +14 -3
- package/dist/entry.js.map +1 -1
- package/dist/node-version.d.ts +5 -1
- package/dist/node-version.d.ts.map +1 -1
- package/dist/node-version.js +11 -3
- package/dist/node-version.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop-sentinel.d.ts","sourceRoot":"","sources":["../../src/cli/stop-sentinel.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"stop-sentinel.d.ts","sourceRoot":"","sources":["../../src/cli/stop-sentinel.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAED,wBAAgB,mBAAmB,IAAI,YAAY,CAMlD;AAED,MAAM,MAAM,kBAAkB,GAAG;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1G,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,kBAAkB,CAShH;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED,4FAA4F;AAC5F,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAO7E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,WAAW,CAezE"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// state, shared by `factory run`'s skip-and-log path and `factory doctor`'s
|
|
3
3
|
// explicit status row. STOP is never written or deleted from this module.
|
|
4
4
|
import { existsSync, statSync } from 'node:fs';
|
|
5
|
+
const STOP_FILE_LABEL = '.factory/state/STOP';
|
|
5
6
|
export function defaultStopFileDeps() {
|
|
6
7
|
return {
|
|
7
8
|
pathExists: (p) => existsSync(p),
|
|
@@ -38,7 +39,7 @@ export function formatStopFileAge(ms) {
|
|
|
38
39
|
export function stopSentinelRunSkipMessage(status) {
|
|
39
40
|
if (!status.present)
|
|
40
41
|
return '';
|
|
41
|
-
return (`.factory/STOP present (age ${formatStopFileAge(status.ageMs)}, written ${status.writtenAt})
|
|
42
|
+
return (`.factory/STOP present (age ${formatStopFileAge(status.ageMs)}, written ${status.writtenAt}); ` +
|
|
42
43
|
`factory run is skipping this pass and claiming no new work. ` +
|
|
43
44
|
`Remove .factory/STOP (or run \`factory resume\`) to continue.`);
|
|
44
45
|
}
|
|
@@ -47,15 +48,15 @@ export function stopSentinelCheck(status) {
|
|
|
47
48
|
return {
|
|
48
49
|
name: 'STOP sentinel',
|
|
49
50
|
ok: true,
|
|
50
|
-
detail:
|
|
51
|
+
detail: `${STOP_FILE_LABEL} not present; factory run will claim work normally`,
|
|
51
52
|
};
|
|
52
53
|
}
|
|
53
54
|
return {
|
|
54
55
|
name: 'STOP sentinel',
|
|
55
56
|
ok: false,
|
|
56
57
|
optional: true,
|
|
57
|
-
detail:
|
|
58
|
-
fix:
|
|
58
|
+
detail: `${STOP_FILE_LABEL} present (age ${formatStopFileAge(status.ageMs)}, written ${status.writtenAt}); repo is intentionally paused`,
|
|
59
|
+
fix: `rm ${STOP_FILE_LABEL}, or run \`factory resume\`, to let factory run claim work again`,
|
|
59
60
|
};
|
|
60
61
|
}
|
|
61
62
|
//# sourceMappingURL=stop-sentinel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop-sentinel.js","sourceRoot":"","sources":["../../src/cli/stop-sentinel.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAE1E,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"stop-sentinel.js","sourceRoot":"","sources":["../../src/cli/stop-sentinel.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,14 +32,14 @@ export function sweepHeartbeatCheck(status) {
|
|
|
32
32
|
return {
|
|
33
33
|
name: NAME,
|
|
34
34
|
ok: false,
|
|
35
|
-
detail: `${status.file} not found
|
|
35
|
+
detail: `${status.file} not found; the sweep has never written a heartbeat`,
|
|
36
36
|
fix: 'confirm the sweep loop is running and HEARTBEAT_FILE / sweep.heartbeatFile point at the right path',
|
|
37
37
|
};
|
|
38
38
|
case 'stale':
|
|
39
39
|
return {
|
|
40
40
|
name: NAME,
|
|
41
41
|
ok: false,
|
|
42
|
-
detail: `${status.file} last updated ${status.ageSeconds}s ago (> ${status.thresholdSeconds}s threshold)
|
|
42
|
+
detail: `${status.file} last updated ${status.ageSeconds}s ago (> ${status.thresholdSeconds}s threshold); the sweep looks dead`,
|
|
43
43
|
fix: 'check the sweep loop / launchd job (see docs/runbooks/sweep-heartbeat.md) and restart it',
|
|
44
44
|
};
|
|
45
45
|
case 'fresh':
|
|
@@ -55,11 +55,11 @@ export function formatSweepHeartbeatStatusLine(status) {
|
|
|
55
55
|
case 'unconfigured':
|
|
56
56
|
return 'not configured (sweep.heartbeatFile / HEARTBEAT_FILE unset)';
|
|
57
57
|
case 'missing':
|
|
58
|
-
return `MISSING
|
|
58
|
+
return `MISSING: ${status.file} not found`;
|
|
59
59
|
case 'stale':
|
|
60
|
-
return `STALE
|
|
60
|
+
return `STALE: ${status.file}, last updated ${status.ageSeconds}s ago (threshold ${status.thresholdSeconds}s)`;
|
|
61
61
|
case 'fresh':
|
|
62
|
-
return `OK
|
|
62
|
+
return `OK: ${status.file}, last updated ${status.ageSeconds}s ago (threshold ${status.thresholdSeconds}s)`;
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
//# sourceMappingURL=sweep-heartbeat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sweep-heartbeat.js","sourceRoot":"","sources":["../../src/cli/sweep-heartbeat.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,gGAAgG;AAEhG,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAe/C,MAAM,UAAU,yBAAyB;IACvC,OAAO;QACL,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO;QACnC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAA4B,EAAE,GAAsB;IAC5F,OAAO,MAAM,CAAC,aAAa,IAAI,GAAG,CAAC,cAAc,IAAI,SAAS,CAAC;AACjE,CAAC;AAQD,MAAM,UAAU,mBAAmB,CACjC,MAA4B,EAC5B,GAAsB,EACtB,IAAwB;IAExB,MAAM,IAAI,GAAG,yBAAyB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAE3D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACrF,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAElG,OAAO,UAAU,GAAG,gBAAgB;QAClC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE;QACzD,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAA4B;IAC9D,MAAM,IAAI,GAAG,4BAA4B,CAAC;IAC1C,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,cAAc;YACjB,OAAO,IAAI,CAAC;QACd,KAAK,SAAS;YACZ,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"sweep-heartbeat.js","sourceRoot":"","sources":["../../src/cli/sweep-heartbeat.ts"],"names":[],"mappings":"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"}
|
package/dist/entry.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { type NodeEnv } from './node-version.js';
|
|
1
2
|
export interface EntryIo {
|
|
2
3
|
error(msg: string): void;
|
|
3
4
|
exit(code: number): void;
|
|
4
5
|
}
|
|
5
|
-
|
|
6
|
+
/** Running CLI version from packages/cli/package.json, or '' if unreadable (#2599). */
|
|
7
|
+
export declare function readCliVersion(load?: () => unknown): string;
|
|
8
|
+
export declare function runEntry(main: () => Promise<void>, io?: EntryIo, nodeVersion?: string, cliVersion?: string, env?: NodeEnv): Promise<void>;
|
|
6
9
|
//# sourceMappingURL=entry.d.ts.map
|
package/dist/entry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,WAAW,OAAO;IACtB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAKD,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,IAAI,GAAE,MAAM,OAAiE,GAAG,MAAM,CAOpH;AAED,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACzB,EAAE,GAAE,OAAmB,EACvB,WAAW,GAAE,MAAwB,EACrC,UAAU,GAAE,MAAyB,EACrC,GAAG,GAAE,OAAqB,GACzB,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
package/dist/entry.js
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
|
-
// packages/cli/src/entry.ts — bin-entry runner: gates on the Node version (#2382), awaits main and exits 1 on rejection (#2031).
|
|
1
|
+
// packages/cli/src/entry.ts — bin-entry runner: gates on the Node version (#2382) and pins the CLI version in its reinstall line (#2599) and offers nvm only when detected (#2600), awaits main and exits 1 on rejection (#2031).
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
2
3
|
import { checkNodeVersion } from './node-version.js';
|
|
3
4
|
// References, not wrappers: Node's console methods are bound and process.exit ignores `this`.
|
|
4
5
|
const defaultIo = { error: console.error, exit: process.exit };
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
/** Running CLI version from packages/cli/package.json, or '' if unreadable (#2599). */
|
|
7
|
+
export function readCliVersion(load = () => createRequire(import.meta.url)('../package.json')) {
|
|
8
|
+
try {
|
|
9
|
+
const version = load()?.version;
|
|
10
|
+
return typeof version === 'string' ? version : '';
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return '';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export async function runEntry(main, io = defaultIo, nodeVersion = process.version, cliVersion = readCliVersion(), env = process.env) {
|
|
17
|
+
const node = checkNodeVersion(nodeVersion, cliVersion, env);
|
|
7
18
|
if (!node.ok) {
|
|
8
19
|
io.error(node.message);
|
|
9
20
|
io.exit(1);
|
package/dist/entry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAAA,kOAAkO;AAElO,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAgB,MAAM,mBAAmB,CAAC;AAOnE,8FAA8F;AAC9F,MAAM,SAAS,GAAY,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AAExE,uFAAuF;AACvF,MAAM,UAAU,cAAc,CAAC,IAAI,GAAkB,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC;IAC1G,IAAI,CAAC;QACH,MAAM,OAAO,GAAI,IAAI,EAAmC,EAAE,OAAO,CAAC;QAClE,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAyB,EACzB,EAAE,GAAY,SAAS,EACvB,WAAW,GAAW,OAAO,CAAC,OAAO,EACrC,UAAU,GAAW,cAAc,EAAE,EACrC,GAAG,GAAY,OAAO,CAAC,GAAG;IAE1B,MAAM,IAAI,GAAG,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACX,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,EAAE,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QACjC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACb,CAAC;AACH,CAAC"}
|
package/dist/node-version.d.ts
CHANGED
|
@@ -6,5 +6,9 @@ export type NodeVersionCheck = {
|
|
|
6
6
|
ok: false;
|
|
7
7
|
message: string;
|
|
8
8
|
};
|
|
9
|
-
|
|
9
|
+
/** Environment lookup compatible with process.env; injectable so tests are deterministic (#2600). */
|
|
10
|
+
export type NodeEnv = Readonly<Record<string, string | undefined>>;
|
|
11
|
+
/** True when nvm is loaded in the calling shell: nvm.sh exports NVM_DIR (#2600). */
|
|
12
|
+
export declare function hasNvm(env: NodeEnv): boolean;
|
|
13
|
+
export declare function checkNodeVersion(version: string, cliVersion?: string, env?: NodeEnv): NodeVersionCheck;
|
|
10
14
|
//# sourceMappingURL=node-version.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-version.d.ts","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":"AAEA,0GAA0G;AAC1G,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,MAAM,MAAM,gBAAgB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"node-version.d.ts","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":"AAEA,0GAA0G;AAC1G,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,MAAM,MAAM,gBAAgB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,qGAAqG;AACrG,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAEnE,oFAAoF;AACpF,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAE5C;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,OAAY,GAAG,gBAAgB,CAc1G"}
|
package/dist/node-version.js
CHANGED
|
@@ -1,15 +1,23 @@
|
|
|
1
|
-
// packages/cli/src/node-version.ts — minimum Node gate for the bin entry (#2382). No imports: must load on old Node.
|
|
1
|
+
// packages/cli/src/node-version.ts — minimum Node gate for the bin entry (#2382); the reinstall line pins the running CLI version (#2599). No imports: must load on old Node.
|
|
2
2
|
/** Minimum supported Node.js major; keep in sync with engines.node (asserted by node-version.test.ts). */
|
|
3
3
|
export const MIN_NODE_MAJOR = 24;
|
|
4
|
-
|
|
4
|
+
/** True when nvm is loaded in the calling shell: nvm.sh exports NVM_DIR (#2600). */
|
|
5
|
+
export function hasNvm(env) {
|
|
6
|
+
return (env.NVM_DIR ?? '').trim() !== '';
|
|
7
|
+
}
|
|
8
|
+
export function checkNodeVersion(version, cliVersion, env = {}) {
|
|
5
9
|
const match = /^v?(\d+)\./.exec(version);
|
|
6
10
|
if (match && Number(match[1]) >= MIN_NODE_MAJOR)
|
|
7
11
|
return { ok: true };
|
|
8
12
|
const found = version === '' ? 'unknown' : match && !version.startsWith('v') ? `v${version}` : version;
|
|
13
|
+
const pkg = cliVersion ? `@on-par/factory-cli@${cliVersion}` : '@on-par/factory-cli';
|
|
14
|
+
const install = hasNvm(env)
|
|
15
|
+
? `nvm install ${MIN_NODE_MAJOR} && nvm use ${MIN_NODE_MAJOR}`
|
|
16
|
+
: `install Node.js ${MIN_NODE_MAJOR} from https://nodejs.org/download`;
|
|
9
17
|
return {
|
|
10
18
|
ok: false,
|
|
11
19
|
message: `On PAR Dev's Software Factory needs Node.js ${MIN_NODE_MAJOR} or newer (found ${found}).\n` +
|
|
12
|
-
`Fix:
|
|
20
|
+
`Fix: ${install}, then npm install -g ${pkg}`,
|
|
13
21
|
};
|
|
14
22
|
}
|
|
15
23
|
//# sourceMappingURL=node-version.js.map
|
package/dist/node-version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-version.js","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"node-version.js","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":"AAAA,8KAA8K;AAE9K,0GAA0G;AAC1G,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAOjC,oFAAoF;AACpF,MAAM,UAAU,MAAM,CAAC,GAAY;IACjC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,UAAmB,EAAE,GAAG,GAAY,EAAE;IACtF,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,cAAc;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACrE,MAAM,KAAK,GAAG,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACvG,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;IACrF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;QACzB,CAAC,CAAC,eAAe,cAAc,eAAe,cAAc,EAAE;QAC9D,CAAC,CAAC,mBAAmB,cAAc,mCAAmC,CAAC;IACzE,OAAO;QACL,EAAE,EAAE,KAAK;QACT,OAAO,EACL,+CAA+C,cAAc,oBAAoB,KAAK,MAAM;YAC5F,QAAQ,OAAO,yBAAyB,GAAG,EAAE;KAChD,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@on-par/factory-cli",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.5-next.1",
|
|
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",
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
"@octokit/plugin-retry": "^8.1.1",
|
|
48
48
|
"@octokit/plugin-throttling": "^11.0.5",
|
|
49
49
|
"@octokit/rest": "^22.0.0",
|
|
50
|
-
"@on-par/factory-core": "0.9.
|
|
51
|
-
"@on-par/factory-tui": "0.9.
|
|
50
|
+
"@on-par/factory-core": "0.9.5-next.1",
|
|
51
|
+
"@on-par/factory-tui": "0.9.5-next.1",
|
|
52
52
|
"commander": "^15.0.0"
|
|
53
53
|
},
|
|
54
54
|
"license": "MIT",
|