@boshu2/vibe-check 1.7.0 โ 1.8.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/actionable-coaching-plan-2025-12-02.md +209 -0
- package/.agents/plans/git-forensics-enhancement-2025-12-05.md +493 -0
- package/.claude/skills/typescript-review.md +152 -0
- package/CHANGELOG.md +41 -5
- package/CLAUDE.md +27 -23
- package/Makefile +0 -13
- package/README.md +126 -173
- package/SECURITY.md +5 -1
- package/assets/logo-dark.svg +47 -0
- package/assets/logo.svg +47 -0
- package/claude-progress.json +28 -7
- package/claude-progress.txt +48 -0
- package/dist/analyzers/patterns.d.ts +62 -0
- package/dist/analyzers/patterns.d.ts.map +1 -0
- package/dist/analyzers/patterns.js +103 -0
- package/dist/analyzers/patterns.js.map +1 -0
- package/dist/analyzers/quality.d.ts +58 -0
- package/dist/analyzers/quality.d.ts.map +1 -0
- package/dist/analyzers/quality.js +114 -0
- package/dist/analyzers/quality.js.map +1 -0
- package/dist/analyzers/sessions.d.ts +45 -0
- package/dist/analyzers/sessions.d.ts.map +1 -0
- package/dist/analyzers/sessions.js +123 -0
- package/dist/analyzers/sessions.js.map +1 -0
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +5 -0
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/forensics.d.ts +29 -0
- package/dist/commands/forensics.d.ts.map +1 -0
- package/dist/commands/forensics.js +213 -0
- package/dist/commands/forensics.js.map +1 -0
- package/dist/commands/index.d.ts +4 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +11 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/insights.d.ts +3 -0
- package/dist/commands/insights.d.ts.map +1 -0
- package/dist/commands/insights.js +120 -0
- package/dist/commands/insights.js.map +1 -0
- package/dist/commands/pipeline.d.ts +3 -0
- package/dist/commands/pipeline.d.ts.map +1 -0
- package/dist/commands/pipeline.js +485 -0
- package/dist/commands/pipeline.js.map +1 -0
- package/dist/commands/profile.d.ts +0 -1
- package/dist/commands/profile.d.ts.map +1 -1
- package/dist/commands/profile.js +0 -4
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +38 -0
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/sessions.d.ts +20 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +201 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +48 -7
- package/dist/commands/watch.js.map +1 -1
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +11 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/spiral-history.d.ts +62 -0
- package/dist/storage/spiral-history.d.ts.map +1 -0
- package/dist/storage/spiral-history.js +265 -0
- package/dist/storage/spiral-history.js.map +1 -0
- package/docs/ARCHITECTURE.md +2 -10
- package/docs/GAMIFICATION.md +19 -266
- package/docs/VIBE-ECOSYSTEM.md +12 -78
- package/feature-list.json +140 -88
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spiral-history.d.ts","sourceRoot":"","sources":["../../src/storage/spiral-history.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;AAGzF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,EAAE,KAAK,CAAC;QAChB,UAAU,EAAE,gBAAgB,CAAC;QAC7B,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,IAAI,CAUN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAgBnE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,EAAE,CAElD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAiDlF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,SAAK,GACR,KAAK,CAAC;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC,CA+DD;AA+DD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAY7D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,gBAAgB,GAAG,MAAM,CAW7E"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getSpiralHistoryPath = getSpiralHistoryPath;
|
|
37
|
+
exports.appendSpiral = appendSpiral;
|
|
38
|
+
exports.resolveSpiral = resolveSpiral;
|
|
39
|
+
exports.readSpiralHistory = readSpiralHistory;
|
|
40
|
+
exports.getAdvice = getAdvice;
|
|
41
|
+
exports.getPatternStats = getPatternStats;
|
|
42
|
+
exports.getPatternDisplayName = getPatternDisplayName;
|
|
43
|
+
exports.getResolutionDisplayName = getResolutionDisplayName;
|
|
44
|
+
/**
|
|
45
|
+
* Spiral History Storage
|
|
46
|
+
*
|
|
47
|
+
* Append-only NDJSON log of spiral events with resolution tracking.
|
|
48
|
+
* Enables personalized coaching based on what worked before.
|
|
49
|
+
*/
|
|
50
|
+
const path = __importStar(require("path"));
|
|
51
|
+
const os = __importStar(require("os"));
|
|
52
|
+
const atomic_1 = require("./atomic");
|
|
53
|
+
const HISTORY_DIR = '.vibe-check';
|
|
54
|
+
const HISTORY_FILE = 'spiral-history.ndjson';
|
|
55
|
+
const MAX_RECORDS = 100; // Keep last 100 spirals
|
|
56
|
+
/**
|
|
57
|
+
* Get spiral history file path (in user's home directory)
|
|
58
|
+
*/
|
|
59
|
+
function getSpiralHistoryPath() {
|
|
60
|
+
return path.join(os.homedir(), HISTORY_DIR, HISTORY_FILE);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Append a spiral to history
|
|
64
|
+
*/
|
|
65
|
+
function appendSpiral(pattern, component, duration, commits) {
|
|
66
|
+
const record = {
|
|
67
|
+
date: new Date().toISOString(),
|
|
68
|
+
pattern,
|
|
69
|
+
component,
|
|
70
|
+
duration,
|
|
71
|
+
commits,
|
|
72
|
+
};
|
|
73
|
+
(0, atomic_1.appendLineSync)(getSpiralHistoryPath(), JSON.stringify(record));
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Resolve the most recent unresolved spiral
|
|
77
|
+
*/
|
|
78
|
+
function resolveSpiral(resolution) {
|
|
79
|
+
const records = readSpiralHistory();
|
|
80
|
+
// Find most recent unresolved spiral
|
|
81
|
+
for (let i = records.length - 1; i >= 0; i--) {
|
|
82
|
+
if (!records[i].resolution) {
|
|
83
|
+
records[i].resolution = resolution;
|
|
84
|
+
records[i].resolvedAt = new Date().toISOString();
|
|
85
|
+
// Rewrite entire file (since we're modifying existing record)
|
|
86
|
+
rewriteHistory(records);
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return false; // No unresolved spiral found
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Read all spiral history
|
|
94
|
+
*/
|
|
95
|
+
function readSpiralHistory() {
|
|
96
|
+
return (0, atomic_1.readNdjsonSync)(getSpiralHistoryPath());
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get personalized advice for a pattern
|
|
100
|
+
*/
|
|
101
|
+
function getAdvice(pattern, component) {
|
|
102
|
+
const records = readSpiralHistory();
|
|
103
|
+
// Filter to matching pattern (and optionally component)
|
|
104
|
+
const matching = records.filter((r) => r.pattern === pattern && (!component || r.component === component));
|
|
105
|
+
if (matching.length === 0) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
// Calculate history stats
|
|
109
|
+
const totalDuration = matching.reduce((sum, r) => sum + r.duration, 0);
|
|
110
|
+
const avgDuration = Math.round(totalDuration / matching.length);
|
|
111
|
+
// Group by resolution
|
|
112
|
+
const resolutionStats = new Map();
|
|
113
|
+
for (const record of matching) {
|
|
114
|
+
if (record.resolution) {
|
|
115
|
+
const stats = resolutionStats.get(record.resolution) || { times: 0, totalDuration: 0 };
|
|
116
|
+
stats.times++;
|
|
117
|
+
stats.totalDuration += record.duration;
|
|
118
|
+
resolutionStats.set(record.resolution, stats);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Sort by frequency
|
|
122
|
+
const whatWorked = Array.from(resolutionStats.entries())
|
|
123
|
+
.map(([resolution, stats]) => ({
|
|
124
|
+
resolution,
|
|
125
|
+
times: stats.times,
|
|
126
|
+
avgDuration: Math.round(stats.totalDuration / stats.times),
|
|
127
|
+
}))
|
|
128
|
+
.sort((a, b) => b.times - a.times);
|
|
129
|
+
// Generate suggestion
|
|
130
|
+
const suggestion = generateSuggestion(pattern, whatWorked, matching.length);
|
|
131
|
+
return {
|
|
132
|
+
yourHistory: {
|
|
133
|
+
times: matching.length,
|
|
134
|
+
avgDuration,
|
|
135
|
+
totalMinutes: totalDuration,
|
|
136
|
+
},
|
|
137
|
+
whatWorked,
|
|
138
|
+
suggestion,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get pattern statistics for insights command
|
|
143
|
+
*/
|
|
144
|
+
function getPatternStats(days = 30) {
|
|
145
|
+
const records = readSpiralHistory();
|
|
146
|
+
const cutoff = new Date();
|
|
147
|
+
cutoff.setDate(cutoff.getDate() - days);
|
|
148
|
+
// Filter to recent records
|
|
149
|
+
const recent = records.filter((r) => new Date(r.date) >= cutoff);
|
|
150
|
+
// Group by pattern
|
|
151
|
+
const patternStats = new Map();
|
|
152
|
+
for (const record of recent) {
|
|
153
|
+
const stats = patternStats.get(record.pattern) || {
|
|
154
|
+
times: 0,
|
|
155
|
+
totalDuration: 0,
|
|
156
|
+
resolutions: new Map(),
|
|
157
|
+
components: new Set(),
|
|
158
|
+
};
|
|
159
|
+
stats.times++;
|
|
160
|
+
stats.totalDuration += record.duration;
|
|
161
|
+
stats.components.add(record.component);
|
|
162
|
+
if (record.resolution) {
|
|
163
|
+
stats.resolutions.set(record.resolution, (stats.resolutions.get(record.resolution) || 0) + 1);
|
|
164
|
+
}
|
|
165
|
+
patternStats.set(record.pattern, stats);
|
|
166
|
+
}
|
|
167
|
+
// Convert to array and sort by frequency
|
|
168
|
+
return Array.from(patternStats.entries())
|
|
169
|
+
.map(([pattern, stats]) => {
|
|
170
|
+
// Find most common resolution
|
|
171
|
+
let bestFix = null;
|
|
172
|
+
let maxCount = 0;
|
|
173
|
+
for (const [resolution, count] of stats.resolutions) {
|
|
174
|
+
if (count > maxCount) {
|
|
175
|
+
maxCount = count;
|
|
176
|
+
bestFix = resolution;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
pattern,
|
|
181
|
+
times: stats.times,
|
|
182
|
+
avgDuration: Math.round(stats.totalDuration / stats.times),
|
|
183
|
+
bestFix,
|
|
184
|
+
components: Array.from(stats.components),
|
|
185
|
+
};
|
|
186
|
+
})
|
|
187
|
+
.sort((a, b) => b.times - a.times);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Rewrite entire history (used when modifying records)
|
|
191
|
+
*/
|
|
192
|
+
function rewriteHistory(records) {
|
|
193
|
+
const filePath = getSpiralHistoryPath();
|
|
194
|
+
// Trim to max records
|
|
195
|
+
const trimmed = records.slice(-MAX_RECORDS);
|
|
196
|
+
// Write each record as a line
|
|
197
|
+
const content = trimmed.map((r) => JSON.stringify(r)).join('\n') + '\n';
|
|
198
|
+
// Use atomic write for safety
|
|
199
|
+
(0, atomic_1.atomicWriteSync)(filePath, content);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Generate actionable suggestion based on history
|
|
203
|
+
*/
|
|
204
|
+
function generateSuggestion(pattern, whatWorked, totalTimes) {
|
|
205
|
+
// Pattern-specific base advice
|
|
206
|
+
const patternAdvice = {
|
|
207
|
+
SECRETS_AUTH: 'Write a test that validates your auth/token assumptions',
|
|
208
|
+
VOLUME_CONFIG: 'Check mount paths and permissions with a minimal test pod',
|
|
209
|
+
API_MISMATCH: 'Verify API version and schema against the docs',
|
|
210
|
+
SSL_TLS: 'Test certificate chain and FIPS compliance in isolation',
|
|
211
|
+
IMAGE_REGISTRY: 'Verify image exists and credentials are valid with docker pull',
|
|
212
|
+
GITOPS_DRIFT: 'Sync with ArgoCD and check for resource conflicts',
|
|
213
|
+
};
|
|
214
|
+
const baseAdvice = patternAdvice[pattern] || 'Take a step back and validate your assumptions';
|
|
215
|
+
// If we have history of what worked, personalize
|
|
216
|
+
if (whatWorked.length > 0) {
|
|
217
|
+
const best = whatWorked[0];
|
|
218
|
+
const resolutionText = {
|
|
219
|
+
TEST: 'writing a test',
|
|
220
|
+
BREAK: 'taking a break',
|
|
221
|
+
DOCS: 'reading the docs',
|
|
222
|
+
HELP: 'asking for help',
|
|
223
|
+
ROLLBACK: 'rolling back',
|
|
224
|
+
OTHER: 'trying something different',
|
|
225
|
+
};
|
|
226
|
+
if (best.times >= 2) {
|
|
227
|
+
return `Your go-to: ${resolutionText[best.resolution]} (worked ${best.times}x). ${baseAdvice}`;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// First time or no resolution data
|
|
231
|
+
if (totalTimes === 1) {
|
|
232
|
+
return baseAdvice;
|
|
233
|
+
}
|
|
234
|
+
return `You've hit this ${totalTimes}x. ${baseAdvice}`;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Friendly pattern names for display
|
|
238
|
+
*/
|
|
239
|
+
function getPatternDisplayName(pattern) {
|
|
240
|
+
const names = {
|
|
241
|
+
SECRETS_AUTH: 'OAuth/Token Issues',
|
|
242
|
+
VOLUME_CONFIG: 'Volume/Mount Issues',
|
|
243
|
+
API_MISMATCH: 'API Version/Schema Issues',
|
|
244
|
+
SSL_TLS: 'SSL/TLS/Certificate Issues',
|
|
245
|
+
IMAGE_REGISTRY: 'Image/Registry Issues',
|
|
246
|
+
GITOPS_DRIFT: 'GitOps Sync Issues',
|
|
247
|
+
OTHER: 'Other Issues',
|
|
248
|
+
};
|
|
249
|
+
return names[pattern] || pattern;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Friendly resolution names for display
|
|
253
|
+
*/
|
|
254
|
+
function getResolutionDisplayName(resolution) {
|
|
255
|
+
const names = {
|
|
256
|
+
TEST: 'Wrote a test',
|
|
257
|
+
BREAK: 'Took a break',
|
|
258
|
+
DOCS: 'Read the docs',
|
|
259
|
+
HELP: 'Asked for help',
|
|
260
|
+
ROLLBACK: 'Rolled back',
|
|
261
|
+
OTHER: 'Other',
|
|
262
|
+
};
|
|
263
|
+
return names[resolution];
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=spiral-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spiral-history.js","sourceRoot":"","sources":["../../src/storage/spiral-history.ts"],"names":[],"mappings":"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"}
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -77,15 +77,8 @@ src/
|
|
|
77
77
|
โ โโโ xp.ts # XP calculation, levels
|
|
78
78
|
โ โโโ streaks.ts # Streak tracking
|
|
79
79
|
โ โโโ achievements.ts # Achievement definitions
|
|
80
|
-
โ โโโ challenges.ts # Weekly challenges
|
|
81
|
-
โ โโโ leaderboards.ts # Personal high scores
|
|
82
|
-
โ โโโ hall-of-fame.ts # Personal records
|
|
83
80
|
โ โโโ stats.ts # Weekly stats, sparklines
|
|
84
|
-
โ
|
|
85
|
-
โ โโโ share.ts # Shareable profiles
|
|
86
|
-
โ โโโ profile.ts # Profile persistence
|
|
87
|
-
โ โโโ pattern-memory.ts # Spiral trigger tracking
|
|
88
|
-
โ โโโ intervention-memory.ts # What breaks spirals
|
|
81
|
+
โ โโโ profile.ts # Profile persistence
|
|
89
82
|
โ
|
|
90
83
|
โโโ output/ # Output formatters
|
|
91
84
|
โโโ index.ts # Format router
|
|
@@ -345,8 +338,7 @@ const XP_REWARDS = {
|
|
|
345
338
|
|
|
346
339
|
```
|
|
347
340
|
~/.vibe-check/ # Global (cross-repo)
|
|
348
|
-
|
|
349
|
-
โโโ leaderboards.json # Personal high scores
|
|
341
|
+
โโโ profile.json # User profile
|
|
350
342
|
|
|
351
343
|
.vibe-check/ # Per-repo (optional)
|
|
352
344
|
โโโ profile.json # Repo-specific profile
|
package/docs/GAMIFICATION.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# vibe-check Gamification System
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**XP, levels, streaks, and achievements for self-improvement**
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
## Overview
|
|
8
8
|
|
|
9
|
-
vibe-check includes a
|
|
9
|
+
vibe-check includes a gamification layer to make self-improvement engaging. This isn't productivity surveillanceโit's a personal game you play with yourself.
|
|
10
10
|
|
|
11
11
|
```
|
|
12
12
|
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
@@ -14,8 +14,8 @@ vibe-check includes a complete gamification layer to make self-improvement engag
|
|
|
14
14
|
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
|
15
15
|
โ โ
|
|
16
16
|
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
|
|
17
|
-
โ โ XP โ โ Streaks โ โ Achieve- โ โ
|
|
18
|
-
โ โ & Levels โ โ โ โ ments โ โ
|
|
17
|
+
โ โ XP โ โ Streaks โ โ Achieve- โ โ Weekly โ โ
|
|
18
|
+
โ โ & Levels โ โ โ โ ments โ โ Stats โ โ
|
|
19
19
|
โ โโโโโโฌโโโโโโ โโโโโโฌโโโโโโ โโโโโโฌโโโโโโ โโโโโโฌโโโโโโ โ
|
|
20
20
|
โ โ โ โ โ โ
|
|
21
21
|
โ โโโโโโโโโโโโโโโดโโโโโโโฌโโโโโโโดโโโโโโโโโโโโโโ โ
|
|
@@ -23,12 +23,7 @@ vibe-check includes a complete gamification layer to make self-improvement engag
|
|
|
23
23
|
โ โโโโโโโโดโโโโโโโ โ
|
|
24
24
|
โ โ Profile โ โ
|
|
25
25
|
โ โ Storage โ โ
|
|
26
|
-
โ
|
|
27
|
-
โ โ โ
|
|
28
|
-
โ โโโโโโโโโโโโ โโโโโโโโโโโโดโโโโโโโโโโโ โโโโโโโโโโโโ โ
|
|
29
|
-
โ โ Leader- โ โ Hall of Fame โ โ Badges โ โ
|
|
30
|
-
โ โ boards โ โ โ โ โ โ
|
|
31
|
-
โ โโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโ โ
|
|
26
|
+
โ โโโโโโโโโโโโโโโ โ
|
|
32
27
|
โ โ
|
|
33
28
|
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
34
29
|
```
|
|
@@ -50,7 +45,6 @@ vibe-check includes a complete gamification layer to make self-improvement engag
|
|
|
50
45
|
| No spirals | +15 | Bonus for 0 spirals |
|
|
51
46
|
| Perfect trust | +20 | 100% trust pass rate |
|
|
52
47
|
| Achievement unlock | +25-100 | Varies by achievement |
|
|
53
|
-
| Challenge complete | +30-150 | Based on difficulty |
|
|
54
48
|
|
|
55
49
|
### XP Calculation Example
|
|
56
50
|
|
|
@@ -96,13 +90,13 @@ if (previousSession.periodFrom === currentPeriodFrom &&
|
|
|
96
90
|
|
|
97
91
|
After reaching Grandmaster, prestige tiers unlock:
|
|
98
92
|
|
|
99
|
-
| Tier | Name | XP Range | Icon |
|
|
100
|
-
|
|
101
|
-
| 1 | Archmage | 5000-9999 | ๐ฎ |
|
|
102
|
-
| 2 | Sage | 10000-19999 | ๐ฟ |
|
|
103
|
-
| 3 | Zenmester | 20000-39999 | โฏ๏ธ |
|
|
104
|
-
| 4 | Transcendent | 40000-79999 | ๐ |
|
|
105
|
-
| 5 | Legendary | 80000+ | ๐ซ |
|
|
93
|
+
| Tier | Name | XP Range | Icon |
|
|
94
|
+
|------|------|----------|------|
|
|
95
|
+
| 1 | Archmage | 5000-9999 | ๐ฎ |
|
|
96
|
+
| 2 | Sage | 10000-19999 | ๐ฟ |
|
|
97
|
+
| 3 | Zenmester | 20000-39999 | โฏ๏ธ |
|
|
98
|
+
| 4 | Transcendent | 40000-79999 | ๐ |
|
|
99
|
+
| 5 | Legendary | 80000+ | ๐ซ |
|
|
106
100
|
|
|
107
101
|
### Level Display
|
|
108
102
|
|
|
@@ -215,131 +209,6 @@ Recent:
|
|
|
215
209
|
|
|
216
210
|
---
|
|
217
211
|
|
|
218
|
-
## Weekly Challenges
|
|
219
|
-
|
|
220
|
-
### How Challenges Work
|
|
221
|
-
|
|
222
|
-
- **Generated weekly**: Based on your weak metrics
|
|
223
|
-
- **3 challenges per week**: 1 targeted + 2 random
|
|
224
|
-
- **Progress tracked**: Updates after each session
|
|
225
|
-
- **XP rewards**: 30-150 XP per challenge
|
|
226
|
-
|
|
227
|
-
### Challenge Types
|
|
228
|
-
|
|
229
|
-
| Type | Name | Description | Targets |
|
|
230
|
-
|------|------|-------------|---------|
|
|
231
|
-
| `TRUST_STREAK` | Trust Gauntlet | Get 90%+ trust N times | 3, 5, 7 |
|
|
232
|
-
| `ZERO_SPIRALS` | Zen Mode | N sessions with 0 spirals | 3, 5, 7 |
|
|
233
|
-
| `ELITE_COUNT` | Elite Streak | Get N ELITE ratings | 2, 4, 6 |
|
|
234
|
-
| `COMMIT_VOLUME` | Commit Champion | Analyze N+ commits | 50, 100, 200 |
|
|
235
|
-
| `STREAK_EXTEND` | Streak Builder | Extend streak by N days | 3, 5, 7 |
|
|
236
|
-
|
|
237
|
-
### Challenge Display
|
|
238
|
-
|
|
239
|
-
```
|
|
240
|
-
WEEKLY CHALLENGES
|
|
241
|
-
|
|
242
|
-
๐ฏ Trust Gauntlet: โโโโโโโโโโ 4/5 (+100 XP)
|
|
243
|
-
๐ง Zen Mode: โโโโโโโโโโ โ COMPLETE
|
|
244
|
-
๐ฅ Streak Builder: โโโโโโโโโโ 1/5 (+40 XP)
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
### Challenge Selection Algorithm
|
|
248
|
-
|
|
249
|
-
1. Analyze recent session metrics
|
|
250
|
-
2. Identify weak areas (low trust? many spirals?)
|
|
251
|
-
3. Generate 1 challenge targeting weakness (medium difficulty)
|
|
252
|
-
4. Generate 2 random challenges (easy difficulty)
|
|
253
|
-
|
|
254
|
-
---
|
|
255
|
-
|
|
256
|
-
## Leaderboards
|
|
257
|
-
|
|
258
|
-
### Personal Leaderboards
|
|
259
|
-
|
|
260
|
-
Track your high scores across all repos:
|
|
261
|
-
|
|
262
|
-
```
|
|
263
|
-
๐ All-Time Top Scores
|
|
264
|
-
|
|
265
|
-
๐ฅ 96% ELITE my-project (Nov 15)
|
|
266
|
-
๐ฅ 94% ELITE vibe-check (Nov 28)
|
|
267
|
-
๐ฅ 91% ELITE other-repo (Nov 20)
|
|
268
|
-
4. 89% HIGH work-app (Nov 18)
|
|
269
|
-
5. 87% HIGH side-project (Nov 10)
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
### Per-Repo Leaderboards
|
|
273
|
-
|
|
274
|
-
```
|
|
275
|
-
๐ Top Scores - vibe-check
|
|
276
|
-
|
|
277
|
-
๐ฅ 94% ELITE Nov 28
|
|
278
|
-
๐ฅ 91% ELITE Nov 27
|
|
279
|
-
๐ฅ 88% HIGH Nov 26
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
### Data Stored
|
|
283
|
-
|
|
284
|
-
```typescript
|
|
285
|
-
interface LeaderboardEntry {
|
|
286
|
-
date: string;
|
|
287
|
-
repoPath: string;
|
|
288
|
-
repoName: string;
|
|
289
|
-
vibeScore: number;
|
|
290
|
-
overall: string;
|
|
291
|
-
commits: number;
|
|
292
|
-
xpEarned: number;
|
|
293
|
-
}
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
---
|
|
297
|
-
|
|
298
|
-
## Hall of Fame
|
|
299
|
-
|
|
300
|
-
Personal bests and records:
|
|
301
|
-
|
|
302
|
-
```
|
|
303
|
-
๐๏ธ HALL OF FAME
|
|
304
|
-
|
|
305
|
-
๐ Best Score: 96% (Nov 15)
|
|
306
|
-
my-project - ELITE rating
|
|
307
|
-
|
|
308
|
-
๐ฅ Longest Streak: 15 days
|
|
309
|
-
Consecutive daily check-ins
|
|
310
|
-
|
|
311
|
-
โก Best Week: 847 XP
|
|
312
|
-
Week of Nov 11
|
|
313
|
-
|
|
314
|
-
๐ Most Commits: 127 (Nov 10)
|
|
315
|
-
big-refactor - single session
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
---
|
|
319
|
-
|
|
320
|
-
## Rank Badges
|
|
321
|
-
|
|
322
|
-
Tier badges based on cumulative progress:
|
|
323
|
-
|
|
324
|
-
| Badge | Icon | Requirement |
|
|
325
|
-
|-------|------|-------------|
|
|
326
|
-
| Bronze | ๐ฅ | 10+ sessions |
|
|
327
|
-
| Silver | ๐ฅ | 50+ sessions |
|
|
328
|
-
| Gold | ๐ฅ | 100+ sessions |
|
|
329
|
-
| Platinum | ๐ | 14+ day streak |
|
|
330
|
-
| Diamond | ๐ท | 5000+ XP |
|
|
331
|
-
|
|
332
|
-
### Badge Display
|
|
333
|
-
|
|
334
|
-
```
|
|
335
|
-
Current: ๐ Platinum Tier
|
|
336
|
-
|
|
337
|
-
Next: ๐ท Diamond (need 5000 XP, have 3200)
|
|
338
|
-
Progress: โโโโโโโโโโโโโโโโ 64%
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
---
|
|
342
|
-
|
|
343
212
|
## Weekly Stats
|
|
344
213
|
|
|
345
214
|
### Sparklines
|
|
@@ -352,7 +221,6 @@ Visual trend of your scores this week:
|
|
|
352
221
|
Avg Score: 87% โ
|
|
353
222
|
Sessions: 5
|
|
354
223
|
XP Earned: 320
|
|
355
|
-
ELITE: 3 | Spirals: 2
|
|
356
224
|
|
|
357
225
|
Trend: โโโโโ
โโ
|
|
358
226
|
```
|
|
@@ -367,129 +235,26 @@ Visual trend of your scores this week:
|
|
|
367
235
|
|
|
368
236
|
---
|
|
369
237
|
|
|
370
|
-
## Pattern Memory
|
|
371
|
-
|
|
372
|
-
Tracks YOUR spiral triggers over time:
|
|
373
|
-
|
|
374
|
-
```
|
|
375
|
-
YOUR SPIRAL TRIGGERS
|
|
376
|
-
|
|
377
|
-
Pattern Times Avg Duration
|
|
378
|
-
SECRETS_AUTH 5 18 min
|
|
379
|
-
VOLUME_CONFIG 3 12 min
|
|
380
|
-
API_MISMATCH 2 25 min
|
|
381
|
-
|
|
382
|
-
Your kryptonite: OAuth/token issues
|
|
383
|
-
Consider: Tracer tests for auth flows
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
---
|
|
387
|
-
|
|
388
|
-
## Intervention Tracking
|
|
389
|
-
|
|
390
|
-
Records what breaks YOUR spirals:
|
|
391
|
-
|
|
392
|
-
```
|
|
393
|
-
WHAT WORKS FOR YOU
|
|
394
|
-
|
|
395
|
-
Intervention Times Success Rate
|
|
396
|
-
Take a break 4 75%
|
|
397
|
-
Write test 3 100%
|
|
398
|
-
Read docs 2 50%
|
|
399
|
-
Ask for help 1 100%
|
|
400
|
-
|
|
401
|
-
Recommendation: Write a test first!
|
|
402
|
-
```
|
|
403
|
-
|
|
404
|
-
### Intervention Types
|
|
405
|
-
|
|
406
|
-
| Type | Description |
|
|
407
|
-
|------|-------------|
|
|
408
|
-
| `TRACER_TEST` | Wrote a test to validate |
|
|
409
|
-
| `BREAK` | Took a break |
|
|
410
|
-
| `DOCS` | Consulted documentation |
|
|
411
|
-
| `REFACTOR` | Changed approach |
|
|
412
|
-
| `HELP` | Asked for help |
|
|
413
|
-
| `ROLLBACK` | Reverted to known state |
|
|
414
|
-
| `OTHER` | Custom intervention |
|
|
415
|
-
|
|
416
|
-
---
|
|
417
|
-
|
|
418
|
-
## Share Feature
|
|
419
|
-
|
|
420
|
-
### Shareable Text
|
|
421
|
-
|
|
422
|
-
```bash
|
|
423
|
-
vibe-check profile --share
|
|
424
|
-
```
|
|
425
|
-
|
|
426
|
-
Output:
|
|
427
|
-
```
|
|
428
|
-
๐ฎ bodefuller's Vibe-Check Profile
|
|
429
|
-
|
|
430
|
-
Level 5 Master (Archmage I) ๐ Platinum
|
|
431
|
-
1,250 Total XP
|
|
432
|
-
|
|
433
|
-
๐ฅ 12-day streak (Best: 15)
|
|
434
|
-
๐ 45 sessions | Avg: 87% | Best: 96%
|
|
435
|
-
๐ 12 achievements unlocked
|
|
436
|
-
|
|
437
|
-
Track your coding vibes: npx @boshu2/vibe-check
|
|
438
|
-
```
|
|
439
|
-
|
|
440
|
-
### Shareable JSON
|
|
441
|
-
|
|
442
|
-
```bash
|
|
443
|
-
vibe-check profile --share-json
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
Machine-readable profile for integrations.
|
|
447
|
-
|
|
448
|
-
---
|
|
449
|
-
|
|
450
|
-
## Near-Miss Psychology
|
|
451
|
-
|
|
452
|
-
Motivational messages when you're close to achievements:
|
|
453
|
-
|
|
454
|
-
```
|
|
455
|
-
๐ฏ SO CLOSE!
|
|
456
|
-
|
|
457
|
-
Just 1-2 metrics away from ELITE overall!
|
|
458
|
-
88% vibe score - just 2% from the Ninety Club!
|
|
459
|
-
```
|
|
460
|
-
|
|
461
|
-
Triggers when:
|
|
462
|
-
- HIGH rating with 3+ ELITE metrics
|
|
463
|
-
- Score 85-89% (close to 90)
|
|
464
|
-
- Trust 90-99% (close to 100)
|
|
465
|
-
- 1 spiral (close to Zen Master)
|
|
466
|
-
|
|
467
|
-
---
|
|
468
|
-
|
|
469
238
|
## Profile Storage
|
|
470
239
|
|
|
471
240
|
### Location
|
|
472
241
|
|
|
473
242
|
```
|
|
474
243
|
~/.vibe-check/
|
|
475
|
-
|
|
476
|
-
โโโ leaderboards.json # High scores
|
|
244
|
+
โโโ profile.json # Main profile
|
|
477
245
|
```
|
|
478
246
|
|
|
479
247
|
### Profile Schema
|
|
480
248
|
|
|
481
249
|
```typescript
|
|
482
250
|
interface UserProfile {
|
|
483
|
-
version: string;
|
|
251
|
+
version: string;
|
|
484
252
|
createdAt: string;
|
|
485
253
|
updatedAt: string;
|
|
486
254
|
streak: StreakState;
|
|
487
255
|
xp: XPState;
|
|
488
256
|
achievements: Achievement[];
|
|
489
257
|
sessions: SessionRecord[];
|
|
490
|
-
patternMemory?: PatternMemory;
|
|
491
|
-
interventionMemory?: InterventionMemory;
|
|
492
|
-
challenges?: Challenge[];
|
|
493
258
|
preferences: {
|
|
494
259
|
weeklyGoal: number;
|
|
495
260
|
showNotifications: boolean;
|
|
@@ -517,22 +282,10 @@ vibe-check profile
|
|
|
517
282
|
# View specific sections
|
|
518
283
|
vibe-check profile --achievements
|
|
519
284
|
vibe-check profile --stats
|
|
520
|
-
vibe-check profile --challenges
|
|
521
|
-
vibe-check profile --leaderboard
|
|
522
|
-
vibe-check profile --hall-of-fame
|
|
523
285
|
vibe-check profile --weekly
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
# Share
|
|
528
|
-
vibe-check profile --share
|
|
529
|
-
vibe-check profile --share-json
|
|
530
|
-
|
|
531
|
-
# Record intervention
|
|
532
|
-
vibe-check intervene TRACER_TEST
|
|
533
|
-
vibe-check intervene BREAK
|
|
534
|
-
vibe-check intervene --list
|
|
535
|
-
vibe-check intervene --stats
|
|
286
|
+
|
|
287
|
+
# JSON output
|
|
288
|
+
vibe-check profile --json
|
|
536
289
|
```
|
|
537
290
|
|
|
538
291
|
---
|
|
@@ -560,5 +313,5 @@ Make you WANT to improve your vibe scoreโnot because someone's watching, but b
|
|
|
560
313
|
|
|
561
314
|
---
|
|
562
315
|
|
|
563
|
-
**Version:** 1.
|
|
564
|
-
**Last Updated:** 2025-
|
|
316
|
+
**Version:** 1.7.0
|
|
317
|
+
**Last Updated:** 2025-12-02
|