mcp-adr-analysis-server 2.1.19 → 2.1.22

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 (227) hide show
  1. package/README.md +1 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/config/ai-config.d.ts +54 -6
  4. package/dist/src/config/ai-config.d.ts.map +1 -1
  5. package/dist/src/config/ai-config.js +69 -6
  6. package/dist/src/config/ai-config.js.map +1 -1
  7. package/dist/src/config/ape-descriptions.d.ts +77 -0
  8. package/dist/src/config/ape-descriptions.d.ts.map +1 -0
  9. package/dist/src/config/ape-descriptions.js +177 -0
  10. package/dist/src/config/ape-descriptions.js.map +1 -0
  11. package/dist/src/index.d.ts +40 -0
  12. package/dist/src/index.d.ts.map +1 -1
  13. package/dist/src/index.js +564 -8
  14. package/dist/src/index.js.map +1 -1
  15. package/dist/src/prompts/adr-suggestion-prompts.d.ts +5 -0
  16. package/dist/src/prompts/adr-suggestion-prompts.d.ts.map +1 -1
  17. package/dist/src/prompts/adr-suggestion-prompts.js +22 -1
  18. package/dist/src/prompts/adr-suggestion-prompts.js.map +1 -1
  19. package/dist/src/prompts/prompt-catalog.d.ts +95 -0
  20. package/dist/src/prompts/prompt-catalog.d.ts.map +1 -0
  21. package/dist/src/prompts/prompt-catalog.js +300 -0
  22. package/dist/src/prompts/prompt-catalog.js.map +1 -0
  23. package/dist/src/resources/adrs-discovered-resource.d.ts +124 -0
  24. package/dist/src/resources/adrs-discovered-resource.d.ts.map +1 -0
  25. package/dist/src/resources/adrs-discovered-resource.js +174 -0
  26. package/dist/src/resources/adrs-discovered-resource.js.map +1 -0
  27. package/dist/src/resources/adrs-review-resource.d.ts +82 -0
  28. package/dist/src/resources/adrs-review-resource.d.ts.map +1 -0
  29. package/dist/src/resources/adrs-review-resource.js +160 -0
  30. package/dist/src/resources/adrs-review-resource.js.map +1 -0
  31. package/dist/src/resources/architectural-context-resource.d.ts +95 -0
  32. package/dist/src/resources/architectural-context-resource.d.ts.map +1 -0
  33. package/dist/src/resources/architectural-context-resource.js +428 -0
  34. package/dist/src/resources/architectural-context-resource.js.map +1 -0
  35. package/dist/src/resources/conversation-snapshot-resource.d.ts +92 -0
  36. package/dist/src/resources/conversation-snapshot-resource.d.ts.map +1 -0
  37. package/dist/src/resources/conversation-snapshot-resource.js +122 -0
  38. package/dist/src/resources/conversation-snapshot-resource.js.map +1 -0
  39. package/dist/src/resources/deployment-status-resource.js +1 -1
  40. package/dist/src/resources/deployment-status-resource.js.map +1 -1
  41. package/dist/src/resources/environment-analysis-resource.js +1 -1
  42. package/dist/src/resources/environment-analysis-resource.js.map +1 -1
  43. package/dist/src/resources/knowledge-graph-resource.d.ts +129 -0
  44. package/dist/src/resources/knowledge-graph-resource.d.ts.map +1 -0
  45. package/dist/src/resources/knowledge-graph-resource.js +217 -0
  46. package/dist/src/resources/knowledge-graph-resource.js.map +1 -0
  47. package/dist/src/resources/memory-expand-resource.d.ts +90 -0
  48. package/dist/src/resources/memory-expand-resource.d.ts.map +1 -0
  49. package/dist/src/resources/memory-expand-resource.js +176 -0
  50. package/dist/src/resources/memory-expand-resource.js.map +1 -0
  51. package/dist/src/resources/memory-stats-resource.d.ts +77 -0
  52. package/dist/src/resources/memory-stats-resource.d.ts.map +1 -0
  53. package/dist/src/resources/memory-stats-resource.js +108 -0
  54. package/dist/src/resources/memory-stats-resource.js.map +1 -0
  55. package/dist/src/resources/project-metrics-resource.js +1 -1
  56. package/dist/src/resources/project-metrics-resource.js.map +1 -1
  57. package/dist/src/resources/resource-cache.d.ts.map +1 -1
  58. package/dist/src/resources/resource-cache.js +2 -1
  59. package/dist/src/resources/resource-cache.js.map +1 -1
  60. package/dist/src/resources/server-context-resource.d.ts +69 -0
  61. package/dist/src/resources/server-context-resource.d.ts.map +1 -0
  62. package/dist/src/resources/server-context-resource.js +104 -0
  63. package/dist/src/resources/server-context-resource.js.map +1 -0
  64. package/dist/src/resources/tool-catalog-resource.d.ts +122 -0
  65. package/dist/src/resources/tool-catalog-resource.d.ts.map +1 -0
  66. package/dist/src/resources/tool-catalog-resource.js +167 -0
  67. package/dist/src/resources/tool-catalog-resource.js.map +1 -0
  68. package/dist/src/tools/adr-bootstrap-validation-tool.d.ts.map +1 -1
  69. package/dist/src/tools/adr-bootstrap-validation-tool.js +7 -6
  70. package/dist/src/tools/adr-bootstrap-validation-tool.js.map +1 -1
  71. package/dist/src/tools/adr-suggestion-tool.d.ts +5 -0
  72. package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -1
  73. package/dist/src/tools/adr-suggestion-tool.js +40 -71
  74. package/dist/src/tools/adr-suggestion-tool.js.map +1 -1
  75. package/dist/src/tools/bootstrap-validation-loop-tool.d.ts +23 -1
  76. package/dist/src/tools/bootstrap-validation-loop-tool.d.ts.map +1 -1
  77. package/dist/src/tools/bootstrap-validation-loop-tool.js +15 -5
  78. package/dist/src/tools/bootstrap-validation-loop-tool.js.map +1 -1
  79. package/dist/src/tools/ce-mcp-tools.d.ts +291 -0
  80. package/dist/src/tools/ce-mcp-tools.d.ts.map +1 -0
  81. package/dist/src/tools/ce-mcp-tools.js +1188 -0
  82. package/dist/src/tools/ce-mcp-tools.js.map +1 -0
  83. package/dist/src/tools/content-masking-tool.d.ts +11 -0
  84. package/dist/src/tools/content-masking-tool.d.ts.map +1 -1
  85. package/dist/src/tools/content-masking-tool.js +13 -6
  86. package/dist/src/tools/content-masking-tool.js.map +1 -1
  87. package/dist/src/tools/deployment-readiness-tool.d.ts +11 -0
  88. package/dist/src/tools/deployment-readiness-tool.d.ts.map +1 -1
  89. package/dist/src/tools/deployment-readiness-tool.js +10 -4
  90. package/dist/src/tools/deployment-readiness-tool.js.map +1 -1
  91. package/dist/src/tools/environment-analysis-tool.d.ts +96 -1
  92. package/dist/src/tools/environment-analysis-tool.d.ts.map +1 -1
  93. package/dist/src/tools/environment-analysis-tool.js +38 -46
  94. package/dist/src/tools/environment-analysis-tool.js.map +1 -1
  95. package/dist/src/tools/research-question-tool.d.ts.map +1 -1
  96. package/dist/src/tools/research-question-tool.js +3 -2
  97. package/dist/src/tools/research-question-tool.js.map +1 -1
  98. package/dist/src/tools/review-existing-adrs-tool.d.ts +5 -0
  99. package/dist/src/tools/review-existing-adrs-tool.d.ts.map +1 -1
  100. package/dist/src/tools/review-existing-adrs-tool.js +123 -42
  101. package/dist/src/tools/review-existing-adrs-tool.js.map +1 -1
  102. package/dist/src/tools/rule-generation-tool.d.ts.map +1 -1
  103. package/dist/src/tools/rule-generation-tool.js +3 -5
  104. package/dist/src/tools/rule-generation-tool.js.map +1 -1
  105. package/dist/src/tools/search-codebase-tool.d.ts +148 -0
  106. package/dist/src/tools/search-codebase-tool.d.ts.map +1 -0
  107. package/dist/src/tools/search-codebase-tool.js +406 -0
  108. package/dist/src/tools/search-codebase-tool.js.map +1 -0
  109. package/dist/src/tools/smart-git-push-tool-v2.js +1 -1
  110. package/dist/src/tools/smart-git-push-tool-v2.js.map +1 -1
  111. package/dist/src/tools/tool-catalog.d.ts +134 -0
  112. package/dist/src/tools/tool-catalog.d.ts.map +1 -0
  113. package/dist/src/tools/tool-catalog.js +1431 -0
  114. package/dist/src/tools/tool-catalog.js.map +1 -0
  115. package/dist/src/tools/tool-chain-orchestrator.d.ts +11 -2
  116. package/dist/src/tools/tool-chain-orchestrator.d.ts.map +1 -1
  117. package/dist/src/tools/tool-chain-orchestrator.js +11 -2
  118. package/dist/src/tools/tool-chain-orchestrator.js.map +1 -1
  119. package/dist/src/tools/tool-dispatcher.d.ts +98 -0
  120. package/dist/src/tools/tool-dispatcher.d.ts.map +1 -0
  121. package/dist/src/tools/tool-dispatcher.js +225 -0
  122. package/dist/src/tools/tool-dispatcher.js.map +1 -0
  123. package/dist/src/tools/tree-sitter-code-tools.d.ts +184 -0
  124. package/dist/src/tools/tree-sitter-code-tools.d.ts.map +1 -0
  125. package/dist/src/tools/tree-sitter-code-tools.js +642 -0
  126. package/dist/src/tools/tree-sitter-code-tools.js.map +1 -0
  127. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts +22 -0
  128. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts.map +1 -1
  129. package/dist/src/tools/troubleshoot-guided-workflow-tool.js +20 -3
  130. package/dist/src/tools/troubleshoot-guided-workflow-tool.js.map +1 -1
  131. package/dist/src/tools/update-knowledge-tool.d.ts +89 -0
  132. package/dist/src/tools/update-knowledge-tool.d.ts.map +1 -0
  133. package/dist/src/tools/update-knowledge-tool.js +222 -0
  134. package/dist/src/tools/update-knowledge-tool.js.map +1 -0
  135. package/dist/src/types/ce-mcp.d.ts +248 -0
  136. package/dist/src/types/ce-mcp.d.ts.map +1 -0
  137. package/dist/src/types/ce-mcp.js +27 -0
  138. package/dist/src/types/ce-mcp.js.map +1 -0
  139. package/dist/src/utils/adr-context-detector.js +1 -1
  140. package/dist/src/utils/adr-context-detector.js.map +1 -1
  141. package/dist/src/utils/adr-planning-task-integration.d.ts +260 -0
  142. package/dist/src/utils/adr-planning-task-integration.d.ts.map +1 -0
  143. package/dist/src/utils/adr-planning-task-integration.js +466 -0
  144. package/dist/src/utils/adr-planning-task-integration.js.map +1 -0
  145. package/dist/src/utils/adr-timeline-extractor.d.ts.map +1 -1
  146. package/dist/src/utils/adr-timeline-extractor.js +3 -2
  147. package/dist/src/utils/adr-timeline-extractor.js.map +1 -1
  148. package/dist/src/utils/ai-executor.d.ts +10 -0
  149. package/dist/src/utils/ai-executor.d.ts.map +1 -1
  150. package/dist/src/utils/ai-executor.js +14 -3
  151. package/dist/src/utils/ai-executor.js.map +1 -1
  152. package/dist/src/utils/automatic-prompt-engineering.d.ts +5 -0
  153. package/dist/src/utils/automatic-prompt-engineering.d.ts.map +1 -1
  154. package/dist/src/utils/automatic-prompt-engineering.js +10 -90
  155. package/dist/src/utils/automatic-prompt-engineering.js.map +1 -1
  156. package/dist/src/utils/bootstrap-task-integration.d.ts +214 -0
  157. package/dist/src/utils/bootstrap-task-integration.d.ts.map +1 -0
  158. package/dist/src/utils/bootstrap-task-integration.js +365 -0
  159. package/dist/src/utils/bootstrap-task-integration.js.map +1 -0
  160. package/dist/src/utils/dag-executor.d.ts.map +1 -1
  161. package/dist/src/utils/dag-executor.js +48 -15
  162. package/dist/src/utils/dag-executor.js.map +1 -1
  163. package/dist/src/utils/deployment-task-integration.d.ts +260 -0
  164. package/dist/src/utils/deployment-task-integration.d.ts.map +1 -0
  165. package/dist/src/utils/deployment-task-integration.js +393 -0
  166. package/dist/src/utils/deployment-task-integration.js.map +1 -0
  167. package/dist/src/utils/dynamic-deployment-intelligence.js +1 -1
  168. package/dist/src/utils/dynamic-deployment-intelligence.js.map +1 -1
  169. package/dist/src/utils/enhanced-logging.d.ts +3 -0
  170. package/dist/src/utils/enhanced-logging.d.ts.map +1 -1
  171. package/dist/src/utils/enhanced-logging.js +9 -30
  172. package/dist/src/utils/enhanced-logging.js.map +1 -1
  173. package/dist/src/utils/environment-capability-registry.js +1 -1
  174. package/dist/src/utils/environment-capability-registry.js.map +1 -1
  175. package/dist/src/utils/file-system.d.ts.map +1 -1
  176. package/dist/src/utils/file-system.js +33 -3
  177. package/dist/src/utils/file-system.js.map +1 -1
  178. package/dist/src/utils/gitleaks-detector.js +1 -1
  179. package/dist/src/utils/gitleaks-detector.js.map +1 -1
  180. package/dist/src/utils/knowledge-graph-manager.d.ts +13 -0
  181. package/dist/src/utils/knowledge-graph-manager.d.ts.map +1 -1
  182. package/dist/src/utils/knowledge-graph-manager.js +13 -0
  183. package/dist/src/utils/knowledge-graph-manager.js.map +1 -1
  184. package/dist/src/utils/prompt-execution.d.ts +29 -1
  185. package/dist/src/utils/prompt-execution.d.ts.map +1 -1
  186. package/dist/src/utils/prompt-execution.js +29 -1
  187. package/dist/src/utils/prompt-execution.js.map +1 -1
  188. package/dist/src/utils/research-orchestrator.d.ts +87 -1
  189. package/dist/src/utils/research-orchestrator.d.ts.map +1 -1
  190. package/dist/src/utils/research-orchestrator.js +121 -17
  191. package/dist/src/utils/research-orchestrator.js.map +1 -1
  192. package/dist/src/utils/research-task-integration.d.ts +297 -0
  193. package/dist/src/utils/research-task-integration.d.ts.map +1 -0
  194. package/dist/src/utils/research-task-integration.js +449 -0
  195. package/dist/src/utils/research-task-integration.js.map +1 -0
  196. package/dist/src/utils/ripgrep-wrapper.d.ts.map +1 -1
  197. package/dist/src/utils/ripgrep-wrapper.js +17 -3
  198. package/dist/src/utils/ripgrep-wrapper.js.map +1 -1
  199. package/dist/src/utils/sandbox-executor.d.ts +145 -0
  200. package/dist/src/utils/sandbox-executor.d.ts.map +1 -0
  201. package/dist/src/utils/sandbox-executor.js +642 -0
  202. package/dist/src/utils/sandbox-executor.js.map +1 -0
  203. package/dist/src/utils/server-context-generator.d.ts +5 -0
  204. package/dist/src/utils/server-context-generator.d.ts.map +1 -1
  205. package/dist/src/utils/server-context-generator.js +38 -0
  206. package/dist/src/utils/server-context-generator.js.map +1 -1
  207. package/dist/src/utils/task-manager.d.ts +239 -0
  208. package/dist/src/utils/task-manager.d.ts.map +1 -0
  209. package/dist/src/utils/task-manager.js +528 -0
  210. package/dist/src/utils/task-manager.js.map +1 -0
  211. package/dist/src/utils/task-persistence.d.ts +82 -0
  212. package/dist/src/utils/task-persistence.d.ts.map +1 -0
  213. package/dist/src/utils/task-persistence.js +248 -0
  214. package/dist/src/utils/task-persistence.js.map +1 -0
  215. package/dist/src/utils/test-aware-defaults.d.ts +57 -0
  216. package/dist/src/utils/test-aware-defaults.d.ts.map +1 -0
  217. package/dist/src/utils/test-aware-defaults.js +71 -0
  218. package/dist/src/utils/test-aware-defaults.js.map +1 -0
  219. package/dist/src/utils/tree-sitter-analyzer.d.ts +42 -5
  220. package/dist/src/utils/tree-sitter-analyzer.d.ts.map +1 -1
  221. package/dist/src/utils/tree-sitter-analyzer.js +499 -17
  222. package/dist/src/utils/tree-sitter-analyzer.js.map +1 -1
  223. package/package.json +25 -20
  224. package/dist/src/tools/smart-git-push-tool.d.ts +0 -55
  225. package/dist/src/tools/smart-git-push-tool.d.ts.map +0 -1
  226. package/dist/src/tools/smart-git-push-tool.js +0 -1011
  227. package/dist/src/tools/smart-git-push-tool.js.map +0 -1
