@ginkoai/cli 2.0.6 → 2.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 (149) hide show
  1. package/dist/commands/epic/index.d.ts +29 -0
  2. package/dist/commands/epic/index.d.ts.map +1 -0
  3. package/dist/commands/epic/index.js +94 -0
  4. package/dist/commands/epic/index.js.map +1 -0
  5. package/dist/commands/epic/status.d.ts +40 -0
  6. package/dist/commands/epic/status.d.ts.map +1 -0
  7. package/dist/commands/epic/status.js +244 -0
  8. package/dist/commands/epic/status.js.map +1 -0
  9. package/dist/commands/graph/api-client.d.ts +221 -1
  10. package/dist/commands/graph/api-client.d.ts.map +1 -1
  11. package/dist/commands/graph/api-client.js +141 -2
  12. package/dist/commands/graph/api-client.js.map +1 -1
  13. package/dist/commands/graph/load.d.ts.map +1 -1
  14. package/dist/commands/graph/load.js +40 -2
  15. package/dist/commands/graph/load.js.map +1 -1
  16. package/dist/commands/handoff.d.ts +3 -3
  17. package/dist/commands/handoff.d.ts.map +1 -1
  18. package/dist/commands/handoff.js +32 -3
  19. package/dist/commands/handoff.js.map +1 -1
  20. package/dist/commands/migrate/index.d.ts +27 -0
  21. package/dist/commands/migrate/index.d.ts.map +1 -0
  22. package/dist/commands/migrate/index.js +76 -0
  23. package/dist/commands/migrate/index.js.map +1 -0
  24. package/dist/commands/migrate/status-migration.d.ts +58 -0
  25. package/dist/commands/migrate/status-migration.d.ts.map +1 -0
  26. package/dist/commands/migrate/status-migration.js +323 -0
  27. package/dist/commands/migrate/status-migration.js.map +1 -0
  28. package/dist/commands/nudging/index.d.ts +24 -0
  29. package/dist/commands/nudging/index.d.ts.map +1 -0
  30. package/dist/commands/nudging/index.js +175 -0
  31. package/dist/commands/nudging/index.js.map +1 -0
  32. package/dist/commands/sprint/create.d.ts +26 -0
  33. package/dist/commands/sprint/create.d.ts.map +1 -0
  34. package/dist/commands/sprint/create.js +269 -0
  35. package/dist/commands/sprint/create.js.map +1 -0
  36. package/dist/commands/sprint/index.d.ts.map +1 -1
  37. package/dist/commands/sprint/index.js +28 -0
  38. package/dist/commands/sprint/index.js.map +1 -1
  39. package/dist/commands/sprint/quick-fix.d.ts +25 -0
  40. package/dist/commands/sprint/quick-fix.d.ts.map +1 -0
  41. package/dist/commands/sprint/quick-fix.js +151 -0
  42. package/dist/commands/sprint/quick-fix.js.map +1 -0
  43. package/dist/commands/sprint/sprint-pipeline-enhanced.d.ts.map +1 -1
  44. package/dist/commands/sprint/sprint-pipeline-enhanced.js +37 -0
  45. package/dist/commands/sprint/sprint-pipeline-enhanced.js.map +1 -1
  46. package/dist/commands/sprint/status.d.ts +42 -0
  47. package/dist/commands/sprint/status.d.ts.map +1 -0
  48. package/dist/commands/sprint/status.js +298 -0
  49. package/dist/commands/sprint/status.js.map +1 -0
  50. package/dist/commands/start/start-reflection.d.ts +53 -0
  51. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  52. package/dist/commands/start/start-reflection.js +464 -71
  53. package/dist/commands/start/start-reflection.js.map +1 -1
  54. package/dist/commands/sync/sprint-syncer.d.ts +19 -12
  55. package/dist/commands/sync/sprint-syncer.d.ts.map +1 -1
  56. package/dist/commands/sync/sprint-syncer.js +58 -140
  57. package/dist/commands/sync/sprint-syncer.js.map +1 -1
  58. package/dist/commands/sync/sync-command.d.ts.map +1 -1
  59. package/dist/commands/sync/sync-command.js +6 -18
  60. package/dist/commands/sync/sync-command.js.map +1 -1
  61. package/dist/commands/task/index.d.ts +25 -0
  62. package/dist/commands/task/index.d.ts.map +1 -0
  63. package/dist/commands/task/index.js +100 -0
  64. package/dist/commands/task/index.js.map +1 -0
  65. package/dist/commands/task/status.d.ts +46 -0
  66. package/dist/commands/task/status.d.ts.map +1 -0
  67. package/dist/commands/task/status.js +348 -0
  68. package/dist/commands/task/status.js.map +1 -0
  69. package/dist/commands/team/index.d.ts +5 -0
  70. package/dist/commands/team/index.d.ts.map +1 -1
  71. package/dist/commands/team/index.js +28 -0
  72. package/dist/commands/team/index.js.map +1 -1
  73. package/dist/commands/team/status.d.ts +16 -0
  74. package/dist/commands/team/status.d.ts.map +1 -0
  75. package/dist/commands/team/status.js +180 -0
  76. package/dist/commands/team/status.js.map +1 -0
  77. package/dist/index.js +21 -32
  78. package/dist/index.js.map +1 -1
  79. package/dist/lib/adoption-score.d.ts +69 -0
  80. package/dist/lib/adoption-score.d.ts.map +1 -0
  81. package/dist/lib/adoption-score.js +206 -0
  82. package/dist/lib/adoption-score.js.map +1 -0
  83. package/dist/lib/coaching-level.d.ts +127 -0
  84. package/dist/lib/coaching-level.d.ts.map +1 -0
  85. package/dist/lib/coaching-level.js +406 -0
  86. package/dist/lib/coaching-level.js.map +1 -0
  87. package/dist/lib/context-loader-events.d.ts.map +1 -1
  88. package/dist/lib/context-loader-events.js +7 -26
  89. package/dist/lib/context-loader-events.js.map +1 -1
  90. package/dist/lib/event-logger.d.ts +42 -0
  91. package/dist/lib/event-logger.d.ts.map +1 -1
  92. package/dist/lib/event-logger.js +77 -0
  93. package/dist/lib/event-logger.js.map +1 -1
  94. package/dist/lib/output-formatter.d.ts +8 -2
  95. package/dist/lib/output-formatter.d.ts.map +1 -1
  96. package/dist/lib/output-formatter.js +98 -18
  97. package/dist/lib/output-formatter.js.map +1 -1
  98. package/dist/lib/pending-updates.d.ts +148 -0
  99. package/dist/lib/pending-updates.d.ts.map +1 -0
  100. package/dist/lib/pending-updates.js +301 -0
  101. package/dist/lib/pending-updates.js.map +1 -0
  102. package/dist/lib/planning-menu.d.ts +69 -0
  103. package/dist/lib/planning-menu.d.ts.map +1 -0
  104. package/dist/lib/planning-menu.js +342 -0
  105. package/dist/lib/planning-menu.js.map +1 -0
  106. package/dist/lib/sprint-loader.d.ts +86 -14
  107. package/dist/lib/sprint-loader.d.ts.map +1 -1
  108. package/dist/lib/sprint-loader.js +293 -98
  109. package/dist/lib/sprint-loader.js.map +1 -1
  110. package/dist/lib/state-cache.d.ts +142 -0
  111. package/dist/lib/state-cache.d.ts.map +1 -0
  112. package/dist/lib/state-cache.js +259 -0
  113. package/dist/lib/state-cache.js.map +1 -0
  114. package/dist/lib/targeted-coaching.d.ts +71 -0
  115. package/dist/lib/targeted-coaching.d.ts.map +1 -0
  116. package/dist/lib/targeted-coaching.js +318 -0
  117. package/dist/lib/targeted-coaching.js.map +1 -0
  118. package/dist/lib/task-graph-sync.d.ts +105 -0
  119. package/dist/lib/task-graph-sync.d.ts.map +1 -0
  120. package/dist/lib/task-graph-sync.js +178 -0
  121. package/dist/lib/task-graph-sync.js.map +1 -0
  122. package/dist/lib/task-parser.d.ts +109 -0
  123. package/dist/lib/task-parser.d.ts.map +1 -0
  124. package/dist/lib/task-parser.js +407 -0
  125. package/dist/lib/task-parser.js.map +1 -0
  126. package/dist/lib/user-sprint.d.ts +53 -0
  127. package/dist/lib/user-sprint.d.ts.map +1 -1
  128. package/dist/lib/user-sprint.js +137 -2
  129. package/dist/lib/user-sprint.js.map +1 -1
  130. package/dist/lib/work-reconciliation.d.ts +59 -0
  131. package/dist/lib/work-reconciliation.d.ts.map +1 -0
  132. package/dist/lib/work-reconciliation.js +267 -0
  133. package/dist/lib/work-reconciliation.js.map +1 -0
  134. package/dist/templates/ai-instructions-template.d.ts.map +1 -1
  135. package/dist/templates/ai-instructions-template.js +7 -5
  136. package/dist/templates/ai-instructions-template.js.map +1 -1
  137. package/dist/templates/epic-template.md +0 -2
  138. package/dist/types/config.d.ts.map +1 -1
  139. package/dist/types/config.js +7 -5
  140. package/dist/types/config.js.map +1 -1
  141. package/dist/utils/synthesis.d.ts +4 -0
  142. package/dist/utils/synthesis.d.ts.map +1 -1
  143. package/dist/utils/synthesis.js +12 -18
  144. package/dist/utils/synthesis.js.map +1 -1
  145. package/dist/utils/version-check.d.ts +26 -0
  146. package/dist/utils/version-check.d.ts.map +1 -0
  147. package/dist/utils/version-check.js +186 -0
  148. package/dist/utils/version-check.js.map +1 -0
  149. package/package.json +2 -2
