@boshu2/vibe-check 1.6.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/.agents/bundles/automatic-learning-cadence-plan-2025-12-02.md +1297 -0
  2. package/.agents/bundles/automatic-learning-cadence-research-2025-12-02.md +481 -0
  3. package/.agents/bundles/dashboard-data-quality-plan.md +458 -0
  4. package/.agents/bundles/rating-scoring-alignment-plan.md +427 -0
  5. package/.agents/bundles/rpi-session-capture-plan-2025-12-02.md +693 -0
  6. package/.agents/bundles/rpi-session-capture-research-2025-12-02.md +433 -0
  7. package/.agents/bundles/session-integration-plan-2025-12-02.md +144 -0
  8. package/CHANGELOG.md +17 -0
  9. package/CLAUDE.md +74 -2
  10. package/Makefile +173 -0
  11. package/README.md +35 -2
  12. package/claude-progress.json +34 -5
  13. package/claude-progress.txt +66 -0
  14. package/dashboard/app.js +699 -66
  15. package/dashboard/chart.min.js +20 -0
  16. package/dashboard/dashboard-data.js +764 -0
  17. package/dashboard/dashboard-data.json +182 -71
  18. package/dashboard/index.html +139 -14
  19. package/dashboard/styles.css +579 -4
  20. package/dist/cli.js +1 -1
  21. package/dist/cli.js.map +1 -1
  22. package/dist/commands/analyze.d.ts.map +1 -1
  23. package/dist/commands/analyze.js +38 -2
  24. package/dist/commands/analyze.js.map +1 -1
  25. package/dist/commands/dashboard.js +4 -1
  26. package/dist/commands/dashboard.js.map +1 -1
  27. package/dist/commands/index.d.ts +1 -1
  28. package/dist/commands/index.d.ts.map +1 -1
  29. package/dist/commands/index.js +3 -3
  30. package/dist/commands/index.js.map +1 -1
  31. package/dist/commands/learn.d.ts +3 -0
  32. package/dist/commands/learn.d.ts.map +1 -0
  33. package/dist/commands/learn.js +161 -0
  34. package/dist/commands/learn.js.map +1 -0
  35. package/dist/commands/lesson.d.ts +8 -0
  36. package/dist/commands/lesson.d.ts.map +1 -0
  37. package/dist/commands/lesson.js +206 -0
  38. package/dist/commands/lesson.js.map +1 -0
  39. package/dist/commands/profile.d.ts.map +1 -1
  40. package/dist/commands/profile.js +3 -202
  41. package/dist/commands/profile.js.map +1 -1
  42. package/dist/commands/session.d.ts +51 -0
  43. package/dist/commands/session.d.ts.map +1 -0
  44. package/dist/commands/session.js +561 -0
  45. package/dist/commands/session.js.map +1 -0
  46. package/dist/gamification/index.d.ts +1 -3
  47. package/dist/gamification/index.d.ts.map +1 -1
  48. package/dist/gamification/index.js +2 -5
  49. package/dist/gamification/index.js.map +1 -1
  50. package/dist/gamification/pattern-memory.d.ts +1 -1
  51. package/dist/gamification/pattern-memory.d.ts.map +1 -1
  52. package/dist/gamification/pattern-memory.js.map +1 -1
  53. package/dist/gamification/profile.d.ts +2 -2
  54. package/dist/gamification/profile.d.ts.map +1 -1
  55. package/dist/gamification/profile.js +2 -15
  56. package/dist/gamification/profile.js.map +1 -1
  57. package/dist/gamification/types.d.ts +8 -2
  58. package/dist/gamification/types.d.ts.map +1 -1
  59. package/dist/gamification/types.js.map +1 -1
  60. package/dist/insights/index.d.ts.map +1 -1
  61. package/dist/insights/index.js +16 -4
  62. package/dist/insights/index.js.map +1 -1
  63. package/dist/insights/types.d.ts +14 -0
  64. package/dist/insights/types.d.ts.map +1 -1
  65. package/dist/learning/cadence.d.ts +15 -0
  66. package/dist/learning/cadence.d.ts.map +1 -0
  67. package/dist/learning/cadence.js +130 -0
  68. package/dist/learning/cadence.js.map +1 -0
  69. package/dist/learning/index.d.ts +19 -0
  70. package/dist/learning/index.d.ts.map +1 -0
  71. package/dist/learning/index.js +35 -0
  72. package/dist/learning/index.js.map +1 -0
  73. package/dist/learning/lessons-storage.d.ts +48 -0
  74. package/dist/learning/lessons-storage.d.ts.map +1 -0
  75. package/dist/learning/lessons-storage.js +266 -0
  76. package/dist/learning/lessons-storage.js.map +1 -0
  77. package/dist/learning/lessons-types.d.ts +83 -0
  78. package/dist/learning/lessons-types.d.ts.map +1 -0
  79. package/dist/learning/lessons-types.js +15 -0
  80. package/dist/learning/lessons-types.js.map +1 -0
  81. package/dist/learning/nudges.d.ts +20 -0
  82. package/dist/learning/nudges.d.ts.map +1 -0
  83. package/dist/learning/nudges.js +68 -0
  84. package/dist/learning/nudges.js.map +1 -0
  85. package/dist/learning/retrospective.d.ts +27 -0
  86. package/dist/learning/retrospective.d.ts.map +1 -0
  87. package/dist/learning/retrospective.js +184 -0
  88. package/dist/learning/retrospective.js.map +1 -0
  89. package/dist/learning/storage.d.ts +44 -0
  90. package/dist/learning/storage.d.ts.map +1 -0
  91. package/dist/learning/storage.js +194 -0
  92. package/dist/learning/storage.js.map +1 -0
  93. package/dist/learning/surfacing.d.ts +36 -0
  94. package/dist/learning/surfacing.d.ts.map +1 -0
  95. package/dist/learning/surfacing.js +255 -0
  96. package/dist/learning/surfacing.js.map +1 -0
  97. package/dist/learning/synthesis.d.ts +17 -0
  98. package/dist/learning/synthesis.d.ts.map +1 -0
  99. package/dist/learning/synthesis.js +293 -0
  100. package/dist/learning/synthesis.js.map +1 -0
  101. package/dist/learning/types.d.ts +60 -0
  102. package/dist/learning/types.d.ts.map +1 -0
  103. package/dist/learning/types.js +17 -0
  104. package/dist/learning/types.js.map +1 -0
  105. package/docs/METRICS.md +528 -0
  106. package/feature-list.json +21 -0
  107. package/package.json +1 -1
