code-auditor-mcp 3.4.14 → 3.4.16

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 (93) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +83 -0
  3. package/dist/analyzers/applicability.d.ts +41 -0
  4. package/dist/analyzers/applicability.d.ts.map +1 -0
  5. package/dist/analyzers/applicability.js +96 -0
  6. package/dist/analyzers/applicability.js.map +1 -0
  7. package/dist/analyzers/ruleRegistry.js +1 -1
  8. package/dist/analyzers/ruleRegistry.js.map +1 -1
  9. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +2 -2
  10. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
  11. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +2 -2
  12. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
  13. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
  14. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +20 -9
  15. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
  16. package/dist/analyzers/universal/schema/migrations.d.ts +11 -0
  17. package/dist/analyzers/universal/schema/migrations.d.ts.map +1 -1
  18. package/dist/analyzers/universal/schema/migrations.js +127 -4
  19. package/dist/analyzers/universal/schema/migrations.js.map +1 -1
  20. package/dist/auditRunner.d.ts.map +1 -1
  21. package/dist/auditRunner.js +62 -23
  22. package/dist/auditRunner.js.map +1 -1
  23. package/dist/cli.js +406 -1
  24. package/dist/cli.js.map +1 -1
  25. package/dist/codeIndexDB.d.ts +40 -1
  26. package/dist/codeIndexDB.d.ts.map +1 -1
  27. package/dist/codeIndexDB.js +222 -50
  28. package/dist/codeIndexDB.js.map +1 -1
  29. package/dist/config/defaults.js +1 -1
  30. package/dist/config/defaults.js.map +1 -1
  31. package/dist/config/pathProfiles.d.ts +7 -0
  32. package/dist/config/pathProfiles.d.ts.map +1 -1
  33. package/dist/config/pathProfiles.js +7 -1
  34. package/dist/config/pathProfiles.js.map +1 -1
  35. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
  36. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +1 -1
  37. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
  38. package/dist/ledger.d.ts +163 -2
  39. package/dist/ledger.d.ts.map +1 -1
  40. package/dist/ledger.js +528 -7
  41. package/dist/ledger.js.map +1 -1
  42. package/dist/mcp.js +3 -3
  43. package/dist/mcp.js.map +1 -1
  44. package/dist/mcpAuditJobs.d.ts +24 -2
  45. package/dist/mcpAuditJobs.d.ts.map +1 -1
  46. package/dist/mcpAuditJobs.js +364 -58
  47. package/dist/mcpAuditJobs.js.map +1 -1
  48. package/dist/pipeline.d.ts +9 -2
  49. package/dist/pipeline.d.ts.map +1 -1
  50. package/dist/pipeline.js +165 -18
  51. package/dist/pipeline.js.map +1 -1
  52. package/dist/pipelineAdapters.d.ts.map +1 -1
  53. package/dist/pipelineAdapters.js +45 -10
  54. package/dist/pipelineAdapters.js.map +1 -1
  55. package/dist/scripts/benchmarkWorkers.js +1 -1
  56. package/dist/scripts/benchmarkWorkers.js.map +1 -1
  57. package/dist/services/auditJobService.d.ts +22 -5
  58. package/dist/services/auditJobService.d.ts.map +1 -1
  59. package/dist/services/auditJobService.js +67 -26
  60. package/dist/services/auditJobService.js.map +1 -1
  61. package/dist/services/fileAccounting.d.ts +83 -0
  62. package/dist/services/fileAccounting.d.ts.map +1 -0
  63. package/dist/services/fileAccounting.js +215 -0
  64. package/dist/services/fileAccounting.js.map +1 -0
  65. package/dist/styles/styleExtractor.d.ts +2 -2
  66. package/dist/styles/styleExtractor.d.ts.map +1 -1
  67. package/dist/styles/styleExtractor.js +83 -11
  68. package/dist/styles/styleExtractor.js.map +1 -1
  69. package/dist/styles/styleIndexer.d.ts +8 -0
  70. package/dist/styles/styleIndexer.d.ts.map +1 -1
  71. package/dist/styles/styleIndexer.js +103 -15
  72. package/dist/styles/styleIndexer.js.map +1 -1
  73. package/dist/styles/tailwindUtilityExpander.d.ts +3 -0
  74. package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
  75. package/dist/styles/tailwindUtilityExpander.js +35 -1
  76. package/dist/styles/tailwindUtilityExpander.js.map +1 -1
  77. package/dist/styles/types.d.ts +11 -0
  78. package/dist/styles/types.d.ts.map +1 -1
  79. package/dist/types.d.ts +133 -0
  80. package/dist/types.d.ts.map +1 -1
  81. package/dist/types.js.map +1 -1
  82. package/dist/utils/fileDiscovery.d.ts +98 -0
  83. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  84. package/dist/utils/fileDiscovery.js +246 -29
  85. package/dist/utils/fileDiscovery.js.map +1 -1
  86. package/dist/workers/auditJobRunner.d.ts +2 -0
  87. package/dist/workers/auditJobRunner.d.ts.map +1 -0
  88. package/dist/workers/auditJobRunner.js +37 -0
  89. package/dist/workers/auditJobRunner.js.map +1 -0
  90. package/dist/workers/auditWorker.js +26 -0
  91. package/dist/workers/auditWorker.js.map +1 -1
  92. package/package.json +2 -2
  93. package/plugin/.claude-plugin/plugin.json +1 -1
