zenarc-mcp 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 (54) hide show
  1. package/README.md +142 -0
  2. package/dist/core/bin/migrate.d.ts +3 -0
  3. package/dist/core/bin/migrate.d.ts.map +1 -0
  4. package/dist/core/bin/migrate.js +24 -0
  5. package/dist/core/bin/migrate.js.map +1 -0
  6. package/dist/core/index.d.ts +6 -0
  7. package/dist/core/index.d.ts.map +1 -0
  8. package/dist/core/index.js +4 -0
  9. package/dist/core/index.js.map +1 -0
  10. package/dist/core/migrate.d.ts +13 -0
  11. package/dist/core/migrate.d.ts.map +1 -0
  12. package/dist/core/migrate.js +154 -0
  13. package/dist/core/migrate.js.map +1 -0
  14. package/dist/core/schema.d.ts +89 -0
  15. package/dist/core/schema.d.ts.map +1 -0
  16. package/dist/core/schema.js +49 -0
  17. package/dist/core/schema.js.map +1 -0
  18. package/dist/core/store/index.d.ts +68 -0
  19. package/dist/core/store/index.d.ts.map +1 -0
  20. package/dist/core/store/index.js +23 -0
  21. package/dist/core/store/index.js.map +1 -0
  22. package/dist/core/store/types.d.ts +30 -0
  23. package/dist/core/store/types.d.ts.map +1 -0
  24. package/dist/core/store/types.js +2 -0
  25. package/dist/core/store/types.js.map +1 -0
  26. package/dist/core/store/yaml-store.d.ts +26 -0
  27. package/dist/core/store/yaml-store.d.ts.map +1 -0
  28. package/dist/core/store/yaml-store.js +482 -0
  29. package/dist/core/store/yaml-store.js.map +1 -0
  30. package/dist/server.d.ts +3 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +456 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/store-init.d.ts +2 -0
  35. package/dist/store-init.d.ts.map +1 -0
  36. package/dist/store-init.js +39 -0
  37. package/dist/store-init.js.map +1 -0
  38. package/dist/sync/firestore-store.d.ts +28 -0
  39. package/dist/sync/firestore-store.d.ts.map +1 -0
  40. package/dist/sync/firestore-store.js +251 -0
  41. package/dist/sync/firestore-store.js.map +1 -0
  42. package/dist/sync/hybrid-store.d.ts +33 -0
  43. package/dist/sync/hybrid-store.d.ts.map +1 -0
  44. package/dist/sync/hybrid-store.js +86 -0
  45. package/dist/sync/hybrid-store.js.map +1 -0
  46. package/dist/sync/index.d.ts +4 -0
  47. package/dist/sync/index.d.ts.map +1 -0
  48. package/dist/sync/index.js +4 -0
  49. package/dist/sync/index.js.map +1 -0
  50. package/dist/sync/sync-bridge.d.ts +21 -0
  51. package/dist/sync/sync-bridge.d.ts.map +1 -0
  52. package/dist/sync/sync-bridge.js +157 -0
  53. package/dist/sync/sync-bridge.js.map +1 -0
  54. package/package.json +52 -0
