@boshu2/vibe-check 1.0.2 → 1.2.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 (133) hide show
  1. package/.agents/bundles/ml-learning-loop-complete-plan-2025-11-28.md +908 -0
  2. package/.agents/bundles/unified-vibe-system-plan-phase1-2025-11-28.md +962 -0
  3. package/.agents/bundles/unified-vibe-system-research-2025-11-28.md +1003 -0
  4. package/.agents/bundles/vibe-check-ecosystem-plan-2025-11-29.md +635 -0
  5. package/.agents/bundles/vibe-check-gamification-complete-2025-11-29.md +132 -0
  6. package/.agents/bundles/vibe-score-scientific-framework-2025-11-28.md +602 -0
  7. package/.vibe-check/calibration.json +38 -0
  8. package/.vibe-check/latest.json +114 -0
  9. package/CHANGELOG.md +47 -0
  10. package/CLAUDE.md +178 -0
  11. package/README.md +222 -7
  12. package/action.yml +270 -0
  13. package/dashboard/app.js +494 -0
  14. package/dashboard/index.html +235 -0
  15. package/dashboard/styles.css +647 -0
  16. package/dist/calibration/ece.d.ts +26 -0
  17. package/dist/calibration/ece.d.ts.map +1 -0
  18. package/dist/calibration/ece.js +93 -0
  19. package/dist/calibration/ece.js.map +1 -0
  20. package/dist/calibration/index.d.ts +3 -0
  21. package/dist/calibration/index.d.ts.map +1 -0
  22. package/dist/calibration/index.js +15 -0
  23. package/dist/calibration/index.js.map +1 -0
  24. package/dist/calibration/storage.d.ts +34 -0
  25. package/dist/calibration/storage.d.ts.map +1 -0
  26. package/dist/calibration/storage.js +188 -0
  27. package/dist/calibration/storage.js.map +1 -0
  28. package/dist/cli.js +31 -76
  29. package/dist/cli.js.map +1 -1
  30. package/dist/commands/analyze.d.ts +16 -0
  31. package/dist/commands/analyze.d.ts.map +1 -0
  32. package/dist/commands/analyze.js +256 -0
  33. package/dist/commands/analyze.js.map +1 -0
  34. package/dist/commands/index.d.ts +5 -0
  35. package/dist/commands/index.d.ts.map +1 -0
  36. package/dist/commands/index.js +13 -0
  37. package/dist/commands/index.js.map +1 -0
  38. package/dist/commands/init-hook.d.ts +3 -0
  39. package/dist/commands/init-hook.d.ts.map +1 -0
  40. package/dist/commands/init-hook.js +161 -0
  41. package/dist/commands/init-hook.js.map +1 -0
  42. package/dist/commands/level.d.ts +3 -0
  43. package/dist/commands/level.d.ts.map +1 -0
  44. package/dist/commands/level.js +277 -0
  45. package/dist/commands/level.js.map +1 -0
  46. package/dist/commands/profile.d.ts +4 -0
  47. package/dist/commands/profile.d.ts.map +1 -0
  48. package/dist/commands/profile.js +143 -0
  49. package/dist/commands/profile.js.map +1 -0
  50. package/dist/gamification/achievements.d.ts +15 -0
  51. package/dist/gamification/achievements.d.ts.map +1 -0
  52. package/dist/gamification/achievements.js +273 -0
  53. package/dist/gamification/achievements.js.map +1 -0
  54. package/dist/gamification/index.d.ts +8 -0
  55. package/dist/gamification/index.d.ts.map +1 -0
  56. package/dist/gamification/index.js +30 -0
  57. package/dist/gamification/index.js.map +1 -0
  58. package/dist/gamification/profile.d.ts +46 -0
  59. package/dist/gamification/profile.d.ts.map +1 -0
  60. package/dist/gamification/profile.js +272 -0
  61. package/dist/gamification/profile.js.map +1 -0
  62. package/dist/gamification/streaks.d.ts +26 -0
  63. package/dist/gamification/streaks.d.ts.map +1 -0
  64. package/dist/gamification/streaks.js +132 -0
  65. package/dist/gamification/streaks.js.map +1 -0
  66. package/dist/gamification/types.d.ts +111 -0
  67. package/dist/gamification/types.d.ts.map +1 -0
  68. package/dist/gamification/types.js +26 -0
  69. package/dist/gamification/types.js.map +1 -0
  70. package/dist/gamification/xp.d.ts +37 -0
  71. package/dist/gamification/xp.d.ts.map +1 -0
  72. package/dist/gamification/xp.js +115 -0
  73. package/dist/gamification/xp.js.map +1 -0
  74. package/dist/git.d.ts +11 -0
  75. package/dist/git.d.ts.map +1 -1
  76. package/dist/git.js +52 -0
  77. package/dist/git.js.map +1 -1
  78. package/dist/metrics/code-stability.d.ts +13 -0
  79. package/dist/metrics/code-stability.d.ts.map +1 -0
  80. package/dist/metrics/code-stability.js +74 -0
  81. package/dist/metrics/code-stability.js.map +1 -0
  82. package/dist/metrics/file-churn.d.ts +8 -0
  83. package/dist/metrics/file-churn.d.ts.map +1 -0
  84. package/dist/metrics/file-churn.js +75 -0
  85. package/dist/metrics/file-churn.js.map +1 -0
  86. package/dist/metrics/time-spiral.d.ts +8 -0
  87. package/dist/metrics/time-spiral.d.ts.map +1 -0
  88. package/dist/metrics/time-spiral.js +69 -0
  89. package/dist/metrics/time-spiral.js.map +1 -0
  90. package/dist/metrics/velocity-anomaly.d.ts +13 -0
  91. package/dist/metrics/velocity-anomaly.d.ts.map +1 -0
  92. package/dist/metrics/velocity-anomaly.js +67 -0
  93. package/dist/metrics/velocity-anomaly.js.map +1 -0
  94. package/dist/output/index.d.ts +6 -3
  95. package/dist/output/index.d.ts.map +1 -1
  96. package/dist/output/index.js +4 -3
  97. package/dist/output/index.js.map +1 -1
  98. package/dist/output/json.d.ts +2 -2
  99. package/dist/output/json.d.ts.map +1 -1
  100. package/dist/output/json.js +54 -0
  101. package/dist/output/json.js.map +1 -1
  102. package/dist/output/markdown.d.ts +2 -2
  103. package/dist/output/markdown.d.ts.map +1 -1
  104. package/dist/output/markdown.js +34 -1
  105. package/dist/output/markdown.js.map +1 -1
  106. package/dist/output/terminal.d.ts +6 -2
  107. package/dist/output/terminal.d.ts.map +1 -1
  108. package/dist/output/terminal.js +131 -3
  109. package/dist/output/terminal.js.map +1 -1
  110. package/dist/recommend/index.d.ts +3 -0
  111. package/dist/recommend/index.d.ts.map +1 -0
  112. package/dist/recommend/index.js +14 -0
  113. package/dist/recommend/index.js.map +1 -0
  114. package/dist/recommend/ordered-logistic.d.ts +49 -0
  115. package/dist/recommend/ordered-logistic.d.ts.map +1 -0
  116. package/dist/recommend/ordered-logistic.js +153 -0
  117. package/dist/recommend/ordered-logistic.js.map +1 -0
  118. package/dist/recommend/questions.d.ts +19 -0
  119. package/dist/recommend/questions.d.ts.map +1 -0
  120. package/dist/recommend/questions.js +73 -0
  121. package/dist/recommend/questions.js.map +1 -0
  122. package/dist/score/index.d.ts +21 -0
  123. package/dist/score/index.d.ts.map +1 -0
  124. package/dist/score/index.js +48 -0
  125. package/dist/score/index.js.map +1 -0
  126. package/dist/score/weights.d.ts +16 -0
  127. package/dist/score/weights.d.ts.map +1 -0
  128. package/dist/score/weights.js +28 -0
  129. package/dist/score/weights.js.map +1 -0
  130. package/dist/types.d.ts +83 -0
  131. package/dist/types.d.ts.map +1 -1
  132. package/hooks/pre-push +103 -0
  133. package/package.json +10 -9
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateCodeStability = calculateCodeStability;
4
+ /**
5
+ * Calculate code stability score.
6
+ * Measures what percentage of added lines survive.
7
+ *
8
+ * NOTE: Full implementation requires git blame analysis.
9
+ * This is a simplified version using addition/deletion ratios.
10
+ */
11
+ function calculateCodeStability(commits, stats) {
12
+ if (!stats || stats.length === 0) {
13
+ // Without stats, estimate from commit patterns
14
+ return estimateStability(commits);
15
+ }
16
+ let totalAdditions = 0;
17
+ let totalDeletions = 0;
18
+ for (const stat of stats) {
19
+ totalAdditions += stat.additions;
20
+ totalDeletions += stat.deletions;
21
+ }
22
+ // Stability = net retention
23
+ // If deletions > additions, code is being removed (refactoring)
24
+ // If additions > deletions, code is being added
25
+ // High churn (both high) = low stability
26
+ const churnRate = totalAdditions > 0
27
+ ? Math.min(totalDeletions / totalAdditions, 1.0)
28
+ : 0;
29
+ const score = 1 - (churnRate * 0.5); // Partial penalty for deletions
30
+ return {
31
+ value: Math.round(score * 100),
32
+ unit: '%',
33
+ rating: getStabilityRating(score),
34
+ description: getStabilityDescription(score, totalAdditions, totalDeletions),
35
+ linesAdded: totalAdditions,
36
+ linesSurviving: Math.round(totalAdditions * score),
37
+ };
38
+ }
39
+ function estimateStability(commits) {
40
+ // Without line stats, use commit message patterns
41
+ const fixCommits = commits.filter(c => c.message.toLowerCase().includes('fix') ||
42
+ c.message.toLowerCase().includes('revert') ||
43
+ c.message.toLowerCase().includes('undo')).length;
44
+ const fixRatio = commits.length > 0 ? fixCommits / commits.length : 0;
45
+ const score = 1 - fixRatio;
46
+ return {
47
+ value: Math.round(score * 100),
48
+ unit: '%',
49
+ rating: getStabilityRating(score),
50
+ description: `Estimated: ${Math.round(fixRatio * 100)}% fix/revert commits`,
51
+ linesAdded: 0,
52
+ linesSurviving: 0,
53
+ };
54
+ }
55
+ function getStabilityRating(score) {
56
+ if (score >= 0.85)
57
+ return 'elite';
58
+ if (score >= 0.70)
59
+ return 'high';
60
+ if (score >= 0.50)
61
+ return 'medium';
62
+ return 'low';
63
+ }
64
+ function getStabilityDescription(score, added, deleted) {
65
+ const pct = Math.round(score * 100);
66
+ if (score >= 0.85)
67
+ return `Elite: ${pct}% stability (+${added}/-${deleted})`;
68
+ if (score >= 0.70)
69
+ return `High: ${pct}% stability (+${added}/-${deleted})`;
70
+ if (score >= 0.50)
71
+ return `Medium: ${pct}% stability (+${added}/-${deleted})`;
72
+ return `Low: ${pct}% stability (+${added}/-${deleted}) - high churn`;
73
+ }
74
+ //# sourceMappingURL=code-stability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-stability.js","sourceRoot":"","sources":["../../src/metrics/code-stability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Commit, FileChurnResult } from '../types';
2
+ /**
3
+ * Calculate file churn score.
4
+ * Files touched 3+ times within 1 hour indicate thrashing.
5
+ * Works WITHOUT semantic commits.
6
+ */
7
+ export declare function calculateFileChurn(commits: Commit[], filesPerCommit: Map<string, string[]>): FileChurnResult;
8
+ //# sourceMappingURL=file-churn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-churn.d.ts","sourceRoot":"","sources":["../../src/metrics/file-churn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAU,MAAM,UAAU,CAAC;AAiB3D;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EAAE,EACjB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACpC,eAAe,CAuCjB"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateFileChurn = calculateFileChurn;
4
+ const ONE_HOUR_MS = 60 * 60 * 1000;
5
+ /**
6
+ * Churn threshold: 3+ touches to same file within 1 hour suggests thrashing.
7
+ *
8
+ * Rationale: Healthy development typically touches a file 1-2 times per
9
+ * feature. Returning to the same file 3+ times in an hour often indicates:
10
+ * - Incomplete understanding before starting
11
+ * - Cascading changes from unexpected dependencies
12
+ * - Debugging loops
13
+ *
14
+ * NOT empirically validated. Your mileage may vary.
15
+ */
16
+ const CHURN_THRESHOLD = 3;
17
+ /**
18
+ * Calculate file churn score.
19
+ * Files touched 3+ times within 1 hour indicate thrashing.
20
+ * Works WITHOUT semantic commits.
21
+ */
22
+ function calculateFileChurn(commits, filesPerCommit) {
23
+ // Track file touch timestamps
24
+ const fileTouchTimes = new Map();
25
+ for (const commit of commits) {
26
+ const files = filesPerCommit.get(commit.hash) || [];
27
+ for (const file of files) {
28
+ const times = fileTouchTimes.get(file) || [];
29
+ times.push(commit.date);
30
+ fileTouchTimes.set(file, times);
31
+ }
32
+ }
33
+ // Count files with 3+ touches in 1 hour
34
+ let churnedFiles = 0;
35
+ for (const [_file, times] of fileTouchTimes) {
36
+ const sorted = times.sort((a, b) => a.getTime() - b.getTime());
37
+ for (let i = 0; i <= sorted.length - CHURN_THRESHOLD; i++) {
38
+ const span = sorted[i + CHURN_THRESHOLD - 1].getTime() - sorted[i].getTime();
39
+ if (span < ONE_HOUR_MS) {
40
+ churnedFiles++;
41
+ break; // Count each file only once
42
+ }
43
+ }
44
+ }
45
+ const totalFiles = fileTouchTimes.size;
46
+ const churnRatio = totalFiles > 0 ? churnedFiles / totalFiles : 0;
47
+ const score = 1 - churnRatio; // Invert: high score = low churn
48
+ return {
49
+ value: Math.round(score * 100),
50
+ unit: '%',
51
+ rating: getChurnRating(churnRatio),
52
+ description: getChurnDescription(churnRatio, churnedFiles, totalFiles),
53
+ churnedFiles,
54
+ totalFiles,
55
+ };
56
+ }
57
+ function getChurnRating(churnRatio) {
58
+ if (churnRatio < 0.10)
59
+ return 'elite';
60
+ if (churnRatio < 0.25)
61
+ return 'high';
62
+ if (churnRatio < 0.40)
63
+ return 'medium';
64
+ return 'low';
65
+ }
66
+ function getChurnDescription(ratio, churned, total) {
67
+ if (ratio < 0.10)
68
+ return `Elite: ${churned}/${total} files churned (<10%)`;
69
+ if (ratio < 0.25)
70
+ return `High: ${churned}/${total} files churned (10-25%)`;
71
+ if (ratio < 0.40)
72
+ return `Medium: ${churned}/${total} files churned (25-40%)`;
73
+ return `Low: ${churned}/${total} files churned (>40%) - significant thrashing`;
74
+ }
75
+ //# sourceMappingURL=file-churn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-churn.js","sourceRoot":"","sources":["../../src/metrics/file-churn.ts"],"names":[],"mappings":";;AAsBA,gDA0CC;AA9DD,MAAM,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnC;;;;;;;;;;GAUG;AACH,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B;;;;GAIG;AACH,SAAgB,kBAAkB,CAChC,OAAiB,EACjB,cAAqC;IAErC,8BAA8B;IAC9B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACxB,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAE/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC7E,IAAI,IAAI,GAAG,WAAW,EAAE,CAAC;gBACvB,YAAY,EAAE,CAAC;gBACf,MAAM,CAAC,4BAA4B;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC;IACvC,MAAM,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,iCAAiC;IAE/D,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;QAC9B,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC;QAClC,WAAW,EAAE,mBAAmB,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC;QACtE,YAAY;QACZ,UAAU;KACX,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB;IACxC,IAAI,UAAU,GAAG,IAAI;QAAE,OAAO,OAAO,CAAC;IACtC,IAAI,UAAU,GAAG,IAAI;QAAE,OAAO,MAAM,CAAC;IACrC,IAAI,UAAU,GAAG,IAAI;QAAE,OAAO,QAAQ,CAAC;IACvC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa,EAAE,OAAe,EAAE,KAAa;IACxE,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,UAAU,OAAO,IAAI,KAAK,uBAAuB,CAAC;IAC3E,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,SAAS,OAAO,IAAI,KAAK,yBAAyB,CAAC;IAC5E,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,WAAW,OAAO,IAAI,KAAK,yBAAyB,CAAC;IAC9E,OAAO,QAAQ,OAAO,IAAI,KAAK,+CAA+C,CAAC;AACjF,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Commit, TimeSpiralResult } from '../types';
2
+ /**
3
+ * Calculate time spiral score.
4
+ * Commits <5 minutes apart indicate frustrated rapid iteration.
5
+ * Works WITHOUT semantic commits.
6
+ */
7
+ export declare function calculateTimeSpiral(commits: Commit[]): TimeSpiralResult;
8
+ //# sourceMappingURL=time-spiral.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-spiral.d.ts","sourceRoot":"","sources":["../../src/metrics/time-spiral.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAU,MAAM,UAAU,CAAC;AAe5D;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAiCvE"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateTimeSpiral = calculateTimeSpiral;
4
+ /**
5
+ * Spiral threshold: commits < 5 minutes apart suggest frustrated iteration.
6
+ *
7
+ * Rationale: Based on practitioner observation that commits faster than
8
+ * "think → code → test → commit" cycle (~5-10 min) often indicate:
9
+ * - Quick fixes to previous commit
10
+ * - Debugging iterations
11
+ * - "Oops forgot to save" patterns
12
+ *
13
+ * NOT empirically validated. Adjust based on your workflow.
14
+ */
15
+ const SPIRAL_THRESHOLD_MS = 5 * 60 * 1000;
16
+ /**
17
+ * Calculate time spiral score.
18
+ * Commits <5 minutes apart indicate frustrated rapid iteration.
19
+ * Works WITHOUT semantic commits.
20
+ */
21
+ function calculateTimeSpiral(commits) {
22
+ if (commits.length < 2) {
23
+ return {
24
+ value: 100,
25
+ unit: '%',
26
+ rating: 'elite',
27
+ description: 'Insufficient commits for analysis',
28
+ spiralCommits: 0,
29
+ totalCommits: commits.length,
30
+ };
31
+ }
32
+ const sorted = [...commits].sort((a, b) => a.date.getTime() - b.date.getTime());
33
+ let spiralCommits = 0;
34
+ for (let i = 1; i < sorted.length; i++) {
35
+ const gap = sorted[i].date.getTime() - sorted[i - 1].date.getTime();
36
+ if (gap < SPIRAL_THRESHOLD_MS) {
37
+ spiralCommits++;
38
+ }
39
+ }
40
+ const spiralRatio = spiralCommits / commits.length;
41
+ const score = 1 - spiralRatio; // Invert: high score = low spiraling
42
+ return {
43
+ value: Math.round(score * 100),
44
+ unit: '%',
45
+ rating: getSpiralRating(spiralRatio),
46
+ description: getSpiralDescription(spiralRatio, spiralCommits, commits.length),
47
+ spiralCommits,
48
+ totalCommits: commits.length,
49
+ };
50
+ }
51
+ function getSpiralRating(spiralRatio) {
52
+ if (spiralRatio < 0.15)
53
+ return 'elite';
54
+ if (spiralRatio < 0.30)
55
+ return 'high';
56
+ if (spiralRatio < 0.50)
57
+ return 'medium';
58
+ return 'low';
59
+ }
60
+ function getSpiralDescription(ratio, spiral, total) {
61
+ if (ratio < 0.15)
62
+ return `Elite: ${spiral}/${total} rapid commits (<15%)`;
63
+ if (ratio < 0.30)
64
+ return `High: ${spiral}/${total} rapid commits (15-30%)`;
65
+ if (ratio < 0.50)
66
+ return `Medium: ${spiral}/${total} rapid commits (30-50%)`;
67
+ return `Low: ${spiral}/${total} rapid commits (>50%) - frustrated iteration`;
68
+ }
69
+ //# sourceMappingURL=time-spiral.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-spiral.js","sourceRoot":"","sources":["../../src/metrics/time-spiral.ts"],"names":[],"mappings":";;AAoBA,kDAiCC;AAnDD;;;;;;;;;;GAUG;AACH,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1C;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,OAAiB;IACnD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,KAAK,EAAE,GAAG;YACV,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,OAAO;YACf,WAAW,EAAE,mCAAmC;YAChD,aAAa,EAAE,CAAC;YAChB,YAAY,EAAE,OAAO,CAAC,MAAM;SAC7B,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACpE,IAAI,GAAG,GAAG,mBAAmB,EAAE,CAAC;YAC9B,aAAa,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IACnD,MAAM,KAAK,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,qCAAqC;IAEpE,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;QAC9B,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC;QACpC,WAAW,EAAE,oBAAoB,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC;QAC7E,aAAa;QACb,YAAY,EAAE,OAAO,CAAC,MAAM;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,WAAmB;IAC1C,IAAI,WAAW,GAAG,IAAI;QAAE,OAAO,OAAO,CAAC;IACvC,IAAI,WAAW,GAAG,IAAI;QAAE,OAAO,MAAM,CAAC;IACtC,IAAI,WAAW,GAAG,IAAI;QAAE,OAAO,QAAQ,CAAC;IACxC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa,EAAE,MAAc,EAAE,KAAa;IACxE,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,UAAU,MAAM,IAAI,KAAK,uBAAuB,CAAC;IAC1E,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,SAAS,MAAM,IAAI,KAAK,yBAAyB,CAAC;IAC3E,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,WAAW,MAAM,IAAI,KAAK,yBAAyB,CAAC;IAC7E,OAAO,QAAQ,MAAM,IAAI,KAAK,8CAA8C,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Commit, VelocityAnomalyResult } from '../types';
2
+ interface Baseline {
3
+ mean: number;
4
+ stdDev: number;
5
+ }
6
+ /**
7
+ * Calculate velocity anomaly score.
8
+ * Measures how far current velocity is from personal baseline.
9
+ * Works WITHOUT semantic commits.
10
+ */
11
+ export declare function calculateVelocityAnomaly(commits: Commit[], baseline?: Baseline): VelocityAnomalyResult;
12
+ export {};
13
+ //# sourceMappingURL=velocity-anomaly.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"velocity-anomaly.d.ts","sourceRoot":"","sources":["../../src/metrics/velocity-anomaly.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAU,MAAM,UAAU,CAAC;AAGjE,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,CAAC,EAAE,QAAQ,GAClB,qBAAqB,CAwCvB"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateVelocityAnomaly = calculateVelocityAnomaly;
4
+ const velocity_1 = require("./velocity");
5
+ /**
6
+ * Calculate velocity anomaly score.
7
+ * Measures how far current velocity is from personal baseline.
8
+ * Works WITHOUT semantic commits.
9
+ */
10
+ function calculateVelocityAnomaly(commits, baseline) {
11
+ const activeHours = (0, velocity_1.calculateActiveHours)(commits);
12
+ const currentVelocity = activeHours > 0 ? commits.length / activeHours : 0;
13
+ /**
14
+ * Default baseline when no historical data exists.
15
+ *
16
+ * Rationale:
17
+ * - 3 commits/hour assumes ~20 min work cycles
18
+ * - 1.5 stdDev allows 0-6 commits/hour as "normal" (±2σ)
19
+ *
20
+ * These are PLACEHOLDER values. The model learns your actual
21
+ * baseline from calibration samples over time.
22
+ *
23
+ * NOT empirically validated across developer populations.
24
+ */
25
+ const defaultBaseline = {
26
+ mean: 3.0,
27
+ stdDev: 1.5,
28
+ };
29
+ const base = baseline || defaultBaseline;
30
+ // Z-score: how many std devs from personal mean
31
+ const zScore = base.stdDev > 0
32
+ ? Math.abs(currentVelocity - base.mean) / base.stdDev
33
+ : 0;
34
+ // Sigmoid transform: z=0 → 1.0, z=2 → 0.12, z=3 → 0.05
35
+ const score = 1 / (1 + Math.exp(zScore - 1.5));
36
+ return {
37
+ value: Math.round(score * 100),
38
+ unit: '%',
39
+ rating: getAnomalyRating(zScore),
40
+ description: getAnomalyDescription(zScore, currentVelocity, base),
41
+ currentVelocity: Math.round(currentVelocity * 10) / 10,
42
+ baselineMean: base.mean,
43
+ baselineStdDev: base.stdDev,
44
+ zScore: Math.round(zScore * 100) / 100,
45
+ };
46
+ }
47
+ function getAnomalyRating(zScore) {
48
+ if (zScore < 1.0)
49
+ return 'elite';
50
+ if (zScore < 1.5)
51
+ return 'high';
52
+ if (zScore < 2.0)
53
+ return 'medium';
54
+ return 'low';
55
+ }
56
+ function getAnomalyDescription(zScore, velocity, base) {
57
+ const velStr = velocity.toFixed(1);
58
+ const baseStr = base.mean.toFixed(1);
59
+ if (zScore < 1.0)
60
+ return `Elite: ${velStr}/hr (near baseline ${baseStr}/hr)`;
61
+ if (zScore < 1.5)
62
+ return `High: ${velStr}/hr (${zScore.toFixed(1)}σ from baseline)`;
63
+ if (zScore < 2.0)
64
+ return `Medium: ${velStr}/hr (${zScore.toFixed(1)}σ from baseline)`;
65
+ return `Low: ${velStr}/hr (${zScore.toFixed(1)}σ from baseline) - unusual pattern`;
66
+ }
67
+ //# sourceMappingURL=velocity-anomaly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"velocity-anomaly.js","sourceRoot":"","sources":["../../src/metrics/velocity-anomaly.ts"],"names":[],"mappings":";;AAaA,4DA2CC;AAvDD,yCAAkD;AAOlD;;;;GAIG;AACH,SAAgB,wBAAwB,CACtC,OAAiB,EACjB,QAAmB;IAEnB,MAAM,WAAW,GAAG,IAAA,+BAAoB,EAAC,OAAO,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3E;;;;;;;;;;;OAWG;IACH,MAAM,eAAe,GAAa;QAChC,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,GAAG;KACZ,CAAC;IACF,MAAM,IAAI,GAAG,QAAQ,IAAI,eAAe,CAAC;IAEzC,gDAAgD;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;QAC5B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;QACrD,CAAC,CAAC,CAAC,CAAC;IAEN,uDAAuD;IACvD,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;IAE/C,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;QAC9B,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;QAChC,WAAW,EAAE,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC;QACjE,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,GAAG,EAAE;QACtD,YAAY,EAAE,IAAI,CAAC,IAAI;QACvB,cAAc,EAAE,IAAI,CAAC,MAAM;QAC3B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACtC,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,OAAO,CAAC;IACjC,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,QAAQ,CAAC;IAClC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAc,EAAE,QAAgB,EAAE,IAAc;IAC7E,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAErC,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,UAAU,MAAM,sBAAsB,OAAO,MAAM,CAAC;IAC7E,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,SAAS,MAAM,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACpF,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,WAAW,MAAM,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACtF,OAAO,QAAQ,MAAM,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC,CAAC;AACrF,CAAC"}
@@ -1,6 +1,9 @@
1
- import { VibeCheckResult, OutputFormat } from '../types';
2
- export declare function formatOutput(result: VibeCheckResult, format: OutputFormat): string;
3
- export { formatTerminal } from './terminal';
1
+ import { VibeCheckResult, VibeCheckResultV2, OutputFormat } from '../types';
2
+ export interface OutputOptions {
3
+ simple?: boolean;
4
+ }
5
+ export declare function formatOutput(result: VibeCheckResult | VibeCheckResultV2, format: OutputFormat, options?: OutputOptions): string;
6
+ export { formatTerminal, formatTerminalSimple } from './terminal';
4
7
  export { formatJson } from './json';