@@ -0,0 +1,561 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createSessionCommand = createSessionCommand;
40
+ exports.runSessionStartCli = runSessionStartCli;
41
+ exports.runSessionEndCli = runSessionEndCli;
42
+ const commander_1 = require("commander");
43
+ const chalk_1 = __importDefault(require("chalk"));
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const git_1 = require("../git");
47
+ const metrics_1 = require("../metrics");
48
+ const file_churn_1 = require("../metrics/file-churn");
49
+ const time_spiral_1 = require("../metrics/time-spiral");
50
+ const velocity_anomaly_1 = require("../metrics/velocity-anomaly");
51
+ const code_stability_1 = require("../metrics/code-stability");
52
+ const score_1 = require("../score");
53
+ // Session file stored in .vibe-check/active-session.json
54
+ const ACTIVE_SESSION_FILE = '.vibe-check/active-session.json';
55
+ // Known failure patterns and their detection criteria
56
+ const FAILURE_PATTERNS = [
57
+ {
58
+ id: 'debug_spiral',
59
+ name: 'Debug Spiral',
60
+ detect: (metrics, spirals) => spirals >= 2,
61
+ avoided: (metrics, spirals) => spirals === 0 && metrics.rework_ratio < 30,
62
+ },
63
+ {
64
+ id: 'context_amnesia',
65
+ name: 'Context Amnesia',
66
+ detect: (metrics) => metrics.rework_ratio > 50,
67
+ avoided: (metrics) => metrics.rework_ratio < 20,
68
+ },
69
+ {
70
+ id: 'velocity_crash',
71
+ name: 'Velocity Crash',
72
+ detect: (metrics) => metrics.iteration_velocity < 1,
73
+ avoided: (metrics) => metrics.iteration_velocity > 3,
74
+ },
75
+ {
76
+ id: 'trust_erosion',
77
+ name: 'Trust Erosion',
78
+ detect: (metrics) => metrics.trust_pass_rate < 60,
79
+ avoided: (metrics) => metrics.trust_pass_rate > 85,
80
+ },
81
+ {
82
+ id: 'flow_disruption',
83
+ name: 'Flow Disruption',
84
+ detect: (metrics) => metrics.flow_efficiency < 50,
85
+ avoided: (metrics) => metrics.flow_efficiency > 80,
86
+ },
87
+ ];
88
+ function getActiveSessionPath(repoPath) {
89
+ return path.join(repoPath, ACTIVE_SESSION_FILE);
90
+ }
91
+ function loadActiveSession(repoPath) {
92
+ const sessionPath = getActiveSessionPath(repoPath);
93
+ if (!fs.existsSync(sessionPath)) {
94
+ return null;
95
+ }
96
+ try {
97
+ return JSON.parse(fs.readFileSync(sessionPath, 'utf-8'));
98
+ }
99
+ catch {
100
+ return null;
101
+ }
102
+ }
103
+ function saveActiveSession(session, repoPath) {
104
+ const sessionPath = getActiveSessionPath(repoPath);
105
+ const dir = path.dirname(sessionPath);
106
+ if (!fs.existsSync(dir)) {
107
+ fs.mkdirSync(dir, { recursive: true });
108
+ }
109
+ fs.writeFileSync(sessionPath, JSON.stringify(session, null, 2));
110
+ }
111
+ function clearActiveSession(repoPath) {
112
+ const sessionPath = getActiveSessionPath(repoPath);
113
+ if (fs.existsSync(sessionPath)) {
114
+ fs.unlinkSync(sessionPath);
115
+ }
116
+ }
117
+ function generateSessionId() {
118
+ const now = new Date();
119
+ const date = now.toISOString().slice(0, 10);
120
+ const seq = String(Math.floor(Math.random() * 1000)).padStart(3, '0');
121
+ return `${date}-${seq}`;
122
+ }
123
+ function detectFailurePatterns(metrics, spiralCount) {
124
+ const hit = [];
125
+ const avoided = [];
126
+ for (const pattern of FAILURE_PATTERNS) {
127
+ if (pattern.detect(metrics, spiralCount)) {
128
+ hit.push(pattern.name);
129
+ }
130
+ else if (pattern.avoided(metrics, spiralCount)) {
131
+ avoided.push(pattern.name);
132
+ }
133
+ }
134
+ return { hit, avoided };
135
+ }
136
+ function generateLearnings(metrics, patternsHit, patternsAvoided, spiralCount) {
137
+ const learnings = [];
138
+ // Generate learnings based on what went well
139
+ if (patternsAvoided.includes('Debug Spiral')) {
140
+ learnings.push('Test-first approach prevented spirals');
141
+ }
142
+ if (patternsAvoided.includes('Context Amnesia')) {
143
+ learnings.push('Good documentation/commit hygiene maintained context');
144
+ }
145
+ if (metrics.trust_pass_rate > 90) {
146
+ learnings.push('High trust indicates appropriate vibe level choice');
147
+ }
148
+ if (metrics.flow_efficiency > 85) {
149
+ learnings.push('Flow state maintained - environment was well-prepared');
150
+ }
151
+ // Generate learnings based on what went wrong
152
+ if (patternsHit.includes('Debug Spiral')) {
153
+ learnings.push('Consider adding tracer tests before next similar task');
154
+ }
155
+ if (patternsHit.includes('Context Amnesia')) {
156
+ learnings.push('Break work into smaller, documented chunks');
157
+ }
158
+ if (spiralCount > 0) {
159
+ learnings.push(`${spiralCount} spiral(s) detected - review trigger patterns`);
160
+ }
161
+ return learnings;
162
+ }
163
+ function createSessionCommand() {
164
+ const cmd = new commander_1.Command('session')
165
+ .description('Session lifecycle integration for claude-progress.json');
166
+ // vibe-check session start
167
+ cmd
168
+ .command('start')
169
+ .description('Start a new session and capture baseline metrics')
170
+ .option('-l, --level <number>', 'Declared vibe level (0-5)', parseInt)
171
+ .option('-r, --repo <path>', 'Repository path', process.cwd())
172
+ .option('-f, --format <type>', 'Output format: terminal, json', 'terminal')
173
+ .action(async (options) => {
174
+ await runSessionStart(options);
175
+ });
176
+ // vibe-check session end
177
+ cmd
178
+ .command('end')
179
+ .description('End session and output metrics for claude-progress.json')
180
+ .option('-r, --repo <path>', 'Repository path', process.cwd())
181
+ .option('-f, --format <type>', 'Output format: terminal, json', 'json')
182
+ .action(async (options) => {
183
+ await runSessionEnd(options);
184
+ });
185
+ // vibe-check session status
186
+ cmd
187
+ .command('status')
188
+ .description('Show current session status')
189
+ .option('-r, --repo <path>', 'Repository path', process.cwd())
190
+ .action(async (options) => {
191
+ await runSessionStatus(options);
192
+ });
193
+ return cmd;
194
+ }
195
+ async function runSessionStart(options) {
196
+ const { level, repo, format } = options;
197
+ if (!(await (0, git_1.isGitRepo)(repo))) {
198
+ console.error(chalk_1.default.red(`Not a git repository: ${repo}`));
199
+ process.exit(1);
200
+ }
201
+ // Check for existing session
202
+ const existing = loadActiveSession(repo);
203
+ if (existing) {
204
+ if (format === 'json') {
205
+ console.log(JSON.stringify({ error: 'Session already active', session: existing }));
206
+ }
207
+ else {
208
+ console.log(chalk_1.default.yellow(`\nSession already active since ${existing.startedAt}`));
209
+ console.log(chalk_1.default.gray(`Run 'vibe-check session end' to complete it first.\n`));
210
+ }
211
+ process.exit(1);
212
+ }
213
+ // Capture baseline from last week
214
+ const commits = await (0, git_1.getCommits)(repo, '1 week ago');
215
+ let baseline = null;
216
+ if (commits.length >= 5) {
217
+ const result = (0, metrics_1.analyzeCommits)(commits);
218
+ baseline = {
219
+ trustPassRate: result.metrics.trustPassRate.value,
220
+ reworkRatio: result.metrics.reworkRatio.value,
221
+ iterationVelocity: result.metrics.iterationVelocity.value,
222
+ debugSpiralDuration: result.metrics.debugSpiralDuration.value,
223
+ flowEfficiency: result.metrics.flowEfficiency.value,
224
+ };
225
+ }
226
+ // Create new session
227
+ const session = {
228
+ id: generateSessionId(),
229
+ startedAt: new Date().toISOString(),
230
+ vibeLevel: level,
231
+ baseline,
232
+ };
233
+ saveActiveSession(session, repo);
234
+ if (format === 'json') {
235
+ console.log(JSON.stringify({
236
+ session_id: session.id,
237
+ started_at: session.startedAt,
238
+ vibe_level: session.vibeLevel ?? null,
239
+ baseline: session.baseline ? {
240
+ trust_pass_rate: session.baseline.trustPassRate,
241
+ rework_ratio: session.baseline.reworkRatio,
242
+ iteration_velocity: session.baseline.iterationVelocity,
243
+ debug_spiral_duration_min: session.baseline.debugSpiralDuration,
244
+ flow_efficiency: session.baseline.flowEfficiency,
245
+ } : null,
246
+ }, null, 2));
247
+ }
248
+ else {
249
+ console.log('');
250
+ console.log(chalk_1.default.bold.cyan('SESSION STARTED'));
251
+ console.log('');
252
+ console.log(` ID: ${session.id}`);
253
+ console.log(` Started: ${new Date(session.startedAt).toLocaleTimeString()}`);
254
+ if (level !== undefined) {
255
+ console.log(` Vibe Level: ${level}`);
256
+ }
257
+ console.log('');
258
+ if (baseline) {
259
+ console.log(chalk_1.default.gray(' Baseline (last 7 days):'));
260
+ console.log(chalk_1.default.gray(` Trust: ${Math.round(baseline.trustPassRate)}%`));
261
+ console.log(chalk_1.default.gray(` Rework: ${Math.round(baseline.reworkRatio)}%`));
262
+ console.log(chalk_1.default.gray(` Velocity: ${baseline.iterationVelocity.toFixed(1)}/hr`));
263
+ }
264
+ else {
265
+ console.log(chalk_1.default.gray(' No baseline yet (need 5+ commits from last week)'));
266
+ }
267
+ console.log('');
268
+ console.log(chalk_1.default.gray(` Run 'vibe-check session end' when done.\n`));
269
+ }
270
+ }
271
+ async function runSessionEnd(options) {
272
+ const { repo, format } = options;
273
+ if (!(await (0, git_1.isGitRepo)(repo))) {
274
+ console.error(chalk_1.default.red(`Not a git repository: ${repo}`));
275
+ process.exit(1);
276
+ }
277
+ // Load active session
278
+ const session = loadActiveSession(repo);
279
+ if (!session) {
280
+ if (format === 'json') {
281
+ console.log(JSON.stringify({ error: 'No active session' }));
282
+ }
283
+ else {
284
+ console.log(chalk_1.default.yellow('\nNo active session found.'));
285
+ console.log(chalk_1.default.gray(`Run 'vibe-check session start' first.\n`));
286
+ }
287
+ process.exit(1);
288
+ }
289
+ // Get commits since session start
290
+ const commits = await (0, git_1.getCommits)(repo, session.startedAt);
291
+ if (commits.length === 0) {
292
+ if (format === 'json') {
293
+ console.log(JSON.stringify({
294
+ error: 'No commits in session',
295
+ session_id: session.id,
296
+ started_at: session.startedAt,
297
+ }));
298
+ }
299
+ else {
300
+ console.log(chalk_1.default.yellow('\nNo commits found during this session.'));
301
+ console.log(chalk_1.default.gray(`Session started: ${session.startedAt}\n`));
302
+ }
303
+ // Clear the session anyway
304
+ clearActiveSession(repo);
305
+ process.exit(0);
306
+ }
307
+ // Analyze commits
308
+ const result = (0, metrics_1.analyzeCommits)(commits);
309
+ const spiralCount = result.fixChains.filter(fc => fc.isSpiral).length;
310
+ // Get enhanced metrics if possible
311
+ let vibeScoreValue;
312
+ try {
313
+ const fileStats = await (0, git_1.getFileStats)(repo, session.startedAt);
314
+ const fileChurn = (0, file_churn_1.calculateFileChurn)(commits, fileStats.filesPerCommit);
315
+ const timeSpiral = (0, time_spiral_1.calculateTimeSpiral)(commits);
316
+ const velocityAnomaly = (0, velocity_anomaly_1.calculateVelocityAnomaly)(commits);
317
+ const codeStability = (0, code_stability_1.calculateCodeStability)(commits, fileStats.lineStats);
318
+ const vibeScore = (0, score_1.calculateVibeScore)({
319
+ fileChurn,
320
+ timeSpiral,
321
+ velocityAnomaly,
322
+ codeStability,
323
+ });
324
+ vibeScoreValue = Math.round(vibeScore.value * 100);
325
+ }
326
+ catch {
327
+ // Enhanced metrics not available
328
+ }
329
+ // Build metrics output
330
+ const metrics = {
331
+ trust_pass_rate: Math.round(result.metrics.trustPassRate.value),
332
+ rework_ratio: Math.round(result.metrics.reworkRatio.value),
333
+ iteration_velocity: parseFloat(result.metrics.iterationVelocity.value.toFixed(1)),
334
+ debug_spiral_duration_min: Math.round(result.metrics.debugSpiralDuration.value),
335
+ flow_efficiency: Math.round(result.metrics.flowEfficiency.value),
336
+ };
337
+ if (vibeScoreValue !== undefined) {
338
+ metrics.vibe_score = vibeScoreValue;
339
+ }
340
+ // Detect failure patterns
341
+ const patterns = detectFailurePatterns(metrics, spiralCount);
342
+ // Generate learnings
343
+ const learnings = generateLearnings(metrics, patterns.hit, patterns.avoided, spiralCount);
344
+ // Compare to baseline
345
+ let baselineComparison = null;
346
+ if (session.baseline) {
347
+ const trustDelta = metrics.trust_pass_rate - session.baseline.trustPassRate;
348
+ const reworkDelta = metrics.rework_ratio - session.baseline.reworkRatio;
349
+ let verdict;
350
+ let message;
351
+ if (trustDelta > 5 && reworkDelta < 5) {
352
+ verdict = 'above';
353
+ message = 'Better than your baseline - great session!';
354
+ }
355
+ else if (trustDelta < -10 || reworkDelta > 10) {
356
+ verdict = 'below';
357
+ message = 'Rougher than usual - consider what caused friction';
358
+ }
359
+ else {
360
+ verdict = 'normal';
361
+ message = 'Typical session for you';
362
+ }
363
+ baselineComparison = {
364
+ trust_delta: Math.round(trustDelta),
365
+ rework_delta: Math.round(reworkDelta),
366
+ verdict,
367
+ message,
368
+ };
369
+ }
370
+ // Build final output
371
+ const output = {
372
+ session_id: session.id,
373
+ started_at: session.startedAt,
374
+ ended_at: new Date().toISOString(),
375
+ vibe_level: session.vibeLevel ?? null,
376
+ metrics,
377
+ commits: commits.length,
378
+ retro: {
379
+ failure_patterns_hit: patterns.hit,
380
+ failure_patterns_avoided: patterns.avoided,
381
+ spirals_detected: spiralCount,
382
+ learnings,
383
+ },
384
+ baseline_comparison: baselineComparison,
385
+ };
386
+ // Clear the session
387
+ clearActiveSession(repo);
388
+ if (format === 'json') {
389
+ console.log(JSON.stringify(output, null, 2));
390
+ }
391
+ else {
392
+ console.log('');
393
+ console.log(chalk_1.default.bold.cyan('SESSION COMPLETE'));
394
+ console.log('');
395
+ console.log(` ID: ${output.session_id}`);
396
+ console.log(` Duration: ${Math.round((new Date(output.ended_at).getTime() - new Date(output.started_at).getTime()) / 60000)} min`);
397
+ console.log(` Commits: ${output.commits}`);
398
+ if (output.vibe_level !== null) {
399
+ console.log(` Vibe Level: ${output.vibe_level}`);
400
+ }
401
+ console.log('');
402
+ console.log(chalk_1.default.bold(' Metrics:'));
403
+ console.log(` Trust Pass Rate: ${metrics.trust_pass_rate}%`);
404
+ console.log(` Rework Ratio: ${metrics.rework_ratio}%`);
405
+ console.log(` Iteration Velocity: ${metrics.iteration_velocity}/hr`);
406
+ console.log(` Flow Efficiency: ${metrics.flow_efficiency}%`);
407
+ if (metrics.vibe_score !== undefined) {
408
+ console.log(` VibeScore: ${metrics.vibe_score}%`);
409
+ }
410
+ console.log('');
411
+ if (patterns.hit.length > 0) {
412
+ console.log(chalk_1.default.yellow(' ⚠ Failure Patterns Hit:'));
413
+ for (const p of patterns.hit) {
414
+ console.log(chalk_1.default.yellow(` - ${p}`));
415
+ }
416
+ console.log('');
417
+ }
418
+ if (patterns.avoided.length > 0) {
419
+ console.log(chalk_1.default.green(' ✓ Patterns Avoided:'));
420
+ for (const p of patterns.avoided) {
421
+ console.log(chalk_1.default.green(` - ${p}`));
422
+ }
423
+ console.log('');
424
+ }
425
+ if (learnings.length > 0) {
426
+ console.log(chalk_1.default.gray(' Learnings:'));
427
+ for (const l of learnings) {
428
+ console.log(chalk_1.default.gray(` • ${l}`));
429
+ }
430
+ console.log('');
431
+ }
432
+ if (baselineComparison) {
433
+ const verdictColor = baselineComparison.verdict === 'above' ? chalk_1.default.green :
434
+ baselineComparison.verdict === 'below' ? chalk_1.default.yellow :
435
+ chalk_1.default.gray;
436
+ console.log(verdictColor(` ${baselineComparison.message}`));
437
+ console.log('');
438
+ }
439
+ console.log(chalk_1.default.gray(' Use --format json to get machine-readable output.\n'));
440
+ }
441
+ }
442
+ async function runSessionStatus(options) {
443
+ const { repo } = options;
444
+ const session = loadActiveSession(repo);
445
+ if (!session) {
446
+ console.log(chalk_1.default.gray('\nNo active session.\n'));
447
+ return;
448
+ }
449
+ const duration = Math.round((Date.now() - new Date(session.startedAt).getTime()) / 60000);
450
+ console.log('');
451
+ console.log(chalk_1.default.bold.cyan('ACTIVE SESSION'));
452
+ console.log('');
453
+ console.log(` ID: ${session.id}`);
454
+ console.log(` Started: ${new Date(session.startedAt).toLocaleString()}`);
455
+ console.log(` Duration: ${duration} min`);
456
+ if (session.vibeLevel !== undefined) {
457
+ console.log(` Vibe Level: ${session.vibeLevel}`);
458
+ }
459
+ console.log('');
460
+ // Show current commit count
461
+ try {
462
+ const commits = await (0, git_1.getCommits)(repo, session.startedAt);
463
+ console.log(` Commits so far: ${commits.length}`);
464
+ }
465
+ catch {
466
+ // Ignore errors
467
+ }
468
+ console.log('');
469
+ }
470
+ async function runSessionStartCli(options) {
471
+ await runSessionStart(options);
472
+ }
473
+ async function runSessionEndCli(options) {
474
+ const { repo, format } = options;
475
+ if (!(await (0, git_1.isGitRepo)(repo))) {
476
+ return null;
477
+ }
478
+ const session = loadActiveSession(repo);
479
+ if (!session) {
480
+ return null;
481
+ }
482
+ const commits = await (0, git_1.getCommits)(repo, session.startedAt);
483
+ if (commits.length === 0) {
484
+ clearActiveSession(repo);
485
+ return null;
486
+ }
487
+ const result = (0, metrics_1.analyzeCommits)(commits);
488
+ const spiralCount = result.fixChains.filter(fc => fc.isSpiral).length;
489
+ let vibeScoreValue;
490
+ try {
491
+ const fileStats = await (0, git_1.getFileStats)(repo, session.startedAt);
492
+ const fileChurn = (0, file_churn_1.calculateFileChurn)(commits, fileStats.filesPerCommit);
493
+ const timeSpiral = (0, time_spiral_1.calculateTimeSpiral)(commits);
494
+ const velocityAnomaly = (0, velocity_anomaly_1.calculateVelocityAnomaly)(commits);
495
+ const codeStability = (0, code_stability_1.calculateCodeStability)(commits, fileStats.lineStats);
496
+ const vibeScore = (0, score_1.calculateVibeScore)({
497
+ fileChurn,
498
+ timeSpiral,
499
+ velocityAnomaly,
500
+ codeStability,
501
+ });
502
+ vibeScoreValue = Math.round(vibeScore.value * 100);
503
+ }
504
+ catch {
505
+ // Enhanced metrics not available
506
+ }
507
+ const metrics = {
508
+ trust_pass_rate: Math.round(result.metrics.trustPassRate.value),
509
+ rework_ratio: Math.round(result.metrics.reworkRatio.value),
510
+ iteration_velocity: parseFloat(result.metrics.iterationVelocity.value.toFixed(1)),
511
+ debug_spiral_duration_min: Math.round(result.metrics.debugSpiralDuration.value),
512
+ flow_efficiency: Math.round(result.metrics.flowEfficiency.value),
513
+ };
514
+ if (vibeScoreValue !== undefined) {
515
+ metrics.vibe_score = vibeScoreValue;
516
+ }
517
+ const patterns = detectFailurePatterns(metrics, spiralCount);
518
+ const learnings = generateLearnings(metrics, patterns.hit, patterns.avoided, spiralCount);
519
+ let baselineComparison = null;
520
+ if (session.baseline) {
521
+ const trustDelta = metrics.trust_pass_rate - session.baseline.trustPassRate;
522
+ const reworkDelta = metrics.rework_ratio - session.baseline.reworkRatio;
523
+ let verdict;
524
+ let message;
525
+ if (trustDelta > 5 && reworkDelta < 5) {
526
+ verdict = 'above';
527
+ message = 'Better than your baseline - great session!';
528
+ }
529
+ else if (trustDelta < -10 || reworkDelta > 10) {
530
+ verdict = 'below';
531
+ message = 'Rougher than usual - consider what caused friction';
532
+ }
533
+ else {
534
+ verdict = 'normal';
535
+ message = 'Typical session for you';
536
+ }
537
+ baselineComparison = {
538
+ trust_delta: Math.round(trustDelta),
539
+ rework_delta: Math.round(reworkDelta),
540
+ verdict,
541
+ message,
542
+ };
543
+ }
544
+ clearActiveSession(repo);
545
+ return {
546
+ session_id: session.id,
547
+ started_at: session.startedAt,
548
+ ended_at: new Date().toISOString(),
549
+ vibe_level: session.vibeLevel ?? null,
550
+ metrics,
551
+ commits: commits.length,
552
+ retro: {
553
+ failure_patterns_hit: patterns.hit,
554
+ failure_patterns_avoided: patterns.avoided,
555
+ spirals_detected: spiralCount,
556
+ learnings,
557
+ },
558
+ baseline_comparison: baselineComparison,
559
+ };
560
+ }
561
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,7 @@ export * from './streaks';
3
3
  export * from './xp';
