@boshu2/vibe-check 1.8.1 → 2.2.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 (402) hide show
  1. package/.agents/plans/2025-12-27-vibe-check-evolution-plan.md +383 -0
  2. package/.agents/research/2025-12-27-vibe-check-evolution.md +352 -0
  3. package/.claude/settings.local.json +9 -3
  4. package/CHANGELOG.md +43 -0
  5. package/CLAUDE.md +201 -26
  6. package/Makefile +4 -4
  7. package/README.md +95 -0
  8. package/bin/vibe-check.js +1 -1
  9. package/claude-progress.json +18 -0
  10. package/dist/analysis/cross-session-analysis.d.ts +1 -1
  11. package/dist/analysis/cross-session-analysis.d.ts.map +1 -1
  12. package/dist/analysis/cross-session-analysis.js +9 -18
  13. package/dist/analysis/cross-session-analysis.js.map +1 -1
  14. package/dist/analysis/index.d.ts +1 -1
  15. package/dist/analysis/index.d.ts.map +1 -1
  16. package/dist/analysis/index.js +1 -11
  17. package/dist/analysis/index.js.map +1 -1
  18. package/dist/analyzers/audit.d.ts +28 -0
  19. package/dist/analyzers/audit.d.ts.map +1 -0
  20. package/dist/analyzers/audit.js +86 -0
  21. package/dist/analyzers/audit.js.map +1 -0
  22. package/dist/analyzers/eldritch.d.ts +40 -0
  23. package/dist/analyzers/eldritch.d.ts.map +1 -0
  24. package/dist/analyzers/eldritch.js +202 -0
  25. package/dist/analyzers/eldritch.js.map +1 -0
  26. package/dist/analyzers/modularity.d.ts +67 -0
  27. package/dist/analyzers/modularity.d.ts.map +1 -0
  28. package/dist/analyzers/modularity.js +254 -0
  29. package/dist/analyzers/modularity.js.map +1 -0
  30. package/dist/analyzers/patterns.d.ts +1 -1
  31. package/dist/analyzers/patterns.d.ts.map +1 -1
  32. package/dist/analyzers/patterns.js +4 -10
  33. package/dist/analyzers/patterns.js.map +1 -1
  34. package/dist/analyzers/quality.d.ts +1 -1
  35. package/dist/analyzers/quality.d.ts.map +1 -1
  36. package/dist/analyzers/quality.js +5 -12
  37. package/dist/analyzers/quality.js.map +1 -1
  38. package/dist/analyzers/sessions.d.ts +1 -1
  39. package/dist/analyzers/sessions.d.ts.map +1 -1
  40. package/dist/analyzers/sessions.js +1 -4
  41. package/dist/analyzers/sessions.js.map +1 -1
  42. package/dist/cli.js +21 -20
  43. package/dist/cli.js.map +1 -1
  44. package/dist/commands/analyze.d.ts.map +1 -1
  45. package/dist/commands/analyze.js +124 -149
  46. package/dist/commands/analyze.js.map +1 -1
  47. package/dist/commands/audit.d.ts +3 -0
  48. package/dist/commands/audit.d.ts.map +1 -0
  49. package/dist/commands/audit.js +102 -0
  50. package/dist/commands/audit.js.map +1 -0
  51. package/dist/commands/cache.js +31 -70
  52. package/dist/commands/cache.js.map +1 -1
  53. package/dist/commands/dashboard.d.ts.map +1 -1
  54. package/dist/commands/dashboard.js +22 -58
  55. package/dist/commands/dashboard.js.map +1 -1
  56. package/dist/commands/forensics.d.ts +10 -2
  57. package/dist/commands/forensics.d.ts.map +1 -1
  58. package/dist/commands/forensics.js +91 -51
  59. package/dist/commands/forensics.js.map +1 -1
  60. package/dist/commands/index.d.ts +15 -13
  61. package/dist/commands/index.d.ts.map +1 -1
  62. package/dist/commands/index.js +15 -33
  63. package/dist/commands/index.js.map +1 -1
  64. package/dist/commands/init-hook.js +26 -32
  65. package/dist/commands/init-hook.js.map +1 -1
  66. package/dist/commands/insights.js +39 -45
  67. package/dist/commands/insights.js.map +1 -1
  68. package/dist/commands/modularity.d.ts +27 -0
  69. package/dist/commands/modularity.d.ts.map +1 -0
  70. package/dist/commands/modularity.js +182 -0
  71. package/dist/commands/modularity.js.map +1 -0
  72. package/dist/commands/pipeline.js +39 -78
  73. package/dist/commands/pipeline.js.map +1 -1
  74. package/dist/commands/profile.js +68 -74
  75. package/dist/commands/profile.js.map +1 -1
  76. package/dist/commands/session.js +88 -129
  77. package/dist/commands/session.js.map +1 -1
  78. package/dist/commands/sessions.d.ts +1 -1
  79. package/dist/commands/sessions.d.ts.map +1 -1
  80. package/dist/commands/sessions.js +42 -49
  81. package/dist/commands/sessions.js.map +1 -1
  82. package/dist/commands/start.js +22 -67
  83. package/dist/commands/start.js.map +1 -1
  84. package/dist/commands/timeline.js +74 -81
  85. package/dist/commands/timeline.js.map +1 -1
  86. package/dist/commands/watch.js +54 -60
  87. package/dist/commands/watch.js.map +1 -1
  88. package/dist/gamification/achievements.d.ts +1 -1
  89. package/dist/gamification/achievements.d.ts.map +1 -1
  90. package/dist/gamification/achievements.js +7 -13
  91. package/dist/gamification/achievements.js.map +1 -1
  92. package/dist/gamification/index.d.ts +8 -8
  93. package/dist/gamification/index.d.ts.map +1 -1
  94. package/dist/gamification/index.js +8 -28
  95. package/dist/gamification/index.js.map +1 -1
  96. package/dist/gamification/profile.d.ts +2 -2
  97. package/dist/gamification/profile.d.ts.map +1 -1
  98. package/dist/gamification/profile.js +21 -64
  99. package/dist/gamification/profile.js.map +1 -1
  100. package/dist/gamification/stats.d.ts +1 -1
  101. package/dist/gamification/stats.d.ts.map +1 -1
  102. package/dist/gamification/stats.js +4 -10
  103. package/dist/gamification/stats.js.map +1 -1
  104. package/dist/gamification/streaks.d.ts +1 -1
  105. package/dist/gamification/streaks.d.ts.map +1 -1
  106. package/dist/gamification/streaks.js +8 -18
  107. package/dist/gamification/streaks.js.map +1 -1
  108. package/dist/gamification/types.js +3 -6
  109. package/dist/gamification/types.js.map +1 -1
  110. package/dist/gamification/xp.d.ts +1 -1
  111. package/dist/gamification/xp.d.ts.map +1 -1
  112. package/dist/gamification/xp.js +29 -38
  113. package/dist/gamification/xp.js.map +1 -1
  114. package/dist/git.d.ts +1 -1
  115. package/dist/git.d.ts.map +1 -1
  116. package/dist/git.js +23 -29
  117. package/dist/git.js.map +1 -1
  118. package/dist/inner-loop/context-amnesia.d.ts +2 -2
  119. package/dist/inner-loop/context-amnesia.d.ts.map +1 -1
  120. package/dist/inner-loop/context-amnesia.js +7 -10
  121. package/dist/inner-loop/context-amnesia.js.map +1 -1
  122. package/dist/inner-loop/index.d.ts +7 -7
  123. package/dist/inner-loop/index.d.ts.map +1 -1
  124. package/dist/inner-loop/index.js +18 -45
  125. package/dist/inner-loop/index.js.map +1 -1
  126. package/dist/inner-loop/instruction-drift.d.ts +2 -2
  127. package/dist/inner-loop/instruction-drift.d.ts.map +1 -1
  128. package/dist/inner-loop/instruction-drift.js +5 -10
  129. package/dist/inner-loop/instruction-drift.js.map +1 -1
  130. package/dist/inner-loop/logging-only.d.ts +2 -2
  131. package/dist/inner-loop/logging-only.d.ts.map +1 -1
  132. package/dist/inner-loop/logging-only.js +9 -17
  133. package/dist/inner-loop/logging-only.js.map +1 -1
  134. package/dist/inner-loop/tests-passing-lie.d.ts +2 -2
  135. package/dist/inner-loop/tests-passing-lie.d.ts.map +1 -1
  136. package/dist/inner-loop/tests-passing-lie.js +12 -17
  137. package/dist/inner-loop/tests-passing-lie.js.map +1 -1
  138. package/dist/inner-loop/types.js +1 -4
  139. package/dist/inner-loop/types.js.map +1 -1
  140. package/dist/insights/generators.d.ts +4 -4
  141. package/dist/insights/generators.d.ts.map +1 -1
  142. package/dist/insights/generators.js +9 -20
  143. package/dist/insights/generators.js.map +1 -1
  144. package/dist/insights/index.d.ts +4 -4
  145. package/dist/insights/index.d.ts.map +1 -1
  146. package/dist/insights/index.js +23 -27
  147. package/dist/insights/index.js.map +1 -1
  148. package/dist/insights/types.js +1 -2
  149. package/dist/insights/types.js.map +1 -1
  150. package/dist/metrics/code-stability.d.ts +1 -1
  151. package/dist/metrics/code-stability.d.ts.map +1 -1
  152. package/dist/metrics/code-stability.js +1 -4
  153. package/dist/metrics/code-stability.js.map +1 -1
  154. package/dist/metrics/cohesion.d.ts +27 -0
  155. package/dist/metrics/cohesion.d.ts.map +1 -0
  156. package/dist/metrics/cohesion.js +134 -0
  157. package/dist/metrics/cohesion.js.map +1 -0
  158. package/dist/metrics/file-churn.d.ts +1 -1
  159. package/dist/metrics/file-churn.d.ts.map +1 -1
  160. package/dist/metrics/file-churn.js +1 -4
  161. package/dist/metrics/file-churn.js.map +1 -1
  162. package/dist/metrics/flow.d.ts +1 -1
  163. package/dist/metrics/flow.d.ts.map +1 -1
  164. package/dist/metrics/flow.js +1 -4
  165. package/dist/metrics/flow.js.map +1 -1
  166. package/dist/metrics/index.d.ts +10 -2
  167. package/dist/metrics/index.d.ts.map +1 -1
  168. package/dist/metrics/index.js +51 -20
  169. package/dist/metrics/index.js.map +1 -1
  170. package/dist/metrics/investigation.d.ts +25 -0
  171. package/dist/metrics/investigation.d.ts.map +1 -0
  172. package/dist/metrics/investigation.js +115 -0
  173. package/dist/metrics/investigation.js.map +1 -0
  174. package/dist/metrics/rework.d.ts +1 -1
  175. package/dist/metrics/rework.d.ts.map +1 -1
  176. package/dist/metrics/rework.js +1 -4
  177. package/dist/metrics/rework.js.map +1 -1
  178. package/dist/metrics/spirals.d.ts +1 -1
  179. package/dist/metrics/spirals.d.ts.map +1 -1
  180. package/dist/metrics/spirals.js +5 -10
  181. package/dist/metrics/spirals.js.map +1 -1
  182. package/dist/metrics/time-spiral.d.ts +1 -1
  183. package/dist/metrics/time-spiral.d.ts.map +1 -1
  184. package/dist/metrics/time-spiral.js +1 -4
  185. package/dist/metrics/time-spiral.js.map +1 -1
  186. package/dist/metrics/tracers.d.ts +28 -0
  187. package/dist/metrics/tracers.d.ts.map +1 -0
  188. package/dist/metrics/tracers.js +117 -0
  189. package/dist/metrics/tracers.js.map +1 -0
  190. package/dist/metrics/trust.d.ts +1 -1
  191. package/dist/metrics/trust.d.ts.map +1 -1
  192. package/dist/metrics/trust.js +3 -6
  193. package/dist/metrics/trust.js.map +1 -1
  194. package/dist/metrics/velocity-anomaly.d.ts +1 -1
  195. package/dist/metrics/velocity-anomaly.d.ts.map +1 -1
  196. package/dist/metrics/velocity-anomaly.js +3 -6
  197. package/dist/metrics/velocity-anomaly.js.map +1 -1
  198. package/dist/metrics/velocity.d.ts +1 -1
  199. package/dist/metrics/velocity.d.ts.map +1 -1
  200. package/dist/metrics/velocity.js +6 -10
  201. package/dist/metrics/velocity.js.map +1 -1
  202. package/dist/output/index.d.ts +4 -4
  203. package/dist/output/index.d.ts.map +1 -1
  204. package/dist/output/index.js +10 -18
  205. package/dist/output/index.js.map +1 -1
  206. package/dist/output/json.d.ts +1 -1
  207. package/dist/output/json.d.ts.map +1 -1
  208. package/dist/output/json.js +1 -4
  209. package/dist/output/json.js.map +1 -1
  210. package/dist/output/markdown.d.ts +1 -1
  211. package/dist/output/markdown.d.ts.map +1 -1
  212. package/dist/output/markdown.js +5 -8
  213. package/dist/output/markdown.js.map +1 -1
  214. package/dist/output/terminal.d.ts +1 -1
  215. package/dist/output/terminal.d.ts.map +1 -1
  216. package/dist/output/terminal.js +88 -62
  217. package/dist/output/terminal.js.map +1 -1
  218. package/dist/output/timeline-html.d.ts +1 -1
  219. package/dist/output/timeline-html.d.ts.map +1 -1
  220. package/dist/output/timeline-html.js +5 -8
  221. package/dist/output/timeline-html.js.map +1 -1
  222. package/dist/output/timeline-markdown.d.ts +1 -1
  223. package/dist/output/timeline-markdown.d.ts.map +1 -1
  224. package/dist/output/timeline-markdown.js +5 -8
  225. package/dist/output/timeline-markdown.js.map +1 -1
  226. package/dist/output/timeline.d.ts +1 -1
  227. package/dist/output/timeline.d.ts.map +1 -1
  228. package/dist/output/timeline.js +46 -52
  229. package/dist/output/timeline.js.map +1 -1
  230. package/dist/patterns/detour.d.ts +1 -1
  231. package/dist/patterns/detour.d.ts.map +1 -1
  232. package/dist/patterns/detour.js +1 -4
  233. package/dist/patterns/detour.js.map +1 -1
  234. package/dist/patterns/flow-state.d.ts +1 -1
  235. package/dist/patterns/flow-state.d.ts.map +1 -1
  236. package/dist/patterns/flow-state.js +1 -4
  237. package/dist/patterns/flow-state.js.map +1 -1
  238. package/dist/patterns/index.d.ts +7 -7
  239. package/dist/patterns/index.d.ts.map +1 -1
  240. package/dist/patterns/index.js +7 -21
  241. package/dist/patterns/index.js.map +1 -1
  242. package/dist/patterns/intervention-effectiveness.d.ts +1 -1
  243. package/dist/patterns/intervention-effectiveness.d.ts.map +1 -1
  244. package/dist/patterns/intervention-effectiveness.js +3 -8
  245. package/dist/patterns/intervention-effectiveness.js.map +1 -1
  246. package/dist/patterns/late-night.d.ts +1 -1
  247. package/dist/patterns/late-night.d.ts.map +1 -1
  248. package/dist/patterns/late-night.js +1 -4
  249. package/dist/patterns/late-night.js.map +1 -1
  250. package/dist/patterns/post-delete-sprint.d.ts +1 -1
  251. package/dist/patterns/post-delete-sprint.d.ts.map +1 -1
  252. package/dist/patterns/post-delete-sprint.js +1 -4
  253. package/dist/patterns/post-delete-sprint.js.map +1 -1
  254. package/dist/patterns/spiral-regression.d.ts +1 -1
  255. package/dist/patterns/spiral-regression.d.ts.map +1 -1
  256. package/dist/patterns/spiral-regression.js +3 -8
  257. package/dist/patterns/spiral-regression.js.map +1 -1
  258. package/dist/patterns/thrashing.d.ts +1 -1
  259. package/dist/patterns/thrashing.d.ts.map +1 -1
  260. package/dist/patterns/thrashing.js +3 -6
  261. package/dist/patterns/thrashing.js.map +1 -1
  262. package/dist/score/index.d.ts +3 -3
  263. package/dist/score/index.d.ts.map +1 -1
  264. package/dist/score/index.js +4 -10
  265. package/dist/score/index.js.map +1 -1
  266. package/dist/score/weights.js +2 -6
  267. package/dist/score/weights.js.map +1 -1
  268. package/dist/sessions/index.js +9 -51
  269. package/dist/sessions/index.js.map +1 -1
  270. package/dist/storage/atomic.js +10 -51
  271. package/dist/storage/atomic.js.map +1 -1
  272. package/dist/storage/commit-log.d.ts +1 -1
  273. package/dist/storage/commit-log.d.ts.map +1 -1
  274. package/dist/storage/commit-log.js +11 -51
  275. package/dist/storage/commit-log.js.map +1 -1
  276. package/dist/storage/index.d.ts +5 -5
  277. package/dist/storage/index.d.ts.map +1 -1
  278. package/dist/storage/index.js +5 -37
  279. package/dist/storage/index.js.map +1 -1
  280. package/dist/storage/schema.js +4 -9
  281. package/dist/storage/schema.js.map +1 -1
  282. package/dist/storage/spiral-history.js +14 -57
  283. package/dist/storage/spiral-history.js.map +1 -1
  284. package/dist/storage/timeline-store.d.ts +2 -2
  285. package/dist/storage/timeline-store.d.ts.map +1 -1
  286. package/dist/storage/timeline-store.js +17 -61
  287. package/dist/storage/timeline-store.js.map +1 -1
  288. package/dist/types.d.ts +36 -1
  289. package/dist/types.d.ts.map +1 -1
  290. package/dist/types.js +1 -2
  291. package/docs/ENHANCEMENT-PLAN.md +379 -0
  292. package/feature-list.json +6 -0
  293. package/package.json +8 -7
  294. package/.claude/skills/typescript-review.md +0 -152
  295. package/dist/calibration/ece.d.ts +0 -26
  296. package/dist/calibration/ece.d.ts.map +0 -1
  297. package/dist/calibration/ece.js +0 -93
  298. package/dist/calibration/ece.js.map +0 -1
  299. package/dist/calibration/index.d.ts +0 -3
  300. package/dist/calibration/index.d.ts.map +0 -1
  301. package/dist/calibration/index.js +0 -15
  302. package/dist/calibration/index.js.map +0 -1
  303. package/dist/calibration/storage.d.ts +0 -34
  304. package/dist/calibration/storage.d.ts.map +0 -1
  305. package/dist/calibration/storage.js +0 -188
  306. package/dist/calibration/storage.js.map +0 -1
  307. package/dist/commands/intervene.d.ts +0 -15
  308. package/dist/commands/intervene.d.ts.map +0 -1
  309. package/dist/commands/intervene.js +0 -183
  310. package/dist/commands/intervene.js.map +0 -1
  311. package/dist/commands/learn.d.ts +0 -3
  312. package/dist/commands/learn.d.ts.map +0 -1
  313. package/dist/commands/learn.js +0 -161
  314. package/dist/commands/learn.js.map +0 -1
  315. package/dist/commands/lesson.d.ts +0 -8
  316. package/dist/commands/lesson.d.ts.map +0 -1
  317. package/dist/commands/lesson.js +0 -206
  318. package/dist/commands/lesson.js.map +0 -1
  319. package/dist/commands/level.d.ts +0 -3
  320. package/dist/commands/level.d.ts.map +0 -1
  321. package/dist/commands/level.js +0 -277
  322. package/dist/commands/level.js.map +0 -1
  323. package/dist/gamification/badges.d.ts +0 -29
  324. package/dist/gamification/badges.d.ts.map +0 -1
  325. package/dist/gamification/badges.js +0 -114
  326. package/dist/gamification/badges.js.map +0 -1
  327. package/dist/gamification/challenges.d.ts +0 -42
  328. package/dist/gamification/challenges.d.ts.map +0 -1
  329. package/dist/gamification/challenges.js +0 -184
  330. package/dist/gamification/challenges.js.map +0 -1
  331. package/dist/gamification/hall-of-fame.d.ts +0 -17
  332. package/dist/gamification/hall-of-fame.d.ts.map +0 -1
  333. package/dist/gamification/hall-of-fame.js +0 -64
  334. package/dist/gamification/hall-of-fame.js.map +0 -1
  335. package/dist/gamification/intervention-memory.d.ts +0 -61
  336. package/dist/gamification/intervention-memory.d.ts.map +0 -1
  337. package/dist/gamification/intervention-memory.js +0 -229
  338. package/dist/gamification/intervention-memory.js.map +0 -1
  339. package/dist/gamification/leaderboards.d.ts +0 -49
  340. package/dist/gamification/leaderboards.d.ts.map +0 -1
  341. package/dist/gamification/leaderboards.js +0 -179
  342. package/dist/gamification/leaderboards.js.map +0 -1
  343. package/dist/gamification/pattern-memory.d.ts +0 -45
  344. package/dist/gamification/pattern-memory.d.ts.map +0 -1
  345. package/dist/gamification/pattern-memory.js +0 -188
  346. package/dist/gamification/pattern-memory.js.map +0 -1
  347. package/dist/gamification/share.d.ts +0 -29
  348. package/dist/gamification/share.d.ts.map +0 -1
  349. package/dist/gamification/share.js +0 -57
  350. package/dist/gamification/share.js.map +0 -1
  351. package/dist/learning/cadence.d.ts +0 -15
  352. package/dist/learning/cadence.d.ts.map +0 -1
  353. package/dist/learning/cadence.js +0 -130
  354. package/dist/learning/cadence.js.map +0 -1
  355. package/dist/learning/index.d.ts +0 -19
  356. package/dist/learning/index.d.ts.map +0 -1
  357. package/dist/learning/index.js +0 -35
  358. package/dist/learning/index.js.map +0 -1
  359. package/dist/learning/lessons-storage.d.ts +0 -48
  360. package/dist/learning/lessons-storage.d.ts.map +0 -1
  361. package/dist/learning/lessons-storage.js +0 -266
  362. package/dist/learning/lessons-storage.js.map +0 -1
  363. package/dist/learning/lessons-types.d.ts +0 -83
  364. package/dist/learning/lessons-types.d.ts.map +0 -1
  365. package/dist/learning/lessons-types.js +0 -15
  366. package/dist/learning/lessons-types.js.map +0 -1
  367. package/dist/learning/nudges.d.ts +0 -20
  368. package/dist/learning/nudges.d.ts.map +0 -1
  369. package/dist/learning/nudges.js +0 -68
  370. package/dist/learning/nudges.js.map +0 -1
  371. package/dist/learning/retrospective.d.ts +0 -27
  372. package/dist/learning/retrospective.d.ts.map +0 -1
  373. package/dist/learning/retrospective.js +0 -184
  374. package/dist/learning/retrospective.js.map +0 -1
  375. package/dist/learning/storage.d.ts +0 -44
  376. package/dist/learning/storage.d.ts.map +0 -1
  377. package/dist/learning/storage.js +0 -194
  378. package/dist/learning/storage.js.map +0 -1
  379. package/dist/learning/surfacing.d.ts +0 -36
  380. package/dist/learning/surfacing.d.ts.map +0 -1
  381. package/dist/learning/surfacing.js +0 -255
  382. package/dist/learning/surfacing.js.map +0 -1
  383. package/dist/learning/synthesis.d.ts +0 -17
  384. package/dist/learning/synthesis.d.ts.map +0 -1
  385. package/dist/learning/synthesis.js +0 -293
  386. package/dist/learning/synthesis.js.map +0 -1
  387. package/dist/learning/types.d.ts +0 -60
  388. package/dist/learning/types.d.ts.map +0 -1
  389. package/dist/learning/types.js +0 -17
  390. package/dist/learning/types.js.map +0 -1
  391. package/dist/recommend/index.d.ts +0 -3
  392. package/dist/recommend/index.d.ts.map +0 -1
  393. package/dist/recommend/index.js +0 -14
  394. package/dist/recommend/index.js.map +0 -1
  395. package/dist/recommend/ordered-logistic.d.ts +0 -49
  396. package/dist/recommend/ordered-logistic.d.ts.map +0 -1
  397. package/dist/recommend/ordered-logistic.js +0 -153
  398. package/dist/recommend/ordered-logistic.js.map +0 -1
  399. package/dist/recommend/questions.d.ts +0 -19
  400. package/dist/recommend/questions.d.ts.map +0 -1
  401. package/dist/recommend/questions.js +0 -73
  402. package/dist/recommend/questions.js.map +0 -1
