@on-par/factory-cli 0.9.0 → 0.9.2

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 (51) hide show
  1. package/README.md +22 -5
  2. package/dist/cli/base-hold.d.ts +63 -0
  3. package/dist/cli/base-hold.d.ts.map +1 -0
  4. package/dist/cli/base-hold.js +122 -0
  5. package/dist/cli/base-hold.js.map +1 -0
  6. package/dist/cli/daemon.d.ts +111 -4
  7. package/dist/cli/daemon.d.ts.map +1 -1
  8. package/dist/cli/daemon.js +364 -6
  9. package/dist/cli/daemon.js.map +1 -1
  10. package/dist/cli/doctor.d.ts +11 -0
  11. package/dist/cli/doctor.d.ts.map +1 -1
  12. package/dist/cli/doctor.js +55 -6
  13. package/dist/cli/doctor.js.map +1 -1
  14. package/dist/cli/feedback.d.ts +18 -2
  15. package/dist/cli/feedback.d.ts.map +1 -1
  16. package/dist/cli/feedback.js +38 -4
  17. package/dist/cli/feedback.js.map +1 -1
  18. package/dist/cli/help-groups.d.ts.map +1 -1
  19. package/dist/cli/help-groups.js +10 -1
  20. package/dist/cli/help-groups.js.map +1 -1
  21. package/dist/cli/index.d.ts +24 -1
  22. package/dist/cli/index.d.ts.map +1 -1
  23. package/dist/cli/index.js +222 -43
  24. package/dist/cli/index.js.map +1 -1
  25. package/dist/cli/self-update.d.ts +68 -0
  26. package/dist/cli/self-update.d.ts.map +1 -0
  27. package/dist/cli/self-update.js +167 -0
  28. package/dist/cli/self-update.js.map +1 -0
  29. package/dist/cli/state-root.d.ts +5 -0
  30. package/dist/cli/state-root.d.ts.map +1 -0
  31. package/dist/cli/state-root.js +12 -0
  32. package/dist/cli/state-root.js.map +1 -0
  33. package/dist/cli/status-json.d.ts +4 -0
  34. package/dist/cli/status-json.d.ts.map +1 -1
  35. package/dist/cli/status-json.js +1 -0
  36. package/dist/cli/status-json.js.map +1 -1
  37. package/dist/cli/update-state.d.ts +46 -0
  38. package/dist/cli/update-state.d.ts.map +1 -0
  39. package/dist/cli/update-state.js +158 -0
  40. package/dist/cli/update-state.js.map +1 -0
  41. package/dist/cli.js +2 -2
  42. package/dist/cli.js.map +1 -1
  43. package/dist/entry.d.ts +1 -1
  44. package/dist/entry.d.ts.map +1 -1
  45. package/dist/entry.js +9 -2
  46. package/dist/entry.js.map +1 -1
  47. package/dist/node-version.d.ts +10 -0
  48. package/dist/node-version.d.ts.map +1 -0
  49. package/dist/node-version.js +15 -0
  50. package/dist/node-version.js.map +1 -0
  51. package/package.json +12 -4
@@ -2,10 +2,13 @@
2
2
  // wrappers around the foreground factoryd (#1179, epic #764), plus `daemon run`
3
3
  // option resolution into FactorydConfig (#2128).
4
4
  import { execFile } from 'node:child_process';
5
- import { closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, realpathSync, writeFileSync, } from 'node:fs';
5
+ import { closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, realpathSync, unlinkSync, writeFileSync, } from 'node:fs';
6
6
  import { homedir } from 'node:os';
7
- import { dirname, join } from 'node:path';
8
- import { DEFAULT_FACTORYD_PORT, defaultRegistryPath, listRepos, loadRegistry, } from '@on-par/factory-core/internal';
7
+ import { createRequire } from 'node:module';
8
+ import { dirname, join, sep } from 'node:path';
9
+ import { DEFAULT_FACTORYD_PORT, defaultRegistryPath, listRepos, loadRegistry, readRunLockHolder, } from '@on-par/factory-core/internal';
10
+ import { defaultIsPidAlive, getFactoryPaths } from '@on-par/factory-core';
11
+ import { initialUpdateState, readUpdateState, recordUpdateCheck, writeUpdateState, } from './update-state.js';
9
12
  export const FACTORYD_LABEL = 'com.onpar.factoryd';