4
4
  export * from './achievements';
5
5
  export * from './profile';
6
- export * from './pattern-memory';
7
- export * from './intervention-memory';
6
+ export * from './stats';
8
7
  export { LEVELS, XP_REWARDS } from './types';
9
8
  export { ACHIEVEMENTS } from './achievements';
10
- export { INTERVENTION_INFO } from './intervention-memory';
11
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gamification/index.ts"],"names":[],"mappings":"AAEA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,MAAM,CAAC;AACrB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gamification/index.ts"],"names":[],"mappings":"AAEA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,MAAM,CAAC;AACrB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -15,20 +15,17 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
16
16
  };
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.INTERVENTION_INFO = exports.ACHIEVEMENTS = exports.XP_REWARDS = exports.LEVELS = void 0;
18
+ exports.ACHIEVEMENTS = exports.XP_REWARDS = exports.LEVELS = void 0;
19
19
  __exportStar(require("./types"), exports);
20
20
  __exportStar(require("./streaks"), exports);
21
21
  __exportStar(require("./xp"), exports);
22
22
  __exportStar(require("./achievements"), exports);
23
23
  __exportStar(require("./profile"), exports);
24
- __exportStar(require("./pattern-memory"), exports);
25
- __exportStar(require("./intervention-memory"), exports);
24
+ __exportStar(require("./stats"), exports);
26
25
  // Re-export commonly used items for convenience
