@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.
Files changed (72) hide show
  1. package/.agents/bundles/actionable-coaching-plan-2025-12-02.md +209 -0
  2. package/.agents/plans/git-forensics-enhancement-2025-12-05.md +493 -0
  3. package/.claude/skills/typescript-review.md +152 -0
  4. package/CHANGELOG.md +41 -5
  5. package/CLAUDE.md +27 -23
  6. package/Makefile +0 -13
  7. package/README.md +126 -173
  8. package/SECURITY.md +5 -1
  9. package/assets/logo-dark.svg +47 -0
  10. package/assets/logo.svg +47 -0
  11. package/claude-progress.json +28 -7
  12. package/claude-progress.txt +48 -0
  13. package/dist/analyzers/patterns.d.ts +62 -0
  14. package/dist/analyzers/patterns.d.ts.map +1 -0
  15. package/dist/analyzers/patterns.js +103 -0
  16. package/dist/analyzers/patterns.js.map +1 -0
  17. package/dist/analyzers/quality.d.ts +58 -0
  18. package/dist/analyzers/quality.d.ts.map +1 -0
  19. package/dist/analyzers/quality.js +114 -0
  20. package/dist/analyzers/quality.js.map +1 -0
  21. package/dist/analyzers/sessions.d.ts +45 -0
  22. package/dist/analyzers/sessions.d.ts.map +1 -0
  23. package/dist/analyzers/sessions.js +123 -0
  24. package/dist/analyzers/sessions.js.map +1 -0
  25. package/dist/cli.js +4 -0
  26. package/dist/cli.js.map +1 -1
  27. package/dist/commands/analyze.d.ts.map +1 -1
  28. package/dist/commands/analyze.js +5 -0
  29. package/dist/commands/analyze.js.map +1 -1
  30. package/dist/commands/forensics.d.ts +29 -0
  31. package/dist/commands/forensics.d.ts.map +1 -0
  32. package/dist/commands/forensics.js +213 -0
  33. package/dist/commands/forensics.js.map +1 -0
  34. package/dist/commands/index.d.ts +4 -0
  35. package/dist/commands/index.d.ts.map +1 -1
  36. package/dist/commands/index.js +11 -1
  37. package/dist/commands/index.js.map +1 -1
  38. package/dist/commands/insights.d.ts +3 -0
  39. package/dist/commands/insights.d.ts.map +1 -0
  40. package/dist/commands/insights.js +120 -0
  41. package/dist/commands/insights.js.map +1 -0
  42. package/dist/commands/pipeline.d.ts +3 -0
  43. package/dist/commands/pipeline.d.ts.map +1 -0
  44. package/dist/commands/pipeline.js +485 -0
  45. package/dist/commands/pipeline.js.map +1 -0
  46. package/dist/commands/profile.d.ts +0 -1
  47. package/dist/commands/profile.d.ts.map +1 -1
  48. package/dist/commands/profile.js +0 -4
  49. package/dist/commands/profile.js.map +1 -1
  50. package/dist/commands/session.d.ts.map +1 -1
  51. package/dist/commands/session.js +38 -0
  52. package/dist/commands/session.js.map +1 -1
  53. package/dist/commands/sessions.d.ts +20 -0
  54. package/dist/commands/sessions.d.ts.map +1 -0
  55. package/dist/commands/sessions.js +201 -0
  56. package/dist/commands/sessions.js.map +1 -0
  57. package/dist/commands/watch.d.ts.map +1 -1
  58. package/dist/commands/watch.js +48 -7
  59. package/dist/commands/watch.js.map +1 -1
  60. package/dist/storage/index.d.ts +1 -0
  61. package/dist/storage/index.d.ts.map +1 -1
  62. package/dist/storage/index.js +11 -1
  63. package/dist/storage/index.js.map +1 -1
  64. package/dist/storage/spiral-history.d.ts +62 -0
  65. package/dist/storage/spiral-history.d.ts.map +1 -0
  66. package/dist/storage/spiral-history.js +265 -0
  67. package/dist/storage/spiral-history.js.map +1 -0
  68. package/docs/ARCHITECTURE.md +2 -10
  69. package/docs/GAMIFICATION.md +19 -266
  70. package/docs/VIBE-ECOSYSTEM.md +12 -78
  71. package/feature-list.json +140 -88
  72. 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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"}
@@ -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
- โ”‚ โ”œโ”€โ”€ badges.ts # Rank badges
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
- โ”œโ”€โ”€ profile.json # User profile
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
@@ -1,12 +1,12 @@
1
1
  # vibe-check Gamification System
2
2
 
3
- **Deep dive into XP, levels, achievements, challenges, and more**
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 complete gamification layer to make self-improvement engaging. This isn't productivity surveillanceโ€”it's a personal game you play with yourself.
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- โ”‚ โ”‚Challenge โ”‚ โ”‚
18
- โ”‚ โ”‚ & Levels โ”‚ โ”‚ โ”‚ โ”‚ ments โ”‚ โ”‚ s โ”‚ โ”‚
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 | Time Estimate |
100
- |------|------|----------|------|---------------|
101
- | 1 | Archmage | 5000-9999 | ๐Ÿ”ฎ | ~3 months |
102
- | 2 | Sage | 10000-19999 | ๐Ÿ“ฟ | ~6 months |
103
- | 3 | Zenmester | 20000-39999 | โ˜ฏ๏ธ | ~1 year |
104
- | 4 | Transcendent | 40000-79999 | ๐ŸŒŸ | ~2 years |
105
- | 5 | Legendary | 80000+ | ๐Ÿ’ซ | Long-term mastery |
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
- โ”œโ”€โ”€ profile.json # Main profile
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; // "1.5.0"
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
- vibe-check profile --patterns
525
- vibe-check profile --interventions
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.5.0
564
- **Last Updated:** 2025-11-29
316
+ **Version:** 1.7.0
317
+ **Last Updated:** 2025-12-02