@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.
- package/dist/commands/graph/api-client.d.ts +36 -1
- package/dist/commands/graph/api-client.d.ts.map +1 -1
- package/dist/commands/graph/api-client.js +32 -2
- package/dist/commands/graph/api-client.js.map +1 -1
- package/dist/commands/graph/config.d.ts +6 -1
- package/dist/commands/graph/config.d.ts.map +1 -1
- package/dist/commands/graph/config.js +9 -1
- package/dist/commands/graph/config.js.map +1 -1
- package/dist/commands/graph/init.d.ts +1 -1
- package/dist/commands/graph/init.d.ts.map +1 -1
- package/dist/commands/graph/init.js +17 -2
- package/dist/commands/graph/init.js.map +1 -1
- package/dist/commands/handoff.d.ts +3 -3
- package/dist/commands/handoff.d.ts.map +1 -1
- package/dist/commands/handoff.js +32 -3
- package/dist/commands/handoff.js.map +1 -1
- package/dist/commands/nudging/index.d.ts +24 -0
- package/dist/commands/nudging/index.d.ts.map +1 -0
- package/dist/commands/nudging/index.js +175 -0
- package/dist/commands/nudging/index.js.map +1 -0
- package/dist/commands/sprint/create.d.ts +26 -0
- package/dist/commands/sprint/create.d.ts.map +1 -0
- package/dist/commands/sprint/create.js +269 -0
- package/dist/commands/sprint/create.js.map +1 -0
- package/dist/commands/sprint/index.d.ts.map +1 -1
- package/dist/commands/sprint/index.js +24 -0
- package/dist/commands/sprint/index.js.map +1 -1
- package/dist/commands/sprint/quick-fix.d.ts +25 -0
- package/dist/commands/sprint/quick-fix.d.ts.map +1 -0
- package/dist/commands/sprint/quick-fix.js +151 -0
- package/dist/commands/sprint/quick-fix.js.map +1 -0
- package/dist/commands/sprint/sprint-pipeline-enhanced.d.ts.map +1 -1
- package/dist/commands/sprint/sprint-pipeline-enhanced.js +37 -0
- package/dist/commands/sprint/sprint-pipeline-enhanced.js.map +1 -1
- package/dist/commands/sprint/status.d.ts.map +1 -1
- package/dist/commands/sprint/status.js +21 -1
- package/dist/commands/sprint/status.js.map +1 -1
- package/dist/commands/start/start-reflection.d.ts +14 -0
- package/dist/commands/start/start-reflection.d.ts.map +1 -1
- package/dist/commands/start/start-reflection.js +180 -9
- package/dist/commands/start/start-reflection.js.map +1 -1
- package/dist/commands/task/status.d.ts +3 -0
- package/dist/commands/task/status.d.ts.map +1 -1
- package/dist/commands/task/status.js +48 -1
- package/dist/commands/task/status.js.map +1 -1
- package/dist/commands/team/index.d.ts +5 -0
- package/dist/commands/team/index.d.ts.map +1 -1
- package/dist/commands/team/index.js +28 -0
- package/dist/commands/team/index.js.map +1 -1
- package/dist/commands/team/status.d.ts +16 -0
- package/dist/commands/team/status.d.ts.map +1 -0
- package/dist/commands/team/status.js +180 -0
- package/dist/commands/team/status.js.map +1 -0
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/adoption-score.d.ts +69 -0
- package/dist/lib/adoption-score.d.ts.map +1 -0
- package/dist/lib/adoption-score.js +206 -0
- package/dist/lib/adoption-score.js.map +1 -0
- package/dist/lib/coaching-level.d.ts +127 -0
- package/dist/lib/coaching-level.d.ts.map +1 -0
- package/dist/lib/coaching-level.js +406 -0
- package/dist/lib/coaching-level.js.map +1 -0
- package/dist/lib/event-logger.d.ts +42 -0
- package/dist/lib/event-logger.d.ts.map +1 -1
- package/dist/lib/event-logger.js +77 -0
- package/dist/lib/event-logger.js.map +1 -1
- package/dist/lib/planning-menu.d.ts +69 -0
- package/dist/lib/planning-menu.d.ts.map +1 -0
- package/dist/lib/planning-menu.js +342 -0
- package/dist/lib/planning-menu.js.map +1 -0
- package/dist/lib/targeted-coaching.d.ts +71 -0
- package/dist/lib/targeted-coaching.d.ts.map +1 -0
- package/dist/lib/targeted-coaching.js +318 -0
- package/dist/lib/targeted-coaching.js.map +1 -0
- package/dist/lib/task-parser.d.ts +2 -0
- package/dist/lib/task-parser.d.ts.map +1 -1
- package/dist/lib/task-parser.js +23 -0
- package/dist/lib/task-parser.js.map +1 -1
- package/dist/lib/user-sprint.d.ts +53 -0
- package/dist/lib/user-sprint.d.ts.map +1 -1
- package/dist/lib/user-sprint.js +137 -2
- package/dist/lib/user-sprint.js.map +1 -1
- package/dist/lib/work-reconciliation.d.ts +59 -0
- package/dist/lib/work-reconciliation.d.ts.map +1 -0
- package/dist/lib/work-reconciliation.js +267 -0
- package/dist/lib/work-reconciliation.js.map +1 -0
- package/dist/utils/version-check.d.ts +26 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +186 -0
- package/dist/utils/version-check.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,342 @@
|
|
|
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
|
+
/**
|
|
12
|
+
* Guided Planning Menu (EPIC-016 Sprint 4 t02)
|
|
13
|
+
*
|
|
14
|
+
* Shows a menu when `ginko start` detects no structured work.
|
|
15
|
+
* Guides users toward Epic→Sprint→Task structure while allowing
|
|
16
|
+
* ad-hoc work when appropriate.
|
|
17
|
+
*
|
|
18
|
+
* Menu Options:
|
|
19
|
+
* [a] New Epic - Large initiative with multiple sprints
|
|
20
|
+
* [b] New Feature Sprint - Focused work with clear goals
|
|
21
|
+
* [c] Quick fix / Bug fix - Single task, minimal overhead
|
|
22
|
+
* [d] Something else - Explore, research, or work ad-hoc
|
|
23
|
+
*/
|
|
24
|
+
import prompts from 'prompts';
|
|
25
|
+
import chalk from 'chalk';
|
|
26
|
+
import { logEvent, logPlanningMenuEvent } from './event-logger.js';
|
|
27
|
+
// EPIC-016 Sprint 4: Adoption-based quieting (t05)
|
|
28
|
+
import { getAdoptionScore, recordAdoptionSignal, getPlanningMenuConfig, checkAdhocStreak } from './adoption-score.js';
|
|
29
|
+
// EPIC-016 Sprint 5: Adaptive coaching based on insight scores (t01)
|
|
30
|
+
import { getCoachingContext, PROMPT_VARIANTS, selectPrompt, getTargetedCoachingSuggestions, } from './coaching-level.js';
|
|
31
|
+
import { getGraphId } from '../commands/graph/config.js';
|
|
32
|
+
// =============================================================================
|
|
33
|
+
// Constants
|
|
34
|
+
// =============================================================================
|
|
35
|
+
const PLANNING_MENU_CHOICES = [
|
|
36
|
+
{
|
|
37
|
+
title: 'New Epic',
|
|
38
|
+
description: 'Large initiative with multiple sprints (launches ginko epic)',
|
|
39
|
+
value: 'epic',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
title: 'New Feature Sprint',
|
|
43
|
+
description: 'Focused work with clear goals (guides through sprint creation)',
|
|
44
|
+
value: 'sprint',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
title: 'Quick fix / Bug fix',
|
|
48
|
+
description: 'Single task, minimal overhead (creates 1-task sprint)',
|
|
49
|
+
value: 'quick-fix',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
title: 'Something else',
|
|
53
|
+
description: 'Explore, research, or work ad-hoc (tracked for coaching)',
|
|
54
|
+
value: 'adhoc',
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
// =============================================================================
|
|
58
|
+
// Menu Display
|
|
59
|
+
// =============================================================================
|
|
60
|
+
/**
|
|
61
|
+
* Display the guided planning menu and get user selection
|
|
62
|
+
*
|
|
63
|
+
* Called when ginko start detects no structured work.
|
|
64
|
+
* Logs selection for coaching insights analysis (t05).
|
|
65
|
+
* Uses adoption-based quieting to adjust verbosity.
|
|
66
|
+
*
|
|
67
|
+
* @param status - Work structure status from checkWorkStructure()
|
|
68
|
+
* @returns Menu selection result
|
|
69
|
+
*/
|
|
70
|
+
export async function showPlanningMenu(status) {
|
|
71
|
+
// EPIC-016 Sprint 4 t05: Get quieting configuration based on adoption level
|
|
72
|
+
const menuConfig = await getPlanningMenuConfig();
|
|
73
|
+
const adoptionScore = await getAdoptionScore();
|
|
74
|
+
// EPIC-016 Sprint 5 t01: Get coaching context based on insight scores
|
|
75
|
+
const graphId = await getGraphId().catch(() => null);
|
|
76
|
+
const coachingContext = await getCoachingContext(graphId || undefined);
|
|
77
|
+
const coachingLevel = coachingContext.level;
|
|
78
|
+
console.log('');
|
|
79
|
+
// Check for ad-hoc streak (3+ consecutive sessions resets score)
|
|
80
|
+
if (status?.consecutiveAdhocSessions) {
|
|
81
|
+
await checkAdhocStreak(status.consecutiveAdhocSessions);
|
|
82
|
+
}
|
|
83
|
+
// EPIC-016 Sprint 5 t03: Show targeted coaching for low metrics
|
|
84
|
+
if (coachingLevel === 'supportive') {
|
|
85
|
+
const suggestions = getTargetedCoachingSuggestions(coachingContext);
|
|
86
|
+
if (suggestions.length > 0) {
|
|
87
|
+
console.log(chalk.cyan('💡 Coaching tip:'));
|
|
88
|
+
console.log(chalk.dim(` ${suggestions[0]}`));
|
|
89
|
+
console.log('');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Show context-appropriate header based on coaching level
|
|
93
|
+
if (menuConfig.showCelebration && adoptionScore.score >= 20) {
|
|
94
|
+
console.log(chalk.green('🌳 Great job staying organized!'));
|
|
95
|
+
}
|
|
96
|
+
if (status?.reason === 'all_tasks_complete') {
|
|
97
|
+
// Use coaching-level variant for sprint complete message
|
|
98
|
+
const message = selectPrompt(PROMPT_VARIANTS.sprintComplete, coachingLevel);
|
|
99
|
+
console.log(message);
|
|
100
|
+
}
|
|
101
|
+
else if (menuConfig.showCoachingTip && status?.consecutiveAdhocSessions && status.consecutiveAdhocSessions > 1) {
|
|
102
|
+
console.log(chalk.yellow(`💡 You've had ${status.consecutiveAdhocSessions} sessions without planned work.`));
|
|
103
|
+
console.log(chalk.white('Would you like to plan your work?'));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// Use coaching-level variant for no structure message
|
|
107
|
+
const message = selectPrompt(PROMPT_VARIANTS.noStructure, coachingLevel);
|
|
108
|
+
console.log(message);
|
|
109
|
+
}
|
|
110
|
+
console.log('');
|
|
111
|
+
// Build menu choices based on quieting level
|
|
112
|
+
const choices = PLANNING_MENU_CHOICES.map((c, i) => ({
|
|
113
|
+
title: `${chalk.cyan(`[${String.fromCharCode(97 + i)}]`)} ${c.title}`,
|
|
114
|
+
description: menuConfig.showFullDescription ? chalk.dim(c.description) : undefined,
|
|
115
|
+
value: c.value,
|
|
116
|
+
}));
|
|
117
|
+
const response = await prompts({
|
|
118
|
+
type: 'select',
|
|
119
|
+
name: 'choice',
|
|
120
|
+
message: 'Select an option',
|
|
121
|
+
choices,
|
|
122
|
+
initial: 0,
|
|
123
|
+
});
|
|
124
|
+
// Handle cancellation (Ctrl+C or ESC)
|
|
125
|
+
if (response.choice === undefined) {
|
|
126
|
+
return { choice: null, cancelled: true };
|
|
127
|
+
}
|
|
128
|
+
// Log selection and record adoption signal (non-blocking)
|
|
129
|
+
// EPIC-016 Sprint 5 t05: Pass coaching context for feedback loop
|
|
130
|
+
logPlanningChoice(response.choice, coachingLevel, coachingContext.overallScore).catch(() => {
|
|
131
|
+
// Ignore logging errors
|
|
132
|
+
});
|
|
133
|
+
return { choice: response.choice, cancelled: false };
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Log the planning menu selection for coaching analysis (t05)
|
|
137
|
+
*
|
|
138
|
+
* Enables the insights system to:
|
|
139
|
+
* - Track pattern adoption over time
|
|
140
|
+
* - Identify users who frequently choose ad-hoc
|
|
141
|
+
* - Measure effectiveness of planning prompts
|
|
142
|
+
*
|
|
143
|
+
* Also records adoption signals for quieting behavior.
|
|
144
|
+
*/
|
|
145
|
+
async function logPlanningChoice(choice, coachingLevel, overallScore) {
|
|
146
|
+
const descriptions = {
|
|
147
|
+
'epic': 'Started new epic creation from planning menu',
|
|
148
|
+
'sprint': 'Started new sprint creation from planning menu',
|
|
149
|
+
'quick-fix': 'Started quick-fix flow from planning menu',
|
|
150
|
+
'adhoc': 'Chose ad-hoc work from planning menu',
|
|
151
|
+
};
|
|
152
|
+
// Map menu choices to adoption signals
|
|
153
|
+
const adoptionSignals = {
|
|
154
|
+
'epic': 'created_epic',
|
|
155
|
+
'sprint': 'created_sprint',
|
|
156
|
+
'quick-fix': 'used_quick_fix',
|
|
157
|
+
'adhoc': 'chose_adhoc',
|
|
158
|
+
};
|
|
159
|
+
try {
|
|
160
|
+
// Log event for insights
|
|
161
|
+
await logEvent({
|
|
162
|
+
category: 'decision',
|
|
163
|
+
description: descriptions[choice],
|
|
164
|
+
tags: ['planning-menu', `choice-${choice}`, 'coaching-data'],
|
|
165
|
+
impact: choice === 'adhoc' ? 'low' : 'medium',
|
|
166
|
+
});
|
|
167
|
+
// EPIC-016 Sprint 5 t05: Log coaching interaction for feedback loop
|
|
168
|
+
if (coachingLevel) {
|
|
169
|
+
await logPlanningMenuEvent(choice, coachingLevel, overallScore);
|
|
170
|
+
}
|
|
171
|
+
// Record adoption signal for quieting behavior (t05)
|
|
172
|
+
const signal = adoptionSignals[choice];
|
|
173
|
+
if (signal) {
|
|
174
|
+
await recordAdoptionSignal(signal);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// Non-critical - don't fail startup if logging fails
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// =============================================================================
|
|
182
|
+
// Route Handlers
|
|
183
|
+
// =============================================================================
|
|
184
|
+
/**
|
|
185
|
+
* Route the planning menu choice to appropriate handler
|
|
186
|
+
*
|
|
187
|
+
* Routes:
|
|
188
|
+
* - epic → launches ginko epic command
|
|
189
|
+
* - sprint → launches sprint creation flow (t03)
|
|
190
|
+
* - quick-fix → launches quick-fix flow (t04)
|
|
191
|
+
* - adhoc → marks session as ad-hoc, continues to normal start
|
|
192
|
+
*
|
|
193
|
+
* @param choice - User's menu selection
|
|
194
|
+
* @returns Route result with success status and metadata
|
|
195
|
+
*/
|
|
196
|
+
export async function routePlanningChoice(choice) {
|
|
197
|
+
switch (choice) {
|
|
198
|
+
case 'epic':
|
|
199
|
+
return routeToEpicCreation();
|
|
200
|
+
case 'sprint':
|
|
201
|
+
return routeToSprintCreation();
|
|
202
|
+
case 'quick-fix':
|
|
203
|
+
return routeToQuickFix();
|
|
204
|
+
case 'adhoc':
|
|
205
|
+
return routeToAdhocWork();
|
|
206
|
+
default:
|
|
207
|
+
return { success: false, message: 'Unknown choice', shouldContinueStart: true };
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Route to epic creation (ginko epic)
|
|
212
|
+
*/
|
|
213
|
+
async function routeToEpicCreation() {
|
|
214
|
+
console.log('');
|
|
215
|
+
console.log(chalk.cyan('🚀 Launching epic creation...'));
|
|
216
|
+
console.log('');
|
|
217
|
+
try {
|
|
218
|
+
// Import and execute epic command
|
|
219
|
+
const { epicCommand } = await import('../commands/epic.js');
|
|
220
|
+
await epicCommand({});
|
|
221
|
+
return {
|
|
222
|
+
success: true,
|
|
223
|
+
message: 'Epic creation flow completed',
|
|
224
|
+
shouldContinueStart: false // Epic command handles its own output
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
console.error(chalk.red('Failed to launch epic creation:'), error);
|
|
229
|
+
return {
|
|
230
|
+
success: false,
|
|
231
|
+
message: 'Epic creation failed',
|
|
232
|
+
shouldContinueStart: true
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Route to sprint creation flow (t03)
|
|
238
|
+
* Full implementation in packages/cli/src/commands/sprint/create.ts
|
|
239
|
+
*/
|
|
240
|
+
async function routeToSprintCreation() {
|
|
241
|
+
console.log('');
|
|
242
|
+
console.log(chalk.cyan('📋 Starting sprint creation...'));
|
|
243
|
+
console.log('');
|
|
244
|
+
try {
|
|
245
|
+
// Import and execute sprint create command
|
|
246
|
+
const { createSprintCommand } = await import('../commands/sprint/create.js');
|
|
247
|
+
const result = await createSprintCommand({ adhoc: true });
|
|
248
|
+
return {
|
|
249
|
+
success: result.success,
|
|
250
|
+
sprintId: result.sprintId,
|
|
251
|
+
message: result.message || 'Sprint creation completed',
|
|
252
|
+
shouldContinueStart: !result.success // Continue if creation failed
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
// Fallback: Sprint creation not yet implemented (t03)
|
|
257
|
+
console.log(chalk.dim('Sprint creation flow launching...'));
|
|
258
|
+
console.log('');
|
|
259
|
+
console.log(chalk.white('To create a sprint, describe what you want to build:'));
|
|
260
|
+
console.log(chalk.dim(' The AI will break this down into tasks and create a sprint.'));
|
|
261
|
+
console.log('');
|
|
262
|
+
return {
|
|
263
|
+
success: true,
|
|
264
|
+
message: 'Sprint creation guidance displayed',
|
|
265
|
+
shouldContinueStart: true
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Route to quick-fix flow (t04)
|
|
271
|
+
* Creates a single-task sprint with minimal ceremony
|
|
272
|
+
*/
|
|
273
|
+
async function routeToQuickFix() {
|
|
274
|
+
console.log('');
|
|
275
|
+
console.log(chalk.cyan('⚡ Quick fix mode'));
|
|
276
|
+
console.log('');
|
|
277
|
+
// Get quick description
|
|
278
|
+
const response = await prompts({
|
|
279
|
+
type: 'text',
|
|
280
|
+
name: 'description',
|
|
281
|
+
message: 'Describe the fix in one line:',
|
|
282
|
+
validate: (value) => value.trim().length > 5 ? true : 'Please provide a brief description',
|
|
283
|
+
});
|
|
284
|
+
if (!response.description) {
|
|
285
|
+
return { success: false, message: 'Quick fix cancelled', shouldContinueStart: false };
|
|
286
|
+
}
|
|
287
|
+
const description = response.description.trim();
|
|
288
|
+
try {
|
|
289
|
+
// Try to use the quick-fix implementation (t04)
|
|
290
|
+
const { createQuickFixTask } = await import('../commands/sprint/quick-fix.js');
|
|
291
|
+
const result = await createQuickFixTask(description);
|
|
292
|
+
console.log('');
|
|
293
|
+
console.log(chalk.green(`✓ Created: ${result.taskId} - ${description}`));
|
|
294
|
+
console.log(chalk.dim(' Ready to work. Run `ginko task complete` when done.'));
|
|
295
|
+
return {
|
|
296
|
+
success: true,
|
|
297
|
+
taskId: result.taskId,
|
|
298
|
+
sprintId: result.sprintId,
|
|
299
|
+
message: 'Quick fix task created',
|
|
300
|
+
shouldContinueStart: true
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
// Fallback: Log as an event for now
|
|
305
|
+
console.log('');
|
|
306
|
+
console.log(chalk.green(`✓ Ready to work on: ${description}`));
|
|
307
|
+
console.log(chalk.dim(' Tip: Run `ginko log "completed: ${description}"` when done.'));
|
|
308
|
+
// Log the quick fix start as an event
|
|
309
|
+
await logEvent({
|
|
310
|
+
category: 'feature',
|
|
311
|
+
description: `Quick fix started: ${description}`,
|
|
312
|
+
tags: ['quick-fix', 'unstructured'],
|
|
313
|
+
impact: 'medium',
|
|
314
|
+
}).catch(() => { });
|
|
315
|
+
return {
|
|
316
|
+
success: true,
|
|
317
|
+
message: 'Quick fix tracked (full sprint creation in t04)',
|
|
318
|
+
shouldContinueStart: true
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Route to ad-hoc work mode
|
|
324
|
+
* User explicitly chooses unstructured work - track for coaching
|
|
325
|
+
*/
|
|
326
|
+
async function routeToAdhocWork() {
|
|
327
|
+
console.log('');
|
|
328
|
+
console.log(chalk.dim('Working ad-hoc. Use `ginko log` to track your progress.'));
|
|
329
|
+
return {
|
|
330
|
+
success: true,
|
|
331
|
+
message: 'Ad-hoc work mode - session will continue normally',
|
|
332
|
+
shouldContinueStart: true
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
// =============================================================================
|
|
336
|
+
// Exports for Testing
|
|
337
|
+
// =============================================================================
|
|
338
|
+
export const __testing = {
|
|
339
|
+
PLANNING_MENU_CHOICES,
|
|
340
|
+
logPlanningChoice,
|
|
341
|
+
};
|
|
342
|
+
//# sourceMappingURL=planning-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planning-menu.js","sourceRoot":"","sources":["../../src/lib/planning-menu.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2026-01-26
|
|
5
|
+
* @tags: [coaching, insights, targeted, adaptive, epic-016-s05]
|
|
6
|
+
* @related: [coaching-level.ts, start-reflection.ts, handoff.ts]
|
|
7
|
+
* @priority: medium
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [fs-extra, path]
|
|
10
|
+
*/
|
|
11
|
+
import { CoachingContext } from './coaching-level.js';
|
|
12
|
+
export type MetricType = 'sessionEfficiency' | 'patternAdoption' | 'collaborationQuality' | 'antiPatterns';
|
|
13
|
+
export type CoachingContext_Type = 'start' | 'handoff' | 'task_complete' | 'planning';
|
|
14
|
+
export interface CoachingTip {
|
|
15
|
+
id: string;
|
|
16
|
+
metric: MetricType;
|
|
17
|
+
context: CoachingContext_Type[];
|
|
18
|
+
message: string;
|
|
19
|
+
action?: string;
|
|
20
|
+
priority: number;
|
|
21
|
+
}
|
|
22
|
+
export interface ShownTipsRecord {
|
|
23
|
+
sessionId: string;
|
|
24
|
+
shownTipIds: string[];
|
|
25
|
+
lastUpdated: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* All available coaching tips organized by metric
|
|
29
|
+
*/
|
|
30
|
+
export declare const COACHING_TIPS: CoachingTip[];
|
|
31
|
+
declare function loadShownTips(): Promise<ShownTipsRecord>;
|
|
32
|
+
declare function saveShownTips(record: ShownTipsRecord): Promise<void>;
|
|
33
|
+
declare function markTipAsShown(tipId: string): Promise<void>;
|
|
34
|
+
declare function isTipShown(tipId: string): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* Get applicable tips for a given context and coaching context
|
|
37
|
+
*
|
|
38
|
+
* @param coachingCtx - Coaching context with metric scores
|
|
39
|
+
* @param context - Current context (start, handoff, etc.)
|
|
40
|
+
* @param limit - Maximum number of tips to return
|
|
41
|
+
* @returns Array of applicable tips, prioritized
|
|
42
|
+
*/
|
|
43
|
+
export declare function getApplicableTips(coachingCtx: CoachingContext, context: CoachingContext_Type, limit?: number): Promise<CoachingTip[]>;
|
|
44
|
+
declare function getMetricValue(ctx: CoachingContext, metric: MetricType): number;
|
|
45
|
+
/**
|
|
46
|
+
* Display a coaching tip to the console
|
|
47
|
+
*/
|
|
48
|
+
export declare function displayTip(tip: CoachingTip): void;
|
|
49
|
+
/**
|
|
50
|
+
* Show targeted coaching tips for the current context
|
|
51
|
+
*
|
|
52
|
+
* @param coachingCtx - Coaching context with metric scores
|
|
53
|
+
* @param context - Current context
|
|
54
|
+
* @returns Number of tips shown
|
|
55
|
+
*/
|
|
56
|
+
export declare function showTargetedCoaching(coachingCtx: CoachingContext, context: CoachingContext_Type): Promise<number>;
|
|
57
|
+
/**
|
|
58
|
+
* Get coaching tip for a specific metric (for inline use)
|
|
59
|
+
*/
|
|
60
|
+
export declare function getTipForMetric(coachingCtx: CoachingContext, metric: MetricType, context: CoachingContext_Type): Promise<string | null>;
|
|
61
|
+
export declare const METRIC_DISPLAY_NAMES: Record<MetricType, string>;
|
|
62
|
+
export declare const __testing: {
|
|
63
|
+
LOW_THRESHOLD: number;
|
|
64
|
+
loadShownTips: typeof loadShownTips;
|
|
65
|
+
saveShownTips: typeof saveShownTips;
|
|
66
|
+
markTipAsShown: typeof markTipAsShown;
|
|
67
|
+
isTipShown: typeof isTipShown;
|
|
68
|
+
getMetricValue: typeof getMetricValue;
|
|
69
|
+
};
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=targeted-coaching.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"targeted-coaching.d.ts","sourceRoot":"","sources":["../../src/lib/targeted-coaching.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAyBH,OAAO,EAAE,eAAe,EAAe,MAAM,qBAAqB,CAAC;AAOnE,MAAM,MAAM,UAAU,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,sBAAsB,GAAG,cAAc,CAAC;AAC3G,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,SAAS,GAAG,eAAe,GAAG,UAAU,CAAC;AAEtF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AASD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,EAmGtC,CAAC;AAaF,iBAAe,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC,CA0BvD;AAED,iBAAe,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAKnE;AAMD,iBAAe,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1D;AAED,iBAAe,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGzD;AAMD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,eAAe,EAC5B,OAAO,EAAE,oBAAoB,EAC7B,KAAK,GAAE,MAAU,GAChB,OAAO,CAAC,WAAW,EAAE,CAAC,CAiCxB;AAED,iBAAS,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAWxE;AAMD;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAQjD;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,eAAe,EAC5B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,eAAe,EAC5B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIxB;AAmBD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAK3D,CAAC;AAMF,eAAO,MAAM,SAAS;;;;;;;CAOrB,CAAC"}
|