@@ -0,0 +1,269 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2026-01-26
5
+ * @tags: [sprint, create, conversational, ai, epic-016-s04]
6
+ * @related: [index.ts, quick-fix.ts, ../../lib/planning-menu.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [prompts, chalk, ora, ai-service]
10
+ */
11
+ /**
12
+ * Conversational Sprint Creation (EPIC-016 Sprint 4 t03)
13
+ *
14
+ * Lightweight flow for creating feature sprints:
15
+ * 1. User describes what they're building
16
+ * 2. AI breaks down into tasks
17
+ * 3. User confirms or edits
18
+ * 4. Sprint created and assigned
19
+ */
20
+ import prompts from 'prompts';
21
+ import chalk from 'chalk';
22
+ import ora from 'ora';
23
+ import { getUserEmail } from '../../utils/helpers.js';
24
+ import { GraphApiClient } from '../graph/api-client.js';
25
+ import { getGraphId, isGraphInitialized } from '../graph/config.js';
26
+ import { setUserCurrentSprint, createAssignmentFromSprintId } from '../../lib/user-sprint.js';
27
+ // =============================================================================
28
+ // Sprint ID Generation
29
+ // =============================================================================
30
+ /**
31
+ * Generate the next ad-hoc sprint ID for today
32
+ * Format: adhoc_{YYMMDD}_s{NN}
33
+ */
34
+ async function generateNextAdhocSprintId(graphId) {
35
+ const today = new Date();
36
+ const dateStr = `${String(today.getFullYear()).slice(2)}${String(today.getMonth() + 1).padStart(2, '0')}${String(today.getDate()).padStart(2, '0')}`;
37
+ const client = new GraphApiClient();
38
+ try {
39
+ // Query existing sprints to find next sequence number
40
+ const response = await client.request('GET', `/api/v1/sprint/list?graphId=${encodeURIComponent(graphId)}&prefix=adhoc_${dateStr}`);
41
+ const todayPrefix = `adhoc_${dateStr}_s`;
42
+ const existingNumbers = (response.sprints || [])
43
+ .map(s => s.id)
44
+ .filter(id => id.startsWith(todayPrefix))
45
+ .map(id => parseInt(id.replace(todayPrefix, ''), 10))
46
+ .filter(n => !isNaN(n));
47
+ const nextNum = existingNumbers.length > 0 ? Math.max(...existingNumbers) + 1 : 1;
48
+ return `adhoc_${dateStr}_s${String(nextNum).padStart(2, '0')}`;
49
+ }
50
+ catch {
51
+ // Fallback to s01 if query fails
52
+ return `adhoc_${dateStr}_s01`;
53
+ }
54
+ }
55
+ // =============================================================================
56
+ // AI Task Breakdown
57
+ // =============================================================================
58
+ /**
59
+ * Use AI to break down a feature description into tasks
60
+ */
61
+ async function breakdownFeatureWithAI(description) {
62
+ try {
63
+ const { createAIService } = await import('../../services/ai-service.js');
64
+ const aiService = createAIService();
65
+ const prompt = `You are a software project manager. Given a feature description, break it down into 2-6 actionable tasks.
66
+
67
+ Feature: ${description}
68
+
69
+ Return JSON with this structure:
70
+ {
71
+ "name": "Sprint name (3-5 words, no quotes)",
72
+ "goal": "One sentence describing the sprint goal",
73
+ "tasks": [
74
+ { "title": "Task title (action-oriented)", "estimate": "2h", "priority": "HIGH" }
75
+ ]
76
+ }
77
+
78
+ Guidelines:
79
+ - Sprint name should be concise and descriptive
80
+ - Each task should be completable in 1-4 hours
81
+ - Use CRITICAL/HIGH/MEDIUM/LOW for priority
82
+ - First task should enable the core feature
83
+ - Include a testing/validation task
84
+ - Estimates should be realistic (1h, 2h, 3h, 4h)`;
85
+ const plan = await aiService.extractJSON(prompt);
86
+ return plan;
87
+ }
88
+ catch (error) {
89
+ console.error(chalk.dim('AI breakdown failed, using simple structure'));
90
+ return null;
91
+ }
92
+ }
93
+ /**
94
+ * Create a simple sprint plan without AI
95
+ */
96
+ function createSimpleSprintPlan(description) {
97
+ return {
98
+ name: description.slice(0, 50),
99
+ goal: description,
100
+ tasks: [
101
+ { title: 'Implement core functionality', estimate: '2h', priority: 'HIGH' },
102
+ { title: 'Test and validate', estimate: '1h', priority: 'MEDIUM' },
103
+ ]
104
+ };
105
+ }
106
+ // =============================================================================
107
+ // Sprint Markdown Generation
108
+ // =============================================================================
109
+ /**
110
+ * Generate sprint markdown compatible with sync API
111
+ */
112
+ function generateSprintMarkdown(sprintId, plan, userEmail) {
113
+ const today = new Date();
114
+ const endDate = new Date(today.getTime() + 14 * 24 * 60 * 60 * 1000);
115
+ const formatDate = (d) => d.toISOString().split('T')[0];
116
+ let markdown = `# SPRINT: ${plan.name}
117
+
118
+ ## Sprint Overview
119
+
120
+ **Sprint Goal**: ${plan.goal}
121
+ **Duration**: ${formatDate(today)} to ${formatDate(endDate)}
122
+ **Type**: Feature
123
+ **Progress:** 0% (0/${plan.tasks.length} tasks complete)
124
+ **ID:** \`${sprintId}\`
125
+
126
+ **Success Criteria:**
127
+ - Feature implemented and tested
128
+ - Code reviewed and merged
129
+
130
+ ---
131
+
132
+ ## Sprint Tasks
133
+
134
+ `;
135
+ plan.tasks.forEach((task, i) => {
136
+ const taskNum = String(i + 1).padStart(2, '0');
137
+ const taskId = `${sprintId}_t${taskNum}`;
138
+ markdown += `### ${taskId}: ${task.title} (${task.estimate})
139
+ **Status:** [ ] Not Started
140
+ **Priority:** ${task.priority}
141
+ **Owner:** ${userEmail}
142
+
143
+ **Goal:** ${task.title}
144
+
145
+ **Acceptance Criteria:**
146
+ - [ ] Implementation complete
147
+ - [ ] Tests passing
148
+
149
+ ---
150
+
151
+ `;
152
+ });
153
+ markdown += `## Related Documents
154
+
155
+ - **Epic**: Ad-Hoc Work
156
+
157
+ ---
158
+
159
+ **Sprint Status**: Active
160
+ **Start Date**: ${formatDate(today)}
161
+ **Created By**: ${userEmail}
162
+ `;
163
+ return markdown;
164
+ }
165
+ // =============================================================================
166
+ // Main Command
167
+ // =============================================================================
168
+ /**
169
+ * Create a new feature sprint (conversational flow)
170
+ */
171
+ export async function createSprintCommand(options = {}) {
172
+ // 1. Check prerequisites
173
+ if (!await isGraphInitialized()) {
174
+ console.log(chalk.yellow('Graph not initialized.'));
175
+ console.log(chalk.dim('Run `ginko graph init` to enable sprint tracking.'));
176
+ return { success: false, message: 'Graph not initialized' };
177
+ }
178
+ const graphId = await getGraphId();
179
+ if (!graphId) {
180
+ return { success: false, message: 'No graph ID found' };
181
+ }
182
+ // 2. Get feature description
183
+ const { description } = await prompts({
184
+ type: 'text',
185
+ name: 'description',
186
+ message: 'What are you building?',
187
+ validate: (value) => value.trim().length >= 10
188
+ ? true
189
+ : 'Please describe your feature in more detail (10+ chars)',
190
+ });
191
+ if (!description) {
192
+ return { success: false, message: 'Cancelled' };
193
+ }
194
+ // 3. Break down into tasks
195
+ const spinner = ora('Breaking down into tasks...').start();
196
+ let plan;
197
+ const aiPlan = await breakdownFeatureWithAI(description);
198
+ if (aiPlan) {
199
+ plan = aiPlan;
200
+ spinner.succeed('Tasks generated');
201
+ }
202
+ else {
203
+ plan = createSimpleSprintPlan(description);
204
+ spinner.info('Using simple task structure');
205
+ }
206
+ // 4. Display plan for confirmation
207
+ console.log('');
208
+ console.log(chalk.cyan('Sprint: ') + chalk.bold(plan.name));
209
+ console.log(chalk.dim('Goal: ') + plan.goal);
210
+ console.log('');
211
+ console.log(chalk.dim('Tasks:'));
212
+ plan.tasks.forEach((task, i) => {
213
+ console.log(chalk.dim(` ${i + 1}. ${task.title} (${task.estimate})`));
214
+ });
215
+ console.log('');
216
+ console.log(chalk.dim('This will be tracked under the Ad-Hoc Epic.'));
217
+ // 5. Confirm
218
+ const { action } = await prompts({
219
+ type: 'select',
220
+ name: 'action',
221
+ message: 'Look good?',
222
+ choices: [
223
+ { title: 'Yes, create it', value: 'yes' },
224
+ { title: 'Cancel', value: 'cancel' },
225
+ ],
226
+ });
227
+ if (action !== 'yes') {
228
+ console.log(chalk.dim('Cancelled.'));
229
+ return { success: false, message: 'Cancelled by user' };
230
+ }
231
+ // 6. Generate sprint ID and markdown
232
+ const createSpinner = ora('Creating sprint...').start();
233
+ const sprintId = await generateNextAdhocSprintId(graphId);
234
+ const userEmail = await getUserEmail();
235
+ const markdown = generateSprintMarkdown(sprintId, plan, userEmail);
236
+ // 7. Sync to graph
237
+ try {
238
+ const client = new GraphApiClient();
239
+ await client.request('POST', '/api/v1/sprint/sync', { graphId, sprintContent: markdown });
240
+ // 8. Auto-assign sprint to user
241
+ await setUserCurrentSprint(createAssignmentFromSprintId(sprintId, plan.name));
242
+ // 9. Start first task
243
+ const firstTaskId = `${sprintId}_t01`;
244
+ try {
245
+ await client.updateTaskStatus(graphId, firstTaskId, 'in_progress');
246
+ }
247
+ catch {
248
+ // Non-critical - task might not have been created yet
249
+ }
250
+ createSpinner.succeed('Sprint created');
251
+ console.log('');
252
+ console.log(chalk.green(`✓ Created sprint ${chalk.bold(sprintId)} with ${plan.tasks.length} tasks`));
253
+ console.log(chalk.cyan(` Starting task 1: ${plan.tasks[0].title}`));
254
+ return {
255
+ success: true,
256
+ sprintId,
257
+ taskCount: plan.tasks.length,
258
+ message: 'Sprint created successfully'
259
+ };
260
+ }
261
+ catch (error) {
262
+ createSpinner.fail('Failed to create sprint');
263
+ console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
264
+ return { success: false, message: 'Failed to sync sprint to graph' };
265
+ }
266
+ }
267
+ // Export for CLI registration
268
+ export default createSprintCommand;
269
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/sprint/create.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/sprint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGtF;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,GAAE,MAAW,EAAE,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB/F;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAiBvC;AAGD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,CAAC;AAClD,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/sprint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAOtF;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,GAAE,MAAW,EAAE,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB/F;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CA4CvC;AAGD,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,CAAC;AAClD,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,eAAe,aAAa,CAAC"}
@@ -12,6 +12,10 @@ import { Command } from 'commander';
12
12
  import { SprintPipeline } from './sprint-pipeline.js';
13
13
  import { EnhancedSprintPipeline } from './sprint-pipeline-enhanced.js';
14
14
  import { createDepsCommand } from './deps.js';
15
+ import { createSprintStatusCommands, addSprintStatusShortcuts } from './status.js';
16
+ // EPIC-016 Sprint 4: Conversational sprint creation
17
+ import { createSprintCommand as createSprintAction } from './create.js';
18
+ import { createQuickFixTask } from './quick-fix.js';
15
19
  /**
16
20
  * Sprint command router
17
21
  * Routes to enhanced pipeline by default (ADR-014 Safe Defaults)
@@ -52,6 +56,30 @@ export function sprintCommand() {
52
56
  .action((intent, options) => sprintCommandAction(intent, options));
53
57
  // Add subcommands (EPIC-004 Sprint 4)
54
58
  sprint.addCommand(createDepsCommand());
59
+ // Add status commands (EPIC-015 Sprint 1)
60
+ sprint.addCommand(createSprintStatusCommands());
61
+ addSprintStatusShortcuts(sprint);
62
+ // EPIC-016 Sprint 4: Conversational sprint creation (t03)
63
+ sprint
64
+ .command('create')
65
+ .description('Create a new feature sprint (conversational)')
66
+ .option('--adhoc', 'Link to Ad-Hoc epic (default: true)')
67
+ .option('--epic <epicId>', 'Link to specific epic')
68
+ .action(async (options) => {
69
+ await createSprintAction(options);
70
+ });
71
+ // EPIC-016 Sprint 4: Quick-fix fast path (t04)
72
+ sprint
73
+ .command('quick-fix <description>')
74
+ .alias('qf')
75
+ .description('Create a single-task sprint for a quick fix')
76
+ .action(async (description) => {
77
+ const result = await createQuickFixTask(description);
78
+ if (result.success) {
79
+ console.log(`✓ Created: ${result.taskId} - ${description}`);
80
+ console.log(' Run `ginko task complete` when done.');
81
+ }
82
+ });
55
83
  return sprint;
56
84
  }
57
85
  // Export both for direct usage
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/sprint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAiB,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,SAAiB,EAAE,EAAE,UAAe,EAAE;IAC9E,6CAA6C;IAC7C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,6CAA6C;IAC7C,MAAM,aAAa,GAAkB;QACnC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;QAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;QAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;KAChC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnE,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;SACjC,WAAW,CAAC,yCAAyC,CAAC;SACtD,QAAQ,CAAC,UAAU,EAAE,8BAA8B,CAAC;SACpD,MAAM,CAAC,SAAS,EAAE,oBAAoB,CAAC;SACvC,MAAM,CAAC,OAAO,EAAE,iCAAiC,CAAC;SAClD,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC;SACnC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC;SACjC,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC;SACpC,MAAM,CAAC,UAAU,EAAE,mBAAmB,CAAC;SACvC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAErE,sCAAsC;IACtC,MAAM,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEvC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+BAA+B;AAC/B,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,CAAC;AAGlD,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/sprint/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2026-01-26
5
+ * @tags: [sprint, quick-fix, single-task, epic-016-s04]
6
+ * @related: [index.ts, create.ts, ../../lib/planning-menu.ts]
7
+ * @priority: high
8
+ * @complexity: low
9
+ * @dependencies: [chalk, ora]
10
+ */
11
+ export interface QuickFixResult {
12
+ success: boolean;
13
+ taskId?: string;
14
+ sprintId?: string;
15
+ message?: string;
16
+ }
17
+ /**
18
+ * Create a quick-fix task with minimal ceremony
19
+ *
20
+ * @param description - One-line description of the fix
21
+ * @returns Result with task and sprint IDs
22
+ */
23
+ export declare function createQuickFixTask(description: string): Promise<QuickFixResult>;
24
+ export default createQuickFixTask;
25
+ //# sourceMappingURL=quick-fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick-fix.d.ts","sourceRoot":"","sources":["../../../src/commands/sprint/quick-fix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA2BH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAkGD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC,CA2DzB;AAGD,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2026-01-26
5
+ * @tags: [sprint, quick-fix, single-task, epic-016-s04]
6
+ * @related: [index.ts, create.ts, ../../lib/planning-menu.ts]
7
+ * @priority: high
8
+ * @complexity: low
9
+ * @dependencies: [chalk, ora]
10
+ */
11
+ import ora from 'ora';
12
+ import { getUserEmail } from '../../utils/helpers.js';
13
+ import { GraphApiClient } from '../graph/api-client.js';
14
+ import { getGraphId, isGraphInitialized } from '../graph/config.js';
15
+ import { setUserCurrentSprint, createAssignmentFromSprintId } from '../../lib/user-sprint.js';
16
+ // =============================================================================
17
+ // Sprint ID Generation
18
+ // =============================================================================
19
+ /**
20
+ * Generate the next ad-hoc sprint ID for today
21
+ * Format: adhoc_{YYMMDD}_s{NN}
22
+ */
23
+ async function generateNextAdhocSprintId(graphId) {
24
+ const today = new Date();
25
+ const dateStr = `${String(today.getFullYear()).slice(2)}${String(today.getMonth() + 1).padStart(2, '0')}${String(today.getDate()).padStart(2, '0')}`;
26
+ const client = new GraphApiClient();
27
+ try {
28
+ const response = await client.request('GET', `/api/v1/sprint/list?graphId=${encodeURIComponent(graphId)}&prefix=adhoc_${dateStr}`);
29
+ const todayPrefix = `adhoc_${dateStr}_s`;
30
+ const existingNumbers = (response.sprints || [])
31
+ .map(s => s.id)
32
+ .filter(id => id.startsWith(todayPrefix))
33
+ .map(id => parseInt(id.replace(todayPrefix, ''), 10))
34
+ .filter(n => !isNaN(n));
35
+ const nextNum = existingNumbers.length > 0 ? Math.max(...existingNumbers) + 1 : 1;
36
+ return `adhoc_${dateStr}_s${String(nextNum).padStart(2, '0')}`;
37
+ }
38
+ catch {
39
+ return `adhoc_${dateStr}_s01`;
40
+ }
41
+ }
42
+ // =============================================================================
43
+ // Sprint Markdown Generation
44
+ // =============================================================================
45
+ /**
46
+ * Generate minimal sprint markdown for a single task
47
+ */
48
+ function generateQuickFixMarkdown(sprintId, taskId, description, userEmail) {
49
+ const today = new Date();
50
+ const formatDate = (d) => d.toISOString().split('T')[0];
51
+ return `# SPRINT: Quick Fix - ${description.slice(0, 40)}
52
+
53
+ ## Sprint Overview
54
+
55
+ **Sprint Goal**: ${description}
56
+ **Duration**: ${formatDate(today)} (1 task)
57
+ **Type**: Bugfix
58
+ **Progress:** 0% (0/1 tasks complete)
59
+ **ID:** \`${sprintId}\`
60
+
61
+ **Success Criteria:**
62
+ - Fix implemented and verified
63
+
64
+ ---
65
+
66
+ ## Sprint Tasks
67
+
68
+ ### ${taskId}: ${description} (1h)
69
+ **Status:** [@] In Progress
70
+ **Priority:** HIGH
71
+ **Owner:** ${userEmail}
72
+
73
+ **Goal:** ${description}
74
+
75
+ **Acceptance Criteria:**
76
+ - [ ] Fix implemented
77
+ - [ ] Verified working
78
+
79
+ ---
80
+
81
+ ## Related Documents
82
+
83
+ - **Epic**: Ad-Hoc Work
84
+
85
+ ---
86
+
87
+ **Sprint Status**: Active
88
+ **Start Date**: ${formatDate(today)}
89
+ **Created By**: ${userEmail}
90
+ `;
91
+ }
92
+ // =============================================================================
93
+ // Main Function
94
+ // =============================================================================
95
+ /**
96
+ * Create a quick-fix task with minimal ceremony
97
+ *
98
+ * @param description - One-line description of the fix
99
+ * @returns Result with task and sprint IDs
100
+ */
101
+ export async function createQuickFixTask(description) {
102
+ // 1. Check prerequisites
103
+ if (!await isGraphInitialized()) {
104
+ return { success: false, message: 'Graph not initialized' };
105
+ }
106
+ const graphId = await getGraphId();
107
+ if (!graphId) {
108
+ return { success: false, message: 'No graph ID found' };
109
+ }
110
+ if (!description || description.trim().length < 5) {
111
+ return { success: false, message: 'Description too short' };
112
+ }
113
+ const spinner = ora('Creating quick-fix task...').start();
114
+ try {
115
+ // 2. Generate IDs
116
+ const sprintId = await generateNextAdhocSprintId(graphId);
117
+ const taskId = `${sprintId}_t01`;
118
+ const userEmail = await getUserEmail();
119
+ // 3. Generate markdown
120
+ const markdown = generateQuickFixMarkdown(sprintId, taskId, description.trim(), userEmail);
121
+ // 4. Sync to graph
122
+ const client = new GraphApiClient();
123
+ await client.request('POST', '/api/v1/sprint/sync', { graphId, sprintContent: markdown });
124
+ // 5. Auto-assign sprint
125
+ await setUserCurrentSprint(createAssignmentFromSprintId(sprintId, `Quick Fix: ${description.slice(0, 30)}`));
126
+ // 6. Start the task
127
+ try {
128
+ await client.updateTaskStatus(graphId, taskId, 'in_progress');
129
+ }
130
+ catch {
131
+ // Non-critical
132
+ }
133
+ spinner.succeed('Quick-fix task created');
134
+ return {
135
+ success: true,
136
+ taskId,
137
+ sprintId,
138
+ message: 'Quick-fix task created and started'
139
+ };
140
+ }
141
+ catch (error) {
142
+ spinner.fail('Failed to create quick-fix task');
143
+ return {
144
+ success: false,
145
+ message: error instanceof Error ? error.message : 'Unknown error'
146
+ };
147
+ }
148
+ }
149
+ // Export for CLI registration
150
+ export default createQuickFixTask;
151
+ //# sourceMappingURL=quick-fix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick-fix.js","sourceRoot":"","sources":["../../../src/commands/sprint/quick-fix.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sprint-pipeline-enhanced.d.ts","sourceRoot":"","sources":["../../../src/commands/sprint/sprint-pipeline-enhanced.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAmB,MAAM,oCAAoC,CAAC;AAOzF;;GAEG;AACH,MAAM,WAAW,aAAa;IAE5B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IAGjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAqCD;;;;;;;;GAQG;AACH,qBAAa,sBAAuB,SAAQ,kBAAkB;IAC5D,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAiB;gBAErB,MAAM,GAAE,MAA+B,EAAE,OAAO,GAAE,aAAkB;IAmChF;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCnC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAyDpC;;OAEG;IACH,eAAe,IAAI,IAAI;IAsMvB;;OAEG;IACH,eAAe,IAAI,IAAI;IA6BvB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC3B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IA+B9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+BzB;;OAEG;YACW,mBAAmB;IAqCjC;;OAEG;YACW,oBAAoB;IAmClC;;OAEG;YACW,kBAAkB;IA+BhC;;OAEG;YACW,oBAAoB;IA4BlC;;OAEG;YACW,eAAe;IAyB7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;YACW,YAAY;IAqB1B;;OAEG;YACW,WAAW;IAUzB;;OAEG;YACW,eAAe;IAU7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;YACW,eAAe;IAuB7B,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,SAAS;YAQH,iBAAiB;IAI/B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;YAMV,mBAAmB;IAejC;;OAEG;IACH,OAAO,CAAC,eAAe;CAYxB;AAED;;GAEG;AACH,qBAAa,+BAA+B;IAC1C,OAAO,CAAC,QAAQ,CAAyB;;IAMnC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBhE;AAED,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"sprint-pipeline-enhanced.d.ts","sourceRoot":"","sources":["../../../src/commands/sprint/sprint-pipeline-enhanced.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAmB,MAAM,oCAAoC,CAAC;AAOzF;;GAEG;AACH,MAAM,WAAW,aAAa;IAE5B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IAGjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAqCD;;;;;;;;GAQG;AACH,qBAAa,sBAAuB,SAAQ,kBAAkB;IAC5D,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAiB;gBAErB,MAAM,GAAE,MAA+B,EAAE,OAAO,GAAE,aAAkB;IAmChF;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCnC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAyDpC;;OAEG;IACH,eAAe,IAAI,IAAI;IA6OvB;;OAEG;IACH,eAAe,IAAI,IAAI;IA6BvB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC3B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IA+B9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+BzB;;OAEG;YACW,mBAAmB;IAqCjC;;OAEG;YACW,oBAAoB;IAmClC;;OAEG;YACW,kBAAkB;IA+BhC;;OAEG;YACW,oBAAoB;IA4BlC;;OAEG;YACW,eAAe;IAyB7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;YACW,YAAY;IAqB1B;;OAEG;YACW,WAAW;IAUzB;;OAEG;YACW,eAAe;IAU7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;YACW,eAAe;IAuB7B,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,SAAS;YAQH,iBAAiB;IAI/B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;YAMV,mBAAmB;IAejC;;OAEG;IACH,OAAO,CAAC,eAAe;CAYxB;AAED;;GAEG;AACH,qBAAa,+BAA+B;IAC1C,OAAO,CAAC,QAAQ,CAAyB;;IAMnC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBhE;AAED,eAAe,sBAAsB,CAAC"}
@@ -284,6 +284,43 @@ export class EnhancedSprintPipeline extends SimplePipelineBase {
284
284
  });
285
285
  }
286
286
  sections.push('');
287
+ // Auto-generated UAT Task (e014_s02_t06)
288
+ sections.push(`### UAT & Polish (Final Task)\n`);
289
+ sections.push(`**Goal:** Verify sprint deliverables and ensure production readiness\n`);
290
+ // Generate testing checklist derived from sprint scope
291
+ const totalItems = (context.parsedIntent?.requestedItems?.length || 0) +
292
+ (context.backlogItems?.userStories?.length || 0) +
293
+ (context.backlogItems?.tasks?.length || 0);
294
+ // Scale UAT complexity based on sprint size
295
+ if (totalItems <= 3) {
296
+ // Small sprint: brief UAT
297
+ sections.push(`**Acceptance Criteria:**`);
298
+ sections.push(`- [ ] All sprint tasks completed and working`);
299
+ sections.push(`- [ ] Build passes with no errors`);
300
+ sections.push(`- [ ] Quick manual verification of changes`);
301
+ }
302
+ else if (totalItems <= 7) {
303
+ // Medium sprint: standard UAT
304
+ sections.push(`**Acceptance Criteria:**`);
305
+ sections.push(`- [ ] All sprint tasks completed and working`);
306
+ sections.push(`- [ ] Build passes with no errors`);
307
+ sections.push(`- [ ] Unit tests pass for new code`);
308
+ sections.push(`- [ ] Manual verification of each feature`);
309
+ sections.push(`- [ ] Documentation updated if needed`);
310
+ }
311
+ else {
312
+ // Large sprint: detailed UAT
313
+ sections.push(`**Acceptance Criteria:**`);
314
+ sections.push(`- [ ] All sprint tasks completed and working`);
315
+ sections.push(`- [ ] Build passes with no errors or warnings`);
316
+ sections.push(`- [ ] Unit tests pass with adequate coverage`);
317
+ sections.push(`- [ ] Integration tests pass`);
318
+ sections.push(`- [ ] Manual verification of each feature`);
319
+ sections.push(`- [ ] Edge cases tested`);
320
+ sections.push(`- [ ] Documentation updated`);
321
+ sections.push(`- [ ] Performance acceptable`);
322
+ }
323
+ sections.push('');
287
324
  // Acceptance Criteria
288
325
  sections.push(`## ✅ Acceptance Criteria\n`);
289
326
  sections.push(`- [ ] All committed items completed`);