lacuna-cli 0.1.4 → 0.1.6

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 (61) hide show
  1. package/README.md +51 -21
  2. package/dist/agent/fix-loop.d.ts +5 -0
  3. package/dist/agent/fix-loop.d.ts.map +1 -1
  4. package/dist/agent/fix-loop.js +342 -35
  5. package/dist/agent/fix-loop.js.map +1 -1
  6. package/dist/agent/generator.d.ts +4 -1
  7. package/dist/agent/generator.d.ts.map +1 -1
  8. package/dist/agent/generator.js +42 -3
  9. package/dist/agent/generator.js.map +1 -1
  10. package/dist/agent/loop.d.ts +8 -0
  11. package/dist/agent/loop.d.ts.map +1 -1
  12. package/dist/agent/loop.js +26 -9
  13. package/dist/agent/loop.js.map +1 -1
  14. package/dist/agent/prompts.d.ts +8 -0
  15. package/dist/agent/prompts.d.ts.map +1 -1
  16. package/dist/agent/prompts.js +395 -67
  17. package/dist/agent/prompts.js.map +1 -1
  18. package/dist/commands/fix.d.ts +2 -0
  19. package/dist/commands/fix.d.ts.map +1 -1
  20. package/dist/commands/fix.js +31 -2
  21. package/dist/commands/fix.js.map +1 -1
  22. package/dist/commands/init.d.ts.map +1 -1
  23. package/dist/commands/init.js +245 -34
  24. package/dist/commands/init.js.map +1 -1
  25. package/dist/lib/config.d.ts +8 -8
  26. package/dist/lib/config.d.ts.map +1 -1
  27. package/dist/lib/config.js +8 -6
  28. package/dist/lib/config.js.map +1 -1
  29. package/dist/lib/coverage/gaps.d.ts +2 -2
  30. package/dist/lib/coverage/gaps.d.ts.map +1 -1
  31. package/dist/lib/coverage/gaps.js +4 -4
  32. package/dist/lib/coverage/gaps.js.map +1 -1
  33. package/dist/lib/detector.d.ts +3 -2
  34. package/dist/lib/detector.d.ts.map +1 -1
  35. package/dist/lib/detector.js +138 -0
  36. package/dist/lib/detector.js.map +1 -1
  37. package/dist/lib/providers/anthropic.d.ts.map +1 -1
  38. package/dist/lib/providers/anthropic.js +26 -3
  39. package/dist/lib/providers/anthropic.js.map +1 -1
  40. package/dist/lib/providers/openai-compatible.d.ts +1 -1
  41. package/dist/lib/providers/openai-compatible.d.ts.map +1 -1
  42. package/dist/lib/providers/openai-compatible.js +17 -1
  43. package/dist/lib/providers/openai-compatible.js.map +1 -1
  44. package/dist/lib/skeleton.d.ts +4 -0
  45. package/dist/lib/skeleton.d.ts.map +1 -1
  46. package/dist/lib/skeleton.js +220 -0
  47. package/dist/lib/skeleton.js.map +1 -1
  48. package/dist/lib/validate.d.ts +1 -0
  49. package/dist/lib/validate.d.ts.map +1 -1
  50. package/dist/lib/validate.js +132 -0
  51. package/dist/lib/validate.js.map +1 -1
  52. package/dist/lib/worker-display.d.ts +3 -0
  53. package/dist/lib/worker-display.d.ts.map +1 -1
  54. package/dist/lib/worker-display.js +19 -4
  55. package/dist/lib/worker-display.js.map +1 -1
  56. package/package.json +1 -1
  57. package/dist/lib/report-upload.d.ts +0 -3
  58. package/dist/lib/report-upload.d.ts.map +0 -1
  59. package/dist/lib/report-upload.js +0 -15
  60. package/dist/lib/report-upload.js.map +0 -1
  61. package/oclif.manifest.json +0 -295