@@ -1,184 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CHALLENGE_DEFINITIONS = void 0;
4
- exports.generateWeeklyChallenges = generateWeeklyChallenges;
5
- exports.updateChallengeProgress = updateChallengeProgress;
6
- exports.getCurrentChallenges = getCurrentChallenges;
7
- exports.formatChallenges = formatChallenges;
8
- exports.CHALLENGE_DEFINITIONS = {
9
- TRUST_STREAK: {
10
- name: 'Trust Gauntlet',
11
- description: (n) => `Get 90%+ trust in ${n} sessions`,
12
- icon: '🎯',
13
- targets: [3, 5, 7],
14
- rewards: [50, 100, 150],
15
- },
16
- ZERO_SPIRALS: {
17
- name: 'Zen Mode',
18
- description: (n) => `${n} sessions with 0 spirals`,
19
- icon: '🧘',
20
- targets: [3, 5, 7],
21
- rewards: [50, 100, 150],
22
- },
23
- ELITE_COUNT: {
24
- name: 'Elite Streak',
25
- description: (n) => `Get ${n} ELITE ratings this week`,
26
- icon: '✨',
27
- targets: [2, 4, 6],
28
- rewards: [50, 100, 150],
29
- },
30
- COMMIT_VOLUME: {
31
- name: 'Commit Champion',
32
- description: (n) => `Analyze ${n}+ commits this week`,
33
- icon: '📊',
34
- targets: [50, 100, 200],
35
- rewards: [30, 60, 100],
36
- },
37
- STREAK_EXTEND: {
38
- name: 'Streak Builder',
39
- description: (n) => `Extend your streak by ${n} days`,
40
- icon: '🔥',
41
- targets: [3, 5, 7],
42
- rewards: [40, 80, 120],
43
- },
44
- };
45
- /**
46
- * Generate weekly challenges based on user's weak metrics
47
- */
48
- function generateWeeklyChallenges(profile) {
49
- const weekStart = getWeekStartISO(new Date());
50
- const recentSessions = getSessionsThisWeek(profile.sessions, weekStart);
51
- // Analyze weak areas
52
- const avgTrust = recentSessions.length > 0
53
- ? recentSessions.reduce((sum, s) => sum + (s.vibeScore || 0), 0) / recentSessions.length
54
- : 50;
55
- const spiralCount = recentSessions.reduce((sum, s) => sum + s.spirals, 0);
56
- const eliteCount = recentSessions.filter(s => s.overall === 'ELITE').length;
57
- // Pick 3 challenges (1 based on weakness, 2 random)
58
- const challenges = [];
59
- const usedTypes = new Set();
60
- // Challenge 1: Based on weakness
61
- if (avgTrust < 80) {
62
- challenges.push(createChallenge('TRUST_STREAK', weekStart, 1)); // Medium
63
- usedTypes.add('TRUST_STREAK');
64
- }
65
- else if (spiralCount > 3) {
66
- challenges.push(createChallenge('ZERO_SPIRALS', weekStart, 1));
67
- usedTypes.add('ZERO_SPIRALS');
68
- }
69
- else if (eliteCount < 2) {
70
- challenges.push(createChallenge('ELITE_COUNT', weekStart, 1));
71
- usedTypes.add('ELITE_COUNT');
72
- }
73
- else {
74
- challenges.push(createChallenge('STREAK_EXTEND', weekStart, 1));
75
- usedTypes.add('STREAK_EXTEND');
76
- }
77
- // Challenge 2-3: Random from remaining
78
- const remainingTypes = Object.keys(exports.CHALLENGE_DEFINITIONS)
79
- .filter(t => !usedTypes.has(t));
80
- for (let i = 0; i < 2 && remainingTypes.length > 0; i++) {
81
- const idx = Math.floor(Math.random() * remainingTypes.length);
82
- const type = remainingTypes.splice(idx, 1)[0];
83
- challenges.push(createChallenge(type, weekStart, 0)); // Easy difficulty
84
- }
85
- return challenges;
86
- }
87
- function createChallenge(type, weekStart, difficultyIdx) {
88
- const def = exports.CHALLENGE_DEFINITIONS[type];
89
- const target = def.targets[difficultyIdx];
90
- const reward = def.rewards[difficultyIdx];
91
- return {
92
- id: `${type}-${weekStart}`,
93
- type,
94
- name: def.name,
95
- description: def.description(target),
96
- icon: def.icon,
97
- target,
98
- progress: 0,
99
- reward,
100
- weekStart,
101
- completed: false,
102
- };
103
- }
104
- /**
105
- * Update challenge progress after a session
106
- */
107
- function updateChallengeProgress(challenges, session, streak) {
108
- const completed = [];
109
- for (const challenge of challenges) {
110
- if (challenge.completed)
111
- continue;
112
- switch (challenge.type) {
113
- case 'TRUST_STREAK':
114
- if (session.vibeScore >= 90)
115
- challenge.progress++;
116
- break;
117
- case 'ZERO_SPIRALS':
118
- if (session.spirals === 0 && session.commits >= 10)
119
- challenge.progress++;
120
- break;
121
- case 'ELITE_COUNT':
122
- if (session.overall === 'ELITE')
123
- challenge.progress++;
124
- break;
125
- case 'COMMIT_VOLUME':
126
- challenge.progress += session.commits;
127
- break;
128
- case 'STREAK_EXTEND':
129
- challenge.progress = streak.current - (challenge.progress || 0);
130
- break;
131
- }
132
- if (challenge.progress >= challenge.target) {
133
- challenge.completed = true;
134
- challenge.completedAt = new Date().toISOString();
135
- completed.push(challenge);
136
- }
137
- }
138
- return { challenges, completed };
139
- }
140
- /**
141
- * Get current week's challenges, generating if needed
142
- */
143
- function getCurrentChallenges(profile) {
144
- const weekStart = getWeekStartISO(new Date());
145
- const existingChallenges = profile.challenges || [];
146
- // Check if we have challenges for this week
147
- const thisWeekChallenges = existingChallenges.filter(c => c.weekStart === weekStart);
148
- if (thisWeekChallenges.length >= 3) {
149
- return thisWeekChallenges;
150
- }
151
- // Generate new challenges
152
- return generateWeeklyChallenges(profile);
153
- }
154
- /**
155
- * Format challenges for display
156
- */
157
- function formatChallenges(challenges) {
158
- const lines = [];
159
- for (const c of challenges) {
160
- const progressBar = createProgressBar(c.progress, c.target, 10);
161
- const status = c.completed ? '✓ COMPLETE' : `${c.progress}/${c.target}`;
162
- lines.push(`${c.icon} ${c.name}: ${progressBar} ${status}`);
163
- }
164
- return lines.join('\n');
165
- }
166
- function createProgressBar(current, total, length) {
167
- const pct = Math.min(current / total, 1);
168
- const filled = Math.round(pct * length);
169
- const empty = length - filled;
170
- return '█'.repeat(filled) + '░'.repeat(empty);
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
- d.setHours(0, 0, 0, 0);
178
- return d.toISOString().split('T')[0];
179
- }
180
- function getSessionsThisWeek(sessions, weekStart) {
181
- const start = new Date(weekStart);
182
- return sessions.filter(s => new Date(s.date) >= start);
183
- }
184
- //# sourceMappingURL=challenges.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"challenges.js","sourceRoot":"","sources":["../../src/gamification/challenges.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import { Leaderboards } from './leaderboards';
2
- export interface HallOfFameRecord {
3
- category: string;
4
- icon: string;
5
- value: string;
6
- date: string;
7
- context: string;
8
- }
9
- /**
10
- * Get Hall of Fame records from leaderboards
11
- */
12
- export declare function getHallOfFame(leaderboards: Leaderboards): HallOfFameRecord[];
13
- /**
14
- * Format Hall of Fame for display
15
- */
16
- export declare function formatHallOfFame(records: HallOfFameRecord[]): string;
17
- //# sourceMappingURL=hall-of-fame.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hall-of-fame.d.ts","sourceRoot":"","sources":["../../src/gamification/hall-of-fame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,YAAY,GAAG,gBAAgB,EAAE,CA6C5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAcpE"}
@@ -1,64 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getHallOfFame = getHallOfFame;
4
- exports.formatHallOfFame = formatHallOfFame;
5
- /**
6
- * Get Hall of Fame records from leaderboards
7
- */
8
- function getHallOfFame(leaderboards) {
9
- const records = [];
10
- const pb = leaderboards.personalBests;
11
- if (pb.highestScore) {
12
- records.push({
13
- category: 'Best Vibe Score',
14
- icon: '🏆',
15
- value: `${pb.highestScore.vibeScore}%`,
16
- date: pb.highestScore.date,
17
- context: `${pb.highestScore.repoName} - ${pb.highestScore.overall}`,
18
- });
19
- }
20
- if (pb.longestStreak > 0) {
21
- records.push({
22
- category: 'Longest Streak',
23
- icon: '🔥',
24
- value: `${pb.longestStreak} days`,
25
- date: 'All time',
26
- context: 'Consecutive daily check-ins',
27
- });
28
- }
29
- if (pb.bestWeekXP) {
30
- records.push({
31
- category: 'Best Week XP',
32
- icon: '⚡',
33
- value: `${pb.bestWeekXP.xp} XP`,
34
- date: pb.bestWeekXP.week,
35
- context: 'Most XP earned in a single week',
36
- });
37
- }
38
- if (pb.mostCommits) {
39
- records.push({
40
- category: 'Most Commits',
41
- icon: '📊',
42
- value: `${pb.mostCommits.commits}`,
43
- date: pb.mostCommits.date,
44
- context: `${pb.mostCommits.repoName} - single session`,
45
- });
46
- }
47
- return records;
48
- }
49
- /**
50
- * Format Hall of Fame for display
51
- */
52
- function formatHallOfFame(records) {
53
- if (records.length === 0) {
54
- return 'No records yet. Keep coding!';
55
- }
56
- const lines = ['🏛️ HALL OF FAME', ''];
57
- for (const record of records) {
58
- lines.push(`${record.icon} ${record.category}: ${record.value}`);
59
- lines.push(` ${record.date} - ${record.context}`);
60
- lines.push('');
61
- }
62
- return lines.join('\n');
63
- }
64
- //# sourceMappingURL=hall-of-fame.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hall-of-fame.js","sourceRoot":"","sources":["../../src/gamification/hall-of-fame.ts"],"names":[],"mappings":";;AAaA,sCA6CC;AAKD,4CAcC;AAnED;;GAEG;AACH,SAAgB,aAAa,CAAC,YAA0B;IACtD,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,MAAM,EAAE,GAAG,YAAY,CAAC,aAAa,CAAC;IAEtC,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,GAAG;YACtC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI;YAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,MAAM,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE;SACpE,CAAC,CAAC;IACL,CAAC;IAED,IAAI,EAAE,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ,EAAE,gBAAgB;YAC1B,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,GAAG,EAAE,CAAC,aAAa,OAAO;YACjC,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,6BAA6B;SACvC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK;YAC/B,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI;YACxB,OAAO,EAAE,iCAAiC;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE;YAClC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI;YACzB,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,mBAAmB;SACvD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,OAA2B;IAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,8BAA8B,CAAC;IACxC,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAElD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,61 +0,0 @@
1
- /**
2
- * Intervention Memory - Track what breaks your spirals
3
- *
4
- * This module stores and aggregates intervention data to help users
5
- * identify what techniques work best for breaking their debug spirals.
6
- */
7
- import { InterventionMemory, InterventionRecord, InterventionType } from './types';
8
- export declare const INTERVENTION_INFO: Record<InterventionType, {
9
- name: string;
10
- icon: string;
11
- description: string;
12
- }>;
13
- /**
14
- * Create initial empty intervention memory
15
- */
16
- export declare function createInitialInterventionMemory(): InterventionMemory;
17
- /**
18
- * Record a new intervention and recompute aggregates
19
- */
20
- export declare function recordIntervention(memory: InterventionMemory | undefined, intervention: Omit<InterventionRecord, 'date'>): InterventionMemory;
21
- /**
22
- * Get intervention display name
23
- */
24
- export declare function getInterventionDisplayName(type: InterventionType): string;
25
- /**
26
- * Get intervention icon
27
- */
28
- export declare function getInterventionIcon(type: InterventionType): string;
29
- /**
30
- * Get recommended intervention for a pattern based on history
31
- */
32
- export declare function getRecommendedIntervention(memory: InterventionMemory | undefined, pattern: string): InterventionType | null;
33
- /**
34
- * Format intervention memory for display
35
- */
36
- export declare function formatInterventionMemory(memory: InterventionMemory | undefined): {
37
- hasData: boolean;
38
- summary: string;
39
- topInterventions: Array<{
40
- type: InterventionType;
41
- name: string;
42
- icon: string;
43
- count: number;
44
- }>;
45
- patternRecommendations: Array<{
46
- pattern: string;
47
- interventions: string[];
48
- }>;
49
- avgTimeToIntervene: number;
50
- totalInterventions: number;
51
- };
52
- /**
53
- * Get all available intervention types
54
- */
55
- export declare function getAllInterventionTypes(): Array<{
56
- type: InterventionType;
57
- name: string;
58
- icon: string;
59
- description: string;
60
- }>;
61
- //# sourceMappingURL=intervention-memory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"intervention-memory.d.ts","sourceRoot":"","sources":["../../src/gamification/intervention-memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAMjB,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACpC,gBAAgB,EAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAqCpD,CAAC;AAEF;;GAEG;AACH,wBAAgB,+BAA+B,IAAI,kBAAkB,CAUpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACtC,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAC7C,kBAAkB,CAiBpB;AAuDD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAEzE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAElE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACtC,OAAO,EAAE,MAAM,GACd,gBAAgB,GAAG,IAAI,CA2BzB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GAAG;IAChF,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,KAAK,CAAC;QACtB,IAAI,EAAE,gBAAgB,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,sBAAsB,EAAE,KAAK,CAAC;QAC5B,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC,CAAC;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAgDA;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,KAAK,CAAC;IAC/C,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAKD"}
@@ -1,229 +0,0 @@
1
- "use strict";
2
- /**
3
- * Intervention Memory - Track what breaks your spirals
4
- *
5
- * This module stores and aggregates intervention data to help users
6
- * identify what techniques work best for breaking their debug spirals.
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.INTERVENTION_INFO = void 0;
10
- exports.createInitialInterventionMemory = createInitialInterventionMemory;
11
- exports.recordIntervention = recordIntervention;
12
- exports.getInterventionDisplayName = getInterventionDisplayName;
13
- exports.getInterventionIcon = getInterventionIcon;
14
- exports.getRecommendedIntervention = getRecommendedIntervention;
15
- exports.formatInterventionMemory = formatInterventionMemory;
16
- exports.getAllInterventionTypes = getAllInterventionTypes;
17
- const MAX_RECORDS = 100;
18
- const INTERVENTION_MEMORY_VERSION = '1.0.0';
19
- // Intervention type metadata
20
- exports.INTERVENTION_INFO = {
21
- TRACER_TEST: {
22
- name: 'Tracer Test',
23
- icon: '🧪',
24
- description: 'Wrote a test to validate assumptions',
25
- },
26
- BREAK: {
27
- name: 'Take a Break',
28
- icon: '☕',
29
- description: 'Stepped away to clear your head',
30
- },
31
- DOCS: {
32
- name: 'Read Docs',
33
- icon: '📚',
34
- description: 'Consulted documentation',
35
- },
36
- REFACTOR: {
37
- name: 'Refactor',
38
- icon: '🔄',
39
- description: 'Changed approach or architecture',
40
- },
41
- HELP: {
42
- name: 'Ask for Help',
43
- icon: '🤝',
44
- description: 'Asked a human or AI for assistance',
45
- },
46
- ROLLBACK: {
47
- name: 'Rollback',
48
- icon: '⏪',
49
- description: 'Reverted to a known good state',
50
- },
51
- OTHER: {
52
- name: 'Other',
53
- icon: '💡',
54
- description: 'Custom intervention',
55
- },
56
- };
57
- /**
58
- * Create initial empty intervention memory
59
- */
60
- function createInitialInterventionMemory() {
61
- return {
62
- version: INTERVENTION_MEMORY_VERSION,
63
- records: [],
64
- typeCounts: {},
65
- effectiveByPattern: {},
66
- topInterventions: [],
67
- avgTimeToIntervene: 0,
68
- totalInterventions: 0,
69
- };
70
- }
71
- /**
72
- * Record a new intervention and recompute aggregates
73
- */
74
- function recordIntervention(memory, intervention) {
75
- const current = memory || createInitialInterventionMemory();
76
- const newRecord = {
77
- ...intervention,
78
- date: new Date().toISOString().split('T')[0],
79
- };
80
- // Add to records (keep last MAX_RECORDS)
81
- const allRecords = [...current.records, newRecord];
82
- const trimmedRecords = allRecords.slice(-MAX_RECORDS);
83
- // Recompute all aggregates
84
- return computeAggregates({
85
- ...current,
86
- records: trimmedRecords,
87
- });
88
- }
89
- /**
90
- * Compute all aggregate statistics from records
91
- */
92
- function computeAggregates(memory) {
93
- const records = memory.records;
94
- if (records.length === 0) {
95
- return createInitialInterventionMemory();
96
- }
97
- // Count intervention types
98
- const typeCounts = {};
99
- const effectiveByPattern = {};
100
- let totalDuration = 0;
101
- for (const record of records) {
102
- // Type counts
103
- typeCounts[record.type] = (typeCounts[record.type] || 0) + 1;
104
- // Track which interventions work for which patterns
105
- if (record.spiralPattern) {
106
- if (!effectiveByPattern[record.spiralPattern]) {
107
- effectiveByPattern[record.spiralPattern] = [];
108
- }
109
- if (!effectiveByPattern[record.spiralPattern].includes(record.type)) {
110
- effectiveByPattern[record.spiralPattern].push(record.type);
111
- }
112
- }
113
- totalDuration += record.spiralDuration;
114
- }
115
- // Get top 3 intervention types by frequency
116
- const topInterventions = Object.entries(typeCounts)
117
- .sort((a, b) => b[1] - a[1])
118
- .slice(0, 3)
119
- .map(([type]) => type);
120
- // Average time to intervene
121
- const avgTimeToIntervene = records.length > 0 ? Math.round(totalDuration / records.length) : 0;
122
- return {
123
- version: INTERVENTION_MEMORY_VERSION,
124
- records,
125
- typeCounts,
126
- effectiveByPattern,
127
- topInterventions,
128
- avgTimeToIntervene,
129
- totalInterventions: records.length,
130
- };
131
- }
132
- /**
133
- * Get intervention display name
134
- */
135
- function getInterventionDisplayName(type) {
136
- return exports.INTERVENTION_INFO[type]?.name || type;
137
- }
138
- /**
139
- * Get intervention icon
140
- */
141
- function getInterventionIcon(type) {
142
- return exports.INTERVENTION_INFO[type]?.icon || '💡';
143
- }
144
- /**
145
- * Get recommended intervention for a pattern based on history
146
- */
147
- function getRecommendedIntervention(memory, pattern) {
148
- if (!memory || memory.records.length === 0) {
149
- return null;
150
- }
151
- // Check pattern-specific interventions first
152
- const patternInterventions = memory.effectiveByPattern[pattern];
153
- if (patternInterventions && patternInterventions.length > 0) {
154
- // Return the most used intervention for this pattern
155
- const counts = {};
156
- for (const record of memory.records) {
157
- if (record.spiralPattern === pattern) {
158
- counts[record.type] = (counts[record.type] || 0) + 1;
159
- }
160
- }
161
- const sorted = Object.entries(counts).sort((a, b) => b[1] - a[1]);
162
- if (sorted.length > 0) {
163
- return sorted[0][0];
164
- }
165
- }
166
- // Fall back to overall most effective intervention
167
- if (memory.topInterventions.length > 0) {
168
- return memory.topInterventions[0];
169
- }
170
- return null;
171
- }
172
- /**
173
- * Format intervention memory for display
174
- */
175
- function formatInterventionMemory(memory) {
176
- if (!memory || memory.records.length === 0) {
177
- return {
178
- hasData: false,
179
- summary: 'No interventions recorded yet',
180
- topInterventions: [],
181
- patternRecommendations: [],
182
- avgTimeToIntervene: 0,
183
- totalInterventions: 0,
184
- };
185
- }
186
- const topInterventions = memory.topInterventions.map((type) => ({
187
- type: type,
188
- name: getInterventionDisplayName(type),
189
- icon: getInterventionIcon(type),
190
- count: memory.typeCounts[type] || 0,
191
- }));
192
- const patternRecommendations = Object.entries(memory.effectiveByPattern)
193
- .slice(0, 3)
194
- .map(([pattern, interventions]) => ({
195
- pattern,
196
- interventions: interventions.map((i) => getInterventionDisplayName(i)),
197
- }));
198
- // Generate summary
199
- let summary;
200
- if (memory.totalInterventions === 1) {
201
- summary = '1 intervention recorded';
202
- }
203
- else if (topInterventions.length > 0) {
204
- const top = topInterventions[0];
205
- const pct = Math.round((top.count / memory.totalInterventions) * 100);
206
- summary = `${memory.totalInterventions} interventions - ${top.name} is your go-to (${pct}%)`;
207
- }
208
- else {
209
- summary = `${memory.totalInterventions} interventions recorded`;
210
- }
211
- return {
212
- hasData: true,
213
- summary,
214
- topInterventions,
215
- patternRecommendations,
216
- avgTimeToIntervene: memory.avgTimeToIntervene,
217
- totalInterventions: memory.totalInterventions,
218
- };
219
- }
220
- /**
221
- * Get all available intervention types
222
- */
223
- function getAllInterventionTypes() {
224
- return Object.keys(exports.INTERVENTION_INFO).map((type) => ({
225
- type,
226
- ...exports.INTERVENTION_INFO[type],
227
- }));
228
- }
229
- //# sourceMappingURL=intervention-memory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"intervention-memory.js","sourceRoot":"","sources":["../../src/gamification/intervention-memory.ts"],"names":[],"mappings":"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"}
@@ -1,49 +0,0 @@
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
@@ -1 +0,0 @@
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"}