code-auditor-mcp 2.0.3 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +41 -3
  2. package/dist/applyDataDirEnv.d.ts +2 -0
  3. package/dist/applyDataDirEnv.d.ts.map +1 -0
  4. package/dist/applyDataDirEnv.js +21 -0
  5. package/dist/applyDataDirEnv.js.map +1 -0
  6. package/dist/auditRunner.d.ts.map +1 -1
  7. package/dist/auditRunner.js +48 -13
  8. package/dist/auditRunner.js.map +1 -1
  9. package/dist/codeIndexDB-enhanced.d.ts +2 -3
  10. package/dist/codeIndexDB-enhanced.d.ts.map +1 -1
  11. package/dist/codeIndexDB-enhanced.js +41 -15
  12. package/dist/codeIndexDB-enhanced.js.map +1 -1
  13. package/dist/codeIndexDb.d.ts +30 -1
  14. package/dist/codeIndexDb.d.ts.map +1 -1
  15. package/dist/codeIndexDb.js +114 -15
  16. package/dist/codeIndexDb.js.map +1 -1
  17. package/dist/codeIndexService.d.ts +7 -3
  18. package/dist/codeIndexService.d.ts.map +1 -1
  19. package/dist/codeIndexService.js +14 -22
  20. package/dist/codeIndexService.js.map +1 -1
  21. package/dist/constants.d.ts +2 -0
  22. package/dist/constants.d.ts.map +1 -1
  23. package/dist/constants.js +6 -0
  24. package/dist/constants.js.map +1 -1
  25. package/dist/dataPaths.d.ts +10 -0
  26. package/dist/dataPaths.d.ts.map +1 -0
  27. package/dist/dataPaths.js +19 -0
  28. package/dist/dataPaths.js.map +1 -0
  29. package/dist/mcp-index.d.ts +3 -1
  30. package/dist/mcp-index.d.ts.map +1 -1
  31. package/dist/mcp-index.js +30 -8
  32. package/dist/mcp-index.js.map +1 -1
  33. package/dist/mcp-standalone.d.ts +1 -1
  34. package/dist/mcp-standalone.d.ts.map +1 -1
  35. package/dist/mcp-standalone.js +160 -55
  36. package/dist/mcp-standalone.js.map +1 -1
  37. package/dist/mcp-tools/projectTasks.d.ts +69 -0
  38. package/dist/mcp-tools/projectTasks.d.ts.map +1 -0
  39. package/dist/mcp-tools/projectTasks.js +129 -0
  40. package/dist/mcp-tools/projectTasks.js.map +1 -0
  41. package/dist/mcp-tools-shared.d.ts.map +1 -1
  42. package/dist/mcp-tools-shared.js +3 -3
  43. package/dist/mcp-tools-shared.js.map +1 -1
  44. package/dist/mcp-ui-simple.d.ts.map +1 -1
  45. package/dist/mcp-ui-simple.js +3 -2
  46. package/dist/mcp-ui-simple.js.map +1 -1
  47. package/dist/mcp.js +203 -61
  48. package/dist/mcp.js.map +1 -1
  49. package/dist/mcpAutoIndex.d.ts +2 -0
  50. package/dist/mcpAutoIndex.d.ts.map +1 -0
  51. package/dist/mcpAutoIndex.js +71 -0
  52. package/dist/mcpAutoIndex.js.map +1 -0
  53. package/dist/mcpDiagnostics.d.ts +11 -0
  54. package/dist/mcpDiagnostics.d.ts.map +1 -0
  55. package/dist/mcpDiagnostics.js +54 -0
  56. package/dist/mcpDiagnostics.js.map +1 -0
  57. package/dist/mcpToolErrors.d.ts +21 -0
  58. package/dist/mcpToolErrors.d.ts.map +1 -0
  59. package/dist/mcpToolErrors.js +81 -0
  60. package/dist/mcpToolErrors.js.map +1 -0
  61. package/dist/search/QueryParser.d.ts.map +1 -1
  62. package/dist/search/QueryParser.js +11 -12
  63. package/dist/search/QueryParser.js.map +1 -1
  64. package/dist/services/ProjectTaskRepository.d.ts +20 -0
  65. package/dist/services/ProjectTaskRepository.d.ts.map +1 -0
  66. package/dist/services/ProjectTaskRepository.js +96 -0
  67. package/dist/services/ProjectTaskRepository.js.map +1 -0
  68. package/dist/services/projectTaskHelpers.d.ts +23 -0
  69. package/dist/services/projectTaskHelpers.d.ts.map +1 -0
  70. package/dist/services/projectTaskHelpers.js +232 -0
  71. package/dist/services/projectTaskHelpers.js.map +1 -0
  72. package/dist/types/projectTask.d.ts +64 -0
  73. package/dist/types/projectTask.d.ts.map +1 -0
  74. package/dist/types/projectTask.js +6 -0
  75. package/dist/types/projectTask.js.map +1 -0
  76. package/package.json +34 -27
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Pure helpers for project tasks — normalization, serialization, patch application.
3
+ * Keeps CodeIndexDB and MCP handlers thin (Single Responsibility).
4
+ */
5
+ export const PROJECT_TASK_STATUSES = [
6
+ 'pending',
7
+ 'in_progress',
8
+ 'blocked',
9
+ 'done',
10
+ 'cancelled'
11
+ ];
12
+ export const PROJECT_TASK_SOURCES = [
13
+ 'manual',
14
+ 'audit',
15
+ 'mcp'
16
+ ];
17
+ const PRIORITIES = ['low', 'medium', 'high'];
18
+ export function normalizeTaskStatus(value, fallback) {
19
+ if (typeof value === 'string' &&
20
+ PROJECT_TASK_STATUSES.includes(value)) {
21
+ return value;
22
+ }
23
+ return fallback;
24
+ }
25
+ export function normalizeTaskSource(value, fallback) {
26
+ if (typeof value === 'string' &&
27
+ PROJECT_TASK_SOURCES.includes(value)) {
28
+ return value;
29
+ }
30
+ return fallback;
31
+ }
32
+ export function normalizeTaskPriority(value) {
33
+ if (typeof value === 'string' &&
34
+ PRIORITIES.includes(value)) {
35
+ return value;
36
+ }
37
+ return undefined;
38
+ }
39
+ export function normalizeStringList(value) {
40
+ if (!Array.isArray(value)) {
41
+ return [];
42
+ }
43
+ return value.filter((x) => typeof x === 'string');
44
+ }
45
+ export function coerceSortOrder(value) {
46
+ if (typeof value === 'number' && Number.isFinite(value)) {
47
+ return value;
48
+ }
49
+ return 0;
50
+ }
51
+ export function storedSortOrder(doc) {
52
+ return coerceSortOrder(doc.sortOrder);
53
+ }
54
+ /**
55
+ * API shape for stored rows (legacy docs may omit structured fields).
56
+ */
57
+ export function serializeProjectTask(doc) {
58
+ const { $loki, meta, ...rest } = doc;
59
+ return {
60
+ ...rest,
61
+ source: normalizeTaskSource(rest.source, 'manual'),
62
+ sortOrder: storedSortOrder(doc),
63
+ blockedBy: normalizeStringList(rest.blockedBy),
64
+ relatedFiles: normalizeStringList(rest.relatedFiles),
65
+ relatedSymbols: normalizeStringList(rest.relatedSymbols)
66
+ };
67
+ }
68
+ const UPDATE_PATCH_KEYS = [
69
+ 'title',
70
+ 'description',
71
+ 'status',
72
+ 'priority',
73
+ 'labels',
74
+ 'metadata',
75
+ 'parentTaskId',
76
+ 'source',
77
+ 'blockedBy',
78
+ 'dueAt',
79
+ 'sortOrder',
80
+ 'relatedFiles',
81
+ 'relatedSymbols'
82
+ ];
83
+ /**
84
+ * Builds a typed patch from MCP/JSON input — ignores unknown keys (no arbitrary spread onto DB).
85
+ */
86
+ export function sanitizeUpdatePatch(raw) {
87
+ if (raw === null || raw === undefined || typeof raw !== 'object') {
88
+ return {};
89
+ }
90
+ const src = raw;
91
+ const out = {};
92
+ for (const key of UPDATE_PATCH_KEYS) {
93
+ if (!Object.prototype.hasOwnProperty.call(src, key)) {
94
+ continue;
95
+ }
96
+ const v = src[key];
97
+ switch (key) {
98
+ case 'title':
99
+ if (typeof v === 'string') {
100
+ out.title = v;
101
+ }
102
+ break;
103
+ case 'description':
104
+ if (v === undefined || v === null || typeof v === 'string') {
105
+ out.description = v === null ? undefined : v;
106
+ }
107
+ break;
108
+ case 'status':
109
+ if (typeof v === 'string' &&
110
+ PROJECT_TASK_STATUSES.includes(v)) {
111
+ out.status = v;
112
+ }
113
+ break;
114
+ case 'priority': {
115
+ const p = normalizeTaskPriority(v);
116
+ if (p !== undefined) {
117
+ out.priority = p;
118
+ }
119
+ break;
120
+ }
121
+ case 'labels':
122
+ if (v === undefined || v === null) {
123
+ out.labels = undefined;
124
+ }
125
+ else if (Array.isArray(v)) {
126
+ out.labels = normalizeStringList(v);
127
+ }
128
+ break;
129
+ case 'metadata':
130
+ if (v !== undefined && typeof v === 'object' && v !== null && !Array.isArray(v)) {
131
+ out.metadata = v;
132
+ }
133
+ break;
134
+ case 'parentTaskId':
135
+ if (v === undefined || v === null) {
136
+ out.parentTaskId = null;
137
+ }
138
+ else if (typeof v === 'string') {
139
+ out.parentTaskId = v;
140
+ }
141
+ break;
142
+ case 'source':
143
+ if (typeof v === 'string' &&
144
+ PROJECT_TASK_SOURCES.includes(v)) {
145
+ out.source = v;
146
+ }
147
+ break;
148
+ case 'blockedBy':
149
+ if (Array.isArray(v)) {
150
+ out.blockedBy = normalizeStringList(v);
151
+ }
152
+ break;
153
+ case 'dueAt':
154
+ if (v === undefined || v === null || v === '') {
155
+ out.dueAt = null;
156
+ }
157
+ else if (typeof v === 'string') {
158
+ out.dueAt = v;
159
+ }
160
+ break;
161
+ case 'sortOrder':
162
+ if (typeof v === 'number' && Number.isFinite(v)) {
163
+ out.sortOrder = v;
164
+ }
165
+ break;
166
+ case 'relatedFiles':
167
+ if (Array.isArray(v)) {
168
+ out.relatedFiles = normalizeStringList(v);
169
+ }
170
+ break;
171
+ case 'relatedSymbols':
172
+ if (Array.isArray(v)) {
173
+ out.relatedSymbols = normalizeStringList(v);
174
+ }
175
+ break;
176
+ default:
177
+ break;
178
+ }
179
+ }
180
+ return out;
181
+ }
182
+ export function applyProjectTaskPatch(doc, patch, nowIso) {
183
+ if (patch.title !== undefined) {
184
+ doc.title = String(patch.title).trim();
185
+ }
186
+ if (patch.description !== undefined) {
187
+ doc.description = patch.description;
188
+ }
189
+ if (patch.priority !== undefined) {
190
+ const p = normalizeTaskPriority(patch.priority);
191
+ if (p !== undefined) {
192
+ doc.priority = p;
193
+ }
194
+ }
195
+ if (patch.labels !== undefined) {
196
+ doc.labels = patch.labels;
197
+ }
198
+ if (patch.metadata !== undefined) {
199
+ doc.metadata = patch.metadata;
200
+ }
201
+ if (patch.parentTaskId !== undefined) {
202
+ doc.parentTaskId = patch.parentTaskId;
203
+ }
204
+ if (patch.source !== undefined) {
205
+ doc.source = normalizeTaskSource(patch.source, doc.source ?? 'manual');
206
+ }
207
+ if (patch.blockedBy !== undefined) {
208
+ doc.blockedBy = normalizeStringList(patch.blockedBy);
209
+ }
210
+ if (patch.sortOrder !== undefined) {
211
+ doc.sortOrder = coerceSortOrder(patch.sortOrder);
212
+ }
213
+ if (patch.relatedFiles !== undefined) {
214
+ doc.relatedFiles = normalizeStringList(patch.relatedFiles);
215
+ }
216
+ if (patch.relatedSymbols !== undefined) {
217
+ doc.relatedSymbols = normalizeStringList(patch.relatedSymbols);
218
+ }
219
+ if (patch.dueAt !== undefined) {
220
+ doc.dueAt =
221
+ patch.dueAt === null || patch.dueAt === ''
222
+ ? undefined
223
+ : String(patch.dueAt);
224
+ }
225
+ if (patch.status !== undefined) {
226
+ const newStatus = normalizeTaskStatus(patch.status, doc.status);
227
+ doc.status = newStatus;
228
+ doc.completedAt = newStatus === 'done' ? nowIso : undefined;
229
+ }
230
+ doc.updatedAt = nowIso;
231
+ }
232
+ //# sourceMappingURL=projectTaskHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectTaskHelpers.js","sourceRoot":"","sources":["../../src/services/projectTaskHelpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Persistent project tasks stored in LokiJS.
3
+ * Survives clearIndex (same DB file; clearIndex clears analysis-derived collections only).
4
+ */
5
+ export type ProjectTaskStatus = 'pending' | 'in_progress' | 'blocked' | 'done' | 'cancelled';
6
+ export type ProjectTaskPriority = 'low' | 'medium' | 'high';
7
+ /** Who created or last logically "owns" the task row */
8
+ export type ProjectTaskSource = 'manual' | 'audit' | 'mcp';
9
+ /** Stored document (may include Loki fields) */
10
+ export interface ProjectTaskDocument {
11
+ taskId: string;
12
+ projectPath: string;
13
+ title: string;
14
+ description?: string;
15
+ status: ProjectTaskStatus;
16
+ priority?: ProjectTaskPriority;
17
+ labels?: string[];
18
+ /** Free-form: related URLs, extra notes beyond structured fields */
19
+ metadata?: Record<string, unknown>;
20
+ parentTaskId?: string | null;
21
+ /** Default applied in API layer when missing (legacy rows). */
22
+ source?: ProjectTaskSource;
23
+ /** Task IDs that block this one (dependency / waiting-on). */
24
+ blockedBy?: string[];
25
+ /** ISO 8601 datetime; optional scheduling */
26
+ dueAt?: string | null;
27
+ /** Lower sorts earlier within the same list (default 0). */
28
+ sortOrder?: number;
29
+ /** Repo file paths tied to the task */
30
+ relatedFiles?: string[];
31
+ /** Symbols (function/class/component names) for cross-linking with the index */
32
+ relatedSymbols?: string[];
33
+ createdAt: string;
34
+ updatedAt: string;
35
+ completedAt?: string | null;
36
+ $loki?: number;
37
+ meta?: unknown;
38
+ }
39
+ /** API-facing task (no Loki internals); defaults applied for legacy stored rows */
40
+ export type ProjectTask = Omit<ProjectTaskDocument, '$loki' | 'meta'> & {
41
+ source: ProjectTaskSource;
42
+ sortOrder: number;
43
+ blockedBy: string[];
44
+ relatedFiles: string[];
45
+ relatedSymbols: string[];
46
+ };
47
+ export interface CreateProjectTaskInput {
48
+ projectPath: string;
49
+ title: string;
50
+ description?: string;
51
+ status?: ProjectTaskStatus;
52
+ priority?: ProjectTaskPriority;
53
+ labels?: string[];
54
+ metadata?: Record<string, unknown>;
55
+ parentTaskId?: string | null;
56
+ source?: ProjectTaskSource;
57
+ blockedBy?: string[];
58
+ dueAt?: string | null;
59
+ sortOrder?: number;
60
+ relatedFiles?: string[];
61
+ relatedSymbols?: string[];
62
+ }
63
+ export type UpdateProjectTaskPatch = Partial<Pick<ProjectTaskDocument, 'title' | 'description' | 'status' | 'priority' | 'labels' | 'metadata' | 'parentTaskId' | 'source' | 'blockedBy' | 'dueAt' | 'sortOrder' | 'relatedFiles' | 'relatedSymbols'>>;
64
+ //# sourceMappingURL=projectTask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectTask.d.ts","sourceRoot":"","sources":["../../src/types/projectTask.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,aAAa,GACb,SAAS,GACT,MAAM,GACN,WAAW,CAAC;AAEhB,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5D,wDAAwD;AACxD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AAE3D,gDAAgD;AAChD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,+DAA+D;IAC/D,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,mFAAmF;AACnF,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG;IACtE,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAC1C,IAAI,CACF,mBAAmB,EACjB,OAAO,GACP,aAAa,GACb,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,UAAU,GACV,cAAc,GACd,QAAQ,GACR,WAAW,GACX,OAAO,GACP,WAAW,GACX,cAAc,GACd,gBAAgB,CACnB,CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Persistent project tasks stored in LokiJS.
3
+ * Survives clearIndex (same DB file; clearIndex clears analysis-derived collections only).
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=projectTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectTask.js","sourceRoot":"","sources":["../../src/types/projectTask.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "code-auditor-mcp",
3
- "version": "2.0.3",
3
+ "version": "2.2.0",
4
4
  "description": "Multi-language code quality auditor with MCP server - Analyze TypeScript, JavaScript, and Go code for SOLID principles, DRY violations, security patterns, and more",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -23,9 +23,10 @@
