@boshu2/vibe-check 1.3.2 → 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 (77) hide show
  1. package/.vibe-check/sessions.json +21 -1
  2. package/PLAN-ultimate-game.md +1362 -0
  3. package/claude-progress.json +21 -3
  4. package/claude-progress.txt +103 -0
  5. package/dist/cli.js +1 -0
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/analyze.d.ts.map +1 -1
  8. package/dist/commands/analyze.js +2 -1
  9. package/dist/commands/analyze.js.map +1 -1
  10. package/dist/commands/index.d.ts +1 -0
  11. package/dist/commands/index.d.ts.map +1 -1
  12. package/dist/commands/index.js +3 -1
  13. package/dist/commands/index.js.map +1 -1
  14. package/dist/commands/intervene.d.ts +15 -0
  15. package/dist/commands/intervene.d.ts.map +1 -0
  16. package/dist/commands/intervene.js +183 -0
  17. package/dist/commands/intervene.js.map +1 -0
  18. package/dist/commands/profile.d.ts.map +1 -1
  19. package/dist/commands/profile.js +250 -24
  20. package/dist/commands/profile.js.map +1 -1
  21. package/dist/gamification/badges.d.ts +29 -0
  22. package/dist/gamification/badges.d.ts.map +1 -0
  23. package/dist/gamification/badges.js +114 -0
  24. package/dist/gamification/badges.js.map +1 -0
  25. package/dist/gamification/challenges.d.ts +42 -0
  26. package/dist/gamification/challenges.d.ts.map +1 -0
  27. package/dist/gamification/challenges.js +184 -0
  28. package/dist/gamification/challenges.js.map +1 -0
  29. package/dist/gamification/hall-of-fame.d.ts +17 -0
  30. package/dist/gamification/hall-of-fame.d.ts.map +1 -0
  31. package/dist/gamification/hall-of-fame.js +64 -0
  32. package/dist/gamification/hall-of-fame.js.map +1 -0
  33. package/dist/gamification/index.d.ts +3 -0
  34. package/dist/gamification/index.d.ts.map +1 -1
  35. package/dist/gamification/index.js +5 -1
  36. package/dist/gamification/index.js.map +1 -1
  37. package/dist/gamification/intervention-memory.d.ts +61 -0
  38. package/dist/gamification/intervention-memory.d.ts.map +1 -0
  39. package/dist/gamification/intervention-memory.js +229 -0
  40. package/dist/gamification/intervention-memory.js.map +1 -0
  41. package/dist/gamification/leaderboards.d.ts +49 -0
  42. package/dist/gamification/leaderboards.d.ts.map +1 -0
  43. package/dist/gamification/leaderboards.js +179 -0
  44. package/dist/gamification/leaderboards.js.map +1 -0
  45. package/dist/gamification/pattern-memory.d.ts +45 -0
  46. package/dist/gamification/pattern-memory.d.ts.map +1 -0
  47. package/dist/gamification/pattern-memory.js +188 -0
  48. package/dist/gamification/pattern-memory.js.map +1 -0
  49. package/dist/gamification/profile.d.ts +2 -1
  50. package/dist/gamification/profile.d.ts.map +1 -1
  51. package/dist/gamification/profile.js +15 -1
  52. package/dist/gamification/profile.js.map +1 -1
  53. package/dist/gamification/share.d.ts +29 -0
  54. package/dist/gamification/share.d.ts.map +1 -0
  55. package/dist/gamification/share.js +57 -0
  56. package/dist/gamification/share.js.map +1 -0
  57. package/dist/gamification/stats.d.ts +34 -0
  58. package/dist/gamification/stats.d.ts.map +1 -0
  59. package/dist/gamification/stats.js +91 -0
  60. package/dist/gamification/stats.js.map +1 -0
  61. package/dist/gamification/streaks.d.ts +9 -1
  62. package/dist/gamification/streaks.d.ts.map +1 -1
  63. package/dist/gamification/streaks.js +37 -4
  64. package/dist/gamification/streaks.js.map +1 -1
  65. package/dist/gamification/types.d.ts +73 -0
  66. package/dist/gamification/types.d.ts.map +1 -1
  67. package/dist/gamification/types.js +11 -3
  68. package/dist/gamification/types.js.map +1 -1
  69. package/dist/gamification/xp.d.ts +6 -2
  70. package/dist/gamification/xp.d.ts.map +1 -1
  71. package/dist/gamification/xp.js +27 -5
  72. package/dist/gamification/xp.js.map +1 -1
  73. package/dist/output/terminal.d.ts.map +1 -1
  74. package/dist/output/terminal.js +39 -0
  75. package/dist/output/terminal.js.map +1 -1
  76. package/feature-list.json +91 -1
  77. package/package.json +1 -1
