@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.
Files changed (128) 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 +46 -0
  10. package/CLAUDE.md +178 -0
  11. package/README.md +265 -63
  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 +30 -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 +4 -0
  35. package/dist/commands/index.d.ts.map +1 -0
  36. package/dist/commands/index.js +11 -0
  37. package/dist/commands/index.js.map +1 -0
  38. package/dist/commands/level.d.ts +3 -0
  39. package/dist/commands/level.d.ts.map +1 -0
  40. package/dist/commands/level.js +277 -0
  41. package/dist/commands/level.js.map +1 -0
  42. package/dist/commands/profile.d.ts +4 -0
  43. package/dist/commands/profile.d.ts.map +1 -0
  44. package/dist/commands/profile.js +143 -0
  45. package/dist/commands/profile.js.map +1 -0
  46. package/dist/gamification/achievements.d.ts +15 -0
  47. package/dist/gamification/achievements.d.ts.map +1 -0
  48. package/dist/gamification/achievements.js +273 -0
  49. package/dist/gamification/achievements.js.map +1 -0
  50. package/dist/gamification/index.d.ts +8 -0
  51. package/dist/gamification/index.d.ts.map +1 -0
  52. package/dist/gamification/index.js +30 -0
  53. package/dist/gamification/index.js.map +1 -0
  54. package/dist/gamification/profile.d.ts +46 -0
  55. package/dist/gamification/profile.d.ts.map +1 -0
  56. package/dist/gamification/profile.js +272 -0
  57. package/dist/gamification/profile.js.map +1 -0
  58. package/dist/gamification/streaks.d.ts +26 -0
  59. package/dist/gamification/streaks.d.ts.map +1 -0
  60. package/dist/gamification/streaks.js +132 -0
  61. package/dist/gamification/streaks.js.map +1 -0
  62. package/dist/gamification/types.d.ts +111 -0
  63. package/dist/gamification/types.d.ts.map +1 -0
  64. package/dist/gamification/types.js +26 -0
  65. package/dist/gamification/types.js.map +1 -0
  66. package/dist/gamification/xp.d.ts +37 -0
  67. package/dist/gamification/xp.d.ts.map +1 -0
  68. package/dist/gamification/xp.js +115 -0
  69. package/dist/gamification/xp.js.map +1 -0
  70. package/dist/git.d.ts +11 -0
  71. package/dist/git.d.ts.map +1 -1
  72. package/dist/git.js +52 -0
  73. package/dist/git.js.map +1 -1
  74. package/dist/metrics/code-stability.d.ts +13 -0
  75. package/dist/metrics/code-stability.d.ts.map +1 -0
  76. package/dist/metrics/code-stability.js +74 -0
  77. package/dist/metrics/code-stability.js.map +1 -0
  78. package/dist/metrics/file-churn.d.ts +8 -0
  79. package/dist/metrics/file-churn.d.ts.map +1 -0
  80. package/dist/metrics/file-churn.js +75 -0
  81. package/dist/metrics/file-churn.js.map +1 -0
  82. package/dist/metrics/time-spiral.d.ts +8 -0
  83. package/dist/metrics/time-spiral.d.ts.map +1 -0
  84. package/dist/metrics/time-spiral.js +69 -0
  85. package/dist/metrics/time-spiral.js.map +1 -0
  86. package/dist/metrics/velocity-anomaly.d.ts +13 -0
  87. package/dist/metrics/velocity-anomaly.d.ts.map +1 -0
  88. package/dist/metrics/velocity-anomaly.js +67 -0
  89. package/dist/metrics/velocity-anomaly.js.map +1 -0
  90. package/dist/output/index.d.ts +6 -3
  91. package/dist/output/index.d.ts.map +1 -1
  92. package/dist/output/index.js +4 -3
  93. package/dist/output/index.js.map +1 -1
  94. package/dist/output/json.d.ts +2 -2
  95. package/dist/output/json.d.ts.map +1 -1
  96. package/dist/output/json.js +54 -0
  97. package/dist/output/json.js.map +1 -1
  98. package/dist/output/markdown.d.ts +2 -2
  99. package/dist/output/markdown.d.ts.map +1 -1
  100. package/dist/output/markdown.js +34 -1
  101. package/dist/output/markdown.js.map +1 -1
  102. package/dist/output/terminal.d.ts +6 -2
  103. package/dist/output/terminal.d.ts.map +1 -1
  104. package/dist/output/terminal.js +131 -3
  105. package/dist/output/terminal.js.map +1 -1
  106. package/dist/recommend/index.d.ts +3 -0
  107. package/dist/recommend/index.d.ts.map +1 -0
  108. package/dist/recommend/index.js +14 -0
  109. package/dist/recommend/index.js.map +1 -0
  110. package/dist/recommend/ordered-logistic.d.ts +49 -0
  111. package/dist/recommend/ordered-logistic.d.ts.map +1 -0
  112. package/dist/recommend/ordered-logistic.js +153 -0
  113. package/dist/recommend/ordered-logistic.js.map +1 -0
  114. package/dist/recommend/questions.d.ts +19 -0
  115. package/dist/recommend/questions.d.ts.map +1 -0
  116. package/dist/recommend/questions.js +73 -0
  117. package/dist/recommend/questions.js.map +1 -0
  118. package/dist/score/index.d.ts +21 -0
  119. package/dist/score/index.d.ts.map +1 -0
  120. package/dist/score/index.js +48 -0
  121. package/dist/score/index.js.map +1 -0
  122. package/dist/score/weights.d.ts +16 -0
  123. package/dist/score/weights.d.ts.map +1 -0
  124. package/dist/score/weights.js +28 -0
  125. package/dist/score/weights.js.map +1 -0
  126. package/dist/types.d.ts +83 -0
  127. package/dist/types.d.ts.map +1 -1
  128. 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
@@ -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;CAClB"}
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.1",
4
- "description": "Measure vibe coding effectiveness with git commit analysis",
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": "^12.1.0",
33
- "date-fns": "^3.6.0",
34
- "simple-git": "^3.27.0"
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": "^20.17.6",
38
+ "@types/node": "^22.0.0",
38
39
  "ts-node": "^10.9.2",
39
- "typescript": "^5.6.3",
40
- "vitest": "^4.0.14"
40
+ "typescript": "^5.9.0",
41
+ "vitest": "^4.0.0"
41
42
  },
42
43
  "engines": {
43
- "node": ">=18.0.0"
44
+ "node": ">=20.0.0"
44
45
  }
45
46
  }