@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,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/hooks/pre-push
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# vibe-check pre-push hook
|
|
3
|
+
# Runs vibe-check on commits being pushed and displays metrics
|
|
4
|
+
#
|
|
5
|
+
# Installation:
|
|
6
|
+
# cp hooks/pre-push .git/hooks/pre-push
|
|
7
|
+
# chmod +x .git/hooks/pre-push
|
|
8
|
+
#
|
|
9
|
+
# Or run: npx @boshu2/vibe-check init-hook
|
|
10
|
+
|
|
11
|
+
# Colors
|
|
12
|
+
RED='\033[0;31m'
|
|
13
|
+
YELLOW='\033[1;33m'
|
|
14
|
+
GREEN='\033[0;32m'
|
|
15
|
+
CYAN='\033[0;36m'
|
|
16
|
+
NC='\033[0m' # No Color
|
|
17
|
+
|
|
18
|
+
# Configuration (set these env vars to customize)
|
|
19
|
+
VIBE_CHECK_BLOCK_LOW=${VIBE_CHECK_BLOCK_LOW:-false} # Set to "true" to block push on LOW rating
|
|
20
|
+
VIBE_CHECK_SIMPLE=${VIBE_CHECK_SIMPLE:-true} # Use simple output by default
|
|
21
|
+
VIBE_CHECK_SCORE=${VIBE_CHECK_SCORE:-true} # Include vibe score
|
|
22
|
+
|
|
23
|
+
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
24
|
+
echo -e "${CYAN} 🎯 Running vibe-check before push...${NC}"
|
|
25
|
+
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
26
|
+
echo
|
|
27
|
+
|
|
28
|
+
# Read stdin for push info
|
|
29
|
+
while read local_ref local_sha remote_ref remote_sha; do
|
|
30
|
+
# Skip if deleting branch
|
|
31
|
+
if [ "$local_sha" = "0000000000000000000000000000000000000000" ]; then
|
|
32
|
+
continue
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
# Determine the range of commits
|
|
36
|
+
if [ "$remote_sha" = "0000000000000000000000000000000000000000" ]; then
|
|
37
|
+
# New branch - check all commits
|
|
38
|
+
RANGE="$local_sha"
|
|
39
|
+
SINCE_FLAG=""
|
|
40
|
+
else
|
|
41
|
+
# Existing branch - check commits since last push
|
|
42
|
+
RANGE="$remote_sha..$local_sha"
|
|
43
|
+
# Get the date of the remote SHA
|
|
44
|
+
SINCE_DATE=$(git log -1 --format=%ci "$remote_sha" 2>/dev/null)
|
|
45
|
+
if [ -n "$SINCE_DATE" ]; then
|
|
46
|
+
SINCE_FLAG="--since \"$SINCE_DATE\""
|
|
47
|
+
else
|
|
48
|
+
SINCE_FLAG=""
|
|
49
|
+
fi
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
# Count commits being pushed
|
|
53
|
+
COMMIT_COUNT=$(git rev-list --count "$RANGE" 2>/dev/null || echo "0")
|
|
54
|
+
|
|
55
|
+
if [ "$COMMIT_COUNT" = "0" ]; then
|
|
56
|
+
echo -e "${YELLOW}No new commits to analyze${NC}"
|
|
57
|
+
continue
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
echo -e "Analyzing ${GREEN}$COMMIT_COUNT${NC} commit(s) on ${CYAN}$local_ref${NC}"
|
|
61
|
+
echo
|
|
62
|
+
|
|
63
|
+
# Build vibe-check command
|
|
64
|
+
VIBE_CMD="npx @boshu2/vibe-check"
|
|
65
|
+
|
|
66
|
+
if [ "$VIBE_CHECK_SIMPLE" = "true" ]; then
|
|
67
|
+
VIBE_CMD="$VIBE_CMD --simple"
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
if [ "$VIBE_CHECK_SCORE" = "true" ]; then
|
|
71
|
+
VIBE_CMD="$VIBE_CMD --score"
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
# Run vibe-check and capture output
|
|
75
|
+
if [ -n "$SINCE_FLAG" ]; then
|
|
76
|
+
OUTPUT=$(eval "$VIBE_CMD $SINCE_FLAG" 2>&1)
|
|
77
|
+
else
|
|
78
|
+
OUTPUT=$(eval "$VIBE_CMD --since '1 week ago'" 2>&1)
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
EXIT_CODE=$?
|
|
82
|
+
|
|
83
|
+
# Display output
|
|
84
|
+
echo "$OUTPUT"
|
|
85
|
+
echo
|
|
86
|
+
|
|
87
|
+
# Check if we should block on LOW rating
|
|
88
|
+
if [ "$VIBE_CHECK_BLOCK_LOW" = "true" ] && [ $EXIT_CODE -eq 1 ]; then
|
|
89
|
+
echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
90
|
+
echo -e "${RED} ⛔ Push blocked: LOW vibe rating${NC}"
|
|
91
|
+
echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
92
|
+
echo
|
|
93
|
+
echo -e "To push anyway, set: ${YELLOW}VIBE_CHECK_BLOCK_LOW=false git push${NC}"
|
|
94
|
+
exit 1
|
|
95
|
+
fi
|
|
96
|
+
done
|
|
97
|
+
|
|
98
|
+
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
99
|
+
echo -e "${GREEN} ✓ Vibe check complete, proceeding with push${NC}"
|
|
100
|
+
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
101
|
+
echo
|
|
102
|
+
|
|
103
|
+
exit 0
|
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.2.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
|
}
|