code-auditor-mcp 2.0.3 → 2.2.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 (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 +163 -59
  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 +206 -65
  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,96 @@
1
+ /**
2
+ * Loki persistence for project tasks. Keeps CodeIndexDB from owning task CRUD logic.
3
+ */
4
+ import path from 'path';
5
+ import { randomUUID } from 'crypto';
6
+ import { applyProjectTaskPatch, coerceSortOrder, normalizeStringList, normalizeTaskPriority, normalizeTaskSource, normalizeTaskStatus, sanitizeUpdatePatch, serializeProjectTask, storedSortOrder } from './projectTaskHelpers.js';
7
+ export class ProjectTaskRepository {
8
+ getTasksCollection;
9
+ persist;
10
+ constructor(getTasksCollection, persist) {
11
+ this.getTasksCollection = getTasksCollection;
12
+ this.persist = persist;
13
+ }
14
+ create(input) {
15
+ const projectPath = path.resolve(input.projectPath);
16
+ const now = new Date().toISOString();
17
+ const status = normalizeTaskStatus(input.status, 'pending');
18
+ const source = normalizeTaskSource(input.source, 'manual');
19
+ const sortOrder = coerceSortOrder(input.sortOrder);
20
+ const blockedBy = normalizeStringList(input.blockedBy);
21
+ const relatedFiles = normalizeStringList(input.relatedFiles);
22
+ const relatedSymbols = normalizeStringList(input.relatedSymbols);
23
+ const priority = normalizeTaskPriority(input.priority);
24
+ const doc = {
25
+ taskId: randomUUID(),
26
+ projectPath,
27
+ title: input.title.trim(),
28
+ ...(input.description !== undefined && { description: input.description }),
29
+ status,
30
+ source,
31
+ sortOrder,
32
+ blockedBy,
33
+ ...(input.dueAt !== undefined && {
34
+ dueAt: input.dueAt === null ? undefined : input.dueAt
35
+ }),
36
+ relatedFiles,
37
+ relatedSymbols,
38
+ ...(priority !== undefined && { priority }),
39
+ ...(input.labels !== undefined && { labels: input.labels }),
40
+ ...(input.metadata !== undefined && { metadata: input.metadata }),
41
+ ...(input.parentTaskId !== undefined && { parentTaskId: input.parentTaskId }),
42
+ createdAt: now,
43
+ updatedAt: now,
44
+ ...(status === 'done' && { completedAt: now })
45
+ };
46
+ this.getTasksCollection().insert(doc);
47
+ this.persist();
48
+ return serializeProjectTask(doc);
49
+ }
50
+ getById(taskId) {
51
+ const found = this.getTasksCollection().findOne({ taskId });
52
+ return found ? serializeProjectTask(found) : null;
53
+ }
54
+ list(projectPath, options) {
55
+ const resolved = path.resolve(projectPath);
56
+ let rows = this.getTasksCollection().find({ projectPath: resolved });
57
+ if (options?.status) {
58
+ rows = rows.filter((r) => r.status === options.status);
59
+ }
60
+ if (options?.source) {
61
+ rows = rows.filter((r) => normalizeTaskSource(r.source, 'manual') === options.source);
62
+ }
63
+ rows.sort((a, b) => {
64
+ const ao = storedSortOrder(a);
65
+ const bo = storedSortOrder(b);
66
+ if (ao !== bo) {
67
+ return ao - bo;
68
+ }
69
+ return (new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());
70
+ });
71
+ const cap = Math.min(Math.max(options?.limit ?? 500, 1), 1000);
72
+ return rows.slice(0, cap).map((r) => serializeProjectTask(r));
73
+ }
74
+ update(taskId, patch) {
75
+ const doc = this.getTasksCollection().findOne({ taskId });
76
+ if (!doc) {
77
+ return null;
78
+ }
79
+ const now = new Date().toISOString();
80
+ const safe = sanitizeUpdatePatch(patch);
81
+ applyProjectTaskPatch(doc, safe, now);
82
+ this.getTasksCollection().update(doc);
83
+ this.persist();
84
+ return serializeProjectTask(doc);
85
+ }
86
+ delete(taskId) {
87
+ const doc = this.getTasksCollection().findOne({ taskId });
88
+ if (!doc) {
89
+ return false;
90
+ }
91
+ this.getTasksCollection().remove(doc);
92
+ this.persist();
93
+ return true;
94
+ }
95
+ }
96
+ //# sourceMappingURL=ProjectTaskRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectTaskRepository.js","sourceRoot":"","sources":["../../src/services/ProjectTaskRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Pure helpers for project tasks — normalization, serialization, patch application.
3
+ * Keeps CodeIndexDB and MCP handlers thin (Single Responsibility).
4
+ */
5
+ import type { ProjectTask, ProjectTaskDocument, ProjectTaskPriority, ProjectTaskSource, ProjectTaskStatus, UpdateProjectTaskPatch } from '../types/projectTask.js';
6
+ export declare const PROJECT_TASK_STATUSES: readonly ProjectTaskStatus[];
7
+ export declare const PROJECT_TASK_SOURCES: readonly ProjectTaskSource[];
8
+ export declare function normalizeTaskStatus(value: unknown, fallback: ProjectTaskStatus): ProjectTaskStatus;
9
+ export declare function normalizeTaskSource(value: unknown, fallback: ProjectTaskSource): ProjectTaskSource;
10
+ export declare function normalizeTaskPriority(value: unknown): ProjectTaskPriority | undefined;
11
+ export declare function normalizeStringList(value: unknown): string[];
12
+ export declare function coerceSortOrder(value: unknown): number;
13
+ export declare function storedSortOrder(doc: ProjectTaskDocument): number;
14
+ /**
15
+ * API shape for stored rows (legacy docs may omit structured fields).
16
+ */
17
+ export declare function serializeProjectTask(doc: ProjectTaskDocument): ProjectTask;
18
+ /**
19
+ * Builds a typed patch from MCP/JSON input — ignores unknown keys (no arbitrary spread onto DB).
20
+ */
21
+ export declare function sanitizeUpdatePatch(raw: unknown): UpdateProjectTaskPatch;
22
+ export declare function applyProjectTaskPatch(doc: ProjectTaskDocument, patch: UpdateProjectTaskPatch, nowIso: string): void;
23
+ //# sourceMappingURL=projectTaskHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectTaskHelpers.d.ts","sourceRoot":"","sources":["../../src/services/projectTaskHelpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,qBAAqB,EAAE,SAAS,iBAAiB,EAMpD,CAAC;AAEX,eAAO,MAAM,oBAAoB,EAAE,SAAS,iBAAiB,EAInD,CAAC;AAIX,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,iBAAiB,GAC1B,iBAAiB,CAQnB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,iBAAiB,GAC1B,iBAAiB,CAQnB;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,GACb,mBAAmB,GAAG,SAAS,CAQjC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAK5D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKtD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,mBAAmB,GAAG,WAAW,CAU1E;AAkBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAkGxE;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,mBAAmB,EACxB,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,MAAM,GACb,IAAI,CAiDN"}
@@ -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.1",
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
  }