@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,169 @@
1
+ /**
2
+ * Terminal Focus Watcher
3
+ *
4
+ * Monitors which terminal window is focused on macOS and sends
5
+ * focus hints to the Jacques server to update the active session.
6
+ *
7
+ * Supports:
8
+ * - iTerm2 (via ITERM_SESSION_ID)
9
+ * - Terminal.app (via TTY)
10
+ * - Other terminals (via window ID / PID)
11
+ */
12
+ import { createLogger } from './logging/logger-factory.js';
13
+ import { FOCUS_WATCHER_POLL_MS, TERMINAL_APP_NAMES } from './connection/constants.js';
14
+ import { runAppleScript } from './connection/applescript.js';
15
+ /**
16
+ * Get the currently focused application name
17
+ */
18
+ async function getFrontmostApp() {
19
+ try {
20
+ return await runAppleScript('tell application "System Events" to get name of first application process whose frontmost is true');
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ /**
27
+ * Get iTerm2 session ID for the active tab
28
+ */
29
+ async function getITermSessionId() {
30
+ try {
31
+ const result = await runAppleScript('tell application "iTerm2" to tell current session of current tab of current window to return unique ID');
32
+ return result || null;
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ /**
39
+ * Get Terminal.app TTY for the active tab
40
+ */
41
+ async function getTerminalTTY() {
42
+ try {
43
+ const result = await runAppleScript(`
44
+ tell application "Terminal"
45
+ return tty of selected tab of front window
46
+ end tell
47
+ `);
48
+ return result || null;
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ }
54
+ /**
55
+ * Get iTerm2 TTY for the active session
56
+ */
57
+ async function getITermTTY() {
58
+ try {
59
+ const result = await runAppleScript('tell application "iTerm2" to tell current session of current tab of current window to return tty');
60
+ return result || null;
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
66
+ /**
67
+ * Get focus info for the currently active terminal
68
+ */
69
+ export async function getTerminalFocusInfo() {
70
+ const app = await getFrontmostApp();
71
+ if (!app)
72
+ return null;
73
+ // Check if it's a terminal application
74
+ const isTerminal = TERMINAL_APP_NAMES.some(t => app.toLowerCase().includes(t.toLowerCase()));
75
+ if (!isTerminal) {
76
+ return null; // Not a terminal, ignore
77
+ }
78
+ const focusInfo = { app };
79
+ if (app.includes('iTerm')) {
80
+ focusInfo.iterm_session_id = await getITermSessionId() || undefined;
81
+ // Also get TTY for iTerm — discovered sessions may only have TTY-based keys
82
+ focusInfo.tty = await getITermTTY() || undefined;
83
+ }
84
+ else if (app === 'Terminal') {
85
+ focusInfo.tty = await getTerminalTTY() || undefined;
86
+ }
87
+ return focusInfo;
88
+ }
89
+ /**
90
+ * Build terminal key candidates from focus info, ordered by specificity.
91
+ * Returns multiple keys to try (e.g., ITERM key first, then TTY fallback)
92
+ * because discovered sessions may use TTY keys even when running in iTerm.
93
+ */
94
+ export function buildTerminalKeysFromFocus(focus) {
95
+ const keys = [];
96
+ if (focus.iterm_session_id) {
97
+ keys.push(`ITERM:${focus.iterm_session_id}`);
98
+ }
99
+ if (focus.tty) {
100
+ keys.push(`TTY:${focus.tty}`);
101
+ }
102
+ if (focus.terminal_pid) {
103
+ keys.push(`PID:${focus.terminal_pid}`);
104
+ }
105
+ return keys;
106
+ }
107
+ /**
108
+ * Build a single terminal key from focus info (primary key for change detection)
109
+ */
110
+ export function buildTerminalKeyFromFocus(focus) {
111
+ const keys = buildTerminalKeysFromFocus(focus);
112
+ return keys[0] || null;
113
+ }
114
+ /**
115
+ * Start watching for terminal focus changes
116
+ */
117
+ export function startFocusWatcher(callbacks, pollIntervalMs = FOCUS_WATCHER_POLL_MS, options = {}) {
118
+ // Support both old silent flag and new logger injection (messages already include [FocusWatcher] prefix)
119
+ const logger = options.logger ?? createLogger({ silent: options.silent });
120
+ const log = logger.log.bind(logger);
121
+ const error = logger.error.bind(logger);
122
+ let lastTerminalKey = null;
123
+ let isRunning = true;
124
+ // Poll slower when no terminal is focused (non-terminal app in foreground)
125
+ const idleMultiplier = 3;
126
+ const poll = async () => {
127
+ if (!isRunning)
128
+ return;
129
+ let nextDelay = pollIntervalMs;
130
+ try {
131
+ const focusInfo = await getTerminalFocusInfo();
132
+ const terminalKey = focusInfo ? buildTerminalKeyFromFocus(focusInfo) : null;
133
+ const allKeys = focusInfo ? buildTerminalKeysFromFocus(focusInfo) : [];
134
+ // Poll slower when no terminal is focused
135
+ if (!focusInfo) {
136
+ nextDelay = pollIntervalMs * idleMultiplier;
137
+ }
138
+ // Notify on terminal key change, or re-notify same key if no session
139
+ // is currently focused (sessions may have registered since last poll)
140
+ if (terminalKey !== lastTerminalKey || (terminalKey && callbacks.shouldRetry?.())) {
141
+ if (terminalKey !== lastTerminalKey) {
142
+ log(`[FocusWatcher] Focus changed: ${lastTerminalKey} -> ${terminalKey}`);
143
+ if (focusInfo) {
144
+ log(`[FocusWatcher] App: ${focusInfo.app}, iTerm ID: ${focusInfo.iterm_session_id || 'none'}, TTY: ${focusInfo.tty || 'none'}`);
145
+ }
146
+ }
147
+ lastTerminalKey = terminalKey;
148
+ callbacks.onFocusChange(terminalKey, allKeys);
149
+ }
150
+ }
151
+ catch (err) {
152
+ error(`[FocusWatcher] Poll error: ${err}`);
153
+ nextDelay = pollIntervalMs * idleMultiplier;
154
+ }
155
+ if (isRunning) {
156
+ setTimeout(poll, nextDelay);
157
+ }
158
+ };
159
+ // Start polling
160
+ log('[FocusWatcher] Starting focus polling...');
161
+ poll();
162
+ return {
163
+ stop: () => {
164
+ isRunning = false;
165
+ log('[FocusWatcher] Stopped');
166
+ }
167
+ };
168
+ }
169
+ //# sourceMappingURL=focus-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-watcher.js","sourceRoot":"","sources":["../src/focus-watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Event Handler
3
+ *
4
+ * Routes and handles hook events from the Unix socket.
5
+ * Coordinates between the session registry, broadcast service,
6
+ * and handoff watcher.
7
+ */
8
+ import type { HookEvent } from '../types.js';
9
+ import type { SessionRegistry } from '../session-registry.js';
10
+ import type { BroadcastService } from '../services/broadcast-service.js';
11
+ import type { NotificationService } from '../services/notification-service.js';
12
+ import type { HandoffWatcher } from '../watchers/handoff-watcher.js';
13
+ import type { BranchDivergenceService } from '../services/branch-divergence-service.js';
14
+ import type { Logger } from '../logging/logger-factory.js';
15
+ /**
16
+ * Configuration for EventHandler
17
+ */
18
+ export interface EventHandlerConfig {
19
+ /** Session registry for managing sessions */
20
+ registry: SessionRegistry;
21
+ /** Broadcast service for sending updates */
22
+ broadcastService: BroadcastService;
23
+ /** Handoff watcher for file watching */
24
+ handoffWatcher: HandoffWatcher;
25
+ /** Notification service for desktop + in-app notifications */
26
+ notificationService?: NotificationService;
27
+ /** Branch divergence service for reactive git status updates */
28
+ branchDivergenceService?: BranchDivergenceService;
29
+ /** Optional logger */
30
+ logger?: Logger;
31
+ }
32
+ /**
33
+ * EventHandler - routes and processes hook events
34
+ *
35
+ * This class extracts the event handling logic from the main
36
+ * orchestrator (start-server.ts), making it easier to test
37
+ * and maintain.
38
+ */
39
+ export declare class EventHandler {
40
+ private registry;
41
+ private broadcastService;
42
+ private handoffWatcher;
43
+ private notificationService?;
44
+ private branchDivergenceService?;
45
+ private logger;
46
+ private modeCheckTimestamps;
47
+ constructor(config: EventHandlerConfig);
48
+ /**
49
+ * Handle an incoming hook event
50
+ *
51
+ * Routes the event to the appropriate handler based on event type.
52
+ *
53
+ * @param event The hook event to handle
54
+ */
55
+ handleEvent(event: HookEvent): void;
56
+ /**
57
+ * Handle session start event
58
+ */
59
+ private handleSessionStart;
60
+ /**
61
+ * Handle activity event
62
+ */
63
+ private handleActivity;
64
+ /**
65
+ * Handle context update event
66
+ */
67
+ private handleContextUpdate;
68
+ /**
69
+ * Resolve a continue session title by reading the handoff file.
70
+ * Updates session title and broadcasts when resolved.
71
+ */
72
+ private resolveContinueTitle;
73
+ /**
74
+ * Handle pre-tool-use event (PreToolUse hook)
75
+ * Starts a debounced awaiting timer — if PostToolUse doesn't arrive
76
+ * within 1 second, the session status changes to 'awaiting'.
77
+ */
78
+ private handlePreToolUse;
79
+ /**
80
+ * Handle idle event
81
+ */
82
+ private handleIdle;
83
+ /**
84
+ * For bypass sessions, hook permission_mode is unreliable (always reports acceptEdits).
85
+ * Detect mode from JSONL transcript instead and broadcast if changed.
86
+ */
87
+ private detectModeIfBypass;
88
+ /**
89
+ * Handle session end event
90
+ */
91
+ private handleSessionEnd;
92
+ }
93
+ //# sourceMappingURL=event-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/event-handler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,SAAS,EAOV,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AAExF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAK3D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,QAAQ,EAAE,eAAe,CAAC;IAC1B,4CAA4C;IAC5C,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,wCAAwC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,8DAA8D;IAC9D,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,gEAAgE;IAChE,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAClD,OAAO,CAAC,uBAAuB,CAAC,CAA0B;IAC1D,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,mBAAmB,CAA6B;gBAE5C,MAAM,EAAE,kBAAkB;IAStC;;;;;;OAMG;IACH,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IA+BnC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;;OAGG;YACW,oBAAoB;IAalC;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,UAAU;IASlB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;CASzB"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Event Handler
3
+ *
4
+ * Routes and handles hook events from the Unix socket.
5
+ * Coordinates between the session registry, broadcast service,
6
+ * and handoff watcher.
7
+ */
8
+ import { createLogger } from '../logging/logger-factory.js';
9
+ import { isContinueSession } from '@jacques-ai/core/session';
10
+ import { extractContinueTitleFromHandoff } from '@jacques-ai/core/cache';
11
+ /**
12
+ * EventHandler - routes and processes hook events
13
+ *
14
+ * This class extracts the event handling logic from the main
15
+ * orchestrator (start-server.ts), making it easier to test
16
+ * and maintain.
17
+ */
18
+ export class EventHandler {
19
+ registry;
20
+ broadcastService;
21
+ handoffWatcher;
22
+ notificationService;
23
+ branchDivergenceService;
24
+ logger;
25
+ modeCheckTimestamps = new Map();
26
+ constructor(config) {
27
+ this.registry = config.registry;
28
+ this.broadcastService = config.broadcastService;
29
+ this.handoffWatcher = config.handoffWatcher;
30
+ this.notificationService = config.notificationService;
31
+ this.branchDivergenceService = config.branchDivergenceService;
32
+ this.logger = config.logger ?? createLogger({ silent: true });
33
+ }
34
+ /**
35
+ * Handle an incoming hook event
36
+ *
37
+ * Routes the event to the appropriate handler based on event type.
38
+ *
39
+ * @param event The hook event to handle
40
+ */
41
+ handleEvent(event) {
42
+ switch (event.event) {
43
+ case 'session_start':
44
+ this.handleSessionStart(event);
45
+ break;
46
+ case 'pre_tool_use':
47
+ this.handlePreToolUse(event);
48
+ break;
49
+ case 'activity':
50
+ this.handleActivity(event);
51
+ break;
52
+ case 'context_update':
53
+ this.handleContextUpdate(event);
54
+ break;
55
+ case 'idle':
56
+ this.handleIdle(event);
57
+ break;
58
+ case 'session_end':
59
+ this.handleSessionEnd(event);
60
+ break;
61
+ default:
62
+ this.logger.error(`[EventHandler] Unknown event type: ${event.event}`);
63
+ }
64
+ }
65
+ /**
66
+ * Handle session start event
67
+ */
68
+ handleSessionStart(event) {
69
+ const session = this.registry.registerSession(event);
70
+ this.broadcastService.broadcastSessionWithFocus(session);
71
+ // Start watching for handoff file
72
+ const projectDir = session.workspace?.project_dir || session.cwd;
73
+ if (projectDir) {
74
+ this.handoffWatcher.startWatching(session.session_id, projectDir);
75
+ }
76
+ this.branchDivergenceService?.scheduleCheck();
77
+ // Detect mode asynchronously and broadcast if found
78
+ this.registry.updateSessionMode(session.session_id).then((updatedSession) => {
79
+ if (updatedSession && updatedSession.mode) {
80
+ // Mode detected, broadcast the update
81
+ this.broadcastService.broadcastSessionWithFocus(updatedSession);
82
+ }
83
+ }).catch((err) => {
84
+ this.logger.warn(`[EventHandler] Failed to detect session mode: ${err}`);
85
+ });
86
+ }
87
+ /**
88
+ * Handle activity event
89
+ */
90
+ handleActivity(event) {
91
+ const session = this.registry.updateActivity(event);
92
+ if (session) {
93
+ // Activity doesn't change focus — only broadcast the session update
94
+ this.broadcastService.broadcastSessionUpdate(session);
95
+ this.branchDivergenceService?.scheduleCheck();
96
+ this.detectModeIfBypass(session);
97
+ }
98
+ }
99
+ /**
100
+ * Handle context update event
101
+ */
102
+ handleContextUpdate(event) {
103
+ const session = this.registry.updateContext(event);
104
+ if (session) {
105
+ // Context updates don't change focus — only broadcast the session update
106
+ this.broadcastService.broadcastSessionUpdate(session);
107
+ this.branchDivergenceService?.scheduleCheck();
108
+ this.notificationService?.onContextUpdate(session);
109
+ // Plan detection (debounced internally to 30s per session)
110
+ if (session.transcript_path) {
111
+ this.notificationService?.checkForNewPlans(session.session_id, session.transcript_path);
112
+ }
113
+ // Error scanning (incremental via byte offset)
114
+ if (session.transcript_path) {
115
+ this.notificationService?.scanForErrors(session.session_id, session.transcript_path);
116
+ }
117
+ // Note: Mode detection is NOT done here. permission_mode from hooks
118
+ // (PreToolUse, Activity, Idle, SessionStart) is the authoritative source.
119
+ // JSONL-based detection is only used at session registration time.
120
+ // Resolve jacques-continue skill titles from handoff data (async, fire-and-forget)
121
+ if (session.session_title && isContinueSession(session.session_title)) {
122
+ this.resolveContinueTitle(session);
123
+ }
124
+ }
125
+ }
126
+ /**
127
+ * Resolve a continue session title by reading the handoff file.
128
+ * Updates session title and broadcasts when resolved.
129
+ */
130
+ async resolveContinueTitle(session) {
131
+ try {
132
+ const startedAt = new Date(session.registered_at).toISOString();
133
+ const resolved = await extractContinueTitleFromHandoff(session.cwd, startedAt);
134
+ if (resolved) {
135
+ session.session_title = resolved;
136
+ this.broadcastService.broadcastSessionUpdate(session);
137
+ }
138
+ }
139
+ catch {
140
+ // Silent — formatSessionTitle handles the fallback display
141
+ }
142
+ }
143
+ /**
144
+ * Handle pre-tool-use event (PreToolUse hook)
145
+ * Starts a debounced awaiting timer — if PostToolUse doesn't arrive
146
+ * within 1 second, the session status changes to 'awaiting'.
147
+ */
148
+ handlePreToolUse(event) {
149
+ this.registry.setSessionAwaiting(event.session_id, event.tool_name, event.permission_mode, (session) => {
150
+ this.broadcastService.broadcastSessionUpdate(session);
151
+ }, event.terminal_pid);
152
+ }
153
+ /**
154
+ * Handle idle event
155
+ */
156
+ handleIdle(event) {
157
+ const session = this.registry.setSessionIdle(event.session_id, event.permission_mode, event.terminal_pid);
158
+ if (session) {
159
+ // Idle doesn't change focus, so just broadcast the session update
160
+ this.broadcastService.broadcastSessionUpdate(session);
161
+ this.detectModeIfBypass(session);
162
+ }
163
+ }
164
+ /**
165
+ * For bypass sessions, hook permission_mode is unreliable (always reports acceptEdits).
166
+ * Detect mode from JSONL transcript instead and broadcast if changed.
167
+ */
168
+ detectModeIfBypass(session) {
169
+ if (!session.is_bypass)
170
+ return;
171
+ // 30s debounce per session — JSONL re-read is expensive
172
+ const lastCheck = this.modeCheckTimestamps.get(session.session_id) ?? 0;
173
+ if (Date.now() - lastCheck < 30_000)
174
+ return;
175
+ this.modeCheckTimestamps.set(session.session_id, Date.now());
176
+ const modeBefore = session.mode;
177
+ this.registry.updateSessionMode(session.session_id).then((updated) => {
178
+ if (updated && updated.mode !== modeBefore) {
179
+ this.broadcastService.broadcastSessionUpdate(updated);
180
+ }
181
+ }).catch(() => { });
182
+ }
183
+ /**
184
+ * Handle session end event
185
+ */
186
+ handleSessionEnd(event) {
187
+ this.modeCheckTimestamps.delete(event.session_id);
188
+ // unregisterSession triggers onSessionRemoved callback which handles:
189
+ // - WebSocket broadcast (session_removed + focus_changed)
190
+ // - Notification cleanup
191
+ // - Handoff watcher stop
192
+ // - Catalog extraction
193
+ this.registry.unregisterSession(event.session_id);
194
+ }
195
+ }
196
+ //# sourceMappingURL=event-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-handler.js","sourceRoot":"","sources":["../../src/handlers/event-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Event Handler Tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=event-handler.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-handler.test.d.ts","sourceRoot":"","sources":["../../src/handlers/event-handler.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}