@boshu2/vibe-check 1.0.1 → 1.1.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 +46 -0
- package/CLAUDE.md +178 -0
- package/README.md +265 -63
- 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 +30 -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 +4 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +11 -0
- package/dist/commands/index.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/package.json +10 -9
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ordered Logistic Regression for Vibe Level Classification.
|
|
4
|
+
* Respects ordinal structure: 0 < 1 < 2 < 3 < 4 < 5
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.DEFAULT_MODEL = void 0;
|
|
8
|
+
exports.predictProba = predictProba;
|
|
9
|
+
exports.predict = predict;
|
|
10
|
+
exports.predictWithConfidence = predictWithConfidence;
|
|
11
|
+
exports.partialFit = partialFit;
|
|
12
|
+
exports.batchPartialFit = batchPartialFit;
|
|
13
|
+
const N_LEVELS = 6;
|
|
14
|
+
/**
|
|
15
|
+
* Default model state (will be updated via calibration).
|
|
16
|
+
*/
|
|
17
|
+
exports.DEFAULT_MODEL = {
|
|
18
|
+
weights: [
|
|
19
|
+
0.3, // reversibility
|
|
20
|
+
-0.5, // blastRadius (negative = higher risk lowers level)
|
|
21
|
+
-0.4, // verificationCost
|
|
22
|
+
-0.4, // domainComplexity
|
|
23
|
+
0.3, // aiTrackRecord
|
|
24
|
+
0.8, // fileChurnScore
|
|
25
|
+
0.6, // timeSpiralScore
|
|
26
|
+
0.3, // velocityAnomalyScore
|
|
27
|
+
0.5, // codeStabilityScore
|
|
28
|
+
],
|
|
29
|
+
thresholds: [-2.0, -0.8, 0.4, 1.6, 2.8], // 5 thresholds for 6 levels
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Sigmoid function.
|
|
33
|
+
*/
|
|
34
|
+
function sigmoid(x) {
|
|
35
|
+
return 1 / (1 + Math.exp(-x));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Predict probability distribution over levels 0-5.
|
|
39
|
+
*/
|
|
40
|
+
function predictProba(features, model = exports.DEFAULT_MODEL) {
|
|
41
|
+
// Linear combination
|
|
42
|
+
let eta = 0;
|
|
43
|
+
for (let i = 0; i < features.length && i < model.weights.length; i++) {
|
|
44
|
+
eta += features[i] * model.weights[i];
|
|
45
|
+
}
|
|
46
|
+
// Cumulative probabilities
|
|
47
|
+
const cumProbs = model.thresholds.map(t => sigmoid(t - eta));
|
|
48
|
+
// P(Y=k) = P(Y≤k) - P(Y≤k-1)
|
|
49
|
+
const probs = [];
|
|
50
|
+
probs[0] = cumProbs[0];
|
|
51
|
+
for (let k = 1; k < N_LEVELS - 1; k++) {
|
|
52
|
+
probs[k] = cumProbs[k] - cumProbs[k - 1];
|
|
53
|
+
}
|
|
54
|
+
probs[N_LEVELS - 1] = 1 - cumProbs[N_LEVELS - 2];
|
|
55
|
+
// Ensure non-negative (numerical stability)
|
|
56
|
+
return probs.map(p => Math.max(0, p));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Predict most likely level.
|
|
60
|
+
*/
|
|
61
|
+
function predict(features, model = exports.DEFAULT_MODEL) {
|
|
62
|
+
const probs = predictProba(features, model);
|
|
63
|
+
let maxIdx = 0;
|
|
64
|
+
let maxProb = probs[0];
|
|
65
|
+
for (let i = 1; i < probs.length; i++) {
|
|
66
|
+
if (probs[i] > maxProb) {
|
|
67
|
+
maxProb = probs[i];
|
|
68
|
+
maxIdx = i;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return maxIdx;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Predict with confidence and CI.
|
|
75
|
+
*/
|
|
76
|
+
function predictWithConfidence(features, model = exports.DEFAULT_MODEL) {
|
|
77
|
+
const probs = predictProba(features, model);
|
|
78
|
+
const level = probs.indexOf(Math.max(...probs));
|
|
79
|
+
const confidence = Math.max(...probs);
|
|
80
|
+
// Approximate CI from probability distribution variance
|
|
81
|
+
let mean = 0;
|
|
82
|
+
let variance = 0;
|
|
83
|
+
for (let i = 0; i < probs.length; i++) {
|
|
84
|
+
mean += i * probs[i];
|
|
85
|
+
}
|
|
86
|
+
for (let i = 0; i < probs.length; i++) {
|
|
87
|
+
variance += probs[i] * Math.pow(i - mean, 2);
|
|
88
|
+
}
|
|
89
|
+
const stdDev = Math.sqrt(variance);
|
|
90
|
+
const ci = [
|
|
91
|
+
Math.max(0, mean - 1.96 * stdDev),
|
|
92
|
+
Math.min(5, mean + 1.96 * stdDev),
|
|
93
|
+
];
|
|
94
|
+
return { level, confidence, ci, probs };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Single-step stochastic gradient descent update.
|
|
98
|
+
* Updates weights based on one sample's prediction error.
|
|
99
|
+
*
|
|
100
|
+
* For ordered logistic regression:
|
|
101
|
+
* - We minimize negative log-likelihood
|
|
102
|
+
* - Gradient for weight[j] = (p_k - y_k) * x_j summed over cutpoints
|
|
103
|
+
*
|
|
104
|
+
* Learning rate decays: lr = initialLr / (1 + decay * n)
|
|
105
|
+
*/
|
|
106
|
+
function partialFit(model, features, trueLevel, learningRate = 0.01, sampleCount = 1) {
|
|
107
|
+
const effectiveLr = learningRate / (1 + 0.001 * sampleCount);
|
|
108
|
+
// Get current predictions
|
|
109
|
+
const probs = predictProba(features, model);
|
|
110
|
+
// Create one-hot target
|
|
111
|
+
const target = new Array(N_LEVELS).fill(0);
|
|
112
|
+
target[Math.min(Math.max(0, Math.round(trueLevel)), N_LEVELS - 1)] = 1;
|
|
113
|
+
// Gradient for weights: dL/dw_j = sum_k (p_k - y_k) * x_j
|
|
114
|
+
const newWeights = [...model.weights];
|
|
115
|
+
for (let j = 0; j < features.length && j < newWeights.length; j++) {
|
|
116
|
+
let gradient = 0;
|
|
117
|
+
for (let k = 0; k < N_LEVELS; k++) {
|
|
118
|
+
gradient += (probs[k] - target[k]) * features[j];
|
|
119
|
+
}
|
|
120
|
+
newWeights[j] -= effectiveLr * gradient;
|
|
121
|
+
}
|
|
122
|
+
// Gradient for thresholds: dL/dt_k = p_k - cumTarget_k
|
|
123
|
+
const newThresholds = [...model.thresholds];
|
|
124
|
+
let cumTarget = 0;
|
|
125
|
+
for (let k = 0; k < model.thresholds.length; k++) {
|
|
126
|
+
cumTarget += target[k];
|
|
127
|
+
const cumProb = probs.slice(0, k + 1).reduce((a, b) => a + b, 0);
|
|
128
|
+
const gradient = cumProb - cumTarget;
|
|
129
|
+
newThresholds[k] -= effectiveLr * gradient;
|
|
130
|
+
}
|
|
131
|
+
// Ensure thresholds remain ordered
|
|
132
|
+
for (let i = 1; i < newThresholds.length; i++) {
|
|
133
|
+
if (newThresholds[i] <= newThresholds[i - 1]) {
|
|
134
|
+
newThresholds[i] = newThresholds[i - 1] + 0.1;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
weights: newWeights,
|
|
139
|
+
thresholds: newThresholds,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Batch partial fit - applies partialFit to multiple samples.
|
|
144
|
+
* Processes samples in order, accumulating updates.
|
|
145
|
+
*/
|
|
146
|
+
function batchPartialFit(model, samples, learningRate = 0.01) {
|
|
147
|
+
let current = model;
|
|
148
|
+
for (let i = 0; i < samples.length; i++) {
|
|
149
|
+
current = partialFit(current, samples[i].features, samples[i].trueLevel, learningRate, i + 1);
|
|
150
|
+
}
|
|
151
|
+
return current;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=ordered-logistic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ordered-logistic.js","sourceRoot":"","sources":["../../src/recommend/ordered-logistic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { QuestionResponses } from '../types';
|
|
2
|
+
export interface Question {
|
|
3
|
+
id: keyof QuestionResponses;
|
|
4
|
+
text: string;
|
|
5
|
+
options: {
|
|
6
|
+
value: number;
|
|
7
|
+
label: string;
|
|
8
|
+
description: string;
|
|
9
|
+
}[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The 5 classification questions for vibe level determination.
|
|
13
|
+
*/
|
|
14
|
+
export declare const VIBE_QUESTIONS: Question[];
|
|
15
|
+
/**
|
|
16
|
+
* Calculate base level from questions only (simple additive).
|
|
17
|
+
*/
|
|
18
|
+
export declare function calculateBaseLevel(responses: QuestionResponses): number;
|
|
19
|
+
//# sourceMappingURL=questions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../../src/recommend/questions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,iBAAiB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAClE;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,EAmDpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,GAAG,MAAM,CAUvE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VIBE_QUESTIONS = void 0;
|
|
4
|
+
exports.calculateBaseLevel = calculateBaseLevel;
|
|
5
|
+
/**
|
|
6
|
+
* The 5 classification questions for vibe level determination.
|
|
7
|
+
*/
|
|
8
|
+
exports.VIBE_QUESTIONS = [
|
|
9
|
+
{
|
|
10
|
+
id: 'reversibility',
|
|
11
|
+
text: 'How easy is it to undo this change?',
|
|
12
|
+
options: [
|
|
13
|
+
{ value: 1, label: 'Easy', description: 'One command to revert (git revert, ctrl+z)' },
|
|
14
|
+
{ value: 0, label: 'Moderate', description: 'Some effort required' },
|
|
15
|
+
{ value: -1, label: 'Difficult', description: 'Significant work to undo' },
|
|
16
|
+
{ value: -2, label: 'Impossible', description: 'Cannot be undone (data loss, etc.)' },
|
|
17
|
+
],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
id: 'blastRadius',
|
|
21
|
+
text: 'What breaks if this goes wrong?',
|
|
22
|
+
options: [
|
|
23
|
+
{ value: 1, label: 'This file only', description: 'Isolated change' },
|
|
24
|
+
{ value: 0, label: 'This module', description: 'Affects related components' },
|
|
25
|
+
{ value: -1, label: 'Multiple systems', description: 'Cross-cutting impact' },
|
|
26
|
+
{ value: -2, label: 'Production/users', description: 'Customer-facing impact' },
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: 'verificationCost',
|
|
31
|
+
text: 'How hard is it to verify correctness?',
|
|
32
|
+
options: [
|
|
33
|
+
{ value: 1, label: 'Instant', description: 'Obvious, compiler catches errors' },
|
|
34
|
+
{ value: 0, label: 'Run tests', description: 'Automated tests verify' },
|
|
35
|
+
{ value: -1, label: 'Manual testing', description: 'Need to manually verify' },
|
|
36
|
+
{ value: -2, label: 'Hard to verify', description: 'Difficult to fully validate' },
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: 'domainComplexity',
|
|
41
|
+
text: 'How much domain context is needed?',
|
|
42
|
+
options: [
|
|
43
|
+
{ value: 1, label: 'Generic', description: 'Universal patterns, no special knowledge' },
|
|
44
|
+
{ value: 0, label: 'Standard', description: 'Common patterns in this domain' },
|
|
45
|
+
{ value: -1, label: 'Domain-specific', description: 'Requires specialized knowledge' },
|
|
46
|
+
{ value: -2, label: 'Novel/research', description: 'No established patterns' },
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: 'aiTrackRecord',
|
|
51
|
+
text: 'How has AI performed on similar tasks?',
|
|
52
|
+
options: [
|
|
53
|
+
{ value: 1, label: 'Excellent', description: 'Consistently good results' },
|
|
54
|
+
{ value: 0, label: 'Generally good', description: 'Usually correct' },
|
|
55
|
+
{ value: -1, label: 'Mixed', description: 'Sometimes needs correction' },
|
|
56
|
+
{ value: -2, label: 'Poor/unknown', description: 'Unreliable or untested' },
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
/**
|
|
61
|
+
* Calculate base level from questions only (simple additive).
|
|
62
|
+
*/
|
|
63
|
+
function calculateBaseLevel(responses) {
|
|
64
|
+
const base = 3;
|
|
65
|
+
const score = base +
|
|
66
|
+
responses.reversibility +
|
|
67
|
+
responses.blastRadius +
|
|
68
|
+
responses.verificationCost +
|
|
69
|
+
responses.domainComplexity +
|
|
70
|
+
responses.aiTrackRecord;
|
|
71
|
+
return Math.max(0, Math.min(5, Math.round(score)));
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=questions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"questions.js","sourceRoot":"","sources":["../../src/recommend/questions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { VibeScore, FileChurnResult, TimeSpiralResult, VelocityAnomalyResult, CodeStabilityResult } from '../types';
|
|
2
|
+
import { ScoreWeights } from './weights';
|
|
3
|
+
export interface ScoreInputs {
|
|
4
|
+
fileChurn: FileChurnResult;
|
|
5
|
+
timeSpiral: TimeSpiralResult;
|
|
6
|
+
velocityAnomaly: VelocityAnomalyResult;
|
|
7
|
+
codeStability: CodeStabilityResult;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Calculate composite VibeScore (0-1) from semantic-free metrics.
|
|
11
|
+
*/
|
|
12
|
+
export declare function calculateVibeScore(inputs: ScoreInputs, weights?: ScoreWeights): VibeScore;
|
|
13
|
+
/**
|
|
14
|
+
* Map VibeScore to expected vibe level range.
|
|
15
|
+
*/
|
|
16
|
+
export declare function scoreToExpectedLevel(score: number): {
|
|
17
|
+
min: number;
|
|
18
|
+
max: number;
|
|
19
|
+
};
|
|
20
|
+
export { DEFAULT_WEIGHTS, ScoreWeights } from './weights';
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/score/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpH,OAAO,EAAmB,YAAY,EAAE,MAAM,WAAW,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,eAAe,CAAC;IAC3B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,eAAe,EAAE,qBAAqB,CAAC;IACvC,aAAa,EAAE,mBAAmB,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,YAA8B,GACtC,SAAS,CAwBX;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAMhF;AAED,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_WEIGHTS = void 0;
|
|
4
|
+
exports.calculateVibeScore = calculateVibeScore;
|
|
5
|
+
exports.scoreToExpectedLevel = scoreToExpectedLevel;
|
|
6
|
+
const weights_1 = require("./weights");
|
|
7
|
+
/**
|
|
8
|
+
* Calculate composite VibeScore (0-1) from semantic-free metrics.
|
|
9
|
+
*/
|
|
10
|
+
function calculateVibeScore(inputs, weights = weights_1.DEFAULT_WEIGHTS) {
|
|
11
|
+
// Normalize all metrics to 0-1
|
|
12
|
+
const fileChurnNorm = inputs.fileChurn.value / 100;
|
|
13
|
+
const timeSpiralNorm = inputs.timeSpiral.value / 100;
|
|
14
|
+
const velocityAnomalyNorm = inputs.velocityAnomaly.value / 100;
|
|
15
|
+
const codeStabilityNorm = inputs.codeStability.value / 100;
|
|
16
|
+
// Weighted sum
|
|
17
|
+
const value = weights.fileChurn * fileChurnNorm +
|
|
18
|
+
weights.timeSpiral * timeSpiralNorm +
|
|
19
|
+
weights.velocityAnomaly * velocityAnomalyNorm +
|
|
20
|
+
weights.codeStability * codeStabilityNorm;
|
|
21
|
+
return {
|
|
22
|
+
value: Math.round(value * 100) / 100,
|
|
23
|
+
components: {
|
|
24
|
+
fileChurn: fileChurnNorm,
|
|
25
|
+
timeSpiral: timeSpiralNorm,
|
|
26
|
+
velocityAnomaly: velocityAnomalyNorm,
|
|
27
|
+
codeStability: codeStabilityNorm,
|
|
28
|
+
},
|
|
29
|
+
weights,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Map VibeScore to expected vibe level range.
|
|
34
|
+
*/
|
|
35
|
+
function scoreToExpectedLevel(score) {
|
|
36
|
+
if (score >= 0.90)
|
|
37
|
+
return { min: 4, max: 5 };
|
|
38
|
+
if (score >= 0.75)
|
|
39
|
+
return { min: 3, max: 4 };
|
|
40
|
+
if (score >= 0.60)
|
|
41
|
+
return { min: 2, max: 3 };
|
|
42
|
+
if (score >= 0.40)
|
|
43
|
+
return { min: 1, max: 2 };
|
|
44
|
+
return { min: 0, max: 1 };
|
|
45
|
+
}
|
|
46
|
+
var weights_2 = require("./weights");
|
|
47
|
+
Object.defineProperty(exports, "DEFAULT_WEIGHTS", { enumerable: true, get: function () { return weights_2.DEFAULT_WEIGHTS; } });
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/score/index.ts"],"names":[],"mappings":";;;AAaA,gDA2BC;AAKD,oDAMC;AAlDD,uCAA0D;AAS1D;;GAEG;AACH,SAAgB,kBAAkB,CAChC,MAAmB,EACnB,UAAwB,yBAAe;IAEvC,+BAA+B;IAC/B,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC;IACnD,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC;IACrD,MAAM,mBAAmB,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,GAAG,GAAG,CAAC;IAC/D,MAAM,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,GAAG,GAAG,CAAC;IAE3D,eAAe;IACf,MAAM,KAAK,GACT,OAAO,CAAC,SAAS,GAAG,aAAa;QACjC,OAAO,CAAC,UAAU,GAAG,cAAc;QACnC,OAAO,CAAC,eAAe,GAAG,mBAAmB;QAC7C,OAAO,CAAC,aAAa,GAAG,iBAAiB,CAAC;IAE5C,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG;QACpC,UAAU,EAAE;YACV,SAAS,EAAE,aAAa;YACxB,UAAU,EAAE,cAAc;YAC1B,eAAe,EAAE,mBAAmB;YACpC,aAAa,EAAE,iBAAiB;SACjC;QACD,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,KAAa;IAChD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC7C,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC7C,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC7C,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC7C,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC5B,CAAC;AAED,qCAA0D;AAAjD,0GAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ScoreWeights {
|
|
2
|
+
fileChurn: number;
|
|
3
|
+
timeSpiral: number;
|
|
4
|
+
velocityAnomaly: number;
|
|
5
|
+
codeStability: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Default weights based on research.
|
|
9
|
+
* Will be calibrated over time.
|
|
10
|
+
*/
|
|
11
|
+
export declare const DEFAULT_WEIGHTS: ScoreWeights;
|
|
12
|
+
/**
|
|
13
|
+
* Normalize weights to sum to 1.0.
|
|
14
|
+
*/
|
|
15
|
+
export declare function normalizeWeights(weights: ScoreWeights): ScoreWeights;
|
|
16
|
+
//# sourceMappingURL=weights.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weights.d.ts","sourceRoot":"","sources":["../../src/score/weights.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,YAK7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,CAUpE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_WEIGHTS = void 0;
|
|
4
|
+
exports.normalizeWeights = normalizeWeights;
|
|
5
|
+
/**
|
|
6
|
+
* Default weights based on research.
|
|
7
|
+
* Will be calibrated over time.
|
|
8
|
+
*/
|
|
9
|
+
exports.DEFAULT_WEIGHTS = {
|
|
10
|
+
fileChurn: 0.30, // Strongest signal
|
|
11
|
+
timeSpiral: 0.25, // Frustrated iteration
|
|
12
|
+
velocityAnomaly: 0.20, // Unusual patterns
|
|
13
|
+
codeStability: 0.25, // Long-term quality
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Normalize weights to sum to 1.0.
|
|
17
|
+
*/
|
|
18
|
+
function normalizeWeights(weights) {
|
|
19
|
+
const sum = weights.fileChurn + weights.timeSpiral +
|
|
20
|
+
weights.velocityAnomaly + weights.codeStability;
|
|
21
|
+
return {
|
|
22
|
+
fileChurn: weights.fileChurn / sum,
|
|
23
|
+
timeSpiral: weights.timeSpiral / sum,
|
|
24
|
+
velocityAnomaly: weights.velocityAnomaly / sum,
|
|
25
|
+
codeStability: weights.codeStability / sum,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=weights.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weights.js","sourceRoot":"","sources":["../../src/score/weights.ts"],"names":[],"mappings":";;;AAqBA,4CAUC;AAxBD;;;GAGG;AACU,QAAA,eAAe,GAAiB;IAC3C,SAAS,EAAE,IAAI,EAAQ,mBAAmB;IAC1C,UAAU,EAAE,IAAI,EAAO,uBAAuB;IAC9C,eAAe,EAAE,IAAI,EAAE,mBAAmB;IAC1C,aAAa,EAAE,IAAI,EAAI,oBAAoB;CAC5C,CAAC;AAEF;;GAEG;AACH,SAAgB,gBAAgB,CAAC,OAAqB;IACpD,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,UAAU;QACtC,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC;IAE5D,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS,GAAG,GAAG;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU,GAAG,GAAG;QACpC,eAAe,EAAE,OAAO,CAAC,eAAe,GAAG,GAAG;QAC9C,aAAa,EAAE,OAAO,CAAC,aAAa,GAAG,GAAG;KAC3C,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -59,5 +59,88 @@ export interface CliOptions {
|
|
|
59
59
|
format: OutputFormat;
|
|
60
60
|
repo: string;
|
|
61
61
|
verbose: boolean;
|
|
62
|
+
score?: boolean;
|
|
63
|
+
recommend?: boolean;
|
|
64
|
+
calibrate?: string;
|
|
65
|
+
}
|
|
66
|
+
export interface FileChurnResult extends MetricResult {
|
|
67
|
+
churnedFiles: number;
|
|
68
|
+
totalFiles: number;
|
|
69
|
+
}
|
|
70
|
+
export interface TimeSpiralResult extends MetricResult {
|
|
71
|
+
spiralCommits: number;
|
|
72
|
+
totalCommits: number;
|
|
73
|
+
}
|
|
74
|
+
export interface VelocityAnomalyResult extends MetricResult {
|
|
75
|
+
currentVelocity: number;
|
|
76
|
+
baselineMean: number;
|
|
77
|
+
baselineStdDev: number;
|
|
78
|
+
zScore: number;
|
|
79
|
+
}
|
|
80
|
+
export interface CodeStabilityResult extends MetricResult {
|
|
81
|
+
linesAdded: number;
|
|
82
|
+
linesSurviving: number;
|
|
83
|
+
}
|
|
84
|
+
export interface VibeScore {
|
|
85
|
+
value: number;
|
|
86
|
+
components: {
|
|
87
|
+
fileChurn: number;
|
|
88
|
+
timeSpiral: number;
|
|
89
|
+
velocityAnomaly: number;
|
|
90
|
+
codeStability: number;
|
|
91
|
+
};
|
|
92
|
+
weights: {
|
|
93
|
+
fileChurn: number;
|
|
94
|
+
timeSpiral: number;
|
|
95
|
+
velocityAnomaly: number;
|
|
96
|
+
codeStability: number;
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
export interface VibeLevelRecommendation {
|
|
100
|
+
level: 0 | 1 | 2 | 3 | 4 | 5;
|
|
101
|
+
confidence: number;
|
|
102
|
+
probabilities: number[];
|
|
103
|
+
ci: [number, number];
|
|
104
|
+
questions: QuestionResponses;
|
|
105
|
+
}
|
|
106
|
+
export interface QuestionResponses {
|
|
107
|
+
reversibility: -2 | -1 | 0 | 1;
|
|
108
|
+
blastRadius: -2 | -1 | 0 | 1;
|
|
109
|
+
verificationCost: -2 | -1 | 0 | 1;
|
|
110
|
+
domainComplexity: -2 | -1 | 0 | 1;
|
|
111
|
+
aiTrackRecord: -2 | -1 | 0 | 1;
|
|
112
|
+
}
|
|
113
|
+
export interface CalibrationSample {
|
|
114
|
+
timestamp: Date;
|
|
115
|
+
vibeScore: number;
|
|
116
|
+
declaredLevel: 0 | 1 | 2 | 3 | 4 | 5;
|
|
117
|
+
outcome: 'correct' | 'too_high' | 'too_low';
|
|
118
|
+
features: number[];
|
|
119
|
+
modelVersion: string;
|
|
120
|
+
}
|
|
121
|
+
export interface CalibrationState {
|
|
122
|
+
samples: CalibrationSample[];
|
|
123
|
+
weights: number[];
|
|
124
|
+
thresholds: number[];
|
|
125
|
+
ece: number;
|
|
126
|
+
lastUpdated: Date;
|
|
127
|
+
version: string;
|
|
128
|
+
}
|
|
129
|
+
export interface VibeCheckResultV2 extends VibeCheckResult {
|
|
130
|
+
vibeScore?: VibeScore;
|
|
131
|
+
recommendation?: VibeLevelRecommendation;
|
|
132
|
+
semanticMetrics: {
|
|
133
|
+
iterationVelocity: MetricResult;
|
|
134
|
+
reworkRatio: MetricResult;
|
|
135
|
+
trustPassRate: MetricResult;
|
|
136
|
+
debugSpiralDuration: MetricResult;
|
|
137
|
+
flowEfficiency: MetricResult;
|
|
138
|
+
};
|
|
139
|
+
semanticFreeMetrics?: {
|
|
140
|
+
fileChurn: FileChurnResult;
|
|
141
|
+
timeSpiral: TimeSpiralResult;
|
|
142
|
+
velocityAnomaly: VelocityAnomalyResult;
|
|
143
|
+
codeStability: CodeStabilityResult;
|
|
144
|
+
};
|
|
62
145
|
}
|
|
63
146
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AACzD,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEhE,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAClF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,IAAI,CAAC;IAClB,UAAU,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QACN,IAAI,EAAE,IAAI,CAAC;QACX,EAAE,EAAE,IAAI,CAAC;QACT,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,OAAO,EAAE;QACP,iBAAiB,EAAE,YAAY,CAAC;QAChC,WAAW,EAAE,YAAY,CAAC;QAC1B,aAAa,EAAE,YAAY,CAAC;QAC5B,mBAAmB,EAAE,YAAY,CAAC;QAClC,cAAc,EAAE,YAAY,CAAC;KAC9B,CAAC;IACF,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@boshu2/vibe-check",
|
|
3
|
-
"version": "1.0
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Track git commit patterns during AI-assisted coding (experimental)",
|
|
5
5
|
"main": "dist/cli.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"vibe-check": "bin/vibe-check.js"
|
|
@@ -29,17 +29,18 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"chalk": "^4.1.2",
|
|
32
|
-
"commander": "^
|
|
33
|
-
"date-fns": "^
|
|
34
|
-
"
|
|
32
|
+
"commander": "^14.0.0",
|
|
33
|
+
"date-fns": "^4.1.0",
|
|
34
|
+
"enquirer": "^2.4.1",
|
|
35
|
+
"simple-git": "^3.30.0"
|
|
35
36
|
},
|
|
36
37
|
"devDependencies": {
|
|
37
|
-
"@types/node": "^
|
|
38
|
+
"@types/node": "^22.0.0",
|
|
38
39
|
"ts-node": "^10.9.2",
|
|
39
|
-
"typescript": "^5.
|
|
40
|
-
"vitest": "^4.0.
|
|
40
|
+
"typescript": "^5.9.0",
|
|
41
|
+
"vitest": "^4.0.0"
|
|
41
42
|
},
|
|
42
43
|
"engines": {
|
|
43
|
-
"node": ">=
|
|
44
|
+
"node": ">=20.0.0"
|
|
44
45
|
}
|
|
45
46
|
}
|