@@ -0,0 +1,49 @@
1
+ import { SessionRecord } from './types';
2
+ export interface LeaderboardEntry {
3
+ date: string;
4
+ repoPath: string;
5
+ repoName: string;
6
+ vibeScore: number;
7
+ overall: string;
8
+ commits: number;
9
+ xpEarned: number;
10
+ }
11
+ export interface Leaderboards {
12
+ version: string;
13
+ entries: LeaderboardEntry[];
14
+ byRepo: Record<string, LeaderboardEntry[]>;
15
+ personalBests: {
16
+ highestScore: LeaderboardEntry | null;
17
+ longestStreak: number;
18
+ bestWeekXP: {
19
+ week: string;
20
+ xp: number;
21
+ } | null;
22
+ mostCommits: LeaderboardEntry | null;
23
+ };
24
+ }
25
+ /**
26
+ * Get leaderboards file path
27
+ */
28
+ export declare function getLeaderboardsPath(): string;
29
+ /**
30
+ * Load leaderboards from disk
31
+ */
32
+ export declare function loadLeaderboards(): Leaderboards;
33
+ /**
34
+ * Save leaderboards to disk
35
+ */
36
+ export declare function saveLeaderboards(leaderboards: Leaderboards): void;
37
+ /**
38
+ * Create initial leaderboards
39
+ */
40
+ export declare function createInitialLeaderboards(): Leaderboards;
41
+ /**
42
+ * Record a session to leaderboards
43
+ */
44
+ export declare function recordToLeaderboard(session: SessionRecord, repoPath: string, xpEarned: number, streak: number): Leaderboards;
45
+ /**
46
+ * Format leaderboard for display
47
+ */
48
+ export declare function formatLeaderboard(leaderboards: Leaderboards, repoPath?: string): string;
49
+ //# sourceMappingURL=leaderboards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaderboards.d.ts","sourceRoot":"","sources":["../../src/gamification/leaderboards.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAIxC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3C,aAAa,EAAE;QACb,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;QACtC,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;QAChD,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;KACtC,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAY/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CASjE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,YAAY,CAYxD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,YAAY,CAuDd;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAyBvF"}
@@ -0,0 +1,179 @@
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.getLeaderboardsPath = getLeaderboardsPath;
37
+ exports.loadLeaderboards = loadLeaderboards;
38
+ exports.saveLeaderboards = saveLeaderboards;
39
+ exports.createInitialLeaderboards = createInitialLeaderboards;
40
+ exports.recordToLeaderboard = recordToLeaderboard;
41
+ exports.formatLeaderboard = formatLeaderboard;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const os = __importStar(require("os"));
45
+ const LEADERBOARD_FILE = 'leaderboards.json';
46
+ /**
47
+ * Get leaderboards file path
48
+ */
49
+ function getLeaderboardsPath() {
50
+ return path.join(os.homedir(), '.vibe-check', LEADERBOARD_FILE);
51
+ }
52
+ /**
53
+ * Load leaderboards from disk
54
+ */
55
+ function loadLeaderboards() {
56
+ const filePath = getLeaderboardsPath();
57
+ if (fs.existsSync(filePath)) {
58
+ try {
59
+ return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
60
+ }
61
+ catch {
62
+ return createInitialLeaderboards();
63
+ }
64
+ }
65
+ return createInitialLeaderboards();
66
+ }
67
+ /**
68
+ * Save leaderboards to disk
69
+ */
70
+ function saveLeaderboards(leaderboards) {
71
+ const filePath = getLeaderboardsPath();
72
+ const dir = path.dirname(filePath);
73
+ if (!fs.existsSync(dir)) {
74
+ fs.mkdirSync(dir, { recursive: true });
75
+ }
76
+ fs.writeFileSync(filePath, JSON.stringify(leaderboards, null, 2));
77
+ }
78
+ /**
79
+ * Create initial leaderboards
80
+ */
81
+ function createInitialLeaderboards() {
82
+ return {
83
+ version: '1.0.0',
84
+ entries: [],
85
+ byRepo: {},
86
+ personalBests: {
87
+ highestScore: null,
88
+ longestStreak: 0,
89
+ bestWeekXP: null,
90
+ mostCommits: null,
91
+ },
92
+ };
93
+ }
94
+ /**
95
+ * Record a session to leaderboards
96
+ */
97
+ function recordToLeaderboard(session, repoPath, xpEarned, streak) {
98
+ const leaderboards = loadLeaderboards();
99
+ const repoName = path.basename(repoPath);
100
+ const entry = {
101
+ date: session.date,
102
+ repoPath,
103
+ repoName,
104
+ vibeScore: session.vibeScore,
105
+ overall: session.overall,
106
+ commits: session.commits,
107
+ xpEarned,
108
+ };
109
+ // Add to global entries (sorted by score, top 100)
110
+ leaderboards.entries.push(entry);
111
+ leaderboards.entries.sort((a, b) => b.vibeScore - a.vibeScore);
112
+ leaderboards.entries = leaderboards.entries.slice(0, 100);
113
+ // Add to repo-specific entries (top 10)
114
+ if (!leaderboards.byRepo[repoPath]) {
115
+ leaderboards.byRepo[repoPath] = [];
116
+ }
117
+ leaderboards.byRepo[repoPath].push(entry);
118
+ leaderboards.byRepo[repoPath].sort((a, b) => b.vibeScore - a.vibeScore);
119
+ leaderboards.byRepo[repoPath] = leaderboards.byRepo[repoPath].slice(0, 10);
120
+ // Update personal bests
121
+ if (!leaderboards.personalBests.highestScore ||
122
+ session.vibeScore > leaderboards.personalBests.highestScore.vibeScore) {
123
+ leaderboards.personalBests.highestScore = entry;
124
+ }
125
+ if (streak > leaderboards.personalBests.longestStreak) {
126
+ leaderboards.personalBests.longestStreak = streak;
127
+ }
128
+ if (!leaderboards.personalBests.mostCommits ||
129
+ session.commits > leaderboards.personalBests.mostCommits.commits) {
130
+ leaderboards.personalBests.mostCommits = entry;
131
+ }
132
+ // Track weekly XP
133
+ const weekStart = getWeekStartISO(new Date(session.date));
134
+ const currentWeekXP = leaderboards.personalBests.bestWeekXP;
135
+ if (!currentWeekXP || currentWeekXP.week !== weekStart) {
136
+ // New week - check if we beat previous best
137
+ // (simplified - in practice would need to sum week's XP)
138
+ leaderboards.personalBests.bestWeekXP = { week: weekStart, xp: xpEarned };
139
+ }
140
+ else {
141
+ currentWeekXP.xp += xpEarned;
142
+ }
143
+ saveLeaderboards(leaderboards);
144
+ return leaderboards;
145
+ }
146
+ /**
147
+ * Format leaderboard for display
148
+ */
149
+ function formatLeaderboard(leaderboards, repoPath) {
150
+ const lines = [];
151
+ if (repoPath && leaderboards.byRepo[repoPath]) {
152
+ const repoEntries = leaderboards.byRepo[repoPath];
153
+ lines.push(`📊 Top Scores - ${path.basename(repoPath)}`);
154
+ lines.push('');
155
+ for (let i = 0; i < Math.min(repoEntries.length, 5); i++) {
156
+ const e = repoEntries[i];
157
+ const medal = i === 0 ? '🥇' : i === 1 ? '🥈' : i === 2 ? '🥉' : ' ';
158
+ lines.push(`${medal} ${e.vibeScore}% ${e.overall.padEnd(6)} ${e.date}`);
159
+ }
160
+ }
161
+ else {
162
+ lines.push('🏆 All-Time Top Scores');
163
+ lines.push('');
164
+ for (let i = 0; i < Math.min(leaderboards.entries.length, 10); i++) {
165
+ const e = leaderboards.entries[i];
166
+ const medal = i === 0 ? '🥇' : i === 1 ? '🥈' : i === 2 ? '🥉' : `${i + 1}.`;
167
+ lines.push(`${medal} ${e.vibeScore}% ${e.overall.padEnd(6)} ${e.repoName} (${e.date})`);
168
+ }
169
+ }
170
+ return lines.join('\n');
171
+ }
172
+ function getWeekStartISO(date) {
173
+ const d = new Date(date);
174
+ const day = d.getDay();
175
+ const diff = d.getDate() - day + (day === 0 ? -6 : 1);
176
+ d.setDate(diff);
177
+ return d.toISOString().split('T')[0];
178
+ }
179
+ //# sourceMappingURL=leaderboards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaderboards.js","sourceRoot":"","sources":["../../src/gamification/leaderboards.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,kDAEC;AAKD,4CAYC;AAKD,4CASC;AAKD,8DAYC;AAKD,kDA4DC;AAKD,8CAyBC;AAjLD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAGzB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAwB7C;;GAEG;AACH,SAAgB,mBAAmB;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAC9B,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IAEvC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,yBAAyB,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,yBAAyB,EAAE,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,YAA0B;IACzD,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB;IACvC,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,aAAa,EAAE;YACb,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,IAAI;SAClB;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CACjC,OAAsB,EACtB,QAAgB,EAChB,QAAgB,EAChB,MAAc;IAEd,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEzC,MAAM,KAAK,GAAqB;QAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ;QACR,QAAQ;QACR,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ;KACT,CAAC;IAEF,mDAAmD;IACnD,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/D,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE1D,wCAAwC;IACxC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IACrC,CAAC;IACD,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IACxE,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3E,wBAAwB;IACxB,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,YAAY;QACxC,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;QAC1E,YAAY,CAAC,aAAa,CAAC,YAAY,GAAG,KAAK,CAAC;IAClD,CAAC;IAED,IAAI,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QACtD,YAAY,CAAC,aAAa,CAAC,aAAa,GAAG,MAAM,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW;QACvC,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACrE,YAAY,CAAC,aAAa,CAAC,WAAW,GAAG,KAAK,CAAC;IACjD,CAAC;IAED,kBAAkB;IAClB,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC;IAC5D,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACvD,4CAA4C;QAC5C,yDAAyD;QACzD,YAAY,CAAC,aAAa,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,EAAE,IAAI,QAAQ,CAAC;IAC/B,CAAC;IAED,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC/B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,YAA0B,EAAE,QAAiB;IAC7E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,QAAQ,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzD,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACnE,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YAC7E,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CAAC,IAAU;IACjC,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,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Pattern Memory - Track your spiral triggers over time
3
+ *
4
+ * This module stores and aggregates spiral pattern data to help users
5
+ * identify their most common debugging pitfalls.
6
+ */
7
+ import { PatternMemory } from './types';
8
+ import { FixChain } from '../types';
9
+ /**
10
+ * Create initial empty pattern memory
11
+ */
12
+ export declare function createInitialPatternMemory(): PatternMemory;
13
+ /**
14
+ * Add spiral records from fix chains and recompute aggregates
15
+ */
16
+ export declare function updatePatternMemory(memory: PatternMemory | undefined, fixChains: FixChain[]): PatternMemory;
17
+ /**
18
+ * Get human-readable pattern name
19
+ */
20
+ export declare function getPatternDisplayName(pattern: string): string;
21
+ /**
22
+ * Get pattern-specific advice
23
+ */
24
+ export declare function getPatternAdvice(pattern: string): string;
25
+ /**
26
+ * Format pattern memory for display
27
+ */
28
+ export declare function formatPatternMemory(memory: PatternMemory): {
29
+ hasData: boolean;
30
+ summary: string;
31
+ topPatterns: Array<{
32
+ pattern: string;
33
+ displayName: string;
34
+ count: number;
35
+ totalMinutes: number;
36
+ advice: string;
37
+ }>;
38
+ topComponents: Array<{
39
+ component: string;
40
+ count: number;
41
+ }>;
42
+ avgRecoveryTime: number;
43
+ totalSpirals: number;
44
+ };
45
+ //# sourceMappingURL=pattern-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-memory.d.ts","sourceRoot":"","sources":["../../src/gamification/pattern-memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAuB,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAKpC;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,aAAa,CAY1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,SAAS,EAAE,QAAQ,EAAE,GACpB,aAAa,CA6Bf;AA8DD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAW7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgBxD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG;IAC1D,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,KAAK,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,aAAa,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB,CA+CA"}
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ /**
3
+ * Pattern Memory - Track your spiral triggers over time
4
+ *
5
+ * This module stores and aggregates spiral pattern data to help users
6
+ * identify their most common debugging pitfalls.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.createInitialPatternMemory = createInitialPatternMemory;
10
+ exports.updatePatternMemory = updatePatternMemory;
11
+ exports.getPatternDisplayName = getPatternDisplayName;
12
+ exports.getPatternAdvice = getPatternAdvice;
13
+ exports.formatPatternMemory = formatPatternMemory;
14
+ const MAX_RECORDS = 100;
15
+ const PATTERN_MEMORY_VERSION = '1.0.0';
16
+ /**
17
+ * Create initial empty pattern memory
18
+ */
19
+ function createInitialPatternMemory() {
20
+ return {
21
+ version: PATTERN_MEMORY_VERSION,
22
+ records: [],
23
+ patternCounts: {},
24
+ componentCounts: {},
25
+ patternDurations: {},
26
+ topPatterns: [],
27
+ topComponents: [],
28
+ avgRecoveryTime: 0,
29
+ totalSpirals: 0,
30
+ };
31
+ }
32
+ /**
33
+ * Add spiral records from fix chains and recompute aggregates
34
+ */
35
+ function updatePatternMemory(memory, fixChains) {
36
+ const current = memory || createInitialPatternMemory();
37
+ // Filter to only spirals (3+ consecutive fixes)
38
+ const spirals = fixChains.filter((chain) => chain.isSpiral);
39
+ if (spirals.length === 0) {
40
+ return current;
41
+ }
42
+ // Create new records from fix chains
43
+ const today = new Date().toISOString().split('T')[0];
44
+ const newRecords = spirals.map((chain) => ({
45
+ pattern: chain.pattern || 'OTHER',
46
+ component: chain.component,
47
+ duration: chain.duration,
48
+ commits: chain.commits,
49
+ date: today,
50
+ }));
51
+ // Merge with existing records (keep last MAX_RECORDS)
52
+ const allRecords = [...current.records, ...newRecords];
53
+ const trimmedRecords = allRecords.slice(-MAX_RECORDS);
54
+ // Recompute all aggregates from records
55
+ return computeAggregates({
56
+ ...current,
57
+ records: trimmedRecords,
58
+ });
59
+ }
60
+ /**
61
+ * Compute all aggregate statistics from records
62
+ */
63
+ function computeAggregates(memory) {
64
+ const records = memory.records;
65
+ if (records.length === 0) {
66
+ return createInitialPatternMemory();
67
+ }
68
+ // Count patterns
69
+ const patternCounts = {};
70
+ const componentCounts = {};
71
+ const patternDurations = {};
72
+ let totalDuration = 0;
73
+ for (const record of records) {
74
+ // Pattern counts
75
+ patternCounts[record.pattern] = (patternCounts[record.pattern] || 0) + 1;
76
+ // Component counts
77
+ componentCounts[record.component] =
78
+ (componentCounts[record.component] || 0) + 1;
79
+ // Pattern durations
80
+ patternDurations[record.pattern] =
81
+ (patternDurations[record.pattern] || 0) + record.duration;
82
+ totalDuration += record.duration;
83
+ }
84
+ // Get top 3 patterns by frequency
85
+ const topPatterns = Object.entries(patternCounts)
86
+ .sort((a, b) => b[1] - a[1])
87
+ .slice(0, 3)
88
+ .map(([pattern]) => pattern);
89
+ // Get top 3 components by frequency
90
+ const topComponents = Object.entries(componentCounts)
91
+ .sort((a, b) => b[1] - a[1])
92
+ .slice(0, 3)
93
+ .map(([component]) => component);
94
+ // Average recovery time
95
+ const avgRecoveryTime = records.length > 0 ? Math.round(totalDuration / records.length) : 0;
96
+ return {
97
+ version: PATTERN_MEMORY_VERSION,
98
+ records,
99
+ patternCounts,
100
+ componentCounts,
101
+ patternDurations,
102
+ topPatterns,
103
+ topComponents,
104
+ avgRecoveryTime,
105
+ totalSpirals: records.length,
106
+ };
107
+ }
108
+ /**
109
+ * Get human-readable pattern name
110
+ */
111
+ function getPatternDisplayName(pattern) {
112
+ const names = {
113
+ SECRETS_AUTH: 'Secrets & Auth',
114
+ VOLUME_CONFIG: 'Volume Config',
115
+ API_MISMATCH: 'API Mismatch',
116
+ SSL_TLS: 'SSL/TLS',
117
+ IMAGE_REGISTRY: 'Image/Registry',
118
+ GITOPS_DRIFT: 'GitOps Drift',
119
+ OTHER: 'Other',
120
+ };
121
+ return names[pattern] || pattern;
122
+ }
123
+ /**
124
+ * Get pattern-specific advice
125
+ */
126
+ function getPatternAdvice(pattern) {
127
+ const advice = {
128
+ SECRETS_AUTH: 'Consider using a secrets manager or validating auth configs before deploy',
129
+ VOLUME_CONFIG: 'Add volume mount tests to your CI pipeline and validate paths early',
130
+ API_MISMATCH: 'Use schema validation and version checks before integration',
131
+ SSL_TLS: 'Test certificate chains in staging and automate renewal checks',
132
+ IMAGE_REGISTRY: 'Verify image tags exist before deploy, consider digest-based pulls',
133
+ GITOPS_DRIFT: 'Run drift detection in CI and enforce reconciliation timeouts',
134
+ OTHER: 'Consider adding pre-deployment validation for this component',
135
+ };
136
+ return advice[pattern] || advice.OTHER;
137
+ }
138
+ /**
139
+ * Format pattern memory for display
140
+ */
141
+ function formatPatternMemory(memory) {
142
+ if (!memory || memory.records.length === 0) {
143
+ return {
144
+ hasData: false,
145
+ summary: 'No spiral patterns recorded yet',
146
+ topPatterns: [],
147
+ topComponents: [],
148
+ avgRecoveryTime: 0,
149
+ totalSpirals: 0,
150
+ };
151
+ }
152
+ const topPatterns = memory.topPatterns.map((pattern) => ({
153
+ pattern,
154
+ displayName: getPatternDisplayName(pattern),
155
+ count: memory.patternCounts[pattern] || 0,
156
+ totalMinutes: memory.patternDurations[pattern] || 0,
157
+ advice: getPatternAdvice(pattern),
158
+ }));
159
+ const topComponents = memory.topComponents.map((component) => ({
160
+ component,
161
+ count: memory.componentCounts[component] || 0,
162
+ }));
163
+ // Generate summary
164
+ let summary;
165
+ if (memory.totalSpirals === 1) {
166
+ summary = '1 spiral recorded';
167
+ }
168
+ else if (memory.totalSpirals < 5) {
169
+ summary = `${memory.totalSpirals} spirals recorded`;
170
+ }
171
+ else if (topPatterns.length > 0) {
172
+ const topPattern = topPatterns[0];
173
+ const pct = Math.round((topPattern.count / memory.totalSpirals) * 100);
174
+ summary = `${memory.totalSpirals} spirals total - ${topPattern.displayName} is your top trigger (${pct}%)`;
175
+ }
176
+ else {
177
+ summary = `${memory.totalSpirals} spirals recorded`;
178
+ }
179
+ return {
180
+ hasData: true,
181
+ summary,
182
+ topPatterns,
183
+ topComponents,
184
+ avgRecoveryTime: memory.avgRecoveryTime,
185
+ totalSpirals: memory.totalSpirals,
186
+ };
187
+ }
188
+ //# sourceMappingURL=pattern-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-memory.js","sourceRoot":"","sources":["../../src/gamification/pattern-memory.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { UserProfile, SessionRecord, Achievement } from './types';
2
+ import { FixChain } from '../types';
2
3
  /**
3
4
  * Get profile directory path (in user's home directory)
4
5
  */
