code-auditor-mcp 3.4.13 → 3.4.15
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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +96 -0
- package/dist/analyzers/applicability.d.ts +41 -0
- package/dist/analyzers/applicability.d.ts.map +1 -0
- package/dist/analyzers/applicability.js +96 -0
- package/dist/analyzers/applicability.js.map +1 -0
- package/dist/analyzers/ruleRegistry.js +11 -11
- package/dist/analyzers/ruleRegistry.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +8 -8
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +2 -2
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +2 -2
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js +9 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/schema/migrations.d.ts +11 -0
- package/dist/analyzers/universal/schema/migrations.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/migrations.js +127 -4
- package/dist/analyzers/universal/schema/migrations.js.map +1 -1
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +62 -23
- package/dist/auditRunner.js.map +1 -1
- package/dist/cli.js +393 -1
- package/dist/cli.js.map +1 -1
- package/dist/codeIndexDB.d.ts +40 -1
- package/dist/codeIndexDB.d.ts.map +1 -1
- package/dist/codeIndexDB.js +222 -50
- package/dist/codeIndexDB.js.map +1 -1
- package/dist/config/defaults.js +2 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/pathProfiles.d.ts +7 -0
- package/dist/config/pathProfiles.d.ts.map +1 -1
- package/dist/config/pathProfiles.js +7 -1
- package/dist/config/pathProfiles.js.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
- package/dist/ledger.d.ts +163 -2
- package/dist/ledger.d.ts.map +1 -1
- package/dist/ledger.js +528 -7
- package/dist/ledger.js.map +1 -1
- package/dist/mcp.js +3 -3
- package/dist/mcp.js.map +1 -1
- package/dist/mcpAuditJobs.d.ts +24 -2
- package/dist/mcpAuditJobs.d.ts.map +1 -1
- package/dist/mcpAuditJobs.js +364 -58
- package/dist/mcpAuditJobs.js.map +1 -1
- package/dist/pipeline.d.ts +9 -2
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +165 -18
- package/dist/pipeline.js.map +1 -1
- package/dist/pipelineAdapters.d.ts.map +1 -1
- package/dist/pipelineAdapters.js +45 -10
- package/dist/pipelineAdapters.js.map +1 -1
- package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
- package/dist/reporting/sarifReportGenerator.js +6 -1
- package/dist/reporting/sarifReportGenerator.js.map +1 -1
- package/dist/ruleAliases.d.ts.map +1 -1
- package/dist/ruleAliases.js +23 -0
- package/dist/ruleAliases.js.map +1 -1
- package/dist/scripts/benchmarkWorkers.js +1 -1
- package/dist/scripts/benchmarkWorkers.js.map +1 -1
- package/dist/services/auditJobService.d.ts +22 -5
- package/dist/services/auditJobService.d.ts.map +1 -1
- package/dist/services/auditJobService.js +67 -26
- package/dist/services/auditJobService.js.map +1 -1
- package/dist/services/fileAccounting.d.ts +83 -0
- package/dist/services/fileAccounting.d.ts.map +1 -0
- package/dist/services/fileAccounting.js +0 -0
- package/dist/services/fileAccounting.js.map +1 -0
- package/dist/styles/styleExtractor.d.ts +2 -2
- package/dist/styles/styleExtractor.d.ts.map +1 -1
- package/dist/styles/styleExtractor.js +83 -11
- package/dist/styles/styleExtractor.js.map +1 -1
- package/dist/styles/styleIndexer.d.ts +14 -0
- package/dist/styles/styleIndexer.d.ts.map +1 -1
- package/dist/styles/styleIndexer.js +117 -16
- package/dist/styles/styleIndexer.js.map +1 -1
- package/dist/styles/tailwindProbe.d.ts +31 -0
- package/dist/styles/tailwindProbe.d.ts.map +1 -1
- package/dist/styles/tailwindProbe.js +145 -4
- package/dist/styles/tailwindProbe.js.map +1 -1
- package/dist/styles/tailwindUtilityExpander.d.ts +3 -0
- package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
- package/dist/styles/tailwindUtilityExpander.js +35 -1
- package/dist/styles/tailwindUtilityExpander.js.map +1 -1
- package/dist/styles/types.d.ts +11 -0
- package/dist/styles/types.d.ts.map +1 -1
- package/dist/types.d.ts +130 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/fileDiscovery.d.ts +71 -0
- package/dist/utils/fileDiscovery.d.ts.map +1 -1
- package/dist/utils/fileDiscovery.js +201 -25
- package/dist/utils/fileDiscovery.js.map +1 -1
- package/dist/workers/auditJobRunner.d.ts +2 -0
- package/dist/workers/auditJobRunner.d.ts.map +1 -0
- package/dist/workers/auditJobRunner.js +37 -0
- package/dist/workers/auditJobRunner.js.map +1 -0
- package/dist/workers/auditWorker.js +26 -0
- package/dist/workers/auditWorker.js.map +1 -1
- package/package.json +2 -2
- 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
|
|
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
|
-
|
|
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);
|
package/dist/ledger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
|
|
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
|
|
840
|
+
const functionCount = await db.getFunctionCount();
|
|
841
841
|
return {
|
|
842
842
|
success: true,
|
|
843
|
-
functionCount
|
|
843
|
+
functionCount,
|
|
844
844
|
};
|
|
845
845
|
},
|
|
846
846
|
},
|