phantom-pr 0.1.0

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 (159) hide show
  1. package/LICENSE.md +0 -0
  2. package/README.md +143 -0
  3. package/dist/adapters/git.d.ts +28 -0
  4. package/dist/adapters/git.js +112 -0
  5. package/dist/adapters/git.js.map +1 -0
  6. package/dist/adapters/github.d.ts +71 -0
  7. package/dist/adapters/github.js +194 -0
  8. package/dist/adapters/github.js.map +1 -0
  9. package/dist/cli.d.ts +47 -0
  10. package/dist/cli.js +201 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands/context.d.ts +2 -0
  13. package/dist/commands/context.js +275 -0
  14. package/dist/commands/context.js.map +1 -0
  15. package/dist/commands/full.d.ts +13 -0
  16. package/dist/commands/full.js +590 -0
  17. package/dist/commands/full.js.map +1 -0
  18. package/dist/commands/gen_test.d.ts +2 -0
  19. package/dist/commands/gen_test.js +94 -0
  20. package/dist/commands/gen_test.js.map +1 -0
  21. package/dist/commands/index.d.ts +2 -0
  22. package/dist/commands/index.js +62 -0
  23. package/dist/commands/index.js.map +1 -0
  24. package/dist/commands/plan.d.ts +2 -0
  25. package/dist/commands/plan.js +107 -0
  26. package/dist/commands/plan.js.map +1 -0
  27. package/dist/commands/pr.d.ts +9 -0
  28. package/dist/commands/pr.js +400 -0
  29. package/dist/commands/pr.js.map +1 -0
  30. package/dist/commands/pr_list.d.ts +2 -0
  31. package/dist/commands/pr_list.js +158 -0
  32. package/dist/commands/pr_list.js.map +1 -0
  33. package/dist/commands/status.d.ts +6 -0
  34. package/dist/commands/status.js +132 -0
  35. package/dist/commands/status.js.map +1 -0
  36. package/dist/commands/test.d.ts +2 -0
  37. package/dist/commands/test.js +143 -0
  38. package/dist/commands/test.js.map +1 -0
  39. package/dist/commands/testability.d.ts +10 -0
  40. package/dist/commands/testability.js +406 -0
  41. package/dist/commands/testability.js.map +1 -0
  42. package/dist/commands/tests.d.ts +9 -0
  43. package/dist/commands/tests.js +801 -0
  44. package/dist/commands/tests.js.map +1 -0
  45. package/dist/core/code/exports.d.ts +5 -0
  46. package/dist/core/code/exports.js +68 -0
  47. package/dist/core/code/exports.js.map +1 -0
  48. package/dist/core/config/forkPolicy.d.ts +25 -0
  49. package/dist/core/config/forkPolicy.js +35 -0
  50. package/dist/core/config/forkPolicy.js.map +1 -0
  51. package/dist/core/config/load.d.ts +13 -0
  52. package/dist/core/config/load.js +35 -0
  53. package/dist/core/config/load.js.map +1 -0
  54. package/dist/core/config/types.d.ts +87 -0
  55. package/dist/core/config/types.js +2 -0
  56. package/dist/core/config/types.js.map +1 -0
  57. package/dist/core/config/validate.d.ts +4 -0
  58. package/dist/core/config/validate.js +246 -0
  59. package/dist/core/config/validate.js.map +1 -0
  60. package/dist/core/context/packer.d.ts +31 -0
  61. package/dist/core/context/packer.js +345 -0
  62. package/dist/core/context/packer.js.map +1 -0
  63. package/dist/core/context/types.d.ts +41 -0
  64. package/dist/core/context/types.js +2 -0
  65. package/dist/core/context/types.js.map +1 -0
  66. package/dist/core/converge/loop.d.ts +13 -0
  67. package/dist/core/converge/loop.js +35 -0
  68. package/dist/core/converge/loop.js.map +1 -0
  69. package/dist/core/converge/types.d.ts +15 -0
  70. package/dist/core/converge/types.js +2 -0
  71. package/dist/core/converge/types.js.map +1 -0
  72. package/dist/core/generator/llm/diffApply.d.ts +26 -0
  73. package/dist/core/generator/llm/diffApply.js +276 -0
  74. package/dist/core/generator/llm/diffApply.js.map +1 -0
  75. package/dist/core/generator/llm/qualityGate.d.ts +34 -0
  76. package/dist/core/generator/llm/qualityGate.js +324 -0
  77. package/dist/core/generator/llm/qualityGate.js.map +1 -0
  78. package/dist/core/generator/llmGenerator.d.ts +34 -0
  79. package/dist/core/generator/llmGenerator.js +245 -0
  80. package/dist/core/generator/llmGenerator.js.map +1 -0
  81. package/dist/core/generator/quality.d.ts +17 -0
  82. package/dist/core/generator/quality.js +31 -0
  83. package/dist/core/generator/quality.js.map +1 -0
  84. package/dist/core/generator/registry.d.ts +26 -0
  85. package/dist/core/generator/registry.js +29 -0
  86. package/dist/core/generator/registry.js.map +1 -0
  87. package/dist/core/generator/smokeGenerator.d.ts +11 -0
  88. package/dist/core/generator/smokeGenerator.js +27 -0
  89. package/dist/core/generator/smokeGenerator.js.map +1 -0
  90. package/dist/core/generator/types.d.ts +48 -0
  91. package/dist/core/generator/types.js +2 -0
  92. package/dist/core/generator/types.js.map +1 -0
  93. package/dist/core/index/indexer.d.ts +29 -0
  94. package/dist/core/index/indexer.js +167 -0
  95. package/dist/core/index/indexer.js.map +1 -0
  96. package/dist/core/jest/parser.d.ts +17 -0
  97. package/dist/core/jest/parser.js +90 -0
  98. package/dist/core/jest/parser.js.map +1 -0
  99. package/dist/core/llm/provider.d.ts +55 -0
  100. package/dist/core/llm/provider.js +105 -0
  101. package/dist/core/llm/provider.js.map +1 -0
  102. package/dist/core/logger.d.ts +19 -0
  103. package/dist/core/logger.js +44 -0
  104. package/dist/core/logger.js.map +1 -0
  105. package/dist/core/plan/planner.d.ts +16 -0
  106. package/dist/core/plan/planner.js +91 -0
  107. package/dist/core/plan/planner.js.map +1 -0
  108. package/dist/core/process/exec.d.ts +22 -0
  109. package/dist/core/process/exec.js +83 -0
  110. package/dist/core/process/exec.js.map +1 -0
  111. package/dist/core/redact.d.ts +6 -0
  112. package/dist/core/redact.js +49 -0
  113. package/dist/core/redact.js.map +1 -0
  114. package/dist/core/repo/boundary.d.ts +10 -0
  115. package/dist/core/repo/boundary.js +58 -0
  116. package/dist/core/repo/boundary.js.map +1 -0
  117. package/dist/core/stableJson.d.ts +1 -0
  118. package/dist/core/stableJson.js +32 -0
  119. package/dist/core/stableJson.js.map +1 -0
  120. package/dist/core/state/policy.d.ts +20 -0
  121. package/dist/core/state/policy.js +51 -0
  122. package/dist/core/state/policy.js.map +1 -0
  123. package/dist/core/state/state.d.ts +67 -0
  124. package/dist/core/state/state.js +142 -0
  125. package/dist/core/state/state.js.map +1 -0
  126. package/dist/core/state/storage.d.ts +9 -0
  127. package/dist/core/state/storage.js +25 -0
  128. package/dist/core/state/storage.js.map +1 -0
  129. package/dist/core/targets/resolve.d.ts +28 -0
  130. package/dist/core/targets/resolve.js +96 -0
  131. package/dist/core/targets/resolve.js.map +1 -0
  132. package/dist/core/testGenerator/conventions.d.ts +7 -0
  133. package/dist/core/testGenerator/conventions.js +29 -0
  134. package/dist/core/testGenerator/conventions.js.map +1 -0
  135. package/dist/core/testGenerator/generate.d.ts +35 -0
  136. package/dist/core/testGenerator/generate.js +127 -0
  137. package/dist/core/testGenerator/generate.js.map +1 -0
  138. package/dist/core/testRunner/hints.d.ts +12 -0
  139. package/dist/core/testRunner/hints.js +133 -0
  140. package/dist/core/testRunner/hints.js.map +1 -0
  141. package/dist/core/testRunner/infer.d.ts +24 -0
  142. package/dist/core/testRunner/infer.js +65 -0
  143. package/dist/core/testRunner/infer.js.map +1 -0
  144. package/dist/core/testRunner/resolve.d.ts +12 -0
  145. package/dist/core/testRunner/resolve.js +31 -0
  146. package/dist/core/testRunner/resolve.js.map +1 -0
  147. package/dist/core/testRunner/runner.d.ts +24 -0
  148. package/dist/core/testRunner/runner.js +145 -0
  149. package/dist/core/testRunner/runner.js.map +1 -0
  150. package/dist/core/testability/heuristics.d.ts +7 -0
  151. package/dist/core/testability/heuristics.js +35 -0
  152. package/dist/core/testability/heuristics.js.map +1 -0
  153. package/dist/core/tests/fixers.d.ts +14 -0
  154. package/dist/core/tests/fixers.js +59 -0
  155. package/dist/core/tests/fixers.js.map +1 -0
  156. package/dist/core/tests/types.d.ts +98 -0
  157. package/dist/core/tests/types.js +2 -0
  158. package/dist/core/tests/types.js.map +1 -0
  159. package/package.json +55 -0
