octie-cli 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 (162) hide show
  1. package/README.md +523 -0
  2. package/dist/cli/commands/approve.d.ts +27 -0
  3. package/dist/cli/commands/approve.d.ts.map +1 -0
  4. package/dist/cli/commands/approve.js +119 -0
  5. package/dist/cli/commands/approve.js.map +1 -0
  6. package/dist/cli/commands/batch.d.ts +15 -0
  7. package/dist/cli/commands/batch.d.ts.map +1 -0
  8. package/dist/cli/commands/batch.js +521 -0
  9. package/dist/cli/commands/batch.js.map +1 -0
  10. package/dist/cli/commands/create.d.ts +9 -0
  11. package/dist/cli/commands/create.d.ts.map +1 -0
  12. package/dist/cli/commands/create.js +321 -0
  13. package/dist/cli/commands/create.js.map +1 -0
  14. package/dist/cli/commands/delete.d.ts +9 -0
  15. package/dist/cli/commands/delete.d.ts.map +1 -0
  16. package/dist/cli/commands/delete.js +143 -0
  17. package/dist/cli/commands/delete.js.map +1 -0
  18. package/dist/cli/commands/export.d.ts +9 -0
  19. package/dist/cli/commands/export.d.ts.map +1 -0
  20. package/dist/cli/commands/export.js +66 -0
  21. package/dist/cli/commands/export.js.map +1 -0
  22. package/dist/cli/commands/find.d.ts +16 -0
  23. package/dist/cli/commands/find.d.ts.map +1 -0
  24. package/dist/cli/commands/find.js +252 -0
  25. package/dist/cli/commands/find.js.map +1 -0
  26. package/dist/cli/commands/get.d.ts +9 -0
  27. package/dist/cli/commands/get.d.ts.map +1 -0
  28. package/dist/cli/commands/get.js +74 -0
  29. package/dist/cli/commands/get.js.map +1 -0
  30. package/dist/cli/commands/graph.d.ts +9 -0
  31. package/dist/cli/commands/graph.d.ts.map +1 -0
  32. package/dist/cli/commands/graph.js +200 -0
  33. package/dist/cli/commands/graph.js.map +1 -0
  34. package/dist/cli/commands/import.d.ts +9 -0
  35. package/dist/cli/commands/import.d.ts.map +1 -0
  36. package/dist/cli/commands/import.js +807 -0
  37. package/dist/cli/commands/import.js.map +1 -0
  38. package/dist/cli/commands/init.d.ts +9 -0
  39. package/dist/cli/commands/init.d.ts.map +1 -0
  40. package/dist/cli/commands/init.js +57 -0
  41. package/dist/cli/commands/init.js.map +1 -0
  42. package/dist/cli/commands/list.d.ts +9 -0
  43. package/dist/cli/commands/list.d.ts.map +1 -0
  44. package/dist/cli/commands/list.js +175 -0
  45. package/dist/cli/commands/list.js.map +1 -0
  46. package/dist/cli/commands/merge.d.ts +9 -0
  47. package/dist/cli/commands/merge.d.ts.map +1 -0
  48. package/dist/cli/commands/merge.js +113 -0
  49. package/dist/cli/commands/merge.js.map +1 -0
  50. package/dist/cli/commands/serve.d.ts +9 -0
  51. package/dist/cli/commands/serve.d.ts.map +1 -0
  52. package/dist/cli/commands/serve.js +94 -0
  53. package/dist/cli/commands/serve.js.map +1 -0
  54. package/dist/cli/commands/update.d.ts +9 -0
  55. package/dist/cli/commands/update.d.ts.map +1 -0
  56. package/dist/cli/commands/update.js +423 -0
  57. package/dist/cli/commands/update.js.map +1 -0
  58. package/dist/cli/commands/wire.d.ts +15 -0
  59. package/dist/cli/commands/wire.d.ts.map +1 -0
  60. package/dist/cli/commands/wire.js +164 -0
  61. package/dist/cli/commands/wire.js.map +1 -0
  62. package/dist/cli/index.d.ts +7 -0
  63. package/dist/cli/index.d.ts.map +1 -0
  64. package/dist/cli/index.js +100 -0
  65. package/dist/cli/index.js.map +1 -0
  66. package/dist/cli/output/json.d.ts +16 -0
  67. package/dist/cli/output/json.d.ts.map +1 -0
  68. package/dist/cli/output/json.js +29 -0
  69. package/dist/cli/output/json.js.map +1 -0
  70. package/dist/cli/output/markdown.d.ts +15 -0
  71. package/dist/cli/output/markdown.d.ts.map +1 -0
  72. package/dist/cli/output/markdown.js +206 -0
  73. package/dist/cli/output/markdown.js.map +1 -0
  74. package/dist/cli/output/table.d.ts +23 -0
  75. package/dist/cli/output/table.d.ts.map +1 -0
  76. package/dist/cli/output/table.js +150 -0
  77. package/dist/cli/output/table.js.map +1 -0
  78. package/dist/cli/utils/helpers.d.ts +126 -0
  79. package/dist/cli/utils/helpers.d.ts.map +1 -0
  80. package/dist/cli/utils/helpers.js +325 -0
  81. package/dist/cli/utils/helpers.js.map +1 -0
  82. package/dist/core/graph/algorithms.d.ts +11 -0
  83. package/dist/core/graph/algorithms.d.ts.map +1 -0
  84. package/dist/core/graph/algorithms.js +14 -0
  85. package/dist/core/graph/algorithms.js.map +1 -0
  86. package/dist/core/graph/cycle.d.ts +155 -0
  87. package/dist/core/graph/cycle.d.ts.map +1 -0
  88. package/dist/core/graph/cycle.js +297 -0
  89. package/dist/core/graph/cycle.js.map +1 -0
  90. package/dist/core/graph/index.d.ts +223 -0
  91. package/dist/core/graph/index.d.ts.map +1 -0
  92. package/dist/core/graph/index.js +475 -0
  93. package/dist/core/graph/index.js.map +1 -0
  94. package/dist/core/graph/operations.d.ts +240 -0
  95. package/dist/core/graph/operations.d.ts.map +1 -0
  96. package/dist/core/graph/operations.js +503 -0
  97. package/dist/core/graph/operations.js.map +1 -0
  98. package/dist/core/graph/sort.d.ts +76 -0
  99. package/dist/core/graph/sort.d.ts.map +1 -0
  100. package/dist/core/graph/sort.js +254 -0
  101. package/dist/core/graph/sort.js.map +1 -0
  102. package/dist/core/graph/traversal.d.ts +122 -0
  103. package/dist/core/graph/traversal.d.ts.map +1 -0
  104. package/dist/core/graph/traversal.js +336 -0
  105. package/dist/core/graph/traversal.js.map +1 -0
  106. package/dist/core/models/task-node.d.ts +328 -0
  107. package/dist/core/models/task-node.d.ts.map +1 -0
  108. package/dist/core/models/task-node.js +1090 -0
  109. package/dist/core/models/task-node.js.map +1 -0
  110. package/dist/core/registry/index.d.ts +102 -0
  111. package/dist/core/registry/index.d.ts.map +1 -0
  112. package/dist/core/registry/index.js +249 -0
  113. package/dist/core/registry/index.js.map +1 -0
  114. package/dist/core/registry/root-guard.d.ts +19 -0
  115. package/dist/core/registry/root-guard.d.ts.map +1 -0
  116. package/dist/core/registry/root-guard.js +28 -0
  117. package/dist/core/registry/root-guard.js.map +1 -0
  118. package/dist/core/storage/atomic-write.d.ts +181 -0
  119. package/dist/core/storage/atomic-write.d.ts.map +1 -0
  120. package/dist/core/storage/atomic-write.js +379 -0
  121. package/dist/core/storage/atomic-write.js.map +1 -0
  122. package/dist/core/storage/file-store.d.ts +148 -0
  123. package/dist/core/storage/file-store.d.ts.map +1 -0
  124. package/dist/core/storage/file-store.js +423 -0
  125. package/dist/core/storage/file-store.js.map +1 -0
  126. package/dist/core/storage/indexer.d.ts +138 -0
  127. package/dist/core/storage/indexer.d.ts.map +1 -0
  128. package/dist/core/storage/indexer.js +350 -0
  129. package/dist/core/storage/indexer.js.map +1 -0
  130. package/dist/core/utils/status-helpers.d.ts +59 -0
  131. package/dist/core/utils/status-helpers.d.ts.map +1 -0
  132. package/dist/core/utils/status-helpers.js +149 -0
  133. package/dist/core/utils/status-helpers.js.map +1 -0
  134. package/dist/index.d.ts +10 -0
  135. package/dist/index.d.ts.map +1 -0
  136. package/dist/index.js +10 -0
  137. package/dist/index.js.map +1 -0
  138. package/dist/types/index.d.ts +504 -0
  139. package/dist/types/index.d.ts.map +1 -0
  140. package/dist/types/index.js +182 -0
  141. package/dist/types/index.js.map +1 -0
  142. package/dist/web/routes/graph.d.ts +17 -0
  143. package/dist/web/routes/graph.d.ts.map +1 -0
  144. package/dist/web/routes/graph.js +277 -0
  145. package/dist/web/routes/graph.js.map +1 -0
  146. package/dist/web/routes/projects.d.ts +14 -0
  147. package/dist/web/routes/projects.d.ts.map +1 -0
  148. package/dist/web/routes/projects.js +102 -0
  149. package/dist/web/routes/projects.js.map +1 -0
  150. package/dist/web/routes/tasks.d.ts +17 -0
  151. package/dist/web/routes/tasks.d.ts.map +1 -0
  152. package/dist/web/routes/tasks.js +538 -0
  153. package/dist/web/routes/tasks.js.map +1 -0
  154. package/dist/web/server.d.ts +121 -0
  155. package/dist/web/server.d.ts.map +1 -0
  156. package/dist/web/server.js +389 -0
  157. package/dist/web/server.js.map +1 -0
  158. package/dist/web-ui/assets/index-BB0qvF1y.css +1 -0
  159. package/dist/web-ui/assets/index-Vmm72oKY.js +34 -0
  160. package/dist/web-ui/index.html +14 -0
  161. package/dist/web-ui/vite.svg +1 -0
  162. package/package.json +94 -0
