@boshu2/vibe-check 1.4.0 → 1.6.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 (188) hide show
  1. package/.agents/bundles/insight-mining-dashboard-research-2025-11-30.md +400 -0
  2. package/.agents/bundles/storage-enhancement-research-2025-11-30.md +292 -0
  3. package/.agents/bundles/timeline-feature-research-complete-2025-11-30.md +301 -0
  4. package/.agents/plans/insight-dashboard-plan-2025-11-30.md +1130 -0
  5. package/.agents/plans/json-storage-enhancement-plan.md +717 -0
  6. package/.agents/plans/storage-hardening-and-cache-plan.md +592 -0
  7. package/.agents/plans/test-coverage-gaps-plan.md +1117 -0
  8. package/.agents/plans/timeline-feature-plan.md +193 -0
  9. package/.agents/plans/vibe_timeline_research_findings.md +553 -0
  10. package/.claude/settings.local.json +1 -0
  11. package/.vibe-check/.gitignore +6 -0
  12. package/CHANGELOG.md +46 -0
  13. package/CLAUDE.md +24 -0
  14. package/CONTRIBUTING.md +227 -0
  15. package/README.md +200 -143
  16. package/claude-progress.json +200 -12
  17. package/claude-progress.txt +310 -0
  18. package/dashboard/app.js +75 -2
  19. package/dashboard/dashboard-data.json +653 -0
  20. package/dashboard/index.html +13 -0
  21. package/dashboard/styles.css +61 -0
  22. package/dist/analysis/cross-session-analysis.d.ts +68 -0
  23. package/dist/analysis/cross-session-analysis.d.ts.map +1 -0
  24. package/dist/analysis/cross-session-analysis.js +174 -0
  25. package/dist/analysis/cross-session-analysis.js.map +1 -0
  26. package/dist/analysis/index.d.ts +2 -0
  27. package/dist/analysis/index.d.ts.map +1 -0
  28. package/dist/analysis/index.js +12 -0
  29. package/dist/analysis/index.js.map +1 -0
  30. package/dist/cli.js +10 -1
  31. package/dist/cli.js.map +1 -1
  32. package/dist/commands/analyze.d.ts +2 -0
  33. package/dist/commands/analyze.d.ts.map +1 -1
  34. package/dist/commands/analyze.js +105 -2
  35. package/dist/commands/analyze.js.map +1 -1
  36. package/dist/commands/cache.d.ts +6 -0
  37. package/dist/commands/cache.d.ts.map +1 -0
  38. package/dist/commands/cache.js +168 -0
  39. package/dist/commands/cache.js.map +1 -0
  40. package/dist/commands/dashboard.d.ts +8 -0
  41. package/dist/commands/dashboard.d.ts.map +1 -0
  42. package/dist/commands/dashboard.js +109 -0
  43. package/dist/commands/dashboard.js.map +1 -0
  44. package/dist/commands/index.d.ts +3 -0
  45. package/dist/commands/index.d.ts.map +1 -1
  46. package/dist/commands/index.js +8 -1
  47. package/dist/commands/index.js.map +1 -1
  48. package/dist/commands/profile.d.ts.map +1 -1
  49. package/dist/commands/profile.js +140 -31
  50. package/dist/commands/profile.js.map +1 -1
  51. package/dist/commands/timeline.d.ts +14 -0
  52. package/dist/commands/timeline.d.ts.map +1 -0
  53. package/dist/commands/timeline.js +462 -0
  54. package/dist/commands/timeline.js.map +1 -0
  55. package/dist/gamification/badges.d.ts +29 -0
  56. package/dist/gamification/badges.d.ts.map +1 -0
  57. package/dist/gamification/badges.js +114 -0
  58. package/dist/gamification/badges.js.map +1 -0
  59. package/dist/gamification/challenges.d.ts +42 -0
  60. package/dist/gamification/challenges.d.ts.map +1 -0
  61. package/dist/gamification/challenges.js +184 -0
  62. package/dist/gamification/challenges.js.map +1 -0
  63. package/dist/gamification/hall-of-fame.d.ts +17 -0
  64. package/dist/gamification/hall-of-fame.d.ts.map +1 -0
  65. package/dist/gamification/hall-of-fame.js +64 -0
  66. package/dist/gamification/hall-of-fame.js.map +1 -0
  67. package/dist/gamification/leaderboards.d.ts +49 -0
  68. package/dist/gamification/leaderboards.d.ts.map +1 -0
  69. package/dist/gamification/leaderboards.js +179 -0
  70. package/dist/gamification/leaderboards.js.map +1 -0
  71. package/dist/gamification/share.d.ts +29 -0
  72. package/dist/gamification/share.d.ts.map +1 -0
  73. package/dist/gamification/share.js +57 -0
  74. package/dist/gamification/share.js.map +1 -0
  75. package/dist/gamification/stats.d.ts +34 -0
  76. package/dist/gamification/stats.d.ts.map +1 -0
  77. package/dist/gamification/stats.js +91 -0
  78. package/dist/gamification/stats.js.map +1 -0
  79. package/dist/gamification/streaks.d.ts +9 -1
  80. package/dist/gamification/streaks.d.ts.map +1 -1
  81. package/dist/gamification/streaks.js +37 -4
  82. package/dist/gamification/streaks.js.map +1 -1
  83. package/dist/gamification/types.d.ts +35 -0
  84. package/dist/gamification/types.d.ts.map +1 -1
  85. package/dist/gamification/types.js +11 -3
  86. package/dist/gamification/types.js.map +1 -1
  87. package/dist/gamification/xp.d.ts +6 -2
  88. package/dist/gamification/xp.d.ts.map +1 -1
  89. package/dist/gamification/xp.js +27 -5
  90. package/dist/gamification/xp.js.map +1 -1
  91. package/dist/git.d.ts +24 -0
  92. package/dist/git.d.ts.map +1 -1
  93. package/dist/git.js +94 -0
  94. package/dist/git.js.map +1 -1
  95. package/dist/insights/generators.d.ts +44 -0
  96. package/dist/insights/generators.d.ts.map +1 -0
  97. package/dist/insights/generators.js +289 -0
  98. package/dist/insights/generators.js.map +1 -0
  99. package/dist/insights/index.d.ts +16 -0
  100. package/dist/insights/index.d.ts.map +1 -0
  101. package/dist/insights/index.js +171 -0
  102. package/dist/insights/index.js.map +1 -0
  103. package/dist/insights/types.d.ts +93 -0
  104. package/dist/insights/types.d.ts.map +1 -0
  105. package/dist/insights/types.js +6 -0
  106. package/dist/insights/types.js.map +1 -0
  107. package/dist/output/terminal.d.ts.map +1 -1
  108. package/dist/output/terminal.js +39 -0
  109. package/dist/output/terminal.js.map +1 -1
  110. package/dist/output/timeline-html.d.ts +6 -0
  111. package/dist/output/timeline-html.d.ts.map +1 -0
  112. package/dist/output/timeline-html.js +389 -0
  113. package/dist/output/timeline-html.js.map +1 -0
  114. package/dist/output/timeline-markdown.d.ts +6 -0
  115. package/dist/output/timeline-markdown.d.ts.map +1 -0
  116. package/dist/output/timeline-markdown.js +167 -0
  117. package/dist/output/timeline-markdown.js.map +1 -0
  118. package/dist/output/timeline.d.ts +9 -0
  119. package/dist/output/timeline.d.ts.map +1 -0
  120. package/dist/output/timeline.js +318 -0
  121. package/dist/output/timeline.js.map +1 -0
  122. package/dist/patterns/detour.d.ts +32 -0
  123. package/dist/patterns/detour.d.ts.map +1 -0
  124. package/dist/patterns/detour.js +137 -0
  125. package/dist/patterns/detour.js.map +1 -0
  126. package/dist/patterns/flow-state.d.ts +16 -0
  127. package/dist/patterns/flow-state.d.ts.map +1 -0
  128. package/dist/patterns/flow-state.js +40 -0
  129. package/dist/patterns/flow-state.js.map +1 -0
  130. package/dist/patterns/index.d.ts +8 -0
  131. package/dist/patterns/index.d.ts.map +1 -0
  132. package/dist/patterns/index.js +22 -0
  133. package/dist/patterns/index.js.map +1 -0
  134. package/dist/patterns/intervention-effectiveness.d.ts +42 -0
  135. package/dist/patterns/intervention-effectiveness.d.ts.map +1 -0
  136. package/dist/patterns/intervention-effectiveness.js +196 -0
  137. package/dist/patterns/intervention-effectiveness.js.map +1 -0
  138. package/dist/patterns/late-night.d.ts +30 -0
  139. package/dist/patterns/late-night.d.ts.map +1 -0
  140. package/dist/patterns/late-night.js +141 -0
  141. package/dist/patterns/late-night.js.map +1 -0
  142. package/dist/patterns/post-delete-sprint.d.ts +28 -0
  143. package/dist/patterns/post-delete-sprint.d.ts.map +1 -0
  144. package/dist/patterns/post-delete-sprint.js +85 -0
  145. package/dist/patterns/post-delete-sprint.js.map +1 -0
  146. package/dist/patterns/spiral-regression.d.ts +49 -0
  147. package/dist/patterns/spiral-regression.d.ts.map +1 -0
  148. package/dist/patterns/spiral-regression.js +219 -0
  149. package/dist/patterns/spiral-regression.js.map +1 -0
  150. package/dist/patterns/thrashing.d.ts +25 -0
  151. package/dist/patterns/thrashing.d.ts.map +1 -0
  152. package/dist/patterns/thrashing.js +111 -0
  153. package/dist/patterns/thrashing.js.map +1 -0
  154. package/dist/storage/atomic.d.ts +40 -0
  155. package/dist/storage/atomic.d.ts.map +1 -0
  156. package/dist/storage/atomic.js +155 -0
  157. package/dist/storage/atomic.js.map +1 -0
  158. package/dist/storage/commit-log.d.ts +35 -0
  159. package/dist/storage/commit-log.d.ts.map +1 -0
  160. package/dist/storage/commit-log.js +128 -0
  161. package/dist/storage/commit-log.js.map +1 -0
  162. package/dist/storage/index.d.ts +5 -0
  163. package/dist/storage/index.d.ts.map +1 -0
  164. package/dist/storage/index.js +33 -0
  165. package/dist/storage/index.js.map +1 -0
  166. package/dist/storage/schema.d.ts +32 -0
  167. package/dist/storage/schema.d.ts.map +1 -0
  168. package/dist/storage/schema.js +37 -0
  169. package/dist/storage/schema.js.map +1 -0
  170. package/dist/storage/timeline-store.d.ts +117 -0
  171. package/dist/storage/timeline-store.d.ts.map +1 -0
  172. package/dist/storage/timeline-store.js +438 -0
  173. package/dist/storage/timeline-store.js.map +1 -0
  174. package/dist/types.d.ts +96 -0
  175. package/dist/types.d.ts.map +1 -1
  176. package/docs/ARCHITECTURE.md +458 -0
  177. package/docs/DATA-ARCHITECTURE.md +565 -0
  178. package/docs/GAMIFICATION.md +564 -0
  179. package/docs/JSON-STORAGE-PATTERNS.md +512 -0
  180. package/docs/METRICS-EXPLAINED.md +394 -0
  181. package/docs/UNIFIED-ECOSYSTEM.md +560 -0
  182. package/docs/VIBE-ECOSYSTEM.md +406 -0
  183. package/feature-list.json +103 -1
  184. package/package.json +2 -1
  185. package/vitest.config.ts +1 -5
  186. package/.vibe-check/calibration.json +0 -38
  187. package/.vibe-check/latest.json +0 -114
  188. package/.vibe-check/sessions.json +0 -34
