@claudecam/cli 0.0.1 → 0.1.1

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 (70) hide show
  1. package/dist/cam-hook.d.ts +8 -0
  2. package/dist/cam-hook.d.ts.map +1 -0
  3. package/dist/cam-hook.js +8 -0
  4. package/dist/cam-hook.js.map +1 -0
  5. package/dist/commands/doctor.d.ts +3 -0
  6. package/dist/commands/doctor.d.ts.map +1 -0
  7. package/dist/commands/doctor.js +218 -0
  8. package/dist/commands/doctor.js.map +1 -0
  9. package/dist/commands/hooks.d.ts +3 -0
  10. package/dist/commands/hooks.d.ts.map +1 -0
  11. package/dist/commands/hooks.js +106 -0
  12. package/dist/commands/hooks.js.map +1 -0
  13. package/dist/commands/init.d.ts +3 -0
  14. package/dist/commands/init.d.ts.map +1 -0
  15. package/dist/commands/init.js +576 -0
  16. package/dist/commands/init.js.map +1 -0
  17. package/dist/commands/progress.d.ts +3 -0
  18. package/dist/commands/progress.d.ts.map +1 -0
  19. package/dist/commands/progress.js +157 -0
  20. package/dist/commands/progress.js.map +1 -0
  21. package/dist/commands/project.d.ts +3 -0
  22. package/dist/commands/project.d.ts.map +1 -0
  23. package/dist/commands/project.js +203 -0
  24. package/dist/commands/project.js.map +1 -0
  25. package/dist/commands/sessions.d.ts +3 -0
  26. package/dist/commands/sessions.d.ts.map +1 -0
  27. package/dist/commands/sessions.js +105 -0
  28. package/dist/commands/sessions.js.map +1 -0
  29. package/dist/commands/sprint.d.ts +3 -0
  30. package/dist/commands/sprint.d.ts.map +1 -0
  31. package/dist/commands/sprint.js +552 -0
  32. package/dist/commands/sprint.js.map +1 -0
  33. package/dist/commands/start.d.ts +3 -0
  34. package/dist/commands/start.d.ts.map +1 -0
  35. package/dist/commands/start.js +216 -0
  36. package/dist/commands/start.js.map +1 -0
  37. package/dist/commands/status.d.ts +3 -0
  38. package/dist/commands/status.d.ts.map +1 -0
  39. package/dist/commands/status.js +178 -0
  40. package/dist/commands/status.js.map +1 -0
  41. package/dist/commands/tasks.d.ts +3 -0
  42. package/dist/commands/tasks.d.ts.map +1 -0
  43. package/dist/commands/tasks.js +176 -0
  44. package/dist/commands/tasks.js.map +1 -0
  45. package/dist/commands/theme.d.ts +3 -0
  46. package/dist/commands/theme.d.ts.map +1 -0
  47. package/dist/commands/theme.js +63 -0
  48. package/dist/commands/theme.js.map +1 -0
  49. package/dist/index.d.ts +3 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +31 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/utils/config.d.ts +18 -0
  54. package/dist/utils/config.d.ts.map +1 -0
  55. package/dist/utils/config.js +74 -0
  56. package/dist/utils/config.js.map +1 -0
  57. package/dist/utils/hooks-config.d.ts +28 -0
  58. package/dist/utils/hooks-config.d.ts.map +1 -0
  59. package/dist/utils/hooks-config.js +120 -0
  60. package/dist/utils/hooks-config.js.map +1 -0
  61. package/dist/utils/logger.d.ts +16 -0
  62. package/dist/utils/logger.d.ts.map +1 -0
  63. package/dist/utils/logger.js +39 -0
  64. package/dist/utils/logger.js.map +1 -0
  65. package/dist/utils/sprint-parser.d.ts +32 -0
  66. package/dist/utils/sprint-parser.d.ts.map +1 -0
  67. package/dist/utils/sprint-parser.js +115 -0
  68. package/dist/utils/sprint-parser.js.map +1 -0
  69. package/package.json +48 -20
  70. package/index.js +0 -6
