@nxuss/lemma 1.27.1 → 1.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.md +61 -15
  2. package/bin/brain-ingest.js +64 -2
  3. package/dashboard/dist/assets/index-Dh-whqJ7.js +481 -0
  4. package/dashboard/dist/assets/index-Dh-whqJ7.js.map +1 -0
  5. package/dashboard/dist/assets/{index-DtEKr0hI.css → index-Yt1H2B7F.css} +1 -1
  6. package/dashboard/dist/index.html +2 -2
  7. package/dist/cjs/cli/gitHooks.d.ts +28 -0
  8. package/dist/cjs/cli/gitHooks.d.ts.map +1 -0
  9. package/dist/cjs/cli/gitHooks.js +112 -0
  10. package/dist/cjs/cli/gitHooks.js.map +1 -0
  11. package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
  12. package/dist/cjs/cli/lemma-proxy.js +26 -0
  13. package/dist/cjs/cli/lemma-proxy.js.map +1 -1
  14. package/dist/cjs/mcp/tool-profiles.d.ts.map +1 -1
  15. package/dist/cjs/mcp/tool-profiles.js +8 -0
  16. package/dist/cjs/mcp/tool-profiles.js.map +1 -1
  17. package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
  18. package/dist/cjs/mcp/tools/memory.js +57 -0
  19. package/dist/cjs/mcp/tools/memory.js.map +1 -1
  20. package/dist/cjs/mcp/tools/misc.d.ts.map +1 -1
  21. package/dist/cjs/mcp/tools/misc.js +16 -1
  22. package/dist/cjs/mcp/tools/misc.js.map +1 -1
  23. package/dist/cjs/mcp/tools/workspace.d.ts.map +1 -1
  24. package/dist/cjs/mcp/tools/workspace.js +17 -3
  25. package/dist/cjs/mcp/tools/workspace.js.map +1 -1
  26. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  27. package/dist/cjs/mcp/tools.js +2 -0
  28. package/dist/cjs/mcp/tools.js.map +1 -1
  29. package/dist/cjs/subconscious/GitIngest.d.ts.map +1 -1
  30. package/dist/cjs/subconscious/GitIngest.js +49 -1
  31. package/dist/cjs/subconscious/GitIngest.js.map +1 -1
  32. package/dist/cjs/subconscious/TeamBrain.d.ts +82 -0
  33. package/dist/cjs/subconscious/TeamBrain.d.ts.map +1 -0
  34. package/dist/cjs/subconscious/TeamBrain.js +543 -0
  35. package/dist/cjs/subconscious/TeamBrain.js.map +1 -0
  36. package/dist/cjs/subconscious/TheBrainV2.d.ts +19 -2
  37. package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
  38. package/dist/cjs/subconscious/TheBrainV2.js +23 -0
  39. package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
  40. package/dist/cjs/utils/FixCapture.d.ts +66 -0
  41. package/dist/cjs/utils/FixCapture.d.ts.map +1 -0
  42. package/dist/cjs/utils/FixCapture.js +338 -0
  43. package/dist/cjs/utils/FixCapture.js.map +1 -0
  44. package/dist/esm/cli/gitHooks.d.ts +28 -0
  45. package/dist/esm/cli/gitHooks.d.ts.map +1 -0
  46. package/dist/esm/cli/gitHooks.js +106 -0
  47. package/dist/esm/cli/gitHooks.js.map +1 -0
  48. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
  49. package/dist/esm/cli/lemma-proxy.js +26 -0
  50. package/dist/esm/cli/lemma-proxy.js.map +1 -1
  51. package/dist/esm/mcp/tool-profiles.d.ts.map +1 -1
  52. package/dist/esm/mcp/tool-profiles.js +8 -0
  53. package/dist/esm/mcp/tool-profiles.js.map +1 -1
  54. package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
  55. package/dist/esm/mcp/tools/memory.js +57 -0
  56. package/dist/esm/mcp/tools/memory.js.map +1 -1
  57. package/dist/esm/mcp/tools/misc.d.ts.map +1 -1
  58. package/dist/esm/mcp/tools/misc.js +16 -1
  59. package/dist/esm/mcp/tools/misc.js.map +1 -1
  60. package/dist/esm/mcp/tools/workspace.d.ts.map +1 -1
  61. package/dist/esm/mcp/tools/workspace.js +17 -3
  62. package/dist/esm/mcp/tools/workspace.js.map +1 -1
  63. package/dist/esm/mcp/tools.d.ts.map +1 -1
  64. package/dist/esm/mcp/tools.js +2 -0
  65. package/dist/esm/mcp/tools.js.map +1 -1
  66. package/dist/esm/subconscious/GitIngest.d.ts.map +1 -1
  67. package/dist/esm/subconscious/GitIngest.js +49 -1
  68. package/dist/esm/subconscious/GitIngest.js.map +1 -1
  69. package/dist/esm/subconscious/TeamBrain.d.ts +82 -0
  70. package/dist/esm/subconscious/TeamBrain.d.ts.map +1 -0
  71. package/dist/esm/subconscious/TeamBrain.js +533 -0
  72. package/dist/esm/subconscious/TeamBrain.js.map +1 -0
  73. package/dist/esm/subconscious/TheBrainV2.d.ts +19 -2
  74. package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
  75. package/dist/esm/subconscious/TheBrainV2.js +23 -0
  76. package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
  77. package/dist/esm/utils/FixCapture.d.ts +66 -0
  78. package/dist/esm/utils/FixCapture.d.ts.map +1 -0
  79. package/dist/esm/utils/FixCapture.js +328 -0
  80. package/dist/esm/utils/FixCapture.js.map +1 -0
  81. package/package.json +1 -1
  82. package/dashboard/dist/assets/index-DiidVeI5.js +0 -481
  83. package/dashboard/dist/assets/index-DiidVeI5.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FixCapture.d.ts","sourceRoot":"","sources":["../../../src/utils/FixCapture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAOH,OAAO,EAA6B,UAAU,EAAE,MAAM,4BAA4B,CAAC;AA8BnF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAuBzD;AAaD,MAAM,WAAW,cAAc;IAC7B,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA2DD,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAyBtF;AAwBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iGAAiG;IACjG,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,cAAc,CA6EjB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,cAAc,CAchF;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAU3D"}