@@ -0,0 +1,521 @@
1
+ /**
2
+ * Batch command - Perform bulk operations on multiple tasks
3
+ *
4
+ * Provides atomic batch operations with safety features:
5
+ * - Preview mode with --dry-run
6
+ * - Atomic operations (all succeed or all fail)
7
+ * - Progress indicators for large batches
8
+ * - Safety confirmation for destructive operations
9
+ */
10
+ import { Command } from 'commander';
11
+ import chalk from 'chalk';
12
+ import Table from 'cli-table3';
13
+ import { getProjectPath, loadGraph, saveGraph, success, error, info, warning } from '../utils/helpers.js';
14
+ /**
15
+ * Check if task matches title pattern (case-insensitive substring)
16
+ */
17
+ function matchesTitle(task, pattern) {
18
+ return task.title.toLowerCase().includes(pattern.toLowerCase());
19
+ }
20
+ /**
21
+ * Check if task contains search text in various fields
22
+ */
23
+ function matchesSearch(task, query) {
24
+ const queryLower = query.toLowerCase();
25
+ if (task.title.toLowerCase().includes(queryLower))
26
+ return true;
27
+ if (task.description.toLowerCase().includes(queryLower))
28
+ return true;
29
+ if (task.notes.toLowerCase().includes(queryLower))
30
+ return true;
31
+ if (task.success_criteria.some(sc => sc.text.toLowerCase().includes(queryLower)))
32
+ return true;
33
+ if (task.deliverables.some(d => d.text.toLowerCase().includes(queryLower)))
34
+ return true;
35
+ return false;
36
+ }
37
+ /**
38
+ * Check if task has a specific related file
39
+ */
40
+ function matchesFile(task, filePath) {
41
+ return task.related_files.some(f => f.toLowerCase().includes(filePath.toLowerCase()));
42
+ }
43
+ /**
44
+ * Check if task has C7 verification from specific library
45
+ */
46
+ function matchesC7Verification(task, libraryId) {
47
+ const libraryLower = libraryId.toLowerCase();
48
+ return task.c7_verified.some(v => v.library_id.toLowerCase().includes(libraryLower));
49
+ }
50
+ /**
51
+ * Check if task has no blockers
52
+ */
53
+ function hasNoBlockers(task) {
54
+ return task.blockers.length === 0;
55
+ }
56
+ /**
57
+ * Apply all filters and return matching tasks
58
+ */
59
+ function applyBatchFilters(graph, options) {
60
+ let taskIds = null;
61
+ let tasks = graph.getAllTasks();
62
+ // If --orphans flag is set, filter to orphan tasks only
63
+ if (options.orphans) {
64
+ const orphanIds = graph.getOrphanTasks();
65
+ if (taskIds === null) {
66
+ taskIds = new Set(orphanIds);
67
+ }
68
+ else {
69
+ taskIds = new Set(orphanIds.filter(id => taskIds.has(id)));
70
+ }
71
+ }
72
+ // If --leaves flag is set, filter to leaf tasks only
73
+ if (options.leaves) {
74
+ const leafIds = graph.getLeafTasks();
75
+ if (taskIds === null) {
76
+ taskIds = new Set(leafIds);
77
+ }
78
+ else {
79
+ taskIds = new Set(leafIds.filter(id => taskIds.has(id)));
80
+ }
81
+ }
82
+ // If --without-blockers flag is set, filter to tasks with no blockers
83
+ if (options.withoutBlockers) {
84
+ const noBlockerIds = tasks.filter(t => hasNoBlockers(t)).map(t => t.id);
85
+ if (taskIds === null) {
86
+ taskIds = new Set(noBlockerIds);
87
+ }
88
+ else {
89
+ taskIds = new Set(noBlockerIds.filter(id => taskIds.has(id)));
90
+ }
91
+ }
92
+ // If taskIds has been constrained by flags, filter tasks
93
+ if (taskIds !== null) {
94
+ tasks = tasks.filter(t => taskIds.has(t.id));
95
+ }
96
+ // Apply --title filter
97
+ if (options.title) {
98
+ tasks = tasks.filter(t => matchesTitle(t, options.title));
99
+ }
100
+ // Apply --search filter (full-text search)
101
+ if (options.search) {
102
+ tasks = tasks.filter(t => matchesSearch(t, options.search));
103
+ }
104
+ // Apply --has-file filter
105
+ if (options.hasFile) {
106
+ tasks = tasks.filter(t => matchesFile(t, options.hasFile));
107
+ }
108
+ // Apply --verified filter (C7 verification library)
109
+ if (options.verified) {
110
+ tasks = tasks.filter(t => matchesC7Verification(t, options.verified));
111
+ }
112
+ // Apply --status filter
113
+ if (options.status) {
114
+ tasks = tasks.filter(t => t.status === options.status);
115
+ }
116
+ // Apply --priority filter
117
+ if (options.priority) {
118
+ tasks = tasks.filter(t => t.priority === options.priority);
119
+ }
120
+ return tasks;
121
+ }
122
+ /**
123
+ * Preview affected tasks in a table
124
+ */
125
+ function previewTasks(tasks, operation) {
126
+ if (tasks.length === 0) {
127
+ info('No tasks match the criteria');
128
+ return;
129
+ }
130
+ console.log('');
131
+ console.log(chalk.bold(`${operation} - ${tasks.length} task(s) affected:`));
132
+ console.log('');
133
+ const table = new Table({
134
+ head: [
135
+ chalk.gray('ID'),
136
+ chalk.gray('Status'),
137
+ chalk.gray('Priority'),
138
+ chalk.gray('Title'),
139
+ ].map(h => chalk.bold(h)),
140
+ colWidths: [10, 15, 10, 50],
141
+ wordWrap: true,
142
+ });
143
+ for (const task of tasks) {
144
+ table.push([
145
+ task.id.substring(0, 8),
146
+ task.status,
147
+ task.priority,
148
+ task.title.substring(0, 50),
149
+ ]);
150
+ }
151
+ console.log(table.toString());
152
+ console.log('');
153
+ }
154
+ /**
155
+ * Batch update-status subcommand
156
+ */
157
+ async function batchUpdateStatus(graph, newStatus, filterOptions, dryRun) {
158
+ const tasks = applyBatchFilters(graph, filterOptions);
159
+ const result = {
160
+ success: true,
161
+ affected: 0,
162
+ failed: 0,
163
+ errors: [],
164
+ affectedTasks: [],
165
+ };
166
+ if (dryRun) {
167
+ previewTasks(tasks, 'Update Status');
168
+ result.affected = tasks.length;
169
+ result.affectedTasks = tasks.map(t => t.id);
170
+ return result;
171
+ }
172
+ for (const task of tasks) {
173
+ try {
174
+ task.setStatus(newStatus);
175
+ result.affected++;
176
+ result.affectedTasks.push(task.id);
177
+ }
178
+ catch (err) {
179
+ result.failed++;
180
+ if (err instanceof Error) {
181
+ result.errors.push(`Task ${task.id.substring(0, 8)}: ${err.message}`);
182
+ }
183
+ result.success = false;
184
+ }
185
+ }
186
+ return result;
187
+ }
188
+ /**
189
+ * Batch delete subcommand
190
+ */
191
+ async function batchDelete(graph, filterOptions, dryRun, force) {
192
+ const tasks = applyBatchFilters(graph, filterOptions);
193
+ const result = {
194
+ success: true,
195
+ affected: 0,
196
+ failed: 0,
197
+ errors: [],
198
+ affectedTasks: [],
199
+ };
200
+ if (dryRun) {
201
+ previewTasks(tasks, 'Delete Tasks');
202
+ result.affected = tasks.length;
203
+ result.affectedTasks = tasks.map(t => t.id);
204
+ return result;
205
+ }
206
+ if (!force && tasks.length > 0) {
207
+ warning('Use --force flag to actually delete tasks');
208
+ warning('This is a destructive operation that cannot be undone');
209
+ result.success = false;
210
+ result.errors.push('Operation cancelled: --force flag required');
211
+ return result;
212
+ }
213
+ // Delete tasks (in reverse order to handle dependencies)
214
+ for (let i = tasks.length - 1; i >= 0; i--) {
215
+ const task = tasks[i];
216
+ if (!task)
217
+ continue;
218
+ try {
219
+ graph.removeNode(task.id);
220
+ result.affected++;
221
+ result.affectedTasks.push(task.id);
222
+ }
223
+ catch (err) {
224
+ result.failed++;
225
+ if (err instanceof Error) {
226
+ result.errors.push(`Task ${task.id.substring(0, 8)}: ${err.message}`);
227
+ }
228
+ result.success = false;
229
+ }
230
+ }
231
+ return result;
232
+ }
233
+ /**
234
+ * Batch add-blocker subcommand
235
+ */
236
+ async function batchAddBlocker(graph, blockerId, filterOptions, dryRun) {
237
+ const tasks = applyBatchFilters(graph, filterOptions);
238
+ const result = {
239
+ success: true,
240
+ affected: 0,
241
+ failed: 0,
242
+ errors: [],
243
+ affectedTasks: [],
244
+ };
245
+ // Validate blocker exists
246
+ const blockerTask = graph.getNode(blockerId);
247
+ if (!blockerTask) {
248
+ result.success = false;
249
+ result.errors.push(`Blocker task not found: ${blockerId}`);
250
+ return result;
251
+ }
252
+ if (dryRun) {
253
+ previewTasks(tasks, `Add Blocker ${blockerId.substring(0, 8)}`);
254
+ result.affected = tasks.length;
255
+ result.affectedTasks = tasks.map(t => t.id);
256
+ return result;
257
+ }
258
+ for (const task of tasks) {
259
+ try {
260
+ // Check if task already has this blocker
261
+ if (!task.blockers.includes(blockerId)) {
262
+ task.addBlocker(blockerId);
263
+ result.affected++;
264
+ result.affectedTasks.push(task.id);
265
+ }
266
+ }
267
+ catch (err) {
268
+ result.failed++;
269
+ if (err instanceof Error) {
270
+ result.errors.push(`Task ${task.id.substring(0, 8)}: ${err.message}`);
271
+ }
272
+ result.success = false;
273
+ }
274
+ }
275
+ return result;
276
+ }
277
+ /**
278
+ * Batch remove-blocker subcommand
279
+ */
280
+ async function batchRemoveBlocker(graph, blockerId, filterOptions, dryRun) {
281
+ const tasks = applyBatchFilters(graph, filterOptions);
282
+ const result = {
283
+ success: true,
284
+ affected: 0,
285
+ failed: 0,
286
+ errors: [],
287
+ affectedTasks: [],
288
+ };
289
+ if (dryRun) {
290
+ previewTasks(tasks, `Remove Blocker ${blockerId.substring(0, 8)}`);
291
+ result.affected = tasks.length;
292
+ result.affectedTasks = tasks.map(t => t.id);
293
+ return result;
294
+ }
295
+ for (const task of tasks) {
296
+ try {
297
+ // Check if task has this blocker
298
+ if (task.blockers.includes(blockerId)) {
299
+ task.removeBlocker(blockerId);
300
+ result.affected++;
301
+ result.affectedTasks.push(task.id);
302
+ }
303
+ }
304
+ catch (err) {
305
+ result.failed++;
306
+ if (err instanceof Error) {
307
+ result.errors.push(`Task ${task.id.substring(0, 8)}: ${err.message}`);
308
+ }
309
+ result.success = false;
310
+ }
311
+ }
312
+ return result;
313
+ }
314
+ /**
315
+ * Display batch operation results
316
+ */
317
+ function displayResults(result, dryRun) {
318
+ console.log('');
319
+ if (dryRun) {
320
+ info('Dry run complete - no changes made');
321
+ console.log(chalk.gray(`Would affect: ${result.affected} task(s)`));
322
+ }
323
+ else if (result.success) {
324
+ success(`Batch operation complete: ${result.affected} task(s) affected`);
325
+ }
326
+ else {
327
+ error(`Batch operation partially failed: ${result.affected} succeeded, ${result.failed} failed`);
328
+ if (result.errors.length > 0) {
329
+ console.log('');
330
+ warning('Errors:');
331
+ for (const err of result.errors) {
332
+ console.log(` - ${err}`);
333
+ }
334
+ }
335
+ }
336
+ console.log('');
337
+ }
338
+ /**
339
+ * Create the batch command with subcommands
340
+ */
341
+ export const batchCommand = new Command('batch')
342
+ .description('Perform bulk operations on multiple tasks')
343
+ .addHelpText('after', `
344
+ Safety Features:
345
+ --dry-run Preview affected tasks without making changes
346
+ --force Required for destructive operations (delete)
347
+
348
+ Filter Options (same as 'find' command):
349
+ --status <status> Filter by status
350
+ --priority <priority> Filter by priority
351
+ --title <pattern> Filter by title substring
352
+ --search <text> Full-text search
353
+ --has-file <path> Filter by related file
354
+ --verified <library> Filter by C7 verification
355
+ --without-blockers Filter to tasks with no blockers
356
+ --orphans Filter to orphan tasks
357
+ --leaves Filter to leaf tasks
358
+
359
+ Examples:
360
+ # Preview batch status update
361
+ $ octie batch update-status in_progress --status ready --dry-run
362
+
363
+ # Update all ready tasks to in_progress
364
+ $ octie batch update-status in_progress --status ready
365
+
366
+ # Delete all orphan tasks (requires --force)
367
+ $ octie batch delete --orphans --force
368
+
369
+ # Add blocker to all tasks matching filter
370
+ $ octie batch add-blocker task-123 --priority top
371
+
372
+ # Remove blocker from tasks
373
+ $ octie batch remove-blocker task-123 --status blocked
374
+ `);
375
+ // Subcommand: update-status
376
+ batchCommand
377
+ .command('update-status <status>')
378
+ .description('Update status of all tasks matching filters')
379
+ .option('-t, --title <pattern>', 'Filter by title')
380
+ .option('-s, --search <text>', 'Full-text search filter')
381
+ .option('-f, --has-file <path>', 'Filter by related file')
382
+ .option('-v, --verified <library>', 'Filter by C7 verification')
383
+ .option('--without-blockers', 'Filter to tasks with no blockers')
384
+ .option('--orphans', 'Filter to orphan tasks')
385
+ .option('--leaves', 'Filter to leaf tasks')
386
+ .option('--status <currentStatus>', 'Filter by current status')
387
+ .option('-p, --priority <priority>', 'Filter by priority')
388
+ .option('--dry-run', 'Preview changes without making them')
389
+ .action(async (newStatus, options, command) => {
390
+ try {
391
+ const globalOpts = command.parent?.parent?.opts() || {};
392
+ const projectPath = await getProjectPath(globalOpts.project);
393
+ const graph = await loadGraph(projectPath);
394
+ const result = await batchUpdateStatus(graph, newStatus, options, options.dryRun || false);
395
+ displayResults(result, options.dryRun || false);
396
+ if (!options.dryRun && result.success) {
397
+ await saveGraph(projectPath, graph);
398
+ }
399
+ process.exit(result.success ? 0 : 1);
400
+ }
401
+ catch (err) {
402
+ if (err instanceof Error) {
403
+ error(err.message);
404
+ }
405
+ else {
406
+ error('Failed to batch update status');
407
+ }
408
+ process.exit(1);
409
+ }
410
+ });
411
+ // Subcommand: delete
412
+ batchCommand
413
+ .command('delete')
414
+ .description('Delete all tasks matching filters')
415
+ .option('-t, --title <pattern>', 'Filter by title')
416
+ .option('-s, --search <text>', 'Full-text search filter')
417
+ .option('-f, --has-file <path>', 'Filter by related file')
418
+ .option('-v, --verified <library>', 'Filter by C7 verification')
419
+ .option('--without-blockers', 'Filter to tasks with no blockers')
420
+ .option('--orphans', 'Filter to orphan tasks')
421
+ .option('--leaves', 'Filter to leaf tasks')
422
+ .option('--status <status>', 'Filter by status')
423
+ .option('-p, --priority <priority>', 'Filter by priority')
424
+ .option('--dry-run', 'Preview changes without making them')
425
+ .option('--force', 'Actually delete tasks (required for safety)')
426
+ .action(async (options, command) => {
427
+ try {
428
+ const globalOpts = command.parent?.parent?.opts() || {};
429
+ const projectPath = await getProjectPath(globalOpts.project);
430
+ const graph = await loadGraph(projectPath);
431
+ const result = await batchDelete(graph, options, options.dryRun || false, options.force || false);
432
+ displayResults(result, options.dryRun || false);
433
+ if (!options.dryRun && result.success) {
434
+ info('Creating backup before save...');
435
+ await saveGraph(projectPath, graph);
436
+ }
437
+ process.exit(result.success ? 0 : 1);
438
+ }
439
+ catch (err) {
440
+ if (err instanceof Error) {
441
+ error(err.message);
442
+ }
443
+ else {
444
+ error('Failed to batch delete tasks');
445
+ }
446
+ process.exit(1);
447
+ }
448
+ });
449
+ // Subcommand: add-blocker
450
+ batchCommand
451
+ .command('add-blocker <blocker-id>')
452
+ .description('Add blocker to all tasks matching filters')
453
+ .option('-t, --title <pattern>', 'Filter by title')
454
+ .option('-s, --search <text>', 'Full-text search filter')
455
+ .option('-f, --has-file <path>', 'Filter by related file')
456
+ .option('-v, --verified <library>', 'Filter by C7 verification')
457
+ .option('--without-blockers', 'Filter to tasks with no blockers')
458
+ .option('--orphans', 'Filter to orphan tasks')
459
+ .option('--leaves', 'Filter to leaf tasks')
460
+ .option('--status <status>', 'Filter by status')
461
+ .option('-p, --priority <priority>', 'Filter by priority')
462
+ .option('--dry-run', 'Preview changes without making them')
463
+ .action(async (blockerId, options, command) => {
464
+ try {
465
+ const globalOpts = command.parent?.parent?.opts() || {};
466
+ const projectPath = await getProjectPath(globalOpts.project);
467
+ const graph = await loadGraph(projectPath);
468
+ const result = await batchAddBlocker(graph, blockerId, options, options.dryRun || false);
469
+ displayResults(result, options.dryRun || false);
470
+ if (!options.dryRun && result.success) {
471
+ await saveGraph(projectPath, graph);
472
+ }
473
+ process.exit(result.success ? 0 : 1);
474
+ }
475
+ catch (err) {
476
+ if (err instanceof Error) {
477
+ error(err.message);
478
+ }
479
+ else {
480
+ error('Failed to batch add blocker');
481
+ }
482
+ process.exit(1);
483
+ }
484
+ });
485
+ // Subcommand: remove-blocker
486
+ batchCommand
487
+ .command('remove-blocker <blocker-id>')
488
+ .description('Remove blocker from all tasks matching filters')
489
+ .option('-t, --title <pattern>', 'Filter by title')
490
+ .option('-s, --search <text>', 'Full-text search filter')
491
+ .option('-f, --has-file <path>', 'Filter by related file')
492
+ .option('-v, --verified <library>', 'Filter by C7 verification')
493
+ .option('--without-blockers', 'Filter to tasks with no blockers')
494
+ .option('--orphans', 'Filter to orphan tasks')
495
+ .option('--leaves', 'Filter to leaf tasks')
496
+ .option('--status <status>', 'Filter by status')
497
+ .option('-p, --priority <priority>', 'Filter by priority')
498
+ .option('--dry-run', 'Preview changes without making them')
499
+ .action(async (blockerId, options, command) => {
500
+ try {
501
+ const globalOpts = command.parent?.parent?.opts() || {};
502
+ const projectPath = await getProjectPath(globalOpts.project);
503
+ const graph = await loadGraph(projectPath);
504
+ const result = await batchRemoveBlocker(graph, blockerId, options, options.dryRun || false);
505
+ displayResults(result, options.dryRun || false);
506
+ if (!options.dryRun && result.success) {
507
+ await saveGraph(projectPath, graph);
508
+ }
509
+ process.exit(result.success ? 0 : 1);
510
+ }
511
+ catch (err) {
512
+ if (err instanceof Error) {
513
+ error(err.message);
514
+ }
515
+ else {
516
+ error('Failed to batch remove blocker');
517
+ }
518
+ process.exit(1);
519
+ }
520
+ });
521
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/cli/commands/batch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Create command - Create a new task with atomic task validation
3
+ */
4
+ import { Command } from 'commander';
5
+ /**
6
+ * Create the create command
7
+ */
8
+ export declare const createCommand: Command;
9
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/create.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAkD5C;;GAEG;AACH,eAAO,MAAM,aAAa,SAoStB,CAAC"}