lacuna-cli 0.1.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.
- package/README.md +451 -0
- package/bin/run.js +5 -0
- package/dist/agent/context.d.ts +25 -0
- package/dist/agent/context.d.ts.map +1 -0
- package/dist/agent/context.js +366 -0
- package/dist/agent/context.js.map +1 -0
- package/dist/agent/fix-loop.d.ts +20 -0
- package/dist/agent/fix-loop.d.ts.map +1 -0
- package/dist/agent/fix-loop.js +466 -0
- package/dist/agent/fix-loop.js.map +1 -0
- package/dist/agent/generator.d.ts +35 -0
- package/dist/agent/generator.d.ts.map +1 -0
- package/dist/agent/generator.js +220 -0
- package/dist/agent/generator.js.map +1 -0
- package/dist/agent/loop.d.ts +23 -0
- package/dist/agent/loop.d.ts.map +1 -0
- package/dist/agent/loop.js +394 -0
- package/dist/agent/loop.js.map +1 -0
- package/dist/agent/project-memory.d.ts +10 -0
- package/dist/agent/project-memory.d.ts.map +1 -0
- package/dist/agent/project-memory.js +57 -0
- package/dist/agent/project-memory.js.map +1 -0
- package/dist/agent/prompts.d.ts +44 -0
- package/dist/agent/prompts.d.ts.map +1 -0
- package/dist/agent/prompts.js +377 -0
- package/dist/agent/prompts.js.map +1 -0
- package/dist/ci/comment.d.ts +2 -0
- package/dist/ci/comment.d.ts.map +1 -0
- package/dist/ci/comment.js +97 -0
- package/dist/ci/comment.js.map +1 -0
- package/dist/ci/parse-outputs.d.ts +2 -0
- package/dist/ci/parse-outputs.d.ts.map +1 -0
- package/dist/ci/parse-outputs.js +30 -0
- package/dist/ci/parse-outputs.js.map +1 -0
- package/dist/commands/analyze.d.ts +13 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +151 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/fix.d.ts +15 -0
- package/dist/commands/fix.d.ts.map +1 -0
- package/dist/commands/fix.js +106 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/commands/generate.d.ts +18 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +129 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +131 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/run.d.ts +10 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +45 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/lib/config.d.ts +58 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +68 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/coverage/gaps.d.ts +12 -0
- package/dist/lib/coverage/gaps.d.ts.map +1 -0
- package/dist/lib/coverage/gaps.js +186 -0
- package/dist/lib/coverage/gaps.js.map +1 -0
- package/dist/lib/coverage/index.d.ts +7 -0
- package/dist/lib/coverage/index.d.ts.map +1 -0
- package/dist/lib/coverage/index.js +24 -0
- package/dist/lib/coverage/index.js.map +1 -0
- package/dist/lib/coverage/json.d.ts +3 -0
- package/dist/lib/coverage/json.d.ts.map +1 -0
- package/dist/lib/coverage/json.js +24 -0
- package/dist/lib/coverage/json.js.map +1 -0
- package/dist/lib/coverage/lcov.d.ts +3 -0
- package/dist/lib/coverage/lcov.d.ts.map +1 -0
- package/dist/lib/coverage/lcov.js +58 -0
- package/dist/lib/coverage/lcov.js.map +1 -0
- package/dist/lib/coverage/types.d.ts +27 -0
- package/dist/lib/coverage/types.d.ts.map +1 -0
- package/dist/lib/coverage/types.js +2 -0
- package/dist/lib/coverage/types.js.map +1 -0
- package/dist/lib/coverage-spinner.d.ts +6 -0
- package/dist/lib/coverage-spinner.d.ts.map +1 -0
- package/dist/lib/coverage-spinner.js +101 -0
- package/dist/lib/coverage-spinner.js.map +1 -0
- package/dist/lib/detector.d.ts +13 -0
- package/dist/lib/detector.d.ts.map +1 -0
- package/dist/lib/detector.js +106 -0
- package/dist/lib/detector.js.map +1 -0
- package/dist/lib/extract-error.d.ts +2 -0
- package/dist/lib/extract-error.d.ts.map +1 -0
- package/dist/lib/extract-error.js +116 -0
- package/dist/lib/extract-error.js.map +1 -0
- package/dist/lib/providers/anthropic.d.ts +8 -0
- package/dist/lib/providers/anthropic.d.ts.map +1 -0
- package/dist/lib/providers/anthropic.js +38 -0
- package/dist/lib/providers/anthropic.js.map +1 -0
- package/dist/lib/providers/index.d.ts +6 -0
- package/dist/lib/providers/index.d.ts.map +1 -0
- package/dist/lib/providers/index.js +27 -0
- package/dist/lib/providers/index.js.map +1 -0
- package/dist/lib/providers/openai-compatible.d.ts +11 -0
- package/dist/lib/providers/openai-compatible.d.ts.map +1 -0
- package/dist/lib/providers/openai-compatible.js +93 -0
- package/dist/lib/providers/openai-compatible.js.map +1 -0
- package/dist/lib/providers/types.d.ts +17 -0
- package/dist/lib/providers/types.d.ts.map +1 -0
- package/dist/lib/providers/types.js +97 -0
- package/dist/lib/providers/types.js.map +1 -0
- package/dist/lib/report-upload.d.ts +3 -0
- package/dist/lib/report-upload.d.ts.map +1 -0
- package/dist/lib/report-upload.js +15 -0
- package/dist/lib/report-upload.js.map +1 -0
- package/dist/lib/reporter.d.ts +51 -0
- package/dist/lib/reporter.d.ts.map +1 -0
- package/dist/lib/reporter.js +172 -0
- package/dist/lib/reporter.js.map +1 -0
- package/dist/lib/runner.d.ts +9 -0
- package/dist/lib/runner.d.ts.map +1 -0
- package/dist/lib/runner.js +50 -0
- package/dist/lib/runner.js.map +1 -0
- package/dist/lib/skeleton.d.ts +8 -0
- package/dist/lib/skeleton.d.ts.map +1 -0
- package/dist/lib/skeleton.js +122 -0
- package/dist/lib/skeleton.js.map +1 -0
- package/dist/lib/streaming-viewer.d.ts +14 -0
- package/dist/lib/streaming-viewer.d.ts.map +1 -0
- package/dist/lib/streaming-viewer.js +80 -0
- package/dist/lib/streaming-viewer.js.map +1 -0
- package/dist/lib/tips.d.ts +16 -0
- package/dist/lib/tips.d.ts.map +1 -0
- package/dist/lib/tips.js +76 -0
- package/dist/lib/tips.js.map +1 -0
- package/dist/lib/typecheck.d.ts +3 -0
- package/dist/lib/typecheck.d.ts.map +1 -0
- package/dist/lib/typecheck.js +28 -0
- package/dist/lib/typecheck.js.map +1 -0
- package/dist/lib/validate.d.ts +7 -0
- package/dist/lib/validate.d.ts.map +1 -0
- package/dist/lib/validate.js +82 -0
- package/dist/lib/validate.js.map +1 -0
- package/dist/lib/worker-display.d.ts +45 -0
- package/dist/lib/worker-display.d.ts.map +1 -0
- package/dist/lib/worker-display.js +168 -0
- package/dist/lib/worker-display.js.map +1 -0
- package/oclif.manifest.json +295 -0
- package/package.json +62 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { readFile, access, mkdir } from 'fs/promises';
|
|
2
|
+
import { join, dirname, basename, extname, relative } from 'path';
|
|
3
|
+
// Compute the relative import path from one file to another, stripping the extension.
|
|
4
|
+
export function computeRelativeImport(fromFile, toFile) {
|
|
5
|
+
const rel = relative(dirname(fromFile), toFile);
|
|
6
|
+
const noExt = rel.replace(/\.(tsx?|jsx?|mts|cts)$/, '');
|
|
7
|
+
return noExt.startsWith('.') ? noExt : `./${noExt}`;
|
|
8
|
+
}
|
|
9
|
+
const TEST_SUFFIXES = ['.test', '.spec'];
|
|
10
|
+
async function dirExists(path) {
|
|
11
|
+
try {
|
|
12
|
+
await access(path);
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async function inferTestFilePath(sourceFile, cwd, env) {
|
|
20
|
+
const dir = dirname(sourceFile);
|
|
21
|
+
const ext = extname(sourceFile);
|
|
22
|
+
const base = basename(sourceFile, ext);
|
|
23
|
+
if (env.language === 'python') {
|
|
24
|
+
return join(dir, `test_${base}${ext}`);
|
|
25
|
+
}
|
|
26
|
+
if (env.language === 'go') {
|
|
27
|
+
return join(dir, `${base}_test${ext}`);
|
|
28
|
+
}
|
|
29
|
+
const colocated = (await dirExists(join(cwd, dir, `${base}.test${ext}`))) ||
|
|
30
|
+
(await dirExists(join(cwd, dir, `${base}.spec${ext}`)));
|
|
31
|
+
if (colocated) {
|
|
32
|
+
return join(dir, `${base}.test${ext}`);
|
|
33
|
+
}
|
|
34
|
+
const testsDir = join(cwd, dir, '__tests__');
|
|
35
|
+
await mkdir(testsDir, { recursive: true });
|
|
36
|
+
return join(dir, '__tests__', `${base}.test${ext}`);
|
|
37
|
+
}
|
|
38
|
+
async function findExistingTestFile(sourceFile, cwd) {
|
|
39
|
+
const ext = extname(sourceFile);
|
|
40
|
+
const base = basename(sourceFile, ext);
|
|
41
|
+
const dir = dirname(sourceFile);
|
|
42
|
+
const candidates = [
|
|
43
|
+
...TEST_SUFFIXES.map((s) => join(cwd, dir, '__tests__', `${base}${s}${ext}`)),
|
|
44
|
+
...TEST_SUFFIXES.map((s) => join(cwd, dir, `${base}${s}${ext}`)),
|
|
45
|
+
join(cwd, dir, `test_${base}${ext}`),
|
|
46
|
+
join(cwd, dir, `${base}_test${ext}`),
|
|
47
|
+
];
|
|
48
|
+
for (const candidate of candidates) {
|
|
49
|
+
try {
|
|
50
|
+
await readFile(candidate);
|
|
51
|
+
return candidate;
|
|
52
|
+
}
|
|
53
|
+
catch { /* not found */ }
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
function relativeMockPath(testFile, mockFile) {
|
|
58
|
+
const rel = relative(dirname(testFile), mockFile);
|
|
59
|
+
return rel.startsWith('.') ? rel : `./${rel}`;
|
|
60
|
+
}
|
|
61
|
+
// ─── Type definition collector ────────────────────────────────────────────────
|
|
62
|
+
async function readTsconfigAliases(cwd) {
|
|
63
|
+
const candidates = ['tsconfig.json', 'tsconfig.app.json', 'tsconfig.base.json'];
|
|
64
|
+
for (const name of candidates) {
|
|
65
|
+
try {
|
|
66
|
+
const raw = await readFile(join(cwd, name), 'utf-8');
|
|
67
|
+
const stripped = raw.replace(/\/\*[\s\S]*?\*\//g, '').replace(/\/\/.*/g, '');
|
|
68
|
+
const tsconfig = JSON.parse(stripped);
|
|
69
|
+
if (tsconfig.compilerOptions?.paths)
|
|
70
|
+
return tsconfig.compilerOptions.paths;
|
|
71
|
+
}
|
|
72
|
+
catch { /* try next */ }
|
|
73
|
+
}
|
|
74
|
+
return {};
|
|
75
|
+
}
|
|
76
|
+
// Resolve an import path to an absolute filesystem base path (no extension).
|
|
77
|
+
// Returns null for node_modules and unresolvable paths.
|
|
78
|
+
function resolveLocalImport(importPath, absoluteSourcePath, cwd, aliases) {
|
|
79
|
+
// Tsconfig alias resolution (e.g. "@/*" → "src/*")
|
|
80
|
+
for (const [pattern, targets] of Object.entries(aliases)) {
|
|
81
|
+
const aliasPrefix = pattern.replace(/\*$/, ''); // "@/*" → "@/"
|
|
82
|
+
const targetBase = (targets[0] ?? '').replace(/\*$/, ''); // "src/*" → "src/"
|
|
83
|
+
if (importPath.startsWith(aliasPrefix)) {
|
|
84
|
+
return join(cwd, targetBase + importPath.slice(aliasPrefix.length));
|
|
85
|
+
}
|
|
86
|
+
if (importPath === pattern.replace(/\/\*$/, '')) {
|
|
87
|
+
return join(cwd, targets[0] ?? '');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Relative import
|
|
91
|
+
if (importPath.startsWith('.'))
|
|
92
|
+
return join(dirname(absoluteSourcePath), importPath);
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
// Find the actual file by trying common extensions on a base path.
|
|
96
|
+
async function resolveToFile(basePath) {
|
|
97
|
+
for (const suffix of ['.ts', '.tsx', '/index.ts', '/index.tsx', '']) {
|
|
98
|
+
try {
|
|
99
|
+
await access(basePath + suffix);
|
|
100
|
+
return basePath + suffix;
|
|
101
|
+
}
|
|
102
|
+
catch { /* try next */ }
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
// Extract exported interface/type/enum declarations via brace-depth tracking.
|
|
107
|
+
// Only captures the declarations themselves — not function bodies, classes, or constants.
|
|
108
|
+
function extractTypeDeclarations(code) {
|
|
109
|
+
const lines = code.split('\n');
|
|
110
|
+
const result = [];
|
|
111
|
+
let i = 0;
|
|
112
|
+
while (i < lines.length) {
|
|
113
|
+
const line = lines[i];
|
|
114
|
+
if (/^\s*export\s+(interface|type|enum)\s+\w+/.test(line)) {
|
|
115
|
+
const block = [line];
|
|
116
|
+
let depth = (line.match(/\{/g) ?? []).length - (line.match(/\}/g) ?? []).length;
|
|
117
|
+
if (depth <= 0) {
|
|
118
|
+
// Single-line: export type Foo = string | number
|
|
119
|
+
result.push(line.trimEnd());
|
|
120
|
+
i++;
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
// Multi-line: collect until braces balance
|
|
124
|
+
i++;
|
|
125
|
+
while (i < lines.length && depth > 0) {
|
|
126
|
+
block.push(lines[i]);
|
|
127
|
+
depth += (lines[i].match(/\{/g) ?? []).length;
|
|
128
|
+
depth -= (lines[i].match(/\}/g) ?? []).length;
|
|
129
|
+
i++;
|
|
130
|
+
}
|
|
131
|
+
result.push(block.join('\n'));
|
|
132
|
+
result.push('');
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
i++;
|
|
136
|
+
}
|
|
137
|
+
return result.join('\n').trim();
|
|
138
|
+
}
|
|
139
|
+
const MAX_TYPE_FILES = 10;
|
|
140
|
+
const MAX_TYPE_CHARS = 4000;
|
|
141
|
+
// Scans a source file's imports and follows them transitively (BFS) to collect
|
|
142
|
+
// interface/type/enum declarations from any locally-defined types they reference.
|
|
143
|
+
// Stops at MAX_TYPE_FILES files or MAX_TYPE_CHARS characters to stay prompt-safe.
|
|
144
|
+
export async function collectTypeDefinitions(sourceCode, absoluteSourcePath, cwd) {
|
|
145
|
+
const aliases = await readTsconfigAliases(cwd);
|
|
146
|
+
// BFS: each entry is a file whose imports we still need to follow.
|
|
147
|
+
// Start with the source file itself so we traverse its direct imports first.
|
|
148
|
+
const toFollow = [
|
|
149
|
+
{ code: sourceCode, absolutePath: absoluteSourcePath },
|
|
150
|
+
];
|
|
151
|
+
// Mark the source file visited so we never re-process it as a type file.
|
|
152
|
+
const visited = new Set([absoluteSourcePath]);
|
|
153
|
+
const blocks = [];
|
|
154
|
+
let totalChars = 0;
|
|
155
|
+
while (toFollow.length > 0 && blocks.length < MAX_TYPE_FILES && totalChars < MAX_TYPE_CHARS) {
|
|
156
|
+
const { code, absolutePath } = toFollow.shift();
|
|
157
|
+
for (const m of code.matchAll(/^import(?:\s+type)?\s[^'"]*['"]([^'"]+)['"]/gm)) {
|
|
158
|
+
if (blocks.length >= MAX_TYPE_FILES || totalChars >= MAX_TYPE_CHARS)
|
|
159
|
+
break;
|
|
160
|
+
const base = resolveLocalImport(m[1], absolutePath, cwd, aliases);
|
|
161
|
+
if (!base)
|
|
162
|
+
continue;
|
|
163
|
+
const file = await resolveToFile(base);
|
|
164
|
+
if (!file || visited.has(file))
|
|
165
|
+
continue;
|
|
166
|
+
visited.add(file);
|
|
167
|
+
let content;
|
|
168
|
+
try {
|
|
169
|
+
content = await readFile(file, 'utf-8');
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
// Collect type declarations from this file (if any)
|
|
175
|
+
const declarations = extractTypeDeclarations(content);
|
|
176
|
+
if (declarations) {
|
|
177
|
+
const block = `// from ${relative(cwd, file)}\n${declarations}`;
|
|
178
|
+
blocks.push(block);
|
|
179
|
+
totalChars += block.length;
|
|
180
|
+
}
|
|
181
|
+
// Always follow this file's imports too — it might re-export types from
|
|
182
|
+
// deeper files even if it has no declarations of its own.
|
|
183
|
+
toFollow.push({ code: content, absolutePath: file });
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return blocks.length > 0 ? blocks.join('\n\n') : null;
|
|
187
|
+
}
|
|
188
|
+
// Returns the pre-computed relative import paths (from the test file) for every
|
|
189
|
+
// local module imported by the source file. These are the exact strings the AI
|
|
190
|
+
// should use in vi.mock() / jest.mock() calls — no directory counting required.
|
|
191
|
+
// Only direct imports are included (no BFS) since you mock direct deps, not transitive ones.
|
|
192
|
+
export async function collectLocalImportPaths(sourceCode, absoluteSourcePath, absoluteTestFilePath, cwd) {
|
|
193
|
+
const aliases = await readTsconfigAliases(cwd);
|
|
194
|
+
const results = [];
|
|
195
|
+
const seen = new Set();
|
|
196
|
+
for (const m of sourceCode.matchAll(/^import(?:\s+type)?\s[^'"]*['"]([^'"]+)['"]/gm)) {
|
|
197
|
+
const importPath = m[1];
|
|
198
|
+
const base = resolveLocalImport(importPath, absoluteSourcePath, cwd, aliases);
|
|
199
|
+
if (!base)
|
|
200
|
+
continue; // skip node_modules
|
|
201
|
+
const file = await resolveToFile(base);
|
|
202
|
+
if (!file || seen.has(file))
|
|
203
|
+
continue;
|
|
204
|
+
seen.add(file);
|
|
205
|
+
const rel = computeRelativeImport(absoluteTestFilePath, file);
|
|
206
|
+
results.push(rel);
|
|
207
|
+
}
|
|
208
|
+
return results.length > 0 ? results : null;
|
|
209
|
+
}
|
|
210
|
+
// Reads the React major version from package.json, or null if React is not a dependency.
|
|
211
|
+
export async function detectReactMajorVersion(cwd) {
|
|
212
|
+
try {
|
|
213
|
+
const raw = await readFile(join(cwd, 'package.json'), 'utf-8');
|
|
214
|
+
const pkg = JSON.parse(raw);
|
|
215
|
+
const version = { ...pkg.dependencies, ...pkg.devDependencies }['react'];
|
|
216
|
+
if (!version)
|
|
217
|
+
return null;
|
|
218
|
+
const m = version.match(/(\d+)/);
|
|
219
|
+
return m ? parseInt(m[1], 10) : null;
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
async function readPackageDeps(cwd) {
|
|
226
|
+
try {
|
|
227
|
+
const raw = await readFile(join(cwd, 'package.json'), 'utf-8');
|
|
228
|
+
const pkg = JSON.parse(raw);
|
|
229
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
230
|
+
const testKeys = [
|
|
231
|
+
'vitest', 'jest', '@jest/core', 'mocha', 'chai',
|
|
232
|
+
'@testing-library/react', '@testing-library/user-event', '@testing-library/jest-dom',
|
|
233
|
+
'@testing-library/vue', '@testing-library/svelte',
|
|
234
|
+
'react', 'react-dom', 'vue', 'svelte',
|
|
235
|
+
'msw', 'nock', 'supertest', 'axios-mock-adapter',
|
|
236
|
+
'@types/jest', 'ts-jest', 'babel-jest',
|
|
237
|
+
];
|
|
238
|
+
const relevant = Object.entries(deps)
|
|
239
|
+
.filter(([k]) => testKeys.some((t) => k.includes(t)))
|
|
240
|
+
.map(([k, v]) => ` "${k}": "${v}"`)
|
|
241
|
+
.join('\n');
|
|
242
|
+
return relevant || null;
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
async function readTsconfigPaths(cwd) {
|
|
249
|
+
const candidates = ['tsconfig.json', 'tsconfig.app.json', 'tsconfig.base.json'];
|
|
250
|
+
for (const name of candidates) {
|
|
251
|
+
try {
|
|
252
|
+
const raw = await readFile(join(cwd, name), 'utf-8');
|
|
253
|
+
const stripped = raw.replace(/\/\*[\s\S]*?\*\//g, '').replace(/\/\/.*/g, '');
|
|
254
|
+
const tsconfig = JSON.parse(stripped);
|
|
255
|
+
const opts = tsconfig.compilerOptions;
|
|
256
|
+
if (!opts)
|
|
257
|
+
continue;
|
|
258
|
+
const lines = [];
|
|
259
|
+
// Strictness flags — critical for the AI to know what type safety is enforced
|
|
260
|
+
const strictFlags = [
|
|
261
|
+
opts.strict && 'strict',
|
|
262
|
+
opts.noImplicitAny && 'noImplicitAny',
|
|
263
|
+
opts.strictNullChecks && 'strictNullChecks',
|
|
264
|
+
opts.noUncheckedIndexedAccess && 'noUncheckedIndexedAccess',
|
|
265
|
+
opts.exactOptionalPropertyTypes && 'exactOptionalPropertyTypes',
|
|
266
|
+
].filter(Boolean);
|
|
267
|
+
if (strictFlags.length)
|
|
268
|
+
lines.push(`Strict flags: ${strictFlags.join(', ')}`);
|
|
269
|
+
if (opts.target)
|
|
270
|
+
lines.push(`target: "${opts.target}"`);
|
|
271
|
+
if (opts.jsx)
|
|
272
|
+
lines.push(`jsx: "${opts.jsx}"`);
|
|
273
|
+
// Path aliases
|
|
274
|
+
if (opts.baseUrl)
|
|
275
|
+
lines.push(`baseUrl: "${opts.baseUrl}"`);
|
|
276
|
+
if (opts.paths) {
|
|
277
|
+
for (const [alias, targets] of Object.entries(opts.paths)) {
|
|
278
|
+
lines.push(` "${alias}" → "${targets[0]}"`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
if (lines.length === 0)
|
|
282
|
+
continue;
|
|
283
|
+
return lines.join('\n');
|
|
284
|
+
}
|
|
285
|
+
catch { /* try next */ }
|
|
286
|
+
}
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
// Lightweight context for fix-loop: reads mocks/setup/deps/tsconfig relative to
|
|
290
|
+
// the actual test file path. Does NOT call inferTestFilePath or findExistingTestFile
|
|
291
|
+
// (which would compute wrong paths and create spurious __tests__/ directories).
|
|
292
|
+
export async function buildFixFileContext(absTestPath, cwd, config) {
|
|
293
|
+
let mocksCode = null;
|
|
294
|
+
let mocksImportPath = null;
|
|
295
|
+
if (config?.mocksFile) {
|
|
296
|
+
const absoluteMocks = join(cwd, config.mocksFile);
|
|
297
|
+
mocksImportPath = relativeMockPath(absTestPath, absoluteMocks);
|
|
298
|
+
try {
|
|
299
|
+
mocksCode = await readFile(absoluteMocks, 'utf-8');
|
|
300
|
+
}
|
|
301
|
+
catch { /* mocks file not created yet — AI will create it */ }
|
|
302
|
+
}
|
|
303
|
+
let setupFileCode = null;
|
|
304
|
+
if (config?.setupFile) {
|
|
305
|
+
try {
|
|
306
|
+
setupFileCode = await readFile(join(cwd, config.setupFile), 'utf-8');
|
|
307
|
+
}
|
|
308
|
+
catch { /* setup file not found */ }
|
|
309
|
+
}
|
|
310
|
+
const [packageDeps, tsconfigPaths] = await Promise.all([
|
|
311
|
+
readPackageDeps(cwd),
|
|
312
|
+
readTsconfigPaths(cwd),
|
|
313
|
+
]);
|
|
314
|
+
return { mocksCode, mocksImportPath, setupFileCode, packageDeps, tsconfigPaths };
|
|
315
|
+
}
|
|
316
|
+
export async function buildFileContext(sourceFilePath, cwd, env, config) {
|
|
317
|
+
const absoluteSource = join(cwd, sourceFilePath);
|
|
318
|
+
const sourceCode = await readFile(absoluteSource, 'utf-8');
|
|
319
|
+
const existingTestFile = await findExistingTestFile(sourceFilePath, cwd);
|
|
320
|
+
const existingTestCode = existingTestFile ? await readFile(existingTestFile, 'utf-8') : null;
|
|
321
|
+
const suggestedTestFile = existingTestFile ?? join(cwd, await inferTestFilePath(sourceFilePath, cwd, env));
|
|
322
|
+
const sourceImportPath = computeRelativeImport(suggestedTestFile, absoluteSource);
|
|
323
|
+
let mocksCode = null;
|
|
324
|
+
let mocksImportPath = null;
|
|
325
|
+
if (config?.mocksFile) {
|
|
326
|
+
const absoluteMocks = join(cwd, config.mocksFile);
|
|
327
|
+
// Always compute the import path — even if the file doesn't exist yet,
|
|
328
|
+
// the AI needs to know where to create/import it from.
|
|
329
|
+
mocksImportPath = relativeMockPath(suggestedTestFile, absoluteMocks);
|
|
330
|
+
try {
|
|
331
|
+
mocksCode = await readFile(absoluteMocks, 'utf-8');
|
|
332
|
+
}
|
|
333
|
+
catch { /* file not created yet — AI will create it */ }
|
|
334
|
+
}
|
|
335
|
+
let setupFileCode = null;
|
|
336
|
+
if (config?.setupFile) {
|
|
337
|
+
try {
|
|
338
|
+
setupFileCode = await readFile(join(cwd, config.setupFile), 'utf-8');
|
|
339
|
+
}
|
|
340
|
+
catch { /* setup file not found — skip */ }
|
|
341
|
+
}
|
|
342
|
+
const [packageDeps, tsconfigPaths, typeDefinitions, localImportPaths, reactMajorVersion] = await Promise.all([
|
|
343
|
+
readPackageDeps(cwd),
|
|
344
|
+
readTsconfigPaths(cwd),
|
|
345
|
+
collectTypeDefinitions(sourceCode, absoluteSource, cwd),
|
|
346
|
+
collectLocalImportPaths(sourceCode, absoluteSource, suggestedTestFile, cwd),
|
|
347
|
+
detectReactMajorVersion(cwd),
|
|
348
|
+
]);
|
|
349
|
+
return {
|
|
350
|
+
sourceFile: sourceFilePath,
|
|
351
|
+
sourceCode,
|
|
352
|
+
existingTestFile,
|
|
353
|
+
existingTestCode,
|
|
354
|
+
suggestedTestFile,
|
|
355
|
+
sourceImportPath,
|
|
356
|
+
mocksCode,
|
|
357
|
+
mocksImportPath,
|
|
358
|
+
setupFileCode,
|
|
359
|
+
packageDeps,
|
|
360
|
+
tsconfigPaths,
|
|
361
|
+
typeDefinitions,
|
|
362
|
+
localImportPaths,
|
|
363
|
+
reactMajorVersion,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { LacunaConfig } from '../lib/config.js';
|
|
2
|
+
import type { DetectedEnvironment } from '../lib/detector.js';
|
|
3
|
+
export interface FixOptions {
|
|
4
|
+
config: LacunaConfig;
|
|
5
|
+
env: DetectedEnvironment;
|
|
6
|
+
cwd: string;
|
|
7
|
+
dryRun: boolean;
|
|
8
|
+
verbose: boolean;
|
|
9
|
+
targetFile?: string;
|
|
10
|
+
workers?: number;
|
|
11
|
+
fresh?: boolean;
|
|
12
|
+
log: (msg: string) => void;
|
|
13
|
+
}
|
|
14
|
+
export interface FixResult {
|
|
15
|
+
filesProcessed: number;
|
|
16
|
+
filesFixed: number;
|
|
17
|
+
errors: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare function runFixLoop(options: FixOptions): Promise<FixResult>;
|
|
20
|
+
//# sourceMappingURL=fix-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-loop.d.ts","sourceRoot":"","sources":["../../src/agent/fix-loop.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAe7D,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,YAAY,CAAA;IACpB,GAAG,EAAE,mBAAmB,CAAA;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3B;AAoCD,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AA+TD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAgIxE"}
|