23
23
  "start:stdio": "node dist/mcp-index.js --stdio",
24
24
  "start:rest": "node dist/cli.js start --rest-api",
25
25
  "generate": "node dist/cli.js generate-config",
26
- "prepublishOnly": "npm run build",
27
- "test": "vitest",
28
- "test:watch": "vitest watch"
26
+ "prepublishOnly": "pnpm run build",
27
+ "test": "vitest run",
28
+ "test:watch": "vitest watch",
29
+ "test:parity": "vitest run \"src/analyzers/universal/__tests__/*Parity.test.ts\""
29
30
  },
30
31
  "keywords": [
31
32
  "audit",
@@ -49,36 +50,37 @@
49
50
  ],
50
51
  "author": "benahammond",
51
52
  "license": "MIT",
53
+ "packageManager": "pnpm@10.12.1",
52
54
  "engines": {
53
- "node": ">=16.0.0"
55
+ "node": ">=18.0.0"
54
56
  },
55
57
  "dependencies": {
56
- "@mcp-ui/server": "^5.11.0",
57
- "@modelcontextprotocol/sdk": "^1.17.1",
58
- "ajv": "^8.12.0",
59
- "chalk": "^5.3.0",
60
- "chokidar": "^3.5.3",
61
- "commander": "^12.0.0",
62
- "cors": "^2.8.5",
63
- "express": "^4.18.2",
64
- "express-rate-limit": "^7.1.5",
58
+ "@mcp-ui/server": "^6.1.0",
59
+ "@modelcontextprotocol/sdk": "^1.27.1",
60
+ "ajv": "^8.18.0",
61
+ "chalk": "^5.6.2",
62
+ "chokidar": "^5.0.0",
63
+ "commander": "^14.0.3",
64
+ "cors": "^2.8.6",
65
+ "express": "^5.2.1",
66
+ "express-rate-limit": "^8.3.1",
65
67
  "flexsearch": "^0.8.212",
66
- "inquirer": "^9.2.15",
67
- "js-yaml": "^4.1.0",
68
+ "inquirer": "^13.3.2",
69
+ "js-yaml": "^4.1.1",
68
70
  "lokijs": "^1.5.12",
69
- "pino": "^8.16.2",
70
- "pino-pretty": "^10.2.3",
71
- "typescript": "^5.0.0"
71
+ "pino": "^10.3.1",
72
+ "pino-pretty": "^13.1.3",
73
+ "typescript": "5.9.2"
72
74
  },
