@boshu2/vibe-check 1.4.0 → 1.5.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 (48) hide show
  1. package/.vibe-check/sessions.json +11 -1
  2. package/PLAN-ultimate-game.md +1362 -0
  3. package/claude-progress.json +14 -8
  4. package/claude-progress.txt +53 -0
  5. package/dist/commands/profile.d.ts.map +1 -1
  6. package/dist/commands/profile.js +140 -31
  7. package/dist/commands/profile.js.map +1 -1
  8. package/dist/gamification/badges.d.ts +29 -0
  9. package/dist/gamification/badges.d.ts.map +1 -0
  10. package/dist/gamification/badges.js +114 -0
  11. package/dist/gamification/badges.js.map +1 -0
  12. package/dist/gamification/challenges.d.ts +42 -0
  13. package/dist/gamification/challenges.d.ts.map +1 -0
  14. package/dist/gamification/challenges.js +184 -0
  15. package/dist/gamification/challenges.js.map +1 -0
  16. package/dist/gamification/hall-of-fame.d.ts +17 -0
  17. package/dist/gamification/hall-of-fame.d.ts.map +1 -0
  18. package/dist/gamification/hall-of-fame.js +64 -0
  19. package/dist/gamification/hall-of-fame.js.map +1 -0
  20. package/dist/gamification/leaderboards.d.ts +49 -0
  21. package/dist/gamification/leaderboards.d.ts.map +1 -0
  22. package/dist/gamification/leaderboards.js +179 -0
  23. package/dist/gamification/leaderboards.js.map +1 -0
  24. package/dist/gamification/share.d.ts +29 -0
  25. package/dist/gamification/share.d.ts.map +1 -0
  26. package/dist/gamification/share.js +57 -0
  27. package/dist/gamification/share.js.map +1 -0
  28. package/dist/gamification/stats.d.ts +34 -0
  29. package/dist/gamification/stats.d.ts.map +1 -0
  30. package/dist/gamification/stats.js +91 -0
  31. package/dist/gamification/stats.js.map +1 -0
  32. package/dist/gamification/streaks.d.ts +9 -1
  33. package/dist/gamification/streaks.d.ts.map +1 -1
  34. package/dist/gamification/streaks.js +37 -4
  35. package/dist/gamification/streaks.js.map +1 -1
  36. package/dist/gamification/types.d.ts +35 -0
  37. package/dist/gamification/types.d.ts.map +1 -1
  38. package/dist/gamification/types.js +11 -3
  39. package/dist/gamification/types.js.map +1 -1
  40. package/dist/gamification/xp.d.ts +6 -2
  41. package/dist/gamification/xp.d.ts.map +1 -1
  42. package/dist/gamification/xp.js +27 -5
  43. package/dist/gamification/xp.js.map +1 -1
  44. package/dist/output/terminal.d.ts.map +1 -1
  45. package/dist/output/terminal.js +39 -0
  46. package/dist/output/terminal.js.map +1 -1
  47. package/feature-list.json +55 -1
  48. package/package.json +1 -1
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createShareableProfile = createShareableProfile;
4
+ exports.formatShareText = formatShareText;
5
+ exports.formatShareJSON = formatShareJSON;
6
+ const types_1 = require("./types");
7
+ const badges_1 = require("./badges");
8
+ /**
9
+ * Create shareable profile data
10
+ */
11
+ function createShareableProfile(profile, username) {
12
+ const badge = (0, badges_1.getCurrentBadge)(profile.stats.totalSessions, profile.streak.longest, profile.xp.total);
13
+ return {
14
+ username,
15
+ level: profile.xp.level,
16
+ levelName: profile.xp.levelName,
17
+ totalXP: profile.xp.total,
18
+ badge: badge?.name || null,
19
+ streak: profile.streak.current,
20
+ longestStreak: profile.streak.longest,
21
+ totalSessions: profile.stats.totalSessions,
22
+ avgScore: profile.stats.avgVibeScore,
23
+ bestScore: profile.stats.bestVibeScore,
24
+ achievementCount: profile.achievements.length,
25
+ prestigeTier: profile.xp.prestigeTier,
26
+ generatedAt: new Date().toISOString(),
27
+ };
28
+ }
29
+ /**
30
+ * Format profile for sharing (text format)
31
+ */
32
+ function formatShareText(shareable) {
33
+ const lines = [];
34
+ const name = shareable.username || 'Anonymous Coder';
35
+ const badgeStr = shareable.badge ? ` ${shareable.badge}` : '';
36
+ const prestigeStr = shareable.prestigeTier
37
+ ? ` (${types_1.PRESTIGE_TIERS[shareable.prestigeTier - 1].name})`
38
+ : '';
39
+ lines.push(`🎮 ${name}'s Vibe-Check Profile`);
40
+ lines.push('');
41
+ lines.push(`Level ${shareable.level} ${shareable.levelName}${prestigeStr}${badgeStr}`);
42
+ lines.push(`${shareable.totalXP.toLocaleString()} Total XP`);
43
+ lines.push('');
44
+ lines.push(`🔥 ${shareable.streak}-day streak (Best: ${shareable.longestStreak})`);
45
+ lines.push(`📊 ${shareable.totalSessions} sessions | Avg: ${shareable.avgScore}% | Best: ${shareable.bestScore}%`);
46
+ lines.push(`🏆 ${shareable.achievementCount} achievements unlocked`);
47
+ lines.push('');
48
+ lines.push('Track your coding vibes: npx @boshu2/vibe-check');
49
+ return lines.join('\n');
50
+ }
51
+ /**
52
+ * Format profile as JSON for clipboard
53
+ */
54
+ function formatShareJSON(shareable) {
55
+ return JSON.stringify(shareable, null, 2);
56
+ }
57
+ //# sourceMappingURL=share.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/gamification/share.ts"],"names":[],"mappings":";;AAsBA,wDAyBC;AAKD,0CAqBC;AAKD,0CAEC;AAhFD,mCAAsD;AACtD,qCAA2C;AAkB3C;;GAEG;AACH,SAAgB,sBAAsB,CACpC,OAAoB,EACpB,QAAiB;IAEjB,MAAM,KAAK,GAAG,IAAA,wBAAe,EAC3B,OAAO,CAAC,KAAK,CAAC,aAAa,EAC3B,OAAO,CAAC,MAAM,CAAC,OAAO,EACtB,OAAO,CAAC,EAAE,CAAC,KAAK,CACjB,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK;QACvB,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS;QAC/B,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK;QACzB,KAAK,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;QAC9B,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;QACrC,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa;QAC1C,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY;QACpC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa;QACtC,gBAAgB,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM;QAC7C,YAAY,EAAE,OAAO,CAAC,EAAE,CAAC,YAAY;QACrC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,SAA2B;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACrD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,MAAM,WAAW,GAAG,SAAS,CAAC,YAAY;QACxC,CAAC,CAAC,KAAK,sBAAc,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG;QACzD,CAAC,CAAC,EAAE,CAAC;IAEP,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,uBAAuB,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,SAAS,GAAG,WAAW,GAAG,QAAQ,EAAE,CAAC,CAAC;IACvF,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,MAAM,sBAAsB,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC;IACnF,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,aAAa,oBAAoB,SAAS,CAAC,QAAQ,aAAa,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;IACnH,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,gBAAgB,wBAAwB,CAAC,CAAC;IACrE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAE9D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,SAA2B;IACzD,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { SessionRecord } from './types';
2
+ /**
3
+ * Create a sparkline from values
4
+ */
5
+ export declare function createSparkline(values: number[]): string;
6
+ /**
7
+ * Get trend indicator
8
+ */
9
+ export declare function getTrend(values: number[]): {
10
+ direction: 'up' | 'down' | 'stable';
11
+ emoji: string;
12
+ };
13
+ export interface WeeklyStats {
14
+ avgScore: number;
15
+ sessions: number;
16
+ totalCommits: number;
17
+ eliteCount: number;
18
+ spiralCount: number;
19
+ sparkline: string;
20
+ trend: {
21
+ direction: string;
22
+ emoji: string;
23
+ };
24
+ xpEarned: number;
25
+ }
26
+ /**
27
+ * Calculate weekly statistics
28
+ */
29
+ export declare function getWeeklyStats(sessions: SessionRecord[]): WeeklyStats;
30
+ /**
31
+ * Format weekly stats for display
32
+ */
33
+ export declare function formatWeeklyStats(stats: WeeklyStats): string;
34
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/gamification/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAWxD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG;IAAE,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAcjG;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,WAAW,CA6BrE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAc5D"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSparkline = createSparkline;
4
+ exports.getTrend = getTrend;
5
+ exports.getWeeklyStats = getWeeklyStats;
6
+ exports.formatWeeklyStats = formatWeeklyStats;
7
+ /**
8
+ * Create a sparkline from values
9
+ */
10
+ function createSparkline(values) {
11
+ if (values.length === 0)
12
+ return '';
13
+ const chars = ['▁', '▂', '▃', '▄', '▅', '▆', '▇', '█'];
14
+ const min = Math.min(...values);
15
+ const max = Math.max(...values);
16
+ const range = max - min || 1;
17
+ return values
18
+ .map(v => chars[Math.floor(((v - min) / range) * 7)])
19
+ .join('');
20
+ }
21
+ /**
22
+ * Get trend indicator
23
+ */
24
+ function getTrend(values) {
25
+ if (values.length < 2)
26
+ return { direction: 'stable', emoji: '➡️' };
27
+ const recent = values.slice(-3);
28
+ const older = values.slice(0, 3);
29
+ const recentAvg = recent.reduce((a, b) => a + b, 0) / recent.length;
30
+ const olderAvg = older.reduce((a, b) => a + b, 0) / older.length;
31
+ const diff = recentAvg - olderAvg;
32
+ if (diff > 5)
33
+ return { direction: 'up', emoji: '↑' };
34
+ if (diff < -5)
35
+ return { direction: 'down', emoji: '↓' };
36
+ return { direction: 'stable', emoji: '→' };
37
+ }
38
+ /**
39
+ * Calculate weekly statistics
40
+ */
41
+ function getWeeklyStats(sessions) {
42
+ const weekStart = getWeekStartDate(new Date());
43
+ const weekSessions = sessions.filter(s => new Date(s.date) >= weekStart);
44
+ if (weekSessions.length === 0) {
45
+ return {
46
+ avgScore: 0,
47
+ sessions: 0,
48
+ totalCommits: 0,
49
+ eliteCount: 0,
50
+ spiralCount: 0,
51
+ sparkline: '',
52
+ trend: { direction: 'stable', emoji: '→' },
53
+ xpEarned: 0,
54
+ };
55
+ }
56
+ const scores = weekSessions.map(s => s.vibeScore);
57
+ return {
58
+ avgScore: Math.round(scores.reduce((a, b) => a + b, 0) / scores.length),
59
+ sessions: weekSessions.length,
60
+ totalCommits: weekSessions.reduce((sum, s) => sum + s.commits, 0),
61
+ eliteCount: weekSessions.filter(s => s.overall === 'ELITE').length,
62
+ spiralCount: weekSessions.reduce((sum, s) => sum + s.spirals, 0),
63
+ sparkline: createSparkline(scores),
64
+ trend: getTrend(scores),
65
+ xpEarned: weekSessions.reduce((sum, s) => sum + s.xpEarned, 0),
66
+ };
67
+ }
68
+ /**
69
+ * Format weekly stats for display
70
+ */
71
+ function formatWeeklyStats(stats) {
72
+ const lines = [];
73
+ lines.push('📅 THIS WEEK');
74
+ lines.push(` Avg Score: ${stats.avgScore}% ${stats.trend.emoji}`);
75
+ lines.push(` Sessions: ${stats.sessions}`);
76
+ lines.push(` XP Earned: ${stats.xpEarned}`);
77
+ lines.push(` ELITE: ${stats.eliteCount} | Spirals: ${stats.spiralCount}`);
78
+ if (stats.sparkline) {
79
+ lines.push(` Trend: ${stats.sparkline}`);
80
+ }
81
+ return lines.join('\n');
82
+ }
83
+ function getWeekStartDate(date) {
84
+ const d = new Date(date);
85
+ const day = d.getDay();
86
+ const diff = d.getDate() - day + (day === 0 ? -6 : 1);
87
+ d.setDate(diff);
88
+ d.setHours(0, 0, 0, 0);
89
+ return d;
90
+ }
91
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/gamification/stats.ts"],"names":[],"mappings":";;AAKA,0CAWC;AAKD,4BAcC;AAgBD,wCA6BC;AAKD,8CAcC;AAjGD;;GAEG;AACH,SAAgB,eAAe,CAAC,MAAgB;IAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;IAE7B,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACpD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,QAAQ,CAAC,MAAgB;IACvC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAEnE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IAEjE,MAAM,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;IAElC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACrD,IAAI,IAAI,GAAG,CAAC,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACxD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC7C,CAAC;AAaD;;GAEG;AACH,SAAgB,cAAc,CAAC,QAAyB;IACtD,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC;IAEzE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;YAC1C,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAElD,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACvE,QAAQ,EAAE,YAAY,CAAC,MAAM;QAC7B,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,MAAM;QAClE,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC;QAClC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC;QACvB,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,KAAkB;IAClD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,UAAU,eAAe,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAE5E,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAU;IAClC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACvB,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -16,9 +16,17 @@ export declare function isStreakAtRisk(streak: StreakState): boolean;
16
16
  */
