@backlog-md/core 0.2.2 → 0.3.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.
@@ -5,7 +5,8 @@
5
5
  * by accepting adapter implementations for I/O operations.
6
6
  */
7
7
  import type { FileSystemAdapter } from "@principal-ai/repository-abstraction";
8
- import type { Task, BacklogConfig, TaskListFilter, PaginationOptions, PaginatedResult, PaginatedTasksByStatus, PaginatedTasksBySource, TaskIndexEntry, SourcePaginationOptions } from "../types";
8
+ import type { Task, BacklogConfig, TaskListFilter, PaginationOptions, PaginatedResult, PaginatedTasksByStatus, PaginatedTasksBySource, TaskIndexEntry, SourcePaginationOptions, MilestoneSummary, TaskCreateInput, TaskUpdateInput } from "../types";
9
+ import type { Milestone } from "../types";
9
10
  /**
10
11
  * Options for initializing a new Backlog.md project
11
12
  */
@@ -31,6 +32,24 @@ export interface CoreOptions {
31
32
  fs: FileSystemAdapter;
32
33
  };
33
34
  }
35
+ /**
36
+ * Input for creating a new milestone
37
+ */
38
+ export interface MilestoneCreateInput {
39
+ /** Milestone title (required) */
40
+ title: string;
41
+ /** Optional description */
42
+ description?: string;
43
+ }
44
+ /**
45
+ * Input for updating an existing milestone
46
+ */
47
+ export interface MilestoneUpdateInput {
48
+ /** New title (optional) */
49
+ title?: string;
50
+ /** New description (optional) */
51
+ description?: string;
52
+ }
34
53
  /**
35
54
  * Core class for Backlog.md operations
36
55
  *
@@ -169,6 +188,65 @@ export declare class Core {
169
188
  * The Map preserves the order of statuses from config.
170
189
  */
171
190
  getTasksByStatus(): Map<string, Task[]>;
191
+ /**
192
+ * Get tasks grouped by milestone
193
+ *
194
+ * Returns a MilestoneSummary with:
195
+ * - milestones: List of milestone IDs in display order
196
+ * - buckets: Array of MilestoneBucket with tasks, progress, status counts
197
+ *
198
+ * The first bucket is always "Tasks without milestone".
199
+ * Each bucket includes progress percentage based on done status.
200
+ *
201
+ * @example
202
+ * ```typescript
203
+ * const summary = core.getTasksByMilestone();
204
+ * for (const bucket of summary.buckets) {
205
+ * console.log(`${bucket.label}: ${bucket.progress}% complete`);
206
+ * console.log(` ${bucket.doneCount}/${bucket.total} tasks done`);
207
+ * }
208
+ * ```
209
+ */
210
+ getTasksByMilestone(): MilestoneSummary;
211
+ /**
212
+ * Get the milestones directory path
213
+ */
214
+ private getMilestonesDir;
215
+ /**
216
+ * List all milestones from the milestones directory
217
+ *
218
+ * @returns Array of Milestone objects sorted by ID
219
+ */
220
+ listMilestones(): Promise<Milestone[]>;
221
+ /**
222
+ * Load a single milestone by ID
223
+ *
224
+ * @param id - Milestone ID (e.g., "m-0")
225
+ * @returns Milestone or null if not found
226
+ */
227
+ loadMilestone(id: string): Promise<Milestone | null>;
228
+ /**
229
+ * Create a new milestone
230
+ *
231
+ * @param input - Milestone creation input
232
+ * @returns Created milestone
233
+ */
234
+ createMilestone(input: MilestoneCreateInput): Promise<Milestone>;
235
+ /**
236
+ * Update an existing milestone
237
+ *
238
+ * @param id - Milestone ID to update
239
+ * @param input - Fields to update
240
+ * @returns Updated milestone or null if not found
241
+ */
242
+ updateMilestone(id: string, input: MilestoneUpdateInput): Promise<Milestone | null>;
243
+ /**
244
+ * Delete a milestone
245
+ *
246
+ * @param id - Milestone ID to delete
247
+ * @returns true if deleted, false if not found
248
+ */
249
+ deleteMilestone(id: string): Promise<boolean>;
172
250
  /**
173
251
  * Get a single task by ID
174
252
  *
@@ -208,5 +286,56 @@ export declare class Core {
208
286
  private ensureInitialized;
209
287
  private applyFilters;
210
288
  private loadTasksFromDirectory;
289
+ /**
290
+ * Add a task ID to a milestone's tasks array
291
+ *
292
+ * @param taskId - Task ID to add
293
+ * @param milestoneId - Milestone ID to update
294
+ */
295
+ private addTaskToMilestone;
296
+ /**
297
+ * Remove a task ID from a milestone's tasks array
298
+ *
299
+ * @param taskId - Task ID to remove
300
+ * @param milestoneId - Milestone ID to update
301
+ */
302
+ private removeTaskFromMilestone;
303
+ /**
304
+ * Write a milestone to disk
305
+ */
306
+ private writeMilestoneFile;
307
+ /**
308
+ * Get the tasks directory path
309
+ */
310
+ private getTasksDir;
311
+ /**
312
+ * Create a new task
313
+ *
314
+ * @param input - Task creation input
315
+ * @returns Created task
316
+ */
317
+ createTask(input: TaskCreateInput): Promise<Task>;
318
+ /**
319
+ * Update an existing task
320
+ *
321
+ * @param id - Task ID to update
322
+ * @param input - Fields to update
323
+ * @returns Updated task or null if not found
324
+ */
325
+ updateTask(id: string, input: TaskUpdateInput): Promise<Task | null>;
326
+ /**
327
+ * Delete a task
328
+ *
329
+ * @param id - Task ID to delete
330
+ * @returns true if deleted, false if not found
331
+ */
332
+ deleteTask(id: string): Promise<boolean>;
333
+ /**
334
+ * Load specific tasks by their IDs (for lazy loading milestone tasks)
335
+ *
336
+ * @param ids - Array of task IDs to load
337
+ * @returns Array of loaded tasks (missing tasks excluded)
338
+ */
339
+ loadTasksByIds(ids: string[]): Promise<Task[]>;
211
340
  }
