@zeliper/zscode-mcp-server 1.0.0 → 1.0.2

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 (51) hide show
  1. package/dist/errors/index.d.ts +28 -0
  2. package/dist/errors/index.d.ts.map +1 -1
  3. package/dist/errors/index.js +50 -0
  4. package/dist/errors/index.js.map +1 -1
  5. package/dist/state/manager.d.ts +63 -2
  6. package/dist/state/manager.d.ts.map +1 -1
  7. package/dist/state/manager.js +480 -84
  8. package/dist/state/manager.js.map +1 -1
  9. package/dist/state/manager.test.d.ts +2 -0
  10. package/dist/state/manager.test.d.ts.map +1 -0
  11. package/dist/state/manager.test.js +310 -0
  12. package/dist/state/manager.test.js.map +1 -0
  13. package/dist/state/schema.d.ts +190 -9
  14. package/dist/state/schema.d.ts.map +1 -1
  15. package/dist/state/schema.js +39 -1
  16. package/dist/state/schema.js.map +1 -1
  17. package/dist/state/schema.test.d.ts +2 -0
  18. package/dist/state/schema.test.d.ts.map +1 -0
  19. package/dist/state/schema.test.js +300 -0
  20. package/dist/state/schema.test.js.map +1 -0
  21. package/dist/state/types.d.ts +5 -1
  22. package/dist/state/types.d.ts.map +1 -1
  23. package/dist/state/types.js +3 -1
  24. package/dist/state/types.js.map +1 -1
  25. package/dist/tools/archive.d.ts.map +1 -1
  26. package/dist/tools/archive.js +57 -0
  27. package/dist/tools/archive.js.map +1 -1
  28. package/dist/tools/context.d.ts.map +1 -1
  29. package/dist/tools/context.js +14 -0
  30. package/dist/tools/context.js.map +1 -1
  31. package/dist/tools/index.d.ts.map +1 -1
  32. package/dist/tools/index.js +6 -0
  33. package/dist/tools/index.js.map +1 -1
  34. package/dist/tools/memory.d.ts +7 -0
  35. package/dist/tools/memory.d.ts.map +1 -0
  36. package/dist/tools/memory.js +243 -0
  37. package/dist/tools/memory.js.map +1 -0
  38. package/dist/tools/modify.d.ts +6 -0
  39. package/dist/tools/modify.d.ts.map +1 -0
  40. package/dist/tools/modify.js +327 -0
  41. package/dist/tools/modify.js.map +1 -0
  42. package/dist/tools/plan.js +3 -3
  43. package/dist/tools/plan.js.map +1 -1
  44. package/dist/tools/staging.d.ts.map +1 -1
  45. package/dist/tools/staging.js +3 -3
  46. package/dist/tools/staging.js.map +1 -1
  47. package/dist/utils/paths.d.ts +34 -0
  48. package/dist/utils/paths.d.ts.map +1 -1
  49. package/dist/utils/paths.js +94 -2
  50. package/dist/utils/paths.js.map +1 -1
  51. package/package.json +10 -3
