@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.
- package/dist/errors/index.d.ts +112 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +231 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/state/manager.d.ts +54 -0
- package/dist/state/manager.d.ts.map +1 -0
- package/dist/state/manager.js +500 -0
- package/dist/state/manager.js.map +1 -0
- package/dist/state/schema.d.ts +942 -0
- package/dist/state/schema.d.ts.map +1 -0
- package/dist/state/schema.js +179 -0
- package/dist/state/schema.js.map +1 -0
- package/dist/state/types.d.ts +117 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/state/types.js +2 -0
- package/dist/state/types.js.map +1 -0
- package/dist/tools/archive.d.ts +6 -0
- package/dist/tools/archive.d.ts.map +1 -0
- package/dist/tools/archive.js +67 -0
- package/dist/tools/archive.js.map +1 -0
- package/dist/tools/cancel.d.ts +6 -0
- package/dist/tools/cancel.d.ts.map +1 -0
- package/dist/tools/cancel.js +65 -0
- package/dist/tools/cancel.js.map +1 -0
- package/dist/tools/context.d.ts +6 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +124 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +24 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/plan.d.ts +6 -0
- package/dist/tools/plan.d.ts.map +1 -0
- package/dist/tools/plan.js +186 -0
- package/dist/tools/plan.js.map +1 -0
- package/dist/tools/staging.d.ts +6 -0
- package/dist/tools/staging.d.ts.map +1 -0
- package/dist/tools/staging.js +224 -0
- package/dist/tools/staging.js.map +1 -0
- package/dist/tools/status.d.ts +6 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/status.js +144 -0
- package/dist/tools/status.js.map +1 -0
- package/dist/utils/artifacts.d.ts +57 -0
- package/dist/utils/artifacts.d.ts.map +1 -0
- package/dist/utils/artifacts.js +180 -0
- package/dist/utils/artifacts.js.map +1 -0
- package/dist/utils/paths.d.ts +68 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +122 -0
- package/dist/utils/paths.js.map +1 -0
- 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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"}
|