@@ -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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"}
package/dist/git.d.ts CHANGED
@@ -1,6 +1,18 @@
1
1
  import { Commit } from './types';
2
2
  export declare function getCommits(repoPath: string, since?: string, until?: string): Promise<Commit[]>;
3
3
  export declare function isGitRepo(repoPath: string): Promise<boolean>;
4
+ /**
5
+ * Get the latest commit hash in the repo
6
+ */
7
+ export declare function getLatestCommitHash(repoPath: string): Promise<string>;
8
+ /**
9
+ * Get commits since a specific commit hash (for incremental sync)
10
+ */
11
+ export declare function getCommitsSince(repoPath: string, sinceHash: string): Promise<Commit[]>;
12
+ /**
13
+ * Check if a commit hash exists in the repo
14
+ */
15
+ export declare function commitExists(repoPath: string, hash: string): Promise<boolean>;
4
16
  export interface FileStats {
5
17
  filesPerCommit: Map<string, string[]>;
6
18
  lineStats: {
@@ -8,8 +20,20 @@ export interface FileStats {
8
20
  deletions: number;
9
21
  }[];
10
22
  }
23
+ export interface CommitStats {
24
+ filesPerCommit: Map<string, string[]>;
25
+ lineStatsPerCommit: Map<string, {
26
+ additions: number;
27
+ deletions: number;
28
+ }>;
29
+ }
11
30
  /**
12
31
  * Get file-level statistics for semantic-free metrics.
13
32
  */
14
33
  export declare function getFileStats(repoPath: string, since?: string, until?: string): Promise<FileStats>;
34
+ /**
35
+ * Get per-commit statistics for pattern detection.
36
+ * Returns a map of commit hash -> stats
37
+ */
38
+ export declare function getCommitStats(repoPath: string, since?: string, until?: string): Promise<CommitStats>;
15
39
  //# sourceMappingURL=git.d.ts.map
package/dist/git.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAIjC,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBnB;AA+BD,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQlE;AAED,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,SAAS,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,SAAS,CAAC,CAmDpB"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAIjC,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBnB;AA+BD,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQlE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ3E;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQnF;AAED,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,SAAS,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvD;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,SAAS,CAAC,CAmDpB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,CAgDtB"}
package/dist/git.js CHANGED
@@ -5,7 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getCommits = getCommits;
7
7
  exports.isGitRepo = isGitRepo;