package/dist/ledger.js CHANGED
@@ -5,10 +5,11 @@
5
5
  * (CLI, MCP, library, hook) writes to the ledger unconditionally. The ledger
6
6
  * survives clearIndex like user-authored data.
7
7
  */
8
- import { randomUUID } from 'node:crypto';
9
- import { execSync } from 'node:child_process';
10
- import { existsSync, readFileSync, readdirSync } from 'node:fs';
11
- import { join } from 'node:path';
8
+ import { randomUUID, createHash } from 'node:crypto';
9
+ import { execSync, execFileSync } from 'node:child_process';
10
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
11
+ import { join, relative } from 'node:path';
12
+ import { hostname } from 'node:os';
12
13
  import { fingerprint } from './fingerprint.js';
13
14
  import { extractSymbol } from './symbols.js';
14
15
  // ── Git helpers ───────────────────────────────────────────────────────────
@@ -27,8 +28,9 @@ function getGitInfo(target) {
27
28
  }
28
29
  }
29
30
  // ── Writing ───────────────────────────────────────────────────────────────
30
- export function writeAuditToLedger(db, runInput, violations, durationMs, exitStatus) {
31
- const runId = randomUUID();
31
+ export function writeAuditToLedger(db, runInput, violations, durationMs, exitStatus, opts) {
32
+ const isAttach = !!opts?.runId;
33
+ const runId = opts?.runId ?? randomUUID();
32
34
  const timestamp = new Date().toISOString();
33
35
  const insertRun = db.prepare(`
34
36
  INSERT INTO findings_ledger_runs
@@ -39,9 +41,25 @@ export function writeAuditToLedger(db, runInput, violations, durationMs, exitSta
39
41
  INSERT INTO findings_ledger_findings
40
42
  (run_id, analyzer, rule, severity, message, file, line, symbol, fingerprint)
41
43
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
44
+ `);
45
+ const insertCoverage = db.prepare(`
46
+ INSERT OR REPLACE INTO findings_ledger_coverage
47
+ (run_id, analyzer, rule_id, state, count, reason)
48
+ VALUES (?, ?, ?, ?, ?, ?)
42
49
  `);
43
50
  const tx = db.transaction(() => {
44
- insertRun.run(runId, timestamp, runInput.gitSha ?? null, runInput.gitDirty ? 1 : 0, runInput.toolVersion, runInput.command, runInput.surface, runInput.scope, runInput.target, durationMs, exitStatus);
51
+ if (isAttach) {
52
+ // Attach to a pre-existing run (detached lifecycle): record results and
53
+ // close the lifecycle. The run row itself was created by createLedgerRun.
54
+ db.prepare(`
55
+ UPDATE findings_ledger_runs
56
+ SET duration_ms = ?, exit_status = ?, finished_at = ?, status = 'completed'
57
+ WHERE run_id = ?
58
+ `).run(durationMs, exitStatus, timestamp, runId);
59
+ }
60
+ else {
61
+ insertRun.run(runId, timestamp, runInput.gitSha ?? null, runInput.gitDirty ? 1 : 0, runInput.toolVersion, runInput.command, runInput.surface, runInput.scope, runInput.target, durationMs, exitStatus);
62
+ }
45
63
  for (const v of violations) {
46
64
  const symbol = extractSymbol(v);
47
65
  const fp = fingerprint({
@@ -52,14 +70,517 @@ export function writeAuditToLedger(db, runInput, violations, durationMs, exitSta
52
70
  });
53
71
  insertFinding.run(runId, v.analyzer || 'unknown', v.rule || 'unknown', v.severity, v.message, v.file, v.line ?? null, symbol, fp);
54
72
  }
73
+ if (opts?.coverage) {
74
+ for (const c of opts.coverage) {
75
+ insertCoverage.run(runId, c.analyzer, c.ruleId, c.state, c.count, c.reason ?? null);
76
+ }
77
+ }
55
78
  });
56
79
  tx();
57
80
  return runId;
58
81
  }
82
+ /**
83
+ * Create a detached-run row in `queued` (or another initial) status without
84
+ * findings. Returns the run id, which is the job id for `--detach`/MCP.
85
+ */
86
+ export function createLedgerRun(db, runInput, opts = {}) {
87
+ const runId = randomUUID();
88
+ const timestamp = new Date().toISOString();
89
+ const status = opts.status ?? 'queued';
90
+ db.prepare(`
91
+ INSERT INTO findings_ledger_runs
92
+ (run_id, timestamp, git_sha, git_dirty, tool_version, command, surface, scope, target, duration_ms, exit_status, status, project_root)
93
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 0, 0, ?, ?)
94
+ `).run(runId, timestamp, runInput.gitSha ?? null, runInput.gitDirty ? 1 : 0, runInput.toolVersion, runInput.command, runInput.surface, runInput.scope, runInput.target, status, opts.projectRoot ?? null);
95
+ return runId;
96
+ }
97
+ /** Patch mutable lifecycle columns on a run row. */
98
+ export function patchLedgerRun(db, runId, patch) {
99
+ const sets = [];
100
+ const values = [];
101
+ const colMap = [
102
+ ['status', 'status'],
103
+ ['startedAt', 'started_at'],
104
+ ['heartbeatAt', 'heartbeat_at'],
105
+ ['finishedAt', 'finished_at'],
106
+ ['error', 'error'],
107
+ ['progressJson', 'progress_json'],
108
+ ['stderrLog', 'stderr_log'],
109
+ ['contentHash', 'content_hash'],
110
+ ['filesCount', 'files_count'],
111
+ ['fileManifestJson', 'file_manifest_json'],
112
+ ['exitStatus', 'exit_status'],
113
+ ['runnerPid', 'runner_pid'],
114
+ ['runnerPidStartedAt', 'runner_pid_started_at'],
115
+ ['runnerHost', 'runner_host'],
116
+ ];
117
+ for (const [key, col] of colMap) {
118
+ if (patch[key] !== undefined) {
119
+ sets.push(`${col} = ?`);
120
+ values.push(patch[key] === null ? null : patch[key]);
121
+ }
122
+ }
123
+ if (patch.resultId !== undefined) {
124
+ // resultId is carried inside metadata_json (the blob id from storeAuditResults).
125
+ const row = db.prepare('SELECT metadata_json FROM findings_ledger_runs WHERE run_id = ?').get(runId);
126
+ const meta = row?.metadata_json ? safeJsonParse(row.metadata_json, {}) : {};
127
+ meta.resultId = patch.resultId;
128
+ sets.push('metadata_json = ?');
129
+ values.push(JSON.stringify(meta));
130
+ }
131
+ if (sets.length === 0)
132
+ return;
133
+ values.push(runId);
134
+ db.prepare(`UPDATE findings_ledger_runs SET ${sets.join(', ')} WHERE run_id = ?`).run(...values);
135
+ }
59
136
  /** Update the exit status of a ledger run — called by CLI/MCP after determining it. */
60
137
  export function updateLedgerRunStatus(db, runId, exitStatus) {
61
138
  db.prepare('UPDATE findings_ledger_runs SET exit_status = ? WHERE run_id = ?').run(exitStatus, runId);
62
139
  }
140
+ // ── Spec 41 — Run lifecycle reads ──────────────────────────────────────────
141
+ function safeJsonParse(raw, fallback) {
142
+ if (!raw)
143
+ return fallback;
144
+ try {
145
+ return JSON.parse(raw);
146
+ }
147
+ catch {
148
+ return fallback;
149
+ }
150
+ }
151
+ const RUN_DETAIL_SELECT = `
152
+ run_id AS runId, timestamp, git_sha AS gitSha, git_dirty AS gitDirty,
153
+ tool_version AS toolVersion, command, surface, scope, target,
154
+ duration_ms AS durationMs, exit_status AS exitStatus, metadata_json AS metadataJson,
155
+ status, project_root AS projectRoot, started_at AS startedAt, heartbeat_at AS heartbeatAt,
156
+ finished_at AS finishedAt, error, progress_json AS progressJson, stderr_log AS stderrLog,
157
+ content_hash AS contentHash, files_count AS filesCount, file_manifest_json AS fileManifestJson,
158
+ runner_pid AS runnerPid, runner_pid_started_at AS runnerPidStartedAt, runner_host AS runnerHost
159
+ `;
160
+ function mapRunRow(row) {
161
+ const meta = safeJsonParse(row.metadataJson, {});
162
+ return {
163
+ runId: row.runId,
164
+ timestamp: String(row.timestamp),
165
+ gitSha: row.gitSha ?? null,
166
+ gitDirty: !!row.gitDirty,
167
+ toolVersion: row.toolVersion,
168
+ command: row.command,
169
+ surface: row.surface,
170
+ scope: row.scope,
171
+ target: row.target,
172
+ durationMs: row.durationMs,
173
+ exitStatus: row.exitStatus,
174
+ status: row.status,
175
+ projectRoot: row.projectRoot ?? null,
176
+ startedAt: row.startedAt ?? null,
177
+ heartbeatAt: row.heartbeatAt ?? null,
178
+ finishedAt: row.finishedAt ?? null,
179
+ error: row.error ?? null,
180
+ progressJson: row.progressJson ?? null,
181
+ stderrLog: row.stderrLog ?? null,
182
+ contentHash: row.contentHash ?? null,
183
+ filesCount: row.filesCount ?? null,
184
+ fileManifestJson: row.fileManifestJson ?? null,
185
+ resultId: meta.resultId ?? null,
186
+ runnerPid: row.runnerPid ?? null,
187
+ runnerPidStartedAt: row.runnerPidStartedAt ?? null,
188
+ runnerHost: row.runnerHost ?? null,
189
+ };
190
+ }
191
+ export function getLedgerRun(db, runId) {
192
+ const row = db.prepare(`SELECT ${RUN_DETAIL_SELECT} FROM findings_ledger_runs WHERE run_id = ?`).get(runId);
193
+ return row ? mapRunRow(row) : null;
194
+ }
195
+ export function listLedgerRuns(db, projectRoot) {
196
+ const params = [];
197
+ let where = '';
198
+ if (projectRoot) {
199
+ where = 'WHERE project_root = ?';
200
+ params.push(projectRoot);
201
+ }
202
+ const rows = db.prepare(`
203
+ SELECT ${RUN_DETAIL_SELECT} FROM findings_ledger_runs ${where}
204
+ ORDER BY timestamp DESC
205
+ `).all(...params);
206
+ return rows.map(mapRunRow);
207
+ }
208
+ export function queryLedgerFindings(db, runId, q = {}) {
209
+ const where = ['run_id = ?'];
210
+ const params = [runId];
211
+ if (q.rule) {
212
+ where.push('rule = ?');
213
+ params.push(q.rule);
214
+ }
215
+ if (q.analyzer) {
216
+ where.push('analyzer = ?');
217
+ params.push(q.analyzer);
218
+ }
219
+ if (q.file) {
220
+ where.push('file LIKE ?');
221
+ params.push(`%${q.file}%`);
222
+ }
223
+ if (q.severity) {
224
+ where.push('severity = ?');
225
+ params.push(q.severity);
226
+ }
227
+ if (q.count) {
228
+ const rows = db.prepare(`
229
+ SELECT analyzer || '/' || rule AS "group", COUNT(*) AS "count"
230
+ FROM findings_ledger_findings
231
+ WHERE ${where.join(' AND ')}
232
+ GROUP BY analyzer, rule
233
+ ORDER BY count DESC
234
+ `).all(...params);
235
+ return rows.map((r) => ({ group: r.group, count: r.count }));
236
+ }
237
+ const limit = q.limit ?? 50;
238
+ const offset = q.offset ?? 0;
239
+ let sql = `
240
+ SELECT run_id AS runId, analyzer, rule, severity, message, file, line, symbol, fingerprint
241
+ FROM findings_ledger_findings
242
+ WHERE ${where.join(' AND ')}
243
+ ORDER BY id
244
+ `;
245
+ if (limit > 0) {
246
+ sql += ' LIMIT ? OFFSET ?';
247
+ params.push(limit, offset);
248
+ }
249
+ const rows = db.prepare(sql).all(...params);
250
+ return rows.map((r) => ({
251
+ runId: r.runId,
252
+ analyzer: r.analyzer,
253
+ rule: r.rule,
254
+ severity: r.severity,
255
+ message: r.message,
256
+ file: r.file,
257
+ line: r.line ?? null,
258
+ symbol: String(r.symbol ?? ''),
259
+ fingerprint: String(r.fingerprint ?? ''),
260
+ }));
261
+ }
262
+ export function queryLedgerCoverage(db, runId, q = {}) {
263
+ const where = ['run_id = ?'];
264
+ const params = [runId];
265
+ if (q.rule) {
266
+ where.push('rule_id = ?');
267
+ params.push(q.rule);
268
+ }
269
+ if (q.analyzer) {
270
+ where.push('analyzer = ?');
271
+ params.push(q.analyzer);
272
+ }
273
+ if (q.state) {
274
+ where.push('state = ?');
275
+ params.push(q.state);
276
+ }
277
+ const rows = db.prepare(`
278
+ SELECT analyzer, rule_id AS ruleId, state, count, reason
279
+ FROM findings_ledger_coverage
280
+ WHERE ${where.join(' AND ')}
281
+ ORDER BY analyzer, rule_id
282
+ `).all(...params);
283
+ return rows.map((r) => ({
284
+ analyzer: r.analyzer,
285
+ ruleId: r.ruleId,
286
+ state: r.state,
287
+ count: r.count,
288
+ reason: r.reason ?? null,
289
+ }));
290
+ }
291
+ // ── Spec 41 — Provenance & staleness ───────────────────────────────────────
292
+ export function hashFileSet(files, projectRoot) {
293
+ const hashes = [];
294
+ let newestMtime = null;
295
+ for (const file of files) {
296
+ try {
297
+ const content = readFileSync(file);
298
+ const mtime = statSync(file).mtimeMs;
299
+ const rel = projectRoot ? relative(projectRoot, file) : file;
300
+ const sha = createHash('sha256').update(content).digest('hex');
301
+ hashes.push([rel, sha]);
302
+ if (newestMtime === null || mtime > newestMtime)
303
+ newestMtime = mtime;
304
+ }
305
+ catch {
306
+ // Unreadable file (deleted between list and hash) — excluded from the set.
307
+ }
308
+ }
309
+ hashes.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));
310
+ const manifest = { files: {}, newestMtime };
311
+ const aggregate = createHash('sha256');
312
+ for (const [rel, sha] of hashes) {
313
+ manifest.files[rel] = sha;
314
+ aggregate.update(rel + '\0' + sha + '\n');
315
+ }
316
+ return {
317
+ contentHash: aggregate.digest('hex'),
318
+ filesCount: hashes.length,
319
+ manifest,
320
+ newestMtime,
321
+ };
322
+ }
323
+ /**
324
+ * Compare a run's recorded content against the working tree. Cheap-first: a
325
+ * stat-only pass (count + newest mtime) gates the full content re-hash; only
326
+ * when those diverge (or `full` is requested) are file contents re-read.
327
+ */
328
+ export function computeStaleness(db, runId, projectRoot, opts = {}) {
329
+ const run = getLedgerRun(db, runId);
330
+ const empty = {
331
+ stale: false,
332
+ changedFiles: [],
333
+ recordedHash: run?.contentHash ?? null,
334
+ currentHash: null,
335
+ filesCount: { recorded: run?.filesCount ?? null, current: 0 },
336
+ newestMtime: { recorded: null, current: null },
337
+ };
338
+ if (!run || !run.fileManifestJson || !run.contentHash)
339
+ return empty;
340
+ const manifest = safeJsonParse(run.fileManifestJson, { files: {}, newestMtime: null });
341
+ const relPaths = Object.keys(manifest.files);
342
+ const recordedFilesCount = run.filesCount ?? relPaths.length;
343
+ const recordedNewestMtime = manifest.newestMtime;
344
+ // Cheap stat-only pass over the recorded file set.
345
+ let currentCount = 0;
346
+ let currentNewestMtime = null;
347
+ const missing = [];
348
+ for (const rel of relPaths) {
349
+ try {
350
+ const st = statSync(join(projectRoot, rel));
351
+ currentCount++;
352
+ if (currentNewestMtime === null || st.mtimeMs > currentNewestMtime)
353
+ currentNewestMtime = st.mtimeMs;
354
+ }
355
+ catch {
356
+ missing.push(rel);
357
+ }
358
+ }
359
+ if (!opts.full &&
360
+ missing.length === 0 &&
361
+ currentCount === recordedFilesCount &&
362
+ currentNewestMtime === recordedNewestMtime) {
363
+ return {
364
+ stale: false,
365
+ changedFiles: [],
366
+ recordedHash: run.contentHash,
367
+ currentHash: run.contentHash,
368
+ filesCount: { recorded: recordedFilesCount, current: currentCount },
369
+ newestMtime: { recorded: recordedNewestMtime, current: currentNewestMtime },
370
+ };
371
+ }
372
+ // Full re-hash + diff against the recorded manifest.
373
+ const current = hashFileSet(relPaths.map((rel) => join(projectRoot, rel)), projectRoot);
374
+ const allRels = new Set([
375
+ ...Object.keys(manifest.files),
376
+ ...Object.keys(current.manifest.files),
377
+ ...missing,
378
+ ]);
379
+ const changedFiles = [];
380
+ for (const rel of allRels) {
381
+ if (manifest.files[rel] !== current.manifest.files[rel])
382
+ changedFiles.push(rel);
383
+ }
384
+ return {
385
+ stale: current.contentHash !== run.contentHash || missing.length > 0,
386
+ changedFiles,
387
+ recordedHash: run.contentHash,
388
+ currentHash: current.contentHash,
389
+ filesCount: { recorded: recordedFilesCount, current: current.filesCount },
390
+ newestMtime: { recorded: recordedNewestMtime, current: current.newestMtime },
391
+ };
392
+ }
393
+ // ── Spec 41 — Lease reclaim & retention ────────────────────────────────────
394
+ /**
395
+ * Tolerance for treating a recorded process start time and a live process's
396
+ * start time as "the same process". `ps -o etime=` reports elapsed seconds
397
+ * truncated to the whole second, so the derived live start time is within ~1s
398
+ * of the true start; 5s of slack covers that plus clock granularity. A reused
399
+ * PID (the real PID-reuse failure mode) starts minutes-to-hours after the
400
+ * original process, far outside this window.
401
+ */
402
+ const PID_REUSE_TOLERANCE_MS = 5000;
403
+ /** True if some process currently holds `pid` (reports liveness, not identity). */
404
+ function isPidAlive(pid) {
405
+ try {
406
+ process.kill(pid, 0);
407
+ return true;
408
+ }
409
+ catch (e) {
410
+ return e.code === 'EPERM';
411
+ }
412
+ }
413
+ /**
414
+ * Parse `ps -o etime=` output (`[[dd-]hh:]mm:ss`) into elapsed seconds.
415
+ * Returns null on any unexpected shape.
416
+ */
417
+ function parseEtimeSeconds(etime) {
418
+ const trimmed = etime.trim();
419
+ if (!trimmed)
420
+ return null;
421
+ let days = 0;
422
+ let rest = trimmed;
423
+ const dash = trimmed.indexOf('-');
424
+ if (dash !== -1) {
425
+ const d = Number.parseInt(trimmed.slice(0, dash), 10);
426
+ if (!Number.isFinite(d))
427
+ return null;
428
+ days = d;
429
+ rest = trimmed.slice(dash + 1);
430
+ }
431
+ const parts = rest.split(':').map((p) => Number.parseInt(p, 10));
432
+ if (parts.some((p) => !Number.isFinite(p)))
433
+ return null;
434
+ let seconds;
435
+ if (parts.length === 2)
436
+ seconds = parts[0] * 60 + parts[1];
437
+ else if (parts.length === 3)
438
+ seconds = parts[0] * 3600 + parts[1] * 60 + parts[2];
439
+ else
440
+ return null;
441
+ return days * 86400 + seconds;
442
+ }
443
+ /** Unix-ms start time of the live process at `pid`, or null if undeterminable. */
444
+ function getProcessStartTimeMs(pid) {
445
+ try {
446
+ // `etime` is portable across BSD (macOS) and GNU (Linux) `ps`.
447
+ const out = execFileSync('ps', ['-o', 'etime=', '-p', String(pid)], {
448
+ encoding: 'utf8',
449
+ timeout: 2000,
450
+ }).trim();
451
+ const seconds = parseEtimeSeconds(out);
452
+ if (seconds === null)
453
+ return null;
454
+ return Date.now() - seconds * 1000;
455
+ }
456
+ catch {
457
+ return null;
458
+ }
459
+ }
460
+ /**
461
+ * True only when `pid` names the *same* process that claimed the lease. PID
462
+ * reuse is defeated by comparing the live process's start time to the one the
463
+ * child recorded at claim; `kill(pid, 0)` alone cannot tell them apart.
464
+ * Conservative on every uncertain branch — an undeterminable live process is
465
+ * treated as alive so a healthy runner is never falsely reclaimed.
466
+ */
467
+ function isSameProcessAlive(pid, recordedStartedAt) {
468
+ if (!isPidAlive(pid))
469
+ return false;
470
+ if (!recordedStartedAt)
471
+ return true;
472
+ const recordedMs = Date.parse(recordedStartedAt);
473
+ if (!Number.isFinite(recordedMs))
474
+ return true;
475
+ const liveMs = getProcessStartTimeMs(pid);
476
+ if (liveMs === null)
477
+ return true;
478
+ return Math.abs(liveMs - recordedMs) <= PID_REUSE_TOLERANCE_MS;
479
+ }
480
+ /**
481
+ * Evaluate the running-lease pool WITHOUT taking a write lock — the liveness
482
+ * signals (PID, process start time, hostname, heartbeat) are read from the
483
+ * ledger and checked against the live process table via `kill(0)`/`ps`. This is
484
+ * the cheap, contention-free polling path `acquireLease` uses while a healthy
485
+ * runner is busy: a queued job reads the pool and sleeps rather than grabbing
486
+ * `BEGIN IMMEDIATE` every cycle, so it never contends with the running job's
487
+ * write transactions. The actual reclaim/claim write happens later, under lock.
488
+ */
489
+ export function evaluateStaleRunning(db, projectRoot, ttlMs) {
490
+ const cutoff = new Date(Date.now() - ttlMs).toISOString();
491
+ const rows = db.prepare(`
492
+ SELECT run_id AS runId, runner_pid AS runnerPid,
493
+ runner_pid_started_at AS runnerPidStartedAt, runner_host AS runnerHost,
494
+ heartbeat_at AS heartbeatAt, started_at AS startedAt
495
+ FROM findings_ledger_runs
496
+ WHERE project_root = ? AND status = 'running'
497
+ `).all(projectRoot);
498
+ const thisHost = hostname();
499
+ const reclaimable = [];
500
+ for (const c of rows) {
501
+ const stale = (c.heartbeatAt !== null && c.heartbeatAt < cutoff) ||
502
+ (c.heartbeatAt === null && c.startedAt !== null && c.startedAt < cutoff);
503
+ if (!stale)
504
+ continue; // a fresh heartbeat is never reclaimed, even for a dead PID
505
+ let reason;
506
+ if (c.runnerHost !== null && c.runnerHost !== thisHost) {
507
+ // Foreign host: the PID names a process on another machine, so it is
508
+ // meaningless here — fall back to the heartbeat (already stale).
509
+ reason = `runner lease expired (no heartbeat; foreign host ${c.runnerHost})`;
510
+ }
511
+ else if (c.runnerPid === null) {
512
+ // Pre-migration row without a recorded PID: stale heartbeat is authoritative.
513
+ reason = 'runner lease expired (no heartbeat)';
514
+ }
515
+ else if (!isSameProcessAlive(c.runnerPid, c.runnerPidStartedAt)) {
516
+ reason = `runner process exited (pid ${c.runnerPid})`;
517
+ }
518
+ else {
519
+ reason = null; // same live process — a stale heartbeat alone does not reclaim
520
+ }
521
+ if (reason !== null)
522
+ reclaimable.push({ runId: c.runId, reason });
523
+ }
524
+ return { runningCount: rows.length, cutoff, reclaimable };
525
+ }
526
+ /**
527
+ * Write half of reclaim: mark already-evaluated `reclaimable` rows as `failed`.
528
+ * The `UPDATE` re-checks `status='running'` + the stale condition under the
529
+ * caller's transaction, so a heartbeat refreshed between evaluation and this
530
+ * write is not wrongly reclaimed. Does not open its own transaction — callers
531
+ * wrap it in one (or rely on it being a single implicit transaction otherwise).
532
+ */
533
+ export function markRunsFailed(db, reclaimable, cutoff) {
534
+ if (reclaimable.length === 0)
535
+ return 0;
536
+ const now = new Date().toISOString();
537
+ const reclaim = db.prepare(`
538
+ UPDATE findings_ledger_runs
539
+ SET status = 'failed', error = ?, finished_at = ?
540
+ WHERE run_id = ?
541
+ AND status = 'running'
542
+ AND (
543
+ (heartbeat_at IS NOT NULL AND heartbeat_at < ?)
544
+ OR
545
+ (heartbeat_at IS NULL AND started_at IS NOT NULL AND started_at < ?)
546
+ )
547
+ `);
548
+ let reclaimed = 0;
549
+ for (const c of reclaimable) {
550
+ reclaimed += reclaim.run(c.reason, now, c.runId, cutoff, cutoff).changes;
551
+ }
552
+ return reclaimed;
553
+ }
554
+ /**
555
+ * Mark `running` runs whose heartbeat is stale (or absent with a stale start
556
+ * time) as `failed` — but only when their runner is genuinely gone. The PID the
557
+ * child recorded at lease claim is the primary liveness signal: a `running` row
558
+ * whose PID is still the same live process is skipped (a healthy child whose
559
+ * synchronous `syncFileIndex` phase starves the event loop keeps its lease
560
+ * through a stale heartbeat). Rows with no PID (pre-migration) or from a foreign
561
+ * host fall back to the heartbeat. Called before lease acquisition and by read
562
+ * paths so a killed runner surfaces as failed rather than wedging the queue.
563
+ * Returns the number of runs reclaimed.
564
+ */
565
+ export function reclaimStaleRunning(db, projectRoot, ttlMs) {
566
+ const { cutoff, reclaimable } = evaluateStaleRunning(db, projectRoot, ttlMs);
567
+ return markRunsFailed(db, reclaimable, cutoff);
568
+ }
569
+ /**
570
+ * Delete all but the newest `keepN` runs for a project root. Findings and
571
+ * coverage cascade via `ON DELETE CASCADE` (foreign_keys is ON). Returns the
572
+ * number of runs pruned.
573
+ */
574
+ export function pruneLedgerRuns(db, projectRoot, keepN) {
575
+ const rows = db.prepare(`
576
+ SELECT run_id FROM findings_ledger_runs WHERE project_root = ? ORDER BY timestamp DESC, run_id DESC
577
+ `).all(projectRoot);
578
+ const toDelete = rows.slice(Math.max(0, keepN));
579
+ const del = db.prepare('DELETE FROM findings_ledger_runs WHERE run_id = ?');
580
+ for (const r of toDelete)
581
+ del.run(r.run_id);
582
+ return toDelete.length;
583
+ }
63
584
  // ── Auto-detect git info ──────────────────────────────────────────────────
