@jacques-ai/server 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 (384) hide show
  1. package/dist/config/config.d.ts +34 -0
  2. package/dist/config/config.d.ts.map +1 -0
  3. package/dist/config/config.js +32 -0
  4. package/dist/config/config.js.map +1 -0
  5. package/dist/connection/applescript.d.ts +46 -0
  6. package/dist/connection/applescript.d.ts.map +1 -0
  7. package/dist/connection/applescript.js +62 -0
  8. package/dist/connection/applescript.js.map +1 -0
  9. package/dist/connection/applescript.test.d.ts +5 -0
  10. package/dist/connection/applescript.test.d.ts.map +1 -0
  11. package/dist/connection/applescript.test.js +64 -0
  12. package/dist/connection/applescript.test.js.map +1 -0
  13. package/dist/connection/constants.d.ts +88 -0
  14. package/dist/connection/constants.d.ts.map +1 -0
  15. package/dist/connection/constants.js +110 -0
  16. package/dist/connection/constants.js.map +1 -0
  17. package/dist/connection/git-info.d.ts +30 -0
  18. package/dist/connection/git-info.d.ts.map +1 -0
  19. package/dist/connection/git-info.js +52 -0
  20. package/dist/connection/git-info.js.map +1 -0
  21. package/dist/connection/git-info.test.d.ts +5 -0
  22. package/dist/connection/git-info.test.d.ts.map +1 -0
  23. package/dist/connection/git-info.test.js +35 -0
  24. package/dist/connection/git-info.test.js.map +1 -0
  25. package/dist/connection/index.d.ts +19 -0
  26. package/dist/connection/index.d.ts.map +1 -0
  27. package/dist/connection/index.js +36 -0
  28. package/dist/connection/index.js.map +1 -0
  29. package/dist/connection/process-detection.d.ts +58 -0
  30. package/dist/connection/process-detection.d.ts.map +1 -0
  31. package/dist/connection/process-detection.js +239 -0
  32. package/dist/connection/process-detection.js.map +1 -0
  33. package/dist/connection/process-detection.test.d.ts +5 -0
  34. package/dist/connection/process-detection.test.d.ts.map +1 -0
  35. package/dist/connection/process-detection.test.js +43 -0
  36. package/dist/connection/process-detection.test.js.map +1 -0
  37. package/dist/connection/session-discovery.d.ts +55 -0
  38. package/dist/connection/session-discovery.d.ts.map +1 -0
  39. package/dist/connection/session-discovery.js +311 -0
  40. package/dist/connection/session-discovery.js.map +1 -0
  41. package/dist/connection/terminal-key.d.ts +126 -0
  42. package/dist/connection/terminal-key.d.ts.map +1 -0
  43. package/dist/connection/terminal-key.js +271 -0
  44. package/dist/connection/terminal-key.js.map +1 -0
  45. package/dist/connection/terminal-key.test.d.ts +5 -0
  46. package/dist/connection/terminal-key.test.d.ts.map +1 -0
  47. package/dist/connection/terminal-key.test.js +221 -0
  48. package/dist/connection/terminal-key.test.js.map +1 -0
  49. package/dist/connection/worktree.d.ts +114 -0
  50. package/dist/connection/worktree.d.ts.map +1 -0
  51. package/dist/connection/worktree.js +320 -0
  52. package/dist/connection/worktree.js.map +1 -0
  53. package/dist/connection/worktree.test.d.ts +5 -0
  54. package/dist/connection/worktree.test.d.ts.map +1 -0
  55. package/dist/connection/worktree.test.js +113 -0
  56. package/dist/connection/worktree.test.js.map +1 -0
  57. package/dist/focus-watcher.d.ts +51 -0
  58. package/dist/focus-watcher.d.ts.map +1 -0
  59. package/dist/focus-watcher.js +169 -0
  60. package/dist/focus-watcher.js.map +1 -0
  61. package/dist/handlers/event-handler.d.ts +93 -0
  62. package/dist/handlers/event-handler.d.ts.map +1 -0
  63. package/dist/handlers/event-handler.js +196 -0
  64. package/dist/handlers/event-handler.js.map +1 -0
  65. package/dist/handlers/event-handler.test.d.ts +5 -0
  66. package/dist/handlers/event-handler.test.d.ts.map +1 -0
  67. package/dist/handlers/event-handler.test.js +305 -0
  68. package/dist/handlers/event-handler.test.js.map +1 -0
  69. package/dist/handlers/session-handler.d.ts +23 -0
  70. package/dist/handlers/session-handler.d.ts.map +1 -0
  71. package/dist/handlers/session-handler.js +104 -0
  72. package/dist/handlers/session-handler.js.map +1 -0
  73. package/dist/handlers/session-handler.test.d.ts +5 -0
  74. package/dist/handlers/session-handler.test.d.ts.map +1 -0
  75. package/dist/handlers/session-handler.test.js +89 -0
  76. package/dist/handlers/session-handler.test.js.map +1 -0
  77. package/dist/handlers/settings-handler.d.ts +32 -0
  78. package/dist/handlers/settings-handler.d.ts.map +1 -0
  79. package/dist/handlers/settings-handler.js +127 -0
  80. package/dist/handlers/settings-handler.js.map +1 -0
  81. package/dist/handlers/settings-handler.test.d.ts +5 -0
  82. package/dist/handlers/settings-handler.test.d.ts.map +1 -0
  83. package/dist/handlers/settings-handler.test.js +105 -0
  84. package/dist/handlers/settings-handler.test.js.map +1 -0
  85. package/dist/handlers/window-handler.d.ts +30 -0
  86. package/dist/handlers/window-handler.d.ts.map +1 -0
  87. package/dist/handlers/window-handler.js +486 -0
  88. package/dist/handlers/window-handler.js.map +1 -0
  89. package/dist/handlers/window-handler.test.d.ts +8 -0
  90. package/dist/handlers/window-handler.test.d.ts.map +1 -0
  91. package/dist/handlers/window-handler.test.js +167 -0
  92. package/dist/handlers/window-handler.test.js.map +1 -0
  93. package/dist/handlers/worktree-handler.d.ts +28 -0
  94. package/dist/handlers/worktree-handler.d.ts.map +1 -0
  95. package/dist/handlers/worktree-handler.js +268 -0
  96. package/dist/handlers/worktree-handler.js.map +1 -0
  97. package/dist/handlers/worktree-handler.test.d.ts +8 -0
  98. package/dist/handlers/worktree-handler.test.d.ts.map +1 -0
  99. package/dist/handlers/worktree-handler.test.js +118 -0
  100. package/dist/handlers/worktree-handler.test.js.map +1 -0
  101. package/dist/handlers/ws-utils.d.ts +12 -0
  102. package/dist/handlers/ws-utils.d.ts.map +1 -0
  103. package/dist/handlers/ws-utils.js +16 -0
  104. package/dist/handlers/ws-utils.js.map +1 -0
  105. package/dist/http-api.d.ts +26 -0
  106. package/dist/http-api.d.ts.map +1 -0
  107. package/dist/http-api.js +148 -0
  108. package/dist/http-api.js.map +1 -0
  109. package/dist/logger.d.ts +42 -0
  110. package/dist/logger.d.ts.map +1 -0
  111. package/dist/logger.js +147 -0
  112. package/dist/logger.js.map +1 -0
  113. package/dist/logging/logger-factory.d.ts +51 -0
  114. package/dist/logging/logger-factory.d.ts.map +1 -0
  115. package/dist/logging/logger-factory.js +59 -0
  116. package/dist/logging/logger-factory.js.map +1 -0
  117. package/dist/mcp/search-tool.d.ts +65 -0
  118. package/dist/mcp/search-tool.d.ts.map +1 -0
  119. package/dist/mcp/search-tool.js +176 -0
  120. package/dist/mcp/search-tool.js.map +1 -0
  121. package/dist/mcp/server.d.ts +9 -0
  122. package/dist/mcp/server.d.ts.map +1 -0
  123. package/dist/mcp/server.js +152 -0
  124. package/dist/mcp/server.js.map +1 -0
  125. package/dist/process-scanner.d.ts +96 -0
  126. package/dist/process-scanner.d.ts.map +1 -0
  127. package/dist/process-scanner.js +194 -0
  128. package/dist/process-scanner.js.map +1 -0
  129. package/dist/routes/__tests__/archive-routes.test.d.ts +5 -0
  130. package/dist/routes/__tests__/archive-routes.test.d.ts.map +1 -0
  131. package/dist/routes/__tests__/archive-routes.test.js +158 -0
  132. package/dist/routes/__tests__/archive-routes.test.js.map +1 -0
  133. package/dist/routes/__tests__/config-routes.test.d.ts +5 -0
  134. package/dist/routes/__tests__/config-routes.test.d.ts.map +1 -0
  135. package/dist/routes/__tests__/config-routes.test.js +112 -0
  136. package/dist/routes/__tests__/config-routes.test.js.map +1 -0
  137. package/dist/routes/__tests__/http-utils.test.d.ts +5 -0
  138. package/dist/routes/__tests__/http-utils.test.d.ts.map +1 -0
  139. package/dist/routes/__tests__/http-utils.test.js +102 -0
  140. package/dist/routes/__tests__/http-utils.test.js.map +1 -0
  141. package/dist/routes/__tests__/notification-routes.test.d.ts +5 -0
  142. package/dist/routes/__tests__/notification-routes.test.d.ts.map +1 -0
  143. package/dist/routes/__tests__/notification-routes.test.js +91 -0
  144. package/dist/routes/__tests__/notification-routes.test.js.map +1 -0
  145. package/dist/routes/__tests__/project-routes.test.d.ts +5 -0
  146. package/dist/routes/__tests__/project-routes.test.d.ts.map +1 -0
  147. package/dist/routes/__tests__/project-routes.test.js +168 -0
  148. package/dist/routes/__tests__/project-routes.test.js.map +1 -0
  149. package/dist/routes/__tests__/session-routes.test.d.ts +5 -0
  150. package/dist/routes/__tests__/session-routes.test.d.ts.map +1 -0
  151. package/dist/routes/__tests__/session-routes.test.js +198 -0
  152. package/dist/routes/__tests__/session-routes.test.js.map +1 -0
  153. package/dist/routes/__tests__/source-routes.test.d.ts +5 -0
  154. package/dist/routes/__tests__/source-routes.test.d.ts.map +1 -0
  155. package/dist/routes/__tests__/source-routes.test.js +142 -0
  156. package/dist/routes/__tests__/source-routes.test.js.map +1 -0
  157. package/dist/routes/__tests__/sync-routes.test.d.ts +5 -0
  158. package/dist/routes/__tests__/sync-routes.test.d.ts.map +1 -0
  159. package/dist/routes/__tests__/sync-routes.test.js +77 -0
  160. package/dist/routes/__tests__/sync-routes.test.js.map +1 -0
  161. package/dist/routes/__tests__/test-helpers.d.ts +47 -0
  162. package/dist/routes/__tests__/test-helpers.d.ts.map +1 -0
  163. package/dist/routes/__tests__/test-helpers.js +97 -0
  164. package/dist/routes/__tests__/test-helpers.js.map +1 -0
  165. package/dist/routes/archive-routes.d.ts +15 -0
  166. package/dist/routes/archive-routes.d.ts.map +1 -0
  167. package/dist/routes/archive-routes.js +181 -0
  168. package/dist/routes/archive-routes.js.map +1 -0
  169. package/dist/routes/claude-routes.d.ts +9 -0
  170. package/dist/routes/claude-routes.d.ts.map +1 -0
  171. package/dist/routes/claude-routes.js +47 -0
  172. package/dist/routes/claude-routes.js.map +1 -0
  173. package/dist/routes/config-routes.d.ts +9 -0
  174. package/dist/routes/config-routes.d.ts.map +1 -0
  175. package/dist/routes/config-routes.js +56 -0
  176. package/dist/routes/config-routes.js.map +1 -0
  177. package/dist/routes/config-store.d.ts +41 -0
  178. package/dist/routes/config-store.d.ts.map +1 -0
  179. package/dist/routes/config-store.js +52 -0
  180. package/dist/routes/config-store.js.map +1 -0
  181. package/dist/routes/http-utils.d.ts +32 -0
  182. package/dist/routes/http-utils.d.ts.map +1 -0
  183. package/dist/routes/http-utils.js +123 -0
  184. package/dist/routes/http-utils.js.map +1 -0
  185. package/dist/routes/index.d.ts +19 -0
  186. package/dist/routes/index.d.ts.map +1 -0
  187. package/dist/routes/index.js +17 -0
  188. package/dist/routes/index.js.map +1 -0
  189. package/dist/routes/notification-routes.d.ts +10 -0
  190. package/dist/routes/notification-routes.d.ts.map +1 -0
  191. package/dist/routes/notification-routes.js +64 -0
  192. package/dist/routes/notification-routes.js.map +1 -0
  193. package/dist/routes/project-routes.d.ts +22 -0
  194. package/dist/routes/project-routes.d.ts.map +1 -0
  195. package/dist/routes/project-routes.js +415 -0
  196. package/dist/routes/project-routes.js.map +1 -0
  197. package/dist/routes/session-routes.d.ts +18 -0
  198. package/dist/routes/session-routes.d.ts.map +1 -0
  199. package/dist/routes/session-routes.js +609 -0
  200. package/dist/routes/session-routes.js.map +1 -0
  201. package/dist/routes/source-routes.d.ts +12 -0
  202. package/dist/routes/source-routes.d.ts.map +1 -0
  203. package/dist/routes/source-routes.js +119 -0
  204. package/dist/routes/source-routes.js.map +1 -0
  205. package/dist/routes/static-routes.d.ts +12 -0
  206. package/dist/routes/static-routes.d.ts.map +1 -0
  207. package/dist/routes/static-routes.js +52 -0
  208. package/dist/routes/static-routes.js.map +1 -0
  209. package/dist/routes/sync-routes.d.ts +9 -0
  210. package/dist/routes/sync-routes.d.ts.map +1 -0
  211. package/dist/routes/sync-routes.js +78 -0
  212. package/dist/routes/sync-routes.js.map +1 -0
  213. package/dist/routes/tile-routes.d.ts +10 -0
  214. package/dist/routes/tile-routes.d.ts.map +1 -0
  215. package/dist/routes/tile-routes.js +108 -0
  216. package/dist/routes/tile-routes.js.map +1 -0
  217. package/dist/routes/types.d.ts +17 -0
  218. package/dist/routes/types.d.ts.map +1 -0
  219. package/dist/routes/types.js +5 -0
  220. package/dist/routes/types.js.map +1 -0
  221. package/dist/routes/usage-routes.d.ts +8 -0
  222. package/dist/routes/usage-routes.d.ts.map +1 -0
  223. package/dist/routes/usage-routes.js +18 -0
  224. package/dist/routes/usage-routes.js.map +1 -0
  225. package/dist/server.d.ts +8 -0
  226. package/dist/server.d.ts.map +1 -0
  227. package/dist/server.js +173 -0
  228. package/dist/server.js.map +1 -0
  229. package/dist/services/branch-divergence-service.d.ts +48 -0
  230. package/dist/services/branch-divergence-service.d.ts.map +1 -0
  231. package/dist/services/branch-divergence-service.js +156 -0
  232. package/dist/services/branch-divergence-service.js.map +1 -0
  233. package/dist/services/broadcast-service.d.ts +68 -0
  234. package/dist/services/broadcast-service.d.ts.map +1 -0
  235. package/dist/services/broadcast-service.js +78 -0
  236. package/dist/services/broadcast-service.js.map +1 -0
  237. package/dist/services/broadcast-service.test.d.ts +5 -0
  238. package/dist/services/broadcast-service.test.d.ts.map +1 -0
  239. package/dist/services/broadcast-service.test.js +130 -0
  240. package/dist/services/broadcast-service.test.js.map +1 -0
  241. package/dist/services/chat-service.d.ts +72 -0
  242. package/dist/services/chat-service.d.ts.map +1 -0
  243. package/dist/services/chat-service.js +342 -0
  244. package/dist/services/chat-service.js.map +1 -0
  245. package/dist/services/chat-system-prompt.d.ts +14 -0
  246. package/dist/services/chat-system-prompt.d.ts.map +1 -0
  247. package/dist/services/chat-system-prompt.js +68 -0
  248. package/dist/services/chat-system-prompt.js.map +1 -0
  249. package/dist/services/notification-service.d.ts +115 -0
  250. package/dist/services/notification-service.d.ts.map +1 -0
  251. package/dist/services/notification-service.js +424 -0
  252. package/dist/services/notification-service.js.map +1 -0
  253. package/dist/services/notification-service.test.d.ts +5 -0
  254. package/dist/services/notification-service.test.d.ts.map +1 -0
  255. package/dist/services/notification-service.test.js +918 -0
  256. package/dist/services/notification-service.test.js.map +1 -0
  257. package/dist/session/cleanup-service.d.ts +51 -0
  258. package/dist/session/cleanup-service.d.ts.map +1 -0
  259. package/dist/session/cleanup-service.js +98 -0
  260. package/dist/session/cleanup-service.js.map +1 -0
  261. package/dist/session/cleanup-service.test.d.ts +5 -0
  262. package/dist/session/cleanup-service.test.d.ts.map +1 -0
  263. package/dist/session/cleanup-service.test.js +121 -0
  264. package/dist/session/cleanup-service.test.js.map +1 -0
  265. package/dist/session/process-monitor.d.ts +79 -0
  266. package/dist/session/process-monitor.d.ts.map +1 -0
  267. package/dist/session/process-monitor.js +270 -0
  268. package/dist/session/process-monitor.js.map +1 -0
  269. package/dist/session/process-monitor.test.d.ts +5 -0
  270. package/dist/session/process-monitor.test.d.ts.map +1 -0
  271. package/dist/session/process-monitor.test.js +367 -0
  272. package/dist/session/process-monitor.test.js.map +1 -0
  273. package/dist/session/session-factory.d.ts +29 -0
  274. package/dist/session/session-factory.d.ts.map +1 -0
  275. package/dist/session/session-factory.js +123 -0
  276. package/dist/session/session-factory.js.map +1 -0
  277. package/dist/session/session-factory.test.d.ts +5 -0
  278. package/dist/session/session-factory.test.d.ts.map +1 -0
  279. package/dist/session/session-factory.test.js +299 -0
  280. package/dist/session/session-factory.test.js.map +1 -0
  281. package/dist/session-registry.d.ts +168 -0
  282. package/dist/session-registry.d.ts.map +1 -0
  283. package/dist/session-registry.js +626 -0
  284. package/dist/session-registry.js.map +1 -0
  285. package/dist/session-registry.test.d.ts +5 -0
  286. package/dist/session-registry.test.d.ts.map +1 -0
  287. package/dist/session-registry.test.js +582 -0
  288. package/dist/session-registry.test.js.map +1 -0
  289. package/dist/start-server.d.ts +31 -0
  290. package/dist/start-server.d.ts.map +1 -0
  291. package/dist/start-server.js +408 -0
  292. package/dist/start-server.js.map +1 -0
  293. package/dist/terminal-activator.d.ts +29 -0
  294. package/dist/terminal-activator.d.ts.map +1 -0
  295. package/dist/terminal-activator.js +264 -0
  296. package/dist/terminal-activator.js.map +1 -0
  297. package/dist/terminal-activator.test.d.ts +9 -0
  298. package/dist/terminal-activator.test.d.ts.map +1 -0
  299. package/dist/terminal-activator.test.js +95 -0
  300. package/dist/terminal-activator.test.js.map +1 -0
  301. package/dist/terminal-launcher.d.ts +51 -0
  302. package/dist/terminal-launcher.d.ts.map +1 -0
  303. package/dist/terminal-launcher.js +298 -0
  304. package/dist/terminal-launcher.js.map +1 -0
  305. package/dist/terminal-launcher.test.d.ts +8 -0
  306. package/dist/terminal-launcher.test.d.ts.map +1 -0
  307. package/dist/terminal-launcher.test.js +222 -0
  308. package/dist/terminal-launcher.test.js.map +1 -0
  309. package/dist/types.d.ts +796 -0
  310. package/dist/types.d.ts.map +1 -0
  311. package/dist/types.js +15 -0
  312. package/dist/types.js.map +1 -0
  313. package/dist/unix-socket.d.ts +68 -0
  314. package/dist/unix-socket.d.ts.map +1 -0
  315. package/dist/unix-socket.js +180 -0
  316. package/dist/unix-socket.js.map +1 -0
  317. package/dist/usage-limits.d.ts +13 -0
  318. package/dist/usage-limits.d.ts.map +1 -0
  319. package/dist/usage-limits.js +112 -0
  320. package/dist/usage-limits.js.map +1 -0
  321. package/dist/watchers/handoff-watcher.d.ts +74 -0
  322. package/dist/watchers/handoff-watcher.d.ts.map +1 -0
  323. package/dist/watchers/handoff-watcher.js +124 -0
  324. package/dist/watchers/handoff-watcher.js.map +1 -0
  325. package/dist/watchers/handoff-watcher.test.d.ts +8 -0
  326. package/dist/watchers/handoff-watcher.test.d.ts.map +1 -0
  327. package/dist/watchers/handoff-watcher.test.js +142 -0
  328. package/dist/watchers/handoff-watcher.test.js.map +1 -0
  329. package/dist/websocket.d.ts +107 -0
  330. package/dist/websocket.d.ts.map +1 -0
  331. package/dist/websocket.js +268 -0
  332. package/dist/websocket.js.map +1 -0
  333. package/dist/window-manager/index.d.ts +28 -0
  334. package/dist/window-manager/index.d.ts.map +1 -0
  335. package/dist/window-manager/index.js +56 -0
  336. package/dist/window-manager/index.js.map +1 -0
  337. package/dist/window-manager/layouts.d.ts +42 -0
  338. package/dist/window-manager/layouts.d.ts.map +1 -0
  339. package/dist/window-manager/layouts.js +133 -0
  340. package/dist/window-manager/layouts.js.map +1 -0
  341. package/dist/window-manager/linux-manager.d.ts +45 -0
  342. package/dist/window-manager/linux-manager.d.ts.map +1 -0
  343. package/dist/window-manager/linux-manager.js +299 -0
  344. package/dist/window-manager/linux-manager.js.map +1 -0
  345. package/dist/window-manager/macos-manager.d.ts +103 -0
  346. package/dist/window-manager/macos-manager.d.ts.map +1 -0
  347. package/dist/window-manager/macos-manager.js +637 -0
  348. package/dist/window-manager/macos-manager.js.map +1 -0
  349. package/dist/window-manager/smart-layouts.d.ts +116 -0
  350. package/dist/window-manager/smart-layouts.d.ts.map +1 -0
  351. package/dist/window-manager/smart-layouts.js +188 -0
  352. package/dist/window-manager/smart-layouts.js.map +1 -0
  353. package/dist/window-manager/smart-layouts.test.d.ts +8 -0
  354. package/dist/window-manager/smart-layouts.test.d.ts.map +1 -0
  355. package/dist/window-manager/smart-layouts.test.js +311 -0
  356. package/dist/window-manager/smart-layouts.test.js.map +1 -0
  357. package/dist/window-manager/tile-state.d.ts +87 -0
  358. package/dist/window-manager/tile-state.d.ts.map +1 -0
  359. package/dist/window-manager/tile-state.js +136 -0
  360. package/dist/window-manager/tile-state.js.map +1 -0
  361. package/dist/window-manager/tile-state.test.d.ts +8 -0
  362. package/dist/window-manager/tile-state.test.d.ts.map +1 -0
  363. package/dist/window-manager/tile-state.test.js +179 -0
  364. package/dist/window-manager/tile-state.test.js.map +1 -0
  365. package/dist/window-manager/types.d.ts +104 -0
  366. package/dist/window-manager/types.d.ts.map +1 -0
  367. package/dist/window-manager/types.js +8 -0
  368. package/dist/window-manager/types.js.map +1 -0
  369. package/dist/window-manager/windows-manager.d.ts +44 -0
  370. package/dist/window-manager/windows-manager.d.ts.map +1 -0
  371. package/dist/window-manager/windows-manager.js +281 -0
  372. package/dist/window-manager/windows-manager.js.map +1 -0
  373. package/dist/window-manager/windows-manager.test.d.ts +8 -0
  374. package/dist/window-manager/windows-manager.test.d.ts.map +1 -0
  375. package/dist/window-manager/windows-manager.test.js +183 -0
  376. package/dist/window-manager/windows-manager.test.js.map +1 -0
  377. package/gui-dist/assets/index-BmYIHRYe.js +142 -0
  378. package/gui-dist/assets/index-D_N5RH8O.css +1 -0
  379. package/gui-dist/assets/vendor-icons-ByXNrcwf.js +336 -0
  380. package/gui-dist/assets/vendor-markdown-DWPYwU1x.js +22 -0
  381. package/gui-dist/assets/vendor-react-CpILBTDM.js +59 -0
  382. package/gui-dist/index.html +17 -0
  383. package/gui-dist/jacsub.png +0 -0
  384. package/package.json +67 -0