8
+ exports.getLatestCommitHash = getLatestCommitHash;
9
+ exports.getCommitsSince = getCommitsSince;
10
+ exports.commitExists = commitExists;
8
11
  exports.getFileStats = getFileStats;
12
+ exports.getCommitStats = getCommitStats;
9
13
  const simple_git_1 = __importDefault(require("simple-git"));
10
14
  const COMMIT_TYPES = ['feat', 'fix', 'docs', 'chore', 'refactor', 'test', 'style'];
11
15
  async function getCommits(repoPath, since, until) {
@@ -62,6 +66,47 @@ async function isGitRepo(repoPath) {
62
66
  return false;
63
67
  }
64
68
  }
69
+ /**
70
+ * Get the latest commit hash in the repo
71
+ */
72
+ async function getLatestCommitHash(repoPath) {
73
+ const git = (0, simple_git_1.default)(repoPath);
74
+ try {
75
+ const log = await git.log({ n: 1 });
76
+ return log.latest?.hash.substring(0, 7) || '';
77
+ }
78
+ catch {
79
+ return '';
80
+ }
81
+ }
82
+ /**
83
+ * Get commits since a specific commit hash (for incremental sync)
84
+ */
85
+ async function getCommitsSince(repoPath, sinceHash) {
86
+ const git = (0, simple_git_1.default)(repoPath);
87
+ try {
88
+ // Get commits after the given hash
89
+ const log = await git.log({ from: sinceHash, to: 'HEAD' });
90
+ return log.all.map((entry) => parseCommit(entry));
91
+ }
92
+ catch {
93
+ // If hash doesn't exist or error, return empty
94
+ return [];
95
+ }
96
+ }
97
+ /**
98
+ * Check if a commit hash exists in the repo
99
+ */
100
+ async function commitExists(repoPath, hash) {
101
+ const git = (0, simple_git_1.default)(repoPath);
102
+ try {
103
+ await git.raw(['cat-file', '-t', hash]);
104
+ return true;
105
+ }
106
+ catch {
107
+ return false;
108
+ }
109
+ }
65
110
  /**
66
111
  * Get file-level statistics for semantic-free metrics.
67
112
  */