@@ -0,0 +1,30 @@
1
+ import type { Task } from "../schema.js";
2
+ export type ProjectConfig = {
3
+ name: string;
4
+ path: string;
5
+ format: "yaml" | "json";
6
+ sync?: {
7
+ enabled: boolean;
8
+ firebaseProject?: string;
9
+ };
10
+ };
11
+ export interface TaskStore {
12
+ getRegistry(): Promise<ProjectConfig[]>;
13
+ saveRegistry(projects: ProjectConfig[]): Promise<void>;
14
+ addProject(config: ProjectConfig): Promise<void>;
15
+ removeProject(name: string): Promise<void>;
16
+ getProjectTasksDir(projectPath: string): string;
17
+ listProjectTasks(projectPath: string): Promise<Task[]>;
18
+ readTask(projectPath: string, taskId: string): Promise<Task | null>;
19
+ writeTask(projectPath: string, task: Task): Promise<void>;
20
+ deleteTask(projectPath: string, taskId: string): Promise<boolean>;
21
+ searchTasks(query: string, options?: {
22
+ project?: string;
23
+ status?: string;
24
+ priority?: string;
25
+ tag?: string;
26
+ assigned_to?: string;
27
+ }): Promise<Task[]>;
28
+ scanForProjects(rootPaths: string[]): Promise<ProjectConfig[]>;
29
+ }
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/store/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE;QACL,OAAO,EAAE,OAAO,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,WAAW,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACxC,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAChD,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpE,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAElE,WAAW,CACT,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GACA,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEnB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CAChE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/store/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import { type Task } from "../schema.js";
2
+ import type { TaskStore, ProjectConfig } from "./types.js";
3
+ export declare function getRecentParents(): Promise<string[]>;
4
+ export declare function addRecentParent(dir: string): Promise<void>;
5
+ export declare class YamlTaskStore implements TaskStore {
6
+ getProjectTasksDir(projectPath: string): string;
7
+ private ensureZenarcStructure;
8
+ getRegistry(): Promise<ProjectConfig[]>;
9
+ saveRegistry(projects: ProjectConfig[]): Promise<void>;
10
+ addProject(config: ProjectConfig): Promise<void>;
11
+ removeProject(name: string): Promise<void>;
12
+ private writeProjectConfig;
13
+ listProjectTasks(projectPath: string): Promise<Task[]>;
14
+ readTask(projectPath: string, taskId: string): Promise<Task | null>;
15
+ writeTask(projectPath: string, task: Task): Promise<void>;
16
+ deleteTask(projectPath: string, taskId: string): Promise<boolean>;
17
+ searchTasks(query: string, options?: {
18
+ project?: string;
19
+ status?: string;
20
+ priority?: string;
21
+ tag?: string;
22
+ assigned_to?: string;
23
+ }): Promise<Task[]>;
24
+ scanForProjects(rootPaths: string[]): Promise<ProjectConfig[]>;
25
+ }
26
+ //# sourceMappingURL=yaml-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-store.d.ts","sourceRoot":"","sources":["../../../src/core/store/yaml-store.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,IAAI,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAoD3D,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAW1D;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAchE;AAqBD,qBAAa,aAAc,YAAW,SAAS;IAC7C,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;YAIjC,qBAAqB;IAgB7B,WAAW,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IASvC,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YASlC,kBAAkB;IAuB1B,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAgDtD,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IA+CnE,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAqEzD,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2DjE,WAAW,CACf,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GACA,OAAO,CAAC,IAAI,EAAE,CAAC;IAuCZ,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CA4ErE"}
@@ -0,0 +1,482 @@
1
+ import { readFile, writeFile, readdir, mkdir, access, unlink } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { homedir } from "node:os";
4
+ import { parse, stringify } from "yaml";
5
+ import { validateTask } from "../schema.js";
6
+ const ZENARC_DIR = join(homedir(), ".zenarc");
7
+ const REGISTRY_PATH = join(ZENARC_DIR, "projects.json");
8
+ const RECENT_PARENTS_PATH = join(ZENARC_DIR, "recent-parents.json");
9
+ const MAX_RECENT_PARENTS = 20;
10
+ const AGENT_MD = `# ZenArc Project Structure
11
+
12
+ This folder (\`.zenarc/\`) is managed by **ZenArc** — a task manager that stores tasks as YAML files.
13
+
14
+ ## Folder Structure
15
+
16
+ \`\`\`
17
+ .zenarc/
18
+ ├── AGENT.md # This file — structure documentation
19
+ ├── overview.yml # Auto-generated project summary (task counts, last updated)
20
+ └── tasks/ # Individual task YAML files
21
+ ├── {slug}.yaml
22
+ └── ...
23
+ \`\`\`
24
+
25
+ ## Rules
26
+
27
+ - **All task files MUST be stored in \`.zenarc/tasks/\`** — never in the project root.
28
+ - **Task filenames are \`{slug}.yaml\`** where slug comes from the task title.
29
+ - **Never rename task files manually** — ZenArc tracks tasks by ID inside the YAML, not by filename.
30
+ - **\`overview.yml\` is auto-generated** — do not edit it manually. It gets refreshed on every task change.
31
+ - **\`config.yml\` is reserved** for user-configurable project settings. Do not create it unless asked.
32
+
33
+ ## Backward Compatibility
34
+
35
+ Old ZenArc projects may have task files directly in the project root (e.g., \`zenarc-*.yaml\` or \`tm-*.yaml\`). These are still read for backward compatibility, but all new tasks are written to \`.zenarc/tasks/\`.
36
+
37
+ ## Task YAML Format
38
+
39
+ Each task file contains:
40
+ - \`id\`: Unique task ID (e.g., \`tm-20260604-abc12345\`)
41
+ - \`title\`, \`status\`, \`priority\`, \`project\`, \`tags\`
42
+ - \`created_at\`, \`updated_at\`, \`created_by\`, \`assigned_to\`
43
+ - \`context\`: \`{ files, urls, notes }\`
44
+ - \`dependencies\`: Array of task IDs
45
+ `;
46
+ async function ensureDir(path) {
47
+ await mkdir(path, { recursive: true });
48
+ }
49
+ /* ------------------------------------------------------------------ */
50
+ /* Recent parent directories — improves project path auto-detection */
51
+ /* ------------------------------------------------------------------ */
52
+ export async function getRecentParents() {
53
+ try {
54
+ const raw = await readFile(RECENT_PARENTS_PATH, "utf-8");
55
+ const parsed = JSON.parse(raw);
56
+ if (Array.isArray(parsed) && parsed.every((p) => typeof p === "string")) {
57
+ return parsed;
58
+ }
59
+ }
60
+ catch {
61
+ // File doesn't exist or is invalid
62
+ }
63
+ return [];
64
+ }
65
+ export async function addRecentParent(dir) {
66
+ const recent = await getRecentParents();
67
+ const normalized = dir.trim();
68
+ if (!normalized)
69
+ return;
70
+ // Move to front if already exists, otherwise prepend
71
+ const filtered = recent.filter((p) => p !== normalized);
72
+ filtered.unshift(normalized);
73
+ // Limit size
74
+ const trimmed = filtered.slice(0, MAX_RECENT_PARENTS);
75
+ await ensureDir(ZENARC_DIR);
76
+ await writeFile(RECENT_PARENTS_PATH, JSON.stringify(trimmed, null, 2), "utf-8");
77
+ }
78
+ function isPotentialTaskFile(name) {
79
+ return name.endsWith(".yaml") || name.endsWith(".yml");
80
+ }
81
+ function isLegacyTaskFilename(name) {
82
+ return (isPotentialTaskFile(name) &&
83
+ (name.startsWith("zenarc-") || name.startsWith("tm-")));
84
+ }
85
+ function getZenarcDir(projectPath) {
86
+ return join(projectPath, ".zenarc");
87
+ }
88
+ function getProjectOverviewPath(projectPath) {
89
+ return join(getZenarcDir(projectPath), "overview.yml");
90
+ }
91
+ export class YamlTaskStore {
92
+ getProjectTasksDir(projectPath) {
93
+ return join(projectPath, ".zenarc", "tasks");
94
+ }
95
+ async ensureZenarcStructure(projectPath) {
96
+ const zenarcDir = getZenarcDir(projectPath);
97
+ const tasksDir = this.getProjectTasksDir(projectPath);
98
+ await ensureDir(tasksDir);
99
+ // Write AGENT.md on first creation
100
+ const agentPath = join(zenarcDir, "AGENT.md");
101
+ try {
102
+ await access(agentPath);
103
+ }
104
+ catch {
105
+ await writeFile(agentPath, AGENT_MD, "utf-8");
106
+ }
107
+ return tasksDir;
108
+ }
109
+ async getRegistry() {
110
+ try {
111
+ const raw = await readFile(REGISTRY_PATH, "utf-8");
112
+ return JSON.parse(raw);
113
+ }
114
+ catch {
115
+ return [];
116
+ }
117
+ }
118
+ async saveRegistry(projects) {
119
+ await ensureDir(ZENARC_DIR);
120
+ await writeFile(REGISTRY_PATH, JSON.stringify(projects, null, 2), "utf-8");
121
+ }
122
+ async addProject(config) {
123
+ const registry = await this.getRegistry();
124
+ const filtered = registry.filter((p) => p.name !== config.name);
125
+ filtered.push(config);
126
+ await this.saveRegistry(filtered);
127
+ }
128
+ async removeProject(name) {
129
+ const registry = await this.getRegistry();
130
+ await this.saveRegistry(registry.filter((p) => p.name !== name));
131
+ }
132
+ /* ------------------------------------------------------------------ */
133
+ /* Config / summary file */
134
+ /* ------------------------------------------------------------------ */
135
+ async writeProjectConfig(projectPath, tasks) {
136
+ const overviewPath = getProjectOverviewPath(projectPath);
137
+ const counts = {};
138
+ for (const task of tasks) {
139
+ counts[task.status] = (counts[task.status] || 0) + 1;
140
+ }
141
+ const config = {
142
+ name: tasks[0]?.project || "",
143
+ summary: {
144
+ total: tasks.length,
145
+ by_status: counts,
146
+ },
147
+ last_updated: new Date().toISOString(),
148
+ };
149
+ await writeFile(overviewPath, stringify(config, { indent: 2 }), "utf-8");
150
+ }
151
+ /* ------------------------------------------------------------------ */
152
+ /* Task reading — prefers .zenarc/tasks/, falls back to root */
153
+ /* ------------------------------------------------------------------ */
154
+ async listProjectTasks(projectPath) {
155
+ const tasks = new Map();
156
+ // Read from .zenarc/tasks/ (new location)
157
+ try {
158
+ const tasksDir = this.getProjectTasksDir(projectPath);
159
+ const entries = await readdir(tasksDir);
160
+ for (const entry of entries) {
161
+ if (!isPotentialTaskFile(entry))
162
+ continue;
163
+ try {
164
+ const raw = await readFile(join(tasksDir, entry), "utf-8");
165
+ const data = parse(raw);
166
+ const task = validateTask(data);
167
+ tasks.set(task.id, task);
168
+ }
169
+ catch {
170
+ // Skip invalid task files
171
+ }
172
+ }
173
+ }
174
+ catch {
175
+ // .zenarc/tasks/ doesn't exist yet
176
+ }
177
+ // Backward compatibility: read from project root
178
+ try {
179
+ const entries = await readdir(projectPath);
180
+ for (const entry of entries) {
181
+ if (!isPotentialTaskFile(entry))
182
+ continue;
183
+ try {
184
+ const raw = await readFile(join(projectPath, entry), "utf-8");
185
+ const data = parse(raw);
186
+ const task = validateTask(data);
187
+ if (!tasks.has(task.id)) {
188
+ tasks.set(task.id, task);
189
+ }
190
+ }
191
+ catch {
192
+ // Skip invalid task files
193
+ }
194
+ }
195
+ }
196
+ catch {
197
+ // Project path doesn't exist
198
+ }
199
+ return Array.from(tasks.values()).sort((a, b) => new Date(b.updated_at).getTime() - new Date(a.updated_at).getTime());
200
+ }
201
+ async readTask(projectPath, taskId) {
202
+ // Search .zenarc/tasks/ first
203
+ try {
204
+ const tasksDir = this.getProjectTasksDir(projectPath);
205
+ const entries = await readdir(tasksDir);
206
+ for (const entry of entries) {
207
+ if (!isPotentialTaskFile(entry))
208
+ continue;
209
+ try {
210
+ const raw = await readFile(join(tasksDir, entry), "utf-8");
211
+ const data = parse(raw);
212
+ if (data.id === taskId) {
213
+ return validateTask(data);
214
+ }
215
+ }
216
+ catch {
217
+ // Continue searching
218
+ }
219
+ }
220
+ }
221
+ catch {
222
+ // .zenarc/tasks/ doesn't exist
223
+ }
224
+ // Backward compatibility: search project root
225
+ try {
226
+ const entries = await readdir(projectPath);
227
+ for (const entry of entries) {
228
+ if (!isPotentialTaskFile(entry))
229
+ continue;
230
+ try {
231
+ const raw = await readFile(join(projectPath, entry), "utf-8");
232
+ const data = parse(raw);
233
+ if (data.id === taskId) {
234
+ return validateTask(data);
235
+ }
236
+ }
237
+ catch {
238
+ // Continue searching
239
+ }
240
+ }
241
+ }
242
+ catch {
243
+ // Project path doesn't exist
244
+ }
245
+ return null;
246
+ }
247
+ /* ------------------------------------------------------------------ */
248
+ /* Task writing — always writes to .zenarc/tasks/ */
249
+ /* ------------------------------------------------------------------ */
250
+ async writeTask(projectPath, task) {
251
+ const tasksDir = await this.ensureZenarcStructure(projectPath);
252
+ const validated = validateTask(task);
253
+ const yaml = stringify(validated, {
254
+ indent: 2,
255
+ sortMapEntries: false,
256
+ });
257
+ // Try to find existing file by task ID and overwrite it
258
+ try {
259
+ const entries = await readdir(tasksDir);
260
+ for (const entry of entries) {
261
+ if (!isPotentialTaskFile(entry))
262
+ continue;
263
+ try {
264
+ const raw = await readFile(join(tasksDir, entry), "utf-8");
265
+ const data = parse(raw);
266
+ if (data.id === task.id) {
267
+ await writeFile(join(tasksDir, entry), yaml, "utf-8");
268
+ await this.writeProjectConfig(projectPath, [
269
+ ...Array.from((await this.listProjectTasks(projectPath)).filter((t) => t.id !== task.id)),
270
+ validated,
271
+ ]);
272
+ return;
273
+ }
274
+ }
275
+ catch {
276
+ // Continue searching
277
+ }
278
+ }
279
+ }
280
+ catch {
281
+ // Directory empty or unreadable
282
+ }
283
+ // No existing file — create new slug-based filename
284
+ const slug = task.title
285
+ .toLowerCase()
286
+ .replace(/[^a-z0-9]+/g, "-")
287
+ .replace(/^-+|-+$/g, "")
288
+ .slice(0, 50);
289
+ let filename = `${slug}.yaml`;
290
+ let filepath = join(tasksDir, filename);
291
+ // Handle collision by appending counter
292
+ let counter = 1;
293
+ while (true) {
294
+ try {
295
+ await access(filepath);
296
+ counter++;
297
+ filename = `${slug}-${counter}.yaml`;
298
+ filepath = join(tasksDir, filename);
299
+ }
300
+ catch {
301
+ break;
302
+ }
303
+ }
304
+ await writeFile(filepath, yaml, "utf-8");
305
+ // Update config summary
306
+ const existingTasks = await this.listProjectTasks(projectPath);
307
+ await this.writeProjectConfig(projectPath, [...existingTasks, validated]);
308
+ }
309
+ /* ------------------------------------------------------------------ */
310
+ /* Task deletion — prefers .zenarc/tasks/, falls back to root */
311
+ /* ------------------------------------------------------------------ */
312
+ async deleteTask(projectPath, taskId) {
313
+ let deletedTask = null;
314
+ // Search .zenarc/tasks/ first
315
+ try {
316
+ const tasksDir = this.getProjectTasksDir(projectPath);
317
+ const entries = await readdir(tasksDir);
318
+ for (const entry of entries) {
319
+ if (!isPotentialTaskFile(entry))
320
+ continue;
321
+ try {
322
+ const raw = await readFile(join(tasksDir, entry), "utf-8");
323
+ const data = parse(raw);
324
+ if (data.id === taskId) {
325
+ await unlink(join(tasksDir, entry));
326
+ deletedTask = validateTask(data);
327
+ break;
328
+ }
329
+ }
330
+ catch {
331
+ // Continue searching
332
+ }
333
+ }
334
+ }
335
+ catch {
336
+ // .zenarc/tasks/ doesn't exist
337
+ }
338
+ // Backward compatibility: search project root
339
+ if (!deletedTask) {
340
+ try {
341
+ const entries = await readdir(projectPath);
342
+ for (const entry of entries) {
343
+ if (!isPotentialTaskFile(entry))
344
+ continue;
345
+ try {
346
+ const raw = await readFile(join(projectPath, entry), "utf-8");
347
+ const data = parse(raw);
348
+ if (data.id === taskId) {
349
+ await unlink(join(projectPath, entry));
350
+ deletedTask = validateTask(data);
351
+ break;
352
+ }
353
+ }
354
+ catch {
355
+ // Continue searching
356
+ }
357
+ }
358
+ }
359
+ catch {
360
+ // Project path doesn't exist
361
+ }
362
+ }
363
+ if (deletedTask) {
364
+ const remaining = (await this.listProjectTasks(projectPath)).filter((t) => t.id !== taskId);
365
+ await this.writeProjectConfig(projectPath, remaining);
366
+ return true;
367
+ }
368
+ return false;
369
+ }
370
+ async searchTasks(query, options) {
371
+ const registry = await this.getRegistry();
372
+ let projects = registry;
373
+ if (options?.project) {
374
+ projects = projects.filter((p) => p.name === options.project);
375
+ }
376
+ const allTasks = [];
377
+ for (const project of projects) {
378
+ const tasks = await this.listProjectTasks(project.path);
379
+ allTasks.push(...tasks);
380
+ }
381
+ const q = query.toLowerCase();
382
+ return allTasks.filter((task) => {
383
+ if (options?.status && task.status !== options.status)
384
+ return false;
385
+ if (options?.priority && task.priority !== options.priority)
386
+ return false;
387
+ if (options?.tag && !task.tags.includes(options.tag))
388
+ return false;
389
+ if (options?.assigned_to && task.assigned_to !== options.assigned_to)
390
+ return false;
391
+ if (!q)
392
+ return true;
393
+ const text = [
394
+ task.title,
395
+ task.context.notes,
396
+ ...task.tags,
397
+ task.project,
398
+ task.assigned_to || "",
399
+ ]
400
+ .join(" ")
401
+ .toLowerCase();
402
+ return text.includes(q);
403
+ });
404
+ }
405
+ async scanForProjects(rootPaths) {
406
+ const { readdir } = await import("node:fs/promises");
407
+ const found = [];
408
+ for (const root of rootPaths) {
409
+ try {
410
+ const entries = await readdir(root, { withFileTypes: true });
411
+ for (const entry of entries) {
412
+ if (!entry.isDirectory())
413
+ continue;
414
+ const projectPath = join(root, entry.name);
415
+ // Check for .zenarc/tasks/ directory (new format)
416
+ try {
417
+ const tasksDir = this.getProjectTasksDir(projectPath);
418
+ await access(tasksDir);
419
+ const files = await readdir(tasksDir);
420
+ if (files.some(isPotentialTaskFile)) {
421
+ found.push({
422
+ name: entry.name,
423
+ path: projectPath,
424
+ format: "yaml",
425
+ });
426
+ continue;
427
+ }
428
+ }
429
+ catch {
430
+ // No .zenarc/tasks/ directory
431
+ }
432
+ // Check for .zenarc/overview.yml
433
+ try {
434
+ await access(getProjectOverviewPath(projectPath));
435
+ found.push({
436
+ name: entry.name,
437
+ path: projectPath,
438
+ format: "yaml",
439
+ });
440
+ continue;
441
+ }
442
+ catch {
443
+ // No .zenarc/overview.yml
444
+ }
445
+ // Check for .zenarc.yml config file (legacy)
446
+ try {
447
+ await access(join(projectPath, ".zenarc.yml"));
448
+ found.push({
449
+ name: entry.name,
450
+ path: projectPath,
451
+ format: "yaml",
452
+ });
453
+ continue;
454
+ }
455
+ catch {
456
+ // No .zenarc.yml
457
+ }
458
+ // Backward compatibility: check for legacy task files in root
459
+ try {
460
+ const files = await readdir(projectPath);
461
+ const hasTaskFiles = files.some((f) => isLegacyTaskFilename(f));
462
+ if (hasTaskFiles) {
463
+ found.push({
464
+ name: entry.name,
465
+ path: projectPath,
466
+ format: "yaml",
467
+ });
468
+ }
469
+ }
470
+ catch {
471
+ // Can't read directory
472
+ }
473
+ }
474
+ }
475
+ catch {
476
+ // Root path doesn't exist or isn't readable
477
+ }
478
+ }
479
+ return found;
480
+ }
481
+ }
482
+ //# sourceMappingURL=yaml-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-store.js","sourceRoot":"","sources":["../../../src/core/store/yaml-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}