17
17
  export declare function getDaysUntilExpiry(streak: StreakState): number;
18
18
  /**
19
- * Format streak for display
19
+ * Format streak for display with visual progression
20
20
  */
21
21
  export declare function formatStreak(streak: StreakState): string;
22
+ /**
23
+ * Format streak with risk indicator
24
+ */
25
+ export declare function formatStreakWithRisk(streak: StreakState): string;
26
+ /**
27
+ * Format freezes display
28
+ */
29
+ export declare function formatFreezes(streak: StreakState): string;
22
30
  /**
23
31
  * Format weekly progress for display
24
32
  */
@@ -1 +1 @@
1
- {"version":3,"file":"streaks.d.ts","sourceRoot":"","sources":["../../src/gamification/streaks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,WAAW,CASjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,GAAG,WAAW,CAiDhF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAK3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAc9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAexD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAKhE"}
1
+ {"version":3,"file":"streaks.d.ts","sourceRoot":"","sources":["../../src/gamification/streaks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,WAAW,CASjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,GAAG,WAAW,CAiDhF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAK3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAc9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CA4BxD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAShE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAKhE"}
@@ -5,6 +5,8 @@ exports.updateStreak = updateStreak;
5
5
  exports.isStreakAtRisk = isStreakAtRisk;
6
6
  exports.getDaysUntilExpiry = getDaysUntilExpiry;
7
7
  exports.formatStreak = formatStreak;
8
+ exports.formatStreakWithRisk = formatStreakWithRisk;
9
+ exports.formatFreezes = formatFreezes;
8
10
  exports.formatWeeklyProgress = formatWeeklyProgress;
9
11
  /**
10
12
  * Create initial streak state
@@ -96,20 +98,51 @@ function getDaysUntilExpiry(streak) {
96
98
  return 0; // Already expired or will expire today
97
99
  }
98
100
  /**
99
- * Format streak for display
101
+ * Format streak for display with visual progression
100
102
  */
101
103
  function formatStreak(streak) {
102
104
  if (streak.current === 0) {
103
105
  return 'No active streak';
104
106
  }
105
107
  const isPersonalBest = streak.current === streak.longest && streak.current > 1;
106
- const fire = '🔥'.repeat(Math.min(streak.current, 5));
107
- let text = `${fire} ${streak.current}-day streak`;
108
+ // Visual progression: 🔥 (1-5) → 🌟 (6-14) → 👑 (15+)
109
+ let icon;
110
+ if (streak.current >= 15) {
111
+ icon = '👑';
112
+ }
113
+ else if (streak.current >= 6) {
114
+ icon = '🌟';
115
+ }
116
+ else {
117
+ icon = '🔥';
118
+ }
119
+ // Multiple icons for emphasis
120
+ const repeatCount = Math.min(Math.ceil(streak.current / 5), 3);
121
+ const icons = icon.repeat(repeatCount);
122
+ let text = `${icons} ${streak.current}-day streak`;
108
123
  if (isPersonalBest && streak.current > 7) {
109
- text += ' (Personal best!)';
124
+ text += ' 🏆 (Personal Best!)';
110
125
  }
111
126
  return text;
112
127
  }
128
+ /**
129
+ * Format streak with risk indicator
130
+ */
131
+ function formatStreakWithRisk(streak) {
132
+ const base = formatStreak(streak);
133
+ const daysUntil = getDaysUntilExpiry(streak);
134
+ if (streak.current > 0 && daysUntil <= 1) {
135
+ return `${base}\n⚠️ Streak at risk! Check in today to keep it alive`;
136
+ }
137
+ return base;
138
+ }
139
+ /**
140
+ * Format freezes display
141
+ */
142
+ function formatFreezes(streak) {
143
+ const freezeIcon = '❄️';
144
+ return `${freezeIcon} ${streak.freezesRemaining} freeze${streak.freezesRemaining !== 1 ? 's' : ''} available`;
145
+ }
113
146
  /**
114
147
  * Format weekly progress for display
115
148
  */
@@ -1 +1 @@
1
- {"version":3,"file":"streaks.js","sourceRoot":"","sources":["../../src/gamification/streaks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streaks.js","sourceRoot":"","sources":["../../src/gamification/streaks.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { Challenge } from './challenges';
1
2
  export interface StreakState {
2
3
  current: number;
3
4
  longest: number;
@@ -14,6 +15,8 @@ export interface XPState {
14
15
  currentLevelXP: number;
15
16
  nextLevelXP: number;
16
17
  lastSessionXP: number;
18
+ prestigeTier?: number;
19
+ prestigeName?: string;
17
20
  }
18
21
  export interface Achievement {
19
22
  id: string;
@@ -61,6 +64,7 @@ export interface UserProfile {
61
64
  totalSpiralsDetected: number;
62
65
  spiralsAvoided: number;
63
66
  };
67
+ challenges?: Challenge[];
64
68
  }
65
69
  export interface SpiralPatternRecord {
66
70
  pattern: string;
@@ -133,6 +137,37 @@ export declare const LEVELS: readonly [{
133
137
  readonly name: "Grandmaster";
134
138
  readonly icon: "🏔️";
135
139
  readonly minXP: 2000;
140
+ readonly maxXP: 5000;
141
+ }];
142
+ export declare const PRESTIGE_TIERS: readonly [{
143
+ readonly tier: 1;
144
+ readonly name: "Archmage";
145
+ readonly icon: "🔮";
146
+ readonly minXP: 5000;
147
+ readonly maxXP: 10000;
148
+ }, {
149
+ readonly tier: 2;
150
+ readonly name: "Sage";
151
+ readonly icon: "📿";
152
+ readonly minXP: 10000;
153
+ readonly maxXP: 20000;
154
+ }, {
155
+ readonly tier: 3;
156
+ readonly name: "Zenmester";
157
+ readonly icon: "☯️";
158
+ readonly minXP: 20000;
159
+ readonly maxXP: 40000;
160
+ }, {
161
+ readonly tier: 4;
162
+ readonly name: "Transcendent";
163
+ readonly icon: "🌟";
164
+ readonly minXP: 40000;
165
+ readonly maxXP: 80000;
166
+ }, {
167
+ readonly tier: 5;
168
+ readonly name: "Legendary";
169
+ readonly icon: "💫";
170
+ readonly minXP: 80000;
136
171
  readonly maxXP: number;
137
172
  }];
138
173
  export declare const XP_REWARDS: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gamification/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gamification/types.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,23 @@
1
1
  "use strict";
2
2
  // Gamification Types for Vibe-Check
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.XP_REWARDS = exports.LEVELS = void 0;
5
- // Level progression
4
+ exports.XP_REWARDS = exports.PRESTIGE_TIERS = exports.LEVELS = void 0;
5
+ // Level progression (including prestige)
6
6
  exports.LEVELS = [
7
7
  { level: 1, name: 'Novice', icon: '🌱', minXP: 0, maxXP: 100 },
8
8
  { level: 2, name: 'Apprentice', icon: '🌿', minXP: 100, maxXP: 300 },
9
9
  { level: 3, name: 'Practitioner', icon: '🌳', minXP: 300, maxXP: 600 },
10
10
  { level: 4, name: 'Expert', icon: '🌲', minXP: 600, maxXP: 1000 },
11
11
  { level: 5, name: 'Master', icon: '🎋', minXP: 1000, maxXP: 2000 },
12
- { level: 6, name: 'Grandmaster', icon: '🏔️', minXP: 2000, maxXP: Infinity },
12
+ { level: 6, name: 'Grandmaster', icon: '🏔️', minXP: 2000, maxXP: 5000 },
13
+ ];
14
+ // Prestige tiers (after Grandmaster)
15
+ exports.PRESTIGE_TIERS = [
16
+ { tier: 1, name: 'Archmage', icon: '🔮', minXP: 5000, maxXP: 10000 },
17
+ { tier: 2, name: 'Sage', icon: '📿', minXP: 10000, maxXP: 20000 },
18
+ { tier: 3, name: 'Zenmester', icon: '☯️', minXP: 20000, maxXP: 40000 },
19
+ { tier: 4, name: 'Transcendent', icon: '🌟', minXP: 40000, maxXP: 80000 },
20
+ { tier: 5, name: 'Legendary', icon: '💫', minXP: 80000, maxXP: Infinity },
13
21
  ];
14
22
  // XP rewards
15
23
  exports.XP_REWARDS = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/gamification/types.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;AAqJpC,oBAAoB;AACP,QAAA,MAAM,GAAG;IACpB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;IAC9D,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACpE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACtE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;IACjE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IAClE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;CACpE,CAAC;AAEX,aAAa;AACA,QAAA,UAAU,GAAG;IACxB,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,EAAE;IAChB,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;IACjB,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC,EAAY,oBAAoB;IAC9C,eAAe,EAAE,EAAE,EAAO,wBAAwB;IAClD,SAAS,EAAE,EAAE,EAAa,sBAAsB;IAChD,YAAY,EAAE,EAAE,EAAU,uBAAuB;CACzC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/gamification/types.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;AA4JpC,yCAAyC;AAC5B,QAAA,MAAM,GAAG;IACpB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;IAC9D,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACpE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACtE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;IACjE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IAClE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;CAChE,CAAC;AAEX,qCAAqC;AACxB,QAAA,cAAc,GAAG;IAC5B,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;IACpE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;IACjE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;IACtE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;IACzE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;CACjE,CAAC;AAEX,aAAa;AACA,QAAA,UAAU,GAAG;IACxB,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,EAAE;IAChB,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;IACjB,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC,EAAY,oBAAoB;IAC9C,eAAe,EAAE,EAAE,EAAO,wBAAwB;IAClD,SAAS,EAAE,EAAE,EAAa,sBAAsB;IAChD,YAAY,EAAE,EAAE,EAAU,uBAAuB;CACzC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { XPState, LEVELS, SessionRecord, StreakState } from './types';
1
+ import { XPState, LEVELS, PRESTIGE_TIERS, SessionRecord, StreakState } from './types';
2
2
  /**
3
3
  * Create initial XP state
4
4
  */
@@ -14,13 +14,17 @@ export declare function addXP(currentXP: XPState, earnedXP: number): {
14
14
  xp: XPState;
15
15
  leveledUp: boolean;
16
16
  newLevel?: typeof LEVELS[number];
17
+ prestigedUp?: boolean;
18
+ newPrestige?: typeof PRESTIGE_TIERS[number];
17
19
  };
18
20
  /**
19
- * Get level for given XP amount
21
+ * Get level for given XP amount (including prestige)
20
22
  */
21
23
  export declare function getLevelForXP(xp: number): {
22
24
  level: number;
23
25
  levelInfo: typeof LEVELS[number];
26
+ prestigeTier?: number;
27
+ prestigeInfo?: typeof PRESTIGE_TIERS[number];
24
28
  };
25
29
  /**
26
30
  * Format XP progress for display
@@ -1 +1 @@
1
- {"version":3,"file":"xp.d.ts","sourceRoot":"","sources":["../../src/gamification/xp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAc,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAElF;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CASzC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,WAAW,EACnB,oBAAoB,EAAE,MAAM,GAC3B,MAAM,CAkCR;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;CAAE,CAoBjI;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;CAAE,CAO7F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAUpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAG/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAGpD"}
1
+ {"version":3,"file":"xp.d.ts","sourceRoot":"","sources":["../../src/gamification/xp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAc,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAElG;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CASzC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,WAAW,EACnB,oBAAoB,EAAE,MAAM,GAC3B,MAAM,CAkCR;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG;IAC3D,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;CAC7C,CA6BA;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;CAC9C,CAsBA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAUpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAG/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAGpD"}
@@ -58,26 +58,48 @@ function calculateSessionXP(session, streak, achievementsUnlocked) {
58
58
  */
59
59
  function addXP(currentXP, earnedXP) {
60
60
  const newTotal = currentXP.total + earnedXP;
61
- const { level, levelInfo } = getLevelForXP(newTotal);
61
+ const { level, levelInfo, prestigeTier, prestigeInfo } = getLevelForXP(newTotal);
62
62
  const leveledUp = level > currentXP.level;
63
+ const prestigedUp = prestigeTier !== undefined &&
64
+ (currentXP.prestigeTier === undefined || prestigeTier > currentXP.prestigeTier);
65
+ const maxXP = prestigeInfo ? prestigeInfo.maxXP : levelInfo.maxXP;
66
+ const minXP = prestigeInfo ? prestigeInfo.minXP : levelInfo.minXP;
63
67
  const newXP = {
64
68
  total: newTotal,
65
69
  level,
66
- levelName: levelInfo.name,
67
- currentLevelXP: newTotal - levelInfo.minXP,
68
- nextLevelXP: levelInfo.maxXP - levelInfo.minXP,
70
+ levelName: prestigeInfo ? prestigeInfo.name : levelInfo.name,
71
+ currentLevelXP: newTotal - minXP,
72
+ nextLevelXP: maxXP === Infinity ? Infinity : maxXP - minXP,
69
73
  lastSessionXP: earnedXP,
74
+ prestigeTier,
75
+ prestigeName: prestigeInfo?.name,
70
76
  };
71
77
  return {
72
78
  xp: newXP,
73
79
  leveledUp,
74
80
  newLevel: leveledUp ? levelInfo : undefined,
81
+ prestigedUp,
82
+ newPrestige: prestigedUp ? prestigeInfo : undefined,
75
83
  };
76
84
  }
77
85
  /**
78
- * Get level for given XP amount
86
+ * Get level for given XP amount (including prestige)
79
87
  */
80
88
  function getLevelForXP(xp) {
89
+ // Check prestige tiers first
90
+ if (xp >= 5000) {
91
+ for (let i = types_1.PRESTIGE_TIERS.length - 1; i >= 0; i--) {
92
+ if (xp >= types_1.PRESTIGE_TIERS[i].minXP) {
93
+ return {
94
+ level: 6,
95
+ levelInfo: types_1.LEVELS[5],
96
+ prestigeTier: types_1.PRESTIGE_TIERS[i].tier,
97
+ prestigeInfo: types_1.PRESTIGE_TIERS[i],
98
+ };
99
+ }
100
+ }
101
+ }
102
+ // Regular levels
81
103
  for (let i = types_1.LEVELS.length - 1; i >= 0; i--) {
82
104
  if (xp >= types_1.LEVELS[i].minXP) {
83
105
  return { level: types_1.LEVELS[i].level, levelInfo: types_1.LEVELS[i] };
@@ -1 +1 @@
1
- {"version":3,"file":"xp.js","sourceRoot":"","sources":["../../src/gamification/xp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xp.js","sourceRoot":"","sources":["../../src/gamification/xp.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/output/terminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAyB,MAAM,UAAU,CAAC;AAOrF,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,MAAM,CAsJlF;AAoCD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,MAAM,CAqCxF"}
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/output/terminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAyB,MAAM,UAAU,CAAC;AAOrF,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,MAAM,CAgKlF;AAoCD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,MAAM,CAqCxF"}
@@ -97,6 +97,15 @@ function formatTerminal(result) {
97
97
  lines.push(chalk_1.default.yellow(` ${icon} ${opp.name}: ${opp.tip}`));
98
98
  }
99
99
  }
100
+ // Near-miss psychology - motivational close calls
101
+ const nearMisses = getNearMisses(result, metricsList);
102
+ if (nearMisses.length > 0) {
103
+ lines.push('');
104
+ lines.push(chalk_1.default.bold.magenta(' 🎯 SO CLOSE!'));
105
+ for (const miss of nearMisses) {
106
+ lines.push(chalk_1.default.magenta(` ${miss}`));
107
+ }
108
+ }
100
109
  // Debug spirals
101
110
  if (result.fixChains.length > 0) {
102
111
  lines.push('');
@@ -195,4 +204,34 @@ function getOverallColor(rating) {
195
204
  case 'LOW': return chalk_1.default.red.bold;
196
205
  }
197
206
  }
207
+ /**
208
+ * Find near-miss motivational messages
209
+ */
210
+ function getNearMisses(result, metrics) {
211
+ const misses = [];
212
+ // Check for near-ELITE overall
213
+ if (result.overall === 'HIGH') {
214
+ const eliteCount = metrics.filter(m => m.metric.rating === 'elite').length;
215
+ if (eliteCount >= 3) {
216
+ misses.push('Just 1-2 metrics away from ELITE overall!');
217
+ }
218
+ }
219
+ // Check for near-90% score
220
+ if (isV2Result(result) && result.vibeScore) {
221
+ const score = result.vibeScore.value * 100;
222
+ if (score >= 85 && score < 90) {
223
+ misses.push(`${Math.round(score)}% vibe score - just ${90 - Math.round(score)}% from the Ninety Club!`);
224
+ }
225
+ }
226
+ // Check for near-perfect trust
227
+ const trust = result.metrics.trustPassRate;
228
+ if (trust.value >= 90 && trust.value < 100 && trust.rating !== 'elite') {
229
+ misses.push(`${trust.value}% trust - ${100 - trust.value}% from Perfect Trust!`);
230
+ }
231
+ // Check for near-zero spirals
232
+ if (result.fixChains.length === 1 && result.commits.total >= 20) {
233
+ misses.push('Only 1 spiral! Next time could be Zen Master territory.');
234
+ }
235
+ return misses.slice(0, 2); // Max 2 near-misses
236
+ }
198
237
  //# sourceMappingURL=terminal.js.map