@@ -113,4 +158,53 @@ async function getFileStats(repoPath, since, until) {
113
158
  }
114
159
  return { filesPerCommit, lineStats };
115
160
  }
161
+ /**
162
+ * Get per-commit statistics for pattern detection.
163
+ * Returns a map of commit hash -> stats
164
+ */
165
+ async function getCommitStats(repoPath, since, until) {
166
+ const git = (0, simple_git_1.default)(repoPath);
167
+ const filesPerCommit = new Map();
168
+ const lineStatsPerCommit = new Map();
169
+ // Build options for git log
170
+ const logOptions = {};
171
+ if (since)
172
+ logOptions['--since'] = since;
173
+ if (until)
174
+ logOptions['--until'] = until;
175
+ try {
176
+ const log = await git.log(logOptions);
177
+ for (const commit of log.all) {
178
+ const hash = commit.hash.substring(0, 7);
179
+ try {
180
+ const diffStat = await git.raw(['diff-tree', '--numstat', '--root', '-r', commit.hash]);
181
+ const lines = diffStat.trim().split('\n').filter(l => l.length > 0);
182
+ const files = [];
183
+ let additions = 0;
184
+ let deletions = 0;
185
+ for (const line of lines) {
186
+ const parts = line.split('\t');
187
+ if (parts.length >= 3) {
188
+ const add = parseInt(parts[0], 10) || 0;
189
+ const del = parseInt(parts[1], 10) || 0;
190
+ const file = parts[2];
191
+ additions += add;
192
+ deletions += del;
193
+ files.push(file);
194
+ }
195
+ }
196
+ filesPerCommit.set(hash, files);
197
+ lineStatsPerCommit.set(hash, { additions, deletions });
198
+ }
199
+ catch {
200
+ filesPerCommit.set(hash, []);
201
+ lineStatsPerCommit.set(hash, { additions: 0, deletions: 0 });
202
+ }
203
+ }
204
+ }
205
+ catch {
206
+ // Return empty stats on error
207
+ }
208
+ return { filesPerCommit, lineStatsPerCommit };
209
+ }
116
210
  //# sourceMappingURL=git.js.map
