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 @@
1
+ {"version":3,"file":"qualityGate.js","sourceRoot":"","sources":["../../../../src/core/generator/llm/qualityGate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { GenerateInput, GenerateOutput, ITestGenerator } from './types.js';
2
+ import { type ILLMProvider } from '../llm/provider.js';
3
+ export { applyUnifiedDiffToTestFiles } from './llm/diffApply.js';
4
+ type LlmCfg = {
5
+ enabled: boolean;
6
+ providerBaseUrl: string | null;
7
+ endpointPath: string;
8
+ model: string;
9
+ apiKeyEnvVar: string;
10
+ maxTokens: number;
11
+ temperature: number;
12
+ requestedTestCases?: number;
13
+ maxTestCases?: number;
14
+ };
15
+ export declare class LlmGenerator implements ITestGenerator {
16
+ private readonly cfg;
17
+ private readonly dryRun;
18
+ private readonly env;
19
+ private readonly nowMs;
20
+ private readonly provider;
21
+ private readonly indexFiles;
22
+ constructor(opts: {
23
+ llm: LlmCfg;
24
+ dryRun: boolean;
25
+ env: NodeJS.ProcessEnv;
26
+ nowMs: () => number;
27
+ provider: ILLMProvider | undefined;
28
+ indexFiles: Array<{
29
+ path: string;
30
+ }>;
31
+ });
32
+ kind(): 'llm';
33
+ generate(input: GenerateInput): Promise<GenerateOutput>;
34
+ }
@@ -0,0 +1,245 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import crypto from 'node:crypto';
4
+ import { stableStringify } from '../stableJson.js';
5
+ import { buildContextPack } from '../context/packer.js';
6
+ import { redactText } from '../redact.js';
7
+ import { HttpProvider } from '../llm/provider.js';
8
+ import { resolveLlmTestCountTuning } from './quality.js';
9
+ import { extractNamedExportsFromJsLike, extractTopLevelDefsFromPy } from '../code/exports.js';
10
+ // Re-export for backward compatibility (tests import from here)
11
+ export { applyUnifiedDiffToTestFiles } from './llm/diffApply.js';
12
+ import { applyUnifiedDiffToTestFiles } from './llm/diffApply.js';
13
+ import { ALLOWED_MATCHERS, MIN_DISTINCT_MATCHERS, SHALLOW_MATCHERS } from './llm/qualityGate.js';
14
+ function sha256_8(text) {
15
+ return crypto.createHash('sha256').update(text).digest('hex').slice(0, 8);
16
+ }
17
+ function uniqSorted(xs) {
18
+ return [...new Set(xs.map((x) => x.trim()).filter(Boolean))].sort((a, b) => a.localeCompare(b));
19
+ }
20
+ function clipForPrompt(text, maxChars) {
21
+ const t = text ?? '';
22
+ if (t.length <= maxChars)
23
+ return { text: t, truncated: false };
24
+ return { text: t.slice(0, maxChars) + '\n...[truncated]\n', truncated: true };
25
+ }
26
+ export class LlmGenerator {
27
+ cfg;
28
+ dryRun;
29
+ env;
30
+ nowMs;
31
+ provider;
32
+ indexFiles;
33
+ constructor(opts) {
34
+ this.cfg = opts.llm;
35
+ this.dryRun = opts.dryRun;
36
+ this.env = opts.env;
37
+ this.nowMs = opts.nowMs;
38
+ this.provider = opts.provider;
39
+ this.indexFiles = opts.indexFiles;
40
+ }
41
+ kind() {
42
+ return 'llm';
43
+ }
44
+ async generate(input) {
45
+ const tuning = resolveLlmTestCountTuning({
46
+ requestedTestCases: this.cfg.requestedTestCases ?? null,
47
+ maxTestCases: this.cfg.maxTestCases ?? null,
48
+ });
49
+ if (this.dryRun) {
50
+ return { generator: 'llm', created: false, generatedFiles: [], warnings: ['llm_not_enabled'], summary: 'dryRun: llm disabled' };
51
+ }
52
+ if (!this.cfg.enabled) {
53
+ return { generator: 'llm', created: false, generatedFiles: [], warnings: ['llm_not_enabled'], summary: 'llm.enabled=false' };
54
+ }
55
+ const provider = this.provider ??
56
+ new HttpProvider({
57
+ baseUrl: this.cfg.providerBaseUrl,
58
+ endpointPath: this.cfg.endpointPath,
59
+ apiKeyEnvVar: this.cfg.apiKeyEnvVar,
60
+ env: this.env,
61
+ timeoutMs: 20_000,
62
+ outputCharCap: 20_000,
63
+ dryRun: false,
64
+ });
65
+ const maxDepth = 1;
66
+ const maxFileChars = Math.min(8000, Math.max(1, input.budgets.maxChars));
67
+ const observed = input.hints
68
+ ? { runner: input.hints.runner, hints: { failingFiles: input.hints.failingFiles, failingTests: input.hints.failingTests } }
69
+ : null;
70
+ const pack = await buildContextPack({
71
+ rootAbs: input.rootAbs,
72
+ targetId: input.targetId,
73
+ targetPathPosix: input.targetPathPosix,
74
+ boundary: {
75
+ kind: input.boundary.kind,
76
+ rootPathPosix: input.boundary.rootPathPosix,
77
+ boundaryFileRel: null,
78
+ },
79
+ inferred: {
80
+ runner: input.runner,
81
+ command: input.testCommand,
82
+ source: 'unknown',
83
+ reason: 'llm_generate',
84
+ },
85
+ observed,
86
+ budgets: { maxFiles: input.budgets.maxFiles, maxChars: input.budgets.maxChars, maxDepth, maxFileChars },
87
+ nowMs: this.nowMs,
88
+ readFileText: async (abs) => fs.promises.readFile(abs, 'utf8'),
89
+ listIndexFiles: async () => this.indexFiles.map((f) => f.path),
90
+ redact: redactText,
91
+ });
92
+ const contextSummary = (() => {
93
+ // Derive a stable hash that does NOT depend on createdAtMs and does not include raw file contents.
94
+ const sig = {
95
+ schemaVersion: 1,
96
+ targetId: pack.targetId,
97
+ targetPathPosix: pack.targetPathPosix,
98
+ boundary: pack.boundary,
99
+ budgets: pack.budgets,
100
+ usage: pack.usage,
101
+ files: pack.files.map((f) => ({ pathPosix: f.pathPosix, kind: f.kind, sha256_8: f.sha256_8, truncated: f.truncated })),
102
+ };
103
+ const digest = sha256_8(stableStringify(sig));
104
+ return {
105
+ sha256_8: digest,
106
+ filesUsed: pack.usage.filesUsed,
107
+ charsUsed: pack.usage.charsUsed,
108
+ hitMaxFiles: pack.usage.hitMaxFiles,
109
+ hitMaxChars: pack.usage.hitMaxChars,
110
+ };
111
+ })();
112
+ // Extract anchors before LLM call so we can include them in the prompt
113
+ const targetModuleStem = path.posix.basename(input.targetPathPosix).replace(/\.[^.]+$/, '');
114
+ const targetAnchorsResult = (() => {
115
+ try {
116
+ const abs = path.resolve(input.rootAbs, ...input.targetPathPosix.split('/'));
117
+ const source = fs.readFileSync(abs, 'utf8');
118
+ const r = input.runner.toLowerCase();
119
+ if (r === 'pytest' || input.targetPathPosix.toLowerCase().endsWith('.py')) {
120
+ return { ok: true, anchors: extractTopLevelDefsFromPy(source), source };
121
+ }
122
+ return { ok: true, anchors: extractNamedExportsFromJsLike(source).named, source };
123
+ }
124
+ catch {
125
+ return { ok: false, anchors: [], source: null };
126
+ }
127
+ })();
128
+ const targetAnchors = targetAnchorsResult.anchors;
129
+ const targetSource = targetAnchorsResult.source;
130
+ const anchorLine = targetAnchors.length > 0
131
+ ? `- ANCHORS (you MUST import the target module AND call at least one of these): ${targetAnchors.join(', ')}.`
132
+ : '- Import and exercise the target module.';
133
+ const isPytest = input.runner.toLowerCase() === 'pytest';
134
+ const runnerRules = isPytest
135
+ ? [
136
+ '- Use pytest style: def test_<name>(...) functions at module level.',
137
+ '- Use pytest.raises(...) for exception/error test cases.',
138
+ '- Use @pytest.mark.parametrize when testing multiple similar inputs.',
139
+ '- Include at least 1 negative/edge case (e.g., invalid input, None, empty, boundary).',
140
+ '- Test file must be named test_*.py under tests/ directory.',
141
+ ]
142
+ : [
143
+ `- Use at least ${MIN_DISTINCT_MATCHERS} distinct matchers from this allowlist: ${[...ALLOWED_MATCHERS].sort((a, b) => a.localeCompare(b)).join(', ')}.`,
144
+ `- Avoid shallow expectations (e.g. ${[...SHALLOW_MATCHERS].sort((a, b) => a.localeCompare(b)).join(', ')}).`,
145
+ "- If runner is vitest: use `import { describe, it, expect } from 'vitest'` with `it(...)`, OR `import { describe, test, expect } from 'vitest'` with `test(...)` (no Jest globals).",
146
+ "- If runner is vitest and you need mocking: use `vi.fn()` or `vi.spyOn()` and import `vi` from vitest (e.g. `import { vi } from 'vitest'`).",
147
+ ];
148
+ const systemPrompt = [
149
+ 'You are a senior engineer writing minimal, robust unit tests.',
150
+ 'Output MUST be a single unified diff that touches ONLY unit test files.',
151
+ 'Rules:',
152
+ '- Touch at most 3 files.',
153
+ isPytest
154
+ ? '- Each touched file must be a unit test file (e.g. tests/test_*.py).'
155
+ : '- Each touched file must be a unit test file (e.g. __tests__/x.test.ts or x.test.ts).',
156
+ '- You MAY add a new test file OR edit an existing test file (or both).',
157
+ '- You MAY add fixture/support files ONLY under tests/fixtures/** or **/__fixtures__/** (never outside these fixture dirs).',
158
+ `- Include between ${tuning.minTestCases} and ${tuning.requestedTestCases} focused unit test cases (hard cap ${tuning.maxTestCases}).`,
159
+ `- Include at least ${tuning.minExpectCalls} ${isPytest ? 'assert statements' : 'expect/assert calls'} total.`,
160
+ '- Your tests must assert behavior: inputs → outputs, error cases, and at least one edge case.',
161
+ ...runnerRules,
162
+ anchorLine,
163
+ '- If you cannot safely test any anchor, output exactly: NO_SAFE_TESTS',
164
+ '- Do NOT modify package.json, configs, snapshots, or non-test files.',
165
+ '- Do NOT include any explanations or Markdown; diff only.',
166
+ ].join('\n');
167
+ const feedbackSection = (() => {
168
+ const fb = input.feedback ?? null;
169
+ if (!fb || !fb.rawOutput || fb.rawOutput.trim() === '')
170
+ return null;
171
+ const clipped = clipForPrompt(fb.rawOutput, 6000);
172
+ return [
173
+ 'PreviousAttempt (metadata + redacted output):',
174
+ `attempt: ${Math.max(1, Math.trunc(fb.attempt))}`,
175
+ `exitCode: ${Math.trunc(fb.exitCode)}`,
176
+ `outputTruncated: ${clipped.truncated ? 'true' : 'false'}`,
177
+ '',
178
+ 'RawOutput:',
179
+ clipped.text,
180
+ '',
181
+ ].join('\n');
182
+ })();
183
+ const userPrompt = [
184
+ 'Generate one minimal unit test file patch for the target.',
185
+ `targetId: ${input.targetId}`,
186
+ `targetPath: ${input.targetPathPosix}`,
187
+ `runner: ${input.runner}`,
188
+ `testCommand: ${input.testCommand ?? 'null'}`,
189
+ '',
190
+ 'ContextPack (JSON):',
191
+ stableStringify(pack),
192
+ '',
193
+ feedbackSection ?? '',
194
+ ].join('\n');
195
+ const resp = await provider.generate({
196
+ systemPrompt,
197
+ userPrompt,
198
+ model: this.cfg.model,
199
+ temperature: this.cfg.temperature,
200
+ maxTokens: this.cfg.maxTokens,
201
+ });
202
+ const providerWarnings = uniqSorted(resp.warnings ?? []);
203
+ if (!resp.text || resp.text.trim() === '') {
204
+ return {
205
+ generator: 'llm',
206
+ created: false,
207
+ generatedFiles: [],
208
+ warnings: uniqSorted(['llm_empty_response', ...providerWarnings]),
209
+ summary: 'llm: empty response',
210
+ context: contextSummary,
211
+ };
212
+ }
213
+ // Use targetAnchors extracted earlier; add fail-closed marker only if read failed
214
+ const targetExportNames = !targetAnchorsResult.ok ? ['__target_read_failed__'] : targetAnchors;
215
+ const applied = applyUnifiedDiffToTestFiles({
216
+ rootAbs: input.rootAbs,
217
+ boundaryRootPosix: input.boundary.rootPathPosix,
218
+ runner: input.runner,
219
+ diffText: resp.text,
220
+ tuning,
221
+ targetExportNames,
222
+ targetModuleStem,
223
+ targetSource,
224
+ });
225
+ if (!applied.ok || applied.pathsPosix.length === 0) {
226
+ return {
227
+ generator: 'llm',
228
+ created: false,
229
+ generatedFiles: [],
230
+ warnings: uniqSorted([...providerWarnings, ...applied.warnings]),
231
+ summary: 'llm: invalid diff',
232
+ context: contextSummary,
233
+ };
234
+ }
235
+ return {
236
+ generator: 'llm',
237
+ created: applied.createdPathsPosix.length > 0,
238
+ generatedFiles: applied.pathsPosix,
239
+ warnings: uniqSorted([...providerWarnings, ...applied.warnings]),
240
+ summary: `llm: applied ${applied.pathsPosix.length} file(s)`,
241
+ context: contextSummary,
242
+ };
243
+ }
244
+ }
245
+ //# sourceMappingURL=llmGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llmGenerator.js","sourceRoot":"","sources":["../../../src/core/generator/llmGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare const LLM_REVIEWABLE: {
2
+ readonly minTestCases: 6;
3
+ readonly requestedTestCases: 10;
4
+ readonly maxTestCases: 12;
5
+ readonly hardMaxTestCases: 12;
6
+ };
7
+ export type LlmTestCountTuningInput = {
8
+ requestedTestCases?: number | null;
9
+ maxTestCases?: number | null;
10
+ };
11
+ export type LlmTestCountTuningResolved = {
12
+ minTestCases: number;
13
+ requestedTestCases: number;
14
+ maxTestCases: number;
15
+ minExpectCalls: number;
16
+ };
17
+ export declare function resolveLlmTestCountTuning(input?: LlmTestCountTuningInput): LlmTestCountTuningResolved;
@@ -0,0 +1,31 @@
1
+ export const LLM_REVIEWABLE = {
2
+ // Default stays reviewable.
3
+ minTestCases: 6,
4
+ requestedTestCases: 10,
5
+ maxTestCases: 12,
6
+ // Hard cap: never allow configs to exceed this.
7
+ hardMaxTestCases: 12,
8
+ };
9
+ function clampInt(n, lo, hi) {
10
+ const x = Math.trunc(n);
11
+ if (x < lo)
12
+ return lo;
13
+ if (x > hi)
14
+ return hi;
15
+ return x;
16
+ }
17
+ export function resolveLlmTestCountTuning(input) {
18
+ const min = LLM_REVIEWABLE.minTestCases;
19
+ const hardMax = LLM_REVIEWABLE.hardMaxTestCases;
20
+ const maxRaw = input?.maxTestCases ?? LLM_REVIEWABLE.maxTestCases;
21
+ const maxTestCases = clampInt(Number.isFinite(maxRaw) ? maxRaw : LLM_REVIEWABLE.maxTestCases, min, hardMax);
22
+ const requestedRaw = input?.requestedTestCases ?? LLM_REVIEWABLE.requestedTestCases;
23
+ const requestedTestCases = clampInt(Number.isFinite(requestedRaw) ? requestedRaw : LLM_REVIEWABLE.requestedTestCases, min, maxTestCases);
24
+ return {
25
+ minTestCases: min,
26
+ requestedTestCases,
27
+ maxTestCases,
28
+ minExpectCalls: min * 2,
29
+ };
30
+ }
31
+ //# sourceMappingURL=quality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../../src/core/generator/quality.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,4BAA4B;IAC5B,YAAY,EAAE,CAAC;IACf,kBAAkB,EAAE,EAAE;IACtB,YAAY,EAAE,EAAE;IAChB,gDAAgD;IAChD,gBAAgB,EAAE,EAAE;CACZ,CAAC;AAcX,SAAS,QAAQ,CAAC,CAAS,EAAE,EAAU,EAAE,EAAU;IACjD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAA+B;IACvE,MAAM,GAAG,GAAG,cAAc,CAAC,YAAY,CAAC;IACxC,MAAM,OAAO,GAAG,cAAc,CAAC,gBAAgB,CAAC;IAEhD,MAAM,MAAM,GAAG,KAAK,EAAE,YAAY,IAAI,cAAc,CAAC,YAAY,CAAC;IAClE,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAgB,CAAC,CAAC,CAAC,CAAE,MAAiB,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAElI,MAAM,YAAY,GAAG,KAAK,EAAE,kBAAkB,IAAI,cAAc,CAAC,kBAAkB,CAAC;IACpF,MAAM,kBAAkB,GAAG,QAAQ,CACjC,MAAM,CAAC,QAAQ,CAAC,YAAsB,CAAC,CAAC,CAAC,CAAE,YAAuB,CAAC,CAAC,CAAC,cAAc,CAAC,kBAAkB,EACtG,GAAG,EACH,YAAY,CACb,CAAC;IAEF,OAAO;QACL,YAAY,EAAE,GAAG;QACjB,kBAAkB;QAClB,YAAY;QACZ,cAAc,EAAE,GAAG,GAAG,CAAC;KACxB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { ITestGenerator } from './types.js';
2
+ import type { ILLMProvider } from '../llm/provider.js';
3
+ export type GeneratorKind = 'smoke' | 'llm';
4
+ export declare function pickGenerator(config: {
5
+ generator?: GeneratorKind;
6
+ }, _policy: unknown): GeneratorKind;
7
+ export declare function createGenerator(kind: GeneratorKind, deps?: {
8
+ indexFiles?: Array<{
9
+ path: string;
10
+ }>;
11
+ llm?: {
12
+ enabled: boolean;
13
+ providerBaseUrl: string | null;
14
+ endpointPath: string;
15
+ model: string;
16
+ apiKeyEnvVar: string;
17
+ maxTokens: number;
18
+ temperature: number;
19
+ requestedTestCases?: number;
20
+ maxTestCases?: number;
21
+ };
22
+ dryRun?: boolean;
23
+ env?: NodeJS.ProcessEnv;
24
+ nowMs?: () => number;
25
+ llmProvider?: ILLMProvider;
26
+ }): ITestGenerator;
@@ -0,0 +1,29 @@
1
+ import { SmokeGenerator } from './smokeGenerator.js';
2
+ import { LlmGenerator } from './llmGenerator.js';
3
+ import { LLM_REVIEWABLE } from './quality.js';
4
+ export function pickGenerator(config, _policy) {
5
+ return config.generator ?? 'smoke';
6
+ }
7
+ export function createGenerator(kind, deps) {
8
+ if (kind === 'smoke')
9
+ return new SmokeGenerator({ indexFiles: deps?.indexFiles ?? [] });
10
+ return new LlmGenerator({
11
+ llm: deps?.llm ?? {
12
+ enabled: false,
13
+ providerBaseUrl: null,
14
+ endpointPath: '/chat/completions',
15
+ model: 'gpt-4.1-mini',
16
+ apiKeyEnvVar: 'TEST_AGENT_LLM_KEY',
17
+ maxTokens: 1200,
18
+ temperature: 0,
19
+ requestedTestCases: LLM_REVIEWABLE.requestedTestCases,
20
+ maxTestCases: LLM_REVIEWABLE.maxTestCases,
21
+ },
22
+ dryRun: deps?.dryRun ?? true,
23
+ env: deps?.env ?? process.env,
24
+ nowMs: deps?.nowMs ?? (() => Date.now()),
25
+ provider: deps?.llmProvider,
26
+ indexFiles: deps?.indexFiles ?? [],
27
+ });
28
+ }
29
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/generator/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C,MAAM,UAAU,aAAa,CAAC,MAAqC,EAAE,OAAgB;IACnF,OAAO,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAmB,EACnB,IAiBC;IAED,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,cAAc,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC,CAAC;IACxF,OAAO,IAAI,YAAY,CAAC;QACtB,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI;YAChB,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,cAAc;YACrB,YAAY,EAAE,oBAAoB;YAClC,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,CAAC;YACd,kBAAkB,EAAE,cAAc,CAAC,kBAAkB;YACrD,YAAY,EAAE,cAAc,CAAC,YAAY;SAC1C;QACD,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI;QAC5B,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG;QAC7B,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,QAAQ,EAAE,IAAI,EAAE,WAAW;QAC3B,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE;KACnC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { GenerateInput, GenerateOutput, ITestGenerator } from './types.js';
2
+ export declare class SmokeGenerator implements ITestGenerator {
3
+ private readonly indexFiles;
4
+ constructor(deps: {
5
+ indexFiles: Array<{
6
+ path: string;
7
+ }>;
8
+ });
9
+ kind(): 'smoke';
10
+ generate(input: GenerateInput): Promise<GenerateOutput>;
11
+ }
@@ -0,0 +1,27 @@
1
+ import { generateJestTest } from '../testGenerator/generate.js';
2
+ function uniqSorted(xs) {
3
+ return [...new Set(xs)].sort((a, b) => a.localeCompare(b));
4
+ }
5
+ export class SmokeGenerator {
6
+ indexFiles;
7
+ constructor(deps) {
8
+ this.indexFiles = deps.indexFiles;
9
+ }
10
+ kind() {
11
+ return 'smoke';
12
+ }
13
+ async generate(input) {
14
+ // Behavior: delegate to existing generator (synchronous) with repo-relative path.
15
+ const r = generateJestTest({ root: input.rootAbs, targetPath: input.targetPathPosix, indexFiles: this.indexFiles });
16
+ const expected = r.testPath ? [r.testPath] : [];
17
+ return {
18
+ generator: 'smoke',
19
+ created: r.created,
20
+ // Keep deterministic/stable: report the expected test path even if it already existed.
21
+ generatedFiles: uniqSorted(expected),
22
+ warnings: uniqSorted(r.warnings),
23
+ summary: r.reason,
24
+ };
25
+ }
26
+ }
27
+ //# sourceMappingURL=smokeGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smokeGenerator.js","sourceRoot":"","sources":["../../../src/core/generator/smokeGenerator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,SAAS,UAAU,CAAC,EAAY;IAC9B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,OAAO,cAAc;IACR,UAAU,CAA0B;IAErD,YAAY,IAA6C;QACvD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACpC,CAAC;IAED,IAAI;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAoB;QACjC,kFAAkF;QAClF,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,eAAe,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACpH,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,OAAO;YACL,SAAS,EAAE,OAAO;YAClB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,uFAAuF;YACvF,cAAc,EAAE,UAAU,CAAC,QAAQ,CAAC;YACpC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;YAChC,OAAO,EAAE,CAAC,CAAC,MAAM;SAClB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,48 @@
1
+ export type GenerateInput = {
2
+ rootAbs: string;
3
+ targetId: string;
4
+ targetPathPosix: string;
5
+ boundary: {
6
+ kind: 'js' | 'py' | 'unknown';
7
+ rootPathPosix: string | null;
8
+ };
9
+ runner: 'jest' | 'vitest' | 'pytest' | 'unknown';
10
+ testCommand: string | null;
11
+ policy: {
12
+ allowTestabilityEdits: boolean;
13
+ notes: string[];
14
+ workingTestCommand: string | null;
15
+ };
16
+ budgets: {
17
+ maxFiles: number;
18
+ maxChars: number;
19
+ };
20
+ hints?: {
21
+ runner: string;
22
+ failingFiles: string[];
23
+ failingTests: string[];
24
+ };
25
+ feedback?: {
26
+ attempt: number;
27
+ exitCode: number;
28
+ rawOutput: string;
29
+ } | null;
30
+ };
31
+ export type GenerateOutput = {
32
+ generator: 'smoke' | 'llm';
33
+ created: boolean;
34
+ generatedFiles: string[];
35
+ warnings: string[];
36
+ summary: string;
37
+ context?: {
38
+ sha256_8: string;
39
+ filesUsed: number;
40
+ charsUsed: number;
41
+ hitMaxFiles: boolean;
42
+ hitMaxChars: boolean;
43
+ };
44
+ };
45
+ export interface ITestGenerator {
46
+ kind(): 'smoke' | 'llm';
47
+ generate(input: GenerateInput): Promise<GenerateOutput>;
48
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/generator/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ export type IndexedFile = {
2
+ path: string;
3
+ ext: string;
4
+ size: number;
5
+ lastModifiedMs?: number;
6
+ };
7
+ export type IndexSignals = {
8
+ packageManager: 'pnpm' | 'npm' | 'yarn' | 'unknown';
9
+ hasTsconfig: boolean;
10
+ jest: {
11
+ hasJestConfigFile: boolean;
12
+ hasPackageJsonJestField: boolean;
13
+ hasJestDep: boolean;
14
+ hasJestInTestScript: boolean;
15
+ };
16
+ };
17
+ export type RepoIndex = {
18
+ root: '.';
19
+ schemaVersion: 1;
20
+ files: IndexedFile[];
21
+ signals: IndexSignals;
22
+ };
23
+ export declare function buildRepoIndex(root: string): {
24
+ index: RepoIndex;
25
+ warnings: string[];
26
+ };
27
+ export declare function writeRepoIndex(root: string, index: RepoIndex): {
28
+ outputPath: string;
29
+ };