@@ -0,0 +1,328 @@
1
+ /**
2
+ * FixCapture — turns a red → green transition into a memory, with nobody asking.
3
+ *
4
+ * The auto-capture that existed before this (test_oracle's "tests passing after changes to
5
+ * a.ts") stored the one thing nobody searches for: that a suite passed. What a later session
6
+ * actually has in hand is the *error* — CLAUDE.md tells it to search_memory with the error
7
+ * message — and the answer it needs is "this exact failure was fixed by changing these files".
8
+ * That pairing only exists across two runs of the same command, so this module keeps the
9
+ * failing run's signature and the hash of every dirty file at that moment, and when the same
10
+ * command next passes, the files whose content moved in between are the fix.
11
+ *
12
+ * State lives on disk (`.lemma/session/fix-capture.json`), not in the process: the failing run
13
+ * and the passing one may arrive through different processes — the MCP server's
14
+ * run_workspace_command, or the host's own Bash tool relayed by a PostToolUse hook
15
+ * (`lemma-brain-ingest --hook-result`). Agents mostly run tests through their native shell, so
16
+ * a capture that only saw Lemma's tools would see a fraction of the fixes.
17
+ *
18
+ * It never guesses: a pass with no file changed since the failure was flaky, and is recorded as
19
+ * nothing at all.
20
+ */
21
+ import fs from 'fs';
22
+ import path from 'path';
23
+ import crypto from 'crypto';
24
+ import { execFileSync } from 'child_process';
25
+ import { changedFilesFromGit } from './AffectedTests.js';
26
+ import { deriveProjectId, getBrain } from '../subconscious/TheBrainV2.js';
27
+ import { repoRoot } from '../subconscious/TeamBrain.js';
28
+ const STATE_FILE = path.join('.lemma', 'session', 'fix-capture.json');
29
+ /** A failure older than this is no longer the thing the next pass fixed. */
30
+ const PENDING_TTL_MS = 24 * 60 * 60 * 1000;
31
+ const MAX_SIGNATURE_LINES = 20;
32
+ const MAX_SIGNATURE_CHARS = 1500;
33
+ const MAX_DIFF_CHARS = 2500;
34
+ /** A "fix" touching more files than this is a refactor or a branch switch, not a fix worth recalling. */
35
+ const MAX_FIX_FILES = 15;
36
+ /** Runners whose exit code is a verdict on the code by themselves. */
37
+ const VERDICT_TOOLS = new Set([
38
+ 'jest', 'vitest', 'mocha', 'ava', 'tap', 'pytest', 'tox', 'tsc', 'vue-tsc', 'eslint', 'biome',
39
+ 'ruff', 'mypy', 'pyright', 'rspec', 'phpunit', 'mvn', 'gradle', 'gradlew', 'playwright', 'cypress',
40
+ ]);
41
+ /** Tools that are a verdict only with the right subcommand (`go test`, not `go run`). */
42
+ const VERDICT_SUBCOMMANDS = {
43
+ go: /^(test|vet|build)$/,
44
+ cargo: /^(test|build|check|clippy|nextest)$/,
45
+ dotnet: /^(test|build)$/,
46
+ swift: /^(test|build)$/,
47
+ make: /^(test|check|lint)$/,
48
+ };
49
+ /** Package-manager scripts that conventionally run a verdict. */
50
+ const VERDICT_SCRIPT_RE = /^(test|build|lint|typecheck|type-check|check|tsc|ci)(:.*)?$/;
51
+ /** Launchers that run the next token as the real command. */
52
+ const LAUNCHERS = new Set(['npx', 'bunx', 'pnpx', 'env', 'time', 'uv', 'poetry']);
53
+ /**
54
+ * Whether a command's pass/fail is a verdict on the code. Judged per shell segment on the
55
+ * command's head, not anywhere in the text: `cat jest.config.js` mentions jest and is no
56
+ * verdict, `CI=1 npx jest` and `cd app && npm test` are.
57
+ */
58
+ export function isVerdictCommand(command) {
59
+ for (const segment of (command || '').split(/&&|\|\||;|\|/)) {
60
+ let tokens = segment.trim().split(/\s+/).filter(Boolean);
61
+ while (tokens.length && /^[A-Za-z_][A-Za-z0-9_]*=/.test(tokens[0]))
62
+ tokens = tokens.slice(1); // FOO=bar
63
+ // Launchers and their run/exec/dlx/-m forms: `npx jest`, `pnpm exec vitest`, `python -m pytest`, `uv run pytest`.
64
+ for (let guard = 0; guard < 4 && tokens.length > 1; guard++) {
65
+ const head = path.basename(tokens[0]);
66
+ if (LAUNCHERS.has(head)) {
67
+ tokens = tokens.slice(1);
68
+ if (/^(run|x)$/.test(tokens[0] || ''))
69
+ tokens = tokens.slice(1);
70
+ continue;
71
+ }
72
+ if (/^(pnpm|yarn|bun)$/.test(head) && /^(exec|dlx|x)$/.test(tokens[1])) {
73
+ tokens = tokens.slice(2);
74
+ continue;
75
+ }
76
+ if (/^python\d?(\.\d+)?$/.test(head) && tokens[1] === '-m') {
77
+ tokens = tokens.slice(2);
78
+ continue;
79
+ }
80
+ break;
81
+ }
82
+ if (tokens.length === 0)
83
+ continue;
84
+ const head = path.basename(tokens[0]).replace(/\.(cmd|exe|sh)$/, '');
85
+ if (VERDICT_TOOLS.has(head))
86
+ return true;
87
+ const sub = VERDICT_SUBCOMMANDS[head];
88
+ if (sub && tokens[1] && sub.test(tokens[1]))
89
+ return true;
90
+ if (/^(npm|pnpm|yarn|bun)$/.test(head)) {
91
+ const script = tokens[1] === 'run' || tokens[1] === 'run-script' ? tokens[2] : tokens[1];
92
+ if (script && (VERDICT_SCRIPT_RE.test(script) || script === 't'))
93
+ return true;
94
+ }
95
+ }
96
+ return false;
97
+ }
98
+ function stateKey(command) {
99
+ return command.trim().replace(/\s+/g, ' ');
100
+ }
101
+ function readState(root) {
102
+ try {
103
+ const parsed = JSON.parse(fs.readFileSync(path.join(root, STATE_FILE), 'utf8'));
104
+ return parsed && typeof parsed === 'object' ? parsed : {};
105
+ }
106
+ catch {
107
+ return {};
108
+ }
109
+ }
110
+ function writeState(root, state) {
111
+ const p = path.join(root, STATE_FILE);
112
+ fs.mkdirSync(path.dirname(p), { recursive: true });
113
+ fs.writeFileSync(p, JSON.stringify(state), 'utf8');
114
+ }
115
+ function hashWorkingFile(root, rel) {
116
+ try {
117
+ return crypto.createHash('sha256').update(fs.readFileSync(path.join(root, rel))).digest('hex');
118
+ }
119
+ catch {
120
+ return 'DELETED';
121
+ }
122
+ }
123
+ /** Lemma's own bookkeeping is never "the fix". */
124
+ function isOwnFile(rel) {
125
+ return rel.startsWith('.lemma/') || rel.startsWith('.lemma-brain/');
126
+ }
127
+ function dirtySnapshot(root) {
128
+ const out = {};
129
+ for (const rel of changedFilesFromGit(root)) {
130
+ if (isOwnFile(rel))
131
+ continue;
132
+ out[rel] = hashWorkingFile(root, rel);
133
+ }
134
+ return out;
135
+ }
136
+ // Order matters: the first pattern that matches anywhere wins the headline, so the most
137
+ // specific, most searchable forms come first (a named JS/Python error, a tsc code, a failing
138
+ // test title) and the generic "error" line last.
139
+ const HEADLINE_PATTERNS = [
140
+ /\b[A-Z]\w*(Error|Exception)\b:?\s+\S.*/,
141
+ /error\s+TS\d+:.*/,
142
+ /^\s*●\s+(?!Console\b).+/,
143
+ /^\s*(✕|×|✗)\s+.+/,
144
+ /^FAILED\s+.+/,
145
+ /^\s*E\s{2,}.+/,
146
+ /\berror(\[E\d+\])?:\s+.+/i,
147
+ ];
148
+ const SIGNATURE_LINE_RE = /(●\s|✕|×|✗|^FAIL\b|^FAILED\b|error\s+TS\d+|\b\w*(Error|Exception)\b|^\s*E\s{2,}|expected|received|assert|panicked|\berror(\[E\d+\])?:)/i;
149
+ /** The failure, compressed to what identifies it — test titles, error lines, their locations. */
150
+ export function extractFailure(output) {
151
+ const lines = (output || '').split('\n').map((l) => l.replace(/\s+$/, ''));
152
+ let headline = '';
153
+ for (const re of HEADLINE_PATTERNS) {
154
+ for (const line of lines) {
155
+ const m = line.match(re);
156
+ if (m) {
157
+ headline = m[0].trim();
158
+ break;
159
+ }
160
+ }
161
+ if (headline)
162
+ break;
163
+ }
164
+ const picked = [];
165
+ const seen = new Set();
166
+ for (const line of lines) {
167
+ const t = line.trim();
168
+ if (!t || seen.has(t) || /node_modules/.test(t))
169
+ continue;
170
+ if (!SIGNATURE_LINE_RE.test(t))
171
+ continue;
172
+ seen.add(t);
173
+ picked.push(t);
174
+ if (picked.length >= MAX_SIGNATURE_LINES)
175
+ break;
176
+ }
177
+ let signature = picked.join('\n');
178
+ if (!signature)
179
+ signature = lines.filter(Boolean).slice(-MAX_SIGNATURE_LINES).join('\n');
180
+ if (signature.length > MAX_SIGNATURE_CHARS)
181
+ signature = signature.slice(0, MAX_SIGNATURE_CHARS) + '\n…';
182
+ if (!headline)
183
+ headline = (picked[0] || lines.find((l) => l.trim()) || 'command failed').trim();
184
+ return { headline: headline.slice(0, 200), signature };
185
+ }
186
+ function diffFor(root, files) {
187
+ let diff = '';
188
+ try {
189
+ diff = execFileSync('git', ['-C', root, 'diff', '--no-color', 'HEAD', '--', ...files], {
190
+ encoding: 'utf8',
191
+ stdio: ['ignore', 'pipe', 'ignore'],
192
+ maxBuffer: 8 * 1024 * 1024,
193
+ });
194
+ }
195
+ catch { /* no HEAD yet, or not a repo — the file list still stands */ }
196
+ if (diff.length > MAX_DIFF_CHARS)
197
+ diff = diff.slice(0, MAX_DIFF_CHARS) + '\n… (diff truncated)';
198
+ return diff.trim();
199
+ }
200
+ function isGitRepo(root) {
201
+ try {
202
+ execFileSync('git', ['-C', root, 'rev-parse', '--git-dir'], { stdio: 'ignore' });
203
+ return true;
204
+ }
205
+ catch {
206
+ return false;
207
+ }
208
+ }
209
+ /**
210
+ * Feed one finished run of a command. Returns a note to append to the tool result (empty when
211
+ * the command isn't a verdict command or nothing happened worth mentioning).
212
+ */
213
+ export function recordCommandOutcome(input) {
214
+ const command = input.command || '';
215
+ if (!input.verdict && !isVerdictCommand(command))
216
+ return { note: '' };
217
+ const root = repoRoot(input.cwd || process.cwd());
218
+ // Without git there's no way to tell which files the fix touched.
219
+ if (!isGitRepo(root))
220
+ return { note: '' };
221
+ const now = input.now ?? Date.now();
222
+ const key = stateKey(command);
223
+ const state = readState(root);
224
+ for (const [k, p] of Object.entries(state)) {
225
+ if (now - p.failedAt > PENDING_TTL_MS)
226
+ delete state[k];
227
+ }
228
+ if (!input.passed) {
229
+ const { headline, signature } = extractFailure(input.output);
230
+ // Keep the FIRST failure's dirty snapshot across repeated red runs: the fix is everything
231
+ // that changed since the suite first went red, not since the last of several attempts.
232
+ const prior = state[key];
233
+ state[key] = {
234
+ command: key,
235
+ failedAt: prior ? prior.failedAt : now,
236
+ headline,
237
+ signature,
238
+ dirty: prior ? prior.dirty : dirtySnapshot(root),
239
+ };
240
+ writeState(root, state);
241
+ return { note: '', pending: true };
242
+ }
243
+ const pending = state[key];
244
+ if (!pending) {
245
+ writeState(root, state);
246
+ return { note: '' };
247
+ }
248
+ delete state[key];
249
+ writeState(root, state);
250
+ // The fix = files whose content differs from what it was when the run went red: edited,
251
+ // newly created, deleted, or reverted back to HEAD.
252
+ const current = dirtySnapshot(root);
253
+ const candidates = new Set([...Object.keys(current), ...Object.keys(pending.dirty)]);
254
+ const fixFiles = [...candidates]
255
+ .filter((rel) => (current[rel] ?? hashWorkingFile(root, rel)) !== pending.dirty[rel])
256
+ .sort();
257
+ if (fixFiles.length === 0) {
258
+ return { note: `\n\n[Lemma] \`${key}\` passed with no file changed since it failed — looks flaky, so nothing was stored.` };
259
+ }
260
+ if (fixFiles.length > MAX_FIX_FILES) {
261
+ return { note: `\n\n[Lemma] \`${key}\` went green, but ${fixFiles.length} files changed since it failed — too broad to record as one fix, nothing stored.` };
262
+ }
263
+ const diff = diffFor(root, fixFiles);
264
+ const query = `fix: ${pending.headline}`;
265
+ const response = [
266
+ `\`${key}\` was failing with:`,
267
+ pending.signature,
268
+ '',
269
+ `It passed after changes to:`,
270
+ ...fixFiles.map((f) => `- ${f}${hashWorkingFile(root, f) === 'DELETED' ? ' (deleted)' : ''}`),
271
+ ...(diff ? ['', 'Diff vs HEAD at capture time (may include unrelated edits already in those files):', diff] : []),
272
+ ].join('\n');
273
+ const brain = input.brain ?? getBrain();
274
+ const existing = fixFiles.filter((f) => fs.existsSync(path.join(root, f))).map((f) => path.join(root, f));
275
+ const res = brain.store(query, response, 'fix_capture_auto', 0.92, existing.length ? existing : undefined, deriveProjectId(root), 'confirmed', undefined, undefined, undefined, undefined, { source: 'auto-fix' });
276
+ if (!res.stored || !res.id) {
277
+ return { note: '' };
278
+ }
279
+ return {
280
+ captured: { id: res.id, query, files: fixFiles },
281
+ note: `\n\n[Lemma] Captured this fix in Brain (id ${res.id}): "${query.slice(0, 120)}" → ${fixFiles.length} file(s). ` +
282
+ `search_memory with that error will surface it; it goes stale as soon as those files change. ` +
283
+ `If this wasn't really the fix, forget_memory ${res.id}.`,
284
+ };
285
+ }
286
+ /**
287
+ * Entry point for a host PostToolUse hook (Claude Code shape: `tool_name`, `tool_input.command`,
288
+ * `tool_response`). Exit status isn't always in the payload, so when it's missing the verdict is
289
+ * read from the output's own summary lines — and when that's ambiguous, nothing is recorded
290
+ * rather than a guess.
291
+ */
292
+ export function recordHookPayload(payload, cwd) {
293
+ if (!payload || typeof payload !== 'object')
294
+ return { note: '' };
295
+ const p = payload;
296
+ if (p.tool_name && p.tool_name !== 'Bash')
297
+ return { note: '' };
298
+ const command = p.tool_input?.command;
299
+ if (typeof command !== 'string')
300
+ return { note: '' };
301
+ const resp = p.tool_response ?? {};
302
+ const output = typeof resp === 'string' ? resp : [resp.stdout, resp.stderr, resp.output].filter((s) => typeof s === 'string').join('\n');
303
+ if (resp.interrupted === true)
304
+ return { note: '' };
305
+ const code = [resp.exit_code, resp.exitCode, resp.code, p.exit_code].find((c) => typeof c === 'number');
306
+ const passed = typeof code === 'number' ? code === 0 : inferVerdict(output);
307
+ if (passed === null)
308
+ return { note: '' };
309
+ return recordCommandOutcome({ command, cwd: cwd || p.cwd, passed, output });
310
+ }
311
+ /** Pass/fail from a runner's own summary line; null when the output doesn't say. */
312
+ export function inferVerdict(output) {
313
+ const o = output || '';
314
+ // Counts are [1-9]-anchored: "0 failed", "Found 0 errors" and "0 errors, 0 warnings" are
315
+ // what a clean run prints, and reading them as failures would invent a red run.
316
+ if (/Tests?:\s+.*\b[1-9]\d* failed\b/.test(o) || /\b[1-9]\d* failed\b.*\bpassed\b/.test(o) || /^FAIL\s/m.test(o))
317
+ return false;
318
+ if (/error\s+TS\d+:/.test(o) || /Found [1-9]\d* errors?\b/.test(o))
319
+ return false;
320
+ if (/✖ [1-9]\d* problems?/.test(o) || /\b[1-9]\d* errors?\b.*\bwarnings?\b/.test(o))
321
+ return false;
322
+ if (/^=+ .*\bfailed\b.* =+$/m.test(o))
323
+ return false;
324
+ if (/Tests?:\s+.*\b\d+ passed\b/.test(o) || /^=+ .*\bpassed\b.* =+$/m.test(o))
325
+ return true;
326
+ return null;
327
+ }
328
+ //# sourceMappingURL=FixCapture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FixCapture.js","sourceRoot":"","sources":["../../../src/utils/FixCapture.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxuss/lemma",
3
- "version": "1.27.1",
3
+ "version": "1.29.0",
4
4
  "description": "Intelligent AI Gateway for IDEs & Agents — Semantic cache, Privacy Firewall, Infrastructure Command Center, and Autonomous Cost-Optimization.",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",