@boshu2/vibe-check 1.6.2 → 1.8.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 (156) hide show
  1. package/.agents/bundles/actionable-coaching-plan-2025-12-02.md +209 -0
  2. package/.agents/bundles/automatic-learning-cadence-plan-2025-12-02.md +1297 -0
  3. package/.agents/bundles/automatic-learning-cadence-research-2025-12-02.md +481 -0
  4. package/.agents/bundles/dashboard-data-quality-plan.md +458 -0
  5. package/.agents/bundles/rating-scoring-alignment-plan.md +427 -0
  6. package/.agents/bundles/rpi-session-capture-plan-2025-12-02.md +693 -0
  7. package/.agents/bundles/rpi-session-capture-research-2025-12-02.md +433 -0
  8. package/.agents/bundles/session-integration-plan-2025-12-02.md +144 -0
  9. package/.agents/plans/git-forensics-enhancement-2025-12-05.md +493 -0
  10. package/.claude/skills/typescript-review.md +152 -0
  11. package/CHANGELOG.md +53 -0
  12. package/CLAUDE.md +79 -3
  13. package/Makefile +160 -0
  14. package/README.md +141 -155
  15. package/SECURITY.md +5 -1
  16. package/assets/logo-dark.svg +47 -0
  17. package/assets/logo.svg +47 -0
  18. package/claude-progress.json +54 -4
  19. package/claude-progress.txt +114 -0
  20. package/dashboard/app.js +699 -66
  21. package/dashboard/chart.min.js +20 -0
  22. package/dashboard/dashboard-data.js +764 -0
  23. package/dashboard/dashboard-data.json +182 -71
  24. package/dashboard/index.html +139 -14
  25. package/dashboard/styles.css +579 -4
  26. package/dist/analyzers/patterns.d.ts +62 -0
  27. package/dist/analyzers/patterns.d.ts.map +1 -0
  28. package/dist/analyzers/patterns.js +103 -0
  29. package/dist/analyzers/patterns.js.map +1 -0
  30. package/dist/analyzers/quality.d.ts +58 -0
  31. package/dist/analyzers/quality.d.ts.map +1 -0
  32. package/dist/analyzers/quality.js +114 -0
  33. package/dist/analyzers/quality.js.map +1 -0
  34. package/dist/analyzers/sessions.d.ts +45 -0
  35. package/dist/analyzers/sessions.d.ts.map +1 -0
  36. package/dist/analyzers/sessions.js +123 -0
  37. package/dist/analyzers/sessions.js.map +1 -0
  38. package/dist/cli.js +5 -1
  39. package/dist/cli.js.map +1 -1
  40. package/dist/commands/analyze.d.ts.map +1 -1
  41. package/dist/commands/analyze.js +43 -2
  42. package/dist/commands/analyze.js.map +1 -1
  43. package/dist/commands/dashboard.js +4 -1
  44. package/dist/commands/dashboard.js.map +1 -1
  45. package/dist/commands/forensics.d.ts +29 -0
  46. package/dist/commands/forensics.d.ts.map +1 -0
  47. package/dist/commands/forensics.js +213 -0
  48. package/dist/commands/forensics.js.map +1 -0
  49. package/dist/commands/index.d.ts +5 -1
  50. package/dist/commands/index.d.ts.map +1 -1
  51. package/dist/commands/index.js +13 -3
  52. package/dist/commands/index.js.map +1 -1
  53. package/dist/commands/insights.d.ts +3 -0
  54. package/dist/commands/insights.d.ts.map +1 -0
  55. package/dist/commands/insights.js +120 -0
  56. package/dist/commands/insights.js.map +1 -0
  57. package/dist/commands/learn.d.ts +3 -0
  58. package/dist/commands/learn.d.ts.map +1 -0
  59. package/dist/commands/learn.js +161 -0
  60. package/dist/commands/learn.js.map +1 -0
  61. package/dist/commands/lesson.d.ts +8 -0
  62. package/dist/commands/lesson.d.ts.map +1 -0
  63. package/dist/commands/lesson.js +206 -0
  64. package/dist/commands/lesson.js.map +1 -0
  65. package/dist/commands/pipeline.d.ts +3 -0
  66. package/dist/commands/pipeline.d.ts.map +1 -0
  67. package/dist/commands/pipeline.js +485 -0
  68. package/dist/commands/pipeline.js.map +1 -0
  69. package/dist/commands/profile.d.ts +0 -1
  70. package/dist/commands/profile.d.ts.map +1 -1
  71. package/dist/commands/profile.js +3 -206
  72. package/dist/commands/profile.js.map +1 -1
  73. package/dist/commands/session.d.ts +51 -0
  74. package/dist/commands/session.d.ts.map +1 -0
  75. package/dist/commands/session.js +599 -0
  76. package/dist/commands/session.js.map +1 -0
  77. package/dist/commands/sessions.d.ts +20 -0
  78. package/dist/commands/sessions.d.ts.map +1 -0
  79. package/dist/commands/sessions.js +201 -0
  80. package/dist/commands/sessions.js.map +1 -0
  81. package/dist/commands/watch.d.ts.map +1 -1
  82. package/dist/commands/watch.js +48 -7
  83. package/dist/commands/watch.js.map +1 -1
  84. package/dist/gamification/index.d.ts +1 -3
  85. package/dist/gamification/index.d.ts.map +1 -1
  86. package/dist/gamification/index.js +2 -5
  87. package/dist/gamification/index.js.map +1 -1
  88. package/dist/gamification/pattern-memory.d.ts +1 -1
  89. package/dist/gamification/pattern-memory.d.ts.map +1 -1
  90. package/dist/gamification/pattern-memory.js.map +1 -1
  91. package/dist/gamification/profile.d.ts +2 -2
  92. package/dist/gamification/profile.d.ts.map +1 -1
  93. package/dist/gamification/profile.js +2 -15
  94. package/dist/gamification/profile.js.map +1 -1
  95. package/dist/gamification/types.d.ts +8 -2
  96. package/dist/gamification/types.d.ts.map +1 -1
  97. package/dist/gamification/types.js.map +1 -1
  98. package/dist/insights/index.d.ts.map +1 -1
  99. package/dist/insights/index.js +16 -4
  100. package/dist/insights/index.js.map +1 -1
  101. package/dist/insights/types.d.ts +14 -0
  102. package/dist/insights/types.d.ts.map +1 -1
  103. package/dist/learning/cadence.d.ts +15 -0
  104. package/dist/learning/cadence.d.ts.map +1 -0
  105. package/dist/learning/cadence.js +130 -0
  106. package/dist/learning/cadence.js.map +1 -0
  107. package/dist/learning/index.d.ts +19 -0
  108. package/dist/learning/index.d.ts.map +1 -0
  109. package/dist/learning/index.js +35 -0
  110. package/dist/learning/index.js.map +1 -0
  111. package/dist/learning/lessons-storage.d.ts +48 -0
  112. package/dist/learning/lessons-storage.d.ts.map +1 -0
  113. package/dist/learning/lessons-storage.js +266 -0
  114. package/dist/learning/lessons-storage.js.map +1 -0
  115. package/dist/learning/lessons-types.d.ts +83 -0
  116. package/dist/learning/lessons-types.d.ts.map +1 -0
  117. package/dist/learning/lessons-types.js +15 -0
  118. package/dist/learning/lessons-types.js.map +1 -0
  119. package/dist/learning/nudges.d.ts +20 -0
  120. package/dist/learning/nudges.d.ts.map +1 -0
  121. package/dist/learning/nudges.js +68 -0
  122. package/dist/learning/nudges.js.map +1 -0
  123. package/dist/learning/retrospective.d.ts +27 -0
  124. package/dist/learning/retrospective.d.ts.map +1 -0
  125. package/dist/learning/retrospective.js +184 -0
  126. package/dist/learning/retrospective.js.map +1 -0
  127. package/dist/learning/storage.d.ts +44 -0
  128. package/dist/learning/storage.d.ts.map +1 -0
  129. package/dist/learning/storage.js +194 -0
  130. package/dist/learning/storage.js.map +1 -0
  131. package/dist/learning/surfacing.d.ts +36 -0
  132. package/dist/learning/surfacing.d.ts.map +1 -0
  133. package/dist/learning/surfacing.js +255 -0
  134. package/dist/learning/surfacing.js.map +1 -0
  135. package/dist/learning/synthesis.d.ts +17 -0
  136. package/dist/learning/synthesis.d.ts.map +1 -0
  137. package/dist/learning/synthesis.js +293 -0
  138. package/dist/learning/synthesis.js.map +1 -0
  139. package/dist/learning/types.d.ts +60 -0
  140. package/dist/learning/types.d.ts.map +1 -0
  141. package/dist/learning/types.js +17 -0
  142. package/dist/learning/types.js.map +1 -0
  143. package/dist/storage/index.d.ts +1 -0
  144. package/dist/storage/index.d.ts.map +1 -1
  145. package/dist/storage/index.js +11 -1
  146. package/dist/storage/index.js.map +1 -1
  147. package/dist/storage/spiral-history.d.ts +62 -0
  148. package/dist/storage/spiral-history.d.ts.map +1 -0
  149. package/dist/storage/spiral-history.js +265 -0
  150. package/dist/storage/spiral-history.js.map +1 -0
  151. package/docs/ARCHITECTURE.md +2 -10
  152. package/docs/GAMIFICATION.md +19 -266
  153. package/docs/METRICS.md +528 -0
  154. package/docs/VIBE-ECOSYSTEM.md +12 -78
  155. package/feature-list.json +141 -68
  156. package/package.json +1 -1
