@jacques-ai/cli 0.0.7-alpha.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 (508) hide show
  1. package/dist/assets/mascot-ansi.d.ts +8 -0
  2. package/dist/assets/mascot-ansi.d.ts.map +1 -0
  3. package/dist/assets/mascot-ansi.js +15 -0
  4. package/dist/assets/mascot-ansi.js.map +1 -0
  5. package/dist/cli.d.ts +15 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +53 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/commands/client-helper.d.ts +14 -0
  10. package/dist/commands/client-helper.d.ts.map +1 -0
  11. package/dist/commands/client-helper.js +38 -0
  12. package/dist/commands/client-helper.js.map +1 -0
  13. package/dist/commands/dashboard.d.ts +8 -0
  14. package/dist/commands/dashboard.d.ts.map +1 -0
  15. package/dist/commands/dashboard.js +159 -0
  16. package/dist/commands/dashboard.js.map +1 -0
  17. package/dist/commands/index.d.ts +6 -0
  18. package/dist/commands/index.d.ts.map +1 -0
  19. package/dist/commands/index.js +6 -0
  20. package/dist/commands/index.js.map +1 -0
  21. package/dist/commands/list.d.ts +5 -0
  22. package/dist/commands/list.d.ts.map +1 -0
  23. package/dist/commands/list.js +13 -0
  24. package/dist/commands/list.js.map +1 -0
  25. package/dist/commands/search.d.ts +13 -0
  26. package/dist/commands/search.d.ts.map +1 -0
  27. package/dist/commands/search.js +79 -0
  28. package/dist/commands/search.js.map +1 -0
  29. package/dist/commands/setup.d.ts +8 -0
  30. package/dist/commands/setup.d.ts.map +1 -0
  31. package/dist/commands/setup.js +32 -0
  32. package/dist/commands/setup.js.map +1 -0
  33. package/dist/commands/status.d.ts +5 -0
  34. package/dist/commands/status.d.ts.map +1 -0
  35. package/dist/commands/status.js +27 -0
  36. package/dist/commands/status.js.map +1 -0
  37. package/dist/components/ActiveSessionsView.d.ts +18 -0
  38. package/dist/components/ActiveSessionsView.d.ts.map +1 -0
  39. package/dist/components/ActiveSessionsView.js +68 -0
  40. package/dist/components/ActiveSessionsView.js.map +1 -0
  41. package/dist/components/AddContextConfirmView.d.ts +21 -0
  42. package/dist/components/AddContextConfirmView.d.ts.map +1 -0
  43. package/dist/components/AddContextConfirmView.js +44 -0
  44. package/dist/components/AddContextConfirmView.js.map +1 -0
  45. package/dist/components/App.d.ts +11 -0
  46. package/dist/components/App.d.ts.map +1 -0
  47. package/dist/components/App.js +292 -0
  48. package/dist/components/App.js.map +1 -0
  49. package/dist/components/ArchiveBrowserView.d.ts +40 -0
  50. package/dist/components/ArchiveBrowserView.d.ts.map +1 -0
  51. package/dist/components/ArchiveBrowserView.js +161 -0
  52. package/dist/components/ArchiveBrowserView.js.map +1 -0
  53. package/dist/components/ArchiveInitProgressView.d.ts +16 -0
  54. package/dist/components/ArchiveInitProgressView.d.ts.map +1 -0
  55. package/dist/components/ArchiveInitProgressView.js +72 -0
  56. package/dist/components/ArchiveInitProgressView.js.map +1 -0
  57. package/dist/components/AutoCompactToggle.d.ts +16 -0
  58. package/dist/components/AutoCompactToggle.d.ts.map +1 -0
  59. package/dist/components/AutoCompactToggle.js +12 -0
  60. package/dist/components/AutoCompactToggle.js.map +1 -0
  61. package/dist/components/BottomControls.d.ts +12 -0
  62. package/dist/components/BottomControls.d.ts.map +1 -0
  63. package/dist/components/BottomControls.js +11 -0
  64. package/dist/components/BottomControls.js.map +1 -0
  65. package/dist/components/CompactHeader.d.ts +21 -0
  66. package/dist/components/CompactHeader.d.ts.map +1 -0
  67. package/dist/components/CompactHeader.js +63 -0
  68. package/dist/components/CompactHeader.js.map +1 -0
  69. package/dist/components/CompactPanel.d.ts +22 -0
  70. package/dist/components/CompactPanel.d.ts.map +1 -0
  71. package/dist/components/CompactPanel.js +31 -0
  72. package/dist/components/CompactPanel.js.map +1 -0
  73. package/dist/components/ContentBox.d.ts +14 -0
  74. package/dist/components/ContentBox.d.ts.map +1 -0
  75. package/dist/components/ContentBox.js +24 -0
  76. package/dist/components/ContentBox.js.map +1 -0
  77. package/dist/components/ContextProgress.d.ts +14 -0
  78. package/dist/components/ContextProgress.d.ts.map +1 -0
  79. package/dist/components/ContextProgress.js +36 -0
  80. package/dist/components/ContextProgress.js.map +1 -0
  81. package/dist/components/Dashboard.d.ts +46 -0
  82. package/dist/components/Dashboard.d.ts.map +1 -0
  83. package/dist/components/Dashboard.js +67 -0
  84. package/dist/components/Dashboard.js.map +1 -0
  85. package/dist/components/FilterSelectionView.d.ts +15 -0
  86. package/dist/components/FilterSelectionView.d.ts.map +1 -0
  87. package/dist/components/FilterSelectionView.js +27 -0
  88. package/dist/components/FilterSelectionView.js.map +1 -0
  89. package/dist/components/GoogleDocsBrowserView.d.ts +20 -0
  90. package/dist/components/GoogleDocsBrowserView.d.ts.map +1 -0
  91. package/dist/components/GoogleDocsBrowserView.js +72 -0
  92. package/dist/components/GoogleDocsBrowserView.js.map +1 -0
  93. package/dist/components/HandoffBrowserView.d.ts +20 -0
  94. package/dist/components/HandoffBrowserView.d.ts.map +1 -0
  95. package/dist/components/HandoffBrowserView.js +66 -0
  96. package/dist/components/HandoffBrowserView.js.map +1 -0
  97. package/dist/components/Header.d.ts +14 -0
  98. package/dist/components/Header.d.ts.map +1 -0
  99. package/dist/components/Header.js +16 -0
  100. package/dist/components/Header.js.map +1 -0
  101. package/dist/components/HorizontalMenu.d.ts +24 -0
  102. package/dist/components/HorizontalMenu.d.ts.map +1 -0
  103. package/dist/components/HorizontalMenu.js +20 -0
  104. package/dist/components/HorizontalMenu.js.map +1 -0
  105. package/dist/components/ImageMascot.d.ts +8 -0
  106. package/dist/components/ImageMascot.d.ts.map +1 -0
  107. package/dist/components/ImageMascot.js +7 -0
  108. package/dist/components/ImageMascot.js.map +1 -0
  109. package/dist/components/LLMWorkingView.d.ts +19 -0
  110. package/dist/components/LLMWorkingView.d.ts.map +1 -0
  111. package/dist/components/LLMWorkingView.js +72 -0
  112. package/dist/components/LLMWorkingView.js.map +1 -0
  113. package/dist/components/LoadContextView.d.ts +22 -0
  114. package/dist/components/LoadContextView.d.ts.map +1 -0
  115. package/dist/components/LoadContextView.js +83 -0
  116. package/dist/components/LoadContextView.js.map +1 -0
  117. package/dist/components/MainMenuView.d.ts +20 -0
  118. package/dist/components/MainMenuView.d.ts.map +1 -0
  119. package/dist/components/MainMenuView.js +49 -0
  120. package/dist/components/MainMenuView.js.map +1 -0
  121. package/dist/components/Mascot.d.ts +24 -0
  122. package/dist/components/Mascot.d.ts.map +1 -0
  123. package/dist/components/Mascot.js +32 -0
  124. package/dist/components/Mascot.js.map +1 -0
  125. package/dist/components/Menu.d.ts +22 -0
  126. package/dist/components/Menu.d.ts.map +1 -0
  127. package/dist/components/Menu.js +28 -0
  128. package/dist/components/Menu.js.map +1 -0
  129. package/dist/components/NotionBrowserView.d.ts +21 -0
  130. package/dist/components/NotionBrowserView.d.ts.map +1 -0
  131. package/dist/components/NotionBrowserView.js +75 -0
  132. package/dist/components/NotionBrowserView.js.map +1 -0
  133. package/dist/components/ObsidianBrowserView.d.ts +21 -0
  134. package/dist/components/ObsidianBrowserView.d.ts.map +1 -0
  135. package/dist/components/ObsidianBrowserView.js +74 -0
  136. package/dist/components/ObsidianBrowserView.js.map +1 -0
  137. package/dist/components/ObsidianConfigView.d.ts +19 -0
  138. package/dist/components/ObsidianConfigView.d.ts.map +1 -0
  139. package/dist/components/ObsidianConfigView.js +45 -0
  140. package/dist/components/ObsidianConfigView.js.map +1 -0
  141. package/dist/components/PlaceholderView.d.ts +15 -0
  142. package/dist/components/PlaceholderView.d.ts.map +1 -0
  143. package/dist/components/PlaceholderView.js +20 -0
  144. package/dist/components/PlaceholderView.js.map +1 -0
  145. package/dist/components/PlanViewerView.d.ts +26 -0
  146. package/dist/components/PlanViewerView.d.ts.map +1 -0
  147. package/dist/components/PlanViewerView.js +170 -0
  148. package/dist/components/PlanViewerView.js.map +1 -0
  149. package/dist/components/ProgressBar.d.ts +24 -0
  150. package/dist/components/ProgressBar.d.ts.map +1 -0
  151. package/dist/components/ProgressBar.js +23 -0
  152. package/dist/components/ProgressBar.js.map +1 -0
  153. package/dist/components/ProjectDashboardView.d.ts +38 -0
  154. package/dist/components/ProjectDashboardView.d.ts.map +1 -0
  155. package/dist/components/ProjectDashboardView.js +129 -0
  156. package/dist/components/ProjectDashboardView.js.map +1 -0
  157. package/dist/components/SaveContextView.d.ts +32 -0
  158. package/dist/components/SaveContextView.d.ts.map +1 -0
  159. package/dist/components/SaveContextView.js +41 -0
  160. package/dist/components/SaveContextView.js.map +1 -0
  161. package/dist/components/SessionDetails.d.ts +14 -0
  162. package/dist/components/SessionDetails.d.ts.map +1 -0
  163. package/dist/components/SessionDetails.js +87 -0
  164. package/dist/components/SessionDetails.js.map +1 -0
  165. package/dist/components/SessionsExperimentView.d.ts +35 -0
  166. package/dist/components/SessionsExperimentView.d.ts.map +1 -0
  167. package/dist/components/SessionsExperimentView.js +347 -0
  168. package/dist/components/SessionsExperimentView.js.map +1 -0
  169. package/dist/components/SessionsList.d.ts +20 -0
  170. package/dist/components/SessionsList.d.ts.map +1 -0
  171. package/dist/components/SessionsList.js +75 -0
  172. package/dist/components/SessionsList.js.map +1 -0
  173. package/dist/components/SettingsView.d.ts +48 -0
  174. package/dist/components/SettingsView.d.ts.map +1 -0
  175. package/dist/components/SettingsView.js +156 -0
  176. package/dist/components/SettingsView.js.map +1 -0
  177. package/dist/components/SourceSelectionView.d.ts +26 -0
  178. package/dist/components/SourceSelectionView.d.ts.map +1 -0
  179. package/dist/components/SourceSelectionView.js +109 -0
  180. package/dist/components/SourceSelectionView.js.map +1 -0
  181. package/dist/components/VerticalMenu.d.ts +18 -0
  182. package/dist/components/VerticalMenu.d.ts.map +1 -0
  183. package/dist/components/VerticalMenu.js +15 -0
  184. package/dist/components/VerticalMenu.js.map +1 -0
  185. package/dist/components/ascii-art/index.d.ts +6 -0
  186. package/dist/components/ascii-art/index.d.ts.map +1 -0
  187. package/dist/components/ascii-art/index.js +6 -0
  188. package/dist/components/ascii-art/index.js.map +1 -0
  189. package/dist/components/ascii-art/progress.d.ts +53 -0
  190. package/dist/components/ascii-art/progress.d.ts.map +1 -0
  191. package/dist/components/ascii-art/progress.js +102 -0
  192. package/dist/components/ascii-art/progress.js.map +1 -0
  193. package/dist/components/ascii-art/scene.d.ts +34 -0
  194. package/dist/components/ascii-art/scene.d.ts.map +1 -0
  195. package/dist/components/ascii-art/scene.js +72 -0
  196. package/dist/components/ascii-art/scene.js.map +1 -0
  197. package/dist/components/index.d.ts +27 -0
  198. package/dist/components/index.d.ts.map +1 -0
  199. package/dist/components/index.js +25 -0
  200. package/dist/components/index.js.map +1 -0
  201. package/dist/components/layout/HorizontalLayout.d.ts +19 -0
  202. package/dist/components/layout/HorizontalLayout.d.ts.map +1 -0
  203. package/dist/components/layout/HorizontalLayout.js +62 -0
  204. package/dist/components/layout/HorizontalLayout.js.map +1 -0
  205. package/dist/components/layout/VerticalLayout.d.ts +16 -0
  206. package/dist/components/layout/VerticalLayout.d.ts.map +1 -0
  207. package/dist/components/layout/VerticalLayout.js +32 -0
  208. package/dist/components/layout/VerticalLayout.js.map +1 -0
  209. package/dist/components/layout/index.d.ts +6 -0
  210. package/dist/components/layout/index.d.ts.map +1 -0
  211. package/dist/components/layout/index.js +4 -0
  212. package/dist/components/layout/index.js.map +1 -0
  213. package/dist/components/layout/theme.d.ts +20 -0
  214. package/dist/components/layout/theme.d.ts.map +1 -0
  215. package/dist/components/layout/theme.js +23 -0
  216. package/dist/components/layout/theme.js.map +1 -0
  217. package/dist/components/setup/DoneStep.d.ts +7 -0
  218. package/dist/components/setup/DoneStep.d.ts.map +1 -0
  219. package/dist/components/setup/DoneStep.js +31 -0
  220. package/dist/components/setup/DoneStep.js.map +1 -0
  221. package/dist/components/setup/InstallingStep.d.ts +11 -0
  222. package/dist/components/setup/InstallingStep.d.ts.map +1 -0
  223. package/dist/components/setup/InstallingStep.js +27 -0
  224. package/dist/components/setup/InstallingStep.js.map +1 -0
  225. package/dist/components/setup/OptionsStep.d.ts +9 -0
  226. package/dist/components/setup/OptionsStep.d.ts.map +1 -0
  227. package/dist/components/setup/OptionsStep.js +39 -0
  228. package/dist/components/setup/OptionsStep.js.map +1 -0
  229. package/dist/components/setup/PrerequisitesStep.d.ts +7 -0
  230. package/dist/components/setup/PrerequisitesStep.d.ts.map +1 -0
  231. package/dist/components/setup/PrerequisitesStep.js +31 -0
  232. package/dist/components/setup/PrerequisitesStep.js.map +1 -0
  233. package/dist/components/setup/SetupFrame.d.ts +17 -0
  234. package/dist/components/setup/SetupFrame.d.ts.map +1 -0
  235. package/dist/components/setup/SetupFrame.js +33 -0
  236. package/dist/components/setup/SetupFrame.js.map +1 -0
  237. package/dist/components/setup/SetupWizard.d.ts +9 -0
  238. package/dist/components/setup/SetupWizard.d.ts.map +1 -0
  239. package/dist/components/setup/SetupWizard.js +149 -0
  240. package/dist/components/setup/SetupWizard.js.map +1 -0
  241. package/dist/components/setup/Spinner.d.ts +10 -0
  242. package/dist/components/setup/Spinner.d.ts.map +1 -0
  243. package/dist/components/setup/Spinner.js +20 -0
  244. package/dist/components/setup/Spinner.js.map +1 -0
  245. package/dist/components/setup/SyncStep.d.ts +11 -0
  246. package/dist/components/setup/SyncStep.d.ts.map +1 -0
  247. package/dist/components/setup/SyncStep.js +47 -0
  248. package/dist/components/setup/SyncStep.js.map +1 -0
  249. package/dist/components/setup/VerificationStep.d.ts +7 -0
  250. package/dist/components/setup/VerificationStep.d.ts.map +1 -0
  251. package/dist/components/setup/VerificationStep.js +27 -0
  252. package/dist/components/setup/VerificationStep.js.map +1 -0
  253. package/dist/components/setup/WelcomeStep.d.ts +6 -0
  254. package/dist/components/setup/WelcomeStep.d.ts.map +1 -0
  255. package/dist/components/setup/WelcomeStep.js +17 -0
  256. package/dist/components/setup/WelcomeStep.js.map +1 -0
  257. package/dist/components/shared/ProgressLine.d.ts +10 -0
  258. package/dist/components/shared/ProgressLine.d.ts.map +1 -0
  259. package/dist/components/shared/ProgressLine.js +18 -0
  260. package/dist/components/shared/ProgressLine.js.map +1 -0
  261. package/dist/components/shared/ProjectLine.d.ts +10 -0
  262. package/dist/components/shared/ProjectLine.d.ts.map +1 -0
  263. package/dist/components/shared/ProjectLine.js +19 -0
  264. package/dist/components/shared/ProjectLine.js.map +1 -0
  265. package/dist/components/shared/ScanningIndicator.d.ts +9 -0
  266. package/dist/components/shared/ScanningIndicator.d.ts.map +1 -0
  267. package/dist/components/shared/ScanningIndicator.js +22 -0
  268. package/dist/components/shared/ScanningIndicator.js.map +1 -0
  269. package/dist/components/shared/StatusLine.d.ts +13 -0
  270. package/dist/components/shared/StatusLine.d.ts.map +1 -0
  271. package/dist/components/shared/StatusLine.js +24 -0
  272. package/dist/components/shared/StatusLine.js.map +1 -0
  273. package/dist/components/shared/StatusLine.test.d.ts +8 -0
  274. package/dist/components/shared/StatusLine.test.d.ts.map +1 -0
  275. package/dist/components/shared/StatusLine.test.js +50 -0
  276. package/dist/components/shared/StatusLine.test.js.map +1 -0
  277. package/dist/components/shared/index.d.ts +4 -0
  278. package/dist/components/shared/index.d.ts.map +1 -0
  279. package/dist/components/shared/index.js +4 -0
  280. package/dist/components/shared/index.js.map +1 -0
  281. package/dist/handoff/catalog.test.d.ts +5 -0
  282. package/dist/handoff/catalog.test.d.ts.map +1 -0
  283. package/dist/handoff/catalog.test.js +172 -0
  284. package/dist/handoff/catalog.test.js.map +1 -0
  285. package/dist/handoff/subagents.test.d.ts +8 -0
  286. package/dist/handoff/subagents.test.d.ts.map +1 -0
  287. package/dist/handoff/subagents.test.js +139 -0
  288. package/dist/handoff/subagents.test.js.map +1 -0
  289. package/dist/hooks/useAddContextFlow.d.ts +29 -0
  290. package/dist/hooks/useAddContextFlow.d.ts.map +1 -0
  291. package/dist/hooks/useAddContextFlow.js +83 -0
  292. package/dist/hooks/useAddContextFlow.js.map +1 -0
  293. package/dist/hooks/useArchiveBrowser.d.ts +37 -0
  294. package/dist/hooks/useArchiveBrowser.d.ts.map +1 -0
  295. package/dist/hooks/useArchiveBrowser.js +175 -0
  296. package/dist/hooks/useArchiveBrowser.js.map +1 -0
  297. package/dist/hooks/useClaudeToken.d.ts +29 -0
  298. package/dist/hooks/useClaudeToken.d.ts.map +1 -0
  299. package/dist/hooks/useClaudeToken.js +166 -0
  300. package/dist/hooks/useClaudeToken.js.map +1 -0
  301. package/dist/hooks/useGoogleDocsBrowser.d.ts +29 -0
  302. package/dist/hooks/useGoogleDocsBrowser.d.ts.map +1 -0
  303. package/dist/hooks/useGoogleDocsBrowser.js +146 -0
  304. package/dist/hooks/useGoogleDocsBrowser.js.map +1 -0
  305. package/dist/hooks/useHandoffBrowser.d.ts +27 -0
  306. package/dist/hooks/useHandoffBrowser.d.ts.map +1 -0
  307. package/dist/hooks/useHandoffBrowser.js +92 -0
  308. package/dist/hooks/useHandoffBrowser.js.map +1 -0
  309. package/dist/hooks/useJacquesClient.d.ts +69 -0
  310. package/dist/hooks/useJacquesClient.d.ts.map +1 -0
  311. package/dist/hooks/useJacquesClient.js +248 -0
  312. package/dist/hooks/useJacquesClient.js.map +1 -0
  313. package/dist/hooks/useLlmWorking.d.ts +30 -0
  314. package/dist/hooks/useLlmWorking.d.ts.map +1 -0
  315. package/dist/hooks/useLlmWorking.js +127 -0
  316. package/dist/hooks/useLlmWorking.js.map +1 -0
  317. package/dist/hooks/useLoadContext.d.ts +27 -0
  318. package/dist/hooks/useLoadContext.d.ts.map +1 -0
  319. package/dist/hooks/useLoadContext.js +102 -0
  320. package/dist/hooks/useLoadContext.js.map +1 -0
  321. package/dist/hooks/useNotification.d.ts +36 -0
  322. package/dist/hooks/useNotification.d.ts.map +1 -0
  323. package/dist/hooks/useNotification.js +89 -0
  324. package/dist/hooks/useNotification.js.map +1 -0
  325. package/dist/hooks/useNotification.test.d.ts +9 -0
  326. package/dist/hooks/useNotification.test.d.ts.map +1 -0
  327. package/dist/hooks/useNotification.test.js +144 -0
  328. package/dist/hooks/useNotification.test.js.map +1 -0
  329. package/dist/hooks/useNotionBrowser.d.ts +30 -0
  330. package/dist/hooks/useNotionBrowser.d.ts.map +1 -0
  331. package/dist/hooks/useNotionBrowser.js +154 -0
  332. package/dist/hooks/useNotionBrowser.js.map +1 -0
  333. package/dist/hooks/useObsidianBrowser.d.ts +42 -0
  334. package/dist/hooks/useObsidianBrowser.d.ts.map +1 -0
  335. package/dist/hooks/useObsidianBrowser.js +63 -0
  336. package/dist/hooks/useObsidianBrowser.js.map +1 -0
  337. package/dist/hooks/useObsidianConfig.d.ts +28 -0
  338. package/dist/hooks/useObsidianConfig.d.ts.map +1 -0
  339. package/dist/hooks/useObsidianConfig.js +119 -0
  340. package/dist/hooks/useObsidianConfig.js.map +1 -0
  341. package/dist/hooks/useObsidianFileBrowser.d.ts +29 -0
  342. package/dist/hooks/useObsidianFileBrowser.d.ts.map +1 -0
  343. package/dist/hooks/useObsidianFileBrowser.js +114 -0
  344. package/dist/hooks/useObsidianFileBrowser.js.map +1 -0
  345. package/dist/hooks/useProjectDashboard.d.ts +38 -0
  346. package/dist/hooks/useProjectDashboard.d.ts.map +1 -0
  347. package/dist/hooks/useProjectDashboard.js +224 -0
  348. package/dist/hooks/useProjectDashboard.js.map +1 -0
  349. package/dist/hooks/useProjectSelector.d.ts +17 -0
  350. package/dist/hooks/useProjectSelector.d.ts.map +1 -0
  351. package/dist/hooks/useProjectSelector.js +43 -0
  352. package/dist/hooks/useProjectSelector.js.map +1 -0
  353. package/dist/hooks/useProjectSelector.test.d.ts +7 -0
  354. package/dist/hooks/useProjectSelector.test.d.ts.map +1 -0
  355. package/dist/hooks/useProjectSelector.test.js +117 -0
  356. package/dist/hooks/useProjectSelector.test.js.map +1 -0
  357. package/dist/hooks/useSaveFlow.d.ts +30 -0
  358. package/dist/hooks/useSaveFlow.d.ts.map +1 -0
  359. package/dist/hooks/useSaveFlow.js +195 -0
  360. package/dist/hooks/useSaveFlow.js.map +1 -0
  361. package/dist/hooks/useSessions.test.d.ts +7 -0
  362. package/dist/hooks/useSessions.test.d.ts.map +1 -0
  363. package/dist/hooks/useSessions.test.js +153 -0
  364. package/dist/hooks/useSessions.test.js.map +1 -0
  365. package/dist/hooks/useSessionsExperiment.d.ts +97 -0
  366. package/dist/hooks/useSessionsExperiment.d.ts.map +1 -0
  367. package/dist/hooks/useSessionsExperiment.js +321 -0
  368. package/dist/hooks/useSessionsExperiment.js.map +1 -0
  369. package/dist/hooks/useSettings.d.ts +47 -0
  370. package/dist/hooks/useSettings.d.ts.map +1 -0
  371. package/dist/hooks/useSettings.js +245 -0
  372. package/dist/hooks/useSettings.js.map +1 -0
  373. package/dist/hooks/useSetupWizard.d.ts +35 -0
  374. package/dist/hooks/useSetupWizard.d.ts.map +1 -0
  375. package/dist/hooks/useSetupWizard.js +438 -0
  376. package/dist/hooks/useSetupWizard.js.map +1 -0
  377. package/dist/hooks/useUsageLimits.d.ts +24 -0
  378. package/dist/hooks/useUsageLimits.d.ts.map +1 -0
  379. package/dist/hooks/useUsageLimits.js +58 -0
  380. package/dist/hooks/useUsageLimits.js.map +1 -0
  381. package/dist/hooks/useUsageLimits.test.d.ts +7 -0
  382. package/dist/hooks/useUsageLimits.test.d.ts.map +1 -0
  383. package/dist/hooks/useUsageLimits.test.js +136 -0
  384. package/dist/hooks/useUsageLimits.test.js.map +1 -0
  385. package/dist/hooks/useWorktrees.d.ts +28 -0
  386. package/dist/hooks/useWorktrees.d.ts.map +1 -0
  387. package/dist/hooks/useWorktrees.js +57 -0
  388. package/dist/hooks/useWorktrees.js.map +1 -0
  389. package/dist/hooks/useWorktrees.test.d.ts +7 -0
  390. package/dist/hooks/useWorktrees.test.d.ts.map +1 -0
  391. package/dist/hooks/useWorktrees.test.js +119 -0
  392. package/dist/hooks/useWorktrees.test.js.map +1 -0
  393. package/dist/templates/compact-prompt.d.ts +16 -0
  394. package/dist/templates/compact-prompt.d.ts.map +1 -0
  395. package/dist/templates/compact-prompt.js +47 -0
  396. package/dist/templates/compact-prompt.js.map +1 -0
  397. package/dist/templates/context-skill.d.ts +8 -0
  398. package/dist/templates/context-skill.d.ts.map +1 -0
  399. package/dist/templates/context-skill.js +42 -0
  400. package/dist/templates/context-skill.js.map +1 -0
  401. package/dist/types.d.ts +127 -0
  402. package/dist/types.d.ts.map +1 -0
  403. package/dist/types.js +8 -0
  404. package/dist/types.js.map +1 -0
  405. package/dist/utils/activity.d.ts +17 -0
  406. package/dist/utils/activity.d.ts.map +1 -0
  407. package/dist/utils/activity.js +78 -0
  408. package/dist/utils/activity.js.map +1 -0
  409. package/dist/utils/bottom-controls.d.ts +24 -0
  410. package/dist/utils/bottom-controls.d.ts.map +1 -0
  411. package/dist/utils/bottom-controls.js +29 -0
  412. package/dist/utils/bottom-controls.js.map +1 -0
  413. package/dist/utils/clipboard.d.ts +2 -0
  414. package/dist/utils/clipboard.d.ts.map +1 -0
  415. package/dist/utils/clipboard.js +20 -0
  416. package/dist/utils/clipboard.js.map +1 -0
  417. package/dist/utils/constants.d.ts +6 -0
  418. package/dist/utils/constants.d.ts.map +1 -0
  419. package/dist/utils/constants.js +6 -0
  420. package/dist/utils/constants.js.map +1 -0
  421. package/dist/utils/format.d.ts +17 -0
  422. package/dist/utils/format.d.ts.map +1 -0
  423. package/dist/utils/format.js +31 -0
  424. package/dist/utils/format.js.map +1 -0
  425. package/dist/utils/session-mode.d.ts +14 -0
  426. package/dist/utils/session-mode.d.ts.map +1 -0
  427. package/dist/utils/session-mode.js +29 -0
  428. package/dist/utils/session-mode.js.map +1 -0
  429. package/dist/utils/session-mode.test.d.ts +7 -0
  430. package/dist/utils/session-mode.test.d.ts.map +1 -0
  431. package/dist/utils/session-mode.test.js +102 -0
  432. package/dist/utils/session-mode.test.js.map +1 -0
  433. package/dist/utils/sessions-items-builder.d.ts +29 -0
  434. package/dist/utils/sessions-items-builder.d.ts.map +1 -0
  435. package/dist/utils/sessions-items-builder.js +394 -0
  436. package/dist/utils/sessions-items-builder.js.map +1 -0
  437. package/dist/utils/settings.d.ts +100 -0
  438. package/dist/utils/settings.d.ts.map +1 -0
  439. package/dist/utils/settings.js +206 -0
  440. package/dist/utils/settings.js.map +1 -0
  441. package/dist/websocket-client.d.ts +70 -0
  442. package/dist/websocket-client.d.ts.map +1 -0
  443. package/dist/websocket-client.js +188 -0
  444. package/dist/websocket-client.js.map +1 -0
  445. package/hooks/adapters/__init__.py +17 -0
  446. package/hooks/adapters/__pycache__/__init__.cpython-311.pyc +0 -0
  447. package/hooks/adapters/__pycache__/__init__.cpython-313.pyc +0 -0
  448. package/hooks/adapters/__pycache__/__init__.cpython-314.pyc +0 -0
  449. package/hooks/adapters/__pycache__/base.cpython-311.pyc +0 -0
  450. package/hooks/adapters/__pycache__/base.cpython-313.pyc +0 -0
  451. package/hooks/adapters/__pycache__/base.cpython-314.pyc +0 -0
  452. package/hooks/adapters/__pycache__/calibration.cpython-311.pyc +0 -0
  453. package/hooks/adapters/__pycache__/calibration.cpython-313.pyc +0 -0
  454. package/hooks/adapters/__pycache__/calibration.cpython-314.pyc +0 -0
  455. package/hooks/adapters/__pycache__/claude_code.cpython-311.pyc +0 -0
  456. package/hooks/adapters/__pycache__/claude_code.cpython-313.pyc +0 -0
  457. package/hooks/adapters/__pycache__/claude_code.cpython-314.pyc +0 -0
  458. package/hooks/adapters/__pycache__/cursor.cpython-311.pyc +0 -0
  459. package/hooks/adapters/__pycache__/cursor.cpython-313.pyc +0 -0
  460. package/hooks/adapters/__pycache__/cursor.cpython-314.pyc +0 -0
  461. package/hooks/adapters/__pycache__/skills.cpython-311.pyc +0 -0
  462. package/hooks/adapters/__pycache__/skills.cpython-313.pyc +0 -0
  463. package/hooks/adapters/__pycache__/skills.cpython-314.pyc +0 -0
  464. package/hooks/adapters/__pycache__/test_adapters.cpython-311-pytest-9.0.2.pyc +0 -0
  465. package/hooks/adapters/__pycache__/test_adapters.cpython-313.pyc +0 -0
  466. package/hooks/adapters/__pycache__/test_calibration.cpython-311-pytest-9.0.2.pyc +0 -0
  467. package/hooks/adapters/__pycache__/test_skills.cpython-311-pytest-9.0.2.pyc +0 -0
  468. package/hooks/adapters/__pycache__/test_tokenizer.cpython-311-pytest-9.0.2.pyc +0 -0
  469. package/hooks/adapters/__pycache__/tokenizer.cpython-311.pyc +0 -0
  470. package/hooks/adapters/__pycache__/tokenizer.cpython-313.pyc +0 -0
  471. package/hooks/adapters/__pycache__/tokenizer.cpython-314.pyc +0 -0
  472. package/hooks/adapters/base.py +459 -0
  473. package/hooks/adapters/calibration.py +236 -0
  474. package/hooks/adapters/claude_code.py +316 -0
  475. package/hooks/adapters/context_parser.py +288 -0
  476. package/hooks/adapters/cursor.py +258 -0
  477. package/hooks/adapters/skills.py +160 -0
  478. package/hooks/adapters/template.py +281 -0
  479. package/hooks/adapters/test_adapters.py +516 -0
  480. package/hooks/adapters/test_calibration.py +235 -0
  481. package/hooks/adapters/test_skills.py +162 -0
  482. package/hooks/adapters/test_tokenizer.py +158 -0
  483. package/hooks/adapters/tokenizer.py +192 -0
  484. package/hooks/claude-code/pre-tool-use.py +36 -0
  485. package/hooks/claude-code/register-session.py +35 -0
  486. package/hooks/claude-code/report-activity.py +32 -0
  487. package/hooks/claude-code/session-idle.py +32 -0
  488. package/hooks/claude-code/statusline.sh +91 -0
  489. package/hooks/claude-code/unregister-session.py +32 -0
  490. package/hooks/cursor/README.md +61 -0
  491. package/hooks/cursor/after-agent-response.py +97 -0
  492. package/hooks/cursor/hooks.json.template +30 -0
  493. package/hooks/cursor/post-tool-use.py +32 -0
  494. package/hooks/cursor/pre-compact.py +61 -0
  495. package/hooks/cursor/session-end.py +32 -0
  496. package/hooks/cursor/session-start.py +66 -0
  497. package/hooks/git-detect.sh +47 -0
  498. package/hooks/install.py +441 -0
  499. package/hooks/jacques-register-session.py +286 -0
  500. package/hooks/jacques-report-activity.py +145 -0
  501. package/hooks/jacques-session-idle.py +57 -0
  502. package/hooks/jacques-unregister-session.py +57 -0
  503. package/hooks/requirements.txt +9 -0
  504. package/hooks/statusline.py +457 -0
  505. package/hooks/statusline.sh +212 -0
  506. package/package.json +63 -0
  507. package/skills/jacques-continue/SKILL.md +87 -0
  508. package/skills/jacques-handoff/SKILL.md +147 -0
