@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.
- package/.agents/bundles/ml-learning-loop-complete-plan-2025-11-28.md +908 -0
- package/.agents/bundles/unified-vibe-system-plan-phase1-2025-11-28.md +962 -0
- package/.agents/bundles/unified-vibe-system-research-2025-11-28.md +1003 -0
- package/.agents/bundles/vibe-check-ecosystem-plan-2025-11-29.md +635 -0
- package/.agents/bundles/vibe-check-gamification-complete-2025-11-29.md +132 -0
- package/.agents/bundles/vibe-score-scientific-framework-2025-11-28.md +602 -0
- package/.vibe-check/calibration.json +38 -0
- package/.vibe-check/latest.json +114 -0
- package/CHANGELOG.md +47 -0
- package/CLAUDE.md +178 -0
- package/README.md +222 -7
- package/action.yml +270 -0
- package/dashboard/app.js +494 -0
- package/dashboard/index.html +235 -0
- package/dashboard/styles.css +647 -0
- package/dist/calibration/ece.d.ts +26 -0
- package/dist/calibration/ece.d.ts.map +1 -0
- package/dist/calibration/ece.js +93 -0
- package/dist/calibration/ece.js.map +1 -0
- package/dist/calibration/index.d.ts +3 -0
- package/dist/calibration/index.d.ts.map +1 -0
- package/dist/calibration/index.js +15 -0
- package/dist/calibration/index.js.map +1 -0
- package/dist/calibration/storage.d.ts +34 -0
- package/dist/calibration/storage.d.ts.map +1 -0
- package/dist/calibration/storage.js +188 -0
- package/dist/calibration/storage.js.map +1 -0
- package/dist/cli.js +31 -76
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts +16 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +256 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/index.d.ts +5 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +13 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init-hook.d.ts +3 -0
- package/dist/commands/init-hook.d.ts.map +1 -0
- package/dist/commands/init-hook.js +161 -0
- package/dist/commands/init-hook.js.map +1 -0
- package/dist/commands/level.d.ts +3 -0
- package/dist/commands/level.d.ts.map +1 -0
- package/dist/commands/level.js +277 -0
- package/dist/commands/level.js.map +1 -0
- package/dist/commands/profile.d.ts +4 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +143 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/gamification/achievements.d.ts +15 -0
- package/dist/gamification/achievements.d.ts.map +1 -0
- package/dist/gamification/achievements.js +273 -0
- package/dist/gamification/achievements.js.map +1 -0
- package/dist/gamification/index.d.ts +8 -0
- package/dist/gamification/index.d.ts.map +1 -0
- package/dist/gamification/index.js +30 -0
- package/dist/gamification/index.js.map +1 -0
- package/dist/gamification/profile.d.ts +46 -0
- package/dist/gamification/profile.d.ts.map +1 -0
- package/dist/gamification/profile.js +272 -0
- package/dist/gamification/profile.js.map +1 -0
- package/dist/gamification/streaks.d.ts +26 -0
- package/dist/gamification/streaks.d.ts.map +1 -0
- package/dist/gamification/streaks.js +132 -0
- package/dist/gamification/streaks.js.map +1 -0
- package/dist/gamification/types.d.ts +111 -0
- package/dist/gamification/types.d.ts.map +1 -0
- package/dist/gamification/types.js +26 -0
- package/dist/gamification/types.js.map +1 -0
- package/dist/gamification/xp.d.ts +37 -0
- package/dist/gamification/xp.d.ts.map +1 -0
- package/dist/gamification/xp.js +115 -0
- package/dist/gamification/xp.js.map +1 -0
- package/dist/git.d.ts +11 -0
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +52 -0
- package/dist/git.js.map +1 -1
- package/dist/metrics/code-stability.d.ts +13 -0
- package/dist/metrics/code-stability.d.ts.map +1 -0
- package/dist/metrics/code-stability.js +74 -0
- package/dist/metrics/code-stability.js.map +1 -0
- package/dist/metrics/file-churn.d.ts +8 -0
- package/dist/metrics/file-churn.d.ts.map +1 -0
- package/dist/metrics/file-churn.js +75 -0
- package/dist/metrics/file-churn.js.map +1 -0
- package/dist/metrics/time-spiral.d.ts +8 -0
- package/dist/metrics/time-spiral.d.ts.map +1 -0
- package/dist/metrics/time-spiral.js +69 -0
- package/dist/metrics/time-spiral.js.map +1 -0
- package/dist/metrics/velocity-anomaly.d.ts +13 -0
- package/dist/metrics/velocity-anomaly.d.ts.map +1 -0
- package/dist/metrics/velocity-anomaly.js +67 -0
- package/dist/metrics/velocity-anomaly.js.map +1 -0
- package/dist/output/index.d.ts +6 -3
- package/dist/output/index.d.ts.map +1 -1
- package/dist/output/index.js +4 -3
- package/dist/output/index.js.map +1 -1
- package/dist/output/json.d.ts +2 -2
- package/dist/output/json.d.ts.map +1 -1
- package/dist/output/json.js +54 -0
- package/dist/output/json.js.map +1 -1
- package/dist/output/markdown.d.ts +2 -2
- package/dist/output/markdown.d.ts.map +1 -1
- package/dist/output/markdown.js +34 -1
- package/dist/output/markdown.js.map +1 -1
- package/dist/output/terminal.d.ts +6 -2
- package/dist/output/terminal.d.ts.map +1 -1
- package/dist/output/terminal.js +131 -3
- package/dist/output/terminal.js.map +1 -1
- package/dist/recommend/index.d.ts +3 -0
- package/dist/recommend/index.d.ts.map +1 -0
- package/dist/recommend/index.js +14 -0
- package/dist/recommend/index.js.map +1 -0
- package/dist/recommend/ordered-logistic.d.ts +49 -0
- package/dist/recommend/ordered-logistic.d.ts.map +1 -0
- package/dist/recommend/ordered-logistic.js +153 -0
- package/dist/recommend/ordered-logistic.js.map +1 -0
- package/dist/recommend/questions.d.ts +19 -0
- package/dist/recommend/questions.d.ts.map +1 -0
- package/dist/recommend/questions.js +73 -0
- package/dist/recommend/questions.js.map +1 -0
- package/dist/score/index.d.ts +21 -0
- package/dist/score/index.d.ts.map +1 -0
- package/dist/score/index.js +48 -0
- package/dist/score/index.js.map +1 -0
- package/dist/score/weights.d.ts +16 -0
- package/dist/score/weights.d.ts.map +1 -0
- package/dist/score/weights.js +28 -0
- package/dist/score/weights.js.map +1 -0
- package/dist/types.d.ts +83 -0
- package/dist/types.d.ts.map +1 -1
- package/hooks/pre-push +103 -0
- 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":"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"}
|
|
@@ -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"}
|
package/dist/output/index.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { VibeCheckResult, OutputFormat } from '../types';
|
|
2
|
-
export
|
|
3
|
-
|
|
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;
|
|
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"}
|
package/dist/output/index.js
CHANGED
|
@@ -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");
|
package/dist/output/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":";;;
|
|
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"}
|
package/dist/output/json.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/output/json.js
CHANGED
|
@@ -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
|
package/dist/output/json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/output/json.ts"],"names":[],"mappings":";;
|
|
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;
|
|
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"}
|
package/dist/output/markdown.js
CHANGED
|
@@ -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":";;
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/output/markdown.ts"],"names":[],"mappings":";;AAOA,wCAgJC;AAtJD,uCAAkC;AAElC,SAAS,UAAU,CAAC,MAA2C;IAC7D,OAAO,iBAAiB,IAAI,MAAM,CAAC;AACrC,CAAC;AAED,SAAgB,cAAc,CAAC,MAA2C;IACxE,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,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,2BAA2B;IAC3B,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,0BAA0B,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,sBAAsB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5J,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,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,kCAAkC;IAClC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAExD,MAAM,SAAS,GAAG;YAChB,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE;YACpE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE;YACtE,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE;YAChF,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE;SAC7E,CAAC;QAEF,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,MAAM,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,MAAM,MAAM,MAAM,MAAM,CAAC,WAAW,IAAI,CAClF,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,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,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;
|
|
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"}
|