@@ -0,0 +1,243 @@
1
+ import { z } from "zod";
2
+ import { StateManager } from "../state/manager.js";
3
+ import { withErrorHandling, ProjectNotInitializedError, MemoryNotFoundError, ValidationError } from "../errors/index.js";
4
+ import { DEFAULT_MEMORY_CATEGORIES } from "../state/schema.js";
5
+ /**
6
+ * Register memory-related tools
7
+ * Memory system provides rules/instructions that take precedence over CLAUDE.md
8
+ */
9
+ export function registerMemoryTools(server) {
10
+ // ============ add_memory ============
11
+ server.tool("add_memory", "Add a new memory/rule that takes precedence over CLAUDE.md. Use categories to organize: 'general' (always applied), 'planning', 'coding', 'review', or any custom category.", {
12
+ category: z.string().min(1).describe(`Memory category. Default categories: ${DEFAULT_MEMORY_CATEGORIES.join(", ")}. 'general' is always applied.`),
13
+ title: z.string().min(1).describe("Memory/rule title"),
14
+ content: z.string().min(1).describe("Memory/rule content - the actual instruction or rule"),
15
+ tags: z.array(z.string()).optional().describe("Tags for additional categorization"),
16
+ priority: z.number().int().min(0).max(100).optional().describe("Priority (0-100, higher = applied first). Default: 50"),
17
+ }, async (args) => {
18
+ const result = await withErrorHandling(async () => {
19
+ const manager = StateManager.getInstance();
20
+ if (!manager.isInitialized()) {
21
+ throw new ProjectNotInitializedError();
22
+ }
23
+ const memory = await manager.addMemory(args.category, args.title, args.content, args.tags, args.priority);
24
+ return {
25
+ success: true,
26
+ message: `Memory "${args.title}" added to category "${args.category}"`,
27
+ memory: {
28
+ id: memory.id,
29
+ category: memory.category,
30
+ title: memory.title,
31
+ priority: memory.priority,
32
+ enabled: memory.enabled,
33
+ },
34
+ };
35
+ }, "add_memory");
36
+ if (result.success) {
37
+ return {
38
+ content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
39
+ };
40
+ }
41
+ else {
42
+ return {
43
+ content: [{ type: "text", text: JSON.stringify(result.error, null, 2) }],
44
+ isError: true,
45
+ };
46
+ }
47
+ });
48
+ // ============ list_memories ============
49
+ server.tool("list_memories", "List all memories/rules, optionally filtered by category or tags.", {
50
+ category: z.string().optional().describe("Filter by category"),
51
+ tags: z.array(z.string()).optional().describe("Filter by tags (OR logic)"),
52
+ enabledOnly: z.boolean().optional().default(true).describe("Only show enabled memories"),
53
+ }, async (args) => {
54
+ const result = await withErrorHandling(async () => {
55
+ const manager = StateManager.getInstance();
56
+ if (!manager.isInitialized()) {
57
+ throw new ProjectNotInitializedError();
58
+ }
59
+ const memories = manager.listMemories(args.category, args.tags, args.enabledOnly ?? true);
60
+ return {
61
+ success: true,
62
+ count: memories.length,
63
+ memories: memories.map(m => ({
64
+ id: m.id,
65
+ category: m.category,
66
+ title: m.title,
67
+ content: m.content,
68
+ tags: m.tags,
69
+ priority: m.priority,
70
+ enabled: m.enabled,
71
+ })),
72
+ };
73
+ }, "list_memories");
74
+ if (result.success) {
75
+ return {
76
+ content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
77
+ };
78
+ }
79
+ else {
80
+ return {
81
+ content: [{ type: "text", text: JSON.stringify(result.error, null, 2) }],
82
+ isError: true,
83
+ };
84
+ }
85
+ });
86
+ // ============ update_memory ============
87
+ server.tool("update_memory", "Update an existing memory/rule.", {
88
+ memoryId: z.string().describe("Memory ID to update"),
89
+ title: z.string().optional().describe("New title"),
90
+ content: z.string().optional().describe("New content"),
91
+ category: z.string().optional().describe("New category"),
92
+ tags: z.array(z.string()).optional().describe("New tags"),
93
+ priority: z.number().int().min(0).max(100).optional().describe("New priority"),
94
+ enabled: z.boolean().optional().describe("Enable/disable the memory"),
95
+ }, async (args) => {
96
+ const result = await withErrorHandling(async () => {
97
+ const manager = StateManager.getInstance();
98
+ if (!manager.isInitialized()) {
99
+ throw new ProjectNotInitializedError();
100
+ }
101
+ const hasUpdates = args.title || args.content || args.category ||
102
+ args.tags || args.priority !== undefined ||
103
+ args.enabled !== undefined;
104
+ if (!hasUpdates) {
105
+ throw new ValidationError("At least one update field must be provided");
106
+ }
107
+ const memory = await manager.updateMemory(args.memoryId, {
108
+ title: args.title,
109
+ content: args.content,
110
+ category: args.category,
111
+ tags: args.tags,
112
+ priority: args.priority,
113
+ enabled: args.enabled,
114
+ });
115
+ return {
116
+ success: true,
117
+ message: `Memory "${memory.title}" updated`,
118
+ memory: {
119
+ id: memory.id,
120
+ category: memory.category,
121
+ title: memory.title,
122
+ priority: memory.priority,
123
+ enabled: memory.enabled,
124
+ },
125
+ };
126
+ }, "update_memory");
127
+ if (result.success) {
128
+ return {
129
+ content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
130
+ };
131
+ }
132
+ else {
133
+ return {
134
+ content: [{ type: "text", text: JSON.stringify(result.error, null, 2) }],
135
+ isError: true,
136
+ };
137
+ }
138
+ });
139
+ // ============ remove_memory ============
140
+ server.tool("remove_memory", "Remove a memory/rule.", {
141
+ memoryId: z.string().describe("Memory ID to remove"),
142
+ }, async (args) => {
143
+ const result = await withErrorHandling(async () => {
144
+ const manager = StateManager.getInstance();
145
+ if (!manager.isInitialized()) {
146
+ throw new ProjectNotInitializedError();
147
+ }
148
+ const memory = manager.getMemory(args.memoryId);
149
+ if (!memory) {
150
+ throw new MemoryNotFoundError(args.memoryId);
151
+ }
152
+ const title = memory.title;
153
+ await manager.removeMemory(args.memoryId);
154
+ return {
155
+ success: true,
156
+ message: `Memory "${title}" removed`,
157
+ removed: {
158
+ memoryId: args.memoryId,
159
+ title,
160
+ },
161
+ };
162
+ }, "remove_memory");
163
+ if (result.success) {
164
+ return {
165
+ content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
166
+ };
167
+ }
168
+ else {
169
+ return {
170
+ content: [{ type: "text", text: JSON.stringify(result.error, null, 2) }],
171
+ isError: true,
172
+ };
173
+ }
174
+ });
175
+ // ============ get_memories_for_context ============
176
+ server.tool("get_memories_for_context", "Get memories relevant to a specific context. Returns 'general' + context-specific memories, sorted by priority. These memories should be applied before CLAUDE.md rules.", {
177
+ context: z.enum(["planning", "coding", "review", "general", "all"]).describe("The context to get memories for. 'planning', 'coding', 'review' include general memories too."),
178
+ }, async (args) => {
179
+ const result = await withErrorHandling(async () => {
180
+ const manager = StateManager.getInstance();
181
+ if (!manager.isInitialized()) {
182
+ throw new ProjectNotInitializedError();
183
+ }
184
+ const memories = manager.getMemoriesForContext(args.context);
185
+ // Format for easy application
186
+ const formatted = memories.map(m => ({
187
+ id: m.id,
188
+ category: m.category,
189
+ title: m.title,
190
+ content: m.content,
191
+ priority: m.priority,
192
+ }));
193
+ return {
194
+ success: true,
195
+ context: args.context,
196
+ count: memories.length,
197
+ memories: formatted,
198
+ // Formatted text ready for Claude to apply
199
+ appliedRules: memories.map(m => `## [${m.category.toUpperCase()}] ${m.title}\n${m.content}`).join("\n\n"),
200
+ };
201
+ }, "get_memories_for_context");
202
+ if (result.success) {
203
+ return {
204
+ content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
205
+ };
206
+ }
207
+ else {
208
+ return {
209
+ content: [{ type: "text", text: JSON.stringify(result.error, null, 2) }],
210
+ isError: true,
211
+ };
212
+ }
213
+ });
214
+ // ============ list_categories ============
215
+ server.tool("list_categories", "List all memory categories currently in use, plus default categories.", {}, async () => {
216
+ const result = await withErrorHandling(async () => {
217
+ const manager = StateManager.getInstance();
218
+ if (!manager.isInitialized()) {
219
+ throw new ProjectNotInitializedError();
220
+ }
221
+ const usedCategories = manager.getCategories();
222
+ const allCategories = new Set([...DEFAULT_MEMORY_CATEGORIES, ...usedCategories]);
223
+ return {
224
+ success: true,
225
+ defaultCategories: [...DEFAULT_MEMORY_CATEGORIES],
226
+ usedCategories,
227
+ allCategories: Array.from(allCategories).sort(),
228
+ };
229
+ }, "list_categories");
230
+ if (result.success) {
231
+ return {
232
+ content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
233
+ };
234
+ }
235
+ else {
236
+ return {
237
+ content: [{ type: "text", text: JSON.stringify(result.error, null, 2) }],
238
+ isError: true,
239
+ };
240
+ }
241
+ });
242
+ }
243
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /**
3
+ * Register modify-related tools
4
+ */
5
+ export declare function registerModifyTools(server: McpServer): void;
6
+ //# sourceMappingURL=modify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modify.d.ts","sourceRoot":"","sources":["../../src/tools/modify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWpE;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwY3D"}
@@ -0,0 +1,327 @@
1
+ import { z } from "zod";
2
+ import { StateManager } from "../state/manager.js";
3
+ import { withErrorHandling, ProjectNotInitializedError, StagingNotFoundError, TaskNotFoundError, ValidationError, } from "../errors/index.js";
4
+ /**
5
+ * Register modify-related tools
6
+ */
7
+ export function registerModifyTools(server) {
8
+ // ============ update_plan ============
9
+ server.tool("update_plan", "Update a plan's title or description. Cannot modify archived or cancelled plans.", {
10
+ planId: z.string().describe("Plan ID to update"),
11
+ title: z.string().optional().describe("New plan title"),
12
+ description: z.string().optional().describe("New plan description"),
13
+ }, async (args) => {
14
+ const result = await withErrorHandling(async () => {
15
+ const manager = StateManager.getInstance();
16
+ if (!manager.isInitialized()) {
17
+ throw new ProjectNotInitializedError();
18
+ }
19
+ if (!args.title && !args.description) {
20
+ throw new ValidationError("At least one of 'title' or 'description' must be provided");
21
+ }
22
+ const plan = await manager.updatePlan(args.planId, {
23
+ title: args.title,
24
+ description: args.description,
25
+ });
26
+ return {
27
+ success: true,
28
+ message: "Plan updated",
29
+ plan: {
30
+ id: plan.id,
31
+ title: plan.title,
32
+ description: plan.description,
33
+ status: plan.status,
34
+ },
35
+ };
36
+ }, "update_plan");
37
+ if (result.success) {
38
+ return {
39
+ content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
40
+ };
41
+ }
42
+ else {
43
+ return {
44
+ content: [{ type: "text", text: JSON.stringify(result.error, null, 2) }],
45
+ isError: true,
46
+ };
47
+ }
48
+ });
49
+ // ============ update_staging ============
50
+ server.tool("update_staging", "Update a staging's name, description, or execution type. Cannot modify completed or cancelled stagings.", {
51
+ stagingId: z.string().describe("Staging ID to update"),
52
+ name: z.string().optional().describe("New staging name"),
53
+ description: z.string().optional().describe("New staging description"),
54
+ execution_type: z.enum(["parallel", "sequential"]).optional().describe("New execution type"),
55
+ }, async (args) => {
56
+ const result = await withErrorHandling(async () => {
57
+ const manager = StateManager.getInstance();
58
+ if (!manager.isInitialized()) {
59
+ throw new ProjectNotInitializedError();
60
+ }
61
+ if (!args.name && !args.description && !args.execution_type) {
62
+ throw new ValidationError("At least one update field must be provided");
63
+ }
64
+ const staging = await manager.updateStaging(args.stagingId, {
65
+ name: args.name,
66
+ description: args.description,
67
+ execution_type: args.execution_type,
68
+ });
69
+ return {
70
+ success: true,
71
+ message: "Staging updated",
72
+ staging: {
73
+ id: staging.id,
74
+ name: staging.name,
75
+ description: staging.description,
76
+ execution_type: staging.execution_type,
77
+ status: staging.status,
78
+ },
79
+ };
80
+ }, "update_staging");
81
+ if (result.success) {
82
+ return {
83
+ content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
84
+ };
85
+ }
86
+ else {
87
+ return {
88
+ content: [{ type: "text", text: JSON.stringify(result.error, null, 2) }],
89
+ isError: true,
90
+ };
91
+ }
92
+ });
93
+ // ============ add_staging ============
94
+ server.tool("add_staging", "Add a new staging phase to an existing plan. Can specify insertion position.", {
95
+ planId: z.string().describe("Plan ID to add staging to"),
96
+ name: z.string().describe("Staging name"),
97
+ description: z.string().optional().describe("Staging description"),
98
+ execution_type: z.enum(["parallel", "sequential"]).default("parallel").describe("How tasks execute"),
99
+ insertAt: z.number().int().min(0).optional().describe("Position to insert (0-indexed). If not provided, adds at end."),
100
+ }, async (args) => {
101
+ const result = await withErrorHandling(async () => {
102
+ const manager = StateManager.getInstance();
103
+ if (!manager.isInitialized()) {
104
+ throw new ProjectNotInitializedError();
105
+ }
106
+ const staging = await manager.addStaging(args.planId, {
107
+ name: args.name,
108
+ description: args.description,
109
+ execution_type: args.execution_type,
110
+ insertAt: args.insertAt,
111
+ });
112
+ const plan = manager.getPlan(args.planId);
113
+ return {
114
+ success: true,
115
+ message: `Staging "${args.name}" added at position ${staging.order}`,
116
+ staging: {
117
+ id: staging.id,
118
+ name: staging.name,
119
+ order: staging.order,
120
+ execution_type: staging.execution_type,
121
+ },
122
+ plan: {
123
+ id: plan.id,
124
+ totalStagings: plan.stagings.length,
125
+ },
126
+ };
127
+ }, "add_staging");
128
+ if (result.success) {
129
+ return {
130
+ content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
131
+ };
132
+ }
133
+ else {
134
+ return {
135
+ content: [{ type: "text", text: JSON.stringify(result.error, null, 2) }],
136
+ isError: true,
137
+ };
138
+ }
139
+ });
140
+ // ============ remove_staging ============
141
+ server.tool("remove_staging", "Remove a staging and all its tasks from a plan. Cannot remove in_progress staging.", {
142
+ stagingId: z.string().describe("Staging ID to remove"),
143
+ }, async (args) => {
144
+ const result = await withErrorHandling(async () => {
145
+ const manager = StateManager.getInstance();
146
+ if (!manager.isInitialized()) {
147
+ throw new ProjectNotInitializedError();
148
+ }
149
+ const staging = manager.getStaging(args.stagingId);
150
+ if (!staging) {
151
+ throw new StagingNotFoundError(args.stagingId);
152
+ }
153
+ const stagingName = staging.name;
154
+ const taskCount = staging.tasks.length;
155
+ const planId = staging.planId;
156
+ await manager.removeStaging(args.stagingId);
157
+ const plan = manager.getPlan(planId);
158
+ return {
159
+ success: true,
160
+ message: `Staging "${stagingName}" removed with ${taskCount} tasks`,
161
+ removed: {
162
+ stagingId: args.stagingId,
163
+ name: stagingName,
164
+ tasksRemoved: taskCount,
165
+ },
166
+ plan: {
167
+ id: planId,
168
+ remainingStagings: plan?.stagings.length ?? 0,
169
+ },
170
+ };
171
+ }, "remove_staging");
172
+ if (result.success) {
173
+ return {
174
+ content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
175
+ };
176
+ }
177
+ else {
178
+ return {
179
+ content: [{ type: "text", text: JSON.stringify(result.error, null, 2) }],
180
+ isError: true,
181
+ };
182
+ }
183
+ });
184
+ // ============ add_task ============
185
+ server.tool("add_task", "Add a new task to an existing staging. Cannot add to completed or cancelled staging.", {
186
+ stagingId: z.string().describe("Staging ID to add task to"),
187
+ title: z.string().describe("Task title"),
188
+ description: z.string().optional().describe("Task description"),
189
+ priority: z.enum(["high", "medium", "low"]).default("medium").describe("Task priority"),
190
+ execution_mode: z.enum(["parallel", "sequential"]).default("parallel").describe("Execution mode"),
191
+ depends_on: z.array(z.string()).default([]).describe("Task IDs this task depends on"),
192
+ }, async (args) => {
193
+ const result = await withErrorHandling(async () => {
194
+ const manager = StateManager.getInstance();
195
+ if (!manager.isInitialized()) {
196
+ throw new ProjectNotInitializedError();
197
+ }
198
+ const task = await manager.addTask(args.stagingId, {
199
+ title: args.title,
200
+ description: args.description,
201
+ priority: args.priority,
202
+ execution_mode: args.execution_mode,
203
+ depends_on: args.depends_on,
204
+ });
205
+ const staging = manager.getStaging(args.stagingId);
206
+ return {
207
+ success: true,
208
+ message: `Task "${args.title}" added`,
209
+ task: {
210
+ id: task.id,
211
+ title: task.title,
212
+ priority: task.priority,
213
+ order: task.order,
214
+ },
215
+ staging: {
216
+ id: staging.id,
217
+ name: staging.name,
218
+ totalTasks: staging.tasks.length,
219
+ },
220
+ };
221
+ }, "add_task");
222
+ if (result.success) {
223
+ return {
224
+ content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
225
+ };
226
+ }
227
+ else {
228
+ return {
229
+ content: [{ type: "text", text: JSON.stringify(result.error, null, 2) }],
230
+ isError: true,
231
+ };
232
+ }
233
+ });
234
+ // ============ remove_task ============
235
+ server.tool("remove_task", "Remove a task from a staging. Cannot remove in_progress task. Dependencies are automatically cleaned up.", {
236
+ taskId: z.string().describe("Task ID to remove"),
237
+ }, async (args) => {
238
+ const result = await withErrorHandling(async () => {
239
+ const manager = StateManager.getInstance();
240
+ if (!manager.isInitialized()) {
241
+ throw new ProjectNotInitializedError();
242
+ }
243
+ const task = manager.getTask(args.taskId);
244
+ if (!task) {
245
+ throw new TaskNotFoundError(args.taskId);
246
+ }
247
+ const taskTitle = task.title;
248
+ const stagingId = task.stagingId;
249
+ await manager.removeTask(args.taskId);
250
+ const staging = manager.getStaging(stagingId);
251
+ return {
252
+ success: true,
253
+ message: `Task "${taskTitle}" removed`,
254
+ removed: {
255
+ taskId: args.taskId,
256
+ title: taskTitle,
257
+ },
258
+ staging: {
259
+ id: stagingId,
260
+ remainingTasks: staging?.tasks.length ?? 0,
261
+ },
262
+ };
263
+ }, "remove_task");
264
+ if (result.success) {
265
+ return {
266
+ content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
267
+ };
268
+ }
269
+ else {
270
+ return {
271
+ content: [{ type: "text", text: JSON.stringify(result.error, null, 2) }],
272
+ isError: true,
273
+ };
274
+ }
275
+ });
276
+ // ============ update_task_details ============
277
+ server.tool("update_task_details", "Update a task's details (title, description, priority, execution_mode, depends_on). Cannot modify done or cancelled tasks. Use update_task for status changes.", {
278
+ taskId: z.string().describe("Task ID to update"),
279
+ title: z.string().optional().describe("New task title"),
280
+ description: z.string().optional().describe("New task description"),
281
+ priority: z.enum(["high", "medium", "low"]).optional().describe("New priority"),
282
+ execution_mode: z.enum(["parallel", "sequential"]).optional().describe("New execution mode"),
283
+ depends_on: z.array(z.string()).optional().describe("New task dependencies (task IDs within the same staging). Pass empty array to remove all dependencies."),
284
+ }, async (args) => {
285
+ const result = await withErrorHandling(async () => {
286
+ const manager = StateManager.getInstance();
287
+ if (!manager.isInitialized()) {
288
+ throw new ProjectNotInitializedError();
289
+ }
290
+ if (!args.title && !args.description && !args.priority && !args.execution_mode && args.depends_on === undefined) {
291
+ throw new ValidationError("At least one update field must be provided");
292
+ }
293
+ const task = await manager.updateTaskDetails(args.taskId, {
294
+ title: args.title,
295
+ description: args.description,
296
+ priority: args.priority,
297
+ execution_mode: args.execution_mode,
298
+ depends_on: args.depends_on,
299
+ });
300
+ return {
301
+ success: true,
302
+ message: "Task updated",
303
+ task: {
304
+ id: task.id,
305
+ title: task.title,
306
+ description: task.description,
307
+ priority: task.priority,
308
+ execution_mode: task.execution_mode,
309
+ depends_on: task.depends_on,
310
+ status: task.status,
311
+ },
312
+ };
313
+ }, "update_task_details");
314
+ if (result.success) {
315
+ return {
316
+ content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
317
+ };
318
+ }
319
+ else {
320
+ return {
321
+ content: [{ type: "text", text: JSON.stringify(result.error, null, 2) }],
322
+ isError: true,
323
+ };
324
+ }
325
+ });
326
+ }
327
+ //# sourceMappingURL=modify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modify.js","sourceRoot":"","sources":["../../src/tools/modify.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { StateManager } from "../state/manager.js";
3
- import { withErrorHandling, ProjectNotInitializedError, TaskNotFoundError } from "../errors/index.js";
3
+ import { withErrorHandling, ProjectNotInitializedError, TaskNotFoundError, PlanNotFoundError } from "../errors/index.js";
4
4
  /**
5
5
  * Register plan-related tools
6
6
  */
@@ -128,7 +128,7 @@ export function registerPlanTools(server) {
128
128
  }
129
129
  const plan = manager.getPlan(args.planId);
130
130
  if (!plan) {
131
- throw new Error(`Plan not found: ${args.planId}`);
131
+ throw new PlanNotFoundError(args.planId);
132
132
  }
133
133
  // Get all stagings and their status
134
134
  const stagings = manager.getStagingsByPlan(args.planId);
@@ -149,7 +149,7 @@ export function registerPlanTools(server) {
149
149
  // Auto-complete stagings where all tasks are done
150
150
  for (const s of stagingStatus) {
151
151
  if (s.allTasksDone && s.status === "in_progress") {
152
- await manager.completestaging(s.id);
152
+ await manager.completeStaging(s.id);
153
153
  s.status = "completed";
154
154
  }
155
155
  }