@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,14 +1,8 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createInsightsCommand = createInsightsCommand;
7
- const commander_1 = require("commander");
8
- const chalk_1 = __importDefault(require("chalk"));
9
- const spiral_history_1 = require("../storage/spiral-history");
10
- function createInsightsCommand() {
11
- const cmd = new commander_1.Command('insights')
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { getPatternStats, getPatternDisplayName, getResolutionDisplayName, readSpiralHistory, } from '../storage/spiral-history.js';
4
+ export function createInsightsCommand() {
5
+ const cmd = new Command('insights')
12
6
  .description('Show your spiral patterns and what works for you')
13
7
  .option('-d, --days <number>', 'Days to analyze (default: 30)', '30')
14
8
  .option('-f, --format <type>', 'Output format: terminal, json', 'terminal')
@@ -20,15 +14,15 @@ function createInsightsCommand() {
20
14
  async function runInsights(options) {
21
15
  const days = parseInt(options.days, 10) || 30;
22
16
  const format = options.format;
23
- const stats = (0, spiral_history_1.getPatternStats)(days);
24
- const allHistory = (0, spiral_history_1.readSpiralHistory)();
17
+ const stats = getPatternStats(days);
18
+ const allHistory = readSpiralHistory();
25
19
  if (format === 'json') {
26
20
  console.log(JSON.stringify({
27
21
  period_days: days,
28
22
  total_spirals: allHistory.length,
29
23
  patterns: stats.map(s => ({
30
24
  pattern: s.pattern,
31
- display_name: (0, spiral_history_1.getPatternDisplayName)(s.pattern),
25
+ display_name: getPatternDisplayName(s.pattern),
32
26
  times: s.times,
33
27
  avg_duration_min: s.avgDuration,
34
28
  best_fix: s.bestFix,
@@ -39,82 +33,82 @@ async function runInsights(options) {
39
33
  }
40
34
  // Terminal output
41
35
  console.log('');
42
- console.log(chalk_1.default.bold.cyan('═'.repeat(64)));
43
- console.log(chalk_1.default.bold.cyan(' YOUR SPIRAL PATTERNS'));
44
- console.log(chalk_1.default.bold.cyan('═'.repeat(64)));
36
+ console.log(chalk.bold.cyan('═'.repeat(64)));
37
+ console.log(chalk.bold.cyan(' YOUR SPIRAL PATTERNS'));
38
+ console.log(chalk.bold.cyan('═'.repeat(64)));
45
39
  console.log('');
46
40
  if (stats.length === 0) {
47
- console.log(chalk_1.default.gray(' No spirals recorded in the last ' + days + ' days.'));
48
- console.log(chalk_1.default.gray(' Run vibe-check analyze or session end to start tracking.'));
41
+ console.log(chalk.gray(' No spirals recorded in the last ' + days + ' days.'));
42
+ console.log(chalk.gray(' Run vibe-check analyze or session end to start tracking.'));
49
43
  console.log('');
50
44
  return;
51
45
  }
52
46
  // Summary stats
53
47
  const totalSpirals = stats.reduce((sum, s) => sum + s.times, 0);
54
48
  const avgDuration = stats.reduce((sum, s) => sum + s.avgDuration * s.times, 0) / totalSpirals;
55
- console.log(chalk_1.default.white(` Period: Last ${days} days`));
56
- console.log(chalk_1.default.white(` Total spirals: ${totalSpirals}`));
57
- console.log(chalk_1.default.white(` Avg duration: ${Math.round(avgDuration)} min`));
49
+ console.log(chalk.white(` Period: Last ${days} days`));
50
+ console.log(chalk.white(` Total spirals: ${totalSpirals}`));
51
+ console.log(chalk.white(` Avg duration: ${Math.round(avgDuration)} min`));
58
52
  console.log('');
59
53
  // Pattern breakdown
60
- console.log(chalk_1.default.bold.white(' PATTERNS BY FREQUENCY'));
54
+ console.log(chalk.bold.white(' PATTERNS BY FREQUENCY'));
61
55
  console.log('');
62
56
  for (const stat of stats) {
63
- const patternName = (0, spiral_history_1.getPatternDisplayName)(stat.pattern);
57
+ const patternName = getPatternDisplayName(stat.pattern);
64
58
  const bar = '█'.repeat(Math.min(stat.times * 2, 20));
65
59
  const fixText = stat.bestFix
66
- ? (0, spiral_history_1.getResolutionDisplayName)(stat.bestFix).toLowerCase()
60
+ ? getResolutionDisplayName(stat.bestFix).toLowerCase()
67
61
  : 'no resolution data';
68
- console.log(chalk_1.default.yellow(` ${patternName}`));
69
- console.log(` ${chalk_1.default.cyan(bar)} ${stat.times}x, avg ${stat.avgDuration} min`);
70
- console.log(chalk_1.default.gray(` Best fix: ${fixText}`));
71
- console.log(chalk_1.default.gray(` Components: ${stat.components.slice(0, 3).join(', ')}${stat.components.length > 3 ? '...' : ''}`));
62
+ console.log(chalk.yellow(` ${patternName}`));
63
+ console.log(` ${chalk.cyan(bar)} ${stat.times}x, avg ${stat.avgDuration} min`);
64
+ console.log(chalk.gray(` Best fix: ${fixText}`));
65
+ console.log(chalk.gray(` Components: ${stat.components.slice(0, 3).join(', ')}${stat.components.length > 3 ? '...' : ''}`));
72
66
  console.log('');
73
67
  }
74
68
  // Top trigger identification
75
69
  if (stats.length > 0) {
76
70
  const topPattern = stats[0];
77
- const topPatternName = (0, spiral_history_1.getPatternDisplayName)(topPattern.pattern);
71
+ const topPatternName = getPatternDisplayName(topPattern.pattern);
78
72
  const topComponents = topPattern.components.slice(0, 2).join(', ');
79
- console.log(chalk_1.default.bold.white(' TOP TRIGGER'));
73
+ console.log(chalk.bold.white(' TOP TRIGGER'));
80
74
  console.log('');
81
- console.log(chalk_1.default.yellow(` ${topPatternName} in ${topComponents}`));
75
+ console.log(chalk.yellow(` ${topPatternName} in ${topComponents}`));
82
76
  console.log('');
83
77
  // Generate recommendation
84
78
  if (topPattern.bestFix) {
85
- const fixName = (0, spiral_history_1.getResolutionDisplayName)(topPattern.bestFix).toLowerCase();
86
- console.log(chalk_1.default.bold.cyan(' RECOMMENDATION'));
79
+ const fixName = getResolutionDisplayName(topPattern.bestFix).toLowerCase();
80
+ console.log(chalk.bold.cyan(' RECOMMENDATION'));
87
81
  console.log('');
88
- console.log(chalk_1.default.white(` Your go-to fix for ${topPatternName} is ${fixName}.`));
82
+ console.log(chalk.white(` Your go-to fix for ${topPatternName} is ${fixName}.`));
89
83
  // Specific recommendations by fix type
90
84
  switch (topPattern.bestFix) {
91
85
  case 'TEST':
92
- console.log(chalk_1.default.gray(` Consider adding a tracer test for ${topComponents} before starting.`));
86
+ console.log(chalk.gray(` Consider adding a tracer test for ${topComponents} before starting.`));
93
87
  break;
94
88
  case 'BREAK':
95
- console.log(chalk_1.default.gray(` Set a timer to take breaks when working on ${topComponents}.`));
89
+ console.log(chalk.gray(` Set a timer to take breaks when working on ${topComponents}.`));
96
90
  break;
97
91
  case 'DOCS':
98
- console.log(chalk_1.default.gray(` Bookmark the docs for ${topComponents} for quick reference.`));
92
+ console.log(chalk.gray(` Bookmark the docs for ${topComponents} for quick reference.`));
99
93
  break;
100
94
  case 'HELP':
101
- console.log(chalk_1.default.gray(` Consider pairing on ${topComponents} tasks.`));
95
+ console.log(chalk.gray(` Consider pairing on ${topComponents} tasks.`));
102
96
  break;
103
97
  case 'ROLLBACK':
104
- console.log(chalk_1.default.gray(` Make smaller commits when working on ${topComponents}.`));
98
+ console.log(chalk.gray(` Make smaller commits when working on ${topComponents}.`));
105
99
  break;
106
100
  }
107
101
  }
108
102
  else {
109
- console.log(chalk_1.default.bold.cyan(' RECOMMENDATION'));
103
+ console.log(chalk.bold.cyan(' RECOMMENDATION'));
110
104
  console.log('');
111
- console.log(chalk_1.default.white(` No resolution data yet for ${topPatternName}.`));
112
- console.log(chalk_1.default.gray(` After your next spiral, try: test, break, docs, or ask for help.`));
105
+ console.log(chalk.white(` No resolution data yet for ${topPatternName}.`));
106
+ console.log(chalk.gray(` After your next spiral, try: test, break, docs, or ask for help.`));
113
107
  }
114
108
  console.log('');
115
109
  }
116
- console.log(chalk_1.default.cyan('═'.repeat(64)));
117
- console.log(chalk_1.default.gray(` Run with --days 90 for longer history, --format json for export`));
110
+ console.log(chalk.cyan('═'.repeat(64)));
111
+ console.log(chalk.gray(` Run with --days 90 for longer history, --format json for export`));
118
112
  console.log('');
119
113
  }
120
114
  //# sourceMappingURL=insights.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"insights.js","sourceRoot":"","sources":["../../src/commands/insights.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"insights.js","sourceRoot":"","sources":["../../src/commands/insights.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Modularity Command
3
+ *
4
+ * Analyze code modularity with pattern-aware scoring.
5
+ * Goes beyond simple LOC counting to assess whether large files
6
+ * are well-organized or problematic.
7
+ *
8
+ * Usage:
9
+ * vibe-check modularity # Analyze current directory
10
+ * vibe-check modularity -r /path/to/repo # Analyze specific repo
11
+ * vibe-check modularity --all # Include small files too
12
+ * vibe-check modularity --pattern store # Filter to specific pattern
13
+ * vibe-check modularity -f json # JSON output
14
+ */
15
+ import { Command } from 'commander';
16
+ export interface ModularityCommandOptions {
17
+ repo: string;
18
+ format: 'terminal' | 'json';
19
+ verbose: boolean;
20
+ all: boolean;
21
+ minLines: number;
22
+ pattern?: string;
23
+ top: number;
24
+ }
25
+ export declare function createModularityCommand(): Command;
26
+ export declare function runModularity(options: ModularityCommandOptions): Promise<void>;
27
+ //# sourceMappingURL=modularity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modularity.d.ts","sourceRoot":"","sources":["../../src/commands/modularity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,uBAAuB,IAAI,OAAO,CAejD;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpF"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Modularity Command
3
+ *
4
+ * Analyze code modularity with pattern-aware scoring.
5
+ * Goes beyond simple LOC counting to assess whether large files
6
+ * are well-organized or problematic.
7
+ *
8
+ * Usage:
9
+ * vibe-check modularity # Analyze current directory
10
+ * vibe-check modularity -r /path/to/repo # Analyze specific repo
11
+ * vibe-check modularity --all # Include small files too
12
+ * vibe-check modularity --pattern store # Filter to specific pattern
13
+ * vibe-check modularity -f json # JSON output
14
+ */
15
+ import { Command } from 'commander';
16
+ import chalk from 'chalk';
17
+ import * as path from 'path';
18
+ import { analyzeModularity, } from '../analyzers/modularity.js';
19
+ export function createModularityCommand() {
20
+ const cmd = new Command('modularity')
21
+ .description('Analyze code modularity with pattern-aware scoring')
22
+ .option('-r, --repo <path>', 'Repository path', process.cwd())
23
+ .option('-f, --format <type>', 'Output format: terminal, json', 'terminal')
24
+ .option('-v, --verbose', 'Show verbose output with details', false)
25
+ .option('-a, --all', 'Include all files (not just large ones)', false)
26
+ .option('-m, --min-lines <n>', 'Minimum lines to analyze', '100')
27
+ .option('-p, --pattern <type>', 'Filter by pattern: controller, store, routes, types, etc.')
28
+ .option('-t, --top <n>', 'Show top N files (default: 10)', '10')
29
+ .action(async (options) => {
30
+ await runModularity(options);
31
+ });
32
+ return cmd;
33
+ }
34
+ export async function runModularity(options) {
35
+ const rootDir = path.resolve(options.repo);
36
+ const minLines = parseInt(options.minLines, 10) || 100;
37
+ const top = parseInt(options.top, 10) || 10;
38
+ const analysisOptions = {
39
+ minLines,
40
+ includeAll: options.all,
41
+ patterns: options.pattern ? [options.pattern] : undefined,
42
+ };
43
+ try {
44
+ const result = analyzeModularity(rootDir, analysisOptions);
45
+ if (options.format === 'json') {
46
+ console.log(JSON.stringify(result, null, 2));
47
+ return;
48
+ }
49
+ // Terminal output
50
+ printTerminalOutput(result, rootDir, options.verbose, top);
51
+ }
52
+ catch (error) {
53
+ if (error instanceof Error) {
54
+ console.error(chalk.red(`Error: ${error.message}`));
55
+ }
56
+ process.exit(1);
57
+ }
58
+ }
59
+ function printTerminalOutput(result, rootDir, verbose, top) {
60
+ console.log('');
61
+ console.log(chalk.bold.cyan('📐 Modularity Analysis'));
62
+ console.log(chalk.gray('─'.repeat(60)));
63
+ console.log('');
64
+ // Summary stats
65
+ const { summary } = result;
66
+ console.log(`Analyzed ${chalk.white(summary.totalFiles)} files ` +
67
+ `(${chalk.white(summary.totalLines.toLocaleString())} lines)`);
68
+ console.log(`Average modularity score: ${formatScore(summary.avgScore)}`);
69
+ console.log('');
70
+ // Distribution
71
+ console.log(chalk.bold('Score Distribution:'));
72
+ const dist = summary.distribution;
73
+ const total = dist.elite + dist.good + dist.acceptable + dist.needsWork + dist.poor;
74
+ const bar = (count, colorFn) => {
75
+ const pct = total > 0 ? Math.round((count / total) * 100) : 0;
76
+ const width = Math.round(pct / 5);
77
+ return colorFn('█'.repeat(width)) + chalk.gray('░'.repeat(20 - width)) + ` ${pct}%`;
78
+ };
79
+ console.log(` Elite (9-10): ${bar(dist.elite, (s) => chalk.green(s))}`);
80
+ console.log(` Good (7-8): ${bar(dist.good, (s) => chalk.blue(s))}`);
81
+ console.log(` Acceptable (5-6): ${bar(dist.acceptable, (s) => chalk.yellow(s))}`);
82
+ console.log(` Needs Work (3-4): ${bar(dist.needsWork, (s) => chalk.hex('#FFA500')(s))}`);
83
+ console.log(` Poor (0-2): ${bar(dist.poor, (s) => chalk.red(s))}`);
84
+ console.log('');
85
+ // Files needing attention (worst scores first)
86
+ const needsAttention = result.files.filter(f => f.score < 7);
87
+ if (needsAttention.length > 0) {
88
+ console.log(chalk.bold.yellow(`⚠️ Files Needing Attention (${needsAttention.length}):`));
89
+ console.log('');
90
+ needsAttention.slice(0, top).forEach(file => {
91
+ printFileResult(file, verbose);
92
+ });
93
+ if (needsAttention.length > top) {
94
+ console.log(chalk.gray(` ...and ${needsAttention.length - top} more`));
95
+ }
96
+ console.log('');
97
+ }
98
+ else {
99
+ console.log(chalk.green('✅ All analyzed files have good modularity!'));
100
+ console.log('');
101
+ }
102
+ // Largest files (for context)
103
+ if (verbose && summary.largestFiles.length > 0) {
104
+ console.log(chalk.bold('📊 Largest Files:'));
105
+ summary.largestFiles.forEach(f => {
106
+ console.log(` ${chalk.white(f.file)}: ` +
107
+ `${chalk.cyan(f.lines + ' lines')} ` +
108
+ `(score: ${formatScore(f.score)})`);
109
+ });
110
+ console.log('');
111
+ }
112
+ // Exempted files summary
113
+ if (verbose && result.exempted.length > 0) {
114
+ console.log(chalk.gray(`ℹ️ ${result.exempted.length} files exempted (tests, generated)`));
115
+ console.log('');
116
+ }
117
+ // Overall verdict
118
+ printVerdict(summary.avgScore, needsAttention.length);
119
+ }
120
+ function printFileResult(file, verbose) {
121
+ const scoreStr = getScoreStr(file.score);
122
+ const patternLabel = file.pattern ? chalk.gray(`[${file.pattern}]`) : '';
123
+ console.log(` ${scoreStr} ` +
124
+ `${chalk.white(file.file)} ` +
125
+ `${chalk.gray(file.lines + ' lines')} ` +
126
+ patternLabel);
127
+ if (file.flags.length > 0) {
128
+ const flagStr = file.flags.map(f => chalk.dim(formatFlag(f))).join(', ');
129
+ console.log(` ${flagStr}`);
130
+ }
131
+ if (verbose) {
132
+ const d = file.details;
133
+ console.log(chalk.gray(` sections: ${d.sectionCount}, `) +
134
+ chalk.gray(`exports: ${d.exportCount}, `) +
135
+ chalk.gray(`imports: ${d.importCount}`));
136
+ }
137
+ }
138
+ function formatFlag(flag) {
139
+ const labels = {
140
+ 'no-single-responsibility': '⚠ multiple responsibilities',
141
+ 'no-internal-structure': '⚠ no sections/organization',
142
+ 'high-coupling': '⚠ high coupling (many imports)',
143
+ 'low-cohesion': '⚠ low cohesion (bloated API)',
144
+ 'missing-tests': '⚠ missing tests',
145
+ 'god-class': '⚠ god class',
146
+ 'utility-grab-bag': '⚠ utility grab-bag',
147
+ };
148
+ return labels[flag] || flag;
149
+ }
150
+ function formatScore(score) {
151
+ return getScoreStr(score);
152
+ }
153
+ function getScoreStr(score) {
154
+ const text = `${score}/10`;
155
+ if (score >= 9)
156
+ return chalk.green(text);
157
+ if (score >= 7)
158
+ return chalk.blue(text);
159
+ if (score >= 5)
160
+ return chalk.yellow(text);
161
+ if (score >= 3)
162
+ return chalk.hex('#FFA500')(text);
163
+ return chalk.red(text);
164
+ }
165
+ function printVerdict(avgScore, problemCount) {
166
+ console.log(chalk.gray('─'.repeat(60)));
167
+ if (avgScore >= 8 && problemCount === 0) {
168
+ console.log(chalk.green.bold('✨ Excellent modularity! Your codebase is well-organized.'));
169
+ }
170
+ else if (avgScore >= 7) {
171
+ console.log(chalk.blue.bold('👍 Good modularity. Minor improvements possible.'));
172
+ }
173
+ else if (avgScore >= 5) {
174
+ console.log(chalk.yellow.bold('⚠️ Acceptable modularity. Consider refactoring flagged files.'));
175
+ }
176
+ else {
177
+ console.log(chalk.red.bold('🚨 Modularity needs attention. Several files require refactoring.'));
178
+ }
179
+ console.log('');
180
+ console.log(chalk.gray('Tip: Use --verbose for detailed analysis, --pattern to filter'));
181
+ }
182
+ //# sourceMappingURL=modularity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modularity.js","sourceRoot":"","sources":["../../src/commands/modularity.ts"],"names":[],"mappings":"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"}
@@ -1,46 +1,7 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.createPipelineCommand = createPipelineCommand;
40
- const commander_1 = require("commander");
41
- const chalk_1 = __importDefault(require("chalk"));
42
- const fs = __importStar(require("fs"));
43
- const path = __importStar(require("path"));
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
44
5
  const GATE_CHECKS = [
45
6
  { name: 'Type checking', patterns: ['type-check', 'tsc', 'typescript', 'mypy', 'pyright'] },
46
7
  { name: 'Linting', patterns: ['lint', 'eslint', 'prettier', 'ruff', 'flake8', 'pylint', 'golangci-lint'] },
@@ -49,8 +10,8 @@ const GATE_CHECKS = [
49
10
  { name: 'Security scan', patterns: ['security', 'snyk', 'dependabot', 'trivy', 'codeql'] },
50
11
  { name: 'Build verification', patterns: ['build', 'compile', 'next build', 'vite build'] },
51
12
  ];
52
- function createPipelineCommand() {
53
- const cmd = new commander_1.Command('pipeline')
13
+ export function createPipelineCommand() {
14
+ const cmd = new Command('pipeline')
54
15
  .description('Audit CI/CD pipeline for deployment safety')
55
16
  .option('-r, --repo <path>', 'Repository path', process.cwd())
56
17
  .option('-f, --format <type>', 'Output format: terminal, json', 'terminal')
@@ -75,15 +36,15 @@ async function runPipelineAudit(options) {
75
36
  }
76
37
  // Terminal output
77
38
  console.log('');
78
- console.log(chalk_1.default.bold.cyan('═'.repeat(64)));
79
- console.log(chalk_1.default.bold.cyan(' PIPELINE AUDIT'));
80
- console.log(chalk_1.default.bold.cyan('═'.repeat(64)));
39
+ console.log(chalk.bold.cyan('═'.repeat(64)));
40
+ console.log(chalk.bold.cyan(' PIPELINE AUDIT'));
41
+ console.log(chalk.bold.cyan('═'.repeat(64)));
81
42
  console.log('');
82
43
  if (configs.length === 0) {
83
- console.log(chalk_1.default.red.bold(' ⚠️ NO CI/CD PIPELINE DETECTED'));
44
+ console.log(chalk.red.bold(' ⚠️ NO CI/CD PIPELINE DETECTED'));
84
45
  console.log('');
85
- console.log(chalk_1.default.gray(' Your deployments have no safety gates.'));
86
- console.log(chalk_1.default.gray(' Broken code goes straight to production.'));
46
+ console.log(chalk.gray(' Your deployments have no safety gates.'));
47
+ console.log(chalk.gray(' Broken code goes straight to production.'));
87
48
  console.log('');
88
49
  printNoPipelineSuggestions(repoPath, options.fix);
89
50
  return;
@@ -95,11 +56,11 @@ async function runPipelineAudit(options) {
95
56
  const avgScore = Math.round(configs.reduce((sum, c) => sum + c.score, 0) / configs.length);
96
57
  const rating = getScoreRating(avgScore);
97
58
  console.log('');
98
- console.log(chalk_1.default.bold.white(' OVERALL PIPELINE HEALTH'));
59
+ console.log(chalk.bold.white(' OVERALL PIPELINE HEALTH'));
99
60
  console.log('');
100
61
  console.log(` Score: ${colorScore(avgScore)} ${rating}`);
101
62
  console.log('');
102
- console.log(chalk_1.default.cyan('═'.repeat(64)));
63
+ console.log(chalk.cyan('═'.repeat(64)));
103
64
  console.log('');
104
65
  }
105
66
  function detectPipelines(repoPath) {
@@ -370,53 +331,53 @@ function calculateScore(config) {
370
331
  }
371
332
  function getScoreRating(score) {
372
333
  if (score >= 80)
373
- return chalk_1.default.green.bold('SOLID');
334
+ return chalk.green.bold('SOLID');
374
335
  if (score >= 60)
375
- return chalk_1.default.yellow.bold('DECENT');
336
+ return chalk.yellow.bold('DECENT');
376
337
  if (score >= 40)
377
- return chalk_1.default.yellow('WEAK');
378
- return chalk_1.default.red.bold('YOLO');
338
+ return chalk.yellow('WEAK');
339
+ return chalk.red.bold('YOLO');
379
340
  }
380
341
  function colorScore(score) {
381
342
  if (score >= 80)
382
- return chalk_1.default.green.bold(`${score}/100`);
343
+ return chalk.green.bold(`${score}/100`);
383
344
  if (score >= 60)
384
- return chalk_1.default.yellow.bold(`${score}/100`);
345
+ return chalk.yellow.bold(`${score}/100`);
385
346
  if (score >= 40)
386
- return chalk_1.default.yellow(`${score}/100`);
387
- return chalk_1.default.red.bold(`${score}/100`);
347
+ return chalk.yellow(`${score}/100`);
348
+ return chalk.red.bold(`${score}/100`);
388
349
  }
389
350
  function printPipelineConfig(config, showFix) {
390
351
  const typeLabel = config.type.toUpperCase();
391
- const typeColor = config.type === 'github' ? chalk_1.default.white : chalk_1.default.gray;
352
+ const typeColor = config.type === 'github' ? chalk.white : chalk.gray;
392
353
  console.log(typeColor(` ${typeLabel}: ${config.file}`));
393
354
  console.log('');
394
355
  // Gates
395
- console.log(chalk_1.default.bold.white(' Gates:'));
356
+ console.log(chalk.bold.white(' Gates:'));
396
357
  for (const gate of config.gates) {
397
358
  const status = gate.present
398
- ? (gate.blocking ? chalk_1.default.green('✓ blocking') : chalk_1.default.yellow('✓ non-blocking'))
399
- : chalk_1.default.red('✗ missing');
359
+ ? (gate.blocking ? chalk.green('✓ blocking') : chalk.yellow('✓ non-blocking'))
360
+ : chalk.red('✗ missing');
400
361
  console.log(` ${gate.name}: ${status}`);
401
362
  }
402
363
  console.log('');
403
364
  // Triggers
404
- console.log(chalk_1.default.bold.white(' Triggers:'));
365
+ console.log(chalk.bold.white(' Triggers:'));
405
366
  for (const trigger of config.triggers) {
406
- const triggerColor = trigger === 'pull_request' ? chalk_1.default.green : chalk_1.default.yellow;
367
+ const triggerColor = trigger === 'pull_request' ? chalk.green : chalk.yellow;
407
368
  console.log(` ${triggerColor(trigger)}`);
408
369
  }
409
370
  console.log('');
410
371
  // Issues
411
372
  if (config.issues.length > 0) {
412
- console.log(chalk_1.default.bold.white(' Issues:'));
373
+ console.log(chalk.bold.white(' Issues:'));
413
374
  for (const issue of config.issues) {
414
- const severityColor = issue.severity === 'critical' ? chalk_1.default.red
415
- : issue.severity === 'warning' ? chalk_1.default.yellow
416
- : chalk_1.default.gray;
375
+ const severityColor = issue.severity === 'critical' ? chalk.red
376
+ : issue.severity === 'warning' ? chalk.yellow
377
+ : chalk.gray;
417
378
  console.log(` ${severityColor(`[${issue.severity.toUpperCase()}]`)} ${issue.message}`);
418
379
  if (showFix && issue.fix) {
419
- console.log(chalk_1.default.gray(` Fix: ${issue.fix}`));
380
+ console.log(chalk.gray(` Fix: ${issue.fix}`));
420
381
  }
421
382
  }
422
383
  console.log('');
@@ -443,13 +404,13 @@ function printNoPipelineSuggestions(repoPath, showFix) {
443
404
  }
444
405
  catch { /* ignore */ }
445
406
  }
446
- console.log(chalk_1.default.bold.white(' SUGGESTIONS:'));
407
+ console.log(chalk.bold.white(' SUGGESTIONS:'));
447
408
  console.log('');
448
409
  if (showFix) {
449
- console.log(chalk_1.default.cyan(' Create .github/workflows/ci.yml with:'));
410
+ console.log(chalk.cyan(' Create .github/workflows/ci.yml with:'));
450
411
  console.log('');
451
412
  if (projectType === 'nextjs') {
452
- console.log(chalk_1.default.gray(` name: CI
413
+ console.log(chalk.gray(` name: CI
453
414
  on: [push, pull_request]
454
415
  jobs:
455
416
  validate:
@@ -464,7 +425,7 @@ function printNoPipelineSuggestions(repoPath, showFix) {
464
425
  - run: npm run build`));
465
426
  }
466
427
  else {
467
- console.log(chalk_1.default.gray(` name: CI
428
+ console.log(chalk.gray(` name: CI
468
429
  on: [push, pull_request]
469
430
  jobs:
470
431
  test:
@@ -477,9 +438,9 @@ function printNoPipelineSuggestions(repoPath, showFix) {
477
438
  console.log('');
478
439
  }
479
440
  else {
480
- console.log(chalk_1.default.gray(' Run with --fix to see suggested workflow'));
441
+ console.log(chalk.gray(' Run with --fix to see suggested workflow'));
481
442
  }
482
- console.log(chalk_1.default.cyan('═'.repeat(64)));
443
+ console.log(chalk.cyan('═'.repeat(64)));
483
444
  console.log('');
484
445
  }
485
446
  //# sourceMappingURL=pipeline.js.map