@@ -0,0 +1,311 @@
1
+ /**
2
+ * Session Discovery
3
+ *
4
+ * Finds and resolves metadata for JSONL session files in Claude's project directories.
5
+ * Uses a catalog-first strategy: reads pre-extracted metadata from Jacques session index
6
+ * when available, falls back to JSONL parsing for uncataloged sessions.
7
+ *
8
+ * @module connection/session-discovery
9
+ */
10
+ import * as path from 'path';
11
+ import { promises as fs } from 'fs';
12
+ import { encodeProjectPath, getClaudeProjectsDir, parseJSONLContent, parseJSONL, getEntryStatistics, } from '@jacques-ai/core/session';
13
+ import { detectModeAndPlans, } from '@jacques-ai/core/cache';
14
+ import { ACTIVE_SESSION_THRESHOLD_MS, DEFAULT_CONTEXT_WINDOW_SIZE, } from './constants.js';
15
+ import { detectGitInfo } from './git-info.js';
16
+ /**
17
+ * Resolve metadata for a session file using catalog-first strategy.
18
+ *
19
+ * Priority 1: Use pre-extracted catalog metadata (fast, no file I/O)
20
+ * Priority 2: Fall back to JSONL parsing (slow, reads full file)
21
+ */
22
+ async function resolveSessionMetadata(filePath, sessionId, modifiedAt, cwd, catalogMap) {
23
+ // Priority 1: Use existing Jacques catalog metadata
24
+ const catalogEntry = catalogMap.get(sessionId);
25
+ if (catalogEntry) {
26
+ let contextMetrics = null;
27
+ if (catalogEntry.tokens && catalogEntry.tokens.input > 0) {
28
+ const contextWindowSize = DEFAULT_CONTEXT_WINDOW_SIZE;
29
+ const usedPercentage = (catalogEntry.tokens.input / contextWindowSize) * 100;
30
+ contextMetrics = {
31
+ used_percentage: Math.min(usedPercentage, 100),
32
+ remaining_percentage: Math.max(100 - usedPercentage, 0),
33
+ context_window_size: contextWindowSize,
34
+ total_input_tokens: catalogEntry.tokens.input,
35
+ total_output_tokens: catalogEntry.tokens.output,
36
+ is_estimate: true,
37
+ };
38
+ }
39
+ // Always use live git detection for discovered sessions — catalog git info
40
+ // may be stale (e.g., detected from decoded project path instead of actual worktree)
41
+ const gitInfo = await detectGitInfo(cwd);
42
+ const gitBranch = gitInfo.branch || catalogEntry.gitBranch || null;
43
+ const gitWorktree = gitInfo.worktree || catalogEntry.gitWorktree || null;
44
+ const gitRepoRoot = gitInfo.repoRoot || catalogEntry.gitRepoRoot || null;
45
+ return {
46
+ filePath,
47
+ sessionId,
48
+ modifiedAt,
49
+ gitBranch,
50
+ gitWorktree,
51
+ gitRepoRoot,
52
+ title: catalogEntry.title,
53
+ contextMetrics,
54
+ mode: catalogEntry.mode || null,
55
+ };
56
+ }
57
+ // Priority 2: Fall back to JSONL parsing for uncataloged sessions
58
+ const metadata = await extractSessionMetadataFromJSONL(filePath);
59
+ if (!metadata.sessionId) {
60
+ return null;
61
+ }
62
+ const gitInfo = await detectGitInfo(cwd);
63
+ const mode = await detectSessionModeFromJSONL(filePath);
64
+ return {
65
+ filePath,
66
+ sessionId: metadata.sessionId,
67
+ modifiedAt,
68
+ gitBranch: metadata.gitBranch || gitInfo.branch,
69
+ gitWorktree: gitInfo.worktree,
70
+ gitRepoRoot: gitInfo.repoRoot,
71
+ title: metadata.title,
72
+ // Don't estimate context for discovered sessions - show null until hooks fire
73
+ contextMetrics: null,
74
+ mode,
75
+ };
76
+ }
77
+ /**
78
+ * Find all active session files for a given CWD.
79
+ * Uses catalog-first strategy: reads from Jacques session index when available,
80
+ * falls back to JSONL parsing for uncataloged sessions.
81
+ *
82
+ * @param cwd Working directory to find sessions for
83
+ * @param catalogMap Pre-loaded session catalog (sessionId -> SessionEntry)
84
+ * @returns Sessions modified within ACTIVE_SESSION_THRESHOLD_MS, sorted by recency
85
+ */
86
+ export async function findActiveSessionFiles(cwd, catalogMap) {
87
+ const projectDir = getProjectDir(cwd);
88
+ try {
89
+ await fs.access(projectDir);
90
+ }
91
+ catch {
92
+ return [];
93
+ }
94
+ try {
95
+ const files = await fs.readdir(projectDir);
96
+ const jsonlFiles = files.filter((f) => f.endsWith('.jsonl'));
97
+ if (jsonlFiles.length === 0) {
98
+ return [];
99
+ }
100
+ const now = Date.now();
101
+ const activeSessions = [];
102
+ for (const filename of jsonlFiles) {
103
+ const filePath = path.join(projectDir, filename);
104
+ const stats = await fs.stat(filePath);
105
+ const mtime = stats.mtime.getTime();
106
+ if (now - mtime <= ACTIVE_SESSION_THRESHOLD_MS) {
107
+ const sessionId = path.basename(filename, '.jsonl');
108
+ const resolved = await resolveSessionMetadata(filePath, sessionId, stats.mtime, cwd, catalogMap);
109
+ if (resolved) {
110
+ activeSessions.push(resolved);
111
+ }
112
+ }
113
+ }
114
+ // Sort by modification time (most recent first)
115
+ activeSessions.sort((a, b) => b.modifiedAt.getTime() - a.modifiedAt.getTime());
116
+ return activeSessions;
117
+ }
118
+ catch {
119
+ return [];
120
+ }
121
+ }
122
+ /**
123
+ * Find the most recent session file for a CWD (fallback for inactive detection).
124
+ * Uses catalog-first strategy when available.
125
+ *
126
+ * @param cwd Working directory to find sessions for
127
+ * @param catalogMap Pre-loaded session catalog (sessionId -> SessionEntry)
128
+ */
129
+ export async function findMostRecentSessionFile(cwd, catalogMap) {
130
+ const projectDir = getProjectDir(cwd);
131
+ try {
132
+ await fs.access(projectDir);
133
+ }
134
+ catch {
135
+ return null;
136
+ }
137
+ try {
138
+ const files = await fs.readdir(projectDir);
139
+ const jsonlFiles = files.filter((f) => f.endsWith('.jsonl'));
140
+ if (jsonlFiles.length === 0) {
141
+ return null;
142
+ }
143
+ // Find most recent file
144
+ let mostRecent = null;
145
+ for (const filename of jsonlFiles) {
146
+ const filePath = path.join(projectDir, filename);
147
+ const stats = await fs.stat(filePath);
148
+ if (!mostRecent || stats.mtime > mostRecent.mtime) {
149
+ mostRecent = { filePath, mtime: stats.mtime, filename };
150
+ }
151
+ }
152
+ if (!mostRecent) {
153
+ return null;
154
+ }
155
+ const sessionId = path.basename(mostRecent.filename, '.jsonl');
156
+ return resolveSessionMetadata(mostRecent.filePath, sessionId, mostRecent.mtime, cwd, catalogMap);
157
+ }
158
+ catch {
159
+ return null;
160
+ }
161
+ }
162
+ /**
163
+ * Find the N most recently modified session files for a CWD, regardless of activity threshold.
164
+ * Used when there are more running processes than active session files to discover idle sessions.
165
+ *
166
+ * @param cwd Working directory to find sessions for
167
+ * @param catalogMap Pre-loaded session catalog (sessionId -> SessionEntry)
168
+ * @param count Maximum number of files to return
169
+ * @param excludeIds Session IDs to skip (already registered)
170
+ * @returns Up to `count` most recent session files, sorted by recency
171
+ */
172
+ export async function findRecentSessionFiles(cwd, catalogMap, count, excludeIds) {
173
+ const projectDir = getProjectDir(cwd);
174
+ try {
175
+ await fs.access(projectDir);
176
+ }
177
+ catch {
178
+ return [];
179
+ }
180
+ try {
181
+ const files = await fs.readdir(projectDir);
182
+ const jsonlFiles = files.filter((f) => f.endsWith('.jsonl'));
183
+ if (jsonlFiles.length === 0) {
184
+ return [];
185
+ }
186
+ // Stat all files and sort by recency
187
+ const fileStats = [];
188
+ for (const filename of jsonlFiles) {
189
+ const sessionId = path.basename(filename, '.jsonl');
190
+ if (excludeIds.has(sessionId))
191
+ continue;
192
+ const filePath = path.join(projectDir, filename);
193
+ const stats = await fs.stat(filePath);
194
+ fileStats.push({ filePath, mtime: stats.mtime, filename });
195
+ }
196
+ // Sort by most recent first, take top N
197
+ fileStats.sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
198
+ const topN = fileStats.slice(0, count);
199
+ const results = [];
200
+ for (const { filePath, mtime, filename } of topN) {
201
+ const sessionId = path.basename(filename, '.jsonl');
202
+ const resolved = await resolveSessionMetadata(filePath, sessionId, mtime, cwd, catalogMap);
203
+ if (resolved) {
204
+ results.push(resolved);
205
+ }
206
+ }
207
+ return results;
208
+ }
209
+ catch {
210
+ return [];
211
+ }
212
+ }
213
+ // ============================================================
214
+ // Internal Helpers
215
+ // ============================================================
216
+ /**
217
+ * Get the Claude project directory for a given CWD
218
+ */
219
+ function getProjectDir(cwd) {
220
+ const claudeDir = getClaudeProjectsDir();
221
+ const encodedPath = encodeProjectPath(cwd);
222
+ return path.join(claudeDir, encodedPath);
223
+ }
224
+ /**
225
+ * Detect session mode (planning/execution) from JSONL file
226
+ */
227
+ async function detectSessionModeFromJSONL(filePath) {
228
+ try {
229
+ const entries = await parseJSONL(filePath);
230
+ if (entries.length === 0)
231
+ return null;
232
+ const { mode } = detectModeAndPlans(entries);
233
+ return mode;
234
+ }
235
+ catch {
236
+ return null;
237
+ }
238
+ }
239
+ /**
240
+ * Extract session metadata from JSONL file (fallback for uncataloged sessions)
241
+ */
242
+ async function extractSessionMetadataFromJSONL(filePath) {
243
+ try {
244
+ const content = await fs.readFile(filePath, 'utf-8');
245
+ const lines = content.split('\n').filter((l) => l.trim());
246
+ let sessionId = null;
247
+ let gitBranch = null;
248
+ let title = null;
249
+ // Parse first few lines to get session metadata
250
+ for (let i = 0; i < Math.min(lines.length, 50); i++) {
251
+ try {
252
+ const entry = JSON.parse(lines[i]);
253
+ if (!sessionId && entry.sessionId) {
254
+ sessionId = entry.sessionId;
255
+ }
256
+ if (!gitBranch && entry.data?.gitBranch) {
257
+ gitBranch = entry.data.gitBranch;
258
+ }
259
+ if (!title && entry.type === 'user' && entry.message?.content) {
260
+ const userContent = typeof entry.message.content === 'string'
261
+ ? entry.message.content
262
+ : entry.message.content[0]?.text || '';
263
+ if (userContent &&
264
+ !userContent.trim().startsWith('<local-command') &&
265
+ !userContent.trim().startsWith('<command-')) {
266
+ title = userContent.split('\n')[0].slice(0, 60);
267
+ if (userContent.length > 60) {
268
+ title += '...';
269
+ }
270
+ }
271
+ }
272
+ if (sessionId && gitBranch && title)
273
+ break;
274
+ }
275
+ catch {
276
+ continue;
277
+ }
278
+ }
279
+ // Parse full content for statistics
280
+ let contextMetrics = null;
281
+ try {
282
+ const entries = parseJSONLContent(content);
283
+ const stats = getEntryStatistics(entries);
284
+ if (stats.lastInputTokens > 0) {
285
+ const contextWindowSize = DEFAULT_CONTEXT_WINDOW_SIZE;
286
+ const usedPercentage = (stats.lastInputTokens / contextWindowSize) * 100;
287
+ contextMetrics = {
288
+ used_percentage: Math.min(usedPercentage, 100),
289
+ remaining_percentage: Math.max(100 - usedPercentage, 0),
290
+ context_window_size: contextWindowSize,
291
+ total_input_tokens: stats.totalInputTokens,
292
+ total_output_tokens: stats.totalOutputTokens,
293
+ is_estimate: true,
294
+ };
295
+ }
296
+ }
297
+ catch {
298
+ // Statistics extraction failed, metrics remain null
299
+ }
300
+ return { sessionId, gitBranch, title, contextMetrics };
301
+ }
302
+ catch {
303
+ return {
304
+ sessionId: null,
305
+ gitBranch: null,
306
+ title: null,
307
+ contextMetrics: null,
308
+ };
309
+ }
310
+ }
311
+ //# sourceMappingURL=session-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-discovery.js","sourceRoot":"","sources":["../../src/connection/session-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Terminal Key Utilities
3
+ *
4
+ * Unified parsing, building, and matching of terminal key identifiers.
5
+ * Terminal keys uniquely identify terminal sessions across different terminal emulators.
6
+ *
7
+ * @module connection/terminal-key
8
+ */
9
+ import { TerminalKeyPrefix } from './constants.js';
10
+ /**
11
+ * Parsed terminal key structure
12
+ */
13
+ export interface ParsedTerminalKey {
14
+ /** The terminal key prefix (ITERM, TTY, PID, etc.) */
15
+ prefix: TerminalKeyPrefix;
16
+ /** The value portion after the prefix */
17
+ value: string;
18
+ /** Extracted PID if present in the key */
19
+ pid?: number;
20
+ /** Extracted UUID for iTerm keys */
21
+ uuid?: string;
22
+ /** Extracted TTY path */
23
+ tty?: string;
24
+ /** True if key has DISCOVERED: wrapper */
25
+ isDiscovered: boolean;
26
+ /** For DISCOVERED keys, the parsed inner key */
27
+ innerKey?: ParsedTerminalKey;
28
+ }
29
+ /**
30
+ * Information needed to build a terminal key
31
+ */
32
+ export interface TerminalIdentity {
33
+ /** iTerm2 session ID (e.g., "w0t0p0:UUID") */
34
+ itermSessionId?: string;
35
+ /** TTY device path (e.g., "/dev/ttys001") */
36
+ tty?: string;
37
+ /** Process ID */
38
+ pid?: number;
39
+ /** Kitty window ID */
40
+ kittyWindowId?: string;
41
+ /** WezTerm pane ID */
42
+ weztermPaneId?: string;
43
+ /** Windows Terminal session ID */
44
+ wtSession?: string;
45
+ /** Terminal.app session ID */
46
+ termSessionId?: string;
47
+ }
48
+ /**
49
+ * Parse a terminal key string into its components.
50
+ *
51
+ * Handles all key formats:
52
+ * - ITERM:w0t0p0:UUID or ITERM:UUID
53
+ * - TTY:/dev/ttys001
54
+ * - PID:12345
55
+ * - KITTY:42
56
+ * - WEZTERM:pane:0
57
+ * - DISCOVERED:TTY:ttys001:12345
58
+ * - AUTO:session-uuid
59
+ *
60
+ * @param key The terminal key string to parse
61
+ * @returns Parsed terminal key structure
62
+ */
63
+ export declare function parseTerminalKey(key: string): ParsedTerminalKey;
64
+ /**
65
+ * Build a terminal key string from identity information.
66
+ *
67
+ * Priority order:
68
+ * 1. iTerm session ID
69
+ * 2. Kitty window ID
70
+ * 3. WezTerm pane ID
71
+ * 4. Windows Terminal session
72
+ * 5. TTY path
73
+ * 6. PID (fallback)
74
+ *
75
+ * @param info Terminal identity information
76
+ * @returns Terminal key string or null if no valid identity
77
+ */
78
+ export declare function buildTerminalKey(info: TerminalIdentity): string | null;
79
+ /**
80
+ * Extract PID from a terminal key if present.
81
+ *
82
+ * Handles formats:
83
+ * - PID:12345
84
+ * - DISCOVERED:PID:12345
85
+ * - DISCOVERED:TTY:ttys001:12345 (PID at end)
86
+ *
87
+ * @param key Terminal key string
88
+ * @returns PID number or null if not extractable
89
+ */
90
+ export declare function extractPid(key: string): number | null;
91
+ /**
92
+ * Extract the UUID from an iTerm session ID or terminal key.
93
+ *
94
+ * iTerm's ITERM_SESSION_ID format is "w0t0p0:UUID" where:
95
+ * - w0 = window index
96
+ * - t0 = tab index
97
+ * - p0 = pane index
98
+ * - UUID = unique session identifier
99
+ *
100
+ * AppleScript's `unique ID of session` returns just the UUID portion.
101
+ *
102
+ * @param value The iTerm session ID value (after ITERM: prefix) or full key
103
+ * @returns The UUID portion, or the input if no colon present
104
+ */
105
+ export declare function extractItermUuid(value: string): string;
106
+ /**
107
+ * Check if two terminal keys refer to the same terminal.
108
+ *
109
+ * Handles special cases:
110
+ * - iTerm keys match by UUID (ignoring w0t0p0 prefix differences)
111
+ * - DISCOVERED: wrapper is unwrapped for comparison
112
+ * - Exact string match as fallback
113
+ *
114
+ * @param keyA First terminal key
115
+ * @param keyB Second terminal key
116
+ * @returns True if keys match the same terminal
117
+ */
118
+ export declare function matchTerminalKeys(keyA: string, keyB: string): boolean;
119
+ /**
120
+ * Get a human-readable description of a terminal key.
121
+ *
122
+ * @param key Terminal key string
123
+ * @returns Human-readable description
124
+ */
125
+ export declare function describeTerminalKey(key: string): string;
126
+ //# sourceMappingURL=terminal-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-key.d.ts","sourceRoot":"","sources":["../../src/connection/terminal-key.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,YAAY,EAAE,OAAO,CAAC;IACtB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAyB/D;AA+DD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAuBtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBrD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBtD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAqCrE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAyBvD"}