mcp-adr-analysis-server 2.0.10 → 2.0.12

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 (73) hide show
  1. package/README.md +1 -1
  2. package/dist/src/index.d.ts +1 -2
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js +340 -492
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/prompts/adr-suggestion-prompts.d.ts.map +1 -1
  7. package/dist/src/prompts/adr-suggestion-prompts.js +2 -0
  8. package/dist/src/prompts/adr-suggestion-prompts.js.map +1 -1
  9. package/dist/src/tools/adr-suggestion-tool.d.ts +16 -0
  10. package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -1
  11. package/dist/src/tools/adr-suggestion-tool.js +55 -2
  12. package/dist/src/tools/adr-suggestion-tool.js.map +1 -1
  13. package/dist/src/tools/smart-git-push-tool-v2.d.ts +55 -0
  14. package/dist/src/tools/smart-git-push-tool-v2.d.ts.map +1 -0
  15. package/dist/src/tools/smart-git-push-tool-v2.js +527 -0
  16. package/dist/src/tools/smart-git-push-tool-v2.js.map +1 -0
  17. package/dist/src/tools/smart-git-push-tool.d.ts +27 -3
  18. package/dist/src/tools/smart-git-push-tool.d.ts.map +1 -1
  19. package/dist/src/tools/smart-git-push-tool.js +490 -10
  20. package/dist/src/tools/smart-git-push-tool.js.map +1 -1
  21. package/dist/src/tools/smart-score-tool.d.ts +39 -4
  22. package/dist/src/tools/smart-score-tool.d.ts.map +1 -1
  23. package/dist/src/tools/smart-score-tool.js +94 -15
  24. package/dist/src/tools/smart-score-tool.js.map +1 -1
  25. package/dist/src/tools/todo-management-tool-v2.d.ts +329 -0
  26. package/dist/src/tools/todo-management-tool-v2.d.ts.map +1 -0
  27. package/dist/src/tools/todo-management-tool-v2.js +644 -0
  28. package/dist/src/tools/todo-management-tool-v2.js.map +1 -0
  29. package/dist/src/tools/tool-chain-orchestrator.d.ts +3 -41
  30. package/dist/src/tools/tool-chain-orchestrator.d.ts.map +1 -1
  31. package/dist/src/tools/tool-chain-orchestrator.js +10 -198
  32. package/dist/src/tools/tool-chain-orchestrator.js.map +1 -1
  33. package/dist/src/types/conversation-context.d.ts +6 -0
  34. package/dist/src/types/conversation-context.d.ts.map +1 -1
  35. package/dist/src/types/conversation-context.js +9 -1
  36. package/dist/src/types/conversation-context.js.map +1 -1
  37. package/dist/src/types/knowledge-graph-schemas.d.ts +298 -6
  38. package/dist/src/types/knowledge-graph-schemas.d.ts.map +1 -1
  39. package/dist/src/types/knowledge-graph-schemas.js +31 -3
  40. package/dist/src/types/knowledge-graph-schemas.js.map +1 -1
  41. package/dist/src/types/todo-json-schemas.d.ts +663 -0
  42. package/dist/src/types/todo-json-schemas.d.ts.map +1 -0
  43. package/dist/src/types/todo-json-schemas.js +113 -0
  44. package/dist/src/types/todo-json-schemas.js.map +1 -0
  45. package/dist/src/utils/chain-of-thought-template.d.ts.map +1 -1
  46. package/dist/src/utils/chain-of-thought-template.js.map +1 -1
  47. package/dist/src/utils/knowledge-graph-manager.d.ts +50 -0
  48. package/dist/src/utils/knowledge-graph-manager.d.ts.map +1 -1
  49. package/dist/src/utils/knowledge-graph-manager.js +209 -3
  50. package/dist/src/utils/knowledge-graph-manager.js.map +1 -1
  51. package/dist/src/utils/project-health-scoring.js +5 -5
  52. package/dist/src/utils/project-health-scoring.js.map +1 -1
  53. package/dist/src/utils/todo-json-manager.d.ts +71 -0
  54. package/dist/src/utils/todo-json-manager.d.ts.map +1 -0
  55. package/dist/src/utils/todo-json-manager.js +394 -0
  56. package/dist/src/utils/todo-json-manager.js.map +1 -0
  57. package/dist/src/utils/todo-markdown-converter.d.ts +16 -0
  58. package/dist/src/utils/todo-markdown-converter.d.ts.map +1 -0
  59. package/dist/src/utils/todo-markdown-converter.js +362 -0
  60. package/dist/src/utils/todo-markdown-converter.js.map +1 -0
  61. package/dist/src/utils/todo-migration.d.ts +47 -0
  62. package/dist/src/utils/todo-migration.d.ts.map +1 -0
  63. package/dist/src/utils/todo-migration.js +261 -0
  64. package/dist/src/utils/todo-migration.js.map +1 -0
  65. package/package.json +1 -1
  66. package/dist/src/tools/human-override-tool.d.ts +0 -42
  67. package/dist/src/tools/human-override-tool.d.ts.map +0 -1
  68. package/dist/src/tools/human-override-tool.js +0 -431
  69. package/dist/src/tools/human-override-tool.js.map +0 -1
  70. package/dist/src/tools/todo-management-tool.d.ts +0 -344
  71. package/dist/src/tools/todo-management-tool.d.ts.map +0 -1
  72. package/dist/src/tools/todo-management-tool.js +0 -1249
  73. package/dist/src/tools/todo-management-tool.js.map +0 -1