@@ -22,7 +23,7 @@ export declare function saveProfile(profile: UserProfile): void;
22
23
  /**
23
24
  * Record a new session and update all gamification state
24
25
  */
25
- export declare function recordSession(vibeScore: number, overall: 'ELITE' | 'HIGH' | 'MEDIUM' | 'LOW', commits: number, spirals: number, periodFrom?: Date, periodTo?: Date): {
26
+ export declare function recordSession(vibeScore: number, overall: 'ELITE' | 'HIGH' | 'MEDIUM' | 'LOW', commits: number, spirals: number, periodFrom?: Date, periodTo?: Date, fixChains?: FixChain[]): {
26
27
  profile: UserProfile;
27
28
  xpEarned: number;
28
29
  leveledUp: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/gamification/profile.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,WAAW,EACX,aAAa,EAGb,WAAW,EACZ,MAAM,SAAS,CAAC;AAQjB;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,WAAW,CA4BlD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,WAAW,CAczC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAUtD;AAyCD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,EAC5C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,IAAI,EACjB,QAAQ,CAAC,EAAE,IAAI,GACd;IACD,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,WAAW,EAAE,CAAC;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;CACtB,CA+FA;AAkCD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAK9F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAKrF"}
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/gamification/profile.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,WAAW,EACX,aAAa,EAGb,WAAW,EACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAapC;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,WAAW,CA4BlD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,WAAW,CAczC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAUtD;AAyCD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,EAC5C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,IAAI,EACjB,QAAQ,CAAC,EAAE,IAAI,EACf,SAAS,CAAC,EAAE,QAAQ,EAAE,GACrB;IACD,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,WAAW,EAAE,CAAC;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;CACtB,CAuGA;AA4CD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAK9F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAKrF"}
@@ -47,6 +47,8 @@ const os = __importStar(require("os"));
47
47
  const streaks_1 = require("./streaks");
48
48
  const xp_1 = require("./xp");
49
49
  const achievements_1 = require("./achievements");
50
+ const pattern_memory_1 = require("./pattern-memory");
51
+ const intervention_memory_1 = require("./intervention-memory");
50
52
  const PROFILE_DIR = '.vibe-check';
51
53
  const PROFILE_FILE = 'profile.json';
52
54
  /**
@@ -149,7 +151,7 @@ function isPeriodDuplicate(sessions, periodFrom, periodTo) {
149
151
  /**
150
152
  * Record a new session and update all gamification state
151
153
  */
152
- function recordSession(vibeScore, overall, commits, spirals, periodFrom, periodTo) {
154
+ function recordSession(vibeScore, overall, commits, spirals, periodFrom, periodTo, fixChains) {
153
155
  const profile = loadProfile();
154
156
  const now = new Date();
155
157
  // Check for duplicate period (anti-gaming)
@@ -211,6 +213,10 @@ function recordSession(vibeScore, overall, commits, spirals, periodFrom, periodT
211
213
  // Recalculate average
212
214
  const allScores = profile.sessions.map(s => s.vibeScore);
213
215
  profile.stats.avgVibeScore = Math.round(allScores.reduce((a, b) => a + b, 0) / allScores.length);
216
+ // Update pattern memory if fix chains provided
217
+ if (fixChains && fixChains.length > 0) {
218
+ profile.patternMemory = (0, pattern_memory_1.updatePatternMemory)(profile.patternMemory, fixChains);
219
+ }
214
220
  // Save profile
215
221
  saveProfile(profile);
216
222
  return {
@@ -250,6 +256,14 @@ function migrateProfile(profile) {
250
256
  spiralsAvoided: 0,
251
257
  };
252
258
  }
259
+ // Initialize pattern memory if not present (v1.4.0+)
260
+ if (!profile.patternMemory) {
261
+ profile.patternMemory = (0, pattern_memory_1.createInitialPatternMemory)();
262
+ }
263
+ // Initialize intervention memory if not present (v1.4.0+)
264
+ if (!profile.interventionMemory) {
265
+ profile.interventionMemory = (0, intervention_memory_1.createInitialInterventionMemory)();
266
+ }
253
267
  return profile;
254
268
  }
255
269
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/gamification/profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/gamification/profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { UserProfile } from './types';
2
+ export interface ShareableProfile {
3
+ username?: string;
4
+ level: number;
5
+ levelName: string;
6
+ totalXP: number;
7
+ badge: string | null;
8
+ streak: number;
9
+ longestStreak: number;
10
+ totalSessions: number;
11
+ avgScore: number;
12
+ bestScore: number;
13
+ achievementCount: number;
14
+ prestigeTier?: number;
15
+ generatedAt: string;
16
+ }
17
+ /**
18
+ * Create shareable profile data
19
+ */
20
+ export declare function createShareableProfile(profile: UserProfile, username?: string): ShareableProfile;
21
+ /**
22
+ * Format profile for sharing (text format)
23
+ */
24
+ export declare function formatShareText(shareable: ShareableProfile): string;
25
+ /**
26
+ * Format profile as JSON for clipboard
27
+ */
28
+ export declare function formatShareJSON(shareable: ShareableProfile): string;
29
+ //# sourceMappingURL=share.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/gamification/share.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkB,MAAM,SAAS,CAAC;AAGtD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB,gBAAgB,CAsBlB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAqBnE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAEnE"}