@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
package/dist/server.js ADDED
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Jacques Server
3
+ *
4
+ * Standalone entry point for the Jacques server.
5
+ * Uses the embeddable server module for the actual implementation.
6
+ */
7
+ import { startEmbeddedServer } from './start-server.js';
8
+ import { writeFileSync, unlinkSync, existsSync, readFileSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { homedir } from 'os';
11
+ import { createServer, connect } from 'net';
12
+ const PID_FILE = join(homedir(), '.jacques', 'server.pid');
13
+ const SOCKET_PATH = '/tmp/jacques.sock';
14
+ const WS_PORT = parseInt(process.env.JACQUES_WS_PORT || '4242', 10);
15
+ const HTTP_PORT = parseInt(process.env.JACQUES_HTTP_PORT || '4243', 10);
16
+ let server = null;
17
+ /**
18
+ * Write PID file for process management
19
+ */
20
+ function writePidFile() {
21
+ try {
22
+ const dir = join(homedir(), '.jacques');
23
+ if (!existsSync(dir)) {
24
+ const { mkdirSync } = require('fs');
25
+ mkdirSync(dir, { recursive: true });
26
+ }
27
+ writeFileSync(PID_FILE, String(process.pid));
28
+ }
29
+ catch (err) {
30
+ console.error(`[Server] Warning: Could not write PID file: ${err}`);
31
+ }
32
+ }
33
+ /**
34
+ * Remove PID file on shutdown
35
+ */
36
+ function removePidFile() {
37
+ try {
38
+ if (existsSync(PID_FILE)) {
39
+ unlinkSync(PID_FILE);
40
+ }
41
+ }
42
+ catch {
43
+ // Ignore errors when removing PID file
44
+ }
45
+ }
46
+ /**
47
+ * Check if a Unix socket has an active listener
48
+ */
49
+ function isSocketAlive(path) {
50
+ return new Promise((resolve) => {
51
+ const client = connect({ path }, () => {
52
+ client.end();
53
+ resolve(true);
54
+ });
55
+ client.on('error', () => resolve(false));
56
+ const timeout = setTimeout(() => { client.destroy(); resolve(false); }, 1000);
57
+ client.on('close', () => clearTimeout(timeout));
58
+ });
59
+ }
60
+ /**
61
+ * Check if a TCP port is available
62
+ */
63
+ function isPortFree(port) {
64
+ return new Promise((resolve) => {
65
+ const srv = createServer();
66
+ srv.once('error', () => resolve(false));
67
+ srv.once('listening', () => {
68
+ srv.close(() => resolve(true));
69
+ });
70
+ srv.listen(port);
71
+ });
72
+ }
73
+ /**
74
+ * Pre-flight: ensure no other Jacques server is running
75
+ */
76
+ async function ensureServerNotRunning() {
77
+ // 1. Check PID file
78
+ if (existsSync(PID_FILE)) {
79
+ try {
80
+ const pid = parseInt(readFileSync(PID_FILE, 'utf-8').trim(), 10);
81
+ if (!isNaN(pid)) {
82
+ try {
83
+ process.kill(pid, 0); // Throws if process doesn't exist
84
+ console.error(`[Server] Jacques server already running (PID: ${pid}).`);
85
+ console.error(`[Server] Stop it first: npm run stop:server`);
86
+ process.exit(1);
87
+ }
88
+ catch {
89
+ // Process doesn't exist — stale PID file
90
+ unlinkSync(PID_FILE);
91
+ }
92
+ }
93
+ }
94
+ catch {
95
+ // Can't read PID file — remove it
96
+ try {
97
+ unlinkSync(PID_FILE);
98
+ }
99
+ catch { /* ignore */ }
100
+ }
101
+ }
102
+ // 2. Check if socket is actively listened on
103
+ if (existsSync(SOCKET_PATH)) {
104
+ if (await isSocketAlive(SOCKET_PATH)) {
105
+ console.error(`[Server] Another server is listening on ${SOCKET_PATH}.`);
106
+ console.error(`[Server] Stop it first: npm run stop:server`);
107
+ process.exit(1);
108
+ }
109
+ // Stale socket — will be cleaned up by UnixSocketServer.start()
110
+ }
111
+ // 3. Check port availability
112
+ for (const port of [WS_PORT, HTTP_PORT]) {
113
+ if (!(await isPortFree(port))) {
114
+ console.error(`[Server] Port ${port} is already in use.`);
115
+ console.error(`[Server] Stop the existing server: npm run stop:server`);
116
+ process.exit(1);
117
+ }
118
+ }
119
+ }
120
+ /**
121
+ * Start the server
122
+ */
123
+ async function start() {
124
+ console.log('');
125
+ console.log('╔═══════════════════════════════════════════════════════╗');
126
+ console.log('║ JACQUES - Claude Code Context Monitor ║');
127
+ console.log('╚═══════════════════════════════════════════════════════╝');
128
+ console.log('');
129
+ // Pre-flight: ensure no other server is running
130
+ await ensureServerNotRunning();
131
+ try {
132
+ // Write PID file for process management
133
+ writePidFile();
134
+ console.log(`[Server] PID: ${process.pid} (written to ${PID_FILE})`);
135
+ server = await startEmbeddedServer({ silent: false });
136
+ console.log('[Server] Waiting for Claude Code sessions...');
137
+ console.log('[Server] Press Ctrl+C to stop');
138
+ console.log('');
139
+ }
140
+ catch (err) {
141
+ console.error(`[Server] Failed to start: ${err}`);
142
+ removePidFile();
143
+ process.exit(1);
144
+ }
145
+ }
146
+ /**
147
+ * Graceful shutdown
148
+ */
149
+ async function shutdown() {
150
+ console.log('');
151
+ if (server) {
152
+ await server.stop();
153
+ }
154
+ // Clean up PID file
155
+ removePidFile();
156
+ process.exit(0);
157
+ }
158
+ // Register shutdown handlers
159
+ process.on('SIGINT', shutdown);
160
+ process.on('SIGTERM', shutdown);
161
+ // Handle uncaught errors
162
+ process.on('uncaughtException', (err) => {
163
+ console.error(`[Server] Uncaught exception: ${err.message}`);
164
+ console.error(err.stack);
165
+ shutdown();
166
+ });
167
+ process.on('unhandledRejection', (reason) => {
168
+ console.error(`[Server] Unhandled rejection: ${reason}`);
169
+ shutdown();
170
+ });
171
+ // Start the server
172
+ start();
173
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Branch Divergence Service
3
+ *
4
+ * Periodically computes ahead/behind counts and dirty status for all active sessions.
5
+ * Groups by (repoRoot, branch) to avoid duplicate git calls for sessions on the same branch.
6
+ */
7
+ import type { Session } from '../types.js';
8
+ import type { Logger } from '../logging/logger-factory.js';
9
+ export interface BranchDivergenceServiceOptions {
10
+ getAllSessions: () => Session[];
11
+ broadcastSessionUpdate: (session: Session) => void;
12
+ logger?: Logger;
13
+ }
14
+ export declare class BranchDivergenceService {
15
+ private interval;
16
+ private debounceTimer;
17
+ private checking;
18
+ private getAllSessions;
19
+ private broadcastSessionUpdate;
20
+ private logger;
21
+ private static readonly DEBOUNCE_MS;
22
+ /** Cache of default branch per repo root (cleared each cycle) */
23
+ private defaultBranchCache;
24
+ constructor(options: BranchDivergenceServiceOptions);
25
+ /**
26
+ * Start periodic divergence checking.
27
+ */
28
+ start(intervalMs?: number): void;
29
+ /**
30
+ * Stop periodic checking.
31
+ */
32
+ stop(): void;
33
+ /**
34
+ * Schedule a debounced divergence check.
35
+ * Multiple calls within DEBOUNCE_MS coalesce into one check.
36
+ */
37
+ scheduleCheck(): void;
38
+ /**
39
+ * Run a single divergence check across all active sessions.
40
+ */
41
+ private check;
42
+ private runCheck;
43
+ /**
44
+ * Get default branch for a repo, with per-cycle caching.
45
+ */
46
+ private getDefaultBranch;
47
+ }
48
+ //# sourceMappingURL=branch-divergence-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-divergence-service.d.ts","sourceRoot":"","sources":["../../src/services/branch-divergence-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAM3D,MAAM,WAAW,8BAA8B;IAC7C,cAAc,EAAE,MAAM,OAAO,EAAE,CAAC;IAChC,sBAAsB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,sBAAsB,CAA6B;IAC3D,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAQ;IAE3C,iEAAiE;IACjE,OAAO,CAAC,kBAAkB,CAA6B;gBAE3C,OAAO,EAAE,8BAA8B;IAMnD;;OAEG;IACH,KAAK,CAAC,UAAU,GAAE,MAAsC,GAAG,IAAI;IAkB/D;;OAEG;IACH,IAAI,IAAI,IAAI;IAWZ;;;OAGG;IACH,aAAa,IAAI,IAAI;IAYrB;;OAEG;YACW,KAAK;YAUL,QAAQ;IAoEtB;;OAEG;YACW,gBAAgB;CAQ/B"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Branch Divergence Service
3
+ *
4
+ * Periodically computes ahead/behind counts and dirty status for all active sessions.
5
+ * Groups by (repoRoot, branch) to avoid duplicate git calls for sessions on the same branch.
6
+ */
7
+ import { createLogger } from '../logging/logger-factory.js';
8
+ import { computeBranchDivergence, checkDirtyStatus } from '@jacques-ai/core';
9
+ import { detectDefaultBranch } from '../connection/worktree.js';
10
+ import { BRANCH_DIVERGENCE_INTERVAL_MS } from '../connection/constants.js';
11
+ export class BranchDivergenceService {
12
+ interval = null;
13
+ debounceTimer = null;
14
+ checking = false;
15
+ getAllSessions;
16
+ broadcastSessionUpdate;
17
+ logger;
18
+ static DEBOUNCE_MS = 3000;
19
+ /** Cache of default branch per repo root (cleared each cycle) */
20
+ defaultBranchCache = new Map();
21
+ constructor(options) {
22
+ this.getAllSessions = options.getAllSessions;
23
+ this.broadcastSessionUpdate = options.broadcastSessionUpdate;
24
+ this.logger = options.logger ?? createLogger({ silent: true });
25
+ }
26
+ /**
27
+ * Start periodic divergence checking.
28
+ */
29
+ start(intervalMs = BRANCH_DIVERGENCE_INTERVAL_MS) {
30
+ if (this.interval)
31
+ return;
32
+ // Run immediately
33
+ this.check().catch((err) => {
34
+ this.logger.warn(`[Divergence] Check failed: ${err}`);
35
+ });
36
+ // Then periodically
37
+ this.interval = setInterval(() => {
38
+ this.check().catch((err) => {
39
+ this.logger.warn(`[Divergence] Check failed: ${err}`);
40
+ });
41
+ }, intervalMs);
42
+ this.logger.log(`[Divergence] Started (interval: ${intervalMs / 1000}s)`);
43
+ }
44
+ /**
45
+ * Stop periodic checking.
46
+ */
47
+ stop() {
48
+ if (this.interval) {
49
+ clearInterval(this.interval);
50
+ this.interval = null;
51
+ }
52
+ if (this.debounceTimer) {
53
+ clearTimeout(this.debounceTimer);
54
+ this.debounceTimer = null;
55
+ }
56
+ }
57
+ /**
58
+ * Schedule a debounced divergence check.
59
+ * Multiple calls within DEBOUNCE_MS coalesce into one check.
60
+ */
61
+ scheduleCheck() {
62
+ if (this.debounceTimer) {
63
+ clearTimeout(this.debounceTimer);
64
+ }
65
+ this.debounceTimer = setTimeout(() => {
66
+ this.debounceTimer = null;
67
+ this.check().catch((err) => {
68
+ this.logger.warn(`[Divergence] Scheduled check failed: ${err}`);
69
+ });
70
+ }, BranchDivergenceService.DEBOUNCE_MS);
71
+ }
72
+ /**
73
+ * Run a single divergence check across all active sessions.
74
+ */
75
+ async check() {
76
+ if (this.checking)
77
+ return;
78
+ this.checking = true;
79
+ try {
80
+ await this.runCheck();
81
+ }
82
+ finally {
83
+ this.checking = false;
84
+ }
85
+ }
86
+ async runCheck() {
87
+ const sessions = this.getAllSessions();
88
+ if (sessions.length === 0)
89
+ return;
90
+ // Clear default branch cache each cycle
91
+ this.defaultBranchCache.clear();
92
+ // Group sessions by (repoRoot, branch) for divergence
93
+ const divergenceGroups = new Map();
94
+ // Group sessions by cwd for dirty status
95
+ const dirtyGroups = new Map();
96
+ for (const session of sessions) {
97
+ if (session.git_repo_root && session.git_branch) {
98
+ const key = `${session.git_repo_root}\0${session.git_branch}`;
99
+ const group = divergenceGroups.get(key) || [];
100
+ group.push(session);
101
+ divergenceGroups.set(key, group);
102
+ }
103
+ if (session.cwd) {
104
+ const group = dirtyGroups.get(session.cwd) || [];
105
+ group.push(session);
106
+ dirtyGroups.set(session.cwd, group);
107
+ }
108
+ }
109
+ // Compute divergence per unique (repoRoot, branch)
110
+ for (const [key, groupSessions] of divergenceGroups) {
111
+ const [repoRoot, branch] = key.split('\0');
112
+ const defaultBranch = await this.getDefaultBranch(repoRoot);
113
+ // Skip if this IS the default branch
114
+ if (branch === defaultBranch) {
115
+ for (const session of groupSessions) {
116
+ if (session.git_ahead !== 0 || session.git_behind !== 0) {
117
+ session.git_ahead = 0;
118
+ session.git_behind = 0;
119
+ this.broadcastSessionUpdate(session);
120
+ }
121
+ }
122
+ continue;
123
+ }
124
+ const { ahead, behind } = await computeBranchDivergence(repoRoot, branch, defaultBranch);
125
+ for (const session of groupSessions) {
126
+ if (session.git_ahead !== ahead || session.git_behind !== behind) {
127
+ session.git_ahead = ahead;
128
+ session.git_behind = behind;
129
+ this.broadcastSessionUpdate(session);
130
+ }
131
+ }
132
+ }
133
+ // Compute dirty status per unique cwd
134
+ for (const [cwd, groupSessions] of dirtyGroups) {
135
+ const dirty = await checkDirtyStatus(cwd);
136
+ for (const session of groupSessions) {
137
+ if (session.git_dirty !== dirty) {
138
+ session.git_dirty = dirty;
139
+ this.broadcastSessionUpdate(session);
140
+ }
141
+ }
142
+ }
143
+ }
144
+ /**
145
+ * Get default branch for a repo, with per-cycle caching.
146
+ */
147
+ async getDefaultBranch(repoRoot) {
148
+ const cached = this.defaultBranchCache.get(repoRoot);
149
+ if (cached)
150
+ return cached;
151
+ const branch = await detectDefaultBranch(repoRoot);
152
+ this.defaultBranchCache.set(repoRoot, branch);
153
+ return branch;
154
+ }
155
+ }
156
+ //# sourceMappingURL=branch-divergence-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-divergence-service.js","sourceRoot":"","sources":["../../src/services/branch-divergence-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Broadcast Service
3
+ *
4
+ * Unified broadcasting service that combines session updates
5
+ * with focus change notifications. Eliminates repeated broadcast
6
+ * patterns in event handlers.
7
+ */
8
+ import type { Session } from '../types.js';
9
+ import type { JacquesWebSocketServer } from '../websocket.js';
10
+ import type { SessionRegistry } from '../session-registry.js';
11
+ import type { Logger } from '../logging/logger-factory.js';
12
+ /**
13
+ * Configuration for the BroadcastService
14
+ */
15
+ export interface BroadcastServiceConfig {
16
+ /** WebSocket server for broadcasting */
17
+ wsServer: JacquesWebSocketServer;
18
+ /** Session registry for focus information */
19
+ registry: SessionRegistry;
20
+ /** Optional logger */
21
+ logger?: Logger;
22
+ }
23
+ /**
24
+ * BroadcastService - handles unified session and focus broadcasting
25
+ *
26
+ * Instead of calling:
27
+ * wsServer.broadcastSessionUpdate(session);
28
+ * broadcastFocusChange();
29
+ *
30
+ * Use:
31
+ * broadcastService.broadcastSessionWithFocus(session);
32
+ */
33
+ export declare class BroadcastService {
34
+ private wsServer;
35
+ private registry;
36
+ private logger;
37
+ private lastBroadcastedFocusId;
38
+ constructor(config: BroadcastServiceConfig);
39
+ /**
40
+ * Broadcast a session update along with focus change
41
+ *
42
+ * @param session The session that was updated
43
+ */
44
+ broadcastSessionWithFocus(session: Session): void;
45
+ /**
46
+ * Broadcast session removal along with focus change
47
+ *
48
+ * @param sessionId The ID of the removed session
49
+ */
50
+ broadcastSessionRemovedWithFocus(sessionId: string): void;
51
+ /**
52
+ * Broadcast only the session update (no focus change)
53
+ *
54
+ * Use when focus should not be affected (e.g., idle status)
55
+ *
56
+ * @param session The session that was updated
57
+ */
58
+ broadcastSessionUpdate(session: Session): void;
59
+ /**
60
+ * Broadcast only the focus change (skips if focus hasn't changed)
61
+ */
62
+ broadcastFocusChange(): void;
63
+ /**
64
+ * Force broadcast focus change (used when focus must be re-sent, e.g. session removal)
65
+ */
66
+ forceBroadcastFocusChange(): void;
67
+ }
68
+ //# sourceMappingURL=broadcast-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast-service.d.ts","sourceRoot":"","sources":["../../src/services/broadcast-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAG3D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,wCAAwC;IACxC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,6CAA6C;IAC7C,QAAQ,EAAE,eAAe,CAAC;IAC1B,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,sBAAsB,CAAwC;gBAE1D,MAAM,EAAE,sBAAsB;IAM1C;;;;OAIG;IACH,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKjD;;;;OAIG;IACH,gCAAgC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKzD;;;;;;OAMG;IACH,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI9C;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAQ5B;;OAEG;IACH,yBAAyB,IAAI,IAAI;CAMlC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Broadcast Service
3
+ *
4
+ * Unified broadcasting service that combines session updates
5
+ * with focus change notifications. Eliminates repeated broadcast
6
+ * patterns in event handlers.
7
+ */
8
+ import { createLogger } from '../logging/logger-factory.js';
9
+ /**
10
+ * BroadcastService - handles unified session and focus broadcasting
11
+ *
12
+ * Instead of calling:
13
+ * wsServer.broadcastSessionUpdate(session);
14
+ * broadcastFocusChange();
15
+ *
16
+ * Use:
17
+ * broadcastService.broadcastSessionWithFocus(session);
18
+ */
19
+ export class BroadcastService {
20
+ wsServer;
21
+ registry;
22
+ logger;
23
+ lastBroadcastedFocusId = undefined;
24
+ constructor(config) {
25
+ this.wsServer = config.wsServer;
26
+ this.registry = config.registry;
27
+ this.logger = config.logger ?? createLogger({ silent: true });
28
+ }
29
+ /**
30
+ * Broadcast a session update along with focus change
31
+ *
32
+ * @param session The session that was updated
33
+ */
34
+ broadcastSessionWithFocus(session) {
35
+ this.wsServer.broadcastSessionUpdate(session);
36
+ this.broadcastFocusChange();
37
+ }
38
+ /**
39
+ * Broadcast session removal along with focus change
40
+ *
41
+ * @param sessionId The ID of the removed session
42
+ */
43
+ broadcastSessionRemovedWithFocus(sessionId) {
44
+ this.wsServer.broadcastSessionRemoved(sessionId);
45
+ this.forceBroadcastFocusChange();
46
+ }
47
+ /**
48
+ * Broadcast only the session update (no focus change)
49
+ *
50
+ * Use when focus should not be affected (e.g., idle status)
51
+ *
52
+ * @param session The session that was updated
53
+ */
54
+ broadcastSessionUpdate(session) {
55
+ this.wsServer.broadcastSessionUpdate(session);
56
+ }
57
+ /**
58
+ * Broadcast only the focus change (skips if focus hasn't changed)
59
+ */
60
+ broadcastFocusChange() {
61
+ const focusedId = this.registry.getFocusedSessionId();
62
+ if (focusedId === this.lastBroadcastedFocusId)
63
+ return;
64
+ this.lastBroadcastedFocusId = focusedId;
65
+ const focusedSession = focusedId ? this.registry.getSession(focusedId) ?? null : null;
66
+ this.wsServer.broadcastFocusChange(focusedId, focusedSession);
67
+ }
68
+ /**
69
+ * Force broadcast focus change (used when focus must be re-sent, e.g. session removal)
70
+ */
71
+ forceBroadcastFocusChange() {
72
+ const focusedId = this.registry.getFocusedSessionId();
73
+ this.lastBroadcastedFocusId = focusedId;
74
+ const focusedSession = focusedId ? this.registry.getSession(focusedId) ?? null : null;
75
+ this.wsServer.broadcastFocusChange(focusedId, focusedSession);
76
+ }
77
+ }
78
+ //# sourceMappingURL=broadcast-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast-service.js","sourceRoot":"","sources":["../../src/services/broadcast-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAc5D;;;;;;;;;GASG;AACH,MAAM,OAAO,gBAAgB;IACnB,QAAQ,CAAyB;IACjC,QAAQ,CAAkB;IAC1B,MAAM,CAAS;IACf,sBAAsB,GAA8B,SAAS,CAAC;IAEtE,YAAY,MAA8B;QACxC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED;;;;OAIG;IACH,yBAAyB,CAAC,OAAgB;QACxC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,gCAAgC,CAAC,SAAiB;QAChD,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACnC,CAAC;IAED;;;;;;OAMG;IACH,sBAAsB,CAAC,OAAgB;QACrC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QACtD,IAAI,SAAS,KAAK,IAAI,CAAC,sBAAsB;YAAE,OAAO;QACtD,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;QACxC,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACtF,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,yBAAyB;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QACtD,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;QACxC,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACtF,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAChE,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Broadcast Service Tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=broadcast-service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast-service.test.d.ts","sourceRoot":"","sources":["../../src/services/broadcast-service.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}