73
75
  "devDependencies": {
74
- "@types/cors": "^2.8.17",
75
- "@types/express": "^4.17.21",
76
- "@types/inquirer": "^9.0.7",
77
- "@types/js-yaml": "^4.0.5",
76
+ "@types/cors": "^2.8.19",
77
+ "@types/express": "^5.0.6",
78
+ "@types/inquirer": "^9.0.9",
79
+ "@types/js-yaml": "^4.0.9",
78
80
  "@types/lokijs": "^1.5.14",
79
- "@types/node": "^20.0.0",
80
- "tsx": "^4.0.0",
81
- "vitest": "^1.0.0"
81
+ "@types/node": "^20.19.11",
82
+ "tsx": "^4.21.0",
83
+ "vitest": "^1.6.1"
82
84
  },
83
85
  "files": [
84
86
  "dist/**/*",
@@ -94,5 +96,10 @@
94
96
  "bugs": {
95
97
  "url": "https://github.com/BenAHammond/code-auditor-mcp/issues"
96
98
  },
97
- "homepage": "https://www.codeauditormcp.com/"
99
+ "homepage": "https://www.codeauditormcp.com/",
100
+ "pnpm": {
101
+ "overrides": {
102
+ "esbuild": ">=0.25.0"
103
+ }
104
+ }
98
105
  }