lacuna-cli 0.1.2 → 0.1.3

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.
@@ -48,6 +48,157 @@ export function parsePassCount(output) {
48
48
  const m = output.match(/(\d+)\s+passed/);
49
49
  return m ? parseInt(m[1], 10) : 0;
50
50
  }
51
+ // Strips leading prose/thinking lines from generated code output.
52
+ // When a model bleeds reasoning into <code_output>, the file starts with fragments
53
+ // like ", nothing else." or "I'll write the test now." before the real code begins.
54
+ // Scans forward to the first valid TypeScript/code line and strips everything before it.
55
+ // Returns the cleaned code and whether anything was stripped.
56
+ export function stripLeadingProse(code) {
57
+ // Valid first lines for TypeScript/JS, Python, and Go — all languages lacuna supports.
58
+ const VALID_START = /^\s*(import\b|export\b|const\b|let\b|var\b|function\b|class\b|describe\s*\(|it\s*\(|test\s*[(\s]|vi\.|jest\.|before(?:Each|All)\b|after(?:Each|All)\b|\/\/|\/\*|\*\s|type\s+\w|interface\s+\w|enum\s+\w|def\s+\w|async\s+def\s+\w|@\w|pytest\b|package\s+\w|func\s+\w|#)/;
59
+ const lines = code.split('\n');
60
+ const firstCode = lines.findIndex(l => VALID_START.test(l));
61
+ if (firstCode <= 0)
62
+ return { code, stripped: null }; // starts correctly or no code found
63
+ const leakedText = lines.slice(0, firstCode).join('\n').trim().slice(0, 120);
64
+ return { code: lines.slice(firstCode).join('\n'), stripped: leakedText };
65
+ }
66
+ // Merges new mocks content with an existing mocks file without duplicating.
67
+ // Three cases:
68
+ // 1. Existing is empty → use incoming as-is
69
+ // 2. Incoming contains all existing exports (complete replacement) → use incoming
70
+ // 3. Incoming is partial → extract ONLY the new exports and append them
71
+ export function mergeMocksContent(existing, incoming) {
72
+ const existingNames = new Set(extractExportNames(existing));
73
+ if (existingNames.size === 0)
74
+ return incoming;
75
+ const incomingNames = extractExportNames(incoming);
76
+ // Case 2: incoming is a superset — safe to replace entirely
77
+ if (incomingNames.length > 0 && [...existingNames].every(n => incomingNames.includes(n))) {
78
+ return incoming;
79
+ }
80
+ // Case 3: incoming is partial — extract only truly new export declarations
81
+ const newNames = new Set(incomingNames.filter(n => !existingNames.has(n)));
82
+ if (newNames.size === 0)
83
+ return existing; // nothing new, keep existing unchanged
84
+ // Walk lines and capture blocks that belong to new exports.
85
+ // Capturing starts on `export const/function/class X` where X is new,
86
+ // and continues until the next export declaration (handles multi-line exports).
87
+ const lines = incoming.split('\n');
88
+ const toAppend = [];
89
+ let capturing = false;
90
+ for (const line of lines) {
91
+ const exportMatch = line.match(/^\s*export\s+(?:const|let|var|function|async\s+function|class)\s+(\w+)/);
92
+ if (exportMatch) {
93
+ capturing = newNames.has(exportMatch[1]);
94
+ }
95
+ else if (/^\s*import\b/.test(line)) {
96
+ // Include import statements that are not already in the existing file
97
+ if (!existing.includes(line.trim()))
98
+ toAppend.push(line);
99
+ capturing = false;
100
+ continue;
101
+ }
102
+ if (capturing)
103
+ toAppend.push(line);
104
+ }
105
+ const appended = toAppend.join('\n').trim();
106
+ return appended ? existing.trimEnd() + '\n\n' + appended : existing;
107
+ }
108
+ function extractExportNames(code) {
109
+ const names = [];
110
+ for (const m of code.matchAll(/^export\s+(?:const|let|var|function|class|async\s+function)\s+(\w+)/gm))
111
+ names.push(m[1]);
112
+ for (const m of code.matchAll(/^export\s*\{([^}]+)\}/gm)) {
113
+ for (const part of m[1].split(',')) {
114
+ const alias = part.trim().split(/\s+as\s+/).pop()?.trim();
115
+ if (alias && /^\w+$/.test(alias))
116
+ names.push(alias);
117
+ }
118
+ }
119
+ return [...new Set(names)];
120
+ }
121
+ // Returns true when content is clearly prose/thinking rather than TypeScript.
122
+ // Conservative by design: any real code line (export, const, vi., import) means
123
+ // it's not prose, even if comments look sentence-like.
124
+ function isProseContent(content) {
125
+ const lines = content.split('\n').filter(l => l.trim().length > 0);
126
+ if (lines.length === 0)
127
+ return false;
128
+ // If ANY line looks like real TypeScript/JS code, it's not prose.
129
+ // This prevents false positives on mock files with sentence-like comments.
130
+ const hasCode = lines.some(l => /^\s*(import\s|export\s+(const|let|function|class|default|type|interface)\s)/.test(l) ||
131
+ /^\s*(const|let|var)\s+\w/.test(l) ||
132
+ /^\s*vi\.|^\s*jest\./.test(l) ||
133
+ /^\s*(beforeEach|afterEach|beforeAll|afterAll)\s*\(/.test(l));
134
+ if (hasCode)
135
+ return false;
136
+ // No code found — check for thinking/reasoning patterns that confirm it's prose
137
+ const thinkingPatterns = /\bI think\b|\bLet me\b|\bActually,?\s|\bBut wait\b|\bHmm,?\b/m.test(content);
138
+ const bulletLines = lines.filter(l => /^[-*]\s/.test(l)).length;
139
+ return thinkingPatterns || bulletLines > 5;
140
+ }
141
+ // Removes content that does not belong in a shared mock file.
142
+ // Strips: test blocks (describe/it/test/expect), framework config
143
+ // (defineConfig exports, vitest/jest config objects), whole-file prose,
144
+ // and trailing prose that appears after valid mock definitions.
145
+ export function sanitizeMocksContent(raw) {
146
+ // Prose/thinking detection — reject wholesale if content is not code
147
+ if (isProseContent(raw))
148
+ return { code: '', stripped: true };
149
+ // Reject if content looks like a framework config file
150
+ const CONFIG_FILE_RE = /defineConfig\s*\(|module\.exports\s*=\s*\{[^}]*(?:test|resolve|plugins)\s*:/s;
151
+ if (CONFIG_FILE_RE.test(raw))
152
+ return { code: '', stripped: true };
153
+ const TEST_START = /^\s*(describe|it|test)\s*[.(]|^\s*expect\s*\(/;
154
+ const CONFIG_START = /^\s*export\s+default\s+(defineConfig\s*\(|\{)|^\s*module\.exports\s*=/;
155
+ const lines = raw.split('\n');
156
+ const kept = [];
157
+ let depth = 0;
158
+ let inBlock = false;
159
+ let stripped = false;
160
+ for (const line of lines) {
161
+ if (!inBlock && (TEST_START.test(line) || CONFIG_START.test(line))) {
162
+ inBlock = true;
163
+ stripped = true;
164
+ }
165
+ if (inBlock) {
166
+ for (const ch of line) {
167
+ if (ch === '{' || ch === '(')
168
+ depth++;
169
+ else if (ch === '}' || ch === ')') {
170
+ depth--;
171
+ if (depth < 0)
172
+ depth = 0;
173
+ }
174
+ }
175
+ if (depth === 0)
176
+ inBlock = false;
177
+ continue;
178
+ }
179
+ kept.push(line);
180
+ }
181
+ // Truncate trailing prose that appears after valid mock definitions.
182
+ // Pattern: valid exports → orphaned quote/bracket → bullet-point thinking.
183
+ const CODE_LINE = /^\s*(export\b|import\b|const\b|let\b|var\b|vi\.|jest\.|before(?:Each|All)|after(?:Each|All)|\/\/|\/\*)/;
184
+ const PROSE_LINE = /^\s*["'`]\s*$|^\s*[-*]\s+[A-Za-z]|^\s{1,8}-\s+[A-Z]/;
185
+ let foundCode = false;
186
+ let truncateAt = -1;
187
+ for (let i = 0; i < kept.length; i++) {
188
+ if (CODE_LINE.test(kept[i])) {
189
+ foundCode = true;
190
+ truncateAt = -1;
191
+ }
192
+ else if (foundCode && PROSE_LINE.test(kept[i]) && truncateAt === -1) {
193
+ truncateAt = i;
194
+ }
195
+ }
196
+ if (truncateAt !== -1) {
197
+ kept.splice(truncateAt);
198
+ stripped = true;
199
+ }
200
+ return { code: kept.join('\n').trim(), stripped };
201
+ }
51
202
  const RULE_DIVIDER = '─'.repeat(60);
52
203
  // Retry message when a fix attempt caused Vitest to collect 0 tests —
53
204
  // the model likely broke an import. Anchors the model to the original error.
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/lib/validate.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI;SACR,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC;SAC1C,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC;SAC1C,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAA;AAC/C,CAAC;AAED,2EAA2E;AAC3E,kFAAkF;AAClF,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACnC,OAAO,2DAA2D,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACnF,CAAC;AAED,qEAAqE;AACrE,6DAA6D;AAC7D,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IACvD,OAAO,CACL,wFAAwF;QACxF,sBAAsB;QACtB,uFAAuF;QACvF,uFAAuF;QACvF,iEAAiE;QACjE,oEAAoE;QACpE,iCAAiC;QACjC,qCAAqC;QACrC,UAAU;QACV,mGAAmG;QACnG,2BAA2B;QAC3B,MAAM,CACP,CAAA;AACH,CAAC;AAED,4EAA4E;AAC5E,yFAAyF;AACzF,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,kDAAkD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACrE,CAAC;AAED,uEAAuE;AACvE,8EAA8E;AAC9E,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,+FAA+F;IAC/F,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACrE,IAAI,WAAW;QAAE,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACpD,yCAAyC;IACzC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACxC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAEnC,sEAAsE;AACtE,6EAA6E;AAC7E,MAAM,UAAU,2BAA2B,CAAC,YAAoB,EAAE,YAAoB;IACpF,OAAO,CACL,2EAA2E;QAC3E,iHAAiH;QACjH,qFAAqF;QACrF,UAAU;QACV,oFAAoF;QACpF,iEAAiE;QACjE,mEAAmE;QACnE,gEAAgE;QAChE,GAAG,YAAY,IAAI;QACnB,GAAG,YAAY,IAAI;QACnB,GAAG,YAAY,MAAM;QACrB,kCAAkC;QAClC,GAAG,YAAY,EAAE,CAClB,CAAA;AACH,CAAC;AAED,yEAAyE;AACzE,oEAAoE;AACpE,MAAM,UAAU,sBAAsB,CACpC,YAAoB,EACpB,YAAoB,EACpB,YAAoB,EACpB,WAAmB;IAEnB,OAAO,CACL,8CAA8C,YAAY,0CAA0C,WAAW,WAAW;QAC1H,kDAAkD;QAClD,oDAAoD;QACpD,gCAAgC;QAChC,GAAG,YAAY,IAAI;QACnB,GAAG,YAAY,IAAI;QACnB,GAAG,YAAY,MAAM;QACrB,mBAAmB;QACnB,GAAG,YAAY,EAAE,CAClB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/lib/validate.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI;SACR,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC;SAC1C,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC;SAC1C,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAA;AAC/C,CAAC;AAED,2EAA2E;AAC3E,kFAAkF;AAClF,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACnC,OAAO,2DAA2D,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACnF,CAAC;AAED,qEAAqE;AACrE,6DAA6D;AAC7D,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IACvD,OAAO,CACL,wFAAwF;QACxF,sBAAsB;QACtB,uFAAuF;QACvF,uFAAuF;QACvF,iEAAiE;QACjE,oEAAoE;QACpE,iCAAiC;QACjC,qCAAqC;QACrC,UAAU;QACV,mGAAmG;QACnG,2BAA2B;QAC3B,MAAM,CACP,CAAA;AACH,CAAC;AAED,4EAA4E;AAC5E,yFAAyF;AACzF,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,kDAAkD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACrE,CAAC;AAED,uEAAuE;AACvE,8EAA8E;AAC9E,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,+FAA+F;IAC/F,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACrE,IAAI,WAAW;QAAE,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACpD,yCAAyC;IACzC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACxC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,CAAC;AAED,kEAAkE;AAClE,mFAAmF;AACnF,oFAAoF;AACpF,yFAAyF;AACzF,8DAA8D;AAC9D,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,uFAAuF;IACvF,MAAM,WAAW,GAAG,0QAA0Q,CAAA;IAE9R,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAE3D,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA,CAAE,oCAAoC;IAEzF,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5E,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;AAC1E,CAAC;AAED,4EAA4E;AAC5E,eAAe;AACf,8CAA8C;AAC9C,oFAAoF;AACpF,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,QAAgB;IAClE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC3D,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA;IAE7C,MAAM,aAAa,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IAElD,4DAA4D;IAC5D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1E,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA,CAAE,uCAAuC;IAEjF,4DAA4D;IAC5D,sEAAsE;IACtE,gFAAgF;IAChF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAClC,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,IAAI,SAAS,GAAG,KAAK,CAAA;IAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAA;QACxG,IAAI,WAAW,EAAE,CAAC;YAChB,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;QAC1C,CAAC;aAAM,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,sEAAsE;YACtE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACxD,SAAS,GAAG,KAAK,CAAA;YACjB,SAAQ;QACV,CAAC;QACD,IAAI,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACpC,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;IAC3C,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;AACrE,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,uEAAuE,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxH,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACzD,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAA;YACzD,IAAI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;AAC5B,CAAC;AAED,8EAA8E;AAC9E,gFAAgF;AAChF,uDAAuD;AACvD,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAEpC,kEAAkE;IAClE,2EAA2E;IAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC7B,6EAA6E,CAAC,IAAI,CAAC,CAAC,CAAC;QACrF,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,oDAAoD,CAAC,IAAI,CAAC,CAAC,CAAC,CAC7D,CAAA;IACD,IAAI,OAAO;QAAE,OAAO,KAAK,CAAA;IAEzB,gFAAgF;IAChF,MAAM,gBAAgB,GAAG,+DAA+D,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACtG,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAE/D,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC,CAAA;AAC5C,CAAC;AAED,8DAA8D;AAC9D,kEAAkE;AAClE,wEAAwE;AACxE,gEAAgE;AAChE,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,qEAAqE;IACrE,IAAI,cAAc,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAE5D,uDAAuD;IACvD,MAAM,cAAc,GAAG,8EAA8E,CAAA;IACrG,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAEjE,MAAM,UAAU,GAAK,+CAA+C,CAAA;IACpE,MAAM,YAAY,GAAG,uEAAuE,CAAA;IAE5F,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,QAAQ,GAAG,KAAK,CAAA;IAEpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACnE,OAAO,GAAG,IAAI,CAAA;YACd,QAAQ,GAAG,IAAI,CAAA;QACjB,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;gBACtB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG;oBAAE,KAAK,EAAE,CAAA;qBAChC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;oBAAC,KAAK,EAAE,CAAC;oBAAC,IAAI,KAAK,GAAG,CAAC;wBAAE,KAAK,GAAG,CAAC,CAAA;gBAAC,CAAC;YAC1E,CAAC;YACD,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,GAAG,KAAK,CAAA;YAChC,SAAQ;QACV,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjB,CAAC;IAED,qEAAqE;IACrE,2EAA2E;IAC3E,MAAM,SAAS,GAAI,wGAAwG,CAAA;IAC3H,MAAM,UAAU,GAAG,qDAAqD,CAAA;IACxE,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,UAAU,GAAG,CAAC,CAAC,CAAA;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,SAAS,GAAG,IAAI,CAAC;YAAC,UAAU,GAAG,CAAC,CAAC,CAAA;QAAC,CAAC;aAC7D,IAAI,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YAAC,UAAU,GAAG,CAAC,CAAA;QAAC,CAAC;IACzF,CAAC;IACD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QACvB,QAAQ,GAAG,IAAI,CAAA;IACjB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAA;AACnD,CAAC;AAED,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAEnC,sEAAsE;AACtE,6EAA6E;AAC7E,MAAM,UAAU,2BAA2B,CAAC,YAAoB,EAAE,YAAoB;IACpF,OAAO,CACL,2EAA2E;QAC3E,iHAAiH;QACjH,qFAAqF;QACrF,UAAU;QACV,oFAAoF;QACpF,iEAAiE;QACjE,mEAAmE;QACnE,gEAAgE;QAChE,GAAG,YAAY,IAAI;QACnB,GAAG,YAAY,IAAI;QACnB,GAAG,YAAY,MAAM;QACrB,kCAAkC;QAClC,GAAG,YAAY,EAAE,CAClB,CAAA;AACH,CAAC;AAED,yEAAyE;AACzE,oEAAoE;AACpE,MAAM,UAAU,sBAAsB,CACpC,YAAoB,EACpB,YAAoB,EACpB,YAAoB,EACpB,WAAmB;IAEnB,OAAO,CACL,8CAA8C,YAAY,0CAA0C,WAAW,WAAW;QAC1H,kDAAkD;QAClD,oDAAoD;QACpD,gCAAgC;QAChC,GAAG,YAAY,IAAI;QACnB,GAAG,YAAY,IAAI;QACnB,GAAG,YAAY,MAAM;QACrB,mBAAmB;QACnB,GAAG,YAAY,EAAE,CAClB,CAAA;AACH,CAAC"}
@@ -291,5 +291,5 @@
291
291
  ]
292
292
  }
293
293
  },
294
- "version": "0.1.2"
294
+ "version": "0.1.3"
295
295
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lacuna-cli",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Agentic CLI that finds coverage gaps, generates tests, and verifies them in a loop",
5
5
  "keywords": [
6
6
  "testing",
@@ -57,6 +57,8 @@
57
57
  "dirname": "lacuna",
58
58
  "commands": "./dist/commands",
59
59
  "plugins": [],
60
- "topicSeparator": " "
60
+ "topicSeparator": " ",
61
+ "additionalVersionFlags": ["-V"],
62
+ "additionalHelpFlags": ["-h"]
61
63
  }
62
64
  }