@@ -0,0 +1,599 @@
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
+ const spiral_history_1 = require("../storage/spiral-history");
54
+ // Session file stored in .vibe-check/active-session.json
55
+ const ACTIVE_SESSION_FILE = '.vibe-check/active-session.json';
56
+ // Known failure patterns and their detection criteria
57
+ const FAILURE_PATTERNS = [
58
+ {
59
+ id: 'debug_spiral',
60
+ name: 'Debug Spiral',
61
+ detect: (metrics, spirals) => spirals >= 2,
62
+ avoided: (metrics, spirals) => spirals === 0 && metrics.rework_ratio < 30,
63
+ },
64
+ {
65
+ id: 'context_amnesia',
66
+ name: 'Context Amnesia',
67
+ detect: (metrics) => metrics.rework_ratio > 50,
68
+ avoided: (metrics) => metrics.rework_ratio < 20,
69
+ },
70
+ {
71
+ id: 'velocity_crash',
72
+ name: 'Velocity Crash',
73
+ detect: (metrics) => metrics.iteration_velocity < 1,
74
+ avoided: (metrics) => metrics.iteration_velocity > 3,
75
+ },
76
+ {
77
+ id: 'trust_erosion',
78
+ name: 'Trust Erosion',
79
+ detect: (metrics) => metrics.trust_pass_rate < 60,
80
+ avoided: (metrics) => metrics.trust_pass_rate > 85,
81
+ },
82
+ {
83
+ id: 'flow_disruption',
84
+ name: 'Flow Disruption',
85
+ detect: (metrics) => metrics.flow_efficiency < 50,
86
+ avoided: (metrics) => metrics.flow_efficiency > 80,
87
+ },
88
+ ];
89
+ function getActiveSessionPath(repoPath) {
90
+ return path.join(repoPath, ACTIVE_SESSION_FILE);
91
+ }
92
+ function loadActiveSession(repoPath) {
93
+ const sessionPath = getActiveSessionPath(repoPath);
94
+ if (!fs.existsSync(sessionPath)) {
95
+ return null;
96
+ }
97
+ try {
98
+ return JSON.parse(fs.readFileSync(sessionPath, 'utf-8'));
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ }
104
+ function saveActiveSession(session, repoPath) {
105
+ const sessionPath = getActiveSessionPath(repoPath);
106
+ const dir = path.dirname(sessionPath);
107
+ if (!fs.existsSync(dir)) {
108
+ fs.mkdirSync(dir, { recursive: true });
109
+ }
110
+ fs.writeFileSync(sessionPath, JSON.stringify(session, null, 2));
111
+ }
112
+ function clearActiveSession(repoPath) {
113
+ const sessionPath = getActiveSessionPath(repoPath);
114
+ if (fs.existsSync(sessionPath)) {
115
+ fs.unlinkSync(sessionPath);
116
+ }
117
+ }
118
+ function generateSessionId() {
119
+ const now = new Date();
120
+ const date = now.toISOString().slice(0, 10);
121
+ const seq = String(Math.floor(Math.random() * 1000)).padStart(3, '0');
122
+ return `${date}-${seq}`;
123
+ }
124
+ function detectFailurePatterns(metrics, spiralCount) {
125
+ const hit = [];
126
+ const avoided = [];
127
+ for (const pattern of FAILURE_PATTERNS) {
128
+ if (pattern.detect(metrics, spiralCount)) {
129
+ hit.push(pattern.name);
130
+ }
131
+ else if (pattern.avoided(metrics, spiralCount)) {
132
+ avoided.push(pattern.name);
133
+ }
134
+ }
135
+ return { hit, avoided };
136
+ }
137
+ function generateLearnings(metrics, patternsHit, patternsAvoided, spiralCount) {
138
+ const learnings = [];
139
+ // Generate learnings based on what went well
140
+ if (patternsAvoided.includes('Debug Spiral')) {
141
+ learnings.push('Test-first approach prevented spirals');
142
+ }
143
+ if (patternsAvoided.includes('Context Amnesia')) {
144
+ learnings.push('Good documentation/commit hygiene maintained context');
145
+ }
146
+ if (metrics.trust_pass_rate > 90) {
147
+ learnings.push('High trust indicates appropriate vibe level choice');
148
+ }
149
+ if (metrics.flow_efficiency > 85) {
150
+ learnings.push('Flow state maintained - environment was well-prepared');
151
+ }
152
+ // Generate learnings based on what went wrong
153
+ if (patternsHit.includes('Debug Spiral')) {
154
+ learnings.push('Consider adding tracer tests before next similar task');
155
+ }
156
+ if (patternsHit.includes('Context Amnesia')) {
157
+ learnings.push('Break work into smaller, documented chunks');
158
+ }
159
+ if (spiralCount > 0) {
160
+ learnings.push(`${spiralCount} spiral(s) detected - review trigger patterns`);
161
+ }
162
+ return learnings;
163
+ }
164
+ function createSessionCommand() {
165
+ const cmd = new commander_1.Command('session')
166
+ .description('Session lifecycle integration for claude-progress.json');
167
+ // vibe-check session start
168
+ cmd
169
+ .command('start')
170
+ .description('Start a new session and capture baseline metrics')
171
+ .option('-l, --level <number>', 'Declared vibe level (0-5)', parseInt)
172
+ .option('-r, --repo <path>', 'Repository path', process.cwd())
173
+ .option('-f, --format <type>', 'Output format: terminal, json', 'terminal')
174
+ .action(async (options) => {
175
+ await runSessionStart(options);
176
+ });
177
+ // vibe-check session end
178
+ cmd
179
+ .command('end')
180
+ .description('End session and output metrics for claude-progress.json')
181
+ .option('-r, --repo <path>', 'Repository path', process.cwd())
182
+ .option('-f, --format <type>', 'Output format: terminal, json', 'json')
183
+ .action(async (options) => {
184
+ await runSessionEnd(options);
185
+ });
186
+ // vibe-check session status
187
+ cmd
188
+ .command('status')
189
+ .description('Show current session status')
190
+ .option('-r, --repo <path>', 'Repository path', process.cwd())
191
+ .action(async (options) => {
192
+ await runSessionStatus(options);
193
+ });
194
+ return cmd;
195
+ }
196
+ async function runSessionStart(options) {
197
+ const { level, repo, format } = options;
198
+ if (!(await (0, git_1.isGitRepo)(repo))) {
199
+ console.error(chalk_1.default.red(`Not a git repository: ${repo}`));
200
+ process.exit(1);
201
+ }
202
+ // Check for existing session
203
+ const existing = loadActiveSession(repo);
204
+ if (existing) {
205
+ if (format === 'json') {
206
+ console.log(JSON.stringify({ error: 'Session already active', session: existing }));
207
+ }
208
+ else {
209
+ console.log(chalk_1.default.yellow(`\nSession already active since ${existing.startedAt}`));
210
+ console.log(chalk_1.default.gray(`Run 'vibe-check session end' to complete it first.\n`));
211
+ }
212
+ process.exit(1);
213
+ }
214
+ // Capture baseline from last week
215
+ const commits = await (0, git_1.getCommits)(repo, '1 week ago');
216
+ let baseline = null;
217
+ if (commits.length >= 5) {
218
+ const result = (0, metrics_1.analyzeCommits)(commits);
219
+ baseline = {
220
+ trustPassRate: result.metrics.trustPassRate.value,
221
+ reworkRatio: result.metrics.reworkRatio.value,
222
+ iterationVelocity: result.metrics.iterationVelocity.value,
223
+ debugSpiralDuration: result.metrics.debugSpiralDuration.value,
224
+ flowEfficiency: result.metrics.flowEfficiency.value,
225
+ };
226
+ }
227
+ // Create new session
228
+ const session = {
229
+ id: generateSessionId(),
230
+ startedAt: new Date().toISOString(),
231
+ vibeLevel: level,
232
+ baseline,
233
+ };
234
+ saveActiveSession(session, repo);
235
+ if (format === 'json') {
236
+ console.log(JSON.stringify({
237
+ session_id: session.id,
238
+ started_at: session.startedAt,
239
+ vibe_level: session.vibeLevel ?? null,
240
+ baseline: session.baseline ? {
241
+ trust_pass_rate: session.baseline.trustPassRate,
242
+ rework_ratio: session.baseline.reworkRatio,
243
+ iteration_velocity: session.baseline.iterationVelocity,
244
+ debug_spiral_duration_min: session.baseline.debugSpiralDuration,
245
+ flow_efficiency: session.baseline.flowEfficiency,
246
+ } : null,
247
+ }, null, 2));
248
+ }
249
+ else {
250
+ console.log('');
251
+ console.log(chalk_1.default.bold.cyan('SESSION STARTED'));
252
+ console.log('');
253
+ console.log(` ID: ${session.id}`);
254
+ console.log(` Started: ${new Date(session.startedAt).toLocaleTimeString()}`);
255
+ if (level !== undefined) {
256
+ console.log(` Vibe Level: ${level}`);
257
+ }
258
+ console.log('');
259
+ if (baseline) {
260
+ console.log(chalk_1.default.gray(' Baseline (last 7 days):'));
261
+ console.log(chalk_1.default.gray(` Trust: ${Math.round(baseline.trustPassRate)}%`));
262
+ console.log(chalk_1.default.gray(` Rework: ${Math.round(baseline.reworkRatio)}%`));
263
+ console.log(chalk_1.default.gray(` Velocity: ${baseline.iterationVelocity.toFixed(1)}/hr`));
264
+ }
265
+ else {
266
+ console.log(chalk_1.default.gray(' No baseline yet (need 5+ commits from last week)'));
267
+ }
268
+ console.log('');
269
+ console.log(chalk_1.default.gray(` Run 'vibe-check session end' when done.\n`));
270
+ }
271
+ }
272
+ async function runSessionEnd(options) {
273
+ const { repo, format } = options;
274
+ if (!(await (0, git_1.isGitRepo)(repo))) {
275
+ console.error(chalk_1.default.red(`Not a git repository: ${repo}`));
276
+ process.exit(1);
277
+ }
278
+ // Load active session
279
+ const session = loadActiveSession(repo);
280
+ if (!session) {
281
+ if (format === 'json') {
282
+ console.log(JSON.stringify({ error: 'No active session' }));
283
+ }
284
+ else {
285
+ console.log(chalk_1.default.yellow('\nNo active session found.'));
286
+ console.log(chalk_1.default.gray(`Run 'vibe-check session start' first.\n`));
287
+ }
288
+ process.exit(1);
289
+ }
290
+ // Get commits since session start
291
+ const commits = await (0, git_1.getCommits)(repo, session.startedAt);
292
+ if (commits.length === 0) {
293
+ if (format === 'json') {
294
+ console.log(JSON.stringify({
295
+ error: 'No commits in session',
296
+ session_id: session.id,
297
+ started_at: session.startedAt,
298
+ }));
299
+ }
300
+ else {
301
+ console.log(chalk_1.default.yellow('\nNo commits found during this session.'));
302
+ console.log(chalk_1.default.gray(`Session started: ${session.startedAt}\n`));
303
+ }
304
+ // Clear the session anyway
305
+ clearActiveSession(repo);
306
+ process.exit(0);
307
+ }
308
+ // Analyze commits
309
+ const result = (0, metrics_1.analyzeCommits)(commits);
310
+ const spiralCount = result.fixChains.filter(fc => fc.isSpiral).length;
311
+ // Record detected spirals to history for personalized coaching
312
+ for (const chain of result.fixChains.filter(fc => fc.isSpiral)) {
313
+ (0, spiral_history_1.appendSpiral)(chain.pattern || 'OTHER', chain.component, chain.duration, chain.commits);
314
+ }
315
+ // Get enhanced metrics if possible
316
+ let vibeScoreValue;
317
+ try {
318
+ const fileStats = await (0, git_1.getFileStats)(repo, session.startedAt);
319
+ const fileChurn = (0, file_churn_1.calculateFileChurn)(commits, fileStats.filesPerCommit);
320
+ const timeSpiral = (0, time_spiral_1.calculateTimeSpiral)(commits);
321
+ const velocityAnomaly = (0, velocity_anomaly_1.calculateVelocityAnomaly)(commits);
322
+ const codeStability = (0, code_stability_1.calculateCodeStability)(commits, fileStats.lineStats);
323
+ const vibeScore = (0, score_1.calculateVibeScore)({
324
+ fileChurn,
325
+ timeSpiral,
326
+ velocityAnomaly,
327
+ codeStability,
328
+ });
329
+ vibeScoreValue = Math.round(vibeScore.value * 100);
330
+ }
331
+ catch {
332
+ // Enhanced metrics not available
333
+ }
334
+ // Build metrics output
335
+ const metrics = {
336
+ trust_pass_rate: Math.round(result.metrics.trustPassRate.value),
337
+ rework_ratio: Math.round(result.metrics.reworkRatio.value),
338
+ iteration_velocity: parseFloat(result.metrics.iterationVelocity.value.toFixed(1)),
339
+ debug_spiral_duration_min: Math.round(result.metrics.debugSpiralDuration.value),
340
+ flow_efficiency: Math.round(result.metrics.flowEfficiency.value),
341
+ };
342
+ if (vibeScoreValue !== undefined) {
343
+ metrics.vibe_score = vibeScoreValue;
344
+ }
345
+ // Detect failure patterns
346
+ const patterns = detectFailurePatterns(metrics, spiralCount);
347
+ // Generate learnings
348
+ const learnings = generateLearnings(metrics, patterns.hit, patterns.avoided, spiralCount);
349
+ // Compare to baseline
350
+ let baselineComparison = null;
351
+ if (session.baseline) {
352
+ const trustDelta = metrics.trust_pass_rate - session.baseline.trustPassRate;
353
+ const reworkDelta = metrics.rework_ratio - session.baseline.reworkRatio;
354
+ let verdict;
355
+ let message;
356
+ if (trustDelta > 5 && reworkDelta < 5) {
357
+ verdict = 'above';
358
+ message = 'Better than your baseline - great session!';
359
+ }
360
+ else if (trustDelta < -10 || reworkDelta > 10) {
361
+ verdict = 'below';
362
+ message = 'Rougher than usual - consider what caused friction';
363
+ }
364
+ else {
365
+ verdict = 'normal';
366
+ message = 'Typical session for you';
367
+ }
368
+ baselineComparison = {
369
+ trust_delta: Math.round(trustDelta),
370
+ rework_delta: Math.round(reworkDelta),
371
+ verdict,
372
+ message,
373
+ };
374
+ }
375
+ // Build final output
376
+ const output = {
377
+ session_id: session.id,
378
+ started_at: session.startedAt,
379
+ ended_at: new Date().toISOString(),
380
+ vibe_level: session.vibeLevel ?? null,
381
+ metrics,
382
+ commits: commits.length,
383
+ retro: {
384
+ failure_patterns_hit: patterns.hit,
385
+ failure_patterns_avoided: patterns.avoided,
386
+ spirals_detected: spiralCount,
387
+ learnings,
388
+ },
389
+ baseline_comparison: baselineComparison,
390
+ };
391
+ // Clear the session
392
+ clearActiveSession(repo);
393
+ if (format === 'json') {
394
+ console.log(JSON.stringify(output, null, 2));
395
+ }
396
+ else {
397
+ console.log('');
398
+ console.log(chalk_1.default.bold.cyan('SESSION COMPLETE'));
399
+ console.log('');
400
+ console.log(` ID: ${output.session_id}`);
401
+ console.log(` Duration: ${Math.round((new Date(output.ended_at).getTime() - new Date(output.started_at).getTime()) / 60000)} min`);
402
+ console.log(` Commits: ${output.commits}`);
403
+ if (output.vibe_level !== null) {
404
+ console.log(` Vibe Level: ${output.vibe_level}`);
405
+ }
406
+ console.log('');
407
+ console.log(chalk_1.default.bold(' Metrics:'));
408
+ console.log(` Trust Pass Rate: ${metrics.trust_pass_rate}%`);
409
+ console.log(` Rework Ratio: ${metrics.rework_ratio}%`);
410
+ console.log(` Iteration Velocity: ${metrics.iteration_velocity}/hr`);
411
+ console.log(` Flow Efficiency: ${metrics.flow_efficiency}%`);
412
+ if (metrics.vibe_score !== undefined) {
413
+ console.log(` VibeScore: ${metrics.vibe_score}%`);
414
+ }
415
+ console.log('');
416
+ if (patterns.hit.length > 0) {
417
+ console.log(chalk_1.default.yellow(' ⚠ Failure Patterns Hit:'));
418
+ for (const p of patterns.hit) {
419
+ console.log(chalk_1.default.yellow(` - ${p}`));
420
+ }
421
+ console.log('');
422
+ }
423
+ if (patterns.avoided.length > 0) {
424
+ console.log(chalk_1.default.green(' ✓ Patterns Avoided:'));
425
+ for (const p of patterns.avoided) {
426
+ console.log(chalk_1.default.green(` - ${p}`));
427
+ }
428
+ console.log('');
429
+ }
430
+ if (learnings.length > 0) {
431
+ console.log(chalk_1.default.gray(' Learnings:'));
432
+ for (const l of learnings) {
433
+ console.log(chalk_1.default.gray(` • ${l}`));
434
+ }
435
+ console.log('');
436
+ }
437
+ // Personalized coaching based on spiral history
438
+ if (spiralCount > 0) {
439
+ const spiralPatterns = result.fixChains
440
+ .filter(fc => fc.isSpiral && fc.pattern)
441
+ .map(fc => fc.pattern);
442
+ const uniquePatterns = [...new Set(spiralPatterns)];
443
+ if (uniquePatterns.length > 0) {
444
+ console.log(chalk_1.default.bold.cyan(' COACHING (based on your history):'));
445
+ console.log('');
446
+ for (const pattern of uniquePatterns.slice(0, 2)) {
447
+ const advice = (0, spiral_history_1.getAdvice)(pattern);
448
+ const patternName = (0, spiral_history_1.getPatternDisplayName)(pattern);
449
+ if (advice && advice.yourHistory.times > 1) {
450
+ console.log(chalk_1.default.yellow(` 🔄 You've hit ${patternName} ${advice.yourHistory.times} times`));
451
+ if (advice.whatWorked.length > 0) {
452
+ const topFix = advice.whatWorked[0];
453
+ console.log(chalk_1.default.white(` Your go-to fix: ${(0, spiral_history_1.getResolutionDisplayName)(topFix.resolution).toLowerCase()}`));
454
+ }
455
+ console.log(chalk_1.default.cyan(` → ${advice.suggestion}`));
456
+ console.log('');
457
+ }
458
+ else if (advice) {
459
+ console.log(chalk_1.default.yellow(` 🆕 First time hitting ${patternName}`));
460
+ console.log(chalk_1.default.cyan(` → ${advice.suggestion}`));
461
+ console.log('');
462
+ }
463
+ }
464
+ }
465
+ }
466
+ if (baselineComparison) {
467
+ const verdictColor = baselineComparison.verdict === 'above' ? chalk_1.default.green :
468
+ baselineComparison.verdict === 'below' ? chalk_1.default.yellow :
469
+ chalk_1.default.gray;
470
+ console.log(verdictColor(` ${baselineComparison.message}`));
471
+ console.log('');
472
+ }
473
+ console.log(chalk_1.default.gray(' Use --format json to get machine-readable output.\n'));
474
+ }
475
+ }
476
+ async function runSessionStatus(options) {
477
+ const { repo } = options;
478
+ const session = loadActiveSession(repo);
479
+ if (!session) {
480
+ console.log(chalk_1.default.gray('\nNo active session.\n'));
481
+ return;
482
+ }
483
+ const duration = Math.round((Date.now() - new Date(session.startedAt).getTime()) / 60000);
484
+ console.log('');
485
+ console.log(chalk_1.default.bold.cyan('ACTIVE SESSION'));
486
+ console.log('');
487
+ console.log(` ID: ${session.id}`);
488
+ console.log(` Started: ${new Date(session.startedAt).toLocaleString()}`);
489
+ console.log(` Duration: ${duration} min`);
490
+ if (session.vibeLevel !== undefined) {
491
+ console.log(` Vibe Level: ${session.vibeLevel}`);
492
+ }
493
+ console.log('');
494
+ // Show current commit count
495
+ try {
496
+ const commits = await (0, git_1.getCommits)(repo, session.startedAt);
497
+ console.log(` Commits so far: ${commits.length}`);
498
+ }
499
+ catch {
500
+ // Ignore errors
501
+ }
502
+ console.log('');
503
+ }
504
+ async function runSessionStartCli(options) {
505
+ await runSessionStart(options);
506
+ }
507
+ async function runSessionEndCli(options) {
508
+ const { repo, format } = options;
509
+ if (!(await (0, git_1.isGitRepo)(repo))) {
510
+ return null;
511
+ }
512
+ const session = loadActiveSession(repo);
513
+ if (!session) {
514
+ return null;
515
+ }
516
+ const commits = await (0, git_1.getCommits)(repo, session.startedAt);
517
+ if (commits.length === 0) {
518
+ clearActiveSession(repo);
519
+ return null;
520
+ }
521
+ const result = (0, metrics_1.analyzeCommits)(commits);
522
+ const spiralCount = result.fixChains.filter(fc => fc.isSpiral).length;
523
+ // Record detected spirals to history for personalized coaching
524
+ for (const chain of result.fixChains.filter(fc => fc.isSpiral)) {
525
+ (0, spiral_history_1.appendSpiral)(chain.pattern || 'OTHER', chain.component, chain.duration, chain.commits);
526
+ }
527
+ let vibeScoreValue;
528
+ try {
529
+ const fileStats = await (0, git_1.getFileStats)(repo, session.startedAt);
530
+ const fileChurn = (0, file_churn_1.calculateFileChurn)(commits, fileStats.filesPerCommit);
531
+ const timeSpiral = (0, time_spiral_1.calculateTimeSpiral)(commits);
532
+ const velocityAnomaly = (0, velocity_anomaly_1.calculateVelocityAnomaly)(commits);
533
+ const codeStability = (0, code_stability_1.calculateCodeStability)(commits, fileStats.lineStats);
534
+ const vibeScore = (0, score_1.calculateVibeScore)({
535
+ fileChurn,
536
+ timeSpiral,
537
+ velocityAnomaly,
538
+ codeStability,
539
+ });
540
+ vibeScoreValue = Math.round(vibeScore.value * 100);
541
+ }
542
+ catch {
543
+ // Enhanced metrics not available
544
+ }
545
+ const metrics = {
546
+ trust_pass_rate: Math.round(result.metrics.trustPassRate.value),
547
+ rework_ratio: Math.round(result.metrics.reworkRatio.value),
548
+ iteration_velocity: parseFloat(result.metrics.iterationVelocity.value.toFixed(1)),
549
+ debug_spiral_duration_min: Math.round(result.metrics.debugSpiralDuration.value),
550
+ flow_efficiency: Math.round(result.metrics.flowEfficiency.value),
551
+ };
552
+ if (vibeScoreValue !== undefined) {
553
+ metrics.vibe_score = vibeScoreValue;
554
+ }
555
+ const patterns = detectFailurePatterns(metrics, spiralCount);
556
+ const learnings = generateLearnings(metrics, patterns.hit, patterns.avoided, spiralCount);
557
+ let baselineComparison = null;
558
+ if (session.baseline) {
559
+ const trustDelta = metrics.trust_pass_rate - session.baseline.trustPassRate;
560
+ const reworkDelta = metrics.rework_ratio - session.baseline.reworkRatio;
561
+ let verdict;
562
+ let message;
563
+ if (trustDelta > 5 && reworkDelta < 5) {
564
+ verdict = 'above';
565
+ message = 'Better than your baseline - great session!';
566
+ }
567
+ else if (trustDelta < -10 || reworkDelta > 10) {
568
+ verdict = 'below';
569
+ message = 'Rougher than usual - consider what caused friction';
570
+ }
571
+ else {
572
+ verdict = 'normal';
573
+ message = 'Typical session for you';
574
+ }
575
+ baselineComparison = {
576
+ trust_delta: Math.round(trustDelta),
577
+ rework_delta: Math.round(reworkDelta),
578
+ verdict,
579
+ message,
580
+ };
581
+ }
582
+ clearActiveSession(repo);
583
+ return {
584
+ session_id: session.id,
585
+ started_at: session.startedAt,
586
+ ended_at: new Date().toISOString(),
587
+ vibe_level: session.vibeLevel ?? null,
588
+ metrics,
589
+ commits: commits.length,
590
+ retro: {
591
+ failure_patterns_hit: patterns.hit,
592
+ failure_patterns_avoided: patterns.avoided,
593
+ spirals_detected: spiralCount,
594
+ learnings,
595
+ },
596
+ baseline_comparison: baselineComparison,
597
+ };
598
+ }
599
+ //# 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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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Sessions Command (VIBE-046)
3
+ *
4
+ * Identify work sessions from git history using configurable time gap threshold.
5
+ * Proven algorithm from release-engineering retrospective.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { SessionDetectionResult } from '../analyzers/sessions';
9
+ export interface SessionsOptions {
10
+ since?: string;
11
+ until?: string;
12
+ threshold: number;
13
+ format: string;
14
+ repo: string;
15
+ verbose: boolean;
16
+ limit?: number;
17
+ }
18
+ export declare function createSessionsCommand(): Command;
19
+ export declare function runSessions(options: SessionsOptions): Promise<SessionDetectionResult | null>;
20
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAkB,sBAAsB,EAAmB,MAAM,uBAAuB,CAAC;AAGhG,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAuB/C;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAqDlG"}