@@ -150,8 +150,8 @@ export async function findUncoveredFiles(report, sourceDir, cwd, userIgnore = []
150
150
  // Normalize LCOV paths: they can be absolute or relative depending on the runner.
151
151
  // walkDir always returns absolute paths, so normalise here to avoid false misses.
152
152
  const coveredPaths = new Set(report.files.map((f) => (f.path.startsWith('/') ? f.path : join(cwd, f.path))));
153
- const absoluteSourceDir = join(cwd, sourceDir);
154
- const allSourceFiles = await walkDir(absoluteSourceDir).catch(() => []);
153
+ const dirs = (Array.isArray(sourceDir) ? sourceDir : [sourceDir]).map(d => join(cwd, d));
154
+ const allSourceFiles = (await Promise.all(dirs.map(d => walkDir(d).catch(() => [])))).flat();
155
155
  const uncovered = [];
156
156
  for (const absPath of allSourceFiles) {
157
157
  if (shouldIgnore(absPath, userIgnore))
@@ -176,8 +176,8 @@ export function formatCoverageSummary(report) {
176
176
  }
177
177
  const TEST_FILE_RE = /\.(test|spec)\.[^.]+$|^test_[^/]+$|_test\.[^.]+$/;
178
178
  export async function findTestFiles(cwd, _env, config) {
179
- const root = join(cwd, config.sourceDir);
180
- const all = await walkDir(root).catch(() => []);
179
+ const dirs = (Array.isArray(config.sourceDir) ? config.sourceDir : [config.sourceDir]).map(d => join(cwd, d));
180
+ const all = (await Promise.all(dirs.map(d => walkDir(d).catch(() => [])))).flat();
181
181
  return all.filter((f) => {
182
182
  const rel = f.replace(cwd + sep, '').replace(cwd + '/', '');
183
183
  return TEST_FILE_RE.test(rel) && !shouldIgnore(f, config.ignore);
@@ -1 +1 @@
1
- {"version":3,"file":"gaps.js","sourceRoot":"","sources":["../../../src/lib/coverage/gaps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gaps.js","sourceRoot":"","sources":["../../../src/lib/coverage/gaps.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- export type TestRunner = 'jest' | 'vitest' | 'pytest' | 'mocha' | 'go-test' | 'unknown';
2
- export type Language = 'typescript' | 'javascript' | 'python' | 'go' | 'unknown';
1
+ export type TestRunner = 'jest' | 'vitest' | 'pytest' | 'mocha' | 'go-test' | 'phpunit' | 'pest' | 'rspec' | 'cargo-test' | 'dotnet-test' | 'gradle-test' | 'maven-test' | 'swift-test' | 'unknown';
2
+ export type Language = 'typescript' | 'javascript' | 'python' | 'go' | 'php' | 'ruby' | 'rust' | 'csharp' | 'java' | 'swift' | 'unknown';
3
3
  export interface DetectedEnvironment {
4
4
  testRunner: TestRunner;
5
5
  language: Language;
@@ -8,6 +8,7 @@ export interface DetectedEnvironment {
8
8
  testCommand: string;
9
9
  }
10
10
  export declare function envForRunner(runner: string): DetectedEnvironment;
11
+ export declare function multiFileTestCommand(env: DetectedEnvironment, files: string[]): string;
11
12
  export declare function fileTestCommand(env: DetectedEnvironment, testFilePath: string): string;
12
13
  export declare function detectEnvironment(cwd?: string, configRunner?: string): Promise<DetectedEnvironment>;
13
14
  //# sourceMappingURL=detector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/lib/detector.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;AACvF,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAA;AAEhF,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,UAAU,CAAA;IACtB,QAAQ,EAAE,QAAQ,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;CACpB;AAwCD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAUhE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAYtF;AAED,wBAAsB,iBAAiB,CACrC,GAAG,GAAE,MAAsB,EAC3B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,mBAAmB,CAAC,CA2C9B"}
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/lib/detector.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,CAAA;AACnM,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;AAExI,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,UAAU,CAAA;IACtB,QAAQ,EAAE,QAAQ,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;CACpB;AAgGD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAUhE;AAMD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CActF;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAoBtF;AAED,wBAAsB,iBAAiB,CACrC,GAAG,GAAE,MAAsB,EAC3B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,mBAAmB,CAAC,CAyE9B"}
@@ -36,6 +36,62 @@ const RUNNER_DEFAULTS = {
36
36
  coverageCommand: 'go test ./... -coverprofile=coverage/lcov.info',
37
37
  testCommand: 'go test ./...',
38
38
  },
39
+ phpunit: {
40
+ testRunner: 'phpunit',
41
+ language: 'php',
42
+ testFilePattern: '**/*Test.php',
43
+ coverageCommand: './vendor/bin/phpunit --coverage-clover coverage/clover.xml',
44
+ testCommand: './vendor/bin/phpunit',
45
+ },
46
+ pest: {
47
+ testRunner: 'pest',
48
+ language: 'php',
49
+ testFilePattern: '**/*.test.php',
50
+ coverageCommand: './vendor/bin/pest --coverage --coverage-clover coverage/clover.xml',
51
+ testCommand: './vendor/bin/pest',
52
+ },
53
+ rspec: {
54
+ testRunner: 'rspec',
55
+ language: 'ruby',
56
+ testFilePattern: 'spec/**/*_spec.rb',
57
+ coverageCommand: 'bundle exec rspec',
58
+ testCommand: 'bundle exec rspec',
59
+ },
60
+ 'cargo-test': {
61
+ testRunner: 'cargo-test',
62
+ language: 'rust',
63
+ testFilePattern: 'src/**/*.rs',
64
+ coverageCommand: 'cargo tarpaulin --out Lcov --output-dir coverage',
65
+ testCommand: 'cargo test',
66
+ },
67
+ 'dotnet-test': {
68
+ testRunner: 'dotnet-test',
69
+ language: 'csharp',
70
+ testFilePattern: '**/*Tests.cs',
71
+ coverageCommand: 'dotnet test --collect:"XPlat Code Coverage"',
72
+ testCommand: 'dotnet test',
73
+ },
74
+ 'gradle-test': {
75
+ testRunner: 'gradle-test',
76
+ language: 'java',
77
+ testFilePattern: 'src/test/**/*Test.java',
78
+ coverageCommand: './gradlew test jacocoTestReport',
79
+ testCommand: './gradlew test',
80
+ },
81
+ 'maven-test': {
82
+ testRunner: 'maven-test',
83
+ language: 'java',
84
+ testFilePattern: 'src/test/**/*Test.java',
85
+ coverageCommand: 'mvn test jacoco:report',
86
+ testCommand: 'mvn test',
87
+ },
88
+ 'swift-test': {
89
+ testRunner: 'swift-test',
90
+ language: 'swift',
91
+ testFilePattern: '**/*Tests.swift',
92
+ coverageCommand: 'swift test --enable-code-coverage',
93
+ testCommand: 'swift test',
94
+ },
39
95
  };
40
96
  export function envForRunner(runner) {
41
97
  return (RUNNER_DEFAULTS[runner] ?? {
@@ -46,6 +102,25 @@ export function envForRunner(runner) {
46
102
  testCommand: '',
47
103
  });
48
104
  }
105
+ // Run multiple test files in a single invocation, with the victim always last.
106
+ // Forces sequential execution in a single thread with shared module registry so that
107
+ // state pollution (module singletons, globals, localStorage) from earlier files is
108
+ // visible to the victim — required for bisect to reproduce ordering failures.
109
+ export function multiFileTestCommand(env, files) {
110
+ const fileList = files.join(' ');
111
+ switch (env.testRunner) {
112
+ case 'vitest':
113
+ // --poolOptions.threads.singleThread=true: all files run in one worker thread (shared globals)
114
+ // --no-isolate: all files share the same module registry (shared module singletons)
115
+ return `npx vitest run --poolOptions.threads.singleThread=true --no-isolate ${fileList}`;
116
+ case 'jest':
117
+ return `npx jest --runInBand ${fileList}`;
118
+ case 'mocha':
119
+ return `npx mocha ${fileList}`;
120
+ default:
121
+ return fileTestCommand(env, files[files.length - 1]);
122
+ }
123
+ }
49
124
  export function fileTestCommand(env, testFilePath) {
50
125
  switch (env.testRunner) {
51
126
  case 'vitest': return `npx vitest run ${testFilePath}`;
@@ -56,6 +131,14 @@ export function fileTestCommand(env, testFilePath) {
56
131
  const dir = testFilePath.includes('/') ? testFilePath.replace(/\/[^/]+$/, '') : '.';
57
132
  return `go test ./${dir}/...`;
58
133
  }
134
+ case 'phpunit': return `./vendor/bin/phpunit ${testFilePath}`;
135
+ case 'pest': return `./vendor/bin/pest ${testFilePath}`;
136
+ case 'rspec': return `bundle exec rspec ${testFilePath}`;
137
+ case 'cargo-test': return `cargo test`;
138
+ case 'dotnet-test': return `dotnet test --filter "${testFilePath.replace(/.*\//, '').replace(/Tests\.cs$/, '')}"`;
139
+ case 'gradle-test': return `./gradlew test --tests "${testFilePath.replace(/.*\//, '').replace(/Test\.java$/, '')}"`;
140
+ case 'maven-test': return `mvn test -Dtest="${testFilePath.replace(/.*\//, '').replace(/Test\.java$/, '')}"`;
141
+ case 'swift-test': return `swift test --filter "${testFilePath.replace(/.*\//, '').replace(/Tests\.swift$/, '')}"`;
59
142
  default: return `${env.testCommand} ${testFilePath}`;
60
143
  }
61
144
  }
@@ -95,6 +178,61 @@ export async function detectEnvironment(cwd = process.cwd(), configRunner) {
95
178
  return RUNNER_DEFAULTS['go-test'];
96
179
  }
97
180
  catch { /* not Go */ }
181
+ try {
182
+ await readFile(join(cwd, 'Cargo.toml'), 'utf-8');
183
+ return RUNNER_DEFAULTS['cargo-test'];
184
+ }
185
+ catch { /* not Rust */ }
186
+ try {
187
+ const gemfile = await readFile(join(cwd, 'Gemfile'), 'utf-8');
188
+ if (/\brspec\b/.test(gemfile))
189
+ return RUNNER_DEFAULTS.rspec;
190
+ }
191
+ catch { /* not Ruby */ }
192
+ try {
193
+ const composer = await readFile(join(cwd, 'composer.json'), 'utf-8');
194
+ const composerJson = JSON.parse(composer);
195
+ const composerDeps = { ...(composerJson.require ?? {}), ...(composerJson['require-dev'] ?? {}) };
196
+ if ('pestphp/pest' in composerDeps)
197
+ return RUNNER_DEFAULTS.pest;
198
+ if ('phpunit/phpunit' in composerDeps)
199
+ return RUNNER_DEFAULTS.phpunit;
200
+ return RUNNER_DEFAULTS.phpunit; // default to phpunit for any PHP project
201
+ }
202
+ catch { /* not PHP */ }
203
+ try {
204
+ await readFile(join(cwd, 'Directory.Build.props'), 'utf-8');
205
+ return RUNNER_DEFAULTS['dotnet-test'];
206
+ }
207
+ catch { /* not .NET */ }
208
+ // Also detect .csproj / .sln as C# indicators
209
+ try {
210
+ const { readdir } = await import('fs/promises');
211
+ const entries = await readdir(cwd);
212
+ if (entries.some(e => e.endsWith('.csproj') || e.endsWith('.sln')))
213
+ return RUNNER_DEFAULTS['dotnet-test'];
214
+ }
215
+ catch { /* not C# */ }
216
+ try {
217
+ await readFile(join(cwd, 'build.gradle'), 'utf-8');
218
+ return RUNNER_DEFAULTS['gradle-test'];
219
+ }
220
+ catch { /* not Gradle */ }
221
+ try {
222
+ await readFile(join(cwd, 'build.gradle.kts'), 'utf-8');
223
+ return RUNNER_DEFAULTS['gradle-test'];
224
+ }
225
+ catch { /* not Gradle Kotlin */ }
226
+ try {
227
+ await readFile(join(cwd, 'pom.xml'), 'utf-8');
228
+ return RUNNER_DEFAULTS['maven-test'];
229
+ }
230
+ catch { /* not Maven */ }
231
+ try {
232
+ await readFile(join(cwd, 'Package.swift'), 'utf-8');
233
+ return RUNNER_DEFAULTS['swift-test'];
234
+ }
235
+ catch { /* not Swift */ }
98
236
  return {
99
237
  testRunner: 'unknown',
100
238
  language: 'unknown',
@@ -1 +1 @@
1
- {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/lib/detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAa3B,MAAM,eAAe,GAAgE;IACnF,MAAM,EAAE;QACN,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,YAAY;QACtB,eAAe,EAAE,kCAAkC;QACnD,eAAe,EAAE,2BAA2B;QAC5C,WAAW,EAAE,gBAAgB;KAC9B;IACD,IAAI,EAAE;QACJ,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,YAAY;QACtB,eAAe,EAAE,kCAAkC;QACnD,eAAe,EAAE,qBAAqB;QACtC,WAAW,EAAE,UAAU;KACxB;IACD,KAAK,EAAE;QACL,UAAU,EAAE,OAAO;QACnB,QAAQ,EAAE,YAAY;QACtB,eAAe,EAAE,2BAA2B;QAC5C,eAAe,EAAE,eAAe;QAChC,WAAW,EAAE,WAAW;KACzB;IACD,MAAM,EAAE;QACN,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,QAAQ;QAClB,eAAe,EAAE,WAAW;QAC5B,eAAe,EAAE,0CAA0C;QAC3D,WAAW,EAAE,kBAAkB;KAChC;IACD,SAAS,EAAE;QACT,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,WAAW;QAC5B,eAAe,EAAE,gDAAgD;QACjE,WAAW,EAAE,eAAe;KAC7B;CACF,CAAA;AAED,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,CACL,eAAe,CAAC,MAAwC,CAAC,IAAI;QAC3D,UAAU,EAAE,SAAuB;QACnC,QAAQ,EAAE,SAAqB;QAC/B,eAAe,EAAE,aAAa;QAC9B,eAAe,EAAE,EAAE;QACnB,WAAW,EAAE,EAAE;KAChB,CACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAwB,EAAE,YAAoB;IAC5E,QAAQ,GAAG,CAAC,UAAU,EAAE,CAAC;QACvB,KAAK,QAAQ,CAAC,CAAC,OAAO,kBAAkB,YAAY,EAAE,CAAA;QACtD,KAAK,MAAM,CAAC,CAAG,OAAO,8BAA8B,YAAY,EAAE,CAAA;QAClE,KAAK,OAAO,CAAC,CAAE,OAAO,aAAa,YAAY,EAAE,CAAA;QACjD,KAAK,QAAQ,CAAC,CAAC,OAAO,oBAAoB,YAAY,KAAK,CAAA;QAC3D,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;YACnF,OAAO,aAAa,GAAG,MAAM,CAAA;QAC/B,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,WAAW,IAAI,YAAY,EAAE,CAAA;IACtD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAc,OAAO,CAAC,GAAG,EAAE,EAC3B,YAAqB;IAErB,yCAAyC;IACzC,IAAI,YAAY,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/C,OAAO,YAAY,CAAC,YAAY,CAAC,CAAA;IACnC,CAAC;IAED,IAAI,GAAG,GAA4B,EAAE,CAAA;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAA;QAC9D,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;IAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,CAAC;IAEpC,MAAM,IAAI,GAAG;QACX,GAAG,CAAE,GAAG,CAAC,YAAuC,IAAI,EAAE,CAAC;QACvD,GAAG,CAAE,GAAG,CAAC,eAA0C,IAAI,EAAE,CAAC;KAC3D,CAAA;IAED,IAAI,QAAQ,IAAI,IAAI;QAAE,OAAO,eAAe,CAAC,MAAM,CAAA;IACnD,IAAI,MAAM,IAAI,IAAI,IAAI,YAAY,IAAI,IAAI;QAAE,OAAO,eAAe,CAAC,IAAI,CAAA;IACvE,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,eAAe,CAAC,KAAK,CAAA;IAEjD,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAA;QAChD,OAAO,eAAe,CAAC,MAAM,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAA;QACpD,OAAO,eAAe,CAAC,MAAM,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAA;QAC5C,OAAO,eAAe,CAAC,SAAS,CAAC,CAAA;IACnC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAExB,OAAO;QACL,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,SAAS;QACnB,eAAe,EAAE,aAAa;QAC9B,eAAe,EAAE,EAAE;QACnB,WAAW,EAAE,EAAE;KAChB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/lib/detector.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/lib/providers/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE5D,qBAAa,iBAAkB,YAAW,aAAa;IACrD,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,KAAK,CAAQ;gBAET,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAKnC,QAAQ,CACZ,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,SAAS,SAAQ,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC;CAgCnB"}
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/lib/providers/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE5D,qBAAa,iBAAkB,YAAW,aAAa;IACrD,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,KAAK,CAAQ;gBAET,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAKnC,QAAQ,CACZ,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,SAAS,SAAQ,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC;CA6DnB"}
@@ -8,14 +8,28 @@ export class AnthropicProvider {
8
8
  }
9
9
  async generate(messages, system, onToken, maxTokens = 16000, temperature) {
10
10
  let content = '';
11
+ // Mark the first user message as cacheable — it holds the large initial context
12
+ // (source file, existing test, mocks, type definitions) that stays identical
13
+ // across all retries for a given file. Cache hits cost 10% of normal input price.
14
+ const anthropicMessages = messages.map((msg, i) => {
15
+ if (i === 0 && msg.role === 'user') {
16
+ return {
17
+ role: 'user',
18
+ content: [{ type: 'text', text: msg.content, cache_control: { type: 'ephemeral' } }],
19
+ };
20
+ }
21
+ return { role: msg.role, content: msg.content };
22
+ });
11
23
  try {
12
24
  const stream = this.client.messages.stream({
13
25
  model: this.model,
14
26
  max_tokens: maxTokens,
15
27
  stop_sequences: ['</code_output>'],
16
28
  ...(temperature !== undefined ? { temperature } : {}),
17
- system,
18
- messages,
29
+ // Cache the system prompt — same ~3000 tokens sent on every generate/fix/retry
30
+ // call and across all parallel workers. Without caching each call pays full price.
31
+ system: [{ type: 'text', text: system, cache_control: { type: 'ephemeral' } }],
32
+ messages: anthropicMessages,
19
33
  });
20
34
  for await (const event of stream) {
21
35
  if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {
@@ -25,11 +39,20 @@ export class AnthropicProvider {
25
39
  }
26
40
  }
27
41
  catch (err) {
28
- if (err instanceof Error && /prompt is too long|max_tokens.*exceed|too many tokens/i.test(err.message)) {
42
+ const msg = err instanceof Error ? err.message : String(err);
43
+ if (/prompt is too long|max_tokens.*exceed|too many tokens/i.test(msg)) {
29
44
  throw new Error(`${this.model} rejected the request — prompt too large.\n` +
30
45
  `The assembled context (source file + test file + type definitions + mocks) exceeds the model's input limit.\n` +
31
46
  `Try: lower maxTokens in .lacuna.json, or use --file to target a smaller source file.`);
32
47
  }
48
+ if (/rate.?limit|429|output tokens per minute|request.*exceed.*limit/i.test(msg)) {
49
+ throw new Error(`Anthropic rate limit hit — your account has a low output-token-per-minute cap (Tier 1: 8k TPM).\n` +
50
+ `Options:\n` +
51
+ ` 1. Lower maxTokens in .lacuna.json (e.g. "maxTokens": 4000) to reduce output per request.\n` +
52
+ ` 2. Use --workers 1 (default) to avoid parallel requests consuming your quota.\n` +
53
+ ` 3. Switch to a cheaper/higher-limit provider: lacuna generate -m deepseek\n` +
54
+ ` 4. Upgrade your Anthropic account tier: https://console.anthropic.com/settings/billing`);
55
+ }
33
56
  throw err;
34
57
  }
35
58
  return content.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/lib/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAA;AAGzC,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAW;IACjB,KAAK,CAAQ;IAErB,YAAY,KAAa,EAAE,MAAc;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,QAAuB,EACvB,MAAc,EACd,OAAiC,EACjC,SAAS,GAAG,KAAK,EACjB,WAAoB;QAEpB,IAAI,OAAO,GAAG,EAAE,CAAA;QAEhB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACzC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU,EAAE,SAAS;gBACrB,cAAc,EAAE,CAAC,gBAAgB,CAAC;gBAClC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,MAAM;gBACN,QAAQ;aACT,CAAC,CAAA;YAEF,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACjC,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC9E,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAA;oBAC3B,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,IAAI,wDAAwD,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvG,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,KAAK,6CAA6C;oBAC1D,+GAA+G;oBAC/G,sFAAsF,CACvF,CAAA;YACH,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,EAAE,CAAA;IACvB,CAAC;CACF"}
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/lib/providers/anthropic.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,6 @@ export declare class OpenAICompatibleProvider implements ModelProvider {
6
6
  baseURL: string;
7
7
  apiKey?: string;
8
8
  });
9
- generate(messages: ChatMessage[], system: string, onToken?: (token: string) => void, maxTokens?: number, temperature?: number): Promise<string>;
9
+ generate(messages: ChatMessage[], system: string, onToken?: (token: string) => void, maxTokens?: number, temperature?: number, _attempt?: number): Promise<string>;
10
10
  }
11
11
  //# sourceMappingURL=openai-compatible.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai-compatible.d.ts","sourceRoot":"","sources":["../../../src/lib/providers/openai-compatible.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE5D,qBAAa,wBAAyB,YAAW,aAAa;IAC5D,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,KAAK,CAAQ;gBAET,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAqDlE,QAAQ,CACZ,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,SAAS,SAAQ,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC;CAoCnB"}
1
+ {"version":3,"file":"openai-compatible.d.ts","sourceRoot":"","sources":["../../../src/lib/providers/openai-compatible.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE5D,qBAAa,wBAAyB,YAAW,aAAa;IAC5D,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,KAAK,CAAQ;gBAET,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAqDlE,QAAQ,CACZ,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,SAAS,SAAQ,EACjB,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,SAAI,GACX,OAAO,CAAC,MAAM,CAAC;CAsDnB"}
@@ -55,7 +55,7 @@ export class OpenAICompatibleProvider {
55
55
  });
56
56
  this.model = model;
57
57
  }
58
- async generate(messages, system, onToken, maxTokens = 16000, temperature) {
58
+ async generate(messages, system, onToken, maxTokens = 16000, temperature, _attempt = 0) {
59
59
  let content = '';
60
60
  try {
61
61
  const stream = await this.client.chat.completions.create({
@@ -83,8 +83,24 @@ export class OpenAICompatibleProvider {
83
83
  const body = e.error?.message
84
84
  ? `${e.error.message}${e.error.type ? ` (type: ${e.error.type})` : ''}${e.error.code ? ` [${e.error.code}]` : ''}`
85
85
  : (e.message ?? 'no message');
86
+ if (e.status === 429 || /rate.?limit|output tokens per minute|request.*exceed.*limit/i.test(body)) {
87
+ throw new Error(`Rate limit hit (HTTP 429) — ${this.model} is rejecting requests due to quota.\n` +
88
+ `Options:\n` +
89
+ ` 1. Lower maxTokens in .lacuna.json (e.g. "maxTokens": 4000) to reduce output per request.\n` +
90
+ ` 2. Use --workers 1 to avoid parallel requests consuming your quota.\n` +
91
+ ` 3. Try a different model: lacuna generate -m deepseek\n` +
92
+ ` 4. Check your provider's usage dashboard and upgrade if needed.`);
93
+ }
86
94
  throw new Error(`${this.model} API error (HTTP ${e.status ?? '?'}): ${body}`);
87
95
  }
96
+ // Transient network termination (ECONNRESET, stream aborted, "terminated") —
97
+ // common when many parallel workers flood a single API endpoint. Retry once
98
+ // with a short backoff before surfacing the error.
99
+ const msg = err instanceof Error ? err.message : String(err);
100
+ if (_attempt === 0 && /terminated|ECONNRESET|ECONNREFUSED|socket hang up|network error|aborted/i.test(msg)) {
101
+ await new Promise(r => setTimeout(r, 2000 + Math.random() * 1000));
102
+ return this.generate(messages, system, onToken, maxTokens, temperature, 1);
103
+ }
88
104
  throw err;
89
105
  }
90
106
  return content.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../../src/lib/providers/openai-compatible.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,MAAM,MAAM,QAAQ,CAAA;AAG3B,MAAM,OAAO,wBAAwB;IAC3B,MAAM,CAAQ;IACd,KAAK,CAAQ;IAErB,YAAY,KAAa,EAAE,OAA6C;QACtE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,iBAAiB;YAC3C,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,8DAA8D;YAC9D,wEAAwE;YACxE,uEAAuE;YACvE,0EAA0E;YAC1E,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBACzB,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;gBAClD,IAAI,QAAQ,CAAC,EAAE;oBAAE,OAAO,QAAQ,CAAA;gBAEhC,wDAAwD;gBACxD,6EAA6E;gBAC7E,uEAAuE;gBACvE,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;gBAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;gBACrD,IAAI,QAAgB,CAAA;gBACpB,IAAI,CAAC;oBACH,QAAQ,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;gBAC5F,CAAC;gBAAC,MAAM,CAAC;oBACP,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;gBAClC,CAAC;gBAED,0EAA0E;gBAC1E,mFAAmF;gBACnF,IAAI,UAAU,GAAG,QAAQ,CAAA;gBACzB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;oBAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;oBACrE,MAAM,GAAG,GAAI,GAAsC,EAAE,CAAC,OAAO,CAAwC,CAAA;oBACrG,IAAI,GAAG,EAAE,CAAC;wBACR,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;4BAC1B,KAAK,EAAE;gCACL,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC;gCACjE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC;gCACzD,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;6BACjD;yBACF,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,oEAAoE;gBACtE,CAAC;gBAED,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;gBAChD,UAAU,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;gBACrC,UAAU,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;gBAChF,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAA;YACpH,CAAC;SACF,CAAC,CAAA;QACF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,QAAuB,EACvB,MAAc,EACd,OAAiC,EACjC,SAAS,GAAG,KAAK,EACjB,WAAoB;QAEpB,IAAI,OAAO,GAAG,EAAE,CAAA;QAEhB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACvD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAE,CAAC,gBAAgB,CAAC;gBACxB,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;oBACnC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;iBAC/D;aACF,CAAC,CAAA;YAEF,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,CAAA;gBACpD,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,IAAI,KAAK,CAAA;oBAChB,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;gBAC9D,MAAM,CAAC,GAAG,GAAwG,CAAA;gBAClH,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO;oBAC3B,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBAClH,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,YAAY,CAAC,CAAA;gBAC/B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,oBAAoB,CAAC,CAAC,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,CAAC,CAAA;YAC/E,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,EAAE,CAAA;IACvB,CAAC;CACF"}
1
+ {"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../../src/lib/providers/openai-compatible.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ export declare function filterMockFileForTest(mocksCode: string, testCode: string): string;
2
+ export declare function filterMockFileForSource(mocksCode: string, sourceCode: string): string;
3
+ export declare function compressMockFile(code: string): string;
4
+ export declare function compressSource(source: string): string;
1
5
  export declare function shouldUseSkeleton(code: string): boolean;
2
6
  /**
3
7
  * Returns a skeletonized version of sourceCode.
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/lib/skeleton.ts"],"names":[],"mappings":"AAoEA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,GAAE,MAAM,EAAO,GAAG,MAAM,CAwD9F"}
1
+ {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/lib/skeleton.ts"],"names":[],"mappings":"AAMA,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqEjF;AAOD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAmFrF;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoCrD;AAMD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAiBrD;AAsED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,GAAE,MAAM,EAAO,GAAG,MAAM,CAwD9F"}