code-auditor-mcp 3.7.0 → 3.8.1

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 (129) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +71 -1
  3. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
  4. package/dist/analyzers/cross-language/SchemaValidator.js +122 -43
  5. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
  6. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +2 -2
  7. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +6 -7
  8. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
  9. package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
  10. package/dist/analyzers/ruleRegistry.js +105 -18
  11. package/dist/analyzers/ruleRegistry.js.map +1 -1
  12. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +9 -1
  13. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
  14. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +63 -44
  15. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
  16. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  17. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +76 -28
  18. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  19. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +73 -13
  20. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
  21. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +12 -2
  22. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
  23. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +30 -18
  24. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
  25. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +2 -8
  26. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
  27. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +54 -45
  28. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
  29. package/dist/analyzers/universal/functionConcerns.d.ts +9 -4
  30. package/dist/analyzers/universal/functionConcerns.d.ts.map +1 -1
  31. package/dist/analyzers/universal/functionConcerns.js +25 -11
  32. package/dist/analyzers/universal/functionConcerns.js.map +1 -1
  33. package/dist/analyzers/universal/schema/codeAnalysis.js +4 -4
  34. package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
  35. package/dist/analyzers/universal/schema/jsonSchema.js +124 -11
  36. package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
  37. package/dist/auditRouter.d.ts.map +1 -1
  38. package/dist/auditRouter.js +4 -6
  39. package/dist/auditRouter.js.map +1 -1
  40. package/dist/auditRunner.js +1 -1
  41. package/dist/auditRunner.js.map +1 -1
  42. package/dist/cli.js +284 -75
  43. package/dist/cli.js.map +1 -1
  44. package/dist/codeIndexDB.d.ts +6 -0
  45. package/dist/codeIndexDB.d.ts.map +1 -1
  46. package/dist/codeIndexDB.js +54 -0
  47. package/dist/codeIndexDB.js.map +1 -1
  48. package/dist/config/configLoader.d.ts.map +1 -1
  49. package/dist/config/configLoader.js +23 -0
  50. package/dist/config/configLoader.js.map +1 -1
  51. package/dist/config/defaults.d.ts +3 -0
  52. package/dist/config/defaults.d.ts.map +1 -1
  53. package/dist/config/defaults.js +30 -8
  54. package/dist/config/defaults.js.map +1 -1
  55. package/dist/conventions/conventionMiner.d.ts +18 -3
  56. package/dist/conventions/conventionMiner.d.ts.map +1 -1
  57. package/dist/conventions/conventionMiner.js +130 -12
  58. package/dist/conventions/conventionMiner.js.map +1 -1
  59. package/dist/daemon/args.d.ts +24 -0
  60. package/dist/daemon/args.d.ts.map +1 -0
  61. package/dist/daemon/args.js +60 -0
  62. package/dist/daemon/args.js.map +1 -0
  63. package/dist/daemon/core.d.ts +128 -0
  64. package/dist/daemon/core.d.ts.map +1 -0
  65. package/dist/daemon/core.js +700 -0
  66. package/dist/daemon/core.js.map +1 -0
  67. package/dist/daemon/lspServer.d.ts +51 -0
  68. package/dist/daemon/lspServer.d.ts.map +1 -0
  69. package/dist/daemon/lspServer.js +168 -0
  70. package/dist/daemon/lspServer.js.map +1 -0
  71. package/dist/daemon/main.d.ts +34 -0
  72. package/dist/daemon/main.d.ts.map +1 -0
  73. package/dist/daemon/main.js +136 -0
  74. package/dist/daemon/main.js.map +1 -0
  75. package/dist/daemon/resolve.d.ts +41 -0
  76. package/dist/daemon/resolve.d.ts.map +1 -0
  77. package/dist/daemon/resolve.js +90 -0
  78. package/dist/daemon/resolve.js.map +1 -0
  79. package/dist/daemon/socketClient.d.ts +21 -0
  80. package/dist/daemon/socketClient.d.ts.map +1 -0
  81. package/dist/daemon/socketClient.js +60 -0
  82. package/dist/daemon/socketClient.js.map +1 -0
  83. package/dist/daemon/socketServer.d.ts +33 -0
  84. package/dist/daemon/socketServer.d.ts.map +1 -0
  85. package/dist/daemon/socketServer.js +106 -0
  86. package/dist/daemon/socketServer.js.map +1 -0
  87. package/dist/daemon/types.d.ts +78 -0
  88. package/dist/daemon/types.d.ts.map +1 -0
  89. package/dist/daemon/types.js +10 -0
  90. package/dist/daemon/types.js.map +1 -0
  91. package/dist/dataPaths.d.ts +21 -0
  92. package/dist/dataPaths.d.ts.map +1 -1
  93. package/dist/dataPaths.js +27 -0
  94. package/dist/dataPaths.js.map +1 -1
  95. package/dist/hooks/core.d.ts.map +1 -1
  96. package/dist/hooks/core.js +21 -4
  97. package/dist/hooks/core.js.map +1 -1
  98. package/dist/languages/RuntimeManager.js +10 -0
  99. package/dist/languages/RuntimeManager.js.map +1 -1
  100. package/dist/languages/go/analyzer +0 -0
  101. package/dist/languages/go/analyzer-src/analyzer.go +166 -35
  102. package/dist/languages/go/analyzer-src/solid.go +80 -172
  103. package/dist/languages/go/analyzer-src/types.go +18 -18
  104. package/dist/ledger.d.ts +1 -1
  105. package/dist/ledger.d.ts.map +1 -1
  106. package/dist/ledger.js +3 -3
  107. package/dist/ledger.js.map +1 -1
  108. package/dist/mcpAuditJobs.js +1 -1
  109. package/dist/mcpAuditJobs.js.map +1 -1
  110. package/dist/nextFileIncremental.d.ts +9 -3
  111. package/dist/nextFileIncremental.d.ts.map +1 -1
  112. package/dist/nextFileIncremental.js +32 -6
  113. package/dist/nextFileIncremental.js.map +1 -1
  114. package/dist/pipeline.d.ts +26 -0
  115. package/dist/pipeline.d.ts.map +1 -1
  116. package/dist/pipeline.js +86 -10
  117. package/dist/pipeline.js.map +1 -1
  118. package/dist/pipelineAdapters.d.ts +1 -1
  119. package/dist/pipelineAdapters.js +1 -1
  120. package/dist/reporting/csvReportGenerator.js +1 -1
  121. package/dist/ruleAliases.d.ts.map +1 -1
  122. package/dist/ruleAliases.js +45 -5
  123. package/dist/ruleAliases.js.map +1 -1
  124. package/dist/types.d.ts +23 -1
  125. package/dist/types.d.ts.map +1 -1
  126. package/dist/types.js.map +1 -1
  127. package/package.json +5 -2
  128. package/plugin/.claude-plugin/plugin.json +1 -1
  129. package/plugin/skills/code-auditor/SKILL.md +6 -6
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Spec 50 — `DaemonCore`: the daemon's heart. Owns the store and the pipeline
3
+ * (R1); the LSP and Unix-socket faces are adapters over it.
4
+ *
5
+ * The core reuses the Spec 41 incremental machinery wholesale: `hashAndStatFiles`
6
+ * / `diffFiles` / `splitFindings` / `mergeFindings` from `nextFileIncremental.ts`.
7
+ * The seed is a full `runAuditDispatch` (the same entry `code-audit audit` uses,
8
+ * so counts match — acceptance 10); a warm re-audit is a scoped dispatch merged
9
+ * per-analyzer, exactly the `next-file` warm path made continuous.
10
+ *
11
+ * Concurrency (R5) uses the Spec 41 lease: a `findings_ledger_runs` row with
12
+ * `status='running'`, PID + hostname + start-time, heartbeated. A second daemon
13
+ * that cannot bind the socket (Face B) exits; a crashed daemon's lease is
14
+ * reclaimed by the next start via `reclaimStaleRunning`.
15
+ */
16
+ import { EventEmitter } from 'node:events';
17
+ import { type NextFileSnapshot } from '../nextFileIncremental.js';
18
+ import { type DaemonState, type DaemonDiagnosticsResult, type DaemonFindingsResult } from './types.js';
19
+ export interface DaemonCoreOptions {
20
+ projectRoot: string;
21
+ configName?: string;
22
+ idleTimeoutMs: number;
23
+ /** Called whenever the observable state changes (indexing→ready, etc.). */
24
+ onState?: (state: DaemonState) => void;
25
+ /** Called whenever the findings set is updated (seed or warm re-audit). */
26
+ onFindings?: (snapshot: NextFileSnapshot) => void;
27
+ }
28
+ export declare class DaemonCore extends EventEmitter {
29
+ readonly projectRoot: string;
30
+ private readonly configName?;
31
+ private readonly idleTimeoutMs;
32
+ private status;
33
+ private snapshot;
34
+ private progress;
35
+ private seedStartedAt;
36
+ private phase;
37
+ private phaseCurrent;
38
+ private phaseTotal;
39
+ private phaseStartedAt;
40
+ private orphanStartedAt;
41
+ private seenOrphan;
42
+ private db;
43
+ private leaseRunId;
44
+ private heartbeat;
45
+ private idleTimer;
46
+ private watcher;
47
+ private watchDebounce;
48
+ private pendingWatchPaths;
49
+ private reindexing;
50
+ private lastActivityAt;
51
+ private activeConnections;
52
+ private shutdownRequested;
53
+ private config;
54
+ constructor(options: DaemonCoreOptions);
55
+ /** Called by each face when a client connects/disconnects (idle tracking). */
56
+ registerConnection(): void;
57
+ unregisterConnection(): void;
58
+ /** Faces call this on any client activity so the idle timer resets (R5). */
59
+ markActivity(): void;
60
+ getState(): DaemonState;
61
+ /**
62
+ * R3/R6 — derive `retryAfterMs` from observed progress across the seed's whole
63
+ * lifetime (files → reducers → derived → finalize), never a constant. Each
64
+ * phase is priced on its own observed rate; at a phase boundary the rate is
65
+ * unknown yet, so the value clamps conservatively instead of collapsing to
66
+ * "done" while work remains.
67
+ */
68
+ private deriveRetryAfterMs;
69
+ /**
70
+ * Files phase — the two-population split. Source files (parsed, ~11ms each)
71
+ * are priced at the source rate; orphan files (raw, mostly no visitor) at the
72
+ * orphan rate. Discovery classifies both up front, so the split is known
73
+ * before the first sample. During the source phase the orphan rate is not yet
74
+ * observed, so orphans are priced at the source rate (the honest fallback —
75
+ * conservative, never an underestimate); once the source phase completes, the
76
+ * orphan tail is priced on its own (much faster) rate.
77
+ */
78
+ private deriveFilesEta;
79
+ /** Reducer/derived/finalize phases — uniform unit, priced on the phase's own window. */
80
+ private derivePhaseEta;
81
+ private clampRetry;
82
+ /** Map pipeline + local progress events onto the phase machine (R3). */
83
+ private onSeedProgress;
84
+ private setPhase;
85
+ /**
86
+ * Ordering invariant (R3 accuracy guard): stage 1 yields source files before
87
+ * orphans. The two-population split above interprets `filesIndexed` as "source
88
+ * done up to `sourceTotal`, then orphans" — a future reorder that interleaved
89
+ * the two loops would silently corrupt the estimate. Assert it loudly: throw
90
+ * the moment a source file is reported after an orphan has been seen.
91
+ */
92
+ private assertSourceBeforeOrphan;
93
+ /** All current findings + R4 stale-file report. */
94
+ getFindings(): DaemonFindingsResult;
95
+ /** Per-file findings (diagnostics) + R4 staleness for those files. */
96
+ getDiagnostics(files: string[]): DaemonDiagnosticsResult;
97
+ /**
98
+ * True if a watcher-flagged path belongs to the audited corpus (R5). The
99
+ * watcher reports every change under the root — including the SQLite DB, WAL,
100
+ * and SHM files this process writes to `node_modules/.cache` — so the
101
+ * reconcile gate must filter to source extensions and never infra dirs, or a
102
+ * single persist would re-audit the corpus and loop.
103
+ */
104
+ private isSourcePath;
105
+ /**
106
+ * R4 — validate that the served findings are current. Cheap-first: compare the
107
+ * recorded mtime; only when it diverges (or the file is new/missing) is the
108
+ * content re-hashed. `files` narrows the check to a specific read; `undefined`
109
+ * checks the whole recorded set (count + newest mtime fast path, full hash on
110
+ * divergence).
111
+ */
112
+ checkStaleness(files?: string[]): string[];
113
+ /** Start: init parsers, claim the lease, seed, watch. Resolves once seed completes. */
114
+ start(): Promise<void>;
115
+ private claimLease;
116
+ private startIdleTimer;
117
+ private checkIdle;
118
+ private seed;
119
+ /** Persist the current findings to the ledger (durable snapshot for the CLI). */
120
+ private persistCurrent;
121
+ private startWatcher;
122
+ /** Warm re-audit of the files the watcher flagged. */
123
+ private reconcile;
124
+ private emitState;
125
+ private emitFindings;
126
+ shutdown(reason?: string): Promise<void>;
127
+ }
128
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/daemon/core.ts"],"names":[],"mappings":"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"}