@@ -0,0 +1,321 @@
1
+ /**
2
+ * useSessionsExperiment Hook
3
+ *
4
+ * Scrollable list of active sessions grouped by worktree.
5
+ * Supports multi-select for tiling, vim-style keyboard navigation,
6
+ * new-session/new-worktree buttons, and worktree visibility toggle.
7
+ */
8
+ import { useState, useCallback, useMemo, useEffect } from "react";
9
+ import { validateWorktreeName } from "./useWorktrees.js";
10
+ import { buildSessionItems } from "../utils/sessions-items-builder.js";
11
+ export function useSessionsExperiment({ sessions, allProjects, worktrees, focusedSessionId, selectedProject, focusTerminal, maximizeWindow, tileWindows, launchSession, showNotification, returnToMain, createWorktreeWs, removeWorktreeWs, listWorktreesWs, worktreesByRepo, repoRoot, refreshWorktrees, createWorktreeResult, removeWorktreeResult, skipPermissions, }) {
12
+ const [selectedIndex, setSelectedIndex] = useState(0);
13
+ const [selectedIds, setSelectedIds] = useState(new Set());
14
+ const [showHelp, setShowHelp] = useState(true);
15
+ const [scrollBias, setScrollBias] = useState(0);
16
+ const [showAllWorktrees, setShowAllWorktrees] = useState(false);
17
+ const [isCreatingWorktree, setIsCreatingWorktree] = useState(false);
18
+ const [newWorktreeName, setNewWorktreeName] = useState("");
19
+ const [worktreeCreateError, setWorktreeCreateError] = useState(null);
20
+ const [creatingForRepoRoot, setCreatingForRepoRoot] = useState(null);
21
+ const [removingWorktreePath, setRemovingWorktreePath] = useState(null);
22
+ const [removeForce, setRemoveForce] = useState(false);
23
+ const [removeDeleteBranch, setRemoveDeleteBranch] = useState(true);
24
+ // Handle createWorktreeResult
25
+ useEffect(() => {
26
+ if (!createWorktreeResult)
27
+ return;
28
+ if (createWorktreeResult.success) {
29
+ showNotification(`Worktree created: ${createWorktreeResult.branch || newWorktreeName}`);
30
+ setIsCreatingWorktree(false);
31
+ setNewWorktreeName("");
32
+ setWorktreeCreateError(null);
33
+ }
34
+ else {
35
+ setWorktreeCreateError(createWorktreeResult.error || "Failed to create worktree");
36
+ }
37
+ }, [createWorktreeResult]); // eslint-disable-line react-hooks/exhaustive-deps
38
+ // Handle removeWorktreeResult
39
+ useEffect(() => {
40
+ if (!removeWorktreeResult)
41
+ return;
42
+ // useWorktrees already shows notification and refreshes the list
43
+ setRemovingWorktreePath(null);
44
+ setRemoveDeleteBranch(true);
45
+ setRemoveForce(false);
46
+ }, [removeWorktreeResult]);
47
+ // Sort sessions (focused first, then by registration time)
48
+ const sortedSessions = useMemo(() => {
49
+ const sorted = [...sessions];
50
+ sorted.sort((a, b) => {
51
+ if (a.session_id === focusedSessionId)
52
+ return -1;
53
+ if (b.session_id === focusedSessionId)
54
+ return 1;
55
+ return a.registered_at - b.registered_at;
56
+ });
57
+ return sorted;
58
+ }, [sessions, focusedSessionId]);
59
+ // Group sessions by project and build flat content list
60
+ const { items, selectableIndices } = useMemo(() => {
61
+ return buildSessionItems({
62
+ sortedSessions, allProjects, worktrees, selectedProject,
63
+ showAllWorktrees, isCreatingWorktree, removingWorktreePath,
64
+ repoRoot, worktreesByRepo,
65
+ });
66
+ }, [sortedSessions, worktrees, showAllWorktrees, repoRoot, isCreatingWorktree, removingWorktreePath, selectedProject, allProjects, worktreesByRepo]);
67
+ // Current selectable item's position in the items array
68
+ const currentItemIndex = selectableIndices[selectedIndex] ?? -1;
69
+ const handleInput = useCallback((input, key) => {
70
+ // Creation mode guard
71
+ if (isCreatingWorktree) {
72
+ if (key.escape) {
73
+ setIsCreatingWorktree(false);
74
+ setNewWorktreeName("");
75
+ setWorktreeCreateError(null);
76
+ setCreatingForRepoRoot(null);
77
+ return;
78
+ }
79
+ if (key.return) {
80
+ const validationError = validateWorktreeName(newWorktreeName);
81
+ if (validationError) {
82
+ setWorktreeCreateError(validationError);
83
+ return;
84
+ }
85
+ const targetRoot = creatingForRepoRoot || repoRoot;
86
+ if (targetRoot) {
87
+ createWorktreeWs(targetRoot, newWorktreeName, undefined, skipPermissions || undefined);
88
+ showNotification("Creating worktree...");
89
+ }
90
+ return;
91
+ }
92
+ if (key.backspace || key.delete) {
93
+ setNewWorktreeName((prev) => prev.slice(0, -1));
94
+ setWorktreeCreateError(null);
95
+ return;
96
+ }
97
+ if (input && input.length === 1 && !key.ctrl && !key.meta) {
98
+ setNewWorktreeName((prev) => prev + input);
99
+ setWorktreeCreateError(null);
100
+ return;
101
+ }
102
+ return;
103
+ }
104
+ // Remove confirmation mode guard
105
+ if (removingWorktreePath !== null) {
106
+ if (key.escape) {
107
+ setRemovingWorktreePath(null);
108
+ setRemoveDeleteBranch(true);
109
+ setRemoveForce(false);
110
+ return;
111
+ }
112
+ if (key.return) {
113
+ const item = items[currentItemIndex];
114
+ if (item?.kind === "remove-worktree-confirm") {
115
+ if (item.hasUncommittedChanges && !removeForce) {
116
+ showNotification("!Toggle [f]orce to remove with uncommitted changes");
117
+ return;
118
+ }
119
+ if (repoRoot) {
120
+ removeWorktreeWs(repoRoot, item.worktreePath, removeForce, removeDeleteBranch);
121
+ showNotification("Removing worktree...");
122
+ }
123
+ }
124
+ return;
125
+ }
126
+ if (input === "f" || input === "F") {
127
+ setRemoveForce((prev) => !prev);
128
+ return;
129
+ }
130
+ if (input === "b" || input === "B") {
131
+ setRemoveDeleteBranch((prev) => !prev);
132
+ return;
133
+ }
134
+ // Arrow keys cancel confirmation and fall through to normal navigation
135
+ if (key.upArrow || key.downArrow) {
136
+ setRemovingWorktreePath(null);
137
+ setRemoveDeleteBranch(true);
138
+ setRemoveForce(false);
139
+ // fall through
140
+ }
141
+ else {
142
+ return; // swallow other keys
143
+ }
144
+ }
145
+ if (key.escape) {
146
+ returnToMain();
147
+ return;
148
+ }
149
+ if (key.upArrow) {
150
+ if (selectedIndex > 0) {
151
+ setSelectedIndex((prev) => prev - 1);
152
+ setScrollBias(0);
153
+ }
154
+ else {
155
+ setScrollBias((prev) => prev + 1);
156
+ }
157
+ return;
158
+ }
159
+ if (key.downArrow) {
160
+ if (selectedIndex < selectableIndices.length - 1) {
161
+ setSelectedIndex((prev) => prev + 1);
162
+ setScrollBias(0);
163
+ }
164
+ else {
165
+ setScrollBias((prev) => prev - 1);
166
+ }
167
+ return;
168
+ }
169
+ // Any other key resets scroll bias
170
+ setScrollBias(0);
171
+ // Enter — context-dependent action
172
+ if (key.return) {
173
+ const item = items[currentItemIndex];
174
+ if (!item)
175
+ return;
176
+ if (item.kind === "session") {
177
+ showNotification("Focusing terminal...");
178
+ focusTerminal(item.session.session_id);
179
+ }
180
+ else if (item.kind === "new-session-button") {
181
+ showNotification("Launching new session...");
182
+ launchSession(item.worktreePath, skipPermissions || undefined);
183
+ }
184
+ else if (item.kind === "new-worktree-button") {
185
+ setIsCreatingWorktree(true);
186
+ setNewWorktreeName("");
187
+ setWorktreeCreateError(null);
188
+ setCreatingForRepoRoot(item.targetRepoRoot || null);
189
+ }
190
+ else if (item.kind === "remove-worktree-button") {
191
+ setRemovingWorktreePath(item.worktreePath);
192
+ setRemoveDeleteBranch(true);
193
+ setRemoveForce(false);
194
+ }
195
+ return;
196
+ }
197
+ // Space — toggle multi-select
198
+ if (input === " ") {
199
+ const item = items[currentItemIndex];
200
+ if (item?.kind === "session") {
201
+ setSelectedIds((prev) => {
202
+ const next = new Set(prev);
203
+ if (next.has(item.session.session_id)) {
204
+ next.delete(item.session.session_id);
205
+ }
206
+ else {
207
+ next.add(item.session.session_id);
208
+ }
209
+ return next;
210
+ });
211
+ }
212
+ return;
213
+ }
214
+ // f — maximize
215
+ if (input === "f") {
216
+ const item = items[currentItemIndex];
217
+ if (item?.kind === "session") {
218
+ showNotification("Maximizing window...");
219
+ maximizeWindow(item.session.session_id);
220
+ }
221
+ return;
222
+ }
223
+ // t — tile (needs 2+ selected)
224
+ if (input === "t") {
225
+ if (selectedIds.size >= 2) {
226
+ showNotification(`Tiling ${selectedIds.size} windows...`);
227
+ tileWindows(Array.from(selectedIds));
228
+ }
229
+ else {
230
+ showNotification("Select 2+ sessions with Space first");
231
+ }
232
+ return;
233
+ }
234
+ // n — new session in same directory
235
+ if (input === "n") {
236
+ const item = items[currentItemIndex];
237
+ if (item?.kind === "session") {
238
+ const cwd = item.session.cwd || item.session.workspace?.project_dir;
239
+ if (cwd) {
240
+ showNotification("Launching new session...");
241
+ launchSession(cwd, skipPermissions || undefined);
242
+ }
243
+ }
244
+ return;
245
+ }
246
+ // a — select all sessions
247
+ if (input === "a") {
248
+ const allIds = new Set();
249
+ for (const item of items) {
250
+ if (item.kind === "session")
251
+ allIds.add(item.session.session_id);
252
+ }
253
+ setSelectedIds(allIds);
254
+ return;
255
+ }
256
+ // d — toggle details (show/hide empty worktrees)
257
+ if (input === "d") {
258
+ setShowAllWorktrees((prev) => {
259
+ const next = !prev;
260
+ if (next) {
261
+ // Fetch worktrees for all git projects
262
+ for (const project of allProjects) {
263
+ if (project.gitRepoRoot) {
264
+ listWorktreesWs(project.gitRepoRoot);
265
+ }
266
+ }
267
+ }
268
+ return next;
269
+ });
270
+ refreshWorktrees();
271
+ return;
272
+ }
273
+ // h — toggle help/shortcuts
274
+ if (input === "h") {
275
+ setShowHelp((prev) => !prev);
276
+ return;
277
+ }
278
+ // x — clear selection
279
+ if (input === "x") {
280
+ setSelectedIds(new Set());
281
+ return;
282
+ }
283
+ }, [
284
+ selectableIndices, items, currentItemIndex, selectedIds, selectedIndex,
285
+ returnToMain, focusTerminal, maximizeWindow, tileWindows, launchSession,
286
+ showNotification, isCreatingWorktree, newWorktreeName, creatingForRepoRoot,
287
+ repoRoot, refreshWorktrees, createWorktreeWs, removeWorktreeWs, listWorktreesWs, skipPermissions,
288
+ removingWorktreePath, removeForce, removeDeleteBranch, allProjects,
289
+ ]);
290
+ const reset = useCallback(() => {
291
+ setSelectedIndex(0);
292
+ setSelectedIds(new Set());
293
+ setScrollBias(0);
294
+ setShowAllWorktrees(false);
295
+ setIsCreatingWorktree(false);
296
+ setNewWorktreeName("");
297
+ setWorktreeCreateError(null);
298
+ setCreatingForRepoRoot(null);
299
+ setRemovingWorktreePath(null);
300
+ setRemoveDeleteBranch(true);
301
+ setRemoveForce(false);
302
+ }, []);
303
+ return {
304
+ items,
305
+ selectableIndices,
306
+ selectedIndex,
307
+ selectedIds,
308
+ showHelp,
309
+ scrollBias,
310
+ isCreatingWorktree,
311
+ newWorktreeName,
312
+ worktreeCreateError,
313
+ creatingForRepoRoot,
314
+ isRemovingWorktree: removingWorktreePath !== null,
315
+ removeDeleteBranch,
316
+ removeForce,
317
+ handleInput,
318
+ reset,
319
+ };
320
+ }
321
+ //# sourceMappingURL=useSessionsExperiment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionsExperiment.js","sourceRoot":"","sources":["../../src/hooks/useSessionsExperiment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * useSettings Hook
3
+ *
4
+ * Manages settings view state: navigation, auto-archive toggle,
5
+ * skip-permissions toggle, sync operations, archive stats loading,
6
+ * and Claude token input delegation.
7
+ */
8
+ import type { Key } from "ink";
9
+ import type { DashboardView } from "../components/Dashboard.js";
10
+ import type { NotificationSettings } from "@jacques-ai/core/notifications";
11
+ import type { ArchiveStatsData } from "../components/SettingsView.js";
12
+ export interface ClaudeTokenActions {
13
+ isInputMode: boolean;
14
+ handleInput: (input: string, key: Key) => void;
15
+ connected: boolean;
16
+ disconnect: () => void;
17
+ enterInputMode: () => void;
18
+ }
19
+ export interface UseSettingsParams {
20
+ setCurrentView: (view: DashboardView) => void;
21
+ showNotification: (msg: string, duration?: number) => void;
22
+ returnToMain: () => void;
23
+ onInitArchive: (options: {
24
+ force: boolean;
25
+ }) => Promise<void>;
26
+ onBrowseArchive: () => void;
27
+ }
28
+ export interface UseSettingsState {
29
+ index: number;
30
+ scrollOffset: number;
31
+ autoArchiveEnabled: boolean;
32
+ skipPermissions: boolean;
33
+ syncProgress: string | null;
34
+ archiveStats: ArchiveStatsData | null;
35
+ archiveStatsLoading: boolean;
36
+ notificationSettings: NotificationSettings;
37
+ notificationsLoading: boolean;
38
+ }
39
+ export interface UseSettingsReturn {
40
+ state: UseSettingsState;
41
+ open: () => void;
42
+ reloadStats: () => void;
43
+ handleInput: (input: string, key: Key, claudeToken: ClaudeTokenActions) => void;
44
+ reset: () => void;
45
+ }
46
+ export declare function useSettings({ setCurrentView, showNotification, returnToMain, onInitArchive, onBrowseArchive, }: UseSettingsParams): UseSettingsReturn;
47
+ //# sourceMappingURL=useSettings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSettings.d.ts","sourceRoot":"","sources":["../../src/hooks/useSettings.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAShE,OAAO,KAAK,EAAE,oBAAoB,EAAwB,MAAM,gCAAgC,CAAC;AAGjG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,gBAAgB,CAAC;IACxB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAChF,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAID,wBAAgB,WAAW,CAAC,EAC1B,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,EAAE,iBAAiB,GAAG,iBAAiB,CA0OvC"}
@@ -0,0 +1,245 @@
1
+ /**
2
+ * useSettings Hook
3
+ *
4
+ * Manages settings view state: navigation, auto-archive toggle,
5
+ * skip-permissions toggle, sync operations, archive stats loading,
6
+ * and Claude token input delegation.
7
+ */
8
+ import { useState, useCallback } from "react";
9
+ import { getArchiveSettings, toggleAutoArchive, getArchiveStats, getArchivePath, getSkipPermissions, toggleSkipPermissions, } from "@jacques-ai/core";
10
+ import { DEFAULT_NOTIFICATION_SETTINGS } from "@jacques-ai/core/notifications";
11
+ import { SETTINGS_TOTAL_ITEMS, SETTINGS_DISABLED_INDICES } from "../components/SettingsView.js";
12
+ const API_BASE = "http://localhost:4243";
13
+ export function useSettings({ setCurrentView, showNotification, returnToMain, onInitArchive, onBrowseArchive, }) {
14
+ const [settingsIndex, setSettingsIndex] = useState(0);
15
+ const [settingsScrollOffset, setSettingsScrollOffset] = useState(0);
16
+ const [autoArchiveEnabled, setAutoArchiveEnabled] = useState(false);
17
+ const [skipPermissions, setSkipPermissions] = useState(getSkipPermissions());
18
+ const [syncProgress, setSyncProgress] = useState(null);
19
+ const [archiveStats, setArchiveStats] = useState(null);
20
+ const [archiveStatsLoading, setArchiveStatsLoading] = useState(false);
21
+ const [notificationSettings, setNotificationSettings] = useState(DEFAULT_NOTIFICATION_SETTINGS);
22
+ const [notificationsLoading, setNotificationsLoading] = useState(false);
23
+ const open = useCallback(() => {
24
+ const settings = getArchiveSettings();
25
+ setAutoArchiveEnabled(settings.autoArchive);
26
+ setSkipPermissions(getSkipPermissions());
27
+ setSettingsIndex(0);
28
+ setSettingsScrollOffset(0);
29
+ setCurrentView("settings");
30
+ // Load notification settings from server
31
+ setNotificationsLoading(true);
32
+ fetch(`${API_BASE}/api/notifications/settings`)
33
+ .then(res => res.ok ? res.json() : Promise.reject(new Error(`HTTP ${res.status}`)))
34
+ .then((settings) => {
35
+ setNotificationSettings(settings);
36
+ setNotificationsLoading(false);
37
+ })
38
+ .catch(() => {
39
+ setNotificationsLoading(false);
40
+ });
41
+ // Load archive stats asynchronously
42
+ setArchiveStatsLoading(true);
43
+ getArchiveStats().then((stats) => {
44
+ setArchiveStats({
45
+ totalConversations: stats.totalConversations,
46
+ totalProjects: stats.totalProjects,
47
+ totalSize: stats.sizeFormatted,
48
+ archivePath: getArchivePath(),
49
+ });
50
+ setArchiveStatsLoading(false);
51
+ }).catch(() => {
52
+ setArchiveStats(null);
53
+ setArchiveStatsLoading(false);
54
+ });
55
+ }, [setCurrentView]);
56
+ const reloadStats = useCallback(() => {
57
+ getArchiveStats().then((stats) => {
58
+ setArchiveStats({
59
+ totalConversations: stats.totalConversations,
60
+ totalProjects: stats.totalProjects,
61
+ totalSize: stats.sizeFormatted,
62
+ archivePath: getArchivePath(),
63
+ });
64
+ });
65
+ }, []);
66
+ // Sync via SSE
67
+ const startSync = useCallback((force) => {
68
+ setSyncProgress("Starting sync...");
69
+ const url = `${API_BASE}/api/sync${force ? "?force=true" : ""}`;
70
+ fetch(url, { method: "POST" })
71
+ .then(async (res) => {
72
+ if (!res.ok)
73
+ throw new Error(`HTTP ${res.status}`);
74
+ if (!res.body) {
75
+ setSyncProgress(null);
76
+ showNotification("Sync complete");
77
+ return;
78
+ }
79
+ const reader = res.body.getReader();
80
+ const decoder = new TextDecoder();
81
+ let buffer = "";
82
+ while (true) {
83
+ const { done, value } = await reader.read();
84
+ if (done)
85
+ break;
86
+ buffer += decoder.decode(value, { stream: true });
87
+ // Parse SSE lines
88
+ const lines = buffer.split("\n");
89
+ buffer = lines.pop() || "";
90
+ for (const line of lines) {
91
+ if (line.startsWith("data: ")) {
92
+ try {
93
+ const data = JSON.parse(line.slice(6));
94
+ if (data.type === "progress") {
95
+ setSyncProgress(`Extracting: ${data.current}/${data.total}...`);
96
+ }
97
+ else if (data.type === "complete") {
98
+ setSyncProgress(null);
99
+ showNotification(`Sync complete: ${data.extracted || 0} extracted`);
100
+ reloadStats();
101
+ }
102
+ }
103
+ catch {
104
+ // Skip malformed lines
105
+ }
106
+ }
107
+ }
108
+ }
109
+ setSyncProgress(null);
110
+ })
111
+ .catch((err) => {
112
+ setSyncProgress(null);
113
+ showNotification(`!Sync failed: ${err instanceof Error ? err.message : "unknown"}`);
114
+ });
115
+ }, [showNotification, reloadStats]);
116
+ const handleInput = useCallback((input, key, claudeToken) => {
117
+ if (claudeToken.isInputMode) {
118
+ claudeToken.handleInput(input, key);
119
+ return;
120
+ }
121
+ if (key.escape) {
122
+ returnToMain();
123
+ return;
124
+ }
125
+ // Row positions for scrolling (approximate row in contentLines for each selectable item)
126
+ // 0-5: existing items, 6: master toggle, 7-12: category toggles (8,12 disabled)
127
+ const SETTINGS_ROW_MAP = [4, 8, 9, 12, 13, 16, 19, 20, 21, 22, 23, 24, 25];
128
+ const VISIBLE_HEIGHT = 10;
129
+ const TOTAL_CONTENT_LINES = 27;
130
+ if (key.upArrow) {
131
+ let newIndex = settingsIndex - 1;
132
+ while (newIndex >= 0 && SETTINGS_DISABLED_INDICES.has(newIndex))
133
+ newIndex--;
134
+ newIndex = Math.max(0, newIndex);
135
+ setSettingsIndex(newIndex);
136
+ if (newIndex === 0) {
137
+ setSettingsScrollOffset(0);
138
+ }
139
+ else {
140
+ const targetRow = SETTINGS_ROW_MAP[newIndex];
141
+ if (targetRow < settingsScrollOffset + 2) {
142
+ setSettingsScrollOffset(Math.max(0, targetRow - 2));
143
+ }
144
+ }
145
+ return;
146
+ }
147
+ if (key.downArrow) {
148
+ let newIndex = settingsIndex + 1;
149
+ while (newIndex < SETTINGS_TOTAL_ITEMS && SETTINGS_DISABLED_INDICES.has(newIndex))
150
+ newIndex++;
151
+ newIndex = Math.min(SETTINGS_TOTAL_ITEMS - 1, newIndex);
152
+ setSettingsIndex(newIndex);
153
+ const targetRow = SETTINGS_ROW_MAP[newIndex];
154
+ if (targetRow >= settingsScrollOffset + VISIBLE_HEIGHT - 2) {
155
+ const maxScroll = Math.max(0, TOTAL_CONTENT_LINES - VISIBLE_HEIGHT);
156
+ setSettingsScrollOffset(Math.min(maxScroll, targetRow - VISIBLE_HEIGHT + 4));
157
+ }
158
+ return;
159
+ }
160
+ if (key.return || input === " ") {
161
+ if (settingsIndex === 0) {
162
+ if (claudeToken.connected) {
163
+ claudeToken.disconnect();
164
+ showNotification("Claude disconnected");
165
+ }
166
+ else {
167
+ claudeToken.enterInputMode();
168
+ }
169
+ }
170
+ else if (settingsIndex === 1) {
171
+ const newValue = toggleAutoArchive();
172
+ setAutoArchiveEnabled(newValue);
173
+ }
174
+ else if (settingsIndex === 2) {
175
+ const newValue = toggleSkipPermissions();
176
+ setSkipPermissions(newValue);
177
+ }
178
+ else if (settingsIndex === 3) {
179
+ startSync(false);
180
+ }
181
+ else if (settingsIndex === 4) {
182
+ startSync(true);
183
+ }
184
+ else if (settingsIndex === 5) {
185
+ onBrowseArchive();
186
+ }
187
+ else if (settingsIndex === 6) {
188
+ // Master notifications toggle
189
+ const newEnabled = !notificationSettings.enabled;
190
+ setNotificationSettings(prev => ({ ...prev, enabled: newEnabled }));
191
+ fetch(`${API_BASE}/api/notifications/settings`, {
192
+ method: "PUT",
193
+ headers: { "Content-Type": "application/json" },
194
+ body: JSON.stringify({ enabled: newEnabled }),
195
+ }).catch(() => {
196
+ setNotificationSettings(prev => ({ ...prev, enabled: !newEnabled }));
197
+ showNotification("!Failed to update notifications");
198
+ });
199
+ }
200
+ else if (settingsIndex >= 7 && settingsIndex <= 12 && !SETTINGS_DISABLED_INDICES.has(settingsIndex)) {
201
+ // Category toggles
202
+ const categories = ["context", "operation", "plan", "auto-compact", "handoff", "bug-alert"];
203
+ const cat = categories[settingsIndex - 7];
204
+ const newValue = !notificationSettings.categories[cat];
205
+ const newCategories = { ...notificationSettings.categories, [cat]: newValue };
206
+ setNotificationSettings(prev => ({ ...prev, categories: newCategories }));
207
+ fetch(`${API_BASE}/api/notifications/settings`, {
208
+ method: "PUT",
209
+ headers: { "Content-Type": "application/json" },
210
+ body: JSON.stringify({ categories: newCategories }),
211
+ }).catch(() => {
212
+ setNotificationSettings(prev => ({
213
+ ...prev,
214
+ categories: { ...prev.categories, [cat]: !newValue },
215
+ }));
216
+ showNotification("!Failed to update category");
217
+ });
218
+ }
219
+ return;
220
+ }
221
+ }, [settingsIndex, settingsScrollOffset, returnToMain, showNotification, onBrowseArchive, startSync, notificationSettings]);
222
+ const reset = useCallback(() => {
223
+ setSettingsIndex(0);
224
+ setSettingsScrollOffset(0);
225
+ setSyncProgress(null);
226
+ }, []);
227
+ return {
228
+ state: {
229
+ index: settingsIndex,
230
+ scrollOffset: settingsScrollOffset,
231
+ autoArchiveEnabled,
232
+ skipPermissions,
233
+ syncProgress,
234
+ archiveStats,
235
+ archiveStatsLoading,
236
+ notificationSettings,
237
+ notificationsLoading,
238
+ },
239
+ open,
240
+ reloadStats,
241
+ handleInput,
242
+ reset,
243
+ };
244
+ }
245
+ //# sourceMappingURL=useSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSettings.js","sourceRoot":"","sources":["../../src/hooks/useSettings.ts"],"names":[],"mappings":"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"}