@@ -0,0 +1,528 @@
1
+ /**
2
+ * Task Manager for MCP Tasks Integration
3
+ *
4
+ * This module provides a unified interface for managing MCP Tasks across
5
+ * long-running operations in the mcp-adr-analysis-server.
6
+ *
7
+ * Implements ADR-018: MCP Tasks Integration Strategy
8
+ *
9
+ * @experimental MCP Tasks is an experimental feature in the MCP specification
10
+ */
11
+ import { randomBytes } from 'node:crypto';
12
+ import { createComponentLogger } from './enhanced-logging.js';
13
+ import { createTaskPersistence, } from './task-persistence.js';
14
+ const logger = createComponentLogger('TaskManager');
15
+ /**
16
+ * Check if a task status represents a terminal state
17
+ */
18
+ export function isTerminalStatus(status) {
19
+ return status === 'completed' || status === 'failed' || status === 'cancelled';
20
+ }
21
+ /**
22
+ * Generate a unique task ID
23
+ */
24
+ function generateTaskId() {
25
+ return randomBytes(16).toString('hex');
26
+ }
27
+ /**
28
+ * Task Manager for coordinating long-running operations
29
+ *
30
+ * Features:
31
+ * - Creates and tracks tasks for tool operations
32
+ * - Updates task progress and status
33
+ * - Supports multi-phase operations with individual phase tracking
34
+ * - Provides cancellation support
35
+ * - File-based persistence for durability across restarts
36
+ * - Designed to work with MCP SDK experimental tasks API
37
+ */
38
+ export class TaskManager {
39
+ tasks = new Map();
40
+ taskProgress = new Map();
41
+ cleanupTimers = new Map();
42
+ persistence = null;
43
+ initialized = false;
44
+ constructor(options = {}) {
45
+ const { persistence, enablePersistence = true } = options;
46
+ if (enablePersistence) {
47
+ this.persistence = createTaskPersistence(persistence);
48
+ }
49
+ logger.info('TaskManager initialized', { persistenceEnabled: enablePersistence });
50
+ }
51
+ /**
52
+ * Initialize the TaskManager - loads persisted tasks
53
+ */
54
+ async initialize() {
55
+ if (this.initialized) {
56
+ return;
57
+ }
58
+ if (this.persistence) {
59
+ await this.persistence.initialize();
60
+ const { tasks, progress } = await this.persistence.load();
61
+ // Restore tasks and progress
62
+ for (const [taskId, task] of tasks) {
63
+ this.tasks.set(taskId, task);
64
+ // Re-establish TTL timers for non-terminal tasks
65
+ if (!isTerminalStatus(task.status) && task.ttl !== null && task.ttl > 0) {
66
+ const elapsed = Date.now() - new Date(task.createdAt).getTime();
67
+ const remainingTtl = Math.max(0, task.ttl - elapsed);
68
+ if (remainingTtl > 0) {
69
+ const timer = setTimeout(() => {
70
+ this.cleanupTask(taskId);
71
+ }, remainingTtl);
72
+ this.cleanupTimers.set(taskId, timer);
73
+ }
74
+ else {
75
+ // Task expired while server was down
76
+ this.cleanupTask(taskId);
77
+ }
78
+ }
79
+ }
80
+ for (const [taskId, prog] of progress) {
81
+ this.taskProgress.set(taskId, prog);
82
+ }
83
+ logger.info('TaskManager restored from persistence', { taskCount: this.tasks.size });
84
+ }
85
+ this.initialized = true;
86
+ }
87
+ /**
88
+ * Persist current state to disk
89
+ */
90
+ async persistState() {
91
+ if (this.persistence?.isEnabled()) {
92
+ await this.persistence.save(this.tasks, this.taskProgress);
93
+ }
94
+ }
95
+ /**
96
+ * Create a new task for a tool operation
97
+ */
98
+ async createTask(options) {
99
+ const { type, tool, phases, dependencies, projectPath, adrDirectory, ttl = 3600000, // Default 1 hour TTL
100
+ pollInterval = 1000, } = options;
101
+ const now = new Date().toISOString();
102
+ const taskId = generateTaskId();
103
+ // Initialize metadata
104
+ const metadata = {
105
+ type,
106
+ tool,
107
+ };
108
+ // Only add optional properties if they have values
109
+ if (projectPath !== undefined) {
110
+ metadata.projectPath = projectPath;
111
+ }
112
+ if (adrDirectory !== undefined) {
113
+ metadata.adrDirectory = adrDirectory;
114
+ }
115
+ if (dependencies !== undefined && dependencies.length > 0) {
116
+ metadata.dependencies = dependencies;
117
+ }
118
+ // Initialize phases if provided
119
+ if (phases !== undefined && phases.length > 0) {
120
+ metadata.phases = phases.map((name, index) => ({
121
+ name,
122
+ description: `Phase ${index + 1}: ${name}`,
123
+ progress: 0,
124
+ status: 'pending',
125
+ }));
126
+ }
127
+ const task = {
128
+ taskId,
129
+ status: 'working',
130
+ ttl,
131
+ createdAt: now,
132
+ lastUpdatedAt: now,
133
+ pollInterval,
134
+ metadata,
135
+ };
136
+ this.tasks.set(taskId, task);
137
+ this.taskProgress.set(taskId, 0);
138
+ // Set up automatic cleanup if TTL is specified
139
+ if (ttl !== null && ttl > 0) {
140
+ const timer = setTimeout(() => {
141
+ this.cleanupTask(taskId);
142
+ }, ttl);
143
+ this.cleanupTimers.set(taskId, timer);
144
+ }
145
+ logger.info('Task created', {
146
+ taskId,
147
+ type,
148
+ tool,
149
+ phaseCount: phases?.length ?? 0,
150
+ });
151
+ // Persist state
152
+ await this.persistState();
153
+ return task;
154
+ }
155
+ /**
156
+ * Get a task by ID
157
+ */
158
+ async getTask(taskId) {
159
+ const task = this.tasks.get(taskId);
160
+ return task ?? null;
161
+ }
162
+ /**
163
+ * Get task result
164
+ */
165
+ async getTaskResult(taskId) {
166
+ const task = this.tasks.get(taskId);
167
+ if (!task)
168
+ return null;
169
+ return task.result ?? null;
170
+ }
171
+ /**
172
+ * List all tasks
173
+ */
174
+ async listTasks(cursor) {
175
+ const allTasks = Array.from(this.tasks.values());
176
+ // Simple pagination: cursor is the index to start from
177
+ const startIndex = cursor ? parseInt(cursor, 10) : 0;
178
+ const pageSize = 50;
179
+ const tasks = allTasks.slice(startIndex, startIndex + pageSize);
180
+ // Handle nextCursor properly for exactOptionalPropertyTypes
181
+ if (startIndex + pageSize < allTasks.length) {
182
+ return { tasks, nextCursor: String(startIndex + pageSize) };
183
+ }
184
+ return { tasks };
185
+ }
186
+ /**
187
+ * Update task progress
188
+ */
189
+ async updateProgress(update) {
190
+ const { taskId, progress, phase, phaseProgress, message } = update;
191
+ const task = this.tasks.get(taskId);
192
+ if (!task) {
193
+ logger.warn('Task not found for progress update', { taskId });
194
+ return;
195
+ }
196
+ // Update overall progress
197
+ this.taskProgress.set(taskId, progress);
198
+ task.lastUpdatedAt = new Date().toISOString();
199
+ // Update phase progress if applicable
200
+ if (phase !== undefined && task.metadata?.phases !== undefined) {
201
+ const phases = task.metadata.phases;
202
+ const phaseIndex = phases.findIndex(p => p.name === phase);
203
+ if (phaseIndex >= 0) {
204
+ const currentPhase = phases[phaseIndex];
205
+ if (currentPhase !== undefined) {
206
+ currentPhase.progress = phaseProgress ?? progress;
207
+ if (phaseProgress === 100) {
208
+ currentPhase.status = 'completed';
209
+ currentPhase.endTime = new Date().toISOString();
210
+ // Start next phase if available
211
+ const nextPhase = phases[phaseIndex + 1];
212
+ if (nextPhase !== undefined) {
213
+ nextPhase.status = 'running';
214
+ nextPhase.startTime = new Date().toISOString();
215
+ }
216
+ }
217
+ }
218
+ }
219
+ }
220
+ // Update status message if provided
221
+ if (message !== undefined) {
222
+ task.statusMessage = message;
223
+ }
224
+ logger.debug('Task progress updated', {
225
+ taskId,
226
+ progress,
227
+ phase,
228
+ phaseProgress,
229
+ });
230
+ // Persist state
231
+ await this.persistState();
232
+ }
233
+ /**
234
+ * Start a phase
235
+ */
236
+ async startPhase(taskId, phaseName) {
237
+ const task = this.tasks.get(taskId);
238
+ if (!task?.metadata?.phases)
239
+ return;
240
+ const phase = task.metadata.phases.find(p => p.name === phaseName);
241
+ if (phase !== undefined) {
242
+ phase.status = 'running';
243
+ phase.startTime = new Date().toISOString();
244
+ task.statusMessage = `Starting phase: ${phaseName}`;
245
+ task.lastUpdatedAt = new Date().toISOString();
246
+ logger.info('Phase started', { taskId, phaseName });
247
+ // Persist state
248
+ await this.persistState();
249
+ }
250
+ }
251
+ /**
252
+ * Complete a phase
253
+ */
254
+ async completePhase(taskId, phaseName) {
255
+ const task = this.tasks.get(taskId);
256
+ if (!task?.metadata?.phases)
257
+ return;
258
+ const phases = task.metadata.phases;
259
+ const phaseIndex = phases.findIndex(p => p.name === phaseName);
260
+ if (phaseIndex >= 0) {
261
+ const phase = phases[phaseIndex];
262
+ if (phase !== undefined) {
263
+ phase.status = 'completed';
264
+ phase.progress = 100;
265
+ phase.endTime = new Date().toISOString();
266
+ // Calculate overall progress based on completed phases
267
+ const completedCount = phases.filter(p => p.status === 'completed').length;
268
+ const totalProgress = Math.round((completedCount / phases.length) * 100);
269
+ this.taskProgress.set(taskId, totalProgress);
270
+ // Start next phase if available
271
+ const nextPhase = phases[phaseIndex + 1];
272
+ if (nextPhase !== undefined) {
273
+ nextPhase.status = 'running';
274
+ nextPhase.startTime = new Date().toISOString();
275
+ }
276
+ task.lastUpdatedAt = new Date().toISOString();
277
+ logger.info('Phase completed', { taskId, phaseName, totalProgress });
278
+ // Persist state
279
+ await this.persistState();
280
+ }
281
+ }
282
+ }
283
+ /**
284
+ * Fail a phase
285
+ */
286
+ async failPhase(taskId, phaseName, error) {
287
+ const task = this.tasks.get(taskId);
288
+ if (!task?.metadata?.phases)
289
+ return;
290
+ const phase = task.metadata.phases.find(p => p.name === phaseName);
291
+ if (phase !== undefined) {
292
+ phase.status = 'failed';
293
+ phase.error = error;
294
+ phase.endTime = new Date().toISOString();
295
+ task.lastUpdatedAt = new Date().toISOString();
296
+ logger.error('Phase failed', undefined, { taskId, phaseName, errorMessage: error });
297
+ // Persist state
298
+ await this.persistState();
299
+ }
300
+ }
301
+ /**
302
+ * Complete a task successfully
303
+ */
304
+ async completeTask(taskId, result) {
305
+ const task = this.tasks.get(taskId);
306
+ if (!task) {
307
+ throw new Error(`Task ${taskId} not found`);
308
+ }
309
+ task.status = 'completed';
310
+ task.result = result;
311
+ task.lastUpdatedAt = new Date().toISOString();
312
+ this.taskProgress.set(taskId, 100);
313
+ // Mark all pending/running phases as completed
314
+ if (task.metadata?.phases) {
315
+ for (const phase of task.metadata.phases) {
316
+ if (phase.status !== 'failed') {
317
+ phase.status = 'completed';
318
+ phase.progress = 100;
319
+ if (!phase.endTime) {
320
+ phase.endTime = new Date().toISOString();
321
+ }
322
+ }
323
+ }
324
+ }
325
+ logger.info('Task completed', { taskId });
326
+ // Persist state
327
+ await this.persistState();
328
+ }
329
+ /**
330
+ * Fail a task
331
+ */
332
+ async failTask(taskId, error) {
333
+ const task = this.tasks.get(taskId);
334
+ if (!task) {
335
+ throw new Error(`Task ${taskId} not found`);
336
+ }
337
+ task.status = 'failed';
338
+ task.result = {
339
+ success: false,
340
+ error: {
341
+ code: 'TASK_FAILED',
342
+ message: error,
343
+ recoverable: false,
344
+ },
345
+ };
346
+ task.statusMessage = error;
347
+ task.lastUpdatedAt = new Date().toISOString();
348
+ logger.error('Task failed', undefined, { taskId, errorMessage: error });
349
+ // Persist state
350
+ await this.persistState();
351
+ }
352
+ /**
353
+ * Cancel a task
354
+ */
355
+ async cancelTask(taskId, reason) {
356
+ const task = this.tasks.get(taskId);
357
+ if (!task) {
358
+ throw new Error(`Task ${taskId} not found`);
359
+ }
360
+ if (isTerminalStatus(task.status)) {
361
+ throw new Error(`Task ${taskId} is already in terminal state: ${task.status}`);
362
+ }
363
+ task.status = 'cancelled';
364
+ task.statusMessage = reason ?? 'Cancelled by user';
365
+ task.lastUpdatedAt = new Date().toISOString();
366
+ // Mark running/pending phases as skipped
367
+ if (task.metadata?.phases) {
368
+ for (const phase of task.metadata.phases) {
369
+ if (phase.status === 'running' || phase.status === 'pending') {
370
+ phase.status = 'skipped';
371
+ phase.endTime = new Date().toISOString();
372
+ }
373
+ }
374
+ }
375
+ logger.info('Task cancelled', { taskId, reason });
376
+ // Persist state
377
+ await this.persistState();
378
+ }
379
+ /**
380
+ * Check if a task is still running
381
+ */
382
+ async isTaskRunning(taskId) {
383
+ const task = this.tasks.get(taskId);
384
+ return task !== undefined && !isTerminalStatus(task.status);
385
+ }
386
+ /**
387
+ * Request input from the user (sets task to input_required state)
388
+ * Used for interactive tools that need user input during execution
389
+ */
390
+ async requestInput(taskId, prompt) {
391
+ const task = this.tasks.get(taskId);
392
+ if (!task) {
393
+ logger.warn('Task not found for input request', { taskId });
394
+ return;
395
+ }
396
+ task.status = 'input_required';
397
+ task.statusMessage = prompt;
398
+ task.lastUpdatedAt = new Date().toISOString();
399
+ logger.info('Task awaiting input', { taskId, prompt });
400
+ // Persist state
401
+ await this.persistState();
402
+ }
403
+ /**
404
+ * Resume a task after receiving input (sets task back to working state)
405
+ */
406
+ async resumeTask(taskId) {
407
+ const task = this.tasks.get(taskId);
408
+ if (!task) {
409
+ logger.warn('Task not found for resume', { taskId });
410
+ return;
411
+ }
412
+ if (task.status !== 'input_required') {
413
+ logger.warn('Task not in input_required state', { taskId, status: task.status });
414
+ return;
415
+ }
416
+ task.status = 'working';
417
+ task.statusMessage = 'Resumed after input';
418
+ task.lastUpdatedAt = new Date().toISOString();
419
+ logger.info('Task resumed', { taskId });
420
+ // Persist state
421
+ await this.persistState();
422
+ }
423
+ /**
424
+ * Get task progress (0-100)
425
+ */
426
+ getProgress(taskId) {
427
+ return this.taskProgress.get(taskId) ?? 0;
428
+ }
429
+ /**
430
+ * Get task metadata
431
+ */
432
+ getMetadata(taskId) {
433
+ const task = this.tasks.get(taskId);
434
+ return task?.metadata;
435
+ }
436
+ /**
437
+ * Get all tasks for a specific tool
438
+ */
439
+ async getTasksByTool(tool) {
440
+ const { tasks } = await this.listTasks();
441
+ return tasks.filter(task => task.metadata?.tool === tool);
442
+ }
443
+ /**
444
+ * Get all tasks of a specific type
445
+ */
446
+ async getTasksByType(type) {
447
+ const { tasks } = await this.listTasks();
448
+ return tasks.filter(task => task.metadata?.type === type);
449
+ }
450
+ /**
451
+ * Clean up a specific task
452
+ */
453
+ cleanupTask(taskId) {
454
+ const timer = this.cleanupTimers.get(taskId);
455
+ if (timer) {
456
+ clearTimeout(timer);
457
+ this.cleanupTimers.delete(taskId);
458
+ }
459
+ this.tasks.delete(taskId);
460
+ this.taskProgress.delete(taskId);
461
+ logger.debug('Task cleaned up', { taskId });
462
+ }
463
+ /**
464
+ * Cleanup completed/failed tasks older than specified duration
465
+ */
466
+ async cleanup(maxAgeMs = 24 * 60 * 60 * 1000) {
467
+ const now = Date.now();
468
+ let cleanedCount = 0;
469
+ for (const [taskId, task] of this.tasks) {
470
+ if (isTerminalStatus(task.status)) {
471
+ const updatedAt = new Date(task.lastUpdatedAt).getTime();
472
+ if (now - updatedAt > maxAgeMs) {
473
+ this.cleanupTask(taskId);
474
+ cleanedCount++;
475
+ }
476
+ }
477
+ }
478
+ if (cleanedCount > 0) {
479
+ logger.info('Cleaned up old tasks', { count: cleanedCount });
480
+ }
481
+ return cleanedCount;
482
+ }
483
+ /**
484
+ * Cleanup all tasks and timers (for graceful shutdown)
485
+ */
486
+ async shutdown() {
487
+ // Flush persistence before clearing data
488
+ if (this.persistence?.isEnabled()) {
489
+ await this.persistence.saveImmediate(this.tasks, this.taskProgress);
490
+ await this.persistence.shutdown();
491
+ }
492
+ for (const timer of this.cleanupTimers.values()) {
493
+ clearTimeout(timer);
494
+ }
495
+ this.cleanupTimers.clear();
496
+ this.tasks.clear();
497
+ this.taskProgress.clear();
498
+ this.initialized = false;
499
+ logger.info('TaskManager shut down');
500
+ }
501
+ }
502
+ // Singleton instance for global use
503
+ let globalTaskManager = null;
504
+ /**
505
+ * Get the global TaskManager instance
506
+ */
507
+ export function getTaskManager() {
508
+ if (!globalTaskManager) {
509
+ globalTaskManager = new TaskManager();
510
+ }
511
+ return globalTaskManager;
512
+ }
513
+ /**
514
+ * Set the global TaskManager instance (for testing or custom stores)
515
+ */
516
+ export function setTaskManager(manager) {
517
+ globalTaskManager = manager;
518
+ }
519
+ /**
520
+ * Reset the global TaskManager (for testing)
521
+ */
522
+ export async function resetTaskManager() {
523
+ if (globalTaskManager) {
524
+ await globalTaskManager.shutdown();
525
+ globalTaskManager = null;
526
+ }
527
+ }
528
+ //# sourceMappingURL=task-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-manager.js","sourceRoot":"","sources":["../../../src/utils/task-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Task Persistence for MCP Tasks Integration
3
+ *
4
+ * Provides file-based persistence for tasks to survive server restarts.
5
+ * Uses JSON files stored in a configurable cache directory.
6
+ *
7
+ * Implements ADR-018: MCP Tasks Integration Strategy
8
+ *
9
+ * @experimental MCP Tasks is an experimental feature in the MCP specification
10
+ */
11
+ import type { AdrTask } from './task-manager.js';
12
+ /**
13
+ * Configuration for task persistence
14
+ */
15
+ export interface TaskPersistenceConfig {
16
+ /** Directory to store task data (default: .mcp-adr-cache/tasks) */
17
+ cacheDir: string;
18
+ /** Whether persistence is enabled (default: true) */
19
+ enabled: boolean;
20
+ /** Maximum age of persisted tasks in ms (default: 7 days) */
21
+ maxAge: number;
22
+ /** Write delay in ms for debouncing (default: 1000) */
23
+ writeDelay: number;
24
+ }
25
+ /**
26
+ * Task Persistence Manager
27
+ *
28
+ * Handles saving and loading tasks to/from disk for durability across
29
+ * server restarts. Uses debounced writes to avoid excessive disk I/O.
30
+ */
31
+ export declare class TaskPersistence {
32
+ private config;
33
+ private writeTimer;
34
+ private pendingWrite;
35
+ private initialized;
36
+ constructor(config?: Partial<TaskPersistenceConfig>);
37
+ /**
38
+ * Initialize persistence - create cache directory if needed
39
+ */
40
+ initialize(): Promise<void>;
41
+ /**
42
+ * Get the path to the tasks file
43
+ */
44
+ private getTasksFilePath;
45
+ /**
46
+ * Load persisted tasks from disk
47
+ */
48
+ load(): Promise<{
49
+ tasks: Map<string, AdrTask>;
50
+ progress: Map<string, number>;
51
+ }>;
52
+ /**
53
+ * Save tasks to disk (debounced)
54
+ */
55
+ save(tasks: Map<string, AdrTask>, progress: Map<string, number>): Promise<void>;
56
+ /**
57
+ * Force immediate save (for shutdown)
58
+ */
59
+ saveImmediate(tasks: Map<string, AdrTask>, progress: Map<string, number>): Promise<void>;
60
+ /**
61
+ * Write data to file
62
+ */
63
+ private writeToFile;
64
+ /**
65
+ * Delete persisted task data
66
+ */
67
+ clear(): Promise<void>;
68
+ /**
69
+ * Cleanup old task files
70
+ */
71
+ cleanup(): Promise<number>;
72
+ /**
73
+ * Shutdown persistence - flush pending writes
74
+ */
75
+ shutdown(): Promise<void>;
76
+ /**
77
+ * Check if persistence is enabled
78
+ */
79
+ isEnabled(): boolean;
80
+ }
81
+ export declare function createTaskPersistence(config?: Partial<TaskPersistenceConfig>): TaskPersistence;
82
+ //# sourceMappingURL=task-persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-persistence.d.ts","sourceRoot":"","sources":["../../../src/utils/task-persistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAIjD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;CACpB;AAoBD;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,GAAE,OAAO,CAAC,qBAAqB,CAAM;IAIvD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAyDrF;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BrF;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB9F;;OAEG;YACW,WAAW;IAwBzB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB5B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBhC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAc/B;;OAEG;IACH,SAAS,IAAI,OAAO;CAGrB;AAGD,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAE9F"}