10
13
  /** Expected daemon-control failure. index.ts's commander wrappers map it onto
11
14
  * CliExitError (importing CliExitError here would be circular — index.ts
@@ -27,14 +30,124 @@ export function factorydFiles(home) {
27
30
  logPath: join(home, '.factory', 'daemon.log'),
28
31
  };
29
32
  }
33
+ export const UPDATE_MODES = ['manual', 'stable', 'prerelease'];
34
+ /** The single mode → npm dist-tag mapping (#2246). */
35
+ export function updateChannel(mode) {
36
+ switch (mode) {
37
+ case 'stable':
38
+ return 'latest';
39
+ case 'prerelease':
40
+ return 'next';
41
+ case 'manual':
42
+ return null;
43
+ }
44
+ }
45
+ /** Exact, case-sensitive parse of an update mode. Throws DaemonCtlError (code 2). */
46
+ export function parseUpdateMode(value, source) {
47
+ if (UPDATE_MODES.includes(value))
48
+ return value;
49
+ throw new DaemonCtlError(`invalid ${source} "${value}" — expected one of ${UPDATE_MODES.join(', ')}`, 2);
50
+ }
51
+ function defaultCliPath() {
52
+ try {
53
+ return realpathSync(process.argv[1] ?? '');
54
+ }
55
+ catch {
56
+ return '';
57
+ }
58
+ }
59
+ /** Classifies the running cli.js as npm-global, source or unknown (#2246). Pure
60
+ * apart from the injectable fs probe; never spawns npm or git. */
61
+ export function detectInstall(deps = {}) {
62
+ const execPath = deps.execPath ?? process.execPath;
63
+ const cliPath = deps.cliPath ?? defaultCliPath();
64
+ const env = deps.env ?? process.env;
65
+ const version = deps.version ?? createRequire(import.meta.url)('../../package.json').version;
66
+ const exists = deps.exists ?? existsSync;
67
+ const prefix = dirname(dirname(execPath));
68
+ const info = (kind) => ({ kind, prefix, version });
69
+ if (env.FACTORY_FROM_SOURCE === '1')
70
+ return info('source');
71
+ const pkgDir = join(prefix, 'lib', 'node_modules', '@on-par', 'factory-cli');
72
+ if (cliPath.startsWith(pkgDir + sep))
73
+ return info('npm-global');
74
+ if (cliPath !== '') {
75
+ let dir = dirname(cliPath);
76
+ for (;;) {
77
+ if (exists(join(dir, '.git')))
78
+ return info('source');
79
+ const parent = dirname(dir);
80
+ if (parent === dir)
81
+ break;
82
+ dir = parent;
83
+ }
84
+ }
85
+ return info('unknown');
86
+ }
87
+ /** Reads daemon.json. A missing file is `{}`; malformed structure throws DaemonCtlError (code 2). */
88
+ export function loadDaemonFileConfig(file) {
89
+ if (!existsSync(file))
90
+ return {};
91
+ const fail = (reason) => new DaemonCtlError(`invalid daemon config ${file}: ${reason}`, 2);
92
+ let parsed;
93
+ try {
94
+ parsed = JSON.parse(readFileSync(file, 'utf8'));
95
+ }
96
+ catch (err) {
97
+ throw fail(err instanceof Error ? err.message : String(err));
98
+ }
99
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
100
+ throw fail('expected a JSON object');
101
+ const autoUpdate = parsed.autoUpdate;
102
+ if (autoUpdate !== undefined &&
103
+ (typeof autoUpdate !== 'object' || autoUpdate === null || Array.isArray(autoUpdate))) {
104
+ throw fail('autoUpdate must be an object');
105
+ }
106
+ return parsed;
107
+ }
108
+ function positiveInt(value, fallback, name) {
109
+ if (value === undefined)
110
+ return fallback;
111
+ if (typeof value !== 'number' || !Number.isInteger(value) || value <= 0) {
112
+ throw new DaemonCtlError(`invalid ${name} "${String(value)}" — expected a positive integer`, 2);
113
+ }
114
+ return value;
115
+ }
30
116
  /** Resolves `factory daemon run` options into a FactorydConfig. Throws
31
- * DaemonCtlError (code 2) on an invalid --port. */
32
- export function resolveFactorydConfig(opts) {
117
+ * DaemonCtlError (code 2) on an invalid --port, --update-mode or daemon.json value. */
118
+ export function resolveFactorydConfig(opts, deps = {}) {
33
119
  const port = opts.port === undefined ? DEFAULT_FACTORYD_PORT : Number(opts.port);
34
120
  if (!Number.isInteger(port) || port < 0 || port > 65535) {
35
121
  throw new DaemonCtlError(`invalid --port "${opts.port}" — expected an integer 0-65535`, 2);
36
122
  }
37
- return { registryFile: opts.registry ?? defaultRegistryPath(), port, autoUpdate: opts.autoUpdate === true };
123
+ const install = deps.install ?? detectInstall();
124
+ const fileAutoUpdate = (deps.fileConfig ?? {}).autoUpdate;
125
+ const notices = [];
126
+ if (opts.autoUpdate === true)
127
+ notices.push('--auto-update is deprecated; use --update-mode stable');
128
+ let requested;
129
+ if (opts.updateMode !== undefined)
130
+ requested = parseUpdateMode(opts.updateMode, '--update-mode');
131
+ else if (opts.autoUpdate === true)
132
+ requested = 'stable';
133
+ else if (fileAutoUpdate?.mode !== undefined) {
134
+ requested = parseUpdateMode(String(fileAutoUpdate.mode), 'autoUpdate.mode in daemon.json');
135
+ }
136
+ else
137
+ requested = install.kind === 'npm-global' ? 'stable' : 'manual';
138
+ let mode = requested;
139
+ if (install.kind !== 'npm-global' && requested !== 'manual') {
140
+ notices.push(`update mode ${requested} needs an npm install; staying manual`);
141
+ mode = 'manual';
142
+ }
143
+ const autoUpdate = {
144
+ mode,
145
+ requestedMode: requested,
146
+ channel: updateChannel(mode),
147
+ checkIntervalMinutes: positiveInt(fileAutoUpdate?.checkIntervalMinutes, 30, 'autoUpdate.checkIntervalMinutes'),
148
+ drainTimeoutMinutes: positiveInt(fileAutoUpdate?.drainTimeoutMinutes, 60, 'autoUpdate.drainTimeoutMinutes'),
149
+ };
150
+ return { registryFile: opts.registry ?? defaultRegistryPath(), port, autoUpdate, install, notices };
38
151
  }
39
152
  function xmlEscape(s) {
40
153
  return s.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');
@@ -279,4 +392,249 @@ export async function cmdDaemonLogs(opts, deps = {}) {
279
392
  });
280
393
  clearInterval(poll);
281
394
  }
