code-auditor-mcp 3.7.0 → 3.8.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.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +43 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.js +122 -43
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +2 -2
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +6 -7
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
- package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
- package/dist/analyzers/ruleRegistry.js +19 -18
- package/dist/analyzers/ruleRegistry.js.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +9 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +63 -44
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +76 -28
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +73 -13
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +12 -2
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +30 -18
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +2 -8
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js +54 -45
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/functionConcerns.d.ts +9 -4
- package/dist/analyzers/universal/functionConcerns.d.ts.map +1 -1
- package/dist/analyzers/universal/functionConcerns.js +25 -11
- package/dist/analyzers/universal/functionConcerns.js.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.js +4 -4
- package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
- package/dist/analyzers/universal/schema/jsonSchema.js +124 -11
- package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
- package/dist/auditRouter.d.ts.map +1 -1
- package/dist/auditRouter.js +4 -6
- package/dist/auditRouter.js.map +1 -1
- package/dist/auditRunner.js +1 -1
- package/dist/auditRunner.js.map +1 -1
- package/dist/cli.js +284 -75
- package/dist/cli.js.map +1 -1
- package/dist/config/configLoader.d.ts.map +1 -1
- package/dist/config/configLoader.js +23 -0
- package/dist/config/configLoader.js.map +1 -1
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +30 -8
- package/dist/config/defaults.js.map +1 -1
- package/dist/conventions/conventionMiner.d.ts +18 -3
- package/dist/conventions/conventionMiner.d.ts.map +1 -1
- package/dist/conventions/conventionMiner.js +130 -12
- package/dist/conventions/conventionMiner.js.map +1 -1
- package/dist/daemon/core.d.ts +128 -0
- package/dist/daemon/core.d.ts.map +1 -0
- package/dist/daemon/core.js +700 -0
- package/dist/daemon/core.js.map +1 -0
- package/dist/daemon/lspServer.d.ts +51 -0
- package/dist/daemon/lspServer.d.ts.map +1 -0
- package/dist/daemon/lspServer.js +168 -0
- package/dist/daemon/lspServer.js.map +1 -0
- package/dist/daemon/main.d.ts +34 -0
- package/dist/daemon/main.d.ts.map +1 -0
- package/dist/daemon/main.js +147 -0
- package/dist/daemon/main.js.map +1 -0
- package/dist/daemon/resolve.d.ts +41 -0
- package/dist/daemon/resolve.d.ts.map +1 -0
- package/dist/daemon/resolve.js +90 -0
- package/dist/daemon/resolve.js.map +1 -0
- package/dist/daemon/socketClient.d.ts +21 -0
- package/dist/daemon/socketClient.d.ts.map +1 -0
- package/dist/daemon/socketClient.js +60 -0
- package/dist/daemon/socketClient.js.map +1 -0
- package/dist/daemon/socketServer.d.ts +33 -0
- package/dist/daemon/socketServer.d.ts.map +1 -0
- package/dist/daemon/socketServer.js +106 -0
- package/dist/daemon/socketServer.js.map +1 -0
- package/dist/daemon/types.d.ts +78 -0
- package/dist/daemon/types.d.ts.map +1 -0
- package/dist/daemon/types.js +10 -0
- package/dist/daemon/types.js.map +1 -0
- package/dist/dataPaths.d.ts +21 -0
- package/dist/dataPaths.d.ts.map +1 -1
- package/dist/dataPaths.js +27 -0
- package/dist/dataPaths.js.map +1 -1
- package/dist/hooks/core.d.ts.map +1 -1
- package/dist/hooks/core.js +21 -4
- package/dist/hooks/core.js.map +1 -1
- package/dist/languages/RuntimeManager.js +10 -0
- package/dist/languages/RuntimeManager.js.map +1 -1
- package/dist/languages/go/analyzer +0 -0
- package/dist/languages/go/analyzer-src/analyzer.go +166 -35
- package/dist/languages/go/analyzer-src/solid.go +80 -172
- package/dist/languages/go/analyzer-src/types.go +18 -18
- package/dist/ledger.d.ts +1 -1
- package/dist/ledger.d.ts.map +1 -1
- package/dist/ledger.js +3 -3
- package/dist/ledger.js.map +1 -1
- package/dist/mcpAuditJobs.js +1 -1
- package/dist/mcpAuditJobs.js.map +1 -1
- package/dist/nextFileIncremental.d.ts +9 -3
- package/dist/nextFileIncremental.d.ts.map +1 -1
- package/dist/nextFileIncremental.js +32 -6
- package/dist/nextFileIncremental.js.map +1 -1
- package/dist/pipeline.d.ts +26 -0
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +86 -10
- package/dist/pipeline.js.map +1 -1
- package/dist/pipelineAdapters.d.ts +1 -1
- package/dist/pipelineAdapters.js +1 -1
- package/dist/reporting/csvReportGenerator.js +1 -1
- package/dist/ruleAliases.d.ts.map +1 -1
- package/dist/ruleAliases.js +41 -2
- package/dist/ruleAliases.js.map +1 -1
- package/dist/types.d.ts +23 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +5 -2
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/skills/code-auditor/SKILL.md +6 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/daemon/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec 50 — Face A: the LSP server over stdio.
|
|
3
|
+
*
|
|
4
|
+
* Editors attach to the daemon as a language server. This adapter contains no
|
|
5
|
+
* analysis — it translates `DaemonCore` state/findings into LSP diagnostics,
|
|
6
|
+
* pull responses, and a status notification (R1: the same core serves both
|
|
7
|
+
* faces; the LSP face and the Unix-socket face cannot drift because neither
|
|
8
|
+
* knows anything about the pipeline).
|
|
9
|
+
*
|
|
10
|
+
* Model:
|
|
11
|
+
* - `initialize` returns capabilities immediately (no blocking on the seed —
|
|
12
|
+
* a 4,000-file seed must not exceed the client's initialize timeout).
|
|
13
|
+
* - Indexing is reported via a `$/code-auditor/status` notification carrying
|
|
14
|
+
* the full `DaemonState` (status + progress + `retryAfterMs`), which the
|
|
15
|
+
* client renders as a status-bar indicator (R6).
|
|
16
|
+
* - Findings are served per-file (the `visitorFindings` in the snapshot) both
|
|
17
|
+
* as push (`textDocument/publishDiagnostics` on every findings update and
|
|
18
|
+
* document open/save) and pull (`textDocument/diagnostic`).
|
|
19
|
+
* - R4: a stale file (edited behind the watcher) gets its diagnostics cleared
|
|
20
|
+
* rather than re-served; the next reconcile repopulates them.
|
|
21
|
+
*/
|
|
22
|
+
import type { DaemonCore } from './core.js';
|
|
23
|
+
export interface LspFaceOptions {
|
|
24
|
+
core: DaemonCore;
|
|
25
|
+
/** Log lifecycle lines to stderr (foreground) instead of running silent. */
|
|
26
|
+
foreground?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare class LspFace {
|
|
29
|
+
private readonly core;
|
|
30
|
+
private readonly foreground;
|
|
31
|
+
private readonly connection;
|
|
32
|
+
private readonly documents;
|
|
33
|
+
/** URI → absolute file path for currently-open documents. */
|
|
34
|
+
private readonly openDocs;
|
|
35
|
+
private started;
|
|
36
|
+
constructor(options: LspFaceOptions);
|
|
37
|
+
private log;
|
|
38
|
+
private registerHandlers;
|
|
39
|
+
private onInitialize;
|
|
40
|
+
private onInitialized;
|
|
41
|
+
private onState;
|
|
42
|
+
/** R4-aware per-file diagnostics: stale files clear rather than re-serve. */
|
|
43
|
+
private diagnosticsForFile;
|
|
44
|
+
/** Push diagnostics for every open document from the live snapshot. */
|
|
45
|
+
private publishDiagnostics;
|
|
46
|
+
/** Start reading stdio. Handlers are registered before this so no message races. */
|
|
47
|
+
start(): void;
|
|
48
|
+
/** The process exits via `finish()` in `main.ts`; there is nothing to unwind. */
|
|
49
|
+
stop(): void;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=lspServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lspServer.d.ts","sourceRoot":"","sources":["../../src/daemon/lspServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAqBH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAO5C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IACxD,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,OAAO,CAAS;IAExB,YAAY,OAAO,EAAE,cAAc,EAWlC;IAED,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,gBAAgB;IAwCxB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,OAAO;IAIf,6EAA6E;IAC7E,OAAO,CAAC,kBAAkB;IAM1B,uEAAuE;IACvE,OAAO,CAAC,kBAAkB;IAM1B,oFAAoF;IACpF,KAAK,IAAI,IAAI,CAIZ;IAED,iFAAiF;IACjF,IAAI,IAAI,IAAI,CAGX;CACF"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec 50 — Face A: the LSP server over stdio.
|
|
3
|
+
*
|
|
4
|
+
* Editors attach to the daemon as a language server. This adapter contains no
|
|
5
|
+
* analysis — it translates `DaemonCore` state/findings into LSP diagnostics,
|
|
6
|
+
* pull responses, and a status notification (R1: the same core serves both
|
|
7
|
+
* faces; the LSP face and the Unix-socket face cannot drift because neither
|
|
8
|
+
* knows anything about the pipeline).
|
|
9
|
+
*
|
|
10
|
+
* Model:
|
|
11
|
+
* - `initialize` returns capabilities immediately (no blocking on the seed —
|
|
12
|
+
* a 4,000-file seed must not exceed the client's initialize timeout).
|
|
13
|
+
* - Indexing is reported via a `$/code-auditor/status` notification carrying
|
|
14
|
+
* the full `DaemonState` (status + progress + `retryAfterMs`), which the
|
|
15
|
+
* client renders as a status-bar indicator (R6).
|
|
16
|
+
* - Findings are served per-file (the `visitorFindings` in the snapshot) both
|
|
17
|
+
* as push (`textDocument/publishDiagnostics` on every findings update and
|
|
18
|
+
* document open/save) and pull (`textDocument/diagnostic`).
|
|
19
|
+
* - R4: a stale file (edited behind the watcher) gets its diagnostics cleared
|
|
20
|
+
* rather than re-served; the next reconcile repopulates them.
|
|
21
|
+
*/
|
|
22
|
+
import { fileURLToPath } from 'node:url';
|
|
23
|
+
import { createConnection, ProposedFeatures, TextDocuments, TextDocumentSyncKind, DiagnosticSeverity, DocumentDiagnosticReportKind, } from 'vscode-languageserver/node.js';
|
|
24
|
+
import { TextDocument } from 'vscode-languageserver-textdocument';
|
|
25
|
+
import { PACKAGE_VERSION } from '../constants.js';
|
|
26
|
+
/** Server→client notification carrying the daemon's observable state (R6). */
|
|
27
|
+
const STATUS_NOTIFICATION = '$/code-auditor/status';
|
|
28
|
+
export class LspFace {
|
|
29
|
+
core;
|
|
30
|
+
foreground;
|
|
31
|
+
connection;
|
|
32
|
+
documents;
|
|
33
|
+
/** URI → absolute file path for currently-open documents. */
|
|
34
|
+
openDocs = new Map();
|
|
35
|
+
started = false;
|
|
36
|
+
constructor(options) {
|
|
37
|
+
this.core = options.core;
|
|
38
|
+
this.foreground = !!options.foreground;
|
|
39
|
+
// Explicit stdio streams: the daemon is spawned by the editor with piped
|
|
40
|
+
// stdio, and nothing else may write to stdout (responses) — logging goes to
|
|
41
|
+
// stderr via `console.error`. This also sidesteps createConnection's
|
|
42
|
+
// command-line transport sniffing (`--stdio`/`--node-ipc`/`--socket`).
|
|
43
|
+
this.connection = createConnection(ProposedFeatures.all, process.stdin, process.stdout);
|
|
44
|
+
this.documents = new TextDocuments(TextDocument);
|
|
45
|
+
this.documents.listen(this.connection);
|
|
46
|
+
this.registerHandlers();
|
|
47
|
+
}
|
|
48
|
+
log(line) {
|
|
49
|
+
if (this.foreground)
|
|
50
|
+
console.error(`[code-auditor-lsp] ${line}`);
|
|
51
|
+
}
|
|
52
|
+
registerHandlers() {
|
|
53
|
+
this.connection.onInitialize((params) => this.onInitialize(params));
|
|
54
|
+
this.connection.onInitialized(() => this.onInitialized());
|
|
55
|
+
this.connection.onShutdown(() => this.log('shutdown requested'));
|
|
56
|
+
this.connection.onExit(() => void this.core.shutdown('lsp exit'));
|
|
57
|
+
this.connection.onDidChangeWatchedFiles(() => {
|
|
58
|
+
// The core's filesystem watcher already reconciles on change; this is the
|
|
59
|
+
// LSP-level echo of the same signal — mark activity so the idle timer
|
|
60
|
+
// never fires mid-edit, and republish once the watcher settles.
|
|
61
|
+
this.core.markActivity?.();
|
|
62
|
+
this.publishDiagnostics();
|
|
63
|
+
});
|
|
64
|
+
this.documents.onDidOpen((e) => {
|
|
65
|
+
this.openDocs.set(e.document.uri, fileURLToPath(e.document.uri));
|
|
66
|
+
this.core.markActivity?.();
|
|
67
|
+
this.publishDiagnostics();
|
|
68
|
+
});
|
|
69
|
+
this.documents.onDidSave((e) => {
|
|
70
|
+
this.core.markActivity?.();
|
|
71
|
+
this.publishDiagnostics();
|
|
72
|
+
});
|
|
73
|
+
this.documents.onDidClose((e) => {
|
|
74
|
+
this.openDocs.delete(e.document.uri);
|
|
75
|
+
this.connection.sendDiagnostics({ uri: e.document.uri, diagnostics: [] });
|
|
76
|
+
});
|
|
77
|
+
// Pull model (textDocument/diagnostic) — mirror of the push path.
|
|
78
|
+
this.connection.languages.diagnostics.on(async (params) => {
|
|
79
|
+
const abs = fileURLToPath(params.textDocument.uri);
|
|
80
|
+
const items = this.diagnosticsForFile(abs);
|
|
81
|
+
return { kind: DocumentDiagnosticReportKind.Full, items };
|
|
82
|
+
});
|
|
83
|
+
// Core → face: republish on every state and findings transition.
|
|
84
|
+
this.core.on('state', (state) => this.onState(state));
|
|
85
|
+
this.core.on('findings', () => this.publishDiagnostics());
|
|
86
|
+
}
|
|
87
|
+
onInitialize(_params) {
|
|
88
|
+
const capabilities = {
|
|
89
|
+
// Track open/close so we know which documents to push diagnostics for,
|
|
90
|
+
// but never sync content — the daemon reads files off disk.
|
|
91
|
+
textDocumentSync: { openClose: true, change: TextDocumentSyncKind.None },
|
|
92
|
+
diagnosticProvider: {
|
|
93
|
+
interFileDependencies: false,
|
|
94
|
+
workspaceDiagnostics: false,
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
return {
|
|
98
|
+
capabilities,
|
|
99
|
+
serverInfo: { name: 'code-auditor-daemon', version: PACKAGE_VERSION },
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
onInitialized() {
|
|
103
|
+
// An attached editor keeps the daemon alive (blocks the idle timeout).
|
|
104
|
+
this.core.registerConnection();
|
|
105
|
+
this.log(`attached; project ${this.core.projectRoot}`);
|
|
106
|
+
this.connection.sendNotification(STATUS_NOTIFICATION, this.core.getState());
|
|
107
|
+
this.publishDiagnostics();
|
|
108
|
+
}
|
|
109
|
+
onState(state) {
|
|
110
|
+
this.connection.sendNotification(STATUS_NOTIFICATION, state);
|
|
111
|
+
}
|
|
112
|
+
/** R4-aware per-file diagnostics: stale files clear rather than re-serve. */
|
|
113
|
+
diagnosticsForFile(abs) {
|
|
114
|
+
const result = this.core.getDiagnostics([abs]);
|
|
115
|
+
if (result.staleFiles.length > 0)
|
|
116
|
+
return [];
|
|
117
|
+
return result.diagnostics.map(violationToDiagnostic);
|
|
118
|
+
}
|
|
119
|
+
/** Push diagnostics for every open document from the live snapshot. */
|
|
120
|
+
publishDiagnostics() {
|
|
121
|
+
for (const [uri, abs] of this.openDocs) {
|
|
122
|
+
this.connection.sendDiagnostics({ uri, diagnostics: this.diagnosticsForFile(abs) });
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/** Start reading stdio. Handlers are registered before this so no message races. */
|
|
126
|
+
start() {
|
|
127
|
+
if (this.started)
|
|
128
|
+
return;
|
|
129
|
+
this.started = true;
|
|
130
|
+
this.connection.listen();
|
|
131
|
+
}
|
|
132
|
+
/** The process exits via `finish()` in `main.ts`; there is nothing to unwind. */
|
|
133
|
+
stop() {
|
|
134
|
+
// no-op — `TextDocuments` owns no resources beyond the connection, which
|
|
135
|
+
// `finish()` tears down by exiting the process.
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** Map a violation's 1-based line/column to a 0-based LSP `Range`. */
|
|
139
|
+
function violationToDiagnostic(v) {
|
|
140
|
+
const line = Math.max(0, (v.line ?? 1) - 1);
|
|
141
|
+
const character = Math.max(0, (v.column ?? 1) - 1);
|
|
142
|
+
// No reliable end position on violations — highlight the start token.
|
|
143
|
+
const range = {
|
|
144
|
+
start: { line, character },
|
|
145
|
+
end: { line, character: character + 1 },
|
|
146
|
+
};
|
|
147
|
+
const message = v.suggestion ? `${v.message}\n\nSuggestion: ${v.suggestion}` : v.message;
|
|
148
|
+
return {
|
|
149
|
+
range,
|
|
150
|
+
severity: severityToDiagnosticSeverity(v.severity),
|
|
151
|
+
code: v.rule || v.type || 'code-auditor',
|
|
152
|
+
source: 'code-auditor',
|
|
153
|
+
message,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function severityToDiagnosticSeverity(s) {
|
|
157
|
+
switch (s) {
|
|
158
|
+
case 'critical':
|
|
159
|
+
return DiagnosticSeverity.Error;
|
|
160
|
+
case 'warning':
|
|
161
|
+
return DiagnosticSeverity.Warning;
|
|
162
|
+
case 'suggestion':
|
|
163
|
+
return DiagnosticSeverity.Hint;
|
|
164
|
+
default:
|
|
165
|
+
return DiagnosticSeverity.Information;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=lspServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lspServer.js","sourceRoot":"","sources":["../../src/daemon/lspServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Spec 50 — the daemon process entry point.
|
|
4
|
+
*
|
|
5
|
+
* Spawned by `code-audit daemon start` (detached, socket face only) or run in
|
|
6
|
+
* the foreground with `--foreground`. It owns the store and the pipeline and
|
|
7
|
+
* serves the Unix socket (Face B). With `--lsp` it also serves the LSP face
|
|
8
|
+
* (Face A) over stdio from the same core — one daemon, two faces (R1). The
|
|
9
|
+
* editor's VS Code client spawns `code-auditor-daemon --lsp <root>`.
|
|
10
|
+
*
|
|
11
|
+
* Arguments (internal — the CLI's `daemon` command is the public surface):
|
|
12
|
+
* <projectRoot> project root to serve (default: cwd)
|
|
13
|
+
* --config <name> config name
|
|
14
|
+
* --idle-timeout-ms <n> idle timeout override (else env/config/default)
|
|
15
|
+
* --foreground log state transitions to stderr instead of running silent
|
|
16
|
+
* --lsp also serve the LSP face over stdio
|
|
17
|
+
*/
|
|
18
|
+
import '../native-bootstrap.js';
|
|
19
|
+
export interface DaemonRunOptions {
|
|
20
|
+
projectRoot: string;
|
|
21
|
+
configName?: string;
|
|
22
|
+
idleTimeoutMs?: number;
|
|
23
|
+
/** Log state transitions to stderr (foreground) instead of running silent. */
|
|
24
|
+
foreground?: boolean;
|
|
25
|
+
/** Serve the LSP face over stdio (Face A) in addition to the socket face. */
|
|
26
|
+
lsp?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Run the daemon in-process, blocking until a signal / idle timeout / socket
|
|
30
|
+
* `shutdown` request. Shared by the detached entry (`main.ts`'s own `main`) and
|
|
31
|
+
* the CLI's `daemon start --foreground`, so the two never drift on lifecycle.
|
|
32
|
+
*/
|
|
33
|
+
export declare function runDaemonForeground(options: DaemonRunOptions): Promise<void>;
|
|
34
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/daemon/main.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,wBAAwB,CAAC;AAYhC,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AA2BD;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ElF"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Spec 50 — the daemon process entry point.
|
|
4
|
+
*
|
|
5
|
+
* Spawned by `code-audit daemon start` (detached, socket face only) or run in
|
|
6
|
+
* the foreground with `--foreground`. It owns the store and the pipeline and
|
|
7
|
+
* serves the Unix socket (Face B). With `--lsp` it also serves the LSP face
|
|
8
|
+
* (Face A) over stdio from the same core — one daemon, two faces (R1). The
|
|
9
|
+
* editor's VS Code client spawns `code-auditor-daemon --lsp <root>`.
|
|
10
|
+
*
|
|
11
|
+
* Arguments (internal — the CLI's `daemon` command is the public surface):
|
|
12
|
+
* <projectRoot> project root to serve (default: cwd)
|
|
13
|
+
* --config <name> config name
|
|
14
|
+
* --idle-timeout-ms <n> idle timeout override (else env/config/default)
|
|
15
|
+
* --foreground log state transitions to stderr instead of running silent
|
|
16
|
+
* --lsp also serve the LSP face over stdio
|
|
17
|
+
*/
|
|
18
|
+
import '../native-bootstrap.js';
|
|
19
|
+
import path from 'node:path';
|
|
20
|
+
import { DaemonCore } from './core.js';
|
|
21
|
+
import { SocketFace } from './socketServer.js';
|
|
22
|
+
import { LspFace } from './lspServer.js';
|
|
23
|
+
import { isDaemonListening } from './socketClient.js';
|
|
24
|
+
import { resolveDaemonSocketPath } from '../dataPaths.js';
|
|
25
|
+
import { findConfigFileUp, loadConfig } from '../config/configLoader.js';
|
|
26
|
+
const DEFAULT_IDLE_TIMEOUT_MS = 5 * 60 * 1000;
|
|
27
|
+
function parseArgs(argv) {
|
|
28
|
+
let projectRoot = process.cwd();
|
|
29
|
+
let configName;
|
|
30
|
+
let idleTimeoutMs;
|
|
31
|
+
let foreground = false;
|
|
32
|
+
let lsp = false;
|
|
33
|
+
for (let i = 0; i < argv.length; i++) {
|
|
34
|
+
const a = argv[i];
|
|
35
|
+
if (a === '--config')
|
|
36
|
+
configName = argv[++i];
|
|
37
|
+
else if (a === '--idle-timeout-ms')
|
|
38
|
+
idleTimeoutMs = Number(argv[++i]);
|
|
39
|
+
else if (a === '--foreground')
|
|
40
|
+
foreground = true;
|
|
41
|
+
else if (a === '--lsp')
|
|
42
|
+
lsp = true;
|
|
43
|
+
else if (!a.startsWith('--'))
|
|
44
|
+
projectRoot = a;
|
|
45
|
+
}
|
|
46
|
+
return { projectRoot: path.resolve(projectRoot), configName, idleTimeoutMs, foreground, lsp };
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Run the daemon in-process, blocking until a signal / idle timeout / socket
|
|
50
|
+
* `shutdown` request. Shared by the detached entry (`main.ts`'s own `main`) and
|
|
51
|
+
* the CLI's `daemon start --foreground`, so the two never drift on lifecycle.
|
|
52
|
+
*/
|
|
53
|
+
export async function runDaemonForeground(options) {
|
|
54
|
+
const projectRoot = path.resolve(options.projectRoot);
|
|
55
|
+
const socketPath = resolveDaemonSocketPath(projectRoot);
|
|
56
|
+
const foreground = !!options.foreground;
|
|
57
|
+
const lsp = !!options.lsp;
|
|
58
|
+
// R5 — one daemon per project root. If a live daemon already owns the socket,
|
|
59
|
+
// a second *socket-only* daemon exits rather than stealing the socket. The LSP
|
|
60
|
+
// face is the exception: the editor needs a language server even when a
|
|
61
|
+
// detached daemon already owns the socket, so `--lsp` runs its own core and
|
|
62
|
+
// simply skips the socket bind instead of exiting. (The lease is the durable
|
|
63
|
+
// backstop; the socket bind is the immediate guard.)
|
|
64
|
+
const socketOwned = await isDaemonListening(socketPath);
|
|
65
|
+
if (socketOwned && !lsp) {
|
|
66
|
+
if (foreground)
|
|
67
|
+
console.error('[code-auditor-daemon] already running for this project; exiting');
|
|
68
|
+
process.exit(0);
|
|
69
|
+
}
|
|
70
|
+
// Idle timeout resolution: CLI arg → env → config → default.
|
|
71
|
+
let idleTimeoutMs = options.idleTimeoutMs;
|
|
72
|
+
if (idleTimeoutMs === undefined || !Number.isFinite(idleTimeoutMs) || idleTimeoutMs <= 0) {
|
|
73
|
+
const envMs = Number(process.env.CODE_AUDITOR_DAEMON_IDLE_MS);
|
|
74
|
+
if (Number.isFinite(envMs) && envMs > 0)
|
|
75
|
+
idleTimeoutMs = envMs;
|
|
76
|
+
}
|
|
77
|
+
if (idleTimeoutMs === undefined || !Number.isFinite(idleTimeoutMs) || idleTimeoutMs <= 0) {
|
|
78
|
+
try {
|
|
79
|
+
const configPath = await findConfigFileUp(projectRoot);
|
|
80
|
+
const config = await loadConfig({ configPath: configPath ?? undefined });
|
|
81
|
+
idleTimeoutMs = config.daemon?.idleTimeoutMs;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// No/invalid config — fall through to the default.
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (idleTimeoutMs === undefined || !Number.isFinite(idleTimeoutMs) || idleTimeoutMs <= 0) {
|
|
88
|
+
idleTimeoutMs = DEFAULT_IDLE_TIMEOUT_MS;
|
|
89
|
+
}
|
|
90
|
+
const core = new DaemonCore({
|
|
91
|
+
projectRoot,
|
|
92
|
+
configName: options.configName,
|
|
93
|
+
idleTimeoutMs,
|
|
94
|
+
onState: (state) => {
|
|
95
|
+
if (foreground)
|
|
96
|
+
console.error(`[code-auditor-daemon] ${state.status}`);
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
const face = new SocketFace({ core, socketPath });
|
|
100
|
+
const lspFace = lsp ? new LspFace({ core, foreground }) : null;
|
|
101
|
+
// A single exit path: whatever triggers a shutdown (SIGINT/SIGTERM, idle
|
|
102
|
+
// timeout, a `shutdown` socket request, or an LSP `exit`) runs through
|
|
103
|
+
// `core.shutdown`, which emits `shutdown`; that listener stops both faces and
|
|
104
|
+
// exits.
|
|
105
|
+
let finished = false;
|
|
106
|
+
const finish = async () => {
|
|
107
|
+
if (finished)
|
|
108
|
+
return;
|
|
109
|
+
finished = true;
|
|
110
|
+
if (!(socketOwned && lsp))
|
|
111
|
+
await face.stop();
|
|
112
|
+
if (lspFace)
|
|
113
|
+
lspFace.stop();
|
|
114
|
+
process.exit(0);
|
|
115
|
+
};
|
|
116
|
+
core.on('shutdown', () => void finish());
|
|
117
|
+
process.on('SIGINT', () => void core.shutdown('SIGINT'));
|
|
118
|
+
process.on('SIGTERM', () => void core.shutdown('SIGTERM'));
|
|
119
|
+
// Bind the socket first so an early client gets a truthful `indexing` status
|
|
120
|
+
// (R3) rather than a connection refused. In `--lsp` mode with a socket already
|
|
121
|
+
// owned by a detached daemon, skip the bind and serve the editor only.
|
|
122
|
+
if (!(socketOwned && lsp)) {
|
|
123
|
+
await face.start();
|
|
124
|
+
if (foreground)
|
|
125
|
+
console.error(`[code-auditor-daemon] serving ${projectRoot} on ${socketPath}`);
|
|
126
|
+
}
|
|
127
|
+
// Start the LSP message pump (handlers registered in the constructor) before
|
|
128
|
+
// seeding so `initialize` is answered immediately even on a large corpus.
|
|
129
|
+
if (lspFace)
|
|
130
|
+
lspFace.start();
|
|
131
|
+
await core.start();
|
|
132
|
+
}
|
|
133
|
+
async function main() {
|
|
134
|
+
const opts = parseArgs(process.argv.slice(2));
|
|
135
|
+
await runDaemonForeground({
|
|
136
|
+
projectRoot: opts.projectRoot,
|
|
137
|
+
configName: opts.configName,
|
|
138
|
+
idleTimeoutMs: opts.idleTimeoutMs,
|
|
139
|
+
foreground: opts.foreground,
|
|
140
|
+
lsp: opts.lsp,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
main().catch((err) => {
|
|
144
|
+
console.error('[code-auditor-daemon] fatal:', err);
|
|
145
|
+
process.exit(1);
|
|
146
|
+
});
|
|
147
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/daemon/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec 50 — R2 resolution layer.
|
|
3
|
+
*
|
|
4
|
+
* Every read surface (CLI command, hook gate, editor) resolves "is a daemon
|
|
5
|
+
* serving this project?" the same way, and the answer is always one of three:
|
|
6
|
+
*
|
|
7
|
+
* 1. **ready** — a daemon is listening and its seed finished; read live state.
|
|
8
|
+
* 2. **not-ready** — a daemon is listening but still indexing; per R3 the
|
|
9
|
+
* status *is* the answer (never an empty findings list).
|
|
10
|
+
* 3. **absent** — no daemon; run in-process, exactly as before (R2: the
|
|
11
|
+
* daemon is an optimisation, never a dependency).
|
|
12
|
+
*
|
|
13
|
+
* The socket is the only discovery mechanism: probe it, then ask for status.
|
|
14
|
+
* A daemon that died between the probe and the status request (or left a stale
|
|
15
|
+
* socket file with nobody listening) resolves to `absent` and the caller falls
|
|
16
|
+
* back in-process — there is no "half-alive daemon" state to wedge on.
|
|
17
|
+
*/
|
|
18
|
+
import type { DaemonState, DaemonFindingsResult, DaemonDiagnosticsResult } from './types.js';
|
|
19
|
+
export type ResolutionMode = 'ready' | 'not-ready' | 'absent';
|
|
20
|
+
export interface ResolvedDaemon {
|
|
21
|
+
mode: ResolutionMode;
|
|
22
|
+
socketPath: string;
|
|
23
|
+
state?: DaemonState;
|
|
24
|
+
}
|
|
25
|
+
/** Probe the socket, then ask for status. Never throws; degrades to `absent`. */
|
|
26
|
+
export declare function resolveDaemon(projectRoot: string): Promise<ResolvedDaemon>;
|
|
27
|
+
/** Read the daemon's full-corpus findings, or `null` if it cannot be reached. */
|
|
28
|
+
export declare function readDaemonFindings(socketPath: string): Promise<DaemonFindingsResult | null>;
|
|
29
|
+
/** Read per-file diagnostics for a specific file set, or `null` if unreachable. */
|
|
30
|
+
export declare function readDaemonDiagnostics(socketPath: string, files: string[]): Promise<DaemonDiagnosticsResult | null>;
|
|
31
|
+
/** Ask a daemon to shut down. Resolves true when the request was acknowledged. */
|
|
32
|
+
export declare function requestDaemonShutdown(socketPath: string): Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Start a daemon detached from the caller. Used by `daemon start` (no
|
|
35
|
+
* `--foreground`) and by the `daemon.autoStart` opt-in. The child is `unref`'d
|
|
36
|
+
* so the parent exits immediately; the daemon talks to the ledger, never back
|
|
37
|
+
* to the parent. `spawn` + `unref` (no IPC channel) mirrors the Spec 41
|
|
38
|
+
* `--detach` pattern — the child survives the parent, not the other way around.
|
|
39
|
+
*/
|
|
40
|
+
export declare function startDaemonDetached(projectRoot: string, configName?: string): void;
|
|
41
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/daemon/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAWD,iFAAiF;AACjF,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAUhF;AAED,iFAAiF;AACjF,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAIjG;AAED,mFAAmF;AACnF,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAIzC;AAED,kFAAkF;AAClF,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGhF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAgBlF"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec 50 — R2 resolution layer.
|
|
3
|
+
*
|
|
4
|
+
* Every read surface (CLI command, hook gate, editor) resolves "is a daemon
|
|
5
|
+
* serving this project?" the same way, and the answer is always one of three:
|
|
6
|
+
*
|
|
7
|
+
* 1. **ready** — a daemon is listening and its seed finished; read live state.
|
|
8
|
+
* 2. **not-ready** — a daemon is listening but still indexing; per R3 the
|
|
9
|
+
* status *is* the answer (never an empty findings list).
|
|
10
|
+
* 3. **absent** — no daemon; run in-process, exactly as before (R2: the
|
|
11
|
+
* daemon is an optimisation, never a dependency).
|
|
12
|
+
*
|
|
13
|
+
* The socket is the only discovery mechanism: probe it, then ask for status.
|
|
14
|
+
* A daemon that died between the probe and the status request (or left a stale
|
|
15
|
+
* socket file with nobody listening) resolves to `absent` and the caller falls
|
|
16
|
+
* back in-process — there is no "half-alive daemon" state to wedge on.
|
|
17
|
+
*/
|
|
18
|
+
import { spawn } from 'node:child_process';
|
|
19
|
+
import { fileURLToPath } from 'node:url';
|
|
20
|
+
import path from 'node:path';
|
|
21
|
+
import { openSync, mkdirSync } from 'node:fs';
|
|
22
|
+
import { resolveDaemonSocketPath, resolveDaemonLogPath } from '../dataPaths.js';
|
|
23
|
+
import { isDaemonListening, sendSocketRequest } from './socketClient.js';
|
|
24
|
+
/** Entrypoint for the detached daemon process (mirrors `resolveJobRunnerEntrypoint`). */
|
|
25
|
+
function resolveDaemonEntrypoint() {
|
|
26
|
+
const current = fileURLToPath(import.meta.url);
|
|
27
|
+
const ext = path.extname(current);
|
|
28
|
+
const dir = path.dirname(current);
|
|
29
|
+
const filename = ext === '.ts' ? 'main.ts' : 'main.js';
|
|
30
|
+
return path.join(dir, filename);
|
|
31
|
+
}
|
|
32
|
+
/** Probe the socket, then ask for status. Never throws; degrades to `absent`. */
|
|
33
|
+
export async function resolveDaemon(projectRoot) {
|
|
34
|
+
const socketPath = resolveDaemonSocketPath(projectRoot);
|
|
35
|
+
const listening = await isDaemonListening(socketPath);
|
|
36
|
+
if (!listening)
|
|
37
|
+
return { mode: 'absent', socketPath };
|
|
38
|
+
const resp = await sendSocketRequest(socketPath, { id: 1, method: 'status', params: {} });
|
|
39
|
+
if (!resp || !resp.ok)
|
|
40
|
+
return { mode: 'absent', socketPath };
|
|
41
|
+
const state = resp.result;
|
|
42
|
+
if (state?.status === 'ready')
|
|
43
|
+
return { mode: 'ready', state, socketPath };
|
|
44
|
+
return { mode: 'not-ready', state, socketPath };
|
|
45
|
+
}
|
|
46
|
+
/** Read the daemon's full-corpus findings, or `null` if it cannot be reached. */
|
|
47
|
+
export async function readDaemonFindings(socketPath) {
|
|
48
|
+
const resp = await sendSocketRequest(socketPath, { id: 2, method: 'findings', params: {} });
|
|
49
|
+
if (!resp || !resp.ok)
|
|
50
|
+
return null;
|
|
51
|
+
return resp.result;
|
|
52
|
+
}
|
|
53
|
+
/** Read per-file diagnostics for a specific file set, or `null` if unreachable. */
|
|
54
|
+
export async function readDaemonDiagnostics(socketPath, files) {
|
|
55
|
+
const resp = await sendSocketRequest(socketPath, { id: 3, method: 'diagnostics', params: { files } });
|
|
56
|
+
if (!resp || !resp.ok)
|
|
57
|
+
return null;
|
|
58
|
+
return resp.result;
|
|
59
|
+
}
|
|
60
|
+
/** Ask a daemon to shut down. Resolves true when the request was acknowledged. */
|
|
61
|
+
export async function requestDaemonShutdown(socketPath) {
|
|
62
|
+
const resp = await sendSocketRequest(socketPath, { id: 4, method: 'shutdown', params: {} });
|
|
63
|
+
return !!(resp && resp.ok);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Start a daemon detached from the caller. Used by `daemon start` (no
|
|
67
|
+
* `--foreground`) and by the `daemon.autoStart` opt-in. The child is `unref`'d
|
|
68
|
+
* so the parent exits immediately; the daemon talks to the ledger, never back
|
|
69
|
+
* to the parent. `spawn` + `unref` (no IPC channel) mirrors the Spec 41
|
|
70
|
+
* `--detach` pattern — the child survives the parent, not the other way around.
|
|
71
|
+
*/
|
|
72
|
+
export function startDaemonDetached(projectRoot, configName) {
|
|
73
|
+
const args = [resolveDaemonEntrypoint(), path.resolve(projectRoot)];
|
|
74
|
+
if (configName)
|
|
75
|
+
args.push('--config', configName);
|
|
76
|
+
// Redirect stderr to a per-project log (mirrors the Spec 41 `--detach` job log,
|
|
77
|
+
// which uses `['ignore', 'ignore', logFd]`). `stdio: 'ignore'` (stderr →
|
|
78
|
+
// `/dev/null`) crashes the detached seed on macOS, and a silent daemon is
|
|
79
|
+
// undiagnosable anyway — a real log makes `daemon start` failures inspectable.
|
|
80
|
+
const logPath = resolveDaemonLogPath(projectRoot);
|
|
81
|
+
mkdirSync(path.dirname(logPath), { recursive: true });
|
|
82
|
+
const logFd = openSync(logPath, 'a');
|
|
83
|
+
const child = spawn(process.execPath, args, {
|
|
84
|
+
detached: true,
|
|
85
|
+
stdio: ['ignore', 'ignore', logFd],
|
|
86
|
+
env: process.env,
|
|
87
|
+
});
|
|
88
|
+
child.unref();
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/daemon/resolve.ts"],"names":[],"mappings":"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"}
|