@zeliper/zscode-mcp-server 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/errors/index.d.ts +112 -0
  2. package/dist/errors/index.d.ts.map +1 -0
  3. package/dist/errors/index.js +231 -0
  4. package/dist/errors/index.js.map +1 -0
  5. package/dist/index.d.ts +3 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +50 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/state/manager.d.ts +54 -0
  10. package/dist/state/manager.d.ts.map +1 -0
  11. package/dist/state/manager.js +500 -0
  12. package/dist/state/manager.js.map +1 -0
  13. package/dist/state/schema.d.ts +942 -0
  14. package/dist/state/schema.d.ts.map +1 -0
  15. package/dist/state/schema.js +179 -0
  16. package/dist/state/schema.js.map +1 -0
  17. package/dist/state/types.d.ts +117 -0
  18. package/dist/state/types.d.ts.map +1 -0
  19. package/dist/state/types.js +2 -0
  20. package/dist/state/types.js.map +1 -0
  21. package/dist/tools/archive.d.ts +6 -0
  22. package/dist/tools/archive.d.ts.map +1 -0
  23. package/dist/tools/archive.js +67 -0
  24. package/dist/tools/archive.js.map +1 -0
  25. package/dist/tools/cancel.d.ts +6 -0
  26. package/dist/tools/cancel.d.ts.map +1 -0
  27. package/dist/tools/cancel.js +65 -0
  28. package/dist/tools/cancel.js.map +1 -0
  29. package/dist/tools/context.d.ts +6 -0
  30. package/dist/tools/context.d.ts.map +1 -0
  31. package/dist/tools/context.js +124 -0
  32. package/dist/tools/context.js.map +1 -0
  33. package/dist/tools/index.d.ts +6 -0
  34. package/dist/tools/index.d.ts.map +1 -0
  35. package/dist/tools/index.js +24 -0
  36. package/dist/tools/index.js.map +1 -0
  37. package/dist/tools/plan.d.ts +6 -0
  38. package/dist/tools/plan.d.ts.map +1 -0
  39. package/dist/tools/plan.js +186 -0
  40. package/dist/tools/plan.js.map +1 -0
  41. package/dist/tools/staging.d.ts +6 -0
  42. package/dist/tools/staging.d.ts.map +1 -0
  43. package/dist/tools/staging.js +224 -0
  44. package/dist/tools/staging.js.map +1 -0
  45. package/dist/tools/status.d.ts +6 -0
  46. package/dist/tools/status.d.ts.map +1 -0
  47. package/dist/tools/status.js +144 -0
  48. package/dist/tools/status.js.map +1 -0
  49. package/dist/utils/artifacts.d.ts +57 -0
  50. package/dist/utils/artifacts.d.ts.map +1 -0
  51. package/dist/utils/artifacts.js +180 -0
  52. package/dist/utils/artifacts.js.map +1 -0
  53. package/dist/utils/paths.d.ts +68 -0
  54. package/dist/utils/paths.d.ts.map +1 -0
  55. package/dist/utils/paths.js +122 -0
  56. package/dist/utils/paths.js.map +1 -0
  57. package/package.json +53 -0
