@on-par/factory-cli 0.9.4 → 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.
@@ -39,7 +39,7 @@ export function formatStopFileAge(ms) {
39
39
  export function stopSentinelRunSkipMessage(status) {
40
40
  if (!status.present)
41
41
  return '';
42
- return (`.factory/STOP present (age ${formatStopFileAge(status.ageMs)}, written ${status.writtenAt}) — ` +
42
+ return (`.factory/STOP present (age ${formatStopFileAge(status.ageMs)}, written ${status.writtenAt}); ` +
43
43
  `factory run is skipping this pass and claiming no new work. ` +
44
44
  `Remove .factory/STOP (or run \`factory resume\`) to continue.`);
45
45
  }
@@ -48,14 +48,14 @@ export function stopSentinelCheck(status) {
48
48
  return {
49
49
  name: 'STOP sentinel',
50
50
  ok: true,
51
- detail: `${STOP_FILE_LABEL} not present — factory run will claim work normally`,
51
+ detail: `${STOP_FILE_LABEL} not present; factory run will claim work normally`,
52
52
  };
53
53
  }
54
54
  return {
55
55
  name: 'STOP sentinel',
56
56
  ok: false,
57
57
  optional: true,
58
- detail: `${STOP_FILE_LABEL} present (age ${formatStopFileAge(status.ageMs)}, written ${status.writtenAt}) — repo is intentionally paused`,
58
+ detail: `${STOP_FILE_LABEL} present (age ${formatStopFileAge(status.ageMs)}, written ${status.writtenAt}); repo is intentionally paused`,
59
59
  fix: `rm ${STOP_FILE_LABEL}, or run \`factory resume\`, to let factory run claim work again`,
60
60
  };
61
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stop-sentinel.js","sourceRoot":"","sources":["../../src/cli/stop-sentinel.ts"],"names":[],"mappings":"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"}
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 — the sweep has never written a heartbeat`,
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) — the sweep looks dead`,
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 — ${status.file} not found`;
58
+ return `MISSING: ${status.file} not found`;
59
59
  case 'stale':
60
- return `STALE — ${status.file}, last updated ${status.ageSeconds}s ago (threshold ${status.thresholdSeconds}s)`;
60
+ return `STALE: ${status.file}, last updated ${status.ageSeconds}s ago (threshold ${status.thresholdSeconds}s)`;
61
61
  case 'fresh':
62
- return `OK — ${status.file}, last updated ${status.ageSeconds}s ago (threshold ${status.thresholdSeconds}s)`;
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":"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"}
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
- export declare function runEntry(main: () => Promise<void>, io?: EntryIo, nodeVersion?: string): Promise<void>;
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
@@ -1 +1 @@
1
- {"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,OAAO;IACtB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAKD,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACzB,EAAE,GAAE,OAAmB,EACvB,WAAW,GAAE,MAAwB,GACpC,OAAO,CAAC,IAAI,CAAC,CAaf"}
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
- export async function runEntry(main, io = defaultIo, nodeVersion = process.version) {
6
- const node = checkNodeVersion(nodeVersion);
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,iIAAiI;AAEjI,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAOrD,8FAA8F;AAC9F,MAAM,SAAS,GAAY,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAyB,EACzB,EAAE,GAAY,SAAS,EACvB,WAAW,GAAW,OAAO,CAAC,OAAO;IAErC,MAAM,IAAI,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC3C,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"}
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"}
@@ -6,5 +6,9 @@ export type NodeVersionCheck = {
6
6
  ok: false;
7
7
  message: string;
8
8
  };
9
- export declare function checkNodeVersion(version: string): NodeVersionCheck;
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,CAUlE"}
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"}
@@ -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
- export function checkNodeVersion(version) {
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: nvm install ${MIN_NODE_MAJOR} && nvm use ${MIN_NODE_MAJOR}, then npm install -g @on-par/factory-cli`,
20
+ `Fix: ${install}, then npm install -g ${pkg}`,
13
21
  };
14
22
  }
15
23
  //# sourceMappingURL=node-version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-version.js","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":"AAAA,qHAAqH;AAErH,0GAA0G;AAC1G,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAIjC,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,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,OAAO;QACL,EAAE,EAAE,KAAK;QACT,OAAO,EACL,+CAA+C,cAAc,oBAAoB,KAAK,MAAM;YAC5F,oBAAoB,cAAc,eAAe,cAAc,2CAA2C;KAC7G,CAAC;AACJ,CAAC"}
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.4",
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.4",
51
- "@on-par/factory-tui": "0.9.4",
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",