oh-my-claude-sisyphus 3.6.0 → 3.6.1

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 (314) hide show
  1. package/commands/omc-setup.md +3 -3
  2. package/commands/release.md +1 -1
  3. package/dist/__tests__/analytics/transcript-scanner.test.js +69 -27
  4. package/dist/__tests__/analytics/transcript-scanner.test.js.map +1 -1
  5. package/dist/__tests__/installer.test.js +2 -1
  6. package/dist/__tests__/installer.test.js.map +1 -1
  7. package/dist/analytics/session-manager.d.ts +24 -0
  8. package/dist/analytics/session-manager.d.ts.map +1 -1
  9. package/dist/analytics/session-manager.js +98 -9
  10. package/dist/analytics/session-manager.js.map +1 -1
  11. package/dist/analytics/transcript-scanner.d.ts +9 -8
  12. package/dist/analytics/transcript-scanner.d.ts.map +1 -1
  13. package/dist/analytics/transcript-scanner.js +146 -16
  14. package/dist/analytics/transcript-scanner.js.map +1 -1
  15. package/dist/cli/analytics.js +0 -0
  16. package/dist/cli/index.js +0 -0
  17. package/dist/hooks/empty-message-sanitizer/__tests__/index.test.d.ts +2 -0
  18. package/dist/hooks/empty-message-sanitizer/__tests__/index.test.d.ts.map +1 -0
  19. package/dist/hooks/empty-message-sanitizer/__tests__/index.test.js +416 -0
  20. package/dist/hooks/empty-message-sanitizer/__tests__/index.test.js.map +1 -0
  21. package/dist/hooks/keyword-detector/__tests__/index.test.d.ts +2 -0
  22. package/dist/hooks/keyword-detector/__tests__/index.test.d.ts.map +1 -0
  23. package/dist/hooks/keyword-detector/__tests__/index.test.js +427 -0
  24. package/dist/hooks/keyword-detector/__tests__/index.test.js.map +1 -0
  25. package/dist/hooks/think-mode/__tests__/index.test.d.ts +2 -0
  26. package/dist/hooks/think-mode/__tests__/index.test.d.ts.map +1 -0
  27. package/dist/hooks/think-mode/__tests__/index.test.js +556 -0
  28. package/dist/hooks/think-mode/__tests__/index.test.js.map +1 -0
  29. package/dist/installer/index.d.ts.map +1 -1
  30. package/dist/installer/index.js +8 -0
  31. package/dist/installer/index.js.map +1 -1
  32. package/package.json +1 -1
  33. package/skills/omc-setup/SKILL.md +27 -3
  34. package/skills/release/SKILL.md +1 -1
  35. package/dist/__tests__/analytics/analytics-summary.test.d.ts +0 -2
  36. package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +0 -1
  37. package/dist/__tests__/analytics/analytics-summary.test.js +0 -267
  38. package/dist/__tests__/analytics/analytics-summary.test.js.map +0 -1
  39. package/dist/__tests__/analytics/cost-estimator.test.d.ts +0 -2
  40. package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +0 -1
  41. package/dist/__tests__/analytics/cost-estimator.test.js +0 -212
  42. package/dist/__tests__/analytics/cost-estimator.test.js.map +0 -1
  43. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +0 -7
  44. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +0 -1
  45. package/dist/__tests__/hooks/auto-slash-command/executor.test.js +0 -374
  46. package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +0 -1
  47. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +0 -2
  48. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +0 -1
  49. package/dist/__tests__/hud/auto-tracking.integration.test.js +0 -12
  50. package/dist/__tests__/hud/auto-tracking.integration.test.js.map +0 -1
  51. package/dist/__tests__/learned-skills/config.test.d.ts +0 -2
  52. package/dist/__tests__/learned-skills/config.test.d.ts.map +0 -1
  53. package/dist/__tests__/learned-skills/config.test.js +0 -37
  54. package/dist/__tests__/learned-skills/config.test.js.map +0 -1
  55. package/dist/__tests__/learned-skills/detector.test.d.ts +0 -2
  56. package/dist/__tests__/learned-skills/detector.test.d.ts.map +0 -1
  57. package/dist/__tests__/learned-skills/detector.test.js +0 -99
  58. package/dist/__tests__/learned-skills/detector.test.js.map +0 -1
  59. package/dist/__tests__/learned-skills/finder.test.d.ts +0 -2
  60. package/dist/__tests__/learned-skills/finder.test.d.ts.map +0 -1
  61. package/dist/__tests__/learned-skills/finder.test.js +0 -59
  62. package/dist/__tests__/learned-skills/finder.test.js.map +0 -1
  63. package/dist/__tests__/learned-skills/loader.test.d.ts +0 -2
  64. package/dist/__tests__/learned-skills/loader.test.d.ts.map +0 -1
  65. package/dist/__tests__/learned-skills/loader.test.js +0 -69
  66. package/dist/__tests__/learned-skills/loader.test.js.map +0 -1
  67. package/dist/__tests__/learned-skills/parser.test.d.ts +0 -2
  68. package/dist/__tests__/learned-skills/parser.test.d.ts.map +0 -1
  69. package/dist/__tests__/learned-skills/parser.test.js +0 -81
  70. package/dist/__tests__/learned-skills/parser.test.js.map +0 -1
  71. package/dist/__tests__/learned-skills/validator.test.d.ts +0 -2
  72. package/dist/__tests__/learned-skills/validator.test.d.ts.map +0 -1
  73. package/dist/__tests__/learned-skills/validator.test.js +0 -85
  74. package/dist/__tests__/learned-skills/validator.test.js.map +0 -1
  75. package/dist/agents/codex-agents.d.ts +0 -20
  76. package/dist/agents/codex-agents.d.ts.map +0 -1
  77. package/dist/agents/codex-agents.js +0 -36
  78. package/dist/agents/codex-agents.js.map +0 -1
  79. package/dist/agents/document-writer.d.ts +0 -11
  80. package/dist/agents/document-writer.d.ts.map +0 -1
  81. package/dist/agents/document-writer.js +0 -209
  82. package/dist/agents/document-writer.js.map +0 -1
  83. package/dist/agents/frontend-engineer.d.ts +0 -11
  84. package/dist/agents/frontend-engineer.d.ts.map +0 -1
  85. package/dist/agents/frontend-engineer.js +0 -115
  86. package/dist/agents/frontend-engineer.js.map +0 -1
  87. package/dist/agents/librarian.d.ts +0 -12
  88. package/dist/agents/librarian.d.ts.map +0 -1
  89. package/dist/agents/librarian.js +0 -103
  90. package/dist/agents/librarian.js.map +0 -1
  91. package/dist/agents/metis.d.ts +0 -12
  92. package/dist/agents/metis.d.ts.map +0 -1
  93. package/dist/agents/metis.js +0 -117
  94. package/dist/agents/metis.js.map +0 -1
  95. package/dist/agents/momus.d.ts +0 -12
  96. package/dist/agents/momus.d.ts.map +0 -1
  97. package/dist/agents/momus.js +0 -128
  98. package/dist/agents/momus.js.map +0 -1
  99. package/dist/agents/multimodal-looker.d.ts +0 -11
  100. package/dist/agents/multimodal-looker.d.ts.map +0 -1
  101. package/dist/agents/multimodal-looker.js +0 -70
  102. package/dist/agents/multimodal-looker.js.map +0 -1
  103. package/dist/agents/oracle.d.ts +0 -13
  104. package/dist/agents/oracle.d.ts.map +0 -1
  105. package/dist/agents/oracle.js +0 -191
  106. package/dist/agents/oracle.js.map +0 -1
  107. package/dist/agents/orchestrator-sisyphus.d.ts +0 -11
  108. package/dist/agents/orchestrator-sisyphus.d.ts.map +0 -1
  109. package/dist/agents/orchestrator-sisyphus.js +0 -115
  110. package/dist/agents/orchestrator-sisyphus.js.map +0 -1
  111. package/dist/agents/prometheus.d.ts +0 -12
  112. package/dist/agents/prometheus.d.ts.map +0 -1
  113. package/dist/agents/prometheus.js +0 -195
  114. package/dist/agents/prometheus.js.map +0 -1
  115. package/dist/agents/sisyphus-junior.d.ts +0 -12
  116. package/dist/agents/sisyphus-junior.d.ts.map +0 -1
  117. package/dist/agents/sisyphus-junior.js +0 -93
  118. package/dist/agents/sisyphus-junior.js.map +0 -1
  119. package/dist/cli/components/CostDashboard.d.ts +0 -15
  120. package/dist/cli/components/CostDashboard.d.ts.map +0 -1
  121. package/dist/cli/components/CostDashboard.js +0 -15
  122. package/dist/cli/components/CostDashboard.js.map +0 -1
  123. package/dist/cli/components/LiveStats.d.ts +0 -16
  124. package/dist/cli/components/LiveStats.d.ts.map +0 -1
  125. package/dist/cli/components/LiveStats.js +0 -16
  126. package/dist/cli/components/LiveStats.js.map +0 -1
  127. package/dist/cli/components/SessionBrowser.d.ts +0 -14
  128. package/dist/cli/components/SessionBrowser.d.ts.map +0 -1
  129. package/dist/cli/components/SessionBrowser.js +0 -14
  130. package/dist/cli/components/SessionBrowser.js.map +0 -1
  131. package/dist/cli/tui.d.ts +0 -21
  132. package/dist/cli/tui.d.ts.map +0 -1
  133. package/dist/cli/tui.js +0 -21
  134. package/dist/cli/tui.js.map +0 -1
  135. package/dist/hooks/autopilot/signals.d.ts +0 -20
  136. package/dist/hooks/autopilot/signals.d.ts.map +0 -1
  137. package/dist/hooks/autopilot/signals.js +0 -75
  138. package/dist/hooks/autopilot/signals.js.map +0 -1
  139. package/dist/hooks/autopilot/summary.d.ts +0 -27
  140. package/dist/hooks/autopilot/summary.d.ts.map +0 -1
  141. package/dist/hooks/autopilot/summary.js +0 -160
  142. package/dist/hooks/autopilot/summary.js.map +0 -1
  143. package/dist/hooks/autopilot/transition.d.ts +0 -39
  144. package/dist/hooks/autopilot/transition.d.ts.map +0 -1
  145. package/dist/hooks/autopilot/transition.js +0 -216
  146. package/dist/hooks/autopilot/transition.js.map +0 -1
  147. package/dist/hooks/context-window-limit-recovery/constants.d.ts +0 -28
  148. package/dist/hooks/context-window-limit-recovery/constants.d.ts.map +0 -1
  149. package/dist/hooks/context-window-limit-recovery/constants.js +0 -85
  150. package/dist/hooks/context-window-limit-recovery/constants.js.map +0 -1
  151. package/dist/hooks/context-window-limit-recovery/index.d.ts +0 -62
  152. package/dist/hooks/context-window-limit-recovery/index.d.ts.map +0 -1
  153. package/dist/hooks/context-window-limit-recovery/index.js +0 -201
  154. package/dist/hooks/context-window-limit-recovery/index.js.map +0 -1
  155. package/dist/hooks/context-window-limit-recovery/parser.d.ts +0 -31
  156. package/dist/hooks/context-window-limit-recovery/parser.d.ts.map +0 -1
  157. package/dist/hooks/context-window-limit-recovery/parser.js +0 -241
  158. package/dist/hooks/context-window-limit-recovery/parser.js.map +0 -1
  159. package/dist/hooks/context-window-limit-recovery/types.d.ts +0 -84
  160. package/dist/hooks/context-window-limit-recovery/types.d.ts.map +0 -1
  161. package/dist/hooks/context-window-limit-recovery/types.js +0 -34
  162. package/dist/hooks/context-window-limit-recovery/types.js.map +0 -1
  163. package/dist/hooks/edit-error-recovery/index.d.ts +0 -62
  164. package/dist/hooks/edit-error-recovery/index.d.ts.map +0 -1
  165. package/dist/hooks/edit-error-recovery/index.js +0 -89
  166. package/dist/hooks/edit-error-recovery/index.js.map +0 -1
  167. package/dist/hooks/learned-skills/config.d.ts +0 -53
  168. package/dist/hooks/learned-skills/config.d.ts.map +0 -1
  169. package/dist/hooks/learned-skills/config.js +0 -103
  170. package/dist/hooks/learned-skills/config.js.map +0 -1
  171. package/dist/hooks/learned-skills/constants.d.ts +0 -24
  172. package/dist/hooks/learned-skills/constants.d.ts.map +0 -1
  173. package/dist/hooks/learned-skills/constants.js +0 -26
  174. package/dist/hooks/learned-skills/constants.js.map +0 -1
  175. package/dist/hooks/learned-skills/detection-hook.d.ts +0 -39
  176. package/dist/hooks/learned-skills/detection-hook.d.ts.map +0 -1
  177. package/dist/hooks/learned-skills/detection-hook.js +0 -83
  178. package/dist/hooks/learned-skills/detection-hook.js.map +0 -1
  179. package/dist/hooks/learned-skills/detector.d.ts +0 -30
  180. package/dist/hooks/learned-skills/detector.d.ts.map +0 -1
  181. package/dist/hooks/learned-skills/detector.js +0 -150
  182. package/dist/hooks/learned-skills/detector.js.map +0 -1
  183. package/dist/hooks/learned-skills/finder.d.ts +0 -21
  184. package/dist/hooks/learned-skills/finder.d.ts.map +0 -1
  185. package/dist/hooks/learned-skills/finder.js +0 -117
  186. package/dist/hooks/learned-skills/finder.js.map +0 -1
  187. package/dist/hooks/learned-skills/index.d.ts +0 -62
  188. package/dist/hooks/learned-skills/index.d.ts.map +0 -1
  189. package/dist/hooks/learned-skills/index.js +0 -137
  190. package/dist/hooks/learned-skills/index.js.map +0 -1
  191. package/dist/hooks/learned-skills/loader.d.ts +0 -20
  192. package/dist/hooks/learned-skills/loader.d.ts.map +0 -1
  193. package/dist/hooks/learned-skills/loader.js +0 -107
  194. package/dist/hooks/learned-skills/loader.js.map +0 -1
  195. package/dist/hooks/learned-skills/parser.d.ts +0 -21
  196. package/dist/hooks/learned-skills/parser.d.ts.map +0 -1
  197. package/dist/hooks/learned-skills/parser.js +0 -190
  198. package/dist/hooks/learned-skills/parser.js.map +0 -1
  199. package/dist/hooks/learned-skills/promotion.d.ts +0 -29
  200. package/dist/hooks/learned-skills/promotion.d.ts.map +0 -1
  201. package/dist/hooks/learned-skills/promotion.js +0 -87
  202. package/dist/hooks/learned-skills/promotion.js.map +0 -1
  203. package/dist/hooks/learned-skills/types.d.ts +0 -109
  204. package/dist/hooks/learned-skills/types.d.ts.map +0 -1
  205. package/dist/hooks/learned-skills/types.js +0 -8
  206. package/dist/hooks/learned-skills/types.js.map +0 -1
  207. package/dist/hooks/learned-skills/validator.d.ts +0 -15
  208. package/dist/hooks/learned-skills/validator.d.ts.map +0 -1
  209. package/dist/hooks/learned-skills/validator.js +0 -87
  210. package/dist/hooks/learned-skills/validator.js.map +0 -1
  211. package/dist/hooks/learned-skills/writer.d.ts +0 -27
  212. package/dist/hooks/learned-skills/writer.d.ts.map +0 -1
  213. package/dist/hooks/learned-skills/writer.js +0 -126
  214. package/dist/hooks/learned-skills/writer.js.map +0 -1
  215. package/dist/hooks/mnemosyne/config.d.ts +0 -53
  216. package/dist/hooks/mnemosyne/config.d.ts.map +0 -1
  217. package/dist/hooks/mnemosyne/config.js +0 -103
  218. package/dist/hooks/mnemosyne/config.js.map +0 -1
  219. package/dist/hooks/mnemosyne/constants.d.ts +0 -24
  220. package/dist/hooks/mnemosyne/constants.d.ts.map +0 -1
  221. package/dist/hooks/mnemosyne/constants.js +0 -26
  222. package/dist/hooks/mnemosyne/constants.js.map +0 -1
  223. package/dist/hooks/mnemosyne/detection-hook.d.ts +0 -39
  224. package/dist/hooks/mnemosyne/detection-hook.d.ts.map +0 -1
  225. package/dist/hooks/mnemosyne/detection-hook.js +0 -83
  226. package/dist/hooks/mnemosyne/detection-hook.js.map +0 -1
  227. package/dist/hooks/mnemosyne/detector.d.ts +0 -30
  228. package/dist/hooks/mnemosyne/detector.d.ts.map +0 -1
  229. package/dist/hooks/mnemosyne/detector.js +0 -150
  230. package/dist/hooks/mnemosyne/detector.js.map +0 -1
  231. package/dist/hooks/mnemosyne/finder.d.ts +0 -21
  232. package/dist/hooks/mnemosyne/finder.d.ts.map +0 -1
  233. package/dist/hooks/mnemosyne/finder.js +0 -117
  234. package/dist/hooks/mnemosyne/finder.js.map +0 -1
  235. package/dist/hooks/mnemosyne/index.d.ts +0 -62
  236. package/dist/hooks/mnemosyne/index.d.ts.map +0 -1
  237. package/dist/hooks/mnemosyne/index.js +0 -137
  238. package/dist/hooks/mnemosyne/index.js.map +0 -1
  239. package/dist/hooks/mnemosyne/loader.d.ts +0 -20
  240. package/dist/hooks/mnemosyne/loader.d.ts.map +0 -1
  241. package/dist/hooks/mnemosyne/loader.js +0 -113
  242. package/dist/hooks/mnemosyne/loader.js.map +0 -1
  243. package/dist/hooks/mnemosyne/parser.d.ts +0 -21
  244. package/dist/hooks/mnemosyne/parser.d.ts.map +0 -1
  245. package/dist/hooks/mnemosyne/parser.js +0 -190
  246. package/dist/hooks/mnemosyne/parser.js.map +0 -1
  247. package/dist/hooks/mnemosyne/promotion.d.ts +0 -29
  248. package/dist/hooks/mnemosyne/promotion.d.ts.map +0 -1
  249. package/dist/hooks/mnemosyne/promotion.js +0 -87
  250. package/dist/hooks/mnemosyne/promotion.js.map +0 -1
  251. package/dist/hooks/mnemosyne/types.d.ts +0 -109
  252. package/dist/hooks/mnemosyne/types.d.ts.map +0 -1
  253. package/dist/hooks/mnemosyne/types.js +0 -8
  254. package/dist/hooks/mnemosyne/types.js.map +0 -1
  255. package/dist/hooks/mnemosyne/validator.d.ts +0 -15
  256. package/dist/hooks/mnemosyne/validator.d.ts.map +0 -1
  257. package/dist/hooks/mnemosyne/validator.js +0 -87
  258. package/dist/hooks/mnemosyne/validator.js.map +0 -1
  259. package/dist/hooks/mnemosyne/writer.d.ts +0 -27
  260. package/dist/hooks/mnemosyne/writer.d.ts.map +0 -1
  261. package/dist/hooks/mnemosyne/writer.js +0 -126
  262. package/dist/hooks/mnemosyne/writer.js.map +0 -1
  263. package/dist/hooks/ralph-loop/index.d.ts +0 -116
  264. package/dist/hooks/ralph-loop/index.d.ts.map +0 -1
  265. package/dist/hooks/ralph-loop/index.js +0 -322
  266. package/dist/hooks/ralph-loop/index.js.map +0 -1
  267. package/dist/hooks/ralph-prd/index.d.ts +0 -130
  268. package/dist/hooks/ralph-prd/index.d.ts.map +0 -1
  269. package/dist/hooks/ralph-prd/index.js +0 -310
  270. package/dist/hooks/ralph-prd/index.js.map +0 -1
  271. package/dist/hooks/ralph-progress/index.d.ts +0 -102
  272. package/dist/hooks/ralph-progress/index.d.ts.map +0 -1
  273. package/dist/hooks/ralph-progress/index.js +0 -408
  274. package/dist/hooks/ralph-progress/index.js.map +0 -1
  275. package/dist/hooks/ralph-verifier/index.d.ts +0 -72
  276. package/dist/hooks/ralph-verifier/index.d.ts.map +0 -1
  277. package/dist/hooks/ralph-verifier/index.js +0 -223
  278. package/dist/hooks/ralph-verifier/index.js.map +0 -1
  279. package/dist/hooks/session-recovery/constants.d.ts +0 -56
  280. package/dist/hooks/session-recovery/constants.d.ts.map +0 -1
  281. package/dist/hooks/session-recovery/constants.js +0 -78
  282. package/dist/hooks/session-recovery/constants.js.map +0 -1
  283. package/dist/hooks/session-recovery/index.d.ts +0 -53
  284. package/dist/hooks/session-recovery/index.d.ts.map +0 -1
  285. package/dist/hooks/session-recovery/index.js +0 -321
  286. package/dist/hooks/session-recovery/index.js.map +0 -1
  287. package/dist/hooks/session-recovery/storage.d.ts +0 -76
  288. package/dist/hooks/session-recovery/storage.d.ts.map +0 -1
  289. package/dist/hooks/session-recovery/storage.js +0 -383
  290. package/dist/hooks/session-recovery/storage.js.map +0 -1
  291. package/dist/hooks/session-recovery/types.d.ts +0 -145
  292. package/dist/hooks/session-recovery/types.d.ts.map +0 -1
  293. package/dist/hooks/session-recovery/types.js +0 -8
  294. package/dist/hooks/session-recovery/types.js.map +0 -1
  295. package/dist/hooks/sisyphus-orchestrator/constants.d.ts +0 -23
  296. package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +0 -1
  297. package/dist/hooks/sisyphus-orchestrator/constants.js +0 -142
  298. package/dist/hooks/sisyphus-orchestrator/constants.js.map +0 -1
  299. package/dist/hooks/sisyphus-orchestrator/index.d.ts +0 -113
  300. package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +0 -1
  301. package/dist/hooks/sisyphus-orchestrator/index.js +0 -309
  302. package/dist/hooks/sisyphus-orchestrator/index.js.map +0 -1
  303. package/dist/hooks/ultraqa-loop/index.d.ts +0 -94
  304. package/dist/hooks/ultraqa-loop/index.d.ts.map +0 -1
  305. package/dist/hooks/ultraqa-loop/index.js +0 -216
  306. package/dist/hooks/ultraqa-loop/index.js.map +0 -1
  307. package/dist/hooks/ultrawork-state/index.d.ts +0 -62
  308. package/dist/hooks/ultrawork-state/index.d.ts.map +0 -1
  309. package/dist/hooks/ultrawork-state/index.js +0 -208
  310. package/dist/hooks/ultrawork-state/index.js.map +0 -1
  311. package/dist/hud/sisyphus-state.d.ts +0 -31
  312. package/dist/hud/sisyphus-state.d.ts.map +0 -1
  313. package/dist/hud/sisyphus-state.js +0 -163
  314. package/dist/hud/sisyphus-state.js.map +0 -1