395
+ // ── auto-update loop (#1939) ────────────────────────────────────────────────
396
+ /** Exit code that makes launchd KeepAlive / systemd Restart=always relaunch factoryd. */
397
+ export const AUTO_UPDATE_RESTART_EXIT_CODE = 75;
398
+ /** `factory self-update` exit code for "a run is active, refusing to apply". */
399
+ export const AUTO_UPDATE_BUSY_EXIT_CODE = 3;
400
+ /** True only for an error-free, newer candidate; prereleases are ignored in stable mode. */
401
+ export function isUpdateCandidate(check, mode, current) {
402
+ if (check.error !== null || !check.updateAvailable)
403
+ return false;
404
+ if (typeof check.candidate !== 'string' || check.candidate === '')
405
+ return false;
406
+ if (check.candidate === current)
407
+ return false;
408
+ if (mode === 'stable' && check.candidate.includes('-'))
409
+ return false;
410
+ return true;
411
+ }
412
+ function errorMessage(err) {
413
+ return err instanceof Error ? err.message : String(err);
414
+ }
415
+ /** One check → drain → apply pass. Never throws; never applies while a run is active. */
416
+ export async function runAutoUpdateCycle(config, deps) {
417
+ const { mode, drainTimeoutMinutes } = config.autoUpdate;
418
+ if (mode === 'manual')
419
+ return 'manual';
420
+ const iso = () => new Date(deps.now()).toISOString();
421
+ const safeWrite = (state) => {
422
+ try {
423
+ writeUpdateState(deps.stateFile, state);
424
+ }
425
+ catch (err) {
426
+ deps.log(`could not write ${deps.stateFile}: ${errorMessage(err)}`);
427
+ }
428
+ };
429
+ let check;
430
+ try {
431
+ check = await deps.check();
432
+ }
433
+ catch (err) {
434
+ check = { candidate: null, updateAvailable: false, error: errorMessage(err) };
435
+ }
436
+ if (readUpdateState(deps.stateFile) === null)
437
+ safeWrite(initialUpdateState(config, null));
438
+ const eligible = isUpdateCandidate(check, mode, config.install.version);
439
+ const candidate = eligible ? check.candidate : null;
440
+ try {
441
+ recordUpdateCheck(deps.stateFile, { at: iso(), available: candidate }, deps.log);
442
+ }
443
+ catch (err) {
444
+ deps.log(`could not write ${deps.stateFile}: ${errorMessage(err)}`);
445
+ }
446
+ if (check.error !== null) {
447
+ deps.log(`update check failed: ${check.error}`);
448
+ return 'check-error';
449
+ }
450
+ if (candidate === null)
451
+ return 'no-update';
452
+ const state = readUpdateState(deps.stateFile) ?? initialUpdateState(config, null);
453
+ const last = state.lastResult;
454
+ if (last?.version === candidate && (last.outcome === 'failed' || last.outcome === 'rolled-back')) {
455
+ deps.log(`update: skipping ${candidate} — previous attempt ${last.outcome}; waiting for a newer release`);
456
+ return 'skipped-failed-version';
457
+ }
458
+ const finish = (result, extra = {}) => {
459
+ const latest = readUpdateState(deps.stateFile) ?? state;
460
+ safeWrite({
461
+ ...latest,
462
+ ...extra,
463
+ lastResult: { at: iso(), version: candidate, ...result },
464
+ draining: null,
465
+ });
466
+ };
467
+ let stopFiles = [];
468
+ try {
469
+ stopFiles = await deps.writeStops();
470
+ safeWrite({
471
+ ...(readUpdateState(deps.stateFile) ?? state),
472
+ draining: { since: iso(), target: candidate, stopFiles },
473
+ });
474
+ deps.log(`update: draining for ${candidate} (STOP set in ${stopFiles.length} repo(s))`);
475
+ const deadline = deps.now() + drainTimeoutMinutes * 60_000;
476
+ const pollMs = deps.drainPollMs ?? 30_000;
477
+ for (;;) {
478
+ const active = await deps.activeRuns();
479
+ if (active.length === 0)
480
+ break;
481
+ if (deps.now() >= deadline) {
482
+ const error = `drain timed out after ${drainTimeoutMinutes} min (active: ${active.join(', ')})`;
483
+ finish({ outcome: 'skipped', error });
484
+ deps.log(`update: ${error}; will retry next interval`);
485
+ return 'drain-timeout';
486
+ }
487
+ await deps.sleep(pollMs);
488
+ }
489
+ let res;
490
+ try {
491
+ res = await deps.apply(candidate);
492
+ }
493
+ catch (err) {
494
+ res = { code: 1, rolledBack: false, error: errorMessage(err) };
495
+ }
496
+ if (res.code === 0) {
497
+ finish({ outcome: 'updated' }, { available: null });
498
+ deps.log(`update: updated to ${candidate}; restarting`);
499
+ return 'updated';
500
+ }
501
+ if (res.code === AUTO_UPDATE_BUSY_EXIT_CODE) {
502
+ const error = 'apply refused: a run is active';
503
+ finish({ outcome: 'skipped', error });
504
+ deps.log(`update: ${error}; will retry next interval`);
505
+ return 'busy';
506
+ }
507
+ const outcome = res.rolledBack ? 'rolled-back' : 'failed';
508
+ const error = res.error ?? `exit ${res.code}`;
509
+ finish({ outcome, error });
510
+ deps.log(`update: ${candidate} ${outcome} (${error})`);
511
+ return 'failed';
512
+ }
513
+ finally {
514
+ try {
515
+ await deps.clearStops(stopFiles);
516
+ }
517
+ catch (err) {
518
+ deps.log(`update: could not clear STOP files: ${errorMessage(err)}`);
519
+ }
520
+ }
521
+ }
522
+ /** Sleeps the check interval, runs a cycle, and exits 75 after a successful update. */
523
+ export async function runAutoUpdateLoop(config, deps) {
524
+ if (config.autoUpdate.mode === 'manual')
525
+ return;
526
+ while (!deps.stopped?.()) {
527
+ await deps.sleep(config.autoUpdate.checkIntervalMinutes * 60_000);
528
+ if (deps.stopped?.())
529
+ return;
530
+ try {
531
+ const outcome = await runAutoUpdateCycle(config, deps);
532
+ if (outcome === 'updated') {
533
+ await deps.exit(AUTO_UPDATE_RESTART_EXIT_CODE);
534
+ return;
535
+ }
536
+ }
537
+ catch (err) {
538
+ deps.log(`update cycle failed: ${errorMessage(err)}`);
539
+ }
540
+ }
541
+ }
542
+ /** Removes STOP files a previous (crashed) drain left behind; returns the paths removed. */
543
+ export function recoverStaleDrain(previous, removeStop) {
544
+ const removed = [];
545
+ for (const file of previous?.draining?.stopFiles ?? []) {
546
+ try {
547
+ if (removeStop(file))
548
+ removed.push(file);
549
+ }
550
+ catch {
551
+ // best effort
552
+ }
553
+ }
554
+ return removed;
555
+ }
556
+ function parseLastJsonLine(stdout) {
557
+ const line = lastLines(stdout.trimEnd(), 1)[0];
558
+ if (!line)
559
+ return null;
560
+ try {
561
+ const parsed = JSON.parse(line);
562
+ return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)
563
+ ? parsed
564
+ : null;
565
+ }
566
+ catch {
567
+ return null;
568
+ }
569
+ }
570
+ function lastStderrLine(stderr) {
571
+ return lastLines(stderr.trimEnd(), 1)[0] || null;
572
+ }
573
+ /** Production deps: checks via the injected `check`, applies via `factory self-update --to`, detects activity from the run runtime and run locks. */
574
+ export function createAutoUpdateDeps(opts) {
575
+ const exec = defaultExec();
576
+ const attached = async () => listRepos(await loadRegistry(opts.registryFile)).filter((e) => e.state !== 'detached');
577
+ return {
578
+ stateFile: opts.stateFile,
579
+ check: opts.check,
580
+ async apply(version) {
581
+ const r = await exec(process.execPath, [opts.cliEntrypoint, 'self-update', '--to', version, '--json']);
582
+ const json = parseLastJsonLine(r.stdout);
583
+ const error = (typeof json?.error === 'string' && json.error !== '' ? json.error : null) ??
584
+ lastStderrLine(r.stderr) ??
585
+ (r.code === 0 ? null : `exit ${r.code}`);
586
+ return {
587
+ code: r.code,
588
+ rolledBack: json?.rolledBack === true || json?.outcome === 'rolled-back',
589
+ error,
590
+ };
591
+ },
592
+ async activeRuns() {
593
+ const active = opts.runRuntime
594
+ .list()
595
+ .filter((r) => r.status === 'queued' || r.status === 'running')
596
+ .map((r) => `daemon:${r.repo}#${r.issue}`);
597
+ for (const e of await attached()) {
598
+ const holder = readRunLockHolder(getFactoryPaths(e.path, e.stateRoot).runLock);
599
+ if (holder && defaultIsPidAlive(holder.pid))
600
+ active.push(e.slug);
601
+ }
602
+ return active;
603
+ },
604
+ async writeStops() {
605
+ const created = [];
606
+ for (const e of await attached()) {
607
+ const stop = getFactoryPaths(e.path, e.stateRoot).stop;
608
+ try {
609
+ mkdirSync(dirname(stop), { recursive: true });
610
+ writeFileSync(stop, '', { flag: 'wx' });
611
+ created.push(stop);
612
+ }
613
+ catch (err) {
614
+ if (err.code !== 'EEXIST') {
615
+ opts.log(`update: could not write STOP for ${e.slug}: ${errorMessage(err)}`);
616
+ }
617
+ }
618
+ }
619
+ return created;
620
+ },
621
+ async clearStops(files) {
622
+ for (const f of files) {
623
+ try {
624
+ unlinkSync(f);
625
+ }
626
+ catch (err) {
627
+ if (err.code !== 'ENOENT')
628
+ throw err;
629
+ }
630
+ }
631
+ },
632
+ now: Date.now,
633
+ sleep: (ms) => new Promise((res) => {
634
+ setTimeout(res, ms).unref();
635
+ }),
636
+ log: opts.log,
637
+ exit: opts.exit,
638
+ };
639
+ }
282
640
  //# sourceMappingURL=daemon.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"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"}
