lacuna-cli 0.1.5 → 0.1.7
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 +83 -21
- package/dist/agent/context.d.ts +2 -0
- package/dist/agent/context.d.ts.map +1 -1
- package/dist/agent/context.js +314 -1
- package/dist/agent/context.js.map +1 -1
- package/dist/agent/fix-loop.d.ts +5 -0
- package/dist/agent/fix-loop.d.ts.map +1 -1
- package/dist/agent/fix-loop.js +376 -41
- package/dist/agent/fix-loop.js.map +1 -1
- package/dist/agent/generator.d.ts +8 -1
- package/dist/agent/generator.d.ts.map +1 -1
- package/dist/agent/generator.js +89 -11
- package/dist/agent/generator.js.map +1 -1
- package/dist/agent/loop.d.ts +8 -0
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +108 -46
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/{prompts.d.ts → prompts/index.d.ts} +12 -2
- package/dist/agent/prompts/index.d.ts.map +1 -0
- package/dist/agent/prompts/index.js +668 -0
- package/dist/agent/prompts/index.js.map +1 -0
- package/dist/agent/prompts/nextjs.d.ts +12 -0
- package/dist/agent/prompts/nextjs.d.ts.map +1 -0
- package/dist/agent/prompts/nextjs.js +138 -0
- package/dist/agent/prompts/nextjs.js.map +1 -0
- package/dist/agent/prompts/react-native.d.ts +4 -0
- package/dist/agent/prompts/react-native.d.ts.map +1 -0
- package/dist/agent/prompts/react-native.js +82 -0
- package/dist/agent/prompts/react-native.js.map +1 -0
- package/dist/agent/prompts/react.d.ts +2 -0
- package/dist/agent/prompts/react.d.ts.map +1 -0
- package/dist/agent/prompts/react.js +48 -0
- package/dist/agent/prompts/react.js.map +1 -0
- package/dist/agent/prompts/runners/js-common.d.ts +2 -0
- package/dist/agent/prompts/runners/js-common.d.ts.map +1 -0
- package/dist/agent/prompts/runners/js-common.js +13 -0
- package/dist/agent/prompts/runners/js-common.js.map +1 -0
- package/dist/agent/prompts/runners/typescript.d.ts +2 -0
- package/dist/agent/prompts/runners/typescript.d.ts.map +1 -0
- package/dist/agent/prompts/runners/typescript.js +12 -0
- package/dist/agent/prompts/runners/typescript.js.map +1 -0
- package/dist/agent/prompts/runners/vitest.d.ts +2 -0
- package/dist/agent/prompts/runners/vitest.d.ts.map +1 -0
- package/dist/agent/prompts/runners/vitest.js +23 -0
- package/dist/agent/prompts/runners/vitest.js.map +1 -0
- package/dist/agent/prompts/vue.d.ts +3 -0
- package/dist/agent/prompts/vue.d.ts.map +1 -0
- package/dist/agent/prompts/vue.js +29 -0
- package/dist/agent/prompts/vue.js.map +1 -0
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +43 -32
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/fix.d.ts +2 -0
- package/dist/commands/fix.d.ts.map +1 -1
- package/dist/commands/fix.js +32 -3
- package/dist/commands/fix.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +208 -32
- package/dist/commands/init.js.map +1 -1
- package/dist/lib/config.d.ts +3 -3
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +3 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/coverage/gaps.d.ts +2 -2
- package/dist/lib/coverage/gaps.d.ts.map +1 -1
- package/dist/lib/coverage/gaps.js +35 -5
- package/dist/lib/coverage/gaps.js.map +1 -1
- package/dist/lib/coverage/index.d.ts +1 -1
- package/dist/lib/coverage/index.d.ts.map +1 -1
- package/dist/lib/coverage/index.js +1 -1
- package/dist/lib/coverage/index.js.map +1 -1
- package/dist/lib/detector.d.ts +1 -0
- package/dist/lib/detector.d.ts.map +1 -1
- package/dist/lib/detector.js +41 -8
- package/dist/lib/detector.js.map +1 -1
- package/dist/lib/providers/anthropic.d.ts.map +1 -1
- package/dist/lib/providers/anthropic.js +46 -3
- package/dist/lib/providers/anthropic.js.map +1 -1
- package/dist/lib/providers/openai-compatible.d.ts +1 -1
- package/dist/lib/providers/openai-compatible.d.ts.map +1 -1
- package/dist/lib/providers/openai-compatible.js +43 -2
- package/dist/lib/providers/openai-compatible.js.map +1 -1
- package/dist/lib/providers/types.d.ts +4 -0
- package/dist/lib/providers/types.d.ts.map +1 -1
- package/dist/lib/providers/types.js +10 -0
- package/dist/lib/providers/types.js.map +1 -1
- package/dist/lib/skeleton.d.ts +4 -0
- package/dist/lib/skeleton.d.ts.map +1 -1
- package/dist/lib/skeleton.js +220 -0
- package/dist/lib/skeleton.js.map +1 -1
- package/dist/lib/validate.d.ts +1 -0
- package/dist/lib/validate.d.ts.map +1 -1
- package/dist/lib/validate.js +179 -15
- package/dist/lib/validate.js.map +1 -1
- package/dist/lib/worker-display.d.ts +10 -0
- package/dist/lib/worker-display.d.ts.map +1 -1
- package/dist/lib/worker-display.js +53 -5
- package/dist/lib/worker-display.js.map +1 -1
- package/oclif.manifest.json +16 -2
- package/package.json +1 -1
- package/dist/agent/prompts.d.ts.map +0 -1
- package/dist/agent/prompts.js +0 -632
- package/dist/agent/prompts.js.map +0 -1
- package/dist/lib/report-upload.d.ts +0 -3
- package/dist/lib/report-upload.d.ts.map +0 -1
- package/dist/lib/report-upload.js +0 -15
- package/dist/lib/report-upload.js.map +0 -1
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { gunzipSync } from 'node:zlib';
|
|
2
2
|
import OpenAI from 'openai';
|
|
3
|
+
import { ModelStallError } from './types.js';
|
|
4
|
+
const FIRST_TOKEN_TIMEOUT_MS = 30_000;
|
|
5
|
+
const STALL_TIMEOUT_MS = 60_000;
|
|
3
6
|
export class OpenAICompatibleProvider {
|
|
4
7
|
client;
|
|
5
8
|
model;
|
|
@@ -55,8 +58,19 @@ export class OpenAICompatibleProvider {
|
|
|
55
58
|
});
|
|
56
59
|
this.model = model;
|
|
57
60
|
}
|
|
58
|
-
async generate(messages, system, onToken, maxTokens = 16000, temperature) {
|
|
61
|
+
async generate(messages, system, onToken, maxTokens = 16000, temperature, _attempt = 0) {
|
|
59
62
|
let content = '';
|
|
63
|
+
const controller = new AbortController();
|
|
64
|
+
let firstTokenReceived = false;
|
|
65
|
+
let lastTokenAt = 0;
|
|
66
|
+
const firstTokenTimer = setTimeout(() => {
|
|
67
|
+
controller.abort('first-token-timeout');
|
|
68
|
+
}, FIRST_TOKEN_TIMEOUT_MS);
|
|
69
|
+
const stallInterval = setInterval(() => {
|
|
70
|
+
if (firstTokenReceived && Date.now() - lastTokenAt > STALL_TIMEOUT_MS) {
|
|
71
|
+
controller.abort('stream-stall');
|
|
72
|
+
}
|
|
73
|
+
}, 5_000);
|
|
60
74
|
try {
|
|
61
75
|
const stream = await this.client.chat.completions.create({
|
|
62
76
|
model: this.model,
|
|
@@ -68,16 +82,29 @@ export class OpenAICompatibleProvider {
|
|
|
68
82
|
{ role: 'system', content: system },
|
|
69
83
|
...messages.map((m) => ({ role: m.role, content: m.content })),
|
|
70
84
|
],
|
|
71
|
-
});
|
|
85
|
+
}, { signal: controller.signal });
|
|
72
86
|
for await (const chunk of stream) {
|
|
73
87
|
const token = chunk.choices[0]?.delta?.content ?? '';
|
|
74
88
|
if (token) {
|
|
89
|
+
if (!firstTokenReceived) {
|
|
90
|
+
firstTokenReceived = true;
|
|
91
|
+
clearTimeout(firstTokenTimer);
|
|
92
|
+
lastTokenAt = Date.now();
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
lastTokenAt = Date.now();
|
|
96
|
+
}
|
|
75
97
|
content += token;
|
|
76
98
|
onToken?.(token);
|
|
77
99
|
}
|
|
78
100
|
}
|
|
79
101
|
}
|
|
80
102
|
catch (err) {
|
|
103
|
+
if (controller.signal.aborted) {
|
|
104
|
+
clearTimeout(firstTokenTimer);
|
|
105
|
+
clearInterval(stallInterval);
|
|
106
|
+
throw new ModelStallError(controller.signal.reason === 'first-token-timeout' ? 'first-token-timeout' : 'stream-stall');
|
|
107
|
+
}
|
|
81
108
|
if (err != null && typeof err === 'object' && 'status' in err) {
|
|
82
109
|
const e = err;
|
|
83
110
|
const body = e.error?.message
|
|
@@ -93,8 +120,22 @@ export class OpenAICompatibleProvider {
|
|
|
93
120
|
}
|
|
94
121
|
throw new Error(`${this.model} API error (HTTP ${e.status ?? '?'}): ${body}`);
|
|
95
122
|
}
|
|
123
|
+
// Transient network termination (ECONNRESET, stream aborted, "terminated") —
|
|
124
|
+
// common when many parallel workers flood a single API endpoint. Retry once
|
|
125
|
+
// with a short backoff before surfacing the error.
|
|
126
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
127
|
+
if (_attempt === 0 && /terminated|ECONNRESET|ECONNREFUSED|socket hang up|network error/i.test(msg)) {
|
|
128
|
+
clearTimeout(firstTokenTimer);
|
|
129
|
+
clearInterval(stallInterval);
|
|
130
|
+
await new Promise(r => setTimeout(r, 2000 + Math.random() * 1000));
|
|
131
|
+
return this.generate(messages, system, onToken, maxTokens, temperature, 1);
|
|
132
|
+
}
|
|
96
133
|
throw err;
|
|
97
134
|
}
|
|
135
|
+
finally {
|
|
136
|
+
clearTimeout(firstTokenTimer);
|
|
137
|
+
clearInterval(stallInterval);
|
|
138
|
+
}
|
|
98
139
|
return content.trim();
|
|
99
140
|
}
|
|
100
141
|
}
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../../src/lib/providers/openai-compatible.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,5 +13,9 @@ export interface ProviderPreset {
|
|
|
13
13
|
apiKeyEnv: string;
|
|
14
14
|
apiKeyHint: string;
|
|
15
15
|
}
|
|
16
|
+
export declare class ModelStallError extends Error {
|
|
17
|
+
readonly reason: 'first-token-timeout' | 'stream-stall';
|
|
18
|
+
constructor(reason: 'first-token-timeout' | 'stream-stall');
|
|
19
|
+
}
|
|
16
20
|
export declare const PRESETS: Record<string, ProviderPreset>;
|
|
17
21
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/providers/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CACN,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,SAAS,CAAC,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,WAAW,GAAG,mBAAmB,CAAA;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CA+FlD,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/providers/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CACN,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,SAAS,CAAC,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,WAAW,GAAG,mBAAmB,CAAA;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,eAAgB,SAAQ,KAAK;aACZ,MAAM,EAAE,qBAAqB,GAAG,cAAc;gBAA9C,MAAM,EAAE,qBAAqB,GAAG,cAAc;CAQ3E;AAED,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CA+FlD,CAAA"}
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
export class ModelStallError extends Error {
|
|
2
|
+
reason;
|
|
3
|
+
constructor(reason) {
|
|
4
|
+
super(reason === 'first-token-timeout'
|
|
5
|
+
? 'No response from model after 30s — connection may be down'
|
|
6
|
+
: 'Model stream stalled — no tokens received for 60s');
|
|
7
|
+
this.reason = reason;
|
|
8
|
+
this.name = 'ModelStallError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
1
11
|
export const PRESETS = {
|
|
2
12
|
claude: {
|
|
3
13
|
label: 'Claude (Anthropic) — claude-sonnet-4-6',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/providers/types.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,MAAM,OAAO,GAAmC;IACrD,MAAM,EAAE;QACN,KAAK,EAAE,wCAAwC;QAC/C,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,mBAAmB;QAC1B,SAAS,EAAE,mBAAmB;QAC9B,UAAU,EAAE,+BAA+B;KAC5C;IACD,aAAa,EAAE;QACb,KAAK,EAAE,2CAA2C;QAClD,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,iBAAiB;QACxB,SAAS,EAAE,mBAAmB;QAC9B,UAAU,EAAE,+BAA+B;KAC5C;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,0BAA0B;QACjC,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,6BAA6B;QACtC,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,+BAA+B;KAC5C;IACD,aAAa,EAAE;QACb,KAAK,EAAE,6CAA6C;QACpD,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,mBAAmB;QAC1B,OAAO,EAAE,6BAA6B;QACtC,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,+BAA+B;KAC5C;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,iBAAiB;QACxB,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,2BAA2B;QACpC,SAAS,EAAE,gBAAgB;QAC3B,UAAU,EAAE,sCAAsC;KACnD;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,yCAAyC;QAChD,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,yBAAyB;QAChC,OAAO,EAAE,gCAAgC;QACzC,SAAS,EAAE,cAAc;QACzB,UAAU,EAAE,0BAA0B;KACvC;IACD,UAAU,EAAE;QACV,KAAK,EAAE,qCAAqC;QAC5C,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,6BAA6B;QACpC,OAAO,EAAE,8BAA8B;QACvC,SAAS,EAAE,oBAAoB;QAC/B,UAAU,EAAE,4BAA4B;KACzC;IACD,MAAM,EAAE;QACN,KAAK,EAAE,2CAA2C;QAClD,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,2BAA2B;QACpC,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,2BAA2B;KACxC;IACD,WAAW,EAAE;QACX,KAAK,EAAE,8CAA8C;QACrD,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,0BAA0B;QACnC,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,qCAAqC;KAClD;IACD,MAAM,EAAE;QACN,KAAK,EAAE,yBAAyB;QAChC,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,0DAA0D;QACnE,SAAS,EAAE,gBAAgB;QAC3B,UAAU,EAAE,oCAAoC;KACjD;IACD,cAAc,EAAE;QACd,KAAK,EAAE,0CAA0C;QACjD,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,kBAAkB;QACzB,OAAO,EAAE,0DAA0D;QACnE,SAAS,EAAE,gBAAgB;QAC3B,UAAU,EAAE,oCAAoC;KACjD;IACD,MAAM,EAAE;QACN,KAAK,EAAE,yCAAyC;QAChD,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,aAAa;QACxB,UAAU,EAAE,oBAAoB;KACjC;CACF,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/providers/types.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/skeleton.d.ts
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/lib/skeleton.js
CHANGED
|
@@ -1,3 +1,223 @@
|
|
|
1
|
+
// Filters a shared mock file to only the sections the failing test actually uses.
|
|
2
|
+
// Scans the test file's imports from the mock file, then returns:
|
|
3
|
+
// - export declarations for those specific names
|
|
4
|
+
// - vi.mock() blocks that reference any of those names
|
|
5
|
+
// Falls back to the full file if no imports can be detected.
|
|
6
|
+
// This prevents burning tokens on 40 unrelated service mocks when fixing a billing test.
|
|
7
|
+
export function filterMockFileForTest(mocksCode, testCode) {
|
|
8
|
+
// Extract mock variable names the test imports from the mock file
|
|
9
|
+
const importedNames = new Set();
|
|
10
|
+
for (const m of testCode.matchAll(/import\s*\{([^}]+)\}\s*from\s*['"][^'"]*mock[s]?[^'"]*['"]/g)) {
|
|
11
|
+
for (const part of m[1].split(',')) {
|
|
12
|
+
const name = part.trim().split(/\s+as\s+/)[0].trim();
|
|
13
|
+
if (name && /^\w+$/.test(name))
|
|
14
|
+
importedNames.add(name);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
if (importedNames.size === 0)
|
|
18
|
+
return mocksCode;
|
|
19
|
+
const lines = mocksCode.split('\n');
|
|
20
|
+
const include = new Set();
|
|
21
|
+
// Include export declaration lines for imported names
|
|
22
|
+
for (let i = 0; i < lines.length; i++) {
|
|
23
|
+
for (const name of importedNames) {
|
|
24
|
+
if (new RegExp(`\\bexport\\b[^{\\n]*\\b${name}\\b`).test(lines[i])) {
|
|
25
|
+
include.add(i);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Include vi.mock() blocks that reference any imported name
|
|
30
|
+
let i = 0;
|
|
31
|
+
while (i < lines.length) {
|
|
32
|
+
if (/\bvi\.mock\(/.test(lines[i])) {
|
|
33
|
+
const blockStart = i;
|
|
34
|
+
let depth = 0;
|
|
35
|
+
let j = i;
|
|
36
|
+
// Scan to the end of this mock call (balanced parens)
|
|
37
|
+
while (j < lines.length) {
|
|
38
|
+
for (const ch of lines[j]) {
|
|
39
|
+
if (ch === '(')
|
|
40
|
+
depth++;
|
|
41
|
+
if (ch === ')')
|
|
42
|
+
depth--;
|
|
43
|
+
}
|
|
44
|
+
j++;
|
|
45
|
+
if (depth === 0)
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
const blockText = lines.slice(blockStart, j).join('\n');
|
|
49
|
+
for (const name of importedNames) {
|
|
50
|
+
if (new RegExp(`\\b${name}\\b`).test(blockText)) {
|
|
51
|
+
for (let k = blockStart; k < j; k++)
|
|
52
|
+
include.add(k);
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
i = j;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
i++;
|
|
60
|
+
}
|
|
61
|
+
// Reconstruct, collapsing gaps to a single blank line
|
|
62
|
+
const result = [];
|
|
63
|
+
let gapped = false;
|
|
64
|
+
for (let i = 0; i < lines.length; i++) {
|
|
65
|
+
if (include.has(i)) {
|
|
66
|
+
result.push(lines[i]);
|
|
67
|
+
gapped = false;
|
|
68
|
+
}
|
|
69
|
+
else if (!gapped) {
|
|
70
|
+
result.push('');
|
|
71
|
+
gapped = true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const filtered = result.join('\n').replace(/\n{3,}/g, '\n\n').trim();
|
|
75
|
+
// Safety: if filter stripped too aggressively, fall back to full file
|
|
76
|
+
return filtered.length < 50 ? mocksCode : filtered;
|
|
77
|
+
}
|
|
78
|
+
// Filters a shared mock file to sections relevant to the source file being tested.
|
|
79
|
+
// Used in generate prompts (no test file exists yet) — scans the source file's imports
|
|
80
|
+
// and returns vi.mock() blocks for those same module paths, plus any mock variables
|
|
81
|
+
// whose name matches the pattern mock<ImportedName> (e.g. WorkspacesClient → mockWorkspacesClient).
|
|
82
|
+
// This gives the AI the shapes of mocks it will need without sending the whole file.
|
|
83
|
+
export function filterMockFileForSource(mocksCode, sourceCode) {
|
|
84
|
+
// Extract module paths the source imports from
|
|
85
|
+
const importedPaths = new Set();
|
|
86
|
+
for (const m of sourceCode.matchAll(/^import[^'"]*['"]([^'"]+)['"]/gm)) {
|
|
87
|
+
importedPaths.add(m[1]);
|
|
88
|
+
}
|
|
89
|
+
if (importedPaths.size === 0)
|
|
90
|
+
return mocksCode;
|
|
91
|
+
const lines = mocksCode.split('\n');
|
|
92
|
+
const include = new Set();
|
|
93
|
+
// Include vi.mock() blocks whose module path matches a source import
|
|
94
|
+
let i = 0;
|
|
95
|
+
while (i < lines.length) {
|
|
96
|
+
const mockMatch = lines[i].match(/\bvi\.mock\(\s*(['"])([^'"]+)\1/);
|
|
97
|
+
if (mockMatch) {
|
|
98
|
+
const mockedPath = mockMatch[2];
|
|
99
|
+
const blockStart = i;
|
|
100
|
+
let depth = 0;
|
|
101
|
+
let j = i;
|
|
102
|
+
while (j < lines.length) {
|
|
103
|
+
for (const ch of lines[j]) {
|
|
104
|
+
if (ch === '(')
|
|
105
|
+
depth++;
|
|
106
|
+
if (ch === ')')
|
|
107
|
+
depth--;
|
|
108
|
+
}
|
|
109
|
+
j++;
|
|
110
|
+
if (depth === 0)
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
// Include if the mocked path is directly imported by the source, or the source
|
|
114
|
+
// imports something from the same package (e.g. source imports WorkspacesClient
|
|
115
|
+
// from '@/lib/client/services/index.client' → include index.client mock block)
|
|
116
|
+
const relevant = [...importedPaths].some(p => p === mockedPath || p.includes(mockedPath) || mockedPath.includes(p.split('/').pop() ?? ''));
|
|
117
|
+
if (relevant) {
|
|
118
|
+
for (let k = blockStart; k < j; k++)
|
|
119
|
+
include.add(k);
|
|
120
|
+
}
|
|
121
|
+
i = j;
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
i++;
|
|
125
|
+
}
|
|
126
|
+
// Include export declarations for mock variables inferred from source imports.
|
|
127
|
+
// e.g. source imports `getSession` → look for `mockGetSession` (capitalise the first letter
|
|
128
|
+
// after the `mock` prefix to match the camelCase convention used in mock files).
|
|
129
|
+
// Also try lowercase fallback (`mockgetSession`) in case the file uses it.
|
|
130
|
+
const inferredNames = new Set();
|
|
131
|
+
for (const m of sourceCode.matchAll(/\bimport\s*\{([^}]+)\}/gm)) {
|
|
132
|
+
for (const part of m[1].split(',')) {
|
|
133
|
+
const name = part.trim().split(/\s+as\s+/)[0].trim();
|
|
134
|
+
if (!name)
|
|
135
|
+
continue;
|
|
136
|
+
// Capitalised prefix: mock + GetSession
|
|
137
|
+
inferredNames.add(`mock${name[0].toUpperCase()}${name.slice(1)}`);
|
|
138
|
+
// Lowercase prefix fallback: mock + getSession
|
|
139
|
+
inferredNames.add(`mock${name}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
for (let i = 0; i < lines.length; i++) {
|
|
143
|
+
for (const name of inferredNames) {
|
|
144
|
+
if (new RegExp(`\\bexport\\b[^{\\n]*\\b${name}\\b`).test(lines[i])) {
|
|
145
|
+
include.add(i);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (include.size === 0)
|
|
150
|
+
return mocksCode;
|
|
151
|
+
const result = [];
|
|
152
|
+
let gapped = false;
|
|
153
|
+
for (let i = 0; i < lines.length; i++) {
|
|
154
|
+
if (include.has(i)) {
|
|
155
|
+
result.push(lines[i]);
|
|
156
|
+
gapped = false;
|
|
157
|
+
}
|
|
158
|
+
else if (!gapped) {
|
|
159
|
+
result.push('');
|
|
160
|
+
gapped = true;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const filtered = result.join('\n').replace(/\n{3,}/g, '\n\n').trim();
|
|
164
|
+
return filtered.length < 50 ? mocksCode : filtered;
|
|
165
|
+
}
|
|
166
|
+
// Compresses a shared mock file before sending in a fix prompt.
|
|
167
|
+
// The generate prompt skips the raw file entirely (inventory + exports list suffices).
|
|
168
|
+
// Here we keep the file readable but strip multi-line vi.fn() implementations —
|
|
169
|
+
// the AI only needs to know the mock EXISTS and its name, not its JSX body.
|
|
170
|
+
export function compressMockFile(code) {
|
|
171
|
+
const lines = code.split('\n');
|
|
172
|
+
const result = [];
|
|
173
|
+
let i = 0;
|
|
174
|
+
while (i < lines.length) {
|
|
175
|
+
const line = lines[i];
|
|
176
|
+
// Detect a multi-line vi.fn() body: `export const mockFoo = vi.fn(` that doesn't close on the same line.
|
|
177
|
+
// These are icon/component mocks returning React.createElement — the AI only needs the name.
|
|
178
|
+
const multiLineFn = line.match(/^(export const \w+) = vi\.fn\(/);
|
|
179
|
+
if (multiLineFn) {
|
|
180
|
+
const openParens = (line.match(/\(/g) ?? []).length;
|
|
181
|
+
const closeParens = (line.match(/\)/g) ?? []).length;
|
|
182
|
+
if (openParens > closeParens) {
|
|
183
|
+
// Multi-line — scan forward to find the closing paren, then emit a collapsed form
|
|
184
|
+
let depth = openParens - closeParens;
|
|
185
|
+
i++;
|
|
186
|
+
while (i < lines.length && depth > 0) {
|
|
187
|
+
for (const ch of lines[i]) {
|
|
188
|
+
if (ch === '(')
|
|
189
|
+
depth++;
|
|
190
|
+
if (ch === ')')
|
|
191
|
+
depth--;
|
|
192
|
+
}
|
|
193
|
+
i++;
|
|
194
|
+
}
|
|
195
|
+
result.push(`${multiLineFn[1]} = vi.fn()`);
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
result.push(line);
|
|
200
|
+
i++;
|
|
201
|
+
}
|
|
202
|
+
// Collapse 3+ blank lines to 1
|
|
203
|
+
return result.join('\n').replace(/\n{3,}/g, '\n\n').trim();
|
|
204
|
+
}
|
|
205
|
+
// Removes documentation dead-weight from source code before sending to the AI.
|
|
206
|
+
// Targets content that costs tokens but adds no signal for test generation:
|
|
207
|
+
// license headers, long JSDoc blocks, and excessive blank lines.
|
|
208
|
+
// Intentionally conservative: short JSDoc (≤6 lines) and all inline // comments are kept.
|
|
209
|
+
export function compressSource(source) {
|
|
210
|
+
let out = source;
|
|
211
|
+
// Strip license / copyright block comments at the very top of the file.
|
|
212
|
+
// These are always before the first import and never describe testable behaviour.
|
|
213
|
+
out = out.replace(/^(?:\/\*[\s\S]*?(?:license|copyright|\bMIT\b|\bApache\b|\bGPL\b|@license)[\s\S]*?\*\/\s*)+/i, '');
|
|
214
|
+
// Strip block comments longer than 6 lines. Short ones (≤6 lines) describe
|
|
215
|
+
// edge cases and error conditions worth keeping; long ones are @param/@example boilerplate.
|
|
216
|
+
out = out.replace(/\/\*[\s\S]*?\*\//g, (match) => match.split('\n').length > 6 ? '' : match);
|
|
217
|
+
// Collapse 3+ consecutive blank lines to 1.
|
|
218
|
+
out = out.replace(/\n{3,}/g, '\n\n');
|
|
219
|
+
return out.trim();
|
|
220
|
+
}
|
|
1
221
|
// Generates a compact structural summary of a TypeScript/JavaScript source file.
|
|
2
222
|
// Large files are skeletonized: only the functions that need to be tested are expanded
|
|
3
223
|
// to their full implementation; everything else is collapsed to its signature.
|
package/dist/lib/skeleton.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../src/lib/skeleton.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../src/lib/skeleton.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/validate.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare function sanitizeMocksContent(raw: string): {
|
|
|
11
11
|
code: string;
|
|
12
12
|
stripped: boolean;
|
|
13
13
|
};
|
|
14
|
+
export declare function deduplicateViMocks(code: string): string;
|
|
14
15
|
export declare function buildStructureBrokenMessage(initialError: string, currentError: string): string;
|
|
15
16
|
export declare function buildRegressionMessage(initialError: string, currentError: string, baselinePass: number, currentPass: number): string;
|
|
16
17
|
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/lib/validate.ts"],"names":[],"mappings":"AAYA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGtD;AAID,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBzD;AAID,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEtD;AAKD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOrD;AAOD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAWzF;AAOD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqC5E;AA0CD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/lib/validate.ts"],"names":[],"mappings":"AAYA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGtD;AAID,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBzD;AAID,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEtD;AAKD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOrD;AAOD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAWzF;AAOD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqC5E;AA0CD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAqDrF;AAOD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA2HvD;AAQD,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAiB9F;AAKD,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,MAAM,CAcR"}
|