@@ -0,0 +1,500 @@
1
+ import { readFile, writeFile, access, rm, cp } from "fs/promises";
2
+ import { join, dirname } from "path";
3
+ import { constants } from "fs";
4
+ import { StateSchema } from "./schema.js";
5
+ import { normalizePath, toPosixPath, ensureDir } from "../utils/paths.js";
6
+ // ============ ID Generator ============
7
+ function generateRandomId(length) {
8
+ const chars = "abcdefghijklmnopqrstuvwxyz0123456789";
9
+ let result = "";
10
+ for (let i = 0; i < length; i++) {
11
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
12
+ }
13
+ return result;
14
+ }
15
+ const idGenerator = {
16
+ generatePlanId: () => `plan-${generateRandomId(8)}`,
17
+ generateStagingId: () => `staging-${generateRandomId(4)}`,
18
+ generateTaskId: () => `task-${generateRandomId(8)}`,
19
+ generateHistoryId: () => `hist-${Date.now()}-${generateRandomId(4)}`,
20
+ generateDecisionId: () => `dec-${Date.now()}-${generateRandomId(4)}`,
21
+ };
22
+ // ============ StateManager Class ============
23
+ export class StateManager {
24
+ static instance = null;
25
+ state = null;
26
+ projectRoot;
27
+ stateFilePath;
28
+ constructor(projectRoot) {
29
+ this.projectRoot = normalizePath(projectRoot);
30
+ this.stateFilePath = normalizePath(join(projectRoot, ".claude", "state.json"));
31
+ }
32
+ static async initialize(projectRoot) {
33
+ if (!StateManager.instance || StateManager.instance.projectRoot !== projectRoot) {
34
+ StateManager.instance = new StateManager(projectRoot);
35
+ await StateManager.instance.load();
36
+ }
37
+ return StateManager.instance;
38
+ }
39
+ static getInstance() {
40
+ if (!StateManager.instance) {
41
+ throw new Error("StateManager not initialized. Call StateManager.initialize() first.");
42
+ }
43
+ return StateManager.instance;
44
+ }
45
+ // ============ File Operations ============
46
+ async load() {
47
+ try {
48
+ await access(this.stateFilePath, constants.R_OK);
49
+ const content = await readFile(this.stateFilePath, "utf-8");
50
+ const parsed = JSON.parse(content);
51
+ this.state = StateSchema.parse(parsed);
52
+ }
53
+ catch (error) {
54
+ if (error.code === "ENOENT") {
55
+ // State file doesn't exist, will be created on first save
56
+ this.state = null;
57
+ }
58
+ else {
59
+ throw error;
60
+ }
61
+ }
62
+ }
63
+ async save() {
64
+ if (!this.state) {
65
+ throw new Error("No state to save");
66
+ }
67
+ await ensureDir(dirname(this.stateFilePath));
68
+ await writeFile(this.stateFilePath, JSON.stringify(this.state, null, 2), "utf-8");
69
+ }
70
+ // ============ Getters ============
71
+ getState() {
72
+ return this.state;
73
+ }
74
+ getProject() {
75
+ return this.state?.project ?? null;
76
+ }
77
+ getPlan(planId) {
78
+ return this.state?.plans[planId];
79
+ }
80
+ getStaging(stagingId) {
81
+ return this.state?.stagings[stagingId];
82
+ }
83
+ getTask(taskId) {
84
+ return this.state?.tasks[taskId];
85
+ }
86
+ getAllPlans() {
87
+ if (!this.state)
88
+ return [];
89
+ return Object.values(this.state.plans);
90
+ }
91
+ getStagingsByPlan(planId) {
92
+ if (!this.state)
93
+ return [];
94
+ const plan = this.getPlan(planId);
95
+ if (!plan)
96
+ return [];
97
+ return plan.stagings.map(id => this.state.stagings[id]).filter((s) => !!s);
98
+ }
99
+ getTasksByStaging(stagingId) {
100
+ if (!this.state)
101
+ return [];
102
+ const staging = this.getStaging(stagingId);
103
+ if (!staging)
104
+ return [];
105
+ return staging.tasks.map(id => this.state.tasks[id]).filter((t) => !!t);
106
+ }
107
+ getStagingByOrder(planId, order) {
108
+ const stagings = this.getStagingsByPlan(planId);
109
+ return stagings.find(s => s.order === order);
110
+ }
111
+ // ============ Project Operations ============
112
+ async initializeProject(name, description, goals, constraints) {
113
+ const now = new Date().toISOString();
114
+ const project = {
115
+ name,
116
+ description,
117
+ goals: goals ?? [],
118
+ constraints: constraints ?? [],
119
+ createdAt: now,
120
+ updatedAt: now,
121
+ };
122
+ this.state = {
123
+ version: "2.0.0",
124
+ project,
125
+ plans: {},
126
+ stagings: {},
127
+ tasks: {},
128
+ history: [],
129
+ context: {
130
+ lastUpdated: now,
131
+ activeFiles: [],
132
+ decisions: [],
133
+ },
134
+ };
135
+ await this.addHistory("project_initialized", { projectName: name });
136
+ await this.save();
137
+ return project;
138
+ }
139
+ // ============ Plan Operations ============
140
+ async createPlan(title, description, stagingConfigs) {
141
+ if (!this.state) {
142
+ throw new Error("Project not initialized");
143
+ }
144
+ const now = new Date().toISOString();
145
+ const planId = idGenerator.generatePlanId();
146
+ const artifactsRoot = toPosixPath(join(".claude", "plans", planId, "artifacts"));
147
+ // Create stagings and tasks
148
+ const stagingIds = [];
149
+ const allTasksByStaging = new Map();
150
+ for (let stagingIndex = 0; stagingIndex < stagingConfigs.length; stagingIndex++) {
151
+ const config = stagingConfigs[stagingIndex];
152
+ const stagingId = idGenerator.generateStagingId();
153
+ const artifactsPath = toPosixPath(join(artifactsRoot, stagingId));
154
+ // Create tasks for this staging
155
+ const taskIds = [];
156
+ const tasks = [];
157
+ for (let taskIndex = 0; taskIndex < config.tasks.length; taskIndex++) {
158
+ const taskConfig = config.tasks[taskIndex];
159
+ const taskId = idGenerator.generateTaskId();
160
+ const task = {
161
+ id: taskId,
162
+ planId,
163
+ stagingId,
164
+ title: taskConfig.title,
165
+ description: taskConfig.description,
166
+ priority: taskConfig.priority,
167
+ status: "pending",
168
+ execution_mode: taskConfig.execution_mode,
169
+ depends_on: [], // Will be resolved after all tasks are created
170
+ order: taskIndex,
171
+ createdAt: now,
172
+ updatedAt: now,
173
+ };
174
+ tasks.push(task);
175
+ taskIds.push(taskId);
176
+ this.state.tasks[taskId] = task;
177
+ }
178
+ // Resolve task dependencies within the same staging
179
+ for (let i = 0; i < tasks.length; i++) {
180
+ const taskConfig = config.tasks[i];
181
+ const task = tasks[i];
182
+ task.depends_on = taskConfig.depends_on_index
183
+ .filter(idx => idx >= 0 && idx < tasks.length && idx !== i)
184
+ .map(idx => tasks[idx].id);
185
+ }
186
+ allTasksByStaging.set(stagingId, tasks);
187
+ // Create staging
188
+ const staging = {
189
+ id: stagingId,
190
+ planId,
191
+ name: config.name,
192
+ description: config.description,
193
+ order: stagingIndex,
194
+ execution_type: config.execution_type,
195
+ status: "pending",
196
+ tasks: taskIds,
197
+ artifacts_path: artifactsPath,
198
+ createdAt: now,
199
+ };
200
+ this.state.stagings[stagingId] = staging;
201
+ stagingIds.push(stagingId);
202
+ }
203
+ // Create plan
204
+ const plan = {
205
+ id: planId,
206
+ title,
207
+ description,
208
+ status: "draft",
209
+ stagings: stagingIds,
210
+ artifacts_root: artifactsRoot,
211
+ createdAt: now,
212
+ updatedAt: now,
213
+ };
214
+ this.state.plans[planId] = plan;
215
+ await this.addHistory("plan_created", { planId, title, stagingCount: stagingIds.length });
216
+ await this.save();
217
+ return plan;
218
+ }
219
+ async updatePlanStatus(planId, status) {
220
+ if (!this.state)
221
+ throw new Error("Project not initialized");
222
+ const plan = this.getPlan(planId);
223
+ if (!plan)
224
+ throw new Error(`Plan not found: ${planId}`);
225
+ plan.status = status;
226
+ plan.updatedAt = new Date().toISOString();
227
+ if (status === "completed") {
228
+ plan.completedAt = plan.updatedAt;
229
+ }
230
+ else if (status === "archived") {
231
+ plan.archivedAt = plan.updatedAt;
232
+ }
233
+ await this.save();
234
+ }
235
+ // ============ Staging Operations ============
236
+ async startStaging(planId, stagingId) {
237
+ if (!this.state)
238
+ throw new Error("Project not initialized");
239
+ const plan = this.getPlan(planId);
240
+ if (!plan)
241
+ throw new Error(`Plan not found: ${planId}`);
242
+ const staging = this.getStaging(stagingId);
243
+ if (!staging)
244
+ throw new Error(`Staging not found: ${stagingId}`);
245
+ if (staging.planId !== planId) {
246
+ throw new Error(`Staging ${stagingId} does not belong to plan ${planId}`);
247
+ }
248
+ // Check if previous staging is completed
249
+ if (staging.order > 0) {
250
+ const prevStaging = this.getStagingByOrder(planId, staging.order - 1);
251
+ if (prevStaging && prevStaging.status !== "completed") {
252
+ throw new Error(`Cannot start staging: previous staging ${prevStaging.id} is not completed`);
253
+ }
254
+ }
255
+ const now = new Date().toISOString();
256
+ staging.status = "in_progress";
257
+ staging.startedAt = now;
258
+ plan.currentStagingId = stagingId;
259
+ plan.status = "active";
260
+ plan.updatedAt = now;
261
+ this.state.context.currentPlanId = planId;
262
+ this.state.context.currentStagingId = stagingId;
263
+ this.state.context.lastUpdated = now;
264
+ // Create artifacts directory
265
+ const artifactsDir = normalizePath(join(this.projectRoot, staging.artifacts_path));
266
+ await ensureDir(artifactsDir);
267
+ await this.addHistory("staging_started", { planId, stagingId, stagingName: staging.name });
268
+ await this.save();
269
+ return staging;
270
+ }
271
+ async completestaging(stagingId) {
272
+ if (!this.state)
273
+ throw new Error("Project not initialized");
274
+ const staging = this.getStaging(stagingId);
275
+ if (!staging)
276
+ throw new Error(`Staging not found: ${stagingId}`);
277
+ const now = new Date().toISOString();
278
+ staging.status = "completed";
279
+ staging.completedAt = now;
280
+ const plan = this.getPlan(staging.planId);
281
+ if (plan) {
282
+ plan.updatedAt = now;
283
+ // Check if all stagings are completed
284
+ const allCompleted = plan.stagings.every(id => {
285
+ const s = this.getStaging(id);
286
+ return s?.status === "completed";
287
+ });
288
+ if (allCompleted) {
289
+ plan.status = "completed";
290
+ plan.completedAt = now;
291
+ this.state.context.currentPlanId = undefined;
292
+ this.state.context.currentStagingId = undefined;
293
+ }
294
+ }
295
+ await this.addHistory("staging_completed", { stagingId, stagingName: staging.name });
296
+ await this.save();
297
+ }
298
+ // ============ Task Operations ============
299
+ async updateTaskStatus(taskId, status, notes) {
300
+ if (!this.state)
301
+ throw new Error("Project not initialized");
302
+ const task = this.getTask(taskId);
303
+ if (!task)
304
+ throw new Error(`Task not found: ${taskId}`);
305
+ const now = new Date().toISOString();
306
+ task.status = status;
307
+ task.updatedAt = now;
308
+ if (notes) {
309
+ task.notes = notes;
310
+ }
311
+ if (status === "in_progress") {
312
+ task.startedAt = now;
313
+ await this.addHistory("task_started", { taskId, taskTitle: task.title });
314
+ }
315
+ else if (status === "done") {
316
+ task.completedAt = now;
317
+ await this.addHistory("task_completed", { taskId, taskTitle: task.title });
318
+ // Check if staging is completed
319
+ const staging = this.getStaging(task.stagingId);
320
+ if (staging) {
321
+ const allTasksDone = staging.tasks.every(id => {
322
+ const t = this.getTask(id);
323
+ return t?.status === "done";
324
+ });
325
+ if (allTasksDone) {
326
+ await this.completestaging(staging.id);
327
+ }
328
+ }
329
+ }
330
+ else if (status === "blocked") {
331
+ await this.addHistory("task_blocked", { taskId, taskTitle: task.title, notes });
332
+ }
333
+ await this.save();
334
+ }
335
+ async saveTaskOutput(taskId, output) {
336
+ if (!this.state)
337
+ throw new Error("Project not initialized");
338
+ const task = this.getTask(taskId);
339
+ if (!task)
340
+ throw new Error(`Task not found: ${taskId}`);
341
+ task.output = output;
342
+ task.updatedAt = new Date().toISOString();
343
+ // Save output to artifacts file
344
+ const staging = this.getStaging(task.stagingId);
345
+ if (staging) {
346
+ const outputPath = normalizePath(join(this.projectRoot, staging.artifacts_path, `${taskId}-output.json`));
347
+ await ensureDir(dirname(outputPath));
348
+ await writeFile(outputPath, JSON.stringify(output, null, 2), "utf-8");
349
+ }
350
+ await this.save();
351
+ }
352
+ getExecutableTasks(stagingId) {
353
+ const staging = this.getStaging(stagingId);
354
+ if (!staging || staging.status !== "in_progress")
355
+ return [];
356
+ const tasks = this.getTasksByStaging(stagingId);
357
+ if (staging.execution_type === "parallel") {
358
+ return tasks.filter(t => t.status === "pending");
359
+ }
360
+ // Sequential: only return tasks whose dependencies are all done
361
+ return tasks.filter(task => {
362
+ if (task.status !== "pending")
363
+ return false;
364
+ return task.depends_on.every(depId => {
365
+ const depTask = this.getTask(depId);
366
+ return depTask?.status === "done";
367
+ });
368
+ });
369
+ }
370
+ // ============ Archive Operations ============
371
+ async archivePlan(planId, reason) {
372
+ if (!this.state)
373
+ throw new Error("Project not initialized");
374
+ const plan = this.getPlan(planId);
375
+ if (!plan)
376
+ throw new Error(`Plan not found: ${planId}`);
377
+ if (plan.status !== "completed" && plan.status !== "cancelled") {
378
+ throw new Error(`Cannot archive plan in ${plan.status} status. Only completed or cancelled plans can be archived.`);
379
+ }
380
+ const now = new Date().toISOString();
381
+ const sourcePath = normalizePath(join(this.projectRoot, ".claude", "plans", planId));
382
+ const archivePath = normalizePath(join(this.projectRoot, ".claude", "archive", planId));
383
+ // Move plan directory to archive
384
+ try {
385
+ await ensureDir(dirname(archivePath));
386
+ await cp(sourcePath, archivePath, { recursive: true });
387
+ await rm(sourcePath, { recursive: true, force: true });
388
+ }
389
+ catch (error) {
390
+ // Directory might not exist if no artifacts were created
391
+ console.error(`Archive directory operation failed: ${error}`);
392
+ }
393
+ plan.status = "archived";
394
+ plan.archivedAt = now;
395
+ plan.updatedAt = now;
396
+ // Clear current context if this was the active plan
397
+ if (this.state.context.currentPlanId === planId) {
398
+ this.state.context.currentPlanId = undefined;
399
+ this.state.context.currentStagingId = undefined;
400
+ }
401
+ await this.addHistory("plan_archived", { planId, title: plan.title, reason });
402
+ await this.save();
403
+ return toPosixPath(join(".claude", "archive", planId));
404
+ }
405
+ // ============ Cancel Operations ============
406
+ async cancelPlan(planId, reason) {
407
+ if (!this.state)
408
+ throw new Error("Project not initialized");
409
+ const plan = this.getPlan(planId);
410
+ if (!plan)
411
+ throw new Error(`Plan not found: ${planId}`);
412
+ if (plan.status === "archived" || plan.status === "cancelled") {
413
+ throw new Error(`Plan is already ${plan.status}`);
414
+ }
415
+ const now = new Date().toISOString();
416
+ let affectedStagings = 0;
417
+ let affectedTasks = 0;
418
+ // Cancel all pending/in_progress stagings
419
+ for (const stagingId of plan.stagings) {
420
+ const staging = this.getStaging(stagingId);
421
+ if (staging && (staging.status === "pending" || staging.status === "in_progress")) {
422
+ staging.status = "cancelled";
423
+ affectedStagings++;
424
+ // Cancel all pending/in_progress tasks in this staging
425
+ for (const taskId of staging.tasks) {
426
+ const task = this.getTask(taskId);
427
+ if (task && (task.status === "pending" || task.status === "in_progress")) {
428
+ task.status = "cancelled";
429
+ task.updatedAt = now;
430
+ affectedTasks++;
431
+ }
432
+ }
433
+ }
434
+ }
435
+ plan.status = "cancelled";
436
+ plan.updatedAt = now;
437
+ // Clear current context if this was the active plan
438
+ if (this.state.context.currentPlanId === planId) {
439
+ this.state.context.currentPlanId = undefined;
440
+ this.state.context.currentStagingId = undefined;
441
+ }
442
+ await this.addHistory("plan_cancelled", { planId, title: plan.title, reason, affectedStagings, affectedTasks });
443
+ await this.save();
444
+ return { affectedStagings, affectedTasks };
445
+ }
446
+ // ============ History & Decision Operations ============
447
+ async addHistory(type, details) {
448
+ if (!this.state)
449
+ return;
450
+ const entry = {
451
+ id: idGenerator.generateHistoryId(),
452
+ timestamp: new Date().toISOString(),
453
+ type,
454
+ details,
455
+ };
456
+ this.state.history.push(entry);
457
+ this.state.context.lastUpdated = entry.timestamp;
458
+ }
459
+ async addDecision(title, decision, rationale, relatedPlanId, relatedStagingId) {
460
+ if (!this.state)
461
+ throw new Error("Project not initialized");
462
+ const now = new Date().toISOString();
463
+ const decisionEntry = {
464
+ id: idGenerator.generateDecisionId(),
465
+ title,
466
+ decision,
467
+ rationale,
468
+ relatedPlanId,
469
+ relatedStagingId,
470
+ timestamp: now,
471
+ };
472
+ this.state.context.decisions.push(decisionEntry);
473
+ await this.addHistory("decision_added", { decisionId: decisionEntry.id, title });
474
+ await this.save();
475
+ return decisionEntry;
476
+ }
477
+ // ============ Session Operations ============
478
+ async startSession() {
479
+ await this.addHistory("session_started", {});
480
+ await this.save();
481
+ }
482
+ async endSession(summary) {
483
+ if (!this.state)
484
+ return;
485
+ if (summary) {
486
+ this.state.context.sessionSummary = summary;
487
+ }
488
+ await this.addHistory("session_ended", { summary });
489
+ await this.save();
490
+ }
491
+ // ============ Utility Methods ============
492
+ getProjectRoot() {
493
+ return this.projectRoot;
494
+ }
495
+ isInitialized() {
496
+ return this.state !== null;
497
+ }
498
+ }
499
+ export { idGenerator };
500
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/state/manager.ts"],"names":[],"mappings":"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"}