@@ -0,0 +1,71 @@
1
+ /**
2
+ * JSON-First TODO Management System
3
+ *
4
+ * Provides consistent, structured TODO management with automatic scoring sync,
5
+ * knowledge graph integration, and intelligent task automation.
6
+ */
7
+ import { TodoJsonData, TodoTask, TaskUpdateOperation, TodoScoreMetrics } from '../types/todo-json-schemas.js';
8
+ export declare class TodoJsonManager {
9
+ private todoJsonPath;
10
+ private todoMdPath;
11
+ private cacheDir;
12
+ private kgManager;
13
+ private healthScoring;
14
+ constructor(projectPath?: string);
15
+ /**
16
+ * Load TODO data from JSON, creating default structure if needed
17
+ */
18
+ loadTodoData(): Promise<TodoJsonData>;
19
+ /**
20
+ * Save TODO data to JSON and optionally sync to markdown
21
+ */
22
+ saveTodoData(data: TodoJsonData, syncToMarkdown?: boolean): Promise<void>;
23
+ /**
24
+ * Create a new task with automatic ID generation and scoring integration
25
+ */
26
+ createTask(taskData: Partial<TodoTask> & {
27
+ title: string;
28
+ }): Promise<string>;
29
+ /**
30
+ * Update task with automatic changelog and scoring sync
31
+ */
32
+ updateTask(operation: TaskUpdateOperation): Promise<void>;
33
+ /**
34
+ * Move task between sections automatically
35
+ */
36
+ private moveTaskBetweenSections;
37
+ /**
38
+ * Process auto-completion rules
39
+ */
40
+ private processAutoCompletionRules;
41
+ /**
42
+ * Update scoring system with current task data
43
+ */
44
+ private updateScoring;
45
+ /**
46
+ * Calculate comprehensive score metrics
47
+ */
48
+ private calculateScoreMetrics;
49
+ /**
50
+ * Link task to knowledge graph
51
+ */
52
+ private linkToKnowledgeGraph;
53
+ /**
54
+ * Convert JSON data to markdown format
55
+ */
56
+ convertToMarkdown(data?: TodoJsonData): Promise<void>;
57
+ /**
58
+ * Import existing TODO.md into JSON format
59
+ */
60
+ importFromMarkdown(): Promise<void>;
61
+ /**
62
+ * Get analytics and metrics
63
+ */
64
+ getAnalytics(): Promise<{
65
+ metrics: TodoScoreMetrics;
66
+ trends: any[];
67
+ recommendations: string[];
68
+ }>;
69
+ private ensureCacheDirectory;
70
+ }
71
+ //# sourceMappingURL=todo-json-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-json-manager.d.ts","sourceRoot":"","sources":["../../../src/utils/todo-json-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EACL,YAAY,EACZ,QAAQ,EAER,mBAAmB,EACnB,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AAKvC,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,aAAa,CAAuB;gBAEhC,WAAW,CAAC,EAAE,MAAM;IAYhC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IA6D3C;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrF;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAiElF;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+C/D;;OAEG;YACW,uBAAuB;IAkBrC;;OAEG;YACW,0BAA0B;IAsBxC;;OAEG;YACW,aAAa;IA4B3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA6D7B;;OAEG;YACW,oBAAoB;IAkBlC;;OAEG;IACG,iBAAiB,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3D;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAazC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC;QAC5B,OAAO,EAAE,gBAAgB,CAAC;QAC1B,MAAM,EAAE,GAAG,EAAE,CAAC;QACd,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;YAsBY,oBAAoB;CAOnC"}
@@ -0,0 +1,394 @@
1
+ /**
2
+ * JSON-First TODO Management System
3
+ *
4
+ * Provides consistent, structured TODO management with automatic scoring sync,
5
+ * knowledge graph integration, and intelligent task automation.
6
+ */
7
+ import * as fs from 'fs/promises';
8
+ import path from 'path';
9
+ import crypto from 'crypto';
10
+ import { TodoJsonDataSchema } from '../types/todo-json-schemas.js';
11
+ import { loadConfig } from './config.js';
12
+ import { KnowledgeGraphManager } from './knowledge-graph-manager.js';
13
+ import { ProjectHealthScoring } from './project-health-scoring.js';
14
+ export class TodoJsonManager {
15
+ todoJsonPath;
16
+ todoMdPath;
17
+ cacheDir;
18
+ kgManager;
19
+ healthScoring;
20
+ constructor(projectPath) {
21
+ const config = loadConfig();
22
+ const basePath = projectPath || config.projectPath;
23
+ this.cacheDir = path.join(basePath, '.mcp-adr-cache');
24
+ this.todoJsonPath = path.join(this.cacheDir, 'todo-data.json');
25
+ this.todoMdPath = path.join(basePath, 'TODO.md');
26
+ this.kgManager = new KnowledgeGraphManager();
27
+ this.healthScoring = new ProjectHealthScoring(basePath);
28
+ }
29
+ /**
30
+ * Load TODO data from JSON, creating default structure if needed
31
+ */
32
+ async loadTodoData() {
33
+ await this.ensureCacheDirectory();
34
+ try {
35
+ const data = await fs.readFile(this.todoJsonPath, 'utf-8');
36
+ const parsed = JSON.parse(data);
37
+ return TodoJsonDataSchema.parse(parsed);
38
+ }
39
+ catch (error) {
40
+ // Create default structure
41
+ const defaultData = {
42
+ version: '1.0.0',
43
+ metadata: {
44
+ lastUpdated: new Date().toISOString(),
45
+ totalTasks: 0,
46
+ completedTasks: 0,
47
+ autoSyncEnabled: true
48
+ },
49
+ tasks: {},
50
+ sections: [
51
+ {
52
+ id: 'pending',
53
+ title: 'Pending Tasks',
54
+ order: 1,
55
+ collapsed: false,
56
+ tasks: []
57
+ },
58
+ {
59
+ id: 'in_progress',
60
+ title: 'In Progress',
61
+ order: 2,
62
+ collapsed: false,
63
+ tasks: []
64
+ },
65
+ {
66
+ id: 'completed',
67
+ title: 'Completed',
68
+ order: 3,
69
+ collapsed: false,
70
+ tasks: []
71
+ }
72
+ ],
73
+ scoringSync: {
74
+ lastScoreUpdate: new Date().toISOString(),
75
+ taskCompletionScore: 0,
76
+ priorityWeightedScore: 0,
77
+ criticalTasksRemaining: 0,
78
+ scoreHistory: []
79
+ },
80
+ knowledgeGraphSync: {
81
+ lastSync: new Date().toISOString(),
82
+ linkedIntents: [],
83
+ pendingUpdates: []
84
+ },
85
+ automationRules: []
86
+ };
87
+ await this.saveTodoData(defaultData);
88
+ return defaultData;
89
+ }
90
+ }
91
+ /**
92
+ * Save TODO data to JSON and optionally sync to markdown
93
+ */
94
+ async saveTodoData(data, syncToMarkdown = true) {
95
+ await this.ensureCacheDirectory();
96
+ // Update metadata
97
+ data.metadata.lastUpdated = new Date().toISOString();
98
+ data.metadata.totalTasks = Object.keys(data.tasks).length;
99
+ data.metadata.completedTasks = Object.values(data.tasks).filter(t => t.status === 'completed').length;
100
+ // Save JSON
101
+ await fs.writeFile(this.todoJsonPath, JSON.stringify(data, null, 2));
102
+ // Auto-sync to markdown if enabled
103
+ if (syncToMarkdown && data.metadata.autoSyncEnabled) {
104
+ await this.convertToMarkdown(data);
105
+ data.metadata.lastSyncToMarkdown = new Date().toISOString();
106
+ await fs.writeFile(this.todoJsonPath, JSON.stringify(data, null, 2));
107
+ }
108
+ }
109
+ /**
110
+ * Create a new task with automatic ID generation and scoring integration
111
+ */
112
+ async createTask(taskData) {
113
+ const data = await this.loadTodoData();
114
+ const taskId = crypto.randomUUID();
115
+ const now = new Date().toISOString();
116
+ const task = {
117
+ id: taskId,
118
+ title: taskData.title,
119
+ description: taskData.description || '',
120
+ status: taskData.status || 'pending',
121
+ priority: taskData.priority || 'medium',
122
+ category: taskData.category,
123
+ assignee: taskData.assignee,
124
+ createdAt: now,
125
+ updatedAt: now,
126
+ completedAt: undefined,
127
+ dueDate: taskData.dueDate,
128
+ parentTaskId: taskData.parentTaskId,
129
+ subtasks: taskData.subtasks || [],
130
+ dependencies: taskData.dependencies || [],
131
+ blockedBy: taskData.blockedBy || [],
132
+ linkedAdrs: taskData.linkedAdrs || [],
133
+ adrGeneratedTask: taskData.adrGeneratedTask || false,
134
+ intentId: taskData.intentId,
135
+ toolExecutions: taskData.toolExecutions || [],
136
+ scoreWeight: taskData.scoreWeight || 1,
137
+ scoreCategory: taskData.scoreCategory || 'task_completion',
138
+ estimatedHours: taskData.estimatedHours,
139
+ actualHours: taskData.actualHours,
140
+ progressPercentage: taskData.progressPercentage || 0,
141
+ tags: taskData.tags || [],
142
+ notes: taskData.notes,
143
+ lastModifiedBy: taskData.lastModifiedBy || 'tool',
144
+ autoComplete: taskData.autoComplete || false,
145
+ completionCriteria: taskData.completionCriteria,
146
+ version: 1,
147
+ changeLog: [{
148
+ timestamp: now,
149
+ action: 'created',
150
+ details: `Task created: ${taskData.title}`,
151
+ modifiedBy: taskData.lastModifiedBy || 'tool'
152
+ }]
153
+ };
154
+ // Add to tasks
155
+ data.tasks[taskId] = task;
156
+ // Add to appropriate section
157
+ const targetSection = data.sections.find(s => s.id === task.status) || data.sections[0];
158
+ if (targetSection) {
159
+ targetSection.tasks.push(taskId);
160
+ }
161
+ // Update knowledge graph if intentId provided
162
+ if (task.intentId) {
163
+ await this.linkToKnowledgeGraph(taskId, task.intentId, 'generated_from');
164
+ }
165
+ await this.saveTodoData(data);
166
+ await this.updateScoring(data);
167
+ return taskId;
168
+ }
169
+ /**
170
+ * Update task with automatic changelog and scoring sync
171
+ */
172
+ async updateTask(operation) {
173
+ const data = await this.loadTodoData();
174
+ const task = data.tasks[operation.taskId];
175
+ if (!task) {
176
+ throw new Error(`Task ${operation.taskId} not found`);
177
+ }
178
+ const now = new Date().toISOString();
179
+ const oldStatus = task.status;
180
+ // Apply updates
181
+ Object.assign(task, operation.updates);
182
+ task.updatedAt = now;
183
+ task.version += 1;
184
+ // Add changelog entry
185
+ task.changeLog.push({
186
+ timestamp: now,
187
+ action: 'updated',
188
+ details: operation.reason,
189
+ modifiedBy: operation.triggeredBy
190
+ });
191
+ // Handle status changes
192
+ if (operation.updates.status && operation.updates.status !== oldStatus) {
193
+ await this.moveTaskBetweenSections(data, operation.taskId, oldStatus, operation.updates.status);
194
+ // Handle completion
195
+ if (operation.updates.status === 'completed') {
196
+ task.completedAt = now;
197
+ task.progressPercentage = 100;
198
+ // Update knowledge graph
199
+ if (task.intentId) {
200
+ await this.kgManager.updateTodoSnapshot(task.intentId, `Task completed: ${task.title}`);
201
+ }
202
+ // Check for auto-completion rules
203
+ await this.processAutoCompletionRules(data, operation.taskId);
204
+ }
205
+ }
206
+ await this.saveTodoData(data);
207
+ await this.updateScoring(data);
208
+ }
209
+ /**
210
+ * Move task between sections automatically
211
+ */
212
+ async moveTaskBetweenSections(data, taskId, fromStatus, toStatus) {
213
+ const fromSection = data.sections.find(s => s.id === fromStatus);
214
+ const toSection = data.sections.find(s => s.id === toStatus);
215
+ if (fromSection) {
216
+ fromSection.tasks = fromSection.tasks.filter(id => id !== taskId);
217
+ }
218
+ if (toSection) {
219
+ toSection.tasks.push(taskId);
220
+ }
221
+ }
222
+ /**
223
+ * Process auto-completion rules
224
+ */
225
+ async processAutoCompletionRules(data, completedTaskId) {
226
+ // Check for dependent tasks that can now be auto-completed
227
+ for (const [taskId, task] of Object.entries(data.tasks)) {
228
+ if (task.autoComplete && task.dependencies.includes(completedTaskId)) {
229
+ const allDependenciesCompleted = task.dependencies.every(depId => {
230
+ const depTask = data.tasks[depId];
231
+ return depTask && depTask.status === 'completed';
232
+ });
233
+ if (allDependenciesCompleted) {
234
+ await this.updateTask({
235
+ taskId,
236
+ updates: { status: 'completed' },
237
+ reason: `Auto-completed: all dependencies satisfied`,
238
+ triggeredBy: 'automation'
239
+ });
240
+ }
241
+ }
242
+ }
243
+ }
244
+ /**
245
+ * Update scoring system with current task data
246
+ */
247
+ async updateScoring(data) {
248
+ const metrics = this.calculateScoreMetrics(data);
249
+ // Update scoring sync
250
+ data.scoringSync = {
251
+ lastScoreUpdate: new Date().toISOString(),
252
+ taskCompletionScore: metrics.completionPercentage,
253
+ priorityWeightedScore: metrics.priorityWeightedScore,
254
+ criticalTasksRemaining: metrics.criticalTasksRemaining,
255
+ scoreHistory: [
256
+ ...data.scoringSync.scoreHistory,
257
+ {
258
+ timestamp: new Date().toISOString(),
259
+ score: metrics.completionPercentage,
260
+ trigger: 'task_update'
261
+ }
262
+ ].slice(-50) // Keep last 50 entries
263
+ };
264
+ // Update project health scoring
265
+ await this.healthScoring.updateTaskCompletionScore({
266
+ completed: metrics.completedTasks,
267
+ total: metrics.totalTasks,
268
+ criticalTasksRemaining: metrics.criticalTasksRemaining,
269
+ priorityWeightedScore: metrics.priorityWeightedScore
270
+ });
271
+ }
272
+ /**
273
+ * Calculate comprehensive score metrics
274
+ */
275
+ calculateScoreMetrics(data) {
276
+ const tasks = Object.values(data.tasks);
277
+ const totalTasks = tasks.length;
278
+ const completedTasks = tasks.filter(t => t.status === 'completed').length;
279
+ const completionPercentage = totalTasks > 0 ? (completedTasks / totalTasks) * 100 : 100;
280
+ // Priority-weighted scoring
281
+ const priorityWeights = { low: 1, medium: 2, high: 3, critical: 4 };
282
+ const totalWeight = tasks.reduce((sum, t) => sum + priorityWeights[t.priority], 0);
283
+ const completedWeight = tasks
284
+ .filter(t => t.status === 'completed')
285
+ .reduce((sum, t) => sum + priorityWeights[t.priority], 0);
286
+ const priorityWeightedScore = totalWeight > 0 ? (completedWeight / totalWeight) * 100 : 100;
287
+ // Critical tasks remaining
288
+ const criticalTasksRemaining = tasks.filter(t => t.priority === 'critical' && t.status !== 'completed').length;
289
+ // Other metrics
290
+ const blockedTasksCount = tasks.filter(t => t.status === 'blocked').length;
291
+ const now = new Date();
292
+ const averageTaskAge = tasks.reduce((sum, t) => {
293
+ const age = (now.getTime() - new Date(t.createdAt).getTime()) / (1000 * 60 * 60 * 24);
294
+ return sum + age;
295
+ }, 0) / totalTasks;
296
+ // Velocity metrics (last 7 days)
297
+ const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
298
+ const tasksCompletedLastWeek = tasks.filter(t => t.status === 'completed' &&
299
+ t.completedAt &&
300
+ new Date(t.completedAt) > weekAgo).length;
301
+ const completedTasksWithDuration = tasks.filter(t => t.status === 'completed' &&
302
+ t.completedAt);
303
+ const averageCompletionTime = completedTasksWithDuration.length > 0
304
+ ? completedTasksWithDuration.reduce((sum, t) => {
305
+ const duration = (new Date(t.completedAt).getTime() - new Date(t.createdAt).getTime()) / (1000 * 60 * 60);
306
+ return sum + duration;
307
+ }, 0) / completedTasksWithDuration.length
308
+ : 0;
309
+ return {
310
+ totalTasks,
311
+ completedTasks,
312
+ completionPercentage,
313
+ priorityWeightedScore,
314
+ criticalTasksRemaining,
315
+ blockedTasksCount,
316
+ averageTaskAge,
317
+ velocityMetrics: {
318
+ tasksCompletedLastWeek,
319
+ averageCompletionTime
320
+ }
321
+ };
322
+ }
323
+ /**
324
+ * Link task to knowledge graph
325
+ */
326
+ async linkToKnowledgeGraph(taskId, intentId, _linkType) {
327
+ const data = await this.loadTodoData();
328
+ // Update knowledge graph sync
329
+ data.knowledgeGraphSync.linkedIntents.push(intentId);
330
+ data.knowledgeGraphSync.pendingUpdates.push({
331
+ taskId,
332
+ updateType: 'status',
333
+ timestamp: new Date().toISOString()
334
+ });
335
+ await this.saveTodoData(data, false); // Don't sync to markdown yet
336
+ }
337
+ /**
338
+ * Convert JSON data to markdown format
339
+ */
340
+ async convertToMarkdown(data) {
341
+ if (!data) {
342
+ data = await this.loadTodoData();
343
+ }
344
+ const { generateTodoMarkdown } = await import('./todo-markdown-converter.js');
345
+ const markdown = await generateTodoMarkdown(data);
346
+ await fs.writeFile(this.todoMdPath, markdown);
347
+ }
348
+ /**
349
+ * Import existing TODO.md into JSON format
350
+ */
351
+ async importFromMarkdown() {
352
+ try {
353
+ const markdownContent = await fs.readFile(this.todoMdPath, 'utf-8');
354
+ const { parseMarkdownToJson } = await import('./todo-markdown-converter.js');
355
+ const jsonData = await parseMarkdownToJson(markdownContent);
356
+ await this.saveTodoData(jsonData, false);
357
+ }
358
+ catch (error) {
359
+ // If TODO.md doesn't exist, create fresh JSON
360
+ await this.loadTodoData();
361
+ }
362
+ }
363
+ /**
364
+ * Get analytics and metrics
365
+ */
366
+ async getAnalytics() {
367
+ const data = await this.loadTodoData();
368
+ const metrics = this.calculateScoreMetrics(data);
369
+ const recommendations = [];
370
+ if (metrics.criticalTasksRemaining > 0) {
371
+ recommendations.push(`Address ${metrics.criticalTasksRemaining} critical tasks`);
372
+ }
373
+ if (metrics.blockedTasksCount > 0) {
374
+ recommendations.push(`Resolve ${metrics.blockedTasksCount} blocked tasks`);
375
+ }
376
+ if (metrics.averageTaskAge > 30) {
377
+ recommendations.push('Consider breaking down old tasks or removing stale ones');
378
+ }
379
+ return {
380
+ metrics,
381
+ trends: data.scoringSync.scoreHistory,
382
+ recommendations
383
+ };
384
+ }
385
+ async ensureCacheDirectory() {
386
+ try {
387
+ await fs.access(this.cacheDir);
388
+ }
389
+ catch {
390
+ await fs.mkdir(this.cacheDir, { recursive: true });
391
+ }
392
+ }
393
+ }
394
+ //# sourceMappingURL=todo-json-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-json-manager.js","sourceRoot":"","sources":["../../../src/utils/todo-json-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * TODO JSON ↔ Markdown Converter
3
+ *
4
+ * Converts between structured JSON format and human-readable markdown,
5
+ * preserving all metadata and enabling seamless bidirectional sync.
6
+ */
7
+ import { TodoJsonData } from '../types/todo-json-schemas.js';
8
+ /**
9
+ * Convert JSON TODO data to markdown format
10
+ */
11
+ export declare function generateTodoMarkdown(data: TodoJsonData): Promise<string>;
12
+ /**
13
+ * Parse markdown content back to JSON format
14
+ */
15
+ export declare function parseMarkdownToJson(markdown: string): Promise<TodoJsonData>;
16
+ //# sourceMappingURL=todo-markdown-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-markdown-converter.d.ts","sourceRoot":"","sources":["../../../src/utils/todo-markdown-converter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAyB,MAAM,+BAA+B,CAAC;AAKpF;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CA6D9E;AAuFD;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA+EjF"}