@@ -0,0 +1,552 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { existsSync, readFileSync, readdirSync } from 'node:fs';
4
+ import { resolve } from 'node:path';
5
+ import { DEFAULT_SERVER_PORT } from '@claudecam/shared';
6
+ import { logger } from '../utils/logger.js';
7
+ import { readConfig } from '../utils/config.js';
8
+ import { parseSprintMarkdown } from '../utils/sprint-parser.js';
9
+ function getApiBase() {
10
+ const config = readConfig();
11
+ const port = config.serverPort || DEFAULT_SERVER_PORT;
12
+ return `http://localhost:${port}`;
13
+ }
14
+ function requireActiveProject() {
15
+ const config = readConfig();
16
+ if (!config.activeProjectId) {
17
+ logger.error('No active project.');
18
+ logger.info(`Run: ${chalk.cyan('cam project show <id>')} to set the active project.`);
19
+ logger.blank();
20
+ process.exit(1);
21
+ }
22
+ return config.activeProjectId;
23
+ }
24
+ function renderProgressBar(percent, width = 20) {
25
+ const filled = Math.round((percent / 100) * width);
26
+ const empty = width - filled;
27
+ return chalk.green('\u2588'.repeat(filled)) + chalk.gray('\u2591'.repeat(empty));
28
+ }
29
+ const listCommand = new Command('list')
30
+ .description('List sprints for the active project')
31
+ .action(async () => {
32
+ const projectId = requireActiveProject();
33
+ logger.blank();
34
+ logger.section('Sprints');
35
+ logger.blank();
36
+ try {
37
+ const response = await fetch(`${getApiBase()}/api/projects/${projectId}/sprints`);
38
+ if (!response.ok) {
39
+ if (response.status === 404) {
40
+ logger.error('Active project not found on server. It may have been deleted.');
41
+ }
42
+ else {
43
+ logger.error(`Server responded with status ${response.status}`);
44
+ }
45
+ logger.blank();
46
+ process.exit(1);
47
+ }
48
+ const data = (await response.json());
49
+ if (data.sprints.length === 0) {
50
+ logger.info('No sprints found.');
51
+ logger.info(`Create one with: ${chalk.cyan('cam sprint create <name>')}`);
52
+ logger.blank();
53
+ return;
54
+ }
55
+ for (const sprint of data.sprints) {
56
+ const statusColor = sprint.status === 'active'
57
+ ? chalk.green
58
+ : sprint.status === 'completed'
59
+ ? chalk.cyan
60
+ : chalk.gray;
61
+ const percent = sprint.totalTasks > 0
62
+ ? Math.round((sprint.completedTasks / sprint.totalTasks) * 100)
63
+ : 0;
64
+ logger.keyValue(' ID', chalk.cyan(sprint.id.slice(0, 8)));
65
+ logger.keyValue(' Name', chalk.white(sprint.name));
66
+ logger.keyValue(' Status', statusColor(sprint.status));
67
+ logger.keyValue(' Progress', `[${renderProgressBar(percent, 16)}] ${percent}% (${sprint.completedTasks}/${sprint.totalTasks})`);
68
+ logger.blank();
69
+ }
70
+ logger.info(chalk.gray(`${data.sprints.length} sprint(s). Use ${chalk.cyan('cam sprint status')} for current sprint details.`));
71
+ }
72
+ catch {
73
+ logger.error('Server is not running.');
74
+ logger.info(`Start with: ${chalk.cyan('cam start')}`);
75
+ }
76
+ logger.blank();
77
+ });
78
+ const createCommand = new Command('create')
79
+ .description('Create a new sprint')
80
+ .argument('<name>', 'Sprint name')
81
+ .action(async (name) => {
82
+ const projectId = requireActiveProject();
83
+ logger.blank();
84
+ try {
85
+ const response = await fetch(`${getApiBase()}/api/projects/${projectId}/sprints`, {
86
+ method: 'POST',
87
+ headers: { 'Content-Type': 'application/json' },
88
+ body: JSON.stringify({ name }),
89
+ });
90
+ if (!response.ok) {
91
+ if (response.status === 404) {
92
+ logger.error('Active project not found on server.');
93
+ }
94
+ else {
95
+ logger.error(`Server responded with status ${response.status}`);
96
+ }
97
+ logger.blank();
98
+ process.exit(1);
99
+ }
100
+ const data = (await response.json());
101
+ const sprint = data.sprint;
102
+ logger.success(`Sprint created: ${chalk.cyan(sprint.name)}`);
103
+ logger.keyValue('ID', chalk.cyan(sprint.id.slice(0, 8)));
104
+ logger.keyValue('Status', chalk.gray(sprint.status));
105
+ logger.info(`Activate with: ${chalk.cyan(`cam sprint activate ${sprint.id.slice(0, 8)}`)}`);
106
+ }
107
+ catch {
108
+ logger.error('Server is not running.');
109
+ logger.info(`Start with: ${chalk.cyan('cam start')}`);
110
+ }
111
+ logger.blank();
112
+ });
113
+ const statusCommand = new Command('status')
114
+ .description('Show current sprint progress')
115
+ .action(async () => {
116
+ const projectId = requireActiveProject();
117
+ logger.blank();
118
+ try {
119
+ // Get sprints to find the active one
120
+ const sprintsResponse = await fetch(`${getApiBase()}/api/projects/${projectId}/sprints`);
121
+ if (!sprintsResponse.ok) {
122
+ logger.error(`Server responded with status ${sprintsResponse.status}`);
123
+ logger.blank();
124
+ process.exit(1);
125
+ }
126
+ const sprintsData = (await sprintsResponse.json());
127
+ const activeSprint = sprintsData.sprints.find((s) => s.status === 'active');
128
+ if (!activeSprint) {
129
+ logger.info('No active sprint found.');
130
+ logger.info(`Activate one with: ${chalk.cyan('cam sprint activate <id>')}`);
131
+ logger.blank();
132
+ return;
133
+ }
134
+ // Get tasks for the active sprint
135
+ const tasksResponse = await fetch(`${getApiBase()}/api/projects/${projectId}/tasks?sprint_id=${activeSprint.id}`);
136
+ let summary = {
137
+ total: 0,
138
+ backlog: 0,
139
+ planned: 0,
140
+ pending: 0,
141
+ in_progress: 0,
142
+ in_review: 0,
143
+ completed: 0,
144
+ blocked: 0,
145
+ deferred: 0,
146
+ };
147
+ if (tasksResponse.ok) {
148
+ const tasksData = (await tasksResponse.json());
149
+ summary = tasksData.summary;
150
+ }
151
+ const percent = activeSprint.totalTasks > 0
152
+ ? Math.round((activeSprint.completedTasks / activeSprint.totalTasks) * 100)
153
+ : 0;
154
+ logger.section(`Sprint: ${activeSprint.name}`);
155
+ logger.keyValue('Status', chalk.green(activeSprint.status));
156
+ logger.keyValue('Progress', `[${renderProgressBar(percent)}] ${percent}% (${activeSprint.completedTasks}/${activeSprint.totalTasks} tasks)`);
157
+ logger.blank();
158
+ // Status breakdown
159
+ const statuses = [
160
+ { label: 'completed', value: summary.completed, color: chalk.green },
161
+ { label: 'in_progress', value: summary.in_progress, color: chalk.yellow },
162
+ { label: 'in_review', value: summary.in_review, color: chalk.cyan },
163
+ { label: 'pending', value: summary.pending, color: chalk.gray },
164
+ { label: 'planned', value: summary.planned, color: chalk.blue },
165
+ { label: 'blocked', value: summary.blocked, color: chalk.red },
166
+ ];
167
+ for (const status of statuses) {
168
+ if (status.value > 0) {
169
+ logger.keyValue(` ${status.label}`, status.color(String(status.value)));
170
+ }
171
+ }
172
+ }
173
+ catch {
174
+ logger.error('Server is not running.');
175
+ logger.info(`Start with: ${chalk.cyan('cam start')}`);
176
+ }
177
+ logger.blank();
178
+ });
179
+ const activateCommand = new Command('activate')
180
+ .description('Activate a sprint')
181
+ .argument('<id>', 'Sprint ID to activate')
182
+ .action(async (sprintId) => {
183
+ const projectId = requireActiveProject();
184
+ logger.blank();
185
+ try {
186
+ const response = await fetch(`${getApiBase()}/api/projects/${projectId}/sprints/${sprintId}`, {
187
+ method: 'PATCH',
188
+ headers: { 'Content-Type': 'application/json' },
189
+ body: JSON.stringify({ status: 'active' }),
190
+ });
191
+ if (!response.ok) {
192
+ if (response.status === 404) {
193
+ logger.error(`Sprint not found: ${sprintId}`);
194
+ }
195
+ else {
196
+ logger.error(`Server responded with status ${response.status}`);
197
+ }
198
+ logger.blank();
199
+ process.exit(1);
200
+ }
201
+ const data = (await response.json());
202
+ logger.success(`Sprint activated: ${chalk.cyan(data.sprint.name)}`);
203
+ logger.keyValue('ID', chalk.cyan(data.sprint.id.slice(0, 8)));
204
+ }
205
+ catch {
206
+ logger.error('Server is not running.');
207
+ logger.info(`Start with: ${chalk.cyan('cam start')}`);
208
+ }
209
+ logger.blank();
210
+ });
211
+ const addCommand = new Command('add')
212
+ .description('Add a new sprint (alias for create)')
213
+ .argument('<name>', 'Sprint name')
214
+ .action(async (name) => {
215
+ const projectId = requireActiveProject();
216
+ logger.blank();
217
+ try {
218
+ const response = await fetch(`${getApiBase()}/api/projects/${projectId}/sprints`, {
219
+ method: 'POST',
220
+ headers: { 'Content-Type': 'application/json' },
221
+ body: JSON.stringify({ name }),
222
+ });
223
+ if (!response.ok) {
224
+ if (response.status === 404) {
225
+ logger.error('Active project not found on server.');
226
+ }
227
+ else {
228
+ logger.error(`Server responded with status ${response.status}`);
229
+ }
230
+ logger.blank();
231
+ process.exit(1);
232
+ }
233
+ const data = (await response.json());
234
+ const sprint = data.sprint;
235
+ logger.success(`Sprint created: ${chalk.cyan(sprint.name)}`);
236
+ logger.keyValue('ID', chalk.cyan(sprint.id.slice(0, 8)));
237
+ logger.keyValue('Status', chalk.gray(sprint.status));
238
+ logger.info(`Activate with: ${chalk.cyan(`cam sprint activate ${sprint.id.slice(0, 8)}`)}`);
239
+ }
240
+ catch {
241
+ logger.error('Server is not running.');
242
+ logger.info(`Start with: ${chalk.cyan('cam start')}`);
243
+ }
244
+ logger.blank();
245
+ });
246
+ const importCommand = new Command('import')
247
+ .description('Import tasks from a sprint markdown file')
248
+ .argument('<file>', 'Path to sprint markdown file')
249
+ .option('--sprint-id <id>', 'Assign tasks to an existing sprint ID')
250
+ .action(async (file, options) => {
251
+ const projectId = requireActiveProject();
252
+ logger.blank();
253
+ // Resolve and validate file path
254
+ const filePath = resolve(process.cwd(), file);
255
+ if (!existsSync(filePath)) {
256
+ logger.error(`File not found: ${chalk.cyan(filePath)}`);
257
+ logger.blank();
258
+ process.exit(1);
259
+ }
260
+ // Read and parse the markdown file
261
+ const content = readFileSync(filePath, 'utf-8');
262
+ const parsed = parseSprintMarkdown(content);
263
+ if (parsed.tasks.length === 0) {
264
+ logger.warning('No tasks found in the markdown file.');
265
+ logger.info('Make sure tasks use the format: - [ ] Task title');
266
+ logger.blank();
267
+ return;
268
+ }
269
+ logger.section(`Importing: ${parsed.name || file}`);
270
+ logger.info(`Found ${chalk.cyan(String(parsed.tasks.length))} task(s)`);
271
+ logger.blank();
272
+ try {
273
+ // Step 1: Create sprint if needed (unless --sprint-id provided)
274
+ let sprintId = options.sprintId;
275
+ if (!sprintId && parsed.name) {
276
+ // Check if sprint with this name already exists
277
+ const sprintsResponse = await fetch(`${getApiBase()}/api/projects/${projectId}/sprints`);
278
+ if (sprintsResponse.ok) {
279
+ const sprintsData = (await sprintsResponse.json());
280
+ const existing = sprintsData.sprints.find((s) => s.name.toLowerCase() === parsed.name.toLowerCase());
281
+ if (existing) {
282
+ sprintId = existing.id;
283
+ logger.info(`Using existing sprint: ${chalk.cyan(existing.name)} (${existing.id.slice(0, 8)})`);
284
+ }
285
+ }
286
+ if (!sprintId) {
287
+ const createResponse = await fetch(`${getApiBase()}/api/projects/${projectId}/sprints`, {
288
+ method: 'POST',
289
+ headers: { 'Content-Type': 'application/json' },
290
+ body: JSON.stringify({ name: parsed.name }),
291
+ });
292
+ if (createResponse.ok) {
293
+ const createData = (await createResponse.json());
294
+ sprintId = createData.sprint.id;
295
+ logger.success(`Sprint created: ${chalk.cyan(createData.sprint.name)} (${sprintId.slice(0, 8)})`);
296
+ }
297
+ else {
298
+ logger.warning('Could not create sprint. Tasks will be imported without sprint assignment.');
299
+ }
300
+ }
301
+ }
302
+ // Step 2: Fetch existing tasks for idempotency check
303
+ const existingTitles = new Set();
304
+ if (sprintId) {
305
+ const existingResponse = await fetch(`${getApiBase()}/api/projects/${projectId}/tasks?sprint_id=${sprintId}`);
306
+ if (existingResponse.ok) {
307
+ const existingData = (await existingResponse.json());
308
+ for (const t of existingData.tasks) {
309
+ existingTitles.add(t.title.toLowerCase().trim());
310
+ }
311
+ if (existingTitles.size > 0) {
312
+ logger.info(`Found ${chalk.cyan(String(existingTitles.size))} existing task(s) in sprint`);
313
+ }
314
+ }
315
+ }
316
+ // Step 3: Import tasks (skip duplicates)
317
+ let imported = 0;
318
+ let skipped = 0;
319
+ let failed = 0;
320
+ for (const task of parsed.tasks) {
321
+ // Idempotency: skip tasks that already exist by title
322
+ if (existingTitles.has(task.title.toLowerCase().trim())) {
323
+ skipped++;
324
+ logger.info(`Skipped (already exists): ${chalk.gray(task.title)}`);
325
+ continue;
326
+ }
327
+ const taskStatus = task.completed ? 'completed' : 'planned';
328
+ const body = {
329
+ title: task.title,
330
+ description: task.description || '',
331
+ status: taskStatus,
332
+ priority: task.priority,
333
+ prd_section: parsed.name || undefined,
334
+ prd_subsection: task.section || undefined,
335
+ };
336
+ if (task.tags.length > 0) {
337
+ body['tags'] = task.tags;
338
+ }
339
+ if (sprintId) {
340
+ body['sprint_id'] = sprintId;
341
+ }
342
+ const response = await fetch(`${getApiBase()}/api/projects/${projectId}/tasks`, {
343
+ method: 'POST',
344
+ headers: { 'Content-Type': 'application/json' },
345
+ body: JSON.stringify(body),
346
+ });
347
+ if (response.ok) {
348
+ const data = (await response.json());
349
+ imported++;
350
+ const statusIcon = task.completed ? chalk.green('[x]') : chalk.gray('[ ]');
351
+ logger.item(`${statusIcon} ${data.task.title}`);
352
+ }
353
+ else {
354
+ failed++;
355
+ logger.warning(`Failed: ${task.title}`);
356
+ }
357
+ }
358
+ logger.blank();
359
+ logger.success(`Imported ${chalk.cyan(String(imported))} new task(s)`);
360
+ if (skipped > 0) {
361
+ logger.info(`Skipped ${chalk.cyan(String(skipped))} existing task(s)`);
362
+ }
363
+ if (failed > 0) {
364
+ logger.warning(`Failed ${chalk.cyan(String(failed))} task(s)`);
365
+ }
366
+ }
367
+ catch {
368
+ logger.error('Server is not running.');
369
+ logger.info(`Start with: ${chalk.cyan('cam start')}`);
370
+ }
371
+ logger.blank();
372
+ });
373
+ const syncCommand = new Command('sync')
374
+ .description('Sync all sprint files from docs/SPRINTS/ to the database')
375
+ .option('--dir <path>', 'Directory containing sprint files', 'docs/SPRINTS')
376
+ .action(async (options) => {
377
+ const projectId = requireActiveProject();
378
+ logger.blank();
379
+ logger.section('Sprint Sync');
380
+ logger.blank();
381
+ // Resolve directory
382
+ const sprintsDir = resolve(process.cwd(), options.dir);
383
+ if (!existsSync(sprintsDir)) {
384
+ logger.error(`Directory not found: ${chalk.cyan(sprintsDir)}`);
385
+ logger.info(`Run ${chalk.cyan('cam init')} to create the sprint structure.`);
386
+ logger.blank();
387
+ process.exit(1);
388
+ }
389
+ // Find sprint files (sprint-*.md, excluding TEMPLATE.md and README.md)
390
+ const files = readdirSync(sprintsDir)
391
+ .filter((f) => /^sprint-\d+.*\.md$/i.test(f))
392
+ .sort((a, b) => {
393
+ // Natural sort: sprint-01 < sprint-02 < sprint-10
394
+ const numA = parseInt(a.match(/sprint-(\d+)/i)?.[1] ?? '0', 10);
395
+ const numB = parseInt(b.match(/sprint-(\d+)/i)?.[1] ?? '0', 10);
396
+ return numA - numB;
397
+ });
398
+ if (files.length === 0) {
399
+ logger.info('No sprint files found.');
400
+ logger.info(`Create sprint files in ${chalk.cyan(options.dir)} following the template.`);
401
+ logger.blank();
402
+ return;
403
+ }
404
+ logger.info(`Found ${chalk.cyan(String(files.length))} sprint file(s)`);
405
+ logger.blank();
406
+ // Fetch existing sprints from DB
407
+ let existingSprints = [];
408
+ try {
409
+ const response = await fetch(`${getApiBase()}/api/projects/${projectId}/sprints`);
410
+ if (response.ok) {
411
+ const data = (await response.json());
412
+ existingSprints = data.sprints;
413
+ }
414
+ }
415
+ catch {
416
+ logger.error('Server is not running.');
417
+ logger.info(`Start with: ${chalk.cyan('cam start')}`);
418
+ logger.blank();
419
+ process.exit(1);
420
+ }
421
+ let totalImported = 0;
422
+ let totalSkipped = 0;
423
+ let totalFailed = 0;
424
+ let sprintsCreated = 0;
425
+ let sprintsSynced = 0;
426
+ for (const file of files) {
427
+ const filePath = resolve(sprintsDir, file);
428
+ const content = readFileSync(filePath, 'utf-8');
429
+ const parsed = parseSprintMarkdown(content);
430
+ if (parsed.tasks.length === 0) {
431
+ logger.info(`${chalk.gray(file)}: no tasks found, skipping`);
432
+ continue;
433
+ }
434
+ // Find or create sprint
435
+ let sprintId;
436
+ const existing = existingSprints.find((s) => s.name.toLowerCase() === parsed.name.toLowerCase());
437
+ if (existing) {
438
+ sprintId = existing.id;
439
+ }
440
+ else if (parsed.name) {
441
+ // Create new sprint
442
+ try {
443
+ const createResponse = await fetch(`${getApiBase()}/api/projects/${projectId}/sprints`, {
444
+ method: 'POST',
445
+ headers: { 'Content-Type': 'application/json' },
446
+ body: JSON.stringify({ name: parsed.name }),
447
+ });
448
+ if (createResponse.ok) {
449
+ const createData = (await createResponse.json());
450
+ sprintId = createData.sprint.id;
451
+ existingSprints.push(createData.sprint); // Track for subsequent files
452
+ sprintsCreated++;
453
+ }
454
+ }
455
+ catch {
456
+ logger.warning(`Failed to create sprint for ${file}`);
457
+ continue;
458
+ }
459
+ }
460
+ // Fetch existing tasks for this sprint (idempotency)
461
+ const existingTitles = new Set();
462
+ if (sprintId) {
463
+ try {
464
+ const tasksResponse = await fetch(`${getApiBase()}/api/projects/${projectId}/tasks?sprint_id=${sprintId}`);
465
+ if (tasksResponse.ok) {
466
+ const tasksData = (await tasksResponse.json());
467
+ for (const t of tasksData.tasks) {
468
+ existingTitles.add(t.title.toLowerCase().trim());
469
+ }
470
+ }
471
+ }
472
+ catch {
473
+ // Continue without idempotency check
474
+ }
475
+ }
476
+ // Import tasks
477
+ let fileImported = 0;
478
+ let fileSkipped = 0;
479
+ let fileFailed = 0;
480
+ for (const task of parsed.tasks) {
481
+ if (existingTitles.has(task.title.toLowerCase().trim())) {
482
+ fileSkipped++;
483
+ continue;
484
+ }
485
+ const taskStatus = task.completed ? 'completed' : 'planned';
486
+ const body = {
487
+ title: task.title,
488
+ description: task.description || '',
489
+ status: taskStatus,
490
+ priority: task.priority,
491
+ prd_section: parsed.name || undefined,
492
+ prd_subsection: task.section || undefined,
493
+ };
494
+ if (task.tags.length > 0) {
495
+ body['tags'] = task.tags;
496
+ }
497
+ if (sprintId) {
498
+ body['sprint_id'] = sprintId;
499
+ }
500
+ try {
501
+ const response = await fetch(`${getApiBase()}/api/projects/${projectId}/tasks`, {
502
+ method: 'POST',
503
+ headers: { 'Content-Type': 'application/json' },
504
+ body: JSON.stringify(body),
505
+ });
506
+ if (response.ok) {
507
+ fileImported++;
508
+ }
509
+ else {
510
+ fileFailed++;
511
+ }
512
+ }
513
+ catch {
514
+ fileFailed++;
515
+ }
516
+ }
517
+ totalImported += fileImported;
518
+ totalSkipped += fileSkipped;
519
+ totalFailed += fileFailed;
520
+ sprintsSynced++;
521
+ // Log per-file summary
522
+ const statusIcon = fileImported > 0 ? chalk.green('\u2713') : chalk.gray('\u2013');
523
+ const parts = [];
524
+ if (fileImported > 0)
525
+ parts.push(chalk.green(`${fileImported} imported`));
526
+ if (fileSkipped > 0)
527
+ parts.push(chalk.gray(`${fileSkipped} existing`));
528
+ if (fileFailed > 0)
529
+ parts.push(chalk.red(`${fileFailed} failed`));
530
+ logger.item(`${statusIcon} ${chalk.white(file)}: ${parts.join(', ')}`);
531
+ }
532
+ // Summary
533
+ logger.blank();
534
+ if (sprintsCreated > 0) {
535
+ logger.success(`Created ${chalk.cyan(String(sprintsCreated))} new sprint(s)`);
536
+ }
537
+ logger.success(`Synced ${chalk.cyan(String(sprintsSynced))} sprint file(s): ${chalk.green(String(totalImported))} imported, ${chalk.gray(String(totalSkipped))} existing`);
538
+ if (totalFailed > 0) {
539
+ logger.warning(`${totalFailed} task(s) failed`);
540
+ }
541
+ logger.blank();
542
+ });
543
+ export const sprintCommand = new Command('sprint')
544
+ .description('Manage project sprints');
545
+ sprintCommand.addCommand(listCommand);
546
+ sprintCommand.addCommand(createCommand);
547
+ sprintCommand.addCommand(addCommand);
548
+ sprintCommand.addCommand(statusCommand);
549
+ sprintCommand.addCommand(activateCommand);
550
+ sprintCommand.addCommand(importCommand);
551
+ sprintCommand.addCommand(syncCommand);
552
+ //# sourceMappingURL=sprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprint.js","sourceRoot":"","sources":["../../src/commands/sprint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const startCommand: Command;
3
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,YAAY,SAkLtB,CAAC"}