5
8
  export { formatMarkdown } from './markdown';
6
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAKzD,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAUlF;AAED,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAK5E,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,eAAe,GAAG,iBAAiB,EAC3C,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAUR;AAED,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatMarkdown = exports.formatJson = exports.formatTerminal = void 0;
3
+ exports.formatMarkdown = exports.formatJson = exports.formatTerminalSimple = exports.formatTerminal = void 0;
4
4
  exports.formatOutput = formatOutput;
5
5
  const terminal_1 = require("./terminal");
6
6
  const json_1 = require("./json");
7
7
  const markdown_1 = require("./markdown");
8
- function formatOutput(result, format) {
8
+ function formatOutput(result, format, options = {}) {
9
9
  switch (format) {
10
10
  case 'json':
11
11
  return (0, json_1.formatJson)(result);
@@ -13,11 +13,12 @@ function formatOutput(result, format) {
13
13
  return (0, markdown_1.formatMarkdown)(result);
14
14
  case 'terminal':
15
15
  default:
16
- return (0, terminal_1.formatTerminal)(result);
16
+ return options.simple ? (0, terminal_1.formatTerminalSimple)(result) : (0, terminal_1.formatTerminal)(result);
17
17
  }
18
18
  }
19
19
  var terminal_2 = require("./terminal");
20
20
  Object.defineProperty(exports, "formatTerminal", { enumerable: true, get: function () { return terminal_2.formatTerminal; } });
21
+ Object.defineProperty(exports, "formatTerminalSimple", { enumerable: true, get: function () { return terminal_2.formatTerminalSimple; } });
21
22
  var json_2 = require("./json");
22
23
  Object.defineProperty(exports, "formatJson", { enumerable: true, get: function () { return json_2.formatJson; } });
23
24
  var markdown_2 = require("./markdown");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":";;;AAKA,oCAUC;AAdD,yCAA4C;AAC5C,iCAAoC;AACpC,yCAA4C;AAE5C,SAAgB,YAAY,CAAC,MAAuB,EAAE,MAAoB;IACxE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,IAAA,iBAAU,EAAC,MAAM,CAAC,CAAC;QAC5B,KAAK,UAAU;YACb,OAAO,IAAA,yBAAc,EAAC,MAAM,CAAC,CAAC;QAChC,KAAK,UAAU,CAAC;QAChB;YACE,OAAO,IAAA,yBAAc,EAAC,MAAM,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AACvB,+BAAoC;AAA3B,kGAAA,UAAU,OAAA;AACnB,uCAA4C;AAAnC,0GAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":";;;AASA,oCAcC;AAtBD,yCAAkE;AAClE,iCAAoC;AACpC,yCAA4C;AAM5C,SAAgB,YAAY,CAC1B,MAA2C,EAC3C,MAAoB,EACpB,UAAyB,EAAE;IAE3B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,IAAA,iBAAU,EAAC,MAAM,CAAC,CAAC;QAC5B,KAAK,UAAU;YACb,OAAO,IAAA,yBAAc,EAAC,MAAM,CAAC,CAAC;QAChC,KAAK,UAAU,CAAC;QAChB;YACE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAA,+BAAoB,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAA,yBAAc,EAAC,MAAM,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED,uCAAkE;AAAzD,0GAAA,cAAc,OAAA;AAAE,gHAAA,oBAAoB,OAAA;AAC7C,+BAAoC;AAA3B,kGAAA,UAAU,OAAA;AACnB,uCAA4C;AAAnC,0GAAA,cAAc,OAAA"}
@@ -1,3 +1,3 @@
1
- import { VibeCheckResult } from '../types';
2
- export declare function formatJson(result: VibeCheckResult): string;
1
+ import { VibeCheckResult, VibeCheckResultV2 } from '../types';
2
+ export declare function formatJson(result: VibeCheckResult | VibeCheckResultV2): string;
3
3
  //# sourceMappingURL=json.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/output/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAgD1D"}
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/output/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAM9D,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,MAAM,CAoG9E"}
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.formatJson = formatJson;
4
+ function isV2Result(result) {
5
+ return 'semanticMetrics' in result;
6
+ }
4
7
  function formatJson(result) {
5
8
  // Create a JSON-friendly version with ISO date strings
6
9
  const output = {
@@ -47,6 +50,57 @@ function formatJson(result) {
47
50
  patterns: result.patterns,
48
51
  overall: result.overall,
49
52
  };
53
+ // Add v2 fields if present
54
+ if (isV2Result(result)) {
55
+ if (result.vibeScore) {
56
+ output.vibeScore = result.vibeScore;
57
+ }
58
+ if (result.recommendation) {
59
+ output.recommendation = {
60
+ level: result.recommendation.level,
61
+ confidence: result.recommendation.confidence,
62
+ probabilities: result.recommendation.probabilities,
63
+ ci: result.recommendation.ci,
64
+ };
65
+ }
66
+ if (result.semanticFreeMetrics) {
67
+ output.semanticFreeMetrics = {
68
+ fileChurn: {
69
+ value: result.semanticFreeMetrics.fileChurn.value,
70
+ unit: result.semanticFreeMetrics.fileChurn.unit,
71
+ rating: result.semanticFreeMetrics.fileChurn.rating,
72
+ description: result.semanticFreeMetrics.fileChurn.description,
73
+ churnedFiles: result.semanticFreeMetrics.fileChurn.churnedFiles,
74
+ totalFiles: result.semanticFreeMetrics.fileChurn.totalFiles,
75
+ },
76
+ timeSpiral: {
77
+ value: result.semanticFreeMetrics.timeSpiral.value,
78
+ unit: result.semanticFreeMetrics.timeSpiral.unit,
79
+ rating: result.semanticFreeMetrics.timeSpiral.rating,
80
+ description: result.semanticFreeMetrics.timeSpiral.description,
81
+ spiralCommits: result.semanticFreeMetrics.timeSpiral.spiralCommits,
82
+ totalCommits: result.semanticFreeMetrics.timeSpiral.totalCommits,
83
+ },
84
+ velocityAnomaly: {
85
+ value: result.semanticFreeMetrics.velocityAnomaly.value,
86
+ unit: result.semanticFreeMetrics.velocityAnomaly.unit,
87
+ rating: result.semanticFreeMetrics.velocityAnomaly.rating,
88
+ description: result.semanticFreeMetrics.velocityAnomaly.description,
89
+ currentVelocity: result.semanticFreeMetrics.velocityAnomaly.currentVelocity,
90
+ baselineMean: result.semanticFreeMetrics.velocityAnomaly.baselineMean,
91
+ zScore: result.semanticFreeMetrics.velocityAnomaly.zScore,
92
+ },
93
+ codeStability: {
94
+ value: result.semanticFreeMetrics.codeStability.value,
95
+ unit: result.semanticFreeMetrics.codeStability.unit,
96
+ rating: result.semanticFreeMetrics.codeStability.rating,
97
+ description: result.semanticFreeMetrics.codeStability.description,
98
+ linesAdded: result.semanticFreeMetrics.codeStability.linesAdded,
99
+ linesSurviving: result.semanticFreeMetrics.codeStability.linesSurviving,
100
+ },
101
+ };
102
+ }
103
+ }
50
104
  return JSON.stringify(output, null, 2);
51
105
  }
52
106
  //# sourceMappingURL=json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/output/json.ts"],"names":[],"mappings":";;AAEA,gCAgDC;AAhDD,SAAgB,UAAU,CAAC,MAAuB;IAChD,uDAAuD;IACvD,MAAM,MAAM,GAAG;QACb,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;YACtC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE;YAClC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;SACvC;QACD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE;YACP,iBAAiB,EAAE;gBACjB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK;gBAC7C,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI;gBAC3C,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM;aAChD;YACD,WAAW,EAAE;gBACX,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK;gBACvC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI;gBACrC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM;aAC1C;YACD,aAAa,EAAE;gBACb,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK;gBACzC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI;gBACvC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM;aAC5C;YACD,mBAAmB,EAAE;gBACnB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK;gBAC/C,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI;gBAC7C,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM;aAClD;YACD,cAAc,EAAE;gBACd,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK;gBAC1C,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI;gBACxC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM;aAC7C;SACF;QACD,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC1C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QACH,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;IAEF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/output/json.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { VibeCheckResult } from '../types';
2
- export declare function formatMarkdown(result: VibeCheckResult): string;
1
+ import { VibeCheckResult, VibeCheckResultV2 } from '../types';
2
+ export declare function formatMarkdown(result: VibeCheckResult | VibeCheckResultV2): string;
3
3
  //# sourceMappingURL=markdown.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/output/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CA2G9D"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/output/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAO9D,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,MAAM,CAgJlF"}
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.formatMarkdown = formatMarkdown;
4
4
  const date_fns_1 = require("date-fns");
5
+ function isV2Result(result) {
6
+ return 'semanticMetrics' in result;
7
+ }
5
8
  function formatMarkdown(result) {
6
9
  const lines = [];
7
10
  // Header
@@ -16,8 +19,20 @@ function formatMarkdown(result) {
16
19
  // Overall
17
20
  lines.push(`**Overall Rating:** ${result.overall}`);
18
21
  lines.push('');
22
+ // V2: VibeScore
23
+ if (isV2Result(result) && result.vibeScore) {
24
+ const pct = Math.round(result.vibeScore.value * 100);
25
+ lines.push(`**VibeScore:** ${pct}%`);
26
+ lines.push('');
27
+ }
28
+ // V2: Level Recommendation
29
+ if (isV2Result(result) && result.recommendation) {
30
+ const rec = result.recommendation;
31
+ lines.push(`**Recommended Level:** ${rec.level} (${Math.round(rec.confidence * 100)}% confidence, CI: [${rec.ci[0].toFixed(1)}, ${rec.ci[1].toFixed(1)}])`);
32
+ lines.push('');
33
+ }
19
34
  // Metrics table
20
- lines.push('## Metrics');
35
+ lines.push('## Semantic Metrics');
21
36
  lines.push('');
22
37
  lines.push('| Metric | Value | Rating | Description |');
23
38
  lines.push('|--------|-------|--------|-------------|');
@@ -33,6 +48,24 @@ function formatMarkdown(result) {
33
48
  lines.push(`| ${name} | ${metric.value}${metric.unit} | ${rating} | ${metric.description} |`);
34
49
  }
35
50
  lines.push('');
51
+ // V2: Semantic-free metrics table
52
+ if (isV2Result(result) && result.semanticFreeMetrics) {
53
+ lines.push('## Semantic-Free Metrics (v2.0)');
54
+ lines.push('');
55
+ lines.push('| Metric | Value | Rating | Description |');
56
+ lines.push('|--------|-------|--------|-------------|');
57
+ const sfMetrics = [
58
+ { name: 'File Churn', metric: result.semanticFreeMetrics.fileChurn },
59
+ { name: 'Time Spiral', metric: result.semanticFreeMetrics.timeSpiral },
60
+ { name: 'Velocity Anomaly', metric: result.semanticFreeMetrics.velocityAnomaly },
61
+ { name: 'Code Stability', metric: result.semanticFreeMetrics.codeStability },
62
+ ];
63
+ for (const { name, metric } of sfMetrics) {
64
+ const rating = metric.rating.toUpperCase();
65
+ lines.push(`| ${name} | ${metric.value}${metric.unit} | ${rating} | ${metric.description} |`);
66
+ }
67
+ lines.push('');
68
+ }
36
69
  // Debug spirals
37
70
  if (result.fixChains.length > 0) {
38
71
  lines.push('## Debug Spirals');
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/output/markdown.ts"],"names":[],"mappings":";;AAGA,wCA2GC;AA7GD,uCAAkC;AAElC,SAAgB,cAAc,CAAC,MAAuB;IACpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,SAAS;IACT,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,SAAS;IACT,MAAM,OAAO,GAAG,IAAA,iBAAM,EAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,IAAA,iBAAM,EAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,MAAM,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,WAAW,CAAC,CAAC;IACvF,KAAK,CAAC,IAAI,CACR,gBAAgB,MAAM,CAAC,OAAO,CAAC,KAAK,WAAW,MAAM,CAAC,OAAO,CAAC,IAAI,UAAU,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,MAAM,CAAC,OAAO,CAAC,IAAI,UAAU,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS,CAClK,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,UAAU;IACV,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG;QACd,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE;QACxE,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE;QAC5D,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE;QACjE,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE;QAC7E,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE;KACnE,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,MAAM,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,MAAM,MAAM,MAAM,MAAM,CAAC,WAAW,IAAI,CAClF,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,gBAAgB;IAChB,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAE3D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC;YACrC,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC,QAAQ,OAAO,OAAO,IAAI,CAC9E,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,WAAW;IACX,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAEzD,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1E,MAAM,MAAM,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,MAAM,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC;QACtD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CACR,KAAK,MAAM,CAAC,QAAQ,CAAC,eAAe,kDAAkD,CACvF,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;IACnG,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtG,KAAK,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS;aAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,+BAA+B,IAAA,iBAAM,EAAC,IAAI,IAAI,EAAE,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAErF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/output/markdown.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
- import { VibeCheckResult } from '../types';
2
- export declare function formatTerminal(result: VibeCheckResult): string;
1
+ import { VibeCheckResult, VibeCheckResultV2 } from '../types';
2
+ export declare function formatTerminal(result: VibeCheckResult | VibeCheckResultV2): string;
3
+ /**
4
+ * Simple/compact terminal output - just the essentials
5
+ */
6
+ export declare function formatTerminalSimple(result: VibeCheckResult | VibeCheckResultV2): string;
3
7
  //# sourceMappingURL=terminal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/output/terminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAyB,MAAM,UAAU,CAAC;AAGlE,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CA8E9D"}
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/output/terminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAyB,MAAM,UAAU,CAAC;AAOrF,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,MAAM,CA2KlF;AAoCD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,MAAM,CAqCxF"}