212
341
  //# sourceMappingURL=Core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Core.d.ts","sourceRoot":"","sources":["../../src/core/Core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Core.d.ts","sourceRoot":"","sources":["../../src/core/Core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,EACV,IAAI,EACJ,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,cAAc,EACd,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,eAAe,EAChB,MAAM,UAAU,CAAC;AAkBlB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IAEpB,iDAAiD;IACjD,QAAQ,EAAE;QACR,oCAAoC;QACpC,EAAE,EAAE,iBAAiB,CAAC;KACvB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IAEvC,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,WAAW,CAAS;IAE5B,8DAA8D;IAC9D,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,eAAe,CAAS;gBAEpB,OAAO,EAAE,WAAW;IAKhC;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAK1C;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiClE;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BjC;;;;;;;;OAQG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCxD;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;OAEG;IACH,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAO3C;;;;;OAKG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAyBrD;;;;;OAKG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAK/C;;;;;;;;;OASG;IACG,yBAAyB,CAC7B,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,sBAAsB,CAAC;IAsDlC;;;;;;;OAOG;IACG,iBAAiB,CACrB,MAAM,EAAE,OAAO,GAAG,WAAW,EAC7B,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;QAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAC;KACjC,GACA,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAuCjC;;;;OAIG;IACH,SAAS,IAAI,aAAa;IAK1B;;;;;OAKG;IACH,SAAS,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,EAAE;IA6B1C;;;;;;OAMG;IACH,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IAMvC;;;;;;;;;;;;;;;;;;OAkBG;IACH,mBAAmB,IAAI,gBAAgB;IAcvC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAsC5C;;;;;OAKG;IACG,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA6B1D;;;;;OAKG;IACG,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC;IAiDtE;;;;;;OAMG;IACG,eAAe,CACnB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAwD5B;;;;;OAKG;IACG,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA6BnD;;;;;OAKG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAKrC;;;;;OAKG;IACH,kBAAkB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC;IA4BlE;;;;;OAKG;IACH,yBAAyB,CACvB,UAAU,CAAC,EAAE,iBAAiB,GAC7B,sBAAsB;IA+CzB;;;;;;;OAOG;IACH,iBAAiB,CACf,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,GAC7C,eAAe,CAAC,IAAI,CAAC;IAwBxB;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ7B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,YAAY;YA8BN,sBAAsB;IAsCpC;;;;;OAKG;YACW,kBAAkB;IA0BhC;;;;;OAKG;YACW,uBAAuB;IAuBrC;;OAEG;YACW,kBAAkB;IAsBhC;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;;;;OAKG;IACG,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA8DvD;;;;;;OAMG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAqH1E;;;;;OAKG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA4B9C;;;;;OAKG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;CAiBrD"}