27
26
  var types_1 = require("./types");
28
27
  Object.defineProperty(exports, "LEVELS", { enumerable: true, get: function () { return types_1.LEVELS; } });
29
28
  Object.defineProperty(exports, "XP_REWARDS", { enumerable: true, get: function () { return types_1.XP_REWARDS; } });
30
29
  var achievements_1 = require("./achievements");
31
30
  Object.defineProperty(exports, "ACHIEVEMENTS", { enumerable: true, get: function () { return achievements_1.ACHIEVEMENTS; } });
32
- var intervention_memory_1 = require("./intervention-memory");
33
- Object.defineProperty(exports, "INTERVENTION_INFO", { enumerable: true, get: function () { return intervention_memory_1.INTERVENTION_INFO; } });
34
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gamification/index.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;;;;;;;;;;;;;;;AAEpC,0CAAwB;AACxB,4CAA0B;AAC1B,uCAAqB;AACrB,iDAA+B;AAC/B,4CAA0B;AAC1B,mDAAiC;AACjC,wDAAsC;AAEtC,gDAAgD;AAChD,iCAA6C;AAApC,+FAAA,MAAM,OAAA;AAAE,mGAAA,UAAU,OAAA;AAC3B,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gamification/index.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;;;;;;;;;;;;;;;AAEpC,0CAAwB;AACxB,4CAA0B;AAC1B,uCAAqB;AACrB,iDAA+B;AAC/B,4CAA0B;AAC1B,0CAAwB;AAExB,gDAAgD;AAChD,iCAA6C;AAApC,+FAAA,MAAM,OAAA;AAAE,mGAAA,UAAU,OAAA;AAC3B,+CAA8C;AAArC,4GAAA,YAAY,OAAA"}
@@ -25,7 +25,7 @@ export declare function getPatternAdvice(pattern: string): string;
25
25
  /**
26
26
  * Format pattern memory for display
27
27
  */
28
- export declare function formatPatternMemory(memory: PatternMemory): {
28
+ export declare function formatPatternMemory(memory: PatternMemory | undefined): {
29
29
  hasData: boolean;
30
30
  summary: string;
31
31
  topPatterns: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"pattern-memory.d.ts","sourceRoot":"","sources":["../../src/gamification/pattern-memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAuB,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAKpC;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,aAAa,CAY1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,SAAS,EAAE,QAAQ,EAAE,GACpB,aAAa,CA6Bf;AA8DD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAW7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgBxD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG;IAC1D,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,KAAK,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,aAAa,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB,CA+CA"}
1
+ {"version":3,"file":"pattern-memory.d.ts","sourceRoot":"","sources":["../../src/gamification/pattern-memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAuB,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAKpC;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,aAAa,CAY1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,SAAS,EAAE,QAAQ,EAAE,GACpB,aAAa,CA6Bf;AA8DD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAW7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgBxD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG;IACtE,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,KAAK,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,aAAa,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB,CA+CA"}