package/dist/git.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Insight generators - each produces insights from specific data sources
3
+ */
4
+ import { Insight } from './types';
5
+ import { UserProfile } from '../gamification/types';
6
+ import { TimelineStore } from '../storage/timeline-store';
7
+ import { Commit } from '../types';
8
+ /**
9
+ * Find peak productivity hours from commits
10
+ */
11
+ export declare function generatePeakHoursInsight(commits: Commit[]): Insight | null;
12
+ /**
13
+ * Detect improvement streak from trends
14
+ */
15
+ export declare function generateImprovementStreakInsight(store: TimelineStore): Insight | null;
16
+ /**
17
+ * Find problematic scopes with high fix ratios
18
+ */
19
+ export declare function generateProblematicScopesInsight(commits: Commit[]): Insight | null;
20
+ /**
21
+ * Check for streak at risk
22
+ */
23
+ export declare function generateStreakRiskInsight(profile: UserProfile): Insight | null;
24
+ /**
25
+ * Celebrate personal best
26
+ */
27
+ export declare function generatePersonalBestInsight(profile: UserProfile): Insight | null;
28
+ /**
29
+ * Show level progress
30
+ */
31
+ export declare function generateLevelProgressInsight(profile: UserProfile): Insight | null;
32
+ /**
33
+ * Late night warning
34
+ */
35
+ export declare function generateLateNightInsight(commits: Commit[]): Insight | null;
36
+ /**
37
+ * Recent achievement
38
+ */
39
+ export declare function generateRecentAchievementInsight(profile: UserProfile): Insight | null;
40
+ /**
41
+ * Best day of week insight
42
+ */
43
+ export declare function generateBestDayInsight(commits: Commit[]): Insight | null;
44
+ //# sourceMappingURL=generators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../src/insights/generators.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAgC1E;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,GAAG,IAAI,CA+BrF;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAwClF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,GAAG,IAAI,CAwB9E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,GAAG,IAAI,CA8BhF;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,GAAG,IAAI,CAoBjF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAwB1E;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,GAAG,IAAI,CAwBrF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAgCxE"}
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+ /**
3
+ * Insight generators - each produces insights from specific data sources
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generatePeakHoursInsight = generatePeakHoursInsight;
7
+ exports.generateImprovementStreakInsight = generateImprovementStreakInsight;
8
+ exports.generateProblematicScopesInsight = generateProblematicScopesInsight;
9
+ exports.generateStreakRiskInsight = generateStreakRiskInsight;
10
+ exports.generatePersonalBestInsight = generatePersonalBestInsight;
11
+ exports.generateLevelProgressInsight = generateLevelProgressInsight;
12
+ exports.generateLateNightInsight = generateLateNightInsight;
13
+ exports.generateRecentAchievementInsight = generateRecentAchievementInsight;
14
+ exports.generateBestDayInsight = generateBestDayInsight;
15
+ /**
16
+ * Find peak productivity hours from commits
17
+ */
18
+ function generatePeakHoursInsight(commits) {
19
+ if (commits.length < 10)
20
+ return null;
21
+ const hourCounts = {};
22
+ for (const commit of commits) {
23
+ const hour = commit.date.getHours();
24
+ hourCounts[hour] = (hourCounts[hour] || 0) + 1;
25
+ }
26
+ const sorted = Object.entries(hourCounts)
27
+ .map(([h, c]) => ({ hour: parseInt(h), count: c }))
28
+ .sort((a, b) => b.count - a.count);
29
+ if (sorted.length === 0)
30
+ return null;
31
+ const peakHour = sorted[0].hour;
32
+ const peakPct = Math.round((sorted[0].count / commits.length) * 100);
33
+ const hourStr = peakHour < 12 ? `${peakHour || 12}am` : peakHour === 12 ? '12pm' : `${peakHour - 12}pm`;
34
+ return {
35
+ id: 'peak-hours',
36
+ category: 'productivity',
37
+ severity: 'info',
38
+ icon: '⏰',
39
+ title: 'Peak Productivity',
40
+ message: `You're most productive around ${hourStr} (${peakPct}% of commits)`,
41
+ metric: 'peak_hour',
42
+ value: peakHour,
43
+ action: 'Protect this time for deep work',
44
+ source: 'commits',
45
+ priority: 5,
46
+ };
47
+ }
48
+ /**
49
+ * Detect improvement streak from trends
50
+ */
51
+ function generateImprovementStreakInsight(store) {
52
+ const weeks = store.trends.weekly;
53
+ if (weeks.length < 2)
54
+ return null;
55
+ let streak = 0;
56
+ for (let i = weeks.length - 2; i >= 0; i--) {
57
+ const current = weeks[i];
58
+ const next = weeks[i + 1];
59
+ const currentRate = current.sessions > 0 ? current.spirals / current.sessions : 0;
60
+ const nextRate = next.sessions > 0 ? next.spirals / next.sessions : 0;
61
+ if (nextRate <= currentRate) {
62
+ streak++;
63
+ }
64
+ else {
65
+ break;
66
+ }
67
+ }
68
+ if (streak < 2)
69
+ return null;
70
+ return {
71
+ id: 'improvement-streak',
72
+ category: 'growth',
73
+ severity: 'success',
74
+ icon: '🎯',
75
+ title: 'Improvement Streak',
76
+ message: `${streak}-week improvement streak! Your spiral rate keeps dropping.`,
77
+ metric: 'improvement_weeks',
78
+ value: streak,
79
+ source: 'timeline.trends',
80
+ priority: 7,
81
+ };
82
+ }
83
+ /**
84
+ * Find problematic scopes with high fix ratios
85
+ */
86
+ function generateProblematicScopesInsight(commits) {
87
+ const scopeStats = new Map();
88
+ for (const commit of commits) {
89
+ const scope = commit.scope || '(no scope)';
90
+ if (!scopeStats.has(scope)) {
91
+ scopeStats.set(scope, { total: 0, fixes: 0 });
92
+ }
93
+ const stats = scopeStats.get(scope);
94
+ stats.total++;
95
+ if (commit.type === 'fix')
96
+ stats.fixes++;
97
+ }
98
+ const problematic = Array.from(scopeStats.entries())
99
+ .map(([scope, stats]) => ({
100
+ scope,
101
+ ...stats,
102
+ ratio: stats.total > 0 ? stats.fixes / stats.total : 0,
103
+ }))
104
+ .filter(s => s.total >= 3 && s.ratio >= 0.5)
105
+ .sort((a, b) => b.ratio - a.ratio);
106
+ if (problematic.length === 0)
107
+ return null;
108
+ const worst = problematic[0];
109
+ const pct = Math.round(worst.ratio * 100);
110
+ return {
111
+ id: 'problematic-scope',
112
+ category: 'warning',
113
+ severity: 'warning',
114
+ icon: '⚠️',
115
+ title: 'High-Risk Scope',
116
+ message: `"${worst.scope}" has ${pct}% fix commits (${worst.fixes}/${worst.total})`,
117
+ metric: 'scope_fix_ratio',
118
+ value: worst.ratio,
119
+ action: 'Consider adding tracer tests for this area',
120
+ source: 'commits',
121
+ priority: 8,
122
+ };
123
+ }
124
+ /**
125
+ * Check for streak at risk
126
+ */
127
+ function generateStreakRiskInsight(profile) {
128
+ const { streak } = profile;
129
+ if (streak.current < 3)
130
+ return null;
131
+ const today = new Date().toISOString().split('T')[0];
132
+ if (streak.lastActiveDate === today)
133
+ return null;
134
+ const lastActive = new Date(streak.lastActiveDate);
135
+ const now = new Date();
136
+ const daysSince = Math.floor((now.getTime() - lastActive.getTime()) / (1000 * 60 * 60 * 24));
137
+ if (daysSince === 0)
138
+ return null;
139
+ return {
140
+ id: 'streak-risk',
141
+ category: 'warning',
142
+ severity: daysSince >= 1 ? 'warning' : 'info',
143
+ icon: '🔥',
144
+ title: 'Streak at Risk',
145
+ message: `Your ${streak.current}-day streak needs a session today!`,
146
+ action: 'Run vibe-check --score to maintain streak',
147
+ source: 'profile',
148
+ priority: 9,
149
+ };
150
+ }
151
+ /**
152
+ * Celebrate personal best
153
+ */
154
+ function generatePersonalBestInsight(profile) {
155
+ const sessions = profile.sessions;
156
+ if (sessions.length < 2)
157
+ return null;
158
+ const latest = sessions[sessions.length - 1];
159
+ const previousScores = sessions.slice(0, -1).map(s => s.vibeScore);
160
+ const previousBest = Math.max(...previousScores);
161
+ if (latest.vibeScore > previousBest) {
162
+ return {
163
+ id: 'personal-best',
164
+ category: 'celebration',
165
+ severity: 'success',
166
+ icon: '🏆',
167
+ title: 'New Personal Best!',
168
+ message: `${latest.vibeScore}% beats your previous best of ${previousBest}%`,
169
+ metric: 'vibe_score',
170
+ value: latest.vibeScore,
171
+ comparison: {
172
+ type: 'previous',
173
+ label: 'Previous best',
174
+ value: previousBest,
175
+ change: latest.vibeScore - previousBest,
176
+ },
177
+ source: 'profile',
178
+ priority: 10,
179
+ };
180
+ }
181
+ return null;
182
+ }
183
+ /**
184
+ * Show level progress
185
+ */
186
+ function generateLevelProgressInsight(profile) {
187
+ const { xp } = profile;
188
+ const progress = Math.round((xp.currentLevelXP / xp.nextLevelXP) * 100);
189
+ if (progress >= 80) {
190
+ return {
191
+ id: 'level-close',
192
+ category: 'growth',
193
+ severity: 'info',
194
+ icon: '📈',
195
+ title: 'Level Up Soon!',
196
+ message: `${progress}% to Level ${xp.level + 1} (${xp.nextLevelXP - xp.currentLevelXP} XP to go)`,
197
+ metric: 'level_progress',
198
+ value: progress,
199
+ source: 'profile',
200
+ priority: 6,
201
+ };
202
+ }
203
+ return null;
204
+ }
205
+ /**
206
+ * Late night warning
207
+ */
208
+ function generateLateNightInsight(commits) {
209
+ const recentCommits = commits.slice(-20);
210
+ if (recentCommits.length < 5)
211
+ return null;
212
+ const lateNight = recentCommits.filter(c => {
213
+ const hour = c.date.getHours();
214
+ return hour >= 23 || hour < 5;
215
+ });
216
+ if (lateNight.length < 3)
217
+ return null;
218
+ const pct = Math.round((lateNight.length / recentCommits.length) * 100);
219
+ return {
220
+ id: 'late-night',
221
+ category: 'warning',
222
+ severity: 'warning',
223
+ icon: '🌙',
224
+ title: 'Late Night Sessions',
225
+ message: `${pct}% of recent commits are between 11pm-5am`,
226
+ action: 'Late night coding correlates with more spirals',
227
+ source: 'commits',
228
+ priority: 7,
229
+ };
230
+ }
231
+ /**
232
+ * Recent achievement
233
+ */
234
+ function generateRecentAchievementInsight(profile) {
235
+ const recent = profile.achievements
236
+ .filter(a => a.unlockedAt)
237
+ .sort((a, b) => new Date(b.unlockedAt).getTime() - new Date(a.unlockedAt).getTime())
238
+ .slice(0, 1);
239
+ if (recent.length === 0)
240
+ return null;
241
+ const ach = recent[0];
242
+ const unlockedDate = new Date(ach.unlockedAt);
243
+ const daysSince = Math.floor((Date.now() - unlockedDate.getTime()) / (1000 * 60 * 60 * 24));
244
+ if (daysSince > 7)
245
+ return null;
246
+ return {
247
+ id: 'recent-achievement',
248
+ category: 'celebration',
249
+ severity: 'success',
250
+ icon: ach.icon,
251
+ title: 'Achievement Unlocked!',
252
+ message: `${ach.name}: ${ach.description}`,
253
+ source: 'profile',
254
+ priority: 8,
255
+ };
256
+ }
257
+ /**
258
+ * Best day of week insight
259
+ */
260
+ function generateBestDayInsight(commits) {
261
+ if (commits.length < 20)
262
+ return null;
263
+ const dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
264
+ const dayCounts = {};
265
+ for (const commit of commits) {
266
+ const day = commit.date.getDay();
267
+ dayCounts[day] = (dayCounts[day] || 0) + 1;
268
+ }
269
+ const sorted = Object.entries(dayCounts)
270
+ .map(([d, c]) => ({ day: parseInt(d), count: c }))
271
+ .sort((a, b) => b.count - a.count);
272
+ if (sorted.length === 0)
273
+ return null;
274
+ const bestDay = sorted[0].day;
275
+ const bestPct = Math.round((sorted[0].count / commits.length) * 100);
276
+ return {
277
+ id: 'best-day',
278
+ category: 'productivity',
279
+ severity: 'info',
280
+ icon: '📅',
281
+ title: 'Best Coding Day',
282
+ message: `${dayNames[bestDay]} is your most productive day (${bestPct}% of commits)`,
283
+ metric: 'best_day',
284
+ value: bestDay,
285
+ source: 'commits',
286
+ priority: 4,
287
+ };
288
+ }
289
+ //# sourceMappingURL=generators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generators.js","sourceRoot":"","sources":["../../src/insights/generators.ts"],"names":[],"mappings":"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"}