@@ -0,0 +1,590 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { stableStringify } from '../core/stableJson.js';
4
+ import { writeStableJson } from '../core/state/storage.js';
5
+ import { loadOrInitPolicy } from '../core/state/policy.js';
6
+ import { loadOrInitState, saveState } from '../core/state/state.js';
7
+ import { loadConfigFile } from '../core/config/load.js';
8
+ import { validateConfig } from '../core/config/validate.js';
9
+ import { createGithubAdapter } from '../adapters/github.js';
10
+ import { runTestabilityWithLogger } from './testability.js';
11
+ import { runTestsWithLogger } from './tests.js';
12
+ import { isReactTestabilityCandidatePath, needsTestabilityByHeuristic } from '../core/testability/heuristics.js';
13
+ import { checkForkSafety } from '../core/config/forkPolicy.js';
14
+ function toPosix(p) {
15
+ return p.replace(/\\/g, '/');
16
+ }
17
+ function parseArgs(argv) {
18
+ const errors = [];
19
+ let root;
20
+ let configPath;
21
+ let reportPath;
22
+ let dryRun = false;
23
+ let staleHours;
24
+ let remote;
25
+ for (let i = 0; i < argv.length; i++) {
26
+ const a = argv[i] ?? '';
27
+ if (a === '--root') {
28
+ const v = argv[i + 1];
29
+ if (typeof v !== 'string' || v.trim() === '')
30
+ errors.push('full: --root requires a path');
31
+ else {
32
+ root = v;
33
+ i++;
34
+ }
35
+ continue;
36
+ }
37
+ if (a.startsWith('--root=')) {
38
+ const v = a.slice('--root='.length);
39
+ if (v.trim() === '')
40
+ errors.push('full: --root requires a path');
41
+ else
42
+ root = v;
43
+ continue;
44
+ }
45
+ if (a === '--config' || a === '-c') {
46
+ const v = argv[i + 1];
47
+ if (typeof v !== 'string' || v.trim() === '')
48
+ errors.push('full: --config requires a path');
49
+ else {
50
+ configPath = v;
51
+ i++;
52
+ }
53
+ continue;
54
+ }
55
+ if (a.startsWith('--config=')) {
56
+ const v = a.slice('--config='.length);
57
+ if (v.trim() === '')
58
+ errors.push('full: --config requires a path');
59
+ else
60
+ configPath = v;
61
+ continue;
62
+ }
63
+ if (a === '--report') {
64
+ const v = argv[i + 1];
65
+ if (typeof v !== 'string' || v.trim() === '')
66
+ errors.push('full: --report requires a path');
67
+ else {
68
+ reportPath = v;
69
+ i++;
70
+ }
71
+ continue;
72
+ }
73
+ if (a.startsWith('--report=')) {
74
+ const v = a.slice('--report='.length);
75
+ if (v.trim() === '')
76
+ errors.push('full: --report requires a path');
77
+ else
78
+ reportPath = v;
79
+ continue;
80
+ }
81
+ if (a === '--dryRun' || a === '--dry-run') {
82
+ dryRun = true;
83
+ continue;
84
+ }
85
+ if (a === '--stale-hours') {
86
+ const v = argv[i + 1];
87
+ const n = v ? Number(v) : NaN;
88
+ if (!Number.isFinite(n) || n <= 0)
89
+ errors.push('full: --stale-hours must be a positive number');
90
+ else {
91
+ staleHours = n;
92
+ i++;
93
+ }
94
+ continue;
95
+ }
96
+ if (a.startsWith('--stale-hours=')) {
97
+ const v = a.slice('--stale-hours='.length);
98
+ const n = Number(v);
99
+ if (!Number.isFinite(n) || n <= 0)
100
+ errors.push('full: --stale-hours must be a positive number');
101
+ else
102
+ staleHours = n;
103
+ continue;
104
+ }
105
+ if (a === '--remote') {
106
+ const v = argv[i + 1];
107
+ if (typeof v !== 'string' || v.trim() === '')
108
+ errors.push('full: --remote requires a value');
109
+ else {
110
+ remote = v;
111
+ i++;
112
+ }
113
+ continue;
114
+ }
115
+ if (a.startsWith('--remote=')) {
116
+ const v = a.slice('--remote='.length);
117
+ if (v.trim() === '')
118
+ errors.push('full: --remote requires a value');
119
+ else
120
+ remote = v;
121
+ continue;
122
+ }
123
+ if (a === '--help' || a === '-h')
124
+ continue;
125
+ errors.push(`full: unknown argument "${a}"`);
126
+ }
127
+ errors.sort((x, y) => x.localeCompare(y));
128
+ const args = { dryRun };
129
+ if (root !== undefined)
130
+ args.root = root;
131
+ if (configPath !== undefined)
132
+ args.configPath = configPath;
133
+ if (reportPath !== undefined)
134
+ args.reportPath = reportPath;
135
+ if (staleHours !== undefined)
136
+ args.staleHours = staleHours;
137
+ if (remote !== undefined)
138
+ args.remote = remote;
139
+ return { args, errors };
140
+ }
141
+ function resolvePathFromRoot(rootAbs, p, defaultRel) {
142
+ const arg = p?.trim();
143
+ if (!arg)
144
+ return { abs: path.resolve(rootAbs, defaultRel), relFromRoot: defaultRel };
145
+ if (path.isAbsolute(arg))
146
+ return { abs: arg, relFromRoot: toPosix(path.relative(rootAbs, arg)) };
147
+ const rel = arg.replace(/\\/g, '/');
148
+ return { abs: path.resolve(rootAbs, rel), relFromRoot: rel };
149
+ }
150
+ function stableTargetIdsFromPlan(planData) {
151
+ const targets = Array.isArray(planData?.targets) ? planData.targets : [];
152
+ const mapped = [];
153
+ for (const t of targets) {
154
+ if (!t || typeof t !== 'object')
155
+ continue;
156
+ const id = typeof t.id === 'string' ? t.id : null;
157
+ const paths = Array.isArray(t.paths) ? t.paths : [];
158
+ const firstPath = typeof paths[0] === 'string' ? paths[0] : null;
159
+ if (!id || !firstPath)
160
+ continue;
161
+ mapped.push({ id, path: toPosix(firstPath) });
162
+ }
163
+ mapped.sort((a, b) => a.id.localeCompare(b.id));
164
+ return mapped;
165
+ }
166
+ function countOpenTargets(state) {
167
+ return Object.values(state).filter((t) => t.status === 'open').length;
168
+ }
169
+ function prsSection(createdThisRun, maxPRsPerRun) {
170
+ return { createdThisRun, maxPRsPerRun, hit: createdThisRun >= maxPRsPerRun };
171
+ }
172
+ function parsePrNumber(t) {
173
+ const id = t.lastPr?.id;
174
+ if (!id)
175
+ return null;
176
+ const n = Number(id);
177
+ return Number.isInteger(n) && n > 0 ? n : null;
178
+ }
179
+ function isStaleByAge(nowMs, t, staleHours) {
180
+ const opened = t.prOpenedAtMs ?? t.updatedAtMs ?? t.createdAtMs;
181
+ const ageMs = nowMs - opened;
182
+ return ageMs > staleHours * 60 * 60 * 1000;
183
+ }
184
+ async function refreshOpenPrStatuses(opts) {
185
+ const next = { ...opts.stateTargets };
186
+ const entries = Object.entries(opts.stateTargets).sort(([a], [b]) => a.localeCompare(b));
187
+ for (const [id, t] of entries) {
188
+ if (t.status !== 'open')
189
+ continue;
190
+ const prNumber = parsePrNumber(t);
191
+ if (!prNumber)
192
+ continue;
193
+ const s = await opts.gh.readPullRequestStatus({ owner: opts.owner, repo: opts.repo, number: prNumber });
194
+ if (s.state !== 'open') {
195
+ next[id] = { ...t, status: s.state, updatedAtMs: opts.nowMs };
196
+ }
197
+ }
198
+ return next;
199
+ }
200
+ async function closeStalePr(opts) {
201
+ await opts.gh.commentOnPullRequest({ owner: opts.owner, repo: opts.repo, number: opts.prNumber, body: opts.commentBody });
202
+ await opts.gh.closePullRequest({ owner: opts.owner, repo: opts.repo, number: opts.prNumber });
203
+ }
204
+ function chooseNextTarget(opts) {
205
+ for (const t of opts.planTargets) {
206
+ const st = opts.stateTargets[t.id];
207
+ if (st && st.status === 'open')
208
+ continue;
209
+ return t;
210
+ }
211
+ return null;
212
+ }
213
+ function wouldNeedTestability(rootAbs, t) {
214
+ if (!isReactTestabilityCandidatePath(t.path))
215
+ return false;
216
+ const abs = path.join(rootAbs, t.path);
217
+ if (!fs.existsSync(abs))
218
+ return false;
219
+ const contents = fs.readFileSync(abs, 'utf8');
220
+ return needsTestabilityByHeuristic(contents);
221
+ }
222
+ function createCapturingLogger(parent) {
223
+ const outputs = [];
224
+ return {
225
+ outputs,
226
+ logger: {
227
+ level: parent.level,
228
+ debug: (m) => parent.debug(m),
229
+ info: (m) => parent.info(m),
230
+ warn: (m) => parent.warn(m),
231
+ error: (m) => parent.error(m),
232
+ output: (t) => {
233
+ outputs.push(t);
234
+ parent.output(t);
235
+ },
236
+ },
237
+ };
238
+ }
239
+ function parseLastJson(outputs) {
240
+ for (let i = outputs.length - 1; i >= 0; i--) {
241
+ const s = outputs[i]?.trim();
242
+ if (!s)
243
+ continue;
244
+ try {
245
+ return JSON.parse(s);
246
+ }
247
+ catch {
248
+ continue;
249
+ }
250
+ }
251
+ return null;
252
+ }
253
+ export async function runFullWithLogger(argv, logger, deps) {
254
+ const parsed = parseArgs(argv);
255
+ if (parsed.errors.length > 0) {
256
+ for (const e of parsed.errors)
257
+ logger.error(e);
258
+ return 2;
259
+ }
260
+ const nowMs = deps?.nowMs?.() ?? Date.now();
261
+ const rootAbs = path.resolve(process.cwd(), parsed.args.root ?? '.');
262
+ const report = resolvePathFromRoot(rootAbs, parsed.args.reportPath, '.test-agent/full.json');
263
+ const planPath = path.join(rootAbs, '.test-agent', 'plan.json');
264
+ const loadedCfg = loadConfigFile(parsed.args.configPath, {
265
+ cwd: () => rootAbs,
266
+ resolve: (...parts) => path.resolve(...parts),
267
+ existsSync: (p) => fs.existsSync(p),
268
+ readFileSync: (p, enc) => fs.readFileSync(p, enc),
269
+ });
270
+ const validated = validateConfig(loadedCfg.data);
271
+ const effectiveDryRun = parsed.args.dryRun || validated.resolved.mode.dryRun;
272
+ const staleHours = parsed.args.staleHours ?? 24;
273
+ const maxPRsPerRun = validated.resolved.limits.maxPRsPerRun;
274
+ let prsCreatedThisRun = 0;
275
+ // Fork context: undefined = not applicable (scheduled mode); use DI for testing.
276
+ const forkCtx = deps?.forkContext ?? { isFork: undefined };
277
+ const forkCheck = checkForkSafety({ allowForkPrs: validated.resolved.github.allowForkPrs, isFork: forkCtx.isFork });
278
+ // Compute llmAccess once for reuse
279
+ const llmAccess = (() => {
280
+ const allowCommands = validated.resolved.llm.allowCommands ?? [];
281
+ const denylistHits = (() => {
282
+ if (!validated.resolved.llm.enabled)
283
+ return ['llm_deny_disabled'];
284
+ if (allowCommands.length === 0)
285
+ return ['llm_deny_no_allowlist'];
286
+ if (!allowCommands.includes('full'))
287
+ return ['llm_deny_invoker_not_allowed'];
288
+ return [];
289
+ })();
290
+ return {
291
+ invoker: 'full',
292
+ allowCommands: [...new Set(allowCommands)].sort((a, b) => a.localeCompare(b)),
293
+ allowed: validated.resolved.llm.enabled && denylistHits.length === 0,
294
+ denylistHits: [...new Set(denylistHits)].sort((a, b) => a.localeCompare(b)),
295
+ };
296
+ })();
297
+ const llmReason = llmAccess.allowed ? 'allowed' : llmAccess.denylistHits[0] ?? 'disabled';
298
+ const maxOpenBotPRs = validated.resolved.limits.maxOpenBotPRs;
299
+ const baseReport = {
300
+ schemaVersion: 1,
301
+ command: 'full',
302
+ root: rootAbs,
303
+ dryRun: effectiveDryRun,
304
+ reportPath: toPosix(report.relFromRoot),
305
+ configPath: loadedCfg.configPath,
306
+ decision: {
307
+ lane: 'skipped',
308
+ skipReason: null,
309
+ caps: {
310
+ openBotPRs: { limit: maxOpenBotPRs, used: 0, hit: false },
311
+ maxPRsPerRun: { limit: maxPRsPerRun, used: 0, hit: false },
312
+ },
313
+ llm: { enabled: llmAccess.allowed, reason: llmReason },
314
+ },
315
+ llmAccess,
316
+ limits: { maxOpenBotPRs, maxPRsPerRun },
317
+ staleHours,
318
+ refreshed: false,
319
+ refreshSkippedReason: null,
320
+ caps: { openBotPRs: 0, maxOpenBotPRs, hit: false },
321
+ prs: prsSection(prsCreatedThisRun, maxPRsPerRun),
322
+ stale: { considered: 0, wouldClose: 0, closed: 0 },
323
+ chosenTarget: null,
324
+ lane: null,
325
+ reason: null,
326
+ forkContext: { isFork: forkCtx.isFork, allowed: forkCheck.allowed },
327
+ errors: [...loadedCfg.errors, ...validated.errors].sort((a, b) => a.localeCompare(b)),
328
+ };
329
+ // Fork policy check (fail-closed).
330
+ if (!forkCheck.allowed) {
331
+ const r = {
332
+ ...baseReport,
333
+ decision: { ...baseReport.decision, lane: 'skipped', skipReason: 'policy_denies_fork_context' },
334
+ prs: prsSection(prsCreatedThisRun, maxPRsPerRun),
335
+ reason: 'policy_denies_fork_context',
336
+ errors: [...baseReport.errors, forkCheck.reason],
337
+ };
338
+ writeStableJson(report.abs, r);
339
+ logger.output(stableStringify(r));
340
+ return 0;
341
+ }
342
+ if (!fs.existsSync(planPath)) {
343
+ const r = {
344
+ ...baseReport,
345
+ prs: prsSection(prsCreatedThisRun, maxPRsPerRun),
346
+ errors: [...baseReport.errors, 'Missing plan at .test-agent/plan.json. Run "test-agent plan" first.'],
347
+ };
348
+ writeStableJson(report.abs, r);
349
+ logger.output(stableStringify(r));
350
+ return 2;
351
+ }
352
+ const stateLoaded = loadOrInitState({ root: rootAbs, nowMs });
353
+ const policyLoaded = loadOrInitPolicy({ root: rootAbs });
354
+ let stateTargets = stateLoaded.state.scheduledTargets;
355
+ // Refresh PR statuses (real mode only; dryRun must not hit network).
356
+ const owner = validated.resolved.github.owner;
357
+ const repo = validated.resolved.github.repo;
358
+ const tokenEnvVar = validated.resolved.github.tokenEnvVar;
359
+ const token = tokenEnvVar ? process.env[tokenEnvVar] : undefined;
360
+ const canUseGithub = !effectiveDryRun && owner && repo && tokenEnvVar && token;
361
+ const ghFactory = deps?.createGithubAdapter ?? createGithubAdapter;
362
+ const gh = canUseGithub ? ghFactory({ token: token }) : null;
363
+ if (!effectiveDryRun && (!owner || !repo || !tokenEnvVar || !token)) {
364
+ const r = {
365
+ ...baseReport,
366
+ prs: prsSection(prsCreatedThisRun, maxPRsPerRun),
367
+ refreshSkippedReason: 'missing_github_token',
368
+ errors: [...baseReport.errors, 'Missing github config/token for real mode (github.owner, github.repo, github.tokenEnvVar + token env var).'],
369
+ };
370
+ writeStableJson(report.abs, r);
371
+ logger.output(stableStringify(r));
372
+ return 2;
373
+ }
374
+ const refreshSkippedReason = effectiveDryRun
375
+ ? owner && repo && tokenEnvVar && token
376
+ ? 'dryrun'
377
+ : 'dryrun_no_github_token'
378
+ : null;
379
+ let refreshed = false;
380
+ if (gh) {
381
+ stateTargets = await refreshOpenPrStatuses({ gh, owner: owner, repo: repo, nowMs, stateTargets });
382
+ refreshed = true;
383
+ }
384
+ // Stale handling (age-only). Never mutates in dryRun.
385
+ let staleConsidered = 0;
386
+ let staleWouldClose = 0;
387
+ let staleClosed = 0;
388
+ const keys = Object.keys(stateTargets).sort((a, b) => a.localeCompare(b));
389
+ for (const id of keys) {
390
+ const t = stateTargets[id];
391
+ if (!t || t.status !== 'open')
392
+ continue;
393
+ staleConsidered++;
394
+ if (!isStaleByAge(nowMs, t, staleHours))
395
+ continue;
396
+ const prNumber = parsePrNumber(t);
397
+ if (!prNumber)
398
+ continue;
399
+ staleWouldClose++;
400
+ // Safety: only close if we refreshed and still see it as open (idempotent). Never mutate in dryRun.
401
+ if (effectiveDryRun || !refreshed)
402
+ continue;
403
+ await closeStalePr({
404
+ gh: gh,
405
+ owner: owner,
406
+ repo: repo,
407
+ prNumber,
408
+ commentBody: `Closing as stale (older than ${staleHours}h).`,
409
+ });
410
+ stateTargets = {
411
+ ...stateTargets,
412
+ [id]: { ...t, status: 'closed', stale: true, closedReason: 'staleHours', updatedAtMs: nowMs },
413
+ };
414
+ staleClosed++;
415
+ }
416
+ // Enforce caps after refresh/stale actions.
417
+ const openBotPRs = countOpenTargets(stateTargets);
418
+ if (openBotPRs >= maxOpenBotPRs) {
419
+ const r = {
420
+ ...baseReport,
421
+ decision: {
422
+ ...baseReport.decision,
423
+ lane: 'skipped',
424
+ skipReason: 'cap_reached',
425
+ caps: {
426
+ openBotPRs: { limit: maxOpenBotPRs, used: openBotPRs, hit: true },
427
+ maxPRsPerRun: { limit: maxPRsPerRun, used: prsCreatedThisRun, hit: false },
428
+ },
429
+ },
430
+ prs: prsSection(prsCreatedThisRun, maxPRsPerRun),
431
+ refreshed,
432
+ refreshSkippedReason,
433
+ caps: { openBotPRs, maxOpenBotPRs, hit: true },
434
+ stale: { considered: staleConsidered, wouldClose: staleWouldClose, closed: staleClosed },
435
+ reason: 'cap_reached',
436
+ };
437
+ writeStableJson(report.abs, r);
438
+ logger.output(stableStringify(r));
439
+ if (stateTargets !== stateLoaded.state.scheduledTargets) {
440
+ saveState({ root: rootAbs, nowMs, state: { ...stateLoaded.state, scheduledTargets: stateTargets } });
441
+ }
442
+ return 0;
443
+ }
444
+ const planData = JSON.parse(fs.readFileSync(planPath, 'utf8'));
445
+ const planTargets = stableTargetIdsFromPlan(planData);
446
+ const chosen = chooseNextTarget({ planTargets, stateTargets });
447
+ if (!chosen) {
448
+ const r = {
449
+ ...baseReport,
450
+ decision: {
451
+ ...baseReport.decision,
452
+ lane: 'skipped',
453
+ skipReason: 'no_eligible_targets',
454
+ caps: {
455
+ openBotPRs: { limit: maxOpenBotPRs, used: openBotPRs, hit: false },
456
+ maxPRsPerRun: { limit: maxPRsPerRun, used: prsCreatedThisRun, hit: false },
457
+ },
458
+ },
459
+ prs: prsSection(prsCreatedThisRun, maxPRsPerRun),
460
+ refreshed,
461
+ refreshSkippedReason,
462
+ caps: { openBotPRs, maxOpenBotPRs, hit: false },
463
+ stale: { considered: staleConsidered, wouldClose: staleWouldClose, closed: staleClosed },
464
+ reason: 'no_eligible_targets',
465
+ };
466
+ writeStableJson(report.abs, r);
467
+ logger.output(stableStringify(r));
468
+ if (stateTargets !== stateLoaded.state.scheduledTargets) {
469
+ saveState({ root: rootAbs, nowMs, state: { ...stateLoaded.state, scheduledTargets: stateTargets } });
470
+ }
471
+ return 0;
472
+ }
473
+ // Testability lane first.
474
+ const policy = policyLoaded.policy;
475
+ const policyDenies = !policy.allowTestabilityEdits ||
476
+ policy.denyTestabilityPaths.some((p) => {
477
+ const pref = toPosix(p);
478
+ return pref && (chosen.path === pref || chosen.path.startsWith(pref));
479
+ });
480
+ if (!policyDenies && wouldNeedTestability(rootAbs, chosen)) {
481
+ if (effectiveDryRun) {
482
+ prsCreatedThisRun = 1;
483
+ const hitMax = prsCreatedThisRun >= maxPRsPerRun;
484
+ const r = {
485
+ ...baseReport,
486
+ decision: {
487
+ ...baseReport.decision,
488
+ lane: 'testability',
489
+ skipReason: null,
490
+ caps: {
491
+ openBotPRs: { limit: maxOpenBotPRs, used: openBotPRs, hit: openBotPRs >= maxOpenBotPRs },
492
+ maxPRsPerRun: { limit: maxPRsPerRun, used: prsCreatedThisRun, hit: hitMax },
493
+ },
494
+ },
495
+ prs: prsSection(prsCreatedThisRun, maxPRsPerRun),
496
+ refreshed,
497
+ refreshSkippedReason,
498
+ caps: { openBotPRs, maxOpenBotPRs, hit: false },
499
+ stale: { considered: staleConsidered, wouldClose: staleWouldClose, closed: staleClosed },
500
+ chosenTarget: chosen,
501
+ lane: 'testability',
502
+ reason: hitMax ? 'cap_reached_maxPRsPerRun' : 'dryrun_would_open_testability_pr',
503
+ };
504
+ writeStableJson(report.abs, r);
505
+ logger.output(stableStringify(r));
506
+ if (stateTargets !== stateLoaded.state.scheduledTargets) {
507
+ saveState({ root: rootAbs, nowMs, state: { ...stateLoaded.state, scheduledTargets: stateTargets } });
508
+ }
509
+ return 0;
510
+ }
511
+ const rt = deps?.runTestabilityWithLogger ?? runTestabilityWithLogger;
512
+ const capLogger = createCapturingLogger(logger);
513
+ const code = await rt(['--root', rootAbs, '--target', chosen.id, ...(loadedCfg.configPath ? ['--config', loadedCfg.configPath] : [])], capLogger.logger);
514
+ const parsedTestability = parseLastJson(capLogger.outputs);
515
+ const created = parsedTestability?.pr && typeof parsedTestability.pr.created === 'boolean' ? parsedTestability.pr.created : false;
516
+ if (code === 0 && created)
517
+ prsCreatedThisRun++;
518
+ const hitMax = prsCreatedThisRun >= maxPRsPerRun;
519
+ const r = {
520
+ ...baseReport,
521
+ decision: {
522
+ ...baseReport.decision,
523
+ lane: 'testability',
524
+ skipReason: null,
525
+ caps: {
526
+ openBotPRs: { limit: maxOpenBotPRs, used: openBotPRs, hit: openBotPRs >= maxOpenBotPRs },
527
+ maxPRsPerRun: { limit: maxPRsPerRun, used: prsCreatedThisRun, hit: hitMax },
528
+ },
529
+ },
530
+ prs: prsSection(prsCreatedThisRun, maxPRsPerRun),
531
+ refreshed,
532
+ refreshSkippedReason,
533
+ caps: { openBotPRs, maxOpenBotPRs, hit: false },
534
+ stale: { considered: staleConsidered, wouldClose: staleWouldClose, closed: staleClosed },
535
+ chosenTarget: chosen,
536
+ lane: 'testability',
537
+ ...(code === 0 && hitMax ? { reason: 'cap_reached_maxPRsPerRun' } : {}),
538
+ };
539
+ writeStableJson(report.abs, r);
540
+ logger.output(stableStringify(r));
541
+ if (stateTargets !== stateLoaded.state.scheduledTargets) {
542
+ saveState({ root: rootAbs, nowMs, state: { ...stateLoaded.state, scheduledTargets: stateTargets } });
543
+ }
544
+ return code;
545
+ }
546
+ // Tests lane.
547
+ const rt2 = deps?.runTestsWithLogger ?? runTestsWithLogger;
548
+ const testsArgv = ['--root', rootAbs, '--target', chosen.id, '--report', '.test-agent/report.json'];
549
+ testsArgv.push('--invoker', 'full');
550
+ if (parsed.args.configPath)
551
+ testsArgv.push('--config', parsed.args.configPath);
552
+ if (effectiveDryRun)
553
+ testsArgv.push('--dryRun');
554
+ if (parsed.args.remote)
555
+ testsArgv.push('--remote', parsed.args.remote);
556
+ const code = await rt2(testsArgv, logger);
557
+ const testsReportAbs = path.join(rootAbs, '.test-agent', 'report.json');
558
+ const testsReport = fs.existsSync(testsReportAbs) ? JSON.parse(fs.readFileSync(testsReportAbs, 'utf8')) : null;
559
+ const testsCreated = testsReport?.pr && typeof testsReport.pr.created === 'boolean' ? testsReport.pr.created : false;
560
+ if (code === 0 && testsCreated)
561
+ prsCreatedThisRun++;
562
+ const hitMax = prsCreatedThisRun >= maxPRsPerRun;
563
+ const r = {
564
+ ...baseReport,
565
+ decision: {
566
+ ...baseReport.decision,
567
+ lane: 'tests',
568
+ skipReason: null,
569
+ caps: {
570
+ openBotPRs: { limit: maxOpenBotPRs, used: openBotPRs, hit: openBotPRs >= maxOpenBotPRs },
571
+ maxPRsPerRun: { limit: maxPRsPerRun, used: prsCreatedThisRun, hit: hitMax },
572
+ },
573
+ },
574
+ prs: prsSection(prsCreatedThisRun, maxPRsPerRun),
575
+ refreshed,
576
+ refreshSkippedReason,
577
+ caps: { openBotPRs, maxOpenBotPRs, hit: false },
578
+ stale: { considered: staleConsidered, wouldClose: staleWouldClose, closed: staleClosed },
579
+ chosenTarget: chosen,
580
+ lane: 'tests',
581
+ ...(code === 0 && hitMax ? { reason: 'cap_reached_maxPRsPerRun' } : {}),
582
+ };
583
+ writeStableJson(report.abs, r);
584
+ logger.output(stableStringify(r));
585
+ if (stateTargets !== stateLoaded.state.scheduledTargets) {
586
+ saveState({ root: rootAbs, nowMs, state: { ...stateLoaded.state, scheduledTargets: stateTargets } });
587
+ }
588
+ return code;
589
+ }
590
+ //# sourceMappingURL=full.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full.js","sourceRoot":"","sources":["../../src/commands/full.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Logger } from '../core/logger.js';
2
+ export declare function runGenTestWithLogger(argv: readonly string[], logger: Logger): number;