@@ -13,11 +13,22 @@ export interface DoctorEnvProbes {
13
13
  /** Run a command, return trimmed stdout, or null if it fails. */
14
14
  tryExec: (cmd: string) => string | null;
15
15
  pathExists: (p: string) => boolean;
16
+ /** Host platform; defaults to process.platform. */
17
+ platform?: NodeJS.Platform;
16
18
  distFreshness?: () => {
17
19
  fresh: boolean;
18
20
  detail: string;
19
21
  };
20
22
  }
23
+ export declare const NOT_IN_REPO_HINT = "cd into your repo, then run factory doctor again";
24
+ export declare function hasSandboxRuntime(platform: NodeJS.Platform, commandAvailable: (cmd: string) => boolean): boolean;
25
+ /** Reason the sandboxed claude auth probe is skipped before a sandbox policy is resolved,
26
+ * or null when cmdDoctor should resolve the policy as before (#2383). */
27
+ export declare function sandboxAuthSkipDetail(opts: {
28
+ runtimeAvailable: boolean;
29
+ hostOk: boolean;
30
+ inRepo: boolean;
31
+ }): string | null;
21
32
  export declare function runDoctorChecks(probes: DoctorEnvProbes): DoctorCheck[];
22
33
  export declare function formatDoctorChecks(checks: DoctorCheck[]): string;