64
585
  export function detectRunInput(command, surface, scope, target, toolVersion) {
65
586
  const git = getGitInfo(target);
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAyD7C,6EAA6E;AAE7E,SAAS,UAAU,CAAC,MAAc;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;aACtF,QAAQ,EAAE;aACV,IAAI,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,QAAQ,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;aAC7F,QAAQ,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,6EAA6E;AAE7E,MAAM,UAAU,kBAAkB,CAChC,EAAqB,EACrB,QAAwB,EACxB,UAAuB,EACvB,UAAkB,EAClB,UAAkB;IAElB,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAI5B,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAIhC,CAAC,CAAC;IAEH,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7B,SAAS,CAAC,GAAG,CACX,KAAK,EACL,SAAS,EACT,QAAQ,CAAC,MAAM,IAAI,IAAI,EACvB,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACzB,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,MAAM,EACf,UAAU,EACV,UAAU,CACX,CAAC;QAEF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,GAAG,WAAW,CAAC;gBACrB,QAAQ,EAAG,CAAS,CAAC,QAAQ,IAAI,SAAS;gBAC1C,IAAI,EAAG,CAAS,CAAC,IAAI,IAAI,SAAS;gBAClC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM;aACP,CAAC,CAAC;YACH,aAAa,CAAC,GAAG,CACf,KAAK,EACJ,CAAS,CAAC,QAAQ,IAAI,SAAS,EAC/B,CAAS,CAAC,IAAI,IAAI,SAAS,EAC5B,CAAC,CAAC,QAAQ,EACV,CAAC,CAAC,OAAO,EACT,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,IAAI,IAAI,IAAI,EACd,MAAM,EACN,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,EAAE,CAAC;IACL,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,qBAAqB,CACnC,EAAqB,EACrB,KAAa,EACb,UAAkB;IAElB,EAAE,CAAC,OAAO,CACR,kEAAkE,CACnE,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,6EAA6E;AAE7E,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,OAAkC,EAClC,KAAa,EACb,MAAc,EACd,WAAmB;IAEnB,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,GAAG;QACf,QAAQ,EAAE,GAAG,CAAC,KAAK;QACnB,WAAW;QACX,OAAO;QACP,OAAO;QACP,KAAK;QACL,MAAM;KACP,CAAC;AACJ,CAAC;AAED,6EAA6E;AAE7E,MAAM,UAAU,QAAQ,CAAC,EAAqB;IAC5C,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;GAevB,CAAC,CAAC,GAAG,EAAW,CAAC;IAElB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM;KACjB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,EAAqB,EACrB,KAAc;IAEd,MAAM,SAAS,GAAU,EAAE,CAAC;IAC5B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,KAAK,EAAE,CAAC;QACV,QAAQ,GAAG,sBAAsB,CAAC;QAClC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;MAcpB,QAAQ;;GAEX,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAU,CAAC;IAE9B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,QAAQ,GAAU,EAAE,CAAC;IACzB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrD,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;yBAYD,YAAY;;KAEhC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAU,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrB,GAAG,CAAC;YACJ,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ;YACtB,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;SAC/B,CAAC,CAAC;QACH,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,GAAG,CAAC;YACJ,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;YACpB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;YAC9B,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;SACzC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAyBD;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,EAAqB,EAAE,UAAmB;IAClE,8DAA8D;IAC9D,IAAI,QAAQ,GAAG;;;;GAId,CAAC;IACF,MAAM,MAAM,GAAU,EAAE,CAAC;IAEzB,IAAI,UAAU,EAAE,CAAC;QACf,kEAAkE;QAClE,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CACzB,6DAA6D,CAC9D,CAAC,GAAG,CAAC,UAAU,CAAsC,CAAC;QACvD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,IAAI,oBAAoB,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,QAAQ,IAAI,yBAAyB,CAAC;IACtC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAE7C,CAAC;IAEH,uDAAuD;IACvD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACb,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,+EAA+E;IAC/E,IAAI,QAAQ,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM;YAAE,QAAQ,GAAG,IAAI,CAAC;IACrD,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAElC,kEAAkE;IAClE,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,MAAM,SAAS,GAA0D,IAAI,GAAG,EAAE,CAAC;IAEnF,MAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAIlC,CAAC,CAAC;IAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEzB,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAiD,CAAC;QACtG,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAiD,CAAC;QAEtG,kCAAkC;QAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAC3C,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAC3C,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC;QAED,sCAAsC;QACtC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAEjE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAE/C,8CAA8C;YAC9C,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;gBACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,QAAQ,EAAE,CAAC;YACnC,CAAC;YAED,gDAAgD;YAChD,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;gBACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,UAAU,EAAE,CAAC;YACrC,CAAC;YAED,IAAI,QAAQ,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;gBAClE,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC;gBACzB,GAAG,CAAC,UAAU,IAAI,UAAU,CAAC;gBAC7B,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC;YACZ,aAAa,EAAE,IAAI,CAAC,MAAM;YAC1B,iBAAiB,EAAE,IAAI,CAAC,SAAS;YACjC,YAAY,EAAE,IAAI,CAAC,MAAM;YACzB,gBAAgB,EAAE,IAAI,CAAC,SAAS;SACjC,CAAC,CAAC;IACL,CAAC;IAED,2BAA2B;IAC3B,MAAM,OAAO,GAAqC,EAAE,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,GAAG;YACd,IAAI;YACJ,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,GAAG,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ;SACnC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM;QACN,QAAQ;QACR,SAAS,EAAE;YACT,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5B,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS;SAC7C;QACD,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAqB;IAClD,MAAM,SAAS,GAAI,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,EAAU,CAAC,GAAG,CAAC;IAEpG,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAK9B,CAAC,CAAC,GAAG,EAAW,CAAC;IAElB,MAAM,WAAW,GAA+B,EAAE,CAAC;IACnD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC;QAClF,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;QAC3C,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACzC,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;QAC/D,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC1D,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;IAClF,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AACpC,CAAC;AA2BD,MAAM,UAAU,mBAAmB,CAAC,EAAqB,EAAE,OAAe;IACxE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,IAAI,GAAiB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE3C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,OAAO,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YAED,MAAM,UAAU,GAAgB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1D,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS;gBACzB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAG,CAAC,CAAC,QAAgB,IAAI,YAAY;gBAC7C,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;gBACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,SAAS;gBACjC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS;gBACzB,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;aACvB,CAAC,CAAC,CAAC;YAEJ,MAAM,QAAQ,GAAmB;gBAC/B,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS;gBAC1C,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,UAAU;gBACnC,OAAO,EAAG,IAAI,CAAC,OAAe,IAAI,KAAK;gBACvC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,MAAM;gBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO;aAC/B,CAAC;YAEF,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACnD,QAAQ,EAAE,CAAC;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
package/dist/mcp.js CHANGED
@@ -433,7 +433,7 @@ function registerAllTools(registry) {
433
433
  const jobId = args.jobId;
434
434
  if (!jobId)
435
435
  throw new Error('audit.status requires jobId');
436
- return getAuditJobStatus(jobId);
436
+ return await getAuditJobStatus(jobId);
437
437
  },
438
438
  },
439
439
  {
@@ -837,10 +837,10 @@ function registerAllTools(registry) {
837
837
  handler: async () => {
838
838
  const db = CodeIndexDB.getInstance();
839
839
  await db.initialize();
840
- const funcs = await db.getAllFunctions();
840
+ const functionCount = await db.getFunctionCount();
841
841
  return {
842
842
  success: true,
843
- functionCount: Array.isArray(funcs) ? funcs.length : 0,
843
+ functionCount,
844
844
  };
845
845
  },
846
846
  },