@@ -0,0 +1,556 @@
1
+ import { describe, it, expect, afterEach } from 'vitest';
2
+ import {
3
+ // Detector functions
4
+ removeCodeBlocks, detectThinkKeyword, extractPromptText, detectUltrathinkKeyword,
5
+ // Switcher functions
6
+ getHighVariant, isAlreadyHighVariant, getThinkingConfig, getClaudeThinkingConfig, THINKING_CONFIGS,
7
+ // State management
8
+ clearThinkModeState, getThinkModeState, isThinkModeActive, processThinkMode,
9
+ // Hook factory
10
+ createThinkModeHook,
11
+ // Simplified functions
12
+ shouldActivateThinkMode, shouldActivateUltrathink, } from '../index.js';
13
+ describe('think-mode', () => {
14
+ // Clean up state after each test
15
+ afterEach(() => {
16
+ clearThinkModeState('test-session');
17
+ clearThinkModeState('session-1');
18
+ clearThinkModeState('session-2');
19
+ });
20
+ describe('detector - removeCodeBlocks', () => {
21
+ it('should remove fenced code blocks', () => {
22
+ const text = 'Before ```code``` after';
23
+ expect(removeCodeBlocks(text)).toBe('Before after');
24
+ });
25
+ it('should remove multiline fenced code blocks', () => {
26
+ const text = `Hello
27
+ \`\`\`
28
+ think
29
+ \`\`\`
30
+ World`;
31
+ expect(removeCodeBlocks(text)).toBe(`Hello
32
+
33
+ World`);
34
+ });
35
+ it('should remove inline code', () => {
36
+ const text = 'Use `think` command';
37
+ expect(removeCodeBlocks(text)).toBe('Use command');
38
+ });
39
+ it('should handle empty input', () => {
40
+ expect(removeCodeBlocks('')).toBe('');
41
+ });
42
+ it('should return unchanged text without code', () => {
43
+ expect(removeCodeBlocks('regular text')).toBe('regular text');
44
+ });
45
+ });
46
+ describe('detector - detectThinkKeyword', () => {
47
+ describe('English keywords', () => {
48
+ it('should detect "think" keyword', () => {
49
+ expect(detectThinkKeyword('think about this')).toBe(true);
50
+ });
51
+ it('should detect "ultrathink" keyword', () => {
52
+ expect(detectThinkKeyword('ultrathink this problem')).toBe(true);
53
+ });
54
+ it('should be case insensitive', () => {
55
+ expect(detectThinkKeyword('THINK about this')).toBe(true);
56
+ expect(detectThinkKeyword('Think carefully')).toBe(true);
57
+ });
58
+ it('should not detect partial matches', () => {
59
+ // "think" should be a word boundary
60
+ expect(detectThinkKeyword('rethinking this')).toBe(false);
61
+ });
62
+ });
63
+ describe('Multilingual keywords', () => {
64
+ it('should detect Korean "생각"', () => {
65
+ expect(detectThinkKeyword('이것에 대해 생각해주세요')).toBe(true);
66
+ });
67
+ it('should detect Chinese "思考"', () => {
68
+ expect(detectThinkKeyword('请思考这个问题')).toBe(true);
69
+ });
70
+ it('should detect Japanese "考え"', () => {
71
+ expect(detectThinkKeyword('これについて考えてください')).toBe(true);
72
+ });
73
+ it('should detect Russian "думать"', () => {
74
+ expect(detectThinkKeyword('пожалуйста думай')).toBe(true);
75
+ });
76
+ it('should detect Spanish "piensa"', () => {
77
+ expect(detectThinkKeyword('piensa en esto')).toBe(true);
78
+ });
79
+ it('should detect French "penser"', () => {
80
+ expect(detectThinkKeyword('tu dois penser')).toBe(true);
81
+ });
82
+ it('should detect German "denken"', () => {
83
+ expect(detectThinkKeyword('bitte denken Sie')).toBe(true);
84
+ });
85
+ });
86
+ describe('Code block exclusion', () => {
87
+ it('should not detect keyword inside fenced code block', () => {
88
+ expect(detectThinkKeyword('```\nthink\n```')).toBe(false);
89
+ });
90
+ it('should not detect keyword inside inline code', () => {
91
+ expect(detectThinkKeyword('Use `think` command')).toBe(false);
92
+ });
93
+ it('should detect keyword outside code block', () => {
94
+ expect(detectThinkKeyword('think about ```code```')).toBe(true);
95
+ });
96
+ });
97
+ it('should return false for no keywords', () => {
98
+ expect(detectThinkKeyword('regular text here')).toBe(false);
99
+ });
100
+ it('should return false for empty input', () => {
101
+ expect(detectThinkKeyword('')).toBe(false);
102
+ });
103
+ });
104
+ describe('detector - extractPromptText', () => {
105
+ it('should extract text from text parts', () => {
106
+ const parts = [
107
+ { type: 'text', text: 'Hello' },
108
+ { type: 'text', text: ' World' },
109
+ ];
110
+ expect(extractPromptText(parts)).toBe('Hello World');
111
+ });
112
+ it('should ignore non-text parts', () => {
113
+ const parts = [
114
+ { type: 'text', text: 'Hello' },
115
+ { type: 'image' },
116
+ { type: 'text', text: 'World' },
117
+ ];
118
+ expect(extractPromptText(parts)).toBe('HelloWorld');
119
+ });
120
+ it('should handle empty parts array', () => {
121
+ expect(extractPromptText([])).toBe('');
122
+ });
123
+ it('should handle missing text property', () => {
124
+ const parts = [{ type: 'text' }, { type: 'text', text: 'Valid' }];
125
+ expect(extractPromptText(parts)).toBe('Valid');
126
+ });
127
+ });
128
+ describe('detector - detectUltrathinkKeyword', () => {
129
+ it('should detect ultrathink keyword', () => {
130
+ expect(detectUltrathinkKeyword('ultrathink this')).toBe(true);
131
+ });
132
+ it('should be case insensitive', () => {
133
+ expect(detectUltrathinkKeyword('ULTRATHINK')).toBe(true);
134
+ expect(detectUltrathinkKeyword('UltraThink')).toBe(true);
135
+ });
136
+ it('should not detect just "think"', () => {
137
+ expect(detectUltrathinkKeyword('think about this')).toBe(false);
138
+ });
139
+ it('should not detect in code block', () => {
140
+ expect(detectUltrathinkKeyword('```ultrathink```')).toBe(false);
141
+ });
142
+ it('should return false for empty input', () => {
143
+ expect(detectUltrathinkKeyword('')).toBe(false);
144
+ });
145
+ });
146
+ describe('switcher - getHighVariant', () => {
147
+ describe('Claude models', () => {
148
+ it('should return high variant for claude-sonnet-4-5', () => {
149
+ expect(getHighVariant('claude-sonnet-4-5')).toBe('claude-sonnet-4-5-high');
150
+ });
151
+ it('should return high variant for claude-opus-4-5', () => {
152
+ expect(getHighVariant('claude-opus-4-5')).toBe('claude-opus-4-5-high');
153
+ });
154
+ it('should return high variant for claude-3-5-sonnet', () => {
155
+ expect(getHighVariant('claude-3-5-sonnet')).toBe('claude-3-5-sonnet-high');
156
+ });
157
+ it('should return high variant for claude-3-opus', () => {
158
+ expect(getHighVariant('claude-3-opus')).toBe('claude-3-opus-high');
159
+ });
160
+ it('should handle version with dot notation', () => {
161
+ expect(getHighVariant('claude-sonnet-4.5')).toBe('claude-sonnet-4-5-high');
162
+ });
163
+ });
164
+ describe('GPT models', () => {
165
+ it('should return high variant for gpt-4', () => {
166
+ expect(getHighVariant('gpt-4')).toBe('gpt-4-high');
167
+ });
168
+ it('should return high variant for gpt-4-turbo', () => {
169
+ expect(getHighVariant('gpt-4-turbo')).toBe('gpt-4-turbo-high');
170
+ });
171
+ it('should return high variant for gpt-4o', () => {
172
+ expect(getHighVariant('gpt-4o')).toBe('gpt-4o-high');
173
+ });
174
+ it('should return high variant for gpt-5', () => {
175
+ expect(getHighVariant('gpt-5')).toBe('gpt-5-high');
176
+ });
177
+ });
178
+ describe('Gemini models', () => {
179
+ it('should return high variant for gemini-2-pro', () => {
180
+ expect(getHighVariant('gemini-2-pro')).toBe('gemini-2-pro-high');
181
+ });
182
+ it('should return high variant for gemini-3-pro', () => {
183
+ expect(getHighVariant('gemini-3-pro')).toBe('gemini-3-pro-high');
184
+ });
185
+ it('should return high variant for gemini-3-flash', () => {
186
+ expect(getHighVariant('gemini-3-flash')).toBe('gemini-3-flash-high');
187
+ });
188
+ });
189
+ describe('Already high variants', () => {
190
+ it('should return null for already high variant', () => {
191
+ expect(getHighVariant('claude-sonnet-4-5-high')).toBeNull();
192
+ });
193
+ it('should return null for model ending in -high', () => {
194
+ expect(getHighVariant('some-model-high')).toBeNull();
195
+ });
196
+ });
197
+ describe('Prefixed models', () => {
198
+ it('should preserve prefix in high variant', () => {
199
+ expect(getHighVariant('vertex_ai/claude-sonnet-4-5')).toBe('vertex_ai/claude-sonnet-4-5-high');
200
+ });
201
+ it('should handle openai/ prefix', () => {
202
+ expect(getHighVariant('openai/gpt-4')).toBe('openai/gpt-4-high');
203
+ });
204
+ });
205
+ it('should return null for unknown model', () => {
206
+ expect(getHighVariant('unknown-model')).toBeNull();
207
+ });
208
+ });
209
+ describe('switcher - isAlreadyHighVariant', () => {
210
+ it('should return true for high variant models', () => {
211
+ expect(isAlreadyHighVariant('claude-sonnet-4-5-high')).toBe(true);
212
+ });
213
+ it('should return true for any model ending in -high', () => {
214
+ expect(isAlreadyHighVariant('custom-model-high')).toBe(true);
215
+ });
216
+ it('should return false for non-high variant', () => {
217
+ expect(isAlreadyHighVariant('claude-sonnet-4-5')).toBe(false);
218
+ });
219
+ it('should handle prefixed models', () => {
220
+ expect(isAlreadyHighVariant('vertex_ai/claude-sonnet-4-5-high')).toBe(true);
221
+ expect(isAlreadyHighVariant('vertex_ai/claude-sonnet-4-5')).toBe(false);
222
+ });
223
+ it('should normalize dot notation', () => {
224
+ expect(isAlreadyHighVariant('claude-sonnet-4.5-high')).toBe(true);
225
+ });
226
+ });
227
+ describe('switcher - getThinkingConfig', () => {
228
+ describe('Anthropic provider', () => {
229
+ it('should return config for Claude models', () => {
230
+ const config = getThinkingConfig('anthropic', 'claude-sonnet-4-5');
231
+ expect(config).not.toBeNull();
232
+ expect(config).toHaveProperty('thinking');
233
+ });
234
+ it('should return null for already high variant', () => {
235
+ const config = getThinkingConfig('anthropic', 'claude-sonnet-4-5-high');
236
+ expect(config).toBeNull();
237
+ });
238
+ });
239
+ describe('Amazon Bedrock provider', () => {
240
+ it('should return config for Claude models on Bedrock', () => {
241
+ const config = getThinkingConfig('amazon-bedrock', 'anthropic.claude-3-sonnet');
242
+ expect(config).not.toBeNull();
243
+ expect(config).toHaveProperty('reasoningConfig');
244
+ });
245
+ });
246
+ describe('Google provider', () => {
247
+ it('should return config for Gemini models', () => {
248
+ const config = getThinkingConfig('google', 'gemini-2-pro');
249
+ expect(config).not.toBeNull();
250
+ expect(config).toHaveProperty('providerOptions');
251
+ });
252
+ });
253
+ describe('OpenAI provider', () => {
254
+ it('should return config for GPT models', () => {
255
+ const config = getThinkingConfig('openai', 'gpt-4');
256
+ expect(config).not.toBeNull();
257
+ expect(config).toHaveProperty('reasoning_effort');
258
+ });
259
+ it('should return config for o1 models', () => {
260
+ const config = getThinkingConfig('openai', 'o1-preview');
261
+ expect(config).not.toBeNull();
262
+ });
263
+ });
264
+ describe('GitHub Copilot proxy', () => {
265
+ it('should resolve to anthropic for Claude model', () => {
266
+ const config = getThinkingConfig('github-copilot', 'claude-sonnet-4-5');
267
+ expect(config).not.toBeNull();
268
+ expect(config).toHaveProperty('thinking');
269
+ });
270
+ it('should resolve to google for Gemini model', () => {
271
+ const config = getThinkingConfig('github-copilot', 'gemini-2-pro');
272
+ expect(config).not.toBeNull();
273
+ expect(config).toHaveProperty('providerOptions');
274
+ });
275
+ it('should resolve to openai for GPT model', () => {
276
+ const config = getThinkingConfig('github-copilot', 'gpt-4');
277
+ expect(config).not.toBeNull();
278
+ expect(config).toHaveProperty('reasoning_effort');
279
+ });
280
+ });
281
+ it('should return null for unknown provider', () => {
282
+ const config = getThinkingConfig('unknown-provider', 'some-model');
283
+ expect(config).toBeNull();
284
+ });
285
+ it('should return null for non-capable model', () => {
286
+ const config = getThinkingConfig('anthropic', 'unknown-model');
287
+ expect(config).toBeNull();
288
+ });
289
+ });
290
+ describe('switcher - getClaudeThinkingConfig', () => {
291
+ it('should return default config with 64000 tokens', () => {
292
+ const config = getClaudeThinkingConfig();
293
+ expect(config.thinking.type).toBe('enabled');
294
+ expect(config.thinking.budgetTokens).toBe(64000);
295
+ expect(config.maxTokens).toBe(128000);
296
+ });
297
+ it('should accept custom budget tokens', () => {
298
+ const config = getClaudeThinkingConfig(32000);
299
+ expect(config.thinking.budgetTokens).toBe(32000);
300
+ });
301
+ });
302
+ describe('switcher - THINKING_CONFIGS', () => {
303
+ it('should have anthropic config', () => {
304
+ expect(THINKING_CONFIGS.anthropic).toBeDefined();
305
+ expect(THINKING_CONFIGS.anthropic.thinking).toBeDefined();
306
+ });
307
+ it('should have amazon-bedrock config', () => {
308
+ expect(THINKING_CONFIGS['amazon-bedrock']).toBeDefined();
309
+ expect(THINKING_CONFIGS['amazon-bedrock'].reasoningConfig).toBeDefined();
310
+ });
311
+ it('should have google config', () => {
312
+ expect(THINKING_CONFIGS.google).toBeDefined();
313
+ expect(THINKING_CONFIGS.google.providerOptions).toBeDefined();
314
+ });
315
+ it('should have openai config', () => {
316
+ expect(THINKING_CONFIGS.openai).toBeDefined();
317
+ expect(THINKING_CONFIGS.openai.reasoning_effort).toBe('high');
318
+ });
319
+ });
320
+ describe('state management - processThinkMode', () => {
321
+ it('should set requested to false when no keyword', () => {
322
+ const state = processThinkMode('test-session', 'regular text');
323
+ expect(state.requested).toBe(false);
324
+ });
325
+ it('should set requested to true when keyword detected', () => {
326
+ const state = processThinkMode('test-session', 'think about this');
327
+ expect(state.requested).toBe(true);
328
+ });
329
+ it('should store state for session', () => {
330
+ processThinkMode('test-session', 'think about this');
331
+ const stored = getThinkModeState('test-session');
332
+ expect(stored?.requested).toBe(true);
333
+ });
334
+ it('should return initial state values', () => {
335
+ const state = processThinkMode('test-session', 'think');
336
+ expect(state.modelSwitched).toBe(false);
337
+ expect(state.thinkingConfigInjected).toBe(false);
338
+ });
339
+ });
340
+ describe('state management - getThinkModeState', () => {
341
+ it('should return undefined for unknown session', () => {
342
+ expect(getThinkModeState('unknown-session')).toBeUndefined();
343
+ });
344
+ it('should return state after processThinkMode', () => {
345
+ processThinkMode('test-session', 'think');
346
+ const state = getThinkModeState('test-session');
347
+ expect(state).toBeDefined();
348
+ expect(state?.requested).toBe(true);
349
+ });
350
+ });
351
+ describe('state management - isThinkModeActive', () => {
352
+ it('should return false for unknown session', () => {
353
+ expect(isThinkModeActive('unknown-session')).toBe(false);
354
+ });
355
+ it('should return true after think mode requested', () => {
356
+ processThinkMode('test-session', 'think');
357
+ expect(isThinkModeActive('test-session')).toBe(true);
358
+ });
359
+ it('should return false when not requested', () => {
360
+ processThinkMode('test-session', 'regular text');
361
+ expect(isThinkModeActive('test-session')).toBe(false);
362
+ });
363
+ });
364
+ describe('state management - clearThinkModeState', () => {
365
+ it('should clear state for session', () => {
366
+ processThinkMode('test-session', 'think');
367
+ clearThinkModeState('test-session');
368
+ expect(getThinkModeState('test-session')).toBeUndefined();
369
+ });
370
+ it('should not affect other sessions', () => {
371
+ processThinkMode('session-1', 'think');
372
+ processThinkMode('session-2', 'think');
373
+ clearThinkModeState('session-1');
374
+ expect(getThinkModeState('session-2')).toBeDefined();
375
+ });
376
+ });
377
+ describe('state management - session isolation', () => {
378
+ it('should maintain separate state per session', () => {
379
+ processThinkMode('session-1', 'think');
380
+ processThinkMode('session-2', 'regular');
381
+ expect(getThinkModeState('session-1')?.requested).toBe(true);
382
+ expect(getThinkModeState('session-2')?.requested).toBe(false);
383
+ });
384
+ });
385
+ describe('createThinkModeHook', () => {
386
+ it('should create hook with processChatParams method', () => {
387
+ const hook = createThinkModeHook();
388
+ expect(typeof hook.processChatParams).toBe('function');
389
+ });
390
+ it('should create hook with onSessionDeleted method', () => {
391
+ const hook = createThinkModeHook();
392
+ expect(typeof hook.onSessionDeleted).toBe('function');
393
+ });
394
+ it('should create hook with isRequested method', () => {
395
+ const hook = createThinkModeHook();
396
+ expect(typeof hook.isRequested).toBe('function');
397
+ });
398
+ it('should create hook with getState method', () => {
399
+ const hook = createThinkModeHook();
400
+ expect(typeof hook.getState).toBe('function');
401
+ });
402
+ it('should create hook with clear method', () => {
403
+ const hook = createThinkModeHook();
404
+ expect(typeof hook.clear).toBe('function');
405
+ });
406
+ describe('processChatParams', () => {
407
+ it('should detect think mode from parts', () => {
408
+ const hook = createThinkModeHook();
409
+ const input = {
410
+ parts: [{ type: 'text', text: 'think about this' }],
411
+ message: {},
412
+ };
413
+ const state = hook.processChatParams('test-session', input);
414
+ expect(state.requested).toBe(true);
415
+ });
416
+ it('should not request think mode for regular text', () => {
417
+ const hook = createThinkModeHook();
418
+ const input = {
419
+ parts: [{ type: 'text', text: 'regular text' }],
420
+ message: {},
421
+ };
422
+ const state = hook.processChatParams('test-session', input);
423
+ expect(state.requested).toBe(false);
424
+ });
425
+ it('should switch model to high variant', () => {
426
+ const hook = createThinkModeHook();
427
+ const input = {
428
+ parts: [{ type: 'text', text: 'think' }],
429
+ message: {
430
+ model: {
431
+ providerId: 'anthropic',
432
+ modelId: 'claude-sonnet-4-5',
433
+ },
434
+ },
435
+ };
436
+ const state = hook.processChatParams('test-session', input);
437
+ expect(state.modelSwitched).toBe(true);
438
+ expect(input.message.model?.modelId).toBe('claude-sonnet-4-5-high');
439
+ });
440
+ it('should not switch already high variant', () => {
441
+ const hook = createThinkModeHook();
442
+ const input = {
443
+ parts: [{ type: 'text', text: 'think' }],
444
+ message: {
445
+ model: {
446
+ providerId: 'anthropic',
447
+ modelId: 'claude-sonnet-4-5-high',
448
+ },
449
+ },
450
+ };
451
+ const state = hook.processChatParams('test-session', input);
452
+ expect(state.modelSwitched).toBe(false);
453
+ });
454
+ it('should inject thinking config', () => {
455
+ const hook = createThinkModeHook();
456
+ const input = {
457
+ parts: [{ type: 'text', text: 'think' }],
458
+ message: {
459
+ model: {
460
+ providerId: 'anthropic',
461
+ modelId: 'claude-sonnet-4-5',
462
+ },
463
+ },
464
+ };
465
+ const state = hook.processChatParams('test-session', input);
466
+ expect(state.thinkingConfigInjected).toBe(true);
467
+ });
468
+ it('should store provider and model in state', () => {
469
+ const hook = createThinkModeHook();
470
+ const input = {
471
+ parts: [{ type: 'text', text: 'think' }],
472
+ message: {
473
+ model: {
474
+ providerId: 'anthropic',
475
+ modelId: 'claude-sonnet-4-5',
476
+ },
477
+ },
478
+ };
479
+ hook.processChatParams('test-session', input);
480
+ const state = hook.getState('test-session');
481
+ expect(state?.providerId).toBe('anthropic');
482
+ expect(state?.modelId).toBe('claude-sonnet-4-5');
483
+ });
484
+ });
485
+ describe('onSessionDeleted', () => {
486
+ it('should clear state when session deleted', () => {
487
+ const hook = createThinkModeHook();
488
+ processThinkMode('test-session', 'think');
489
+ hook.onSessionDeleted('test-session');
490
+ expect(getThinkModeState('test-session')).toBeUndefined();
491
+ });
492
+ });
493
+ describe('isRequested', () => {
494
+ it('should return true when think mode requested', () => {
495
+ const hook = createThinkModeHook();
496
+ processThinkMode('test-session', 'think');
497
+ expect(hook.isRequested('test-session')).toBe(true);
498
+ });
499
+ it('should return false for unknown session', () => {
500
+ const hook = createThinkModeHook();
501
+ expect(hook.isRequested('unknown')).toBe(false);
502
+ });
503
+ });
504
+ describe('getState', () => {
505
+ it('should return state for session', () => {
506
+ const hook = createThinkModeHook();
507
+ processThinkMode('test-session', 'think');
508
+ expect(hook.getState('test-session')).toBeDefined();
509
+ });
510
+ it('should return undefined for unknown session', () => {
511
+ const hook = createThinkModeHook();
512
+ expect(hook.getState('unknown')).toBeUndefined();
513
+ });
514
+ });
515
+ describe('clear', () => {
516
+ it('should clear state for session', () => {
517
+ const hook = createThinkModeHook();
518
+ processThinkMode('test-session', 'think');
519
+ hook.clear('test-session');
520
+ expect(hook.getState('test-session')).toBeUndefined();
521
+ });
522
+ });
523
+ });
524
+ describe('shouldActivateThinkMode', () => {
525
+ it('should return true for think keyword', () => {
526
+ expect(shouldActivateThinkMode('think about this')).toBe(true);
527
+ });
528
+ it('should return true for ultrathink keyword', () => {
529
+ expect(shouldActivateThinkMode('ultrathink')).toBe(true);
530
+ });
531
+ it('should return true for multilingual keywords', () => {
532
+ expect(shouldActivateThinkMode('생각해주세요')).toBe(true);
533
+ });
534
+ it('should return false for no keywords', () => {
535
+ expect(shouldActivateThinkMode('regular text')).toBe(false);
536
+ });
537
+ it('should ignore keywords in code blocks', () => {
538
+ expect(shouldActivateThinkMode('```think```')).toBe(false);
539
+ });
540
+ });
541
+ describe('shouldActivateUltrathink', () => {
542
+ it('should return true for ultrathink keyword', () => {
543
+ expect(shouldActivateUltrathink('ultrathink this')).toBe(true);
544
+ });
545
+ it('should return false for just think', () => {
546
+ expect(shouldActivateUltrathink('think about this')).toBe(false);
547
+ });
548
+ it('should be case insensitive', () => {
549
+ expect(shouldActivateUltrathink('ULTRATHINK')).toBe(true);
550
+ });
551
+ it('should ignore in code blocks', () => {
552
+ expect(shouldActivateUltrathink('```ultrathink```')).toBe(false);
553
+ });
554
+ });
555
+ });
556
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/hooks/think-mode/__tests__/index.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgBH,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAC5D,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,YAAY,QAAsC,CAAC;AAChE,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,SAAS,QAAmC,CAAC;AAC1D,eAAO,MAAM,OAAO,QAAiC,CAAC;AACtD,eAAO,MAAM,aAAa,QAA2C,CAAC;AACtE,eAAO,MAAM,YAAY,QAA+C,CAAC;AAEzE;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,EAAO,CAAC;AAE1C,sBAAsB;AACtB,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,0BAA0B;AAC1B,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAOxF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAQ3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAI3C;AAqED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CA8VnE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAehG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgBH,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAC5D,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,YAAY,QAAsC,CAAC;AAChE,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,SAAS,QAAmC,CAAC;AAC1D,eAAO,MAAM,OAAO,QAAiC,CAAC;AACtD,eAAO,MAAM,aAAa,QAA2C,CAAC;AACtE,eAAO,MAAM,YAAY,QAA+C,CAAC;AAEzE;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,EAAO,CAAC;AAE1C,sBAAsB;AACtB,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,0BAA0B;AAC1B,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAOxF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAQ3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAI3C;AAqED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CAsWnE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAehG"}
@@ -257,6 +257,14 @@ export function install(options = {}) {
257
257
  const homeMdPath = join(homedir(), 'CLAUDE.md');
258
258
  if (!existsSync(homeMdPath)) {
259
259
  if (!existsSync(claudeMdPath) || options.force) {
260
+ // Backup existing CLAUDE.md before overwriting (if it exists and --force)
261
+ if (existsSync(claudeMdPath) && options.force) {
262
+ const today = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
263
+ const backupPath = join(CLAUDE_CONFIG_DIR, `CLAUDE.md.backup.${today}`);
264
+ const existingContent = readFileSync(claudeMdPath, 'utf-8');
265
+ writeFileSync(backupPath, existingContent);
266
+ log(`Backed up existing CLAUDE.md to ${backupPath}`);
267
+ }
260
268
  writeFileSync(claudeMdPath, loadClaudeMdContent());
261
269
  log('Created CLAUDE.md');
262
270
  }