23
34
  export declare function doctorFailed(checks: DoctorCheck[]): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,23 @@
1
1
  // packages/cli/src/cli/doctor.ts — `factory doctor` environment preflight
2
2
  import { resolve } from 'node:path';
3
+ import { detectSandboxRuntime } from '@on-par/factory-core';
4
+ import { MIN_NODE_MAJOR } from '../node-version.js';
3
5
  import { CLAUDE_CODE_URL, GITHUB_TOKENS_URL } from './first-run.js';
6
+ export const NOT_IN_REPO_HINT = 'cd into your repo, then run factory doctor again';
7
+ export function hasSandboxRuntime(platform, commandAvailable) {
8
+ return detectSandboxRuntime(platform, commandAvailable) !== 'none';
9
+ }
10
+ /** Reason the sandboxed claude auth probe is skipped before a sandbox policy is resolved,
11
+ * or null when cmdDoctor should resolve the policy as before (#2383). */
12
+ export function sandboxAuthSkipDetail(opts) {
13
+ if (!opts.runtimeAvailable)
14
+ return 'skipped — no sandbox runtime (sandbox-exec/firejail) on this host';
15
+ if (!opts.hostOk)
16
+ return 'skipped — host claude auth was not verified';
17
+ if (!opts.inRepo)
18
+ return `skipped — not inside a git repository; ${NOT_IN_REPO_HINT}`;
19
+ return null;
20
+ }
4
21
  export function runDoctorChecks(probes) {
5
22
  const { commandAvailable, envPresent, tryExec, pathExists, distFreshness } = probes;
6
23
  const checks = [];
@@ -10,9 +27,24 @@ export function runDoctorChecks(probes) {
10
27
  : {
11
28
  name: 'git repository',
12
29
  ok: false,
13
- detail: 'not inside a git repository',
14
- fix: 'run factory inside a git repo (`git init` or clone one)',
30
+ optional: true,
31
+ detail: 'not inside a git repository — repo checks skipped',
32
+ fix: NOT_IN_REPO_HINT,
15
33
  });
34
+ const userName = tryExec('git config user.name');
35
+ const userEmail = tryExec('git config user.email');
36
+ if (userName && userEmail) {
37
+ checks.push({ name: 'git identity', ok: true, detail: `${userName} <${userEmail}>` });
38
+ }
39
+ else {
40
+ const missing = [!userName && 'user.name', !userEmail && 'user.email'].filter(Boolean).join(' and ');
41
+ checks.push({
42
+ name: 'git identity',
43
+ ok: false,
44
+ detail: `${missing} not set`,
45
+ fix: 'git config --global user.name "Your Name" && git config --global user.email you@example.com',
46
+ });
47
+ }
16
48
  checks.push(commandAvailable('claude')
17
49
  ? { name: 'claude CLI', ok: true, detail: 'found on PATH' }
18
50
  : {
@@ -66,14 +98,14 @@ export function runDoctorChecks(probes) {
66
98
  name: 'npm',
67
99
  ok: false,
68
100
  detail: 'not found on PATH',
69
- fix: 'install Node.js >= 20 (which ships npm): https://nodejs.org',
101
+ fix: `install Node.js >= ${MIN_NODE_MAJOR} (which ships npm): https://nodejs.org`,
70
102
  });
71
103
  if (repoRoot === null) {
72
104
  checks.push({
73
105
  name: 'git worktree clean',
74
106
  ok: false,
75
107
  optional: true,
76
- detail: 'skipped — not a git repository',
108
+ detail: `skipped — not a git repository; ${NOT_IN_REPO_HINT}`,
77
109
  });
78
110
  }
79
111
  else if (tryExec('git status --porcelain') === '') {
@@ -88,8 +120,16 @@ export function runDoctorChecks(probes) {
88
120
  fix: 'commit or stash changes before running the factory',
89
121
  });
90
122
  }
123
+ const sandboxRuntime = detectSandboxRuntime(probes.platform ?? process.platform, commandAvailable);
91
124
  checks.push(commandAvailable('codex')
92
- ? { name: 'codex sandbox', ok: true, optional: true, detail: 'codex CLI found (sandboxed builds available)' }
125
+ ? {
126
+ name: 'codex sandbox',
127
+ ok: true,
128
+ optional: true,
129
+ detail: sandboxRuntime === 'none'
130
+ ? 'codex CLI found — no sandbox runtime, so codex runs with danger-full-access'
131
+ : 'codex CLI found (sandboxed builds available)',
132
+ }
93
133
  : {
94
134
  name: 'codex sandbox',
95
135
  ok: false,
@@ -97,12 +137,21 @@ export function runDoctorChecks(probes) {
97
137
  detail: 'codex CLI not found — codex build routes unavailable',
98
138
  fix: 'install the codex CLI, or rely on claude routes',
99
139
  });
140
+ checks.push(sandboxRuntime !== 'none'
141
+ ? { name: 'sandbox runtime', ok: true, optional: true, detail: `${sandboxRuntime} found` }
142
+ : {
143
+ name: 'sandbox runtime',
144
+ ok: false,
145
+ optional: true,
146
+ detail: 'no sandbox-exec (macOS) or firejail (Linux) on PATH — agents will run uncontained',
147
+ fix: 'install firejail (Linux) or run on macOS; see README Safety',
148
+ });
100
149
  if (repoRoot === null) {
101
150
  checks.push({
102
151
  name: '.factory initialized',
103
152
  ok: false,
104
153
  optional: true,
105
- detail: 'skipped — not a git repository',
154
+ detail: `skipped — not a git repository; ${NOT_IN_REPO_HINT}`,
106
155
  });
107
156
  }
108
157
  else if (pathExists(resolve(repoRoot, '.factory'))) {