@ginkoai/cli 2.1.0 → 2.1.2

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 (92) hide show
  1. package/dist/commands/graph/api-client.d.ts +36 -1
  2. package/dist/commands/graph/api-client.d.ts.map +1 -1
  3. package/dist/commands/graph/api-client.js +32 -2
  4. package/dist/commands/graph/api-client.js.map +1 -1
  5. package/dist/commands/graph/config.d.ts +6 -1
  6. package/dist/commands/graph/config.d.ts.map +1 -1
  7. package/dist/commands/graph/config.js +9 -1
  8. package/dist/commands/graph/config.js.map +1 -1
  9. package/dist/commands/graph/init.d.ts +1 -1
  10. package/dist/commands/graph/init.d.ts.map +1 -1
  11. package/dist/commands/graph/init.js +17 -2
  12. package/dist/commands/graph/init.js.map +1 -1
  13. package/dist/commands/handoff.d.ts +3 -3
  14. package/dist/commands/handoff.d.ts.map +1 -1
  15. package/dist/commands/handoff.js +32 -3
  16. package/dist/commands/handoff.js.map +1 -1
  17. package/dist/commands/nudging/index.d.ts +24 -0
  18. package/dist/commands/nudging/index.d.ts.map +1 -0
  19. package/dist/commands/nudging/index.js +175 -0
  20. package/dist/commands/nudging/index.js.map +1 -0
  21. package/dist/commands/sprint/create.d.ts +26 -0
  22. package/dist/commands/sprint/create.d.ts.map +1 -0
  23. package/dist/commands/sprint/create.js +269 -0
  24. package/dist/commands/sprint/create.js.map +1 -0
  25. package/dist/commands/sprint/index.d.ts.map +1 -1
  26. package/dist/commands/sprint/index.js +24 -0
  27. package/dist/commands/sprint/index.js.map +1 -1
  28. package/dist/commands/sprint/quick-fix.d.ts +25 -0
  29. package/dist/commands/sprint/quick-fix.d.ts.map +1 -0
  30. package/dist/commands/sprint/quick-fix.js +151 -0
  31. package/dist/commands/sprint/quick-fix.js.map +1 -0
  32. package/dist/commands/sprint/sprint-pipeline-enhanced.d.ts.map +1 -1
  33. package/dist/commands/sprint/sprint-pipeline-enhanced.js +37 -0
  34. package/dist/commands/sprint/sprint-pipeline-enhanced.js.map +1 -1
  35. package/dist/commands/sprint/status.d.ts.map +1 -1
  36. package/dist/commands/sprint/status.js +21 -1
  37. package/dist/commands/sprint/status.js.map +1 -1
  38. package/dist/commands/start/start-reflection.d.ts +14 -0
  39. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  40. package/dist/commands/start/start-reflection.js +180 -9
  41. package/dist/commands/start/start-reflection.js.map +1 -1
  42. package/dist/commands/task/status.d.ts +3 -0
  43. package/dist/commands/task/status.d.ts.map +1 -1
  44. package/dist/commands/task/status.js +48 -1
  45. package/dist/commands/task/status.js.map +1 -1
  46. package/dist/commands/team/index.d.ts +5 -0
  47. package/dist/commands/team/index.d.ts.map +1 -1
  48. package/dist/commands/team/index.js +28 -0
  49. package/dist/commands/team/index.js.map +1 -1
  50. package/dist/commands/team/status.d.ts +16 -0
  51. package/dist/commands/team/status.d.ts.map +1 -0
  52. package/dist/commands/team/status.js +180 -0
  53. package/dist/commands/team/status.js.map +1 -0
  54. package/dist/index.js +10 -3
  55. package/dist/index.js.map +1 -1
  56. package/dist/lib/adoption-score.d.ts +69 -0
  57. package/dist/lib/adoption-score.d.ts.map +1 -0
  58. package/dist/lib/adoption-score.js +206 -0
  59. package/dist/lib/adoption-score.js.map +1 -0
  60. package/dist/lib/coaching-level.d.ts +127 -0
  61. package/dist/lib/coaching-level.d.ts.map +1 -0
  62. package/dist/lib/coaching-level.js +406 -0
  63. package/dist/lib/coaching-level.js.map +1 -0
  64. package/dist/lib/event-logger.d.ts +42 -0
  65. package/dist/lib/event-logger.d.ts.map +1 -1
  66. package/dist/lib/event-logger.js +77 -0
  67. package/dist/lib/event-logger.js.map +1 -1
  68. package/dist/lib/planning-menu.d.ts +69 -0
  69. package/dist/lib/planning-menu.d.ts.map +1 -0
  70. package/dist/lib/planning-menu.js +342 -0
  71. package/dist/lib/planning-menu.js.map +1 -0
  72. package/dist/lib/targeted-coaching.d.ts +71 -0
  73. package/dist/lib/targeted-coaching.d.ts.map +1 -0
  74. package/dist/lib/targeted-coaching.js +318 -0
  75. package/dist/lib/targeted-coaching.js.map +1 -0
  76. package/dist/lib/task-parser.d.ts +2 -0
  77. package/dist/lib/task-parser.d.ts.map +1 -1
  78. package/dist/lib/task-parser.js +23 -0
  79. package/dist/lib/task-parser.js.map +1 -1
  80. package/dist/lib/user-sprint.d.ts +53 -0
  81. package/dist/lib/user-sprint.d.ts.map +1 -1
  82. package/dist/lib/user-sprint.js +137 -2
  83. package/dist/lib/user-sprint.js.map +1 -1
  84. package/dist/lib/work-reconciliation.d.ts +59 -0
  85. package/dist/lib/work-reconciliation.d.ts.map +1 -0
  86. package/dist/lib/work-reconciliation.js +267 -0
  87. package/dist/lib/work-reconciliation.js.map +1 -0
  88. package/dist/utils/version-check.d.ts +26 -0
  89. package/dist/utils/version-check.d.ts.map +1 -0
  90. package/dist/utils/version-check.js +186 -0
  91. package/dist/utils/version-check.js.map +1 -0
  92. package/package.json +2 -2
@@ -0,0 +1,406 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2026-01-26
5
+ * @tags: [coaching, insights, adaptive, epic-016-s05]
6
+ * @related: [adoption-score.ts, planning-menu.ts, api-client.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [fs-extra, path]
10
+ */
11
+ /**
12
+ * Adaptive Coaching Level (EPIC-016 Sprint 5 Task 1)
13
+ *
14
+ * Coaching adapts to user's insight scores—more help when struggling, quieter when thriving.
15
+ *
16
+ * Score Thresholds (based on 7-day overall score):
17
+ * | Overall Score | Coaching Level | Behavior |
18
+ * |---------------|----------------|-----------------------------------|
19
+ * | ≥75 | Minimal | Brief prompts, assume competence |
20
+ * | 60-74 | Standard | Normal prompts with guidance |
21
+ * | <60 | Supportive | Detailed prompts, more examples |
22
+ *
23
+ * Data Flow:
24
+ * 1. Fetch insight scores from dashboard API at session start
25
+ * 2. Cache locally with 4-hour TTL
26
+ * 3. Fall back to local adoption score if offline
27
+ */
28
+ import fs from 'fs-extra';
29
+ import path from 'path';
30
+ import { getUserEmail, getGinkoDir } from '../utils/helpers.js';
31
+ import { getAdoptionScore } from './adoption-score.js';
32
+ // =============================================================================
33
+ // Constants
34
+ // =============================================================================
35
+ const CACHE_FILE = 'insights-cache.json';
36
+ const CONFIG_FILE = 'coaching-config.json';
37
+ const CACHE_TTL_HOURS = 4;
38
+ const CACHE_TTL_MS = CACHE_TTL_HOURS * 60 * 60 * 1000;
39
+ const LEVEL_THRESHOLDS = {
40
+ minimal: 75, // ≥75: assume competence
41
+ standard: 60, // 60-74: balanced guidance
42
+ // <60: supportive
43
+ };
44
+ // =============================================================================
45
+ // File Paths
46
+ // =============================================================================
47
+ async function getUserSessionDir() {
48
+ const ginkoDir = await getGinkoDir();
49
+ const userEmail = await getUserEmail();
50
+ const userSlug = userEmail.replace('@', '-at-').replace(/\./g, '-');
51
+ return path.join(ginkoDir, 'sessions', userSlug);
52
+ }
53
+ async function getCacheFilePath() {
54
+ const sessionDir = await getUserSessionDir();
55
+ return path.join(sessionDir, CACHE_FILE);
56
+ }
57
+ async function getConfigFilePath() {
58
+ const sessionDir = await getUserSessionDir();
59
+ return path.join(sessionDir, CONFIG_FILE);
60
+ }
61
+ // =============================================================================
62
+ // Cache Management
63
+ // =============================================================================
64
+ /**
65
+ * Load cached insight scores
66
+ */
67
+ async function loadCachedScores() {
68
+ const cachePath = await getCacheFilePath();
69
+ try {
70
+ if (await fs.pathExists(cachePath)) {
71
+ const data = await fs.readJSON(cachePath);
72
+ const fetchedAt = new Date(data.fetchedAt).getTime();
73
+ const now = Date.now();
74
+ // Check if cache is still valid
75
+ if (now - fetchedAt < CACHE_TTL_MS) {
76
+ return data;
77
+ }
78
+ }
79
+ }
80
+ catch {
81
+ // Cache corrupted or invalid
82
+ }
83
+ return null;
84
+ }
85
+ /**
86
+ * Save insight scores to cache
87
+ */
88
+ async function saveCachedScores(scores) {
89
+ const cachePath = await getCacheFilePath();
90
+ await fs.ensureDir(path.dirname(cachePath));
91
+ await fs.writeJSON(cachePath, scores, { spaces: 2 });
92
+ }
93
+ /**
94
+ * Get cache age in minutes
95
+ */
96
+ function getCacheAgeMinutes(fetchedAt) {
97
+ const fetchedTime = new Date(fetchedAt).getTime();
98
+ const now = Date.now();
99
+ return Math.round((now - fetchedTime) / (1000 * 60));
100
+ }
101
+ // =============================================================================
102
+ // Config Management
103
+ // =============================================================================
104
+ /**
105
+ * Load coaching config (manual overrides)
106
+ */
107
+ export async function loadCoachingConfig() {
108
+ const configPath = await getConfigFilePath();
109
+ try {
110
+ if (await fs.pathExists(configPath)) {
111
+ return await fs.readJSON(configPath);
112
+ }
113
+ }
114
+ catch {
115
+ // Config corrupted
116
+ }
117
+ return {
118
+ override: null,
119
+ overrideSetAt: null,
120
+ };
121
+ }
122
+ /**
123
+ * Save coaching config
124
+ */
125
+ export async function saveCoachingConfig(config) {
126
+ const configPath = await getConfigFilePath();
127
+ await fs.ensureDir(path.dirname(configPath));
128
+ await fs.writeJSON(configPath, config, { spaces: 2 });
129
+ }
130
+ /**
131
+ * Set manual coaching level override
132
+ */
133
+ export async function setCoachingOverride(level) {
134
+ const config = await loadCoachingConfig();
135
+ if (level === 'auto') {
136
+ config.override = null;
137
+ config.overrideSetAt = null;
138
+ }
139
+ else {
140
+ config.override = level;
141
+ config.overrideSetAt = new Date().toISOString();
142
+ }
143
+ await saveCoachingConfig(config);
144
+ }
145
+ // =============================================================================
146
+ // API Integration
147
+ // =============================================================================
148
+ /**
149
+ * Fetch insight scores from dashboard API
150
+ * Non-blocking with 2-second timeout
151
+ */
152
+ async function fetchInsightScores(graphId) {
153
+ // Import dynamically to avoid circular dependencies
154
+ const { GraphApiClient } = await import('../commands/graph/api-client.js');
155
+ const { isAuthenticated } = await import('../utils/auth-storage.js');
156
+ if (!await isAuthenticated()) {
157
+ return null;
158
+ }
159
+ const client = new GraphApiClient();
160
+ try {
161
+ // Use AbortController for timeout
162
+ const controller = new AbortController();
163
+ const timeoutId = setTimeout(() => controller.abort(), 2000);
164
+ const response = await client.request('GET', `/api/v1/insights/sync?graphId=${encodeURIComponent(graphId)}&days=7`);
165
+ clearTimeout(timeoutId);
166
+ if (response.report) {
167
+ const categoryMap = {};
168
+ for (const cat of response.report.categoryScores) {
169
+ categoryMap[cat.category] = cat.score;
170
+ }
171
+ const scores = {
172
+ overallScore: response.trendScores?.day7?.score ?? response.report.overallScore,
173
+ categoryScores: {
174
+ efficiency: categoryMap['efficiency'] ?? 70,
175
+ patterns: categoryMap['patterns'] ?? 70,
176
+ quality: categoryMap['quality'] ?? 70,
177
+ 'anti-patterns': categoryMap['anti-patterns'] ?? 70,
178
+ },
179
+ fetchedAt: new Date().toISOString(),
180
+ periodDays: 7,
181
+ };
182
+ await saveCachedScores(scores);
183
+ return scores;
184
+ }
185
+ }
186
+ catch {
187
+ // API unavailable - will use cache or fallback
188
+ }
189
+ return null;
190
+ }
191
+ // =============================================================================
192
+ // Level Calculation
193
+ // =============================================================================
194
+ /**
195
+ * Calculate coaching level from overall score
196
+ */
197
+ export function calculateCoachingLevel(score) {
198
+ if (score >= LEVEL_THRESHOLDS.minimal)
199
+ return 'minimal';
200
+ if (score >= LEVEL_THRESHOLDS.standard)
201
+ return 'standard';
202
+ return 'supportive';
203
+ }
204
+ /**
205
+ * Convert adoption QuietingLevel to CoachingLevel
206
+ */
207
+ function adoptionLevelToCoachingLevel(quieting) {
208
+ switch (quieting) {
209
+ case 'minimal':
210
+ return 'minimal';
211
+ case 'light':
212
+ return 'standard';
213
+ case 'full':
214
+ default:
215
+ return 'supportive';
216
+ }
217
+ }
218
+ /**
219
+ * Estimate score from adoption level for fallback
220
+ */
221
+ function adoptionLevelToScore(quieting) {
222
+ switch (quieting) {
223
+ case 'minimal':
224
+ return 80; // High adopters
225
+ case 'light':
226
+ return 68; // Medium adopters
227
+ case 'full':
228
+ default:
229
+ return 50; // New users
230
+ }
231
+ }
232
+ // =============================================================================
233
+ // Main Functions
234
+ // =============================================================================
235
+ /**
236
+ * Get coaching context for current session
237
+ *
238
+ * Priority:
239
+ * 1. Manual override (if set)
240
+ * 2. Dashboard insight scores (if available)
241
+ * 3. Cached scores (if within TTL)
242
+ * 4. Adoption score fallback (if offline)
243
+ */
244
+ export async function getCoachingContext(graphId) {
245
+ const config = await loadCoachingConfig();
246
+ // Try to get scores in order of preference
247
+ let scores = null;
248
+ let source = 'adoption_fallback';
249
+ let cacheAge;
250
+ // 1. Try fresh API fetch if we have graphId
251
+ if (graphId) {
252
+ scores = await fetchInsightScores(graphId);
253
+ if (scores) {
254
+ source = 'dashboard';
255
+ }
256
+ }
257
+ // 2. Fall back to cache
258
+ if (!scores) {
259
+ scores = await loadCachedScores();
260
+ if (scores) {
261
+ source = 'cache';
262
+ cacheAge = getCacheAgeMinutes(scores.fetchedAt);
263
+ }
264
+ }
265
+ // 3. Fall back to adoption score
266
+ if (!scores) {
267
+ const adoption = await getAdoptionScore();
268
+ const estimatedScore = adoptionLevelToScore(adoption.level);
269
+ scores = {
270
+ overallScore: estimatedScore,
271
+ categoryScores: {
272
+ efficiency: estimatedScore,
273
+ patterns: estimatedScore,
274
+ quality: estimatedScore,
275
+ 'anti-patterns': estimatedScore,
276
+ },
277
+ fetchedAt: new Date().toISOString(),
278
+ periodDays: 7,
279
+ };
280
+ source = 'adoption_fallback';
281
+ }
282
+ // Calculate level (or use override)
283
+ const calculatedLevel = calculateCoachingLevel(scores.overallScore);
284
+ const effectiveLevel = config.override ?? calculatedLevel;
285
+ return {
286
+ overallScore: scores.overallScore,
287
+ metrics: {
288
+ sessionEfficiency: scores.categoryScores.efficiency,
289
+ patternAdoption: scores.categoryScores.patterns,
290
+ collaborationQuality: scores.categoryScores.quality,
291
+ antiPatterns: scores.categoryScores['anti-patterns'],
292
+ },
293
+ level: effectiveLevel,
294
+ override: config.override,
295
+ source,
296
+ cacheAge,
297
+ };
298
+ }
299
+ /**
300
+ * Get coaching level for quick checks
301
+ * Simplified version that just returns the level
302
+ */
303
+ export async function getCoachingLevel(graphId) {
304
+ const context = await getCoachingContext(graphId);
305
+ return context.level;
306
+ }
307
+ /**
308
+ * Check if a specific metric is low and needs targeted coaching
309
+ */
310
+ export function isMetricLow(value, threshold = 70) {
311
+ return value < threshold;
312
+ }
313
+ /**
314
+ * Get targeted coaching suggestions based on low metrics
315
+ */
316
+ export function getTargetedCoachingSuggestions(context) {
317
+ const suggestions = [];
318
+ const threshold = 70;
319
+ if (isMetricLow(context.metrics.sessionEfficiency, threshold)) {
320
+ suggestions.push('Consider using `ginko handoff` to preserve context between sessions');
321
+ }
322
+ if (isMetricLow(context.metrics.patternAdoption, threshold)) {
323
+ suggestions.push('Try organizing work into Epic→Sprint→Task structure for better tracking');
324
+ }
325
+ if (isMetricLow(context.metrics.collaborationQuality, threshold)) {
326
+ suggestions.push('Log more decisions with `ginko log` to improve collaboration quality');
327
+ }
328
+ if (isMetricLow(context.metrics.antiPatterns, threshold)) {
329
+ suggestions.push('Review recent gotcha warnings - you may be hitting known issues');
330
+ }
331
+ return suggestions;
332
+ }
333
+ /**
334
+ * Get the appropriate prompt variant based on coaching level
335
+ */
336
+ export function selectPrompt(variants, level) {
337
+ return variants[level];
338
+ }
339
+ /**
340
+ * Standard prompt variants for common scenarios
341
+ */
342
+ export const PROMPT_VARIANTS = {
343
+ noStructure: {
344
+ minimal: 'No active sprint. [a] Epic [b] Sprint [c] Quick [d] Ad-hoc',
345
+ standard: `You have no planned work. What would you like to work on?
346
+
347
+ [a] New Epic - Large initiative with multiple sprints
348
+ [b] New Feature Sprint - Focused work with clear goals
349
+ [c] Quick fix / Bug fix - Single task, minimal overhead
350
+ [d] Something else - Explore, research, or work ad-hoc`,
351
+ supportive: `I notice you're not currently in a sprint. Sprints help track progress and maintain focus.
352
+
353
+ What would you like to work on?
354
+
355
+ [a] New Epic (Recommended)
356
+ For large initiatives that need multiple sprints to complete.
357
+ Example: "Implement user authentication system"
358
+
359
+ [b] New Feature Sprint
360
+ For focused work with a clear goal that can be done in ~1 week.
361
+ Example: "Add dark mode toggle"
362
+
363
+ [c] Quick fix / Bug fix
364
+ For small, single tasks that don't need sprint overhead.
365
+ Example: "Fix login button alignment"
366
+
367
+ [d] Something else
368
+ For exploration, research, or ad-hoc work.
369
+
370
+ Tip: Structured work (options a-c) improves your collaboration insights!`,
371
+ },
372
+ sprintComplete: {
373
+ minimal: 'Sprint done! [a] Next sprint [b] New epic [c] Ad-hoc',
374
+ standard: `🎉 Sprint complete! All tasks finished.
375
+
376
+ What's next?
377
+ [a] Start next sprint
378
+ [b] Create new epic
379
+ [c] Work on something else`,
380
+ supportive: `🎉 Great work! You've completed all tasks in this sprint.
381
+
382
+ What would you like to do next?
383
+
384
+ [a] Start next sprint
385
+ Continue momentum with the next planned sprint.
386
+
387
+ [b] Create new epic
388
+ Begin a new large initiative.
389
+
390
+ [c] Work on something else
391
+ Take a break or explore other work.
392
+
393
+ Tip: Completing sprints contributes to your pattern adoption score!`,
394
+ },
395
+ };
396
+ // =============================================================================
397
+ // Exports for Testing
398
+ // =============================================================================
399
+ export const __testing = {
400
+ LEVEL_THRESHOLDS,
401
+ CACHE_TTL_HOURS,
402
+ adoptionLevelToCoachingLevel,
403
+ adoptionLevelToScore,
404
+ getCacheAgeMinutes,
405
+ };
406
+ //# sourceMappingURL=coaching-level.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coaching-level.js","sourceRoot":"","sources":["../../src/lib/coaching-level.ts"],"names":[],"mappings":"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"}
@@ -72,4 +72,46 @@ export declare function getUnsyncedEvents(): Promise<Event[]>;
72
72
  * Clear events file (for testing)
73
73
  */
74
74
  export declare function clearEvents(): Promise<void>;
75
+ /**
76
+ * Coaching event types for tracking interactions
77
+ */
78
+ export type CoachingEventType = 'planning_menu_shown' | 'planning_menu_selection' | 'coaching_level_auto' | 'coaching_level_override' | 'targeted_tip_shown' | 'session_with_structure' | 'session_without_structure';
79
+ /**
80
+ * Coaching event data for analytics
81
+ */
82
+ export interface CoachingEventData {
83
+ type: CoachingEventType;
84
+ coachingLevel?: 'minimal' | 'standard' | 'supportive';
85
+ overallScore?: number;
86
+ selection?: string;
87
+ tipId?: string;
88
+ metric?: string;
89
+ sessionHadStructure?: boolean;
90
+ override?: boolean;
91
+ previousLevel?: string;
92
+ }
93
+ /**
94
+ * Log a coaching interaction event (EPIC-016 Sprint 5 Task 5)
95
+ *
96
+ * Tracks coaching interactions for future analysis:
97
+ * - Planning menu selections over time
98
+ * - Time from "no structure" to "structured work"
99
+ * - User override patterns
100
+ * - Correlation between coaching level and adoption
101
+ *
102
+ * @param data - Coaching event data
103
+ */
104
+ export declare function logCoachingEvent(data: CoachingEventData): Promise<void>;
105
+ /**
106
+ * Log planning menu interaction
107
+ */
108
+ export declare function logPlanningMenuEvent(selection: string, coachingLevel: 'minimal' | 'standard' | 'supportive', overallScore?: number): Promise<void>;
109
+ /**
110
+ * Log coaching level change
111
+ */
112
+ export declare function logCoachingLevelChange(newLevel: 'minimal' | 'standard' | 'supportive', isOverride: boolean, overallScore?: number, previousLevel?: string): Promise<void>;
113
+ /**
114
+ * Log targeted tip shown
115
+ */
116
+ export declare function logTargetedTipShown(tipId: string, metric: string, coachingLevel: 'minimal' | 'standard' | 'supportive'): Promise<void>;
75
117
  //# sourceMappingURL=event-logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-logger.d.ts","sourceRoot":"","sources":["../../src/lib/event-logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;IACpG,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,eAAe,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,KAAM,SAAQ,UAAU;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAyHD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAgGhE;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAgBnD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBxE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAG1D;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAOjD"}
1
+ {"version":3,"file":"event-logger.d.ts","sourceRoot":"","sources":["../../src/lib/event-logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;IACpG,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,eAAe,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,KAAM,SAAQ,UAAU;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAyHD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAgGhE;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAgBnD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBxE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAG1D;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAOjD;AAMD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,qBAAqB,GACrB,yBAAyB,GACzB,qBAAqB,GACrB,yBAAyB,GACzB,oBAAoB,GACpB,wBAAwB,GACxB,2BAA2B,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,iBAAiB,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7E;AAiCD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,SAAS,GAAG,UAAU,GAAG,YAAY,EACpD,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,SAAS,GAAG,UAAU,GAAG,YAAY,EAC/C,UAAU,EAAE,OAAO,EACnB,YAAY,CAAC,EAAE,MAAM,EACrB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,SAAS,GAAG,UAAU,GAAG,YAAY,GACnD,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -276,4 +276,81 @@ export async function clearEvents() {
276
276
  console.error('[EventLogger] Failed to clear events:', error instanceof Error ? error.message : String(error));
277
277
  }
278
278
  }
279
+ /**
280
+ * Log a coaching interaction event (EPIC-016 Sprint 5 Task 5)
281
+ *
282
+ * Tracks coaching interactions for future analysis:
283
+ * - Planning menu selections over time
284
+ * - Time from "no structure" to "structured work"
285
+ * - User override patterns
286
+ * - Correlation between coaching level and adoption
287
+ *
288
+ * @param data - Coaching event data
289
+ */
290
+ export async function logCoachingEvent(data) {
291
+ const description = formatCoachingDescription(data);
292
+ await logEvent({
293
+ category: 'insight',
294
+ description,
295
+ tags: ['coaching-data', `coaching-${data.type}`, `level-${data.coachingLevel || 'unknown'}`],
296
+ impact: 'low',
297
+ });
298
+ }
299
+ /**
300
+ * Format coaching event description for logging
301
+ */
302
+ function formatCoachingDescription(data) {
303
+ switch (data.type) {
304
+ case 'planning_menu_shown':
305
+ return `Planning menu shown (coaching level: ${data.coachingLevel}, score: ${data.overallScore})`;
306
+ case 'planning_menu_selection':
307
+ return `Planning menu selection: ${data.selection} (coaching level: ${data.coachingLevel})`;
308
+ case 'coaching_level_auto':
309
+ return `Coaching level auto-adjusted to ${data.coachingLevel} (score: ${data.overallScore})`;
310
+ case 'coaching_level_override':
311
+ return `Coaching level manually set to ${data.coachingLevel} (previous: ${data.previousLevel})`;
312
+ case 'targeted_tip_shown':
313
+ return `Targeted coaching tip shown: ${data.tipId} (metric: ${data.metric}, level: ${data.coachingLevel})`;
314
+ case 'session_with_structure':
315
+ return `Session started with structured work (coaching level: ${data.coachingLevel})`;
316
+ case 'session_without_structure':
317
+ return `Session started without structure, menu shown (coaching level: ${data.coachingLevel})`;
318
+ default:
319
+ return `Coaching event: ${data.type}`;
320
+ }
321
+ }
322
+ /**
323
+ * Log planning menu interaction
324
+ */
325
+ export async function logPlanningMenuEvent(selection, coachingLevel, overallScore) {
326
+ await logCoachingEvent({
327
+ type: 'planning_menu_selection',
328
+ selection,
329
+ coachingLevel,
330
+ overallScore,
331
+ });
332
+ }
333
+ /**
334
+ * Log coaching level change
335
+ */
336
+ export async function logCoachingLevelChange(newLevel, isOverride, overallScore, previousLevel) {
337
+ await logCoachingEvent({
338
+ type: isOverride ? 'coaching_level_override' : 'coaching_level_auto',
339
+ coachingLevel: newLevel,
340
+ overallScore,
341
+ override: isOverride,
342
+ previousLevel,
343
+ });
344
+ }
345
+ /**
346
+ * Log targeted tip shown
347
+ */
348
+ export async function logTargetedTipShown(tipId, metric, coachingLevel) {
349
+ await logCoachingEvent({
350
+ type: 'targeted_tip_shown',
351
+ tipId,
352
+ metric,
353
+ coachingLevel,
354
+ });
355
+ }
279
356
  //# sourceMappingURL=event-logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-logger.js","sourceRoot":"","sources":["../../src/lib/event-logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-logger.js","sourceRoot":"","sources":["../../src/lib/event-logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2026-01-26
5
+ * @tags: [planning, menu, coaching, structure-detection, epic-016-s04]
6
+ * @related: [start-reflection.ts, user-sprint.ts, event-logger.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [prompts, chalk, event-logger]
10
+ */
11
+ import { WorkStructureStatus } from './user-sprint.js';
12
+ import { CoachingLevel } from './coaching-level.js';
13
+ export type PlanningChoice = 'epic' | 'sprint' | 'quick-fix' | 'adhoc';
14
+ export interface PlanningMenuResult {
15
+ choice: PlanningChoice | null;
16
+ cancelled: boolean;
17
+ }
18
+ export interface PlanningRouteResult {
19
+ success: boolean;
20
+ sprintId?: string;
21
+ taskId?: string;
22
+ message?: string;
23
+ shouldContinueStart?: boolean;
24
+ }
25
+ /**
26
+ * Display the guided planning menu and get user selection
27
+ *
28
+ * Called when ginko start detects no structured work.
29
+ * Logs selection for coaching insights analysis (t05).
30
+ * Uses adoption-based quieting to adjust verbosity.
31
+ *
32
+ * @param status - Work structure status from checkWorkStructure()
33
+ * @returns Menu selection result
34
+ */
35
+ export declare function showPlanningMenu(status?: WorkStructureStatus): Promise<PlanningMenuResult>;
36
+ /**
37
+ * Log the planning menu selection for coaching analysis (t05)
38
+ *
39
+ * Enables the insights system to:
40
+ * - Track pattern adoption over time
41
+ * - Identify users who frequently choose ad-hoc
42
+ * - Measure effectiveness of planning prompts
43
+ *
44
+ * Also records adoption signals for quieting behavior.
45
+ */
46
+ declare function logPlanningChoice(choice: PlanningChoice, coachingLevel?: CoachingLevel, overallScore?: number): Promise<void>;
47
+ /**
48
+ * Route the planning menu choice to appropriate handler
49
+ *
50
+ * Routes:
51
+ * - epic → launches ginko epic command
52
+ * - sprint → launches sprint creation flow (t03)
53
+ * - quick-fix → launches quick-fix flow (t04)
54
+ * - adhoc → marks session as ad-hoc, continues to normal start
55
+ *
56
+ * @param choice - User's menu selection
57
+ * @returns Route result with success status and metadata
58
+ */
59
+ export declare function routePlanningChoice(choice: PlanningChoice): Promise<PlanningRouteResult>;
60
+ export declare const __testing: {
61
+ PLANNING_MENU_CHOICES: {
62
+ title: string;
63
+ description: string;
64
+ value: PlanningChoice;
65
+ }[];
66
+ logPlanningChoice: typeof logPlanningChoice;
67
+ };
68
+ export {};
69
+ //# sourceMappingURL=planning-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planning-menu.d.ts","sourceRoot":"","sources":["../../src/lib/planning-menu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkBH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAWvD,OAAO,EAEL,aAAa,EAId,MAAM,qBAAqB,CAAC;AAO7B,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAiCD;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA0E7B;AAED;;;;;;;;;GASG;AACH,iBAAe,iBAAiB,CAC9B,MAAM,EAAE,cAAc,EACtB,aAAa,CAAC,EAAE,aAAa,EAC7B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAsCf;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,mBAAmB,CAAC,CAiB9B;AAkJD,eAAO,MAAM,SAAS;;;;eA1VD,cAAc;;;CA6VlC,CAAC"}