@on-par/factory-cli 0.0.0-stage → 0.9.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.
Files changed (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -2
  3. package/dist/cli/admission.d.ts +17 -0
  4. package/dist/cli/admission.d.ts.map +1 -0
  5. package/dist/cli/admission.js +37 -0
  6. package/dist/cli/admission.js.map +1 -0
  7. package/dist/cli/base-hold.d.ts +63 -0
  8. package/dist/cli/base-hold.d.ts.map +1 -0
  9. package/dist/cli/base-hold.js +122 -0
  10. package/dist/cli/base-hold.js.map +1 -0
  11. package/dist/cli/branch-prefix.d.ts +8 -0
  12. package/dist/cli/branch-prefix.d.ts.map +1 -0
  13. package/dist/cli/branch-prefix.js +16 -0
  14. package/dist/cli/branch-prefix.js.map +1 -0
  15. package/dist/cli/classifier-backtest.d.ts +50 -0
  16. package/dist/cli/classifier-backtest.d.ts.map +1 -0
  17. package/dist/cli/classifier-backtest.js +112 -0
  18. package/dist/cli/classifier-backtest.js.map +1 -0
  19. package/dist/cli/cost-json.d.ts +37 -0
  20. package/dist/cli/cost-json.d.ts.map +1 -0
  21. package/dist/cli/cost-json.js +48 -0
  22. package/dist/cli/cost-json.js.map +1 -0
  23. package/dist/cli/daemon.d.ts +162 -0
  24. package/dist/cli/daemon.d.ts.map +1 -0
  25. package/dist/cli/daemon.js +393 -0
  26. package/dist/cli/daemon.js.map +1 -0
  27. package/dist/cli/doctor.d.ts +127 -0
  28. package/dist/cli/doctor.d.ts.map +1 -0
  29. package/dist/cli/doctor.js +400 -0
  30. package/dist/cli/doctor.js.map +1 -0
  31. package/dist/cli/feedback.d.ts +74 -0
  32. package/dist/cli/feedback.d.ts.map +1 -0
  33. package/dist/cli/feedback.js +180 -0
  34. package/dist/cli/feedback.js.map +1 -0
  35. package/dist/cli/filing.d.ts +22 -0
  36. package/dist/cli/filing.d.ts.map +1 -0
  37. package/dist/cli/filing.js +53 -0
  38. package/dist/cli/filing.js.map +1 -0
  39. package/dist/cli/first-run.d.ts +9 -0
  40. package/dist/cli/first-run.d.ts.map +1 -0
  41. package/dist/cli/first-run.js +34 -0
  42. package/dist/cli/first-run.js.map +1 -0
  43. package/dist/cli/help-groups.d.ts +17 -0
  44. package/dist/cli/help-groups.d.ts.map +1 -0
  45. package/dist/cli/help-groups.js +59 -0
  46. package/dist/cli/help-groups.js.map +1 -0
  47. package/dist/cli/hosted-queue.d.ts +45 -0
  48. package/dist/cli/hosted-queue.d.ts.map +1 -0
  49. package/dist/cli/hosted-queue.js +74 -0
  50. package/dist/cli/hosted-queue.js.map +1 -0
  51. package/dist/cli/hosted-runner.d.ts +44 -0
  52. package/dist/cli/hosted-runner.d.ts.map +1 -0
  53. package/dist/cli/hosted-runner.js +68 -0
  54. package/dist/cli/hosted-runner.js.map +1 -0
  55. package/dist/cli/hosted.d.ts +38 -0
  56. package/dist/cli/hosted.d.ts.map +1 -0
  57. package/dist/cli/hosted.js +82 -0
  58. package/dist/cli/hosted.js.map +1 -0
  59. package/dist/cli/index.d.ts +674 -0
  60. package/dist/cli/index.d.ts.map +1 -0
  61. package/dist/cli/index.js +4916 -0
  62. package/dist/cli/index.js.map +1 -0
  63. package/dist/cli/init-files.d.ts +8 -0
  64. package/dist/cli/init-files.d.ts.map +1 -0
  65. package/dist/cli/init-files.js +45 -0
  66. package/dist/cli/init-files.js.map +1 -0
  67. package/dist/cli/logs.d.ts +27 -0
  68. package/dist/cli/logs.d.ts.map +1 -0
  69. package/dist/cli/logs.js +52 -0
  70. package/dist/cli/logs.js.map +1 -0
  71. package/dist/cli/merge-scope.d.ts +7 -0
  72. package/dist/cli/merge-scope.d.ts.map +1 -0
  73. package/dist/cli/merge-scope.js +14 -0
  74. package/dist/cli/merge-scope.js.map +1 -0
  75. package/dist/cli/octokit.d.ts +43 -0
  76. package/dist/cli/octokit.d.ts.map +1 -0
  77. package/dist/cli/octokit.js +87 -0
  78. package/dist/cli/octokit.js.map +1 -0
  79. package/dist/cli/queue-add-json.d.ts +25 -0
  80. package/dist/cli/queue-add-json.d.ts.map +1 -0
  81. package/dist/cli/queue-add-json.js +24 -0
  82. package/dist/cli/queue-add-json.js.map +1 -0
  83. package/dist/cli/queue-clear.d.ts +15 -0
  84. package/dist/cli/queue-clear.d.ts.map +1 -0
  85. package/dist/cli/queue-clear.js +58 -0
  86. package/dist/cli/queue-clear.js.map +1 -0
  87. package/dist/cli/queue-list.d.ts +24 -0
  88. package/dist/cli/queue-list.d.ts.map +1 -0
  89. package/dist/cli/queue-list.js +25 -0
  90. package/dist/cli/queue-list.js.map +1 -0
  91. package/dist/cli/ready-check.d.ts +98 -0
  92. package/dist/cli/ready-check.d.ts.map +1 -0
  93. package/dist/cli/ready-check.js +169 -0
  94. package/dist/cli/ready-check.js.map +1 -0
  95. package/dist/cli/reset.d.ts +40 -0
  96. package/dist/cli/reset.d.ts.map +1 -0
  97. package/dist/cli/reset.js +215 -0
  98. package/dist/cli/reset.js.map +1 -0
  99. package/dist/cli/run-children.d.ts +24 -0
  100. package/dist/cli/run-children.d.ts.map +1 -0
  101. package/dist/cli/run-children.js +73 -0
  102. package/dist/cli/run-children.js.map +1 -0
  103. package/dist/cli/run-flags.d.ts +14 -0
  104. package/dist/cli/run-flags.d.ts.map +1 -0
  105. package/dist/cli/run-flags.js +43 -0
  106. package/dist/cli/run-flags.js.map +1 -0
  107. package/dist/cli/runs-diffstat.d.ts +43 -0
  108. package/dist/cli/runs-diffstat.d.ts.map +1 -0
  109. package/dist/cli/runs-diffstat.js +91 -0
  110. package/dist/cli/runs-diffstat.js.map +1 -0
  111. package/dist/cli/runs.d.ts +36 -0
  112. package/dist/cli/runs.d.ts.map +1 -0
  113. package/dist/cli/runs.js +102 -0
  114. package/dist/cli/runs.js.map +1 -0
  115. package/dist/cli/self-update.d.ts +68 -0
  116. package/dist/cli/self-update.d.ts.map +1 -0
  117. package/dist/cli/self-update.js +167 -0
  118. package/dist/cli/self-update.js.map +1 -0
  119. package/dist/cli/staleness.d.ts +30 -0
  120. package/dist/cli/staleness.d.ts.map +1 -0
  121. package/dist/cli/staleness.js +132 -0
  122. package/dist/cli/staleness.js.map +1 -0
  123. package/dist/cli/state-root.d.ts +5 -0
  124. package/dist/cli/state-root.d.ts.map +1 -0
  125. package/dist/cli/state-root.js +12 -0
  126. package/dist/cli/state-root.js.map +1 -0
  127. package/dist/cli/status-json.d.ts +49 -0
  128. package/dist/cli/status-json.d.ts.map +1 -0
  129. package/dist/cli/status-json.js +23 -0
  130. package/dist/cli/status-json.js.map +1 -0
  131. package/dist/cli/stop-resume-json.d.ts +18 -0
  132. package/dist/cli/stop-resume-json.d.ts.map +1 -0
  133. package/dist/cli/stop-resume-json.js +10 -0
  134. package/dist/cli/stop-resume-json.js.map +1 -0
  135. package/dist/cli/stop-sentinel.d.ts +23 -0
  136. package/dist/cli/stop-sentinel.d.ts.map +1 -0
  137. package/dist/cli/stop-sentinel.js +61 -0
  138. package/dist/cli/stop-sentinel.js.map +1 -0
  139. package/dist/cli/sweep-heartbeat.d.ts +33 -0
  140. package/dist/cli/sweep-heartbeat.d.ts.map +1 -0
  141. package/dist/cli/sweep-heartbeat.js +65 -0
  142. package/dist/cli/sweep-heartbeat.js.map +1 -0
  143. package/dist/cli/unpark.d.ts +28 -0
  144. package/dist/cli/unpark.d.ts.map +1 -0
  145. package/dist/cli/unpark.js +68 -0
  146. package/dist/cli/unpark.js.map +1 -0
  147. package/dist/cli/update-state.d.ts +44 -0
  148. package/dist/cli/update-state.d.ts.map +1 -0
  149. package/dist/cli/update-state.js +154 -0
  150. package/dist/cli/update-state.js.map +1 -0
  151. package/dist/cli/usage-json.d.ts +20 -0
  152. package/dist/cli/usage-json.d.ts.map +1 -0
  153. package/dist/cli/usage-json.js +36 -0
  154. package/dist/cli/usage-json.js.map +1 -0
  155. package/dist/cli.d.ts +3 -0
  156. package/dist/cli.d.ts.map +1 -0
  157. package/dist/cli.js +6 -0
  158. package/dist/cli.js.map +1 -0
  159. package/dist/entry.d.ts +6 -0
  160. package/dist/entry.d.ts.map +1 -0
  161. package/dist/entry.js +13 -0
  162. package/dist/entry.js.map +1 -0
  163. package/package.json +56 -4
@@ -0,0 +1,127 @@
1
+ export interface DoctorCheck {
2
+ name: string;
3
+ ok: boolean;
4
+ detail: string;
5
+ /** One-line fix suggestion; only meaningful when ok=false. */
6
+ fix?: string;
7
+ /** Optional checks never fail the doctor exit code. */
8
+ optional?: boolean;
9
+ }
10
+ export interface DoctorEnvProbes {
11
+ commandAvailable: (cmd: string) => boolean;
12
+ envPresent: (key: string) => boolean;
13
+ /** Run a command, return trimmed stdout, or null if it fails. */
14
+ tryExec: (cmd: string) => string | null;
15
+ pathExists: (p: string) => boolean;
16
+ distFreshness?: () => {
17
+ fresh: boolean;
18
+ detail: string;
19
+ };
20
+ }
21
+ export declare function runDoctorChecks(probes: DoctorEnvProbes): DoctorCheck[];
22
+ export declare function formatDoctorChecks(checks: DoctorCheck[]): string;
23
+ export declare function doctorFailed(checks: DoctorCheck[]): boolean;
24
+ /** Which Claude profile a keychain probe checked: the keychain service name and, for a
25
+ * non-default profile, the CLAUDE_CONFIG_DIR it belongs to. Absent = default profile. */
26
+ export interface KeychainProbeProfile {
27
+ service?: string;
28
+ configDir?: string;
29
+ }
30
+ /** Result of the macOS login-keychain probe for the Claude Code credential entry (#1014). */
31
+ export type KeychainProbeStatus = {
32
+ status: 'skipped';
33
+ detail: string;
34
+ } | ({
35
+ status: 'readable';
36
+ } & KeychainProbeProfile) | ({
37
+ status: 'unreadable';
38
+ inTmux: boolean;
39
+ } & KeychainProbeProfile);
40
+ export declare function claudeKeychainCheck(probe: KeychainProbeStatus): DoctorCheck;
41
+ /** Non-null when `factory run` must fail fast instead of claiming issues (#1014).
42
+ * Only the tmux-without-keychain differential is certain enough to abort a run on. */
43
+ export declare function keychainPreflightError(probe: KeychainProbeStatus): string | null;
44
+ /** Outcome of one `claude -p` probe: it succeeded, it failed, or it was not run. */
45
+ export type ClaudeAuthProbe = 'ok' | 'failed' | 'skipped';
46
+ export interface ClaudeAuthProbeResult {
47
+ host: ClaudeAuthProbe;
48
+ sandboxed: ClaudeAuthProbe;
49
+ hostDetail: string;
50
+ sandboxDetail: string;
51
+ }
52
+ /** Reports host and sandboxed Claude auth as two separate checks (#1008). Only the
53
+ * differential — host ok, sandboxed failed — is a hard doctor failure; that is the one
54
+ * combination that proves the sandbox, not the credentials, is at fault. */
55
+ export declare function sandboxClaudeAuthChecks(result: ClaudeAuthProbeResult): DoctorCheck[];
56
+ export interface LeaseHealthRow {
57
+ worktreeId: string;
58
+ branch: string;
59
+ port: number;
60
+ pid: number;
61
+ alive: boolean;
62
+ reason?: 'dead-pid' | 'missing-worktree';
63
+ portSquatted?: boolean;
64
+ }
65
+ export declare function leaseChecks(rows: LeaseHealthRow[]): DoctorCheck[];
66
+ export interface EventLogIntegrity {
67
+ total: number;
68
+ unparseable: number;
69
+ }
70
+ export declare function analyzeEventLog(content: string): EventLogIntegrity;
71
+ export declare function eventLogCheck(integrity: EventLogIntegrity | null): DoctorCheck;
72
+ export interface ReapRow {
73
+ name: string;
74
+ removed: boolean;
75
+ detail: string;
76
+ }
77
+ export declare function orphanContainerChecks(names: readonly string[]): DoctorCheck[];
78
+ export declare function orphanMicroVmChecks(names: readonly string[]): DoctorCheck[];
79
+ export declare function formatContainerReconcileReport(reaped: ReapRow[]): string;
80
+ export declare function formatMicroVmReconcileReport(reaped: ReapRow[]): string;
81
+ export declare function formatReconcileReport(reaped: Array<{
82
+ lease: {
83
+ worktreeId: string;
84
+ port: number;
85
+ };
86
+ reason: string;
87
+ }>): string;
88
+ /** One worktree the reconcile pass removed. Structurally the subset of core's `GcCandidate`
89
+ * that the report renders — kept local so `doctor.ts` stays dependency-free and unit-testable. */
90
+ export interface ReconciledWorktree {
91
+ path: string;
92
+ branch: string | null;
93
+ reason: string;
94
+ branchDeleted: boolean;
95
+ }
96
+ export declare function formatWorktreeReconcileReport(removed: ReconciledWorktree[]): string;
97
+ /** One claim the reconcile pass put back in the queue. Structurally the subset of core's
98
+ * `StaleClaimRelease` that the report renders — kept local so `doctor.ts` stays
99
+ * dependency-free and unit-testable. */
100
+ export interface ReleasedClaim {
101
+ issue: number;
102
+ expiresAt: number;
103
+ released: boolean;
104
+ detail?: string;
105
+ }
106
+ export declare function formatClaimReconcileReport(released: ReleasedClaim[]): string;
107
+ /** One green-and-ready PR nobody merged. Structurally the subset of core's `UnmergedGreenPr`
108
+ * the report renders — kept local so `doctor.ts` stays dependency-free and unit-testable. */
109
+ export interface UnmergedGreenPrRow {
110
+ number: number;
111
+ branch: string;
112
+ issue: number | null;
113
+ ageHours: number;
114
+ }
115
+ /** Outcome of the green-PR scan: it ran, it was skipped (no repo/token), or it failed. */
116
+ export type GreenPrScanResult = {
117
+ status: 'ok';
118
+ rows: UnmergedGreenPrRow[];
119
+ } | {
120
+ status: 'skipped';
121
+ detail: string;
122
+ } | {
123
+ status: 'failed';
124
+ detail: string;
125
+ };
126
+ export declare function unmergedGreenPrChecks(result: GreenPrScanResult): DoctorCheck[];
127
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,400 @@
1
+ // packages/cli/src/cli/doctor.ts — `factory doctor` environment preflight
2
+ import { resolve } from 'node:path';
3
+ import { CLAUDE_CODE_URL, GITHUB_TOKENS_URL } from './first-run.js';
4
+ export function runDoctorChecks(probes) {
5
+ const { commandAvailable, envPresent, tryExec, pathExists, distFreshness } = probes;
6
+ const checks = [];
7
+ const repoRoot = tryExec('git rev-parse --show-toplevel');
8
+ checks.push(repoRoot !== null
9
+ ? { name: 'git repository', ok: true, detail: repoRoot }
10
+ : {
11
+ name: 'git repository',
12
+ ok: false,
13
+ detail: 'not inside a git repository',
14
+ fix: 'run factory inside a git repo (`git init` or clone one)',
15
+ });
16
+ checks.push(commandAvailable('claude')
17
+ ? { name: 'claude CLI', ok: true, detail: 'found on PATH' }
18
+ : {
19
+ name: 'claude CLI',
20
+ ok: false,
21
+ detail: 'not found on PATH',
22
+ fix: `install Claude Code first: ${CLAUDE_CODE_URL}`,
23
+ });
24
+ if (!commandAvailable('gh')) {
25
+ checks.push({
26
+ name: 'gh auth',
27
+ ok: false,
28
+ detail: 'gh CLI not found on PATH',
29
+ fix: 'install GitHub CLI and run `gh auth login`',
30
+ });
31
+ }
32
+ else if (tryExec('gh auth status') === null) {
33
+ checks.push({
34
+ name: 'gh auth',
35
+ ok: false,
36
+ detail: 'gh is not authenticated',
37
+ fix: 'install GitHub CLI and run `gh auth login`',
38
+ });
39
+ }
40
+ else {
41
+ checks.push({ name: 'gh auth', ok: true, detail: 'authenticated' });
42
+ }
43
+ if (envPresent('GITHUB_TOKEN')) {
44
+ checks.push({ name: 'GitHub token', ok: true, detail: 'GITHUB_TOKEN set' });
45
+ }
46
+ else if (envPresent('GH_TOKEN')) {
47
+ checks.push({ name: 'GitHub token', ok: true, detail: 'GH_TOKEN set' });
48
+ }
49
+ else {
50
+ const token = tryExec('gh auth token');
51
+ if (token) {
52
+ checks.push({ name: 'GitHub token', ok: true, detail: 'using gh auth token' });
53
+ }
54
+ else {
55
+ checks.push({
56
+ name: 'GitHub token',
57
+ ok: false,
58
+ detail: 'no GITHUB_TOKEN, GH_TOKEN, or gh auth token',
59
+ fix: `create a token at ${GITHUB_TOKENS_URL} and export it`,
60
+ });
61
+ }
62
+ }
63
+ checks.push(commandAvailable('npm')
64
+ ? { name: 'npm', ok: true, detail: 'found on PATH' }
65
+ : {
66
+ name: 'npm',
67
+ ok: false,
68
+ detail: 'not found on PATH',
69
+ fix: 'install Node.js >= 20 (which ships npm): https://nodejs.org',
70
+ });
71
+ if (repoRoot === null) {
72
+ checks.push({
73
+ name: 'git worktree clean',
74
+ ok: false,
75
+ optional: true,
76
+ detail: 'skipped — not a git repository',
77
+ });
78
+ }
79
+ else if (tryExec('git status --porcelain') === '') {
80
+ checks.push({ name: 'git worktree clean', ok: true, detail: 'clean' });
81
+ }
82
+ else {
83
+ checks.push({
84
+ name: 'git worktree clean',
85
+ ok: false,
86
+ optional: true,
87
+ detail: 'uncommitted changes present',
88
+ fix: 'commit or stash changes before running the factory',
89
+ });
90
+ }
91
+ checks.push(commandAvailable('codex')
92
+ ? { name: 'codex sandbox', ok: true, optional: true, detail: 'codex CLI found (sandboxed builds available)' }
93
+ : {
94
+ name: 'codex sandbox',
95
+ ok: false,
96
+ optional: true,
97
+ detail: 'codex CLI not found — codex build routes unavailable',
98
+ fix: 'install the codex CLI, or rely on claude routes',
99
+ });
100
+ if (repoRoot === null) {
101
+ checks.push({
102
+ name: '.factory initialized',
103
+ ok: false,
104
+ optional: true,
105
+ detail: 'skipped — not a git repository',
106
+ });
107
+ }
108
+ else if (pathExists(resolve(repoRoot, '.factory'))) {
109
+ checks.push({ name: '.factory initialized', ok: true, optional: true, detail: '.factory/ present' });
110
+ }
111
+ else {
112
+ checks.push({
113
+ name: '.factory initialized',
114
+ ok: false,
115
+ optional: true,
116
+ detail: '.factory/ missing',
117
+ fix: 'run `factory init`',
118
+ });
119
+ }
120
+ if (distFreshness) {
121
+ const { fresh, detail } = distFreshness();
122
+ checks.push(fresh
123
+ ? { name: 'compiled dist fresh', ok: true, detail }
124
+ : {
125
+ name: 'compiled dist fresh',
126
+ ok: false,
127
+ detail,
128
+ fix: "run 'npm run build' at the monorepo root",
129
+ });
130
+ }
131
+ return checks;
132
+ }
133
+ export function formatDoctorChecks(checks) {
134
+ const lines = ['== factory doctor =='];
135
+ let passed = 0;
136
+ let failed = 0;
137
+ let warnings = 0;
138
+ for (const check of checks) {
139
+ if (check.ok) {
140
+ passed++;
141
+ }
142
+ else if (check.optional) {
143
+ warnings++;
144
+ }
145
+ else {
146
+ failed++;
147
+ }
148
+ const icon = check.ok ? '✅' : '❌';
149
+ lines.push(` ${icon} ${check.name} — ${check.detail}`);
150
+ if (!check.ok && check.fix) {
151
+ lines.push(` fix: ${check.fix}`);
152
+ }
153
+ }
154
+ lines.push(`${passed} passed, ${failed} failed, ${warnings} warnings`);
155
+ lines.push('');
156
+ lines.push('Model reachability: factory models --doctor');
157
+ return lines.join('\n');
158
+ }
159
+ export function doctorFailed(checks) {
160
+ return checks.some((c) => !c.ok && !c.optional);
161
+ }
162
+ /** The keychain service Claude Code uses for the default profile (CLAUDE_CONFIG_DIR unset). */
163
+ const DEFAULT_KEYCHAIN_SERVICE = 'Claude Code-credentials';
164
+ function loginFix(profile) {
165
+ return profile.configDir ? `CLAUDE_CONFIG_DIR=${profile.configDir} claude` : '`claude`';
166
+ }
167
+ export function claudeKeychainCheck(probe) {
168
+ if (probe.status === 'skipped') {
169
+ return { name: 'claude keychain (macOS)', ok: true, optional: true, detail: probe.detail };
170
+ }
171
+ const service = probe.service ?? DEFAULT_KEYCHAIN_SERVICE;
172
+ const profile = probe.configDir ? ` (profile CLAUDE_CONFIG_DIR=${probe.configDir})` : '';
173
+ if (probe.status === 'readable') {
174
+ return {
175
+ name: 'claude keychain (macOS)',
176
+ ok: true,
177
+ detail: `login keychain entry '${service}'${profile} is readable in this context`,
178
+ };
179
+ }
180
+ if (probe.inTmux) {
181
+ return {
182
+ name: 'claude keychain (macOS)',
183
+ ok: false,
184
+ detail: `security find-generic-password -s '${service}'${profile} failed inside tmux (SecKeychainSearchCopyNext) — Claude OAuth refresh will fail with local_auth`,
185
+ fix: 'run the factory from a context with login-keychain access — a LaunchAgent in the gui domain (launchctl bootstrap gui/$(id -u) …) or a login Terminal, not a raw tmux pane — see docs/runbooks/macos-keychain-launchagent.md',
186
+ };
187
+ }
188
+ return {
189
+ name: 'claude keychain (macOS)',
190
+ ok: false,
191
+ optional: true,
192
+ detail: `security find-generic-password -s '${service}'${profile} failed — either never logged in, or this launch context cannot read the login keychain`,
193
+ fix: `run ${loginFix(probe)} and complete /login (or export ANTHROPIC_API_KEY); if already logged in, see docs/runbooks/macos-keychain-launchagent.md`,
194
+ };
195
+ }
196
+ /** Non-null when `factory run` must fail fast instead of claiming issues (#1014).
197
+ * Only the tmux-without-keychain differential is certain enough to abort a run on. */
198
+ export function keychainPreflightError(probe) {
199
+ if (probe.status !== 'unreadable' || !probe.inTmux)
200
+ return null;
201
+ const service = probe.service ?? DEFAULT_KEYCHAIN_SERVICE;
202
+ return `Claude Code credentials are not readable from this tmux session (security find-generic-password -s '${service}' failed / SecKeychainSearchCopyNext). OAuth refresh will fail and every claimed issue would spuriously park as local_auth. Launch the factory from a context with login-keychain access — a LaunchAgent in the gui domain (launchctl bootstrap gui/$(id -u) …) or a login Terminal — or export ANTHROPIC_API_KEY. See docs/runbooks/macos-keychain-launchagent.md.`;
203
+ }
204
+ const HOST_AUTH_CHECK = 'claude auth (host)';
205
+ const SANDBOX_AUTH_CHECK = 'claude auth (sandboxed)';
206
+ /** Reports host and sandboxed Claude auth as two separate checks (#1008). Only the
207
+ * differential — host ok, sandboxed failed — is a hard doctor failure; that is the one
208
+ * combination that proves the sandbox, not the credentials, is at fault. */
209
+ export function sandboxClaudeAuthChecks(result) {
210
+ const host = result.host === 'ok'
211
+ ? { name: HOST_AUTH_CHECK, ok: true, detail: result.hostDetail }
212
+ : result.host === 'skipped'
213
+ ? { name: HOST_AUTH_CHECK, ok: true, optional: true, detail: result.hostDetail }
214
+ : {
215
+ name: HOST_AUTH_CHECK,
216
+ ok: false,
217
+ detail: result.hostDetail,
218
+ fix: 'run `claude` and complete /login, then re-run `factory doctor`',
219
+ };
220
+ let sandboxed;
221
+ if (result.sandboxed === 'ok') {
222
+ sandboxed = { name: SANDBOX_AUTH_CHECK, ok: true, detail: result.sandboxDetail };
223
+ }
224
+ else if (result.sandboxed === 'skipped') {
225
+ sandboxed = { name: SANDBOX_AUTH_CHECK, ok: true, optional: true, detail: result.sandboxDetail };
226
+ }
227
+ else if (result.host === 'ok') {
228
+ sandboxed = {
229
+ name: SANDBOX_AUTH_CHECK,
230
+ ok: false,
231
+ detail: `${result.sandboxDetail} — host claude auth is healthy, so the sandbox is blocking Claude credential refresh`,
232
+ fix: 'check the sandbox write allowlist (~/.claude.json*, $CLAUDE_CONFIG_DIR when set, ~/Library/Keychains); as a stopgap run with FACTORY_SANDBOX=0',
233
+ };
234
+ }
235
+ else {
236
+ sandboxed = {
237
+ name: SANDBOX_AUTH_CHECK,
238
+ ok: false,
239
+ optional: true,
240
+ detail: `${result.sandboxDetail} — host claude auth is not healthy either, so this is not attributable to the sandbox`,
241
+ fix: 'fix host claude auth first, then re-run `factory doctor`',
242
+ };
243
+ }
244
+ return [host, sandboxed];
245
+ }
246
+ export function leaseChecks(rows) {
247
+ if (rows.length === 0) {
248
+ return [{ name: 'port leases', ok: true, optional: true, detail: 'no active leases' }];
249
+ }
250
+ return rows.map((row) => {
251
+ if (row.alive) {
252
+ return {
253
+ name: `port lease :${row.port}`,
254
+ ok: true,
255
+ optional: true,
256
+ detail: `${row.worktreeId} — port ${row.port}, pid ${row.pid}, live`,
257
+ };
258
+ }
259
+ const squatted = row.portSquatted ? '; port still in use by another process' : '';
260
+ return {
261
+ name: `port lease :${row.port}`,
262
+ ok: false,
263
+ optional: true,
264
+ detail: `${row.worktreeId} — port ${row.port}, pid ${row.pid}, stale (${row.reason})${squatted}`,
265
+ fix: 'run `factory doctor --reconcile` to reclaim stale leases',
266
+ };
267
+ });
268
+ }
269
+ export function analyzeEventLog(content) {
270
+ const lines = content.split('\n').filter((l) => l.trim() !== '');
271
+ let unparseable = 0;
272
+ for (const line of lines) {
273
+ try {
274
+ JSON.parse(line);
275
+ }
276
+ catch {
277
+ unparseable++;
278
+ }
279
+ }
280
+ return { total: lines.length, unparseable };
281
+ }
282
+ export function eventLogCheck(integrity) {
283
+ if (integrity === null) {
284
+ return { name: 'event log integrity', ok: true, optional: true, detail: 'no events.ndjson yet' };
285
+ }
286
+ if (integrity.total === 0) {
287
+ return { name: 'event log integrity', ok: true, optional: true, detail: 'events.ndjson is empty' };
288
+ }
289
+ const pct = ((integrity.unparseable / integrity.total) * 100).toFixed(1);
290
+ if (integrity.unparseable === 0) {
291
+ return {
292
+ name: 'event log integrity',
293
+ ok: true,
294
+ optional: true,
295
+ detail: `${integrity.total} lines, 0 unparseable (0.0%)`,
296
+ };
297
+ }
298
+ return {
299
+ name: 'event log integrity',
300
+ ok: false,
301
+ optional: true,
302
+ detail: `${integrity.unparseable} of ${integrity.total} lines unparseable (${pct}%)`,
303
+ fix: 'historical corruption from pre-lock parallel writes; appends are now serialized — metrics over this file carry this error bar',
304
+ };
305
+ }
306
+ export function orphanContainerChecks(names) {
307
+ if (names.length === 0) {
308
+ return [{ name: 'orphan containers', ok: true, detail: 'no orphan sf-job-*/factory.managed containers' }];
309
+ }
310
+ return names.map((name) => ({
311
+ name: `orphan container ${name}`,
312
+ ok: false,
313
+ detail: `${name} is stopped and not tied to any running job`,
314
+ fix: 'run `factory doctor --reconcile` to remove it and its anonymous volumes',
315
+ }));
316
+ }
317
+ export function orphanMicroVmChecks(names) {
318
+ if (names.length === 0) {
319
+ return [{ name: 'orphan sbx VMs', ok: true, detail: 'no orphan factory-* sbx VMs' }];
320
+ }
321
+ return names.map((name) => ({
322
+ name: `orphan sbx VM ${name}`,
323
+ ok: false,
324
+ detail: `${name} has no active lane holding its worktree`,
325
+ fix: 'run `factory doctor --reconcile` to remove it via `sbx rm --force`',
326
+ }));
327
+ }
328
+ export function formatContainerReconcileReport(reaped) {
329
+ if (reaped.length === 0)
330
+ return 'reconcile: no orphan containers';
331
+ return reaped
332
+ .map((r) => r.removed
333
+ ? `reconcile: removed container ${r.name}`
334
+ : `reconcile: failed to remove container ${r.name} — ${r.detail}`)
335
+ .join('\n');
336
+ }
337
+ export function formatMicroVmReconcileReport(reaped) {
338
+ if (reaped.length === 0)
339
+ return 'reconcile: no orphan sbx VMs';
340
+ return reaped
341
+ .map((r) => r.removed
342
+ ? `reconcile: removed sbx VM ${r.name} (sbx rm --force)`
343
+ : `reconcile: failed to remove sbx VM ${r.name} — ${r.detail}`)
344
+ .join('\n');
345
+ }
346
+ export function formatReconcileReport(reaped) {
347
+ if (reaped.length === 0)
348
+ return 'reconcile: no stale leases';
349
+ return reaped
350
+ .map((r) => `reconcile: freed port ${r.lease.port} (worktree ${r.lease.worktreeId}, reason ${r.reason})`)
351
+ .join('\n');
352
+ }
353
+ export function formatWorktreeReconcileReport(removed) {
354
+ if (removed.length === 0)
355
+ return 'reconcile: no dead-run worktrees';
356
+ return removed
357
+ .map((w) => {
358
+ const branchLabel = w.branch ?? 'detached';
359
+ const deleted = w.branchDeleted ? `, deleted branch ${w.branch}` : '';
360
+ return `reconcile: removed worktree ${w.path} (branch ${branchLabel}, reason ${w.reason})${deleted}`;
361
+ })
362
+ .join('\n');
363
+ }
364
+ export function formatClaimReconcileReport(released) {
365
+ if (released.length === 0)
366
+ return 'reconcile: no stale claims';
367
+ return released
368
+ .map((c) => c.released
369
+ ? `reconcile: released issue #${c.issue} back to factory:queued (lease expired at ${c.expiresAt})`
370
+ : `reconcile: failed to release issue #${c.issue} (lease expired at ${c.expiresAt}) — ${c.detail ?? 'unknown error'}`)
371
+ .join('\n');
372
+ }
373
+ const GREEN_PR_CHECK = 'green PRs awaiting merge';
374
+ export function unmergedGreenPrChecks(result) {
375
+ if (result.status === 'skipped') {
376
+ return [{ name: GREEN_PR_CHECK, ok: true, optional: true, detail: result.detail }];
377
+ }
378
+ if (result.status === 'failed') {
379
+ return [
380
+ {
381
+ name: GREEN_PR_CHECK,
382
+ ok: false,
383
+ optional: true,
384
+ detail: `scan failed — ${result.detail}`,
385
+ fix: 'check `gh auth status` and network access, then re-run `factory doctor`',
386
+ },
387
+ ];
388
+ }
389
+ if (result.rows.length === 0) {
390
+ return [{ name: GREEN_PR_CHECK, ok: true, optional: true, detail: 'no green-and-ready PRs awaiting merge' }];
391
+ }
392
+ return result.rows.map((row) => ({
393
+ name: `green PR #${row.number}`,
394
+ ok: false,
395
+ optional: true,
396
+ detail: `${row.issue === null ? 'owning issue unknown' : `issue #${row.issue}`} — green and ready on ${row.branch}, open ${row.ageHours}h, not merged`,
397
+ fix: `review and merge #${row.number} (or close it) — the factory never auto-merges an orphaned PR`,
398
+ }));
399
+ }
400
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import type { FileBugResult, FilingGitHubClient } from '@on-par/factory-core/internal';
2
+ import type { Octokit } from '@octokit/rest';
3
+ export declare const FEEDBACK_TRIAGE_LABEL = "factory:needs-triage";
4
+ export declare const FEEDBACK_LABELS: string[];
5
+ export interface ReviewFinding {
6
+ author: string;
7
+ kind: 'review' | 'comment';
8
+ body: string;
9
+ at: string;
10
+ state?: string;
11
+ path?: string;
12
+ line?: number;
13
+ url?: string;
14
+ }
15
+ interface PrRef {
16
+ owner: string;
17
+ repo: string;
18
+ number: number;
19
+ }
20
+ export interface FeedbackGitHubClient {
21
+ getPull(input: PrRef): Promise<{
22
+ headRef: string;
23
+ title: string;
24
+ url: string;
25
+ }>;
26
+ listReviews(input: PrRef): Promise<Array<{
27
+ user: string;
28
+ state: string;
29
+ body: string;
30
+ submittedAt: string;
31
+ url?: string;
32
+ }>>;
33
+ listReviewComments(input: PrRef): Promise<Array<{
34
+ user: string;
35
+ body: string;
36
+ path?: string;
37
+ line?: number;
38
+ createdAt: string;
39
+ url?: string;
40
+ }>>;
41
+ }
42
+ export interface FeedbackDeps {
43
+ github: FeedbackGitHubClient;
44
+ filing: FilingGitHubClient;
45
+ paths: {
46
+ events: string;
47
+ plans: string;
48
+ logs: string;
49
+ };
50
+ branchPrefix?: string;
51
+ now: () => Date;
52
+ host?: string;
53
+ internalRepo?: string;
54
+ }
55
+ export declare function parseFeedbackPrUrl(raw: string): {
56
+ owner: string;
57
+ repo: string;
58
+ number: number;
59
+ url: string;
60
+ };
61
+ export declare function collectReviewFindings(client: FeedbackGitHubClient, pr: PrRef): Promise<ReviewFinding[]>;
62
+ export declare function buildFeedbackTitle(findings: readonly ReviewFinding[], note?: string): string;
63
+ export declare function runFeedback(prUrl: string, opts: {
64
+ note?: string;
65
+ }, deps: FeedbackDeps): Promise<FileBugResult>;
66
+ export declare function createOctokitFeedbackClient(octokit: Octokit): FeedbackGitHubClient;
67
+ /** Wire the real GitHub clients and run-state paths into FeedbackDeps. */
68
+ export declare function buildFeedbackDeps(octokit: Octokit, paths: {
69
+ events: string;
70
+ plans: string;
71
+ logs: string;
72
+ }, branchPrefix: string, createFilingClient: (octokit: Octokit) => FilingGitHubClient): FeedbackDeps;
73
+ export {};
74
+ //# sourceMappingURL=feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/cli/feedback.ts"],"names":[],"mappings":"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"}