@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,42 @@
1
+ /**
2
+ * Layout Calculations
3
+ *
4
+ * Functions to calculate window geometry for various tiling layouts.
5
+ * All calculations account for work area (excluding dock/taskbar).
6
+ */
7
+ import type { WindowGeometry, TileLayout } from './types.js';
8
+ /**
9
+ * Calculate window geometry for a tile position within a layout
10
+ *
11
+ * @param workArea - The usable work area of the display
12
+ * @param layout - The tile layout type
13
+ * @param position - The position index (0-based)
14
+ * @param total - Total number of windows being tiled
15
+ */
16
+ export declare function calculateTileGeometry(workArea: WindowGeometry, layout: TileLayout, position: number, total: number): WindowGeometry;
17
+ /**
18
+ * Determine the best layout for a given number of windows
19
+ *
20
+ * @param windowCount - Number of windows to tile
21
+ */
22
+ export declare function suggestLayout(windowCount: number): TileLayout;
23
+ /**
24
+ * Get the maximum windows supported by a layout
25
+ */
26
+ export declare function getLayoutCapacity(layout: TileLayout): number;
27
+ /**
28
+ * Validate that a layout can accommodate the given number of windows
29
+ */
30
+ export declare function validateLayout(layout: TileLayout, windowCount: number): boolean;
31
+ /**
32
+ * Calculate geometry for browser + terminal(s) layout
33
+ *
34
+ * @param workArea - The usable work area of the display
35
+ * @param layout - The browser layout type
36
+ * @returns Geometry for browser window and terminal window(s)
37
+ */
38
+ export declare function calculateBrowserLayout(workArea: WindowGeometry, layout: 'browser-terminal' | 'browser-two-terminals'): {
39
+ browser: WindowGeometry;
40
+ terminals: WindowGeometry[];
41
+ };
42
+ //# sourceMappingURL=layouts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layouts.d.ts","sourceRoot":"","sources":["../../src/window-manager/layouts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7D;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,cAAc,CAmDhB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAQ7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAa5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAE/E;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,kBAAkB,GAAG,uBAAuB,GACnD;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,cAAc,EAAE,CAAA;CAAE,CAwB1D"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Layout Calculations
3
+ *
4
+ * Functions to calculate window geometry for various tiling layouts.
5
+ * All calculations account for work area (excluding dock/taskbar).
6
+ */
7
+ /**
8
+ * Calculate window geometry for a tile position within a layout
9
+ *
10
+ * @param workArea - The usable work area of the display
11
+ * @param layout - The tile layout type
12
+ * @param position - The position index (0-based)
13
+ * @param total - Total number of windows being tiled
14
+ */
15
+ export function calculateTileGeometry(workArea, layout, position, total) {
16
+ const { x, y, width, height } = workArea;
17
+ switch (layout) {
18
+ case 'side-by-side': {
19
+ // 2 windows, split horizontally
20
+ const halfW = Math.floor(width / 2);
21
+ if (position === 0) {
22
+ return { x, y, width: halfW, height };
23
+ }
24
+ else {
25
+ // Right side gets remaining width (handles odd pixels)
26
+ return { x: x + halfW, y, width: width - halfW, height };
27
+ }
28
+ }
29
+ case 'thirds': {
30
+ // 3 windows, equal thirds
31
+ const thirdW = Math.floor(width / 3);
32
+ if (position === 0) {
33
+ return { x, y, width: thirdW, height };
34
+ }
35
+ else if (position === 1) {
36
+ return { x: x + thirdW, y, width: thirdW, height };
37
+ }
38
+ else {
39
+ // Last third gets remaining width (handles uneven division)
40
+ return { x: x + thirdW * 2, y, width: width - thirdW * 2, height };
41
+ }
42
+ }
43
+ case '2x2': {
44
+ // 4 windows in a 2x2 grid
45
+ const halfW = Math.floor(width / 2);
46
+ const halfH = Math.floor(height / 2);
47
+ const row = Math.floor(position / 2); // 0 or 1
48
+ const col = position % 2; // 0 or 1
49
+ // Handle odd pixels by giving extra to right/bottom
50
+ const cellW = col === 1 ? width - halfW : halfW;
51
+ const cellH = row === 1 ? height - halfH : halfH;
52
+ return {
53
+ x: x + col * halfW,
54
+ y: y + row * halfH,
55
+ width: cellW,
56
+ height: cellH,
57
+ };
58
+ }
59
+ default:
60
+ // Fallback: just return the full work area
61
+ return workArea;
62
+ }
63
+ }
64
+ /**
65
+ * Determine the best layout for a given number of windows
66
+ *
67
+ * @param windowCount - Number of windows to tile
68
+ */
69
+ export function suggestLayout(windowCount) {
70
+ if (windowCount <= 2) {
71
+ return 'side-by-side';
72
+ }
73
+ else if (windowCount === 3) {
74
+ return 'thirds';
75
+ }
76
+ else {
77
+ return 'smart';
78
+ }
79
+ }
80
+ /**
81
+ * Get the maximum windows supported by a layout
82
+ */
83
+ export function getLayoutCapacity(layout) {
84
+ switch (layout) {
85
+ case 'side-by-side':
86
+ return 2;
87
+ case 'thirds':
88
+ return 3;
89
+ case '2x2':
90
+ return 4;
91
+ case 'smart':
92
+ return 8;
93
+ default:
94
+ return 2;
95
+ }
96
+ }
97
+ /**
98
+ * Validate that a layout can accommodate the given number of windows
99
+ */
100
+ export function validateLayout(layout, windowCount) {
101
+ return windowCount <= getLayoutCapacity(layout);
102
+ }
103
+ /**
104
+ * Calculate geometry for browser + terminal(s) layout
105
+ *
106
+ * @param workArea - The usable work area of the display
107
+ * @param layout - The browser layout type
108
+ * @returns Geometry for browser window and terminal window(s)
109
+ */
110
+ export function calculateBrowserLayout(workArea, layout) {
111
+ const { x, y, width, height } = workArea;
112
+ if (layout === 'browser-terminal') {
113
+ // Browser takes 5/7, terminal takes 2/7
114
+ const browserW = Math.floor(width * 5 / 7);
115
+ const terminalW = width - browserW;
116
+ return {
117
+ browser: { x, y, width: browserW, height },
118
+ terminals: [{ x: x + browserW, y, width: terminalW, height }],
119
+ };
120
+ }
121
+ // browser-two-terminals: browser on left (5/7), two terminals stacked on right (2/7)
122
+ const browserW = Math.floor(width * 5 / 7);
123
+ const terminalW = width - browserW;
124
+ const halfH = Math.floor(height / 2);
125
+ return {
126
+ browser: { x, y, width: browserW, height },
127
+ terminals: [
128
+ { x: x + browserW, y, width: terminalW, height: halfH },
129
+ { x: x + browserW, y: y + halfH, width: terminalW, height: height - halfH },
130
+ ],
131
+ };
132
+ }
133
+ //# sourceMappingURL=layouts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layouts.js","sourceRoot":"","sources":["../../src/window-manager/layouts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Linux Window Manager
3
+ *
4
+ * Implements window positioning and tiling using wmctrl and xrandr for X11.
5
+ * Note: Wayland does not support window positioning by design.
6
+ */
7
+ import type { WindowManager, WindowGeometry, Display, TileLayout, PositionResult, TileResult } from './types.js';
8
+ /**
9
+ * Linux Window Manager using wmctrl and xrandr
10
+ */
11
+ export declare class LinuxWindowManager implements WindowManager {
12
+ private wmctrlAvailable;
13
+ private xdotoolAvailable;
14
+ getPlatform(): string;
15
+ isSupported(): boolean;
16
+ /**
17
+ * Check if wmctrl is available (lazy check)
18
+ */
19
+ private checkWmctrl;
20
+ /**
21
+ * Check if xdotool is available (lazy check)
22
+ */
23
+ private checkXdotool;
24
+ /**
25
+ * Get all displays using xrandr
26
+ */
27
+ getDisplays(): Promise<Display[]>;
28
+ /**
29
+ * Position a terminal window by its terminal key
30
+ */
31
+ positionWindow(terminalKey: string, geometry: WindowGeometry): Promise<PositionResult>;
32
+ /**
33
+ * Position a window by X11 window ID using wmctrl
34
+ */
35
+ private positionByWindowId;
36
+ /**
37
+ * Position a window by process ID
38
+ */
39
+ private positionByPid;
40
+ /**
41
+ * Tile multiple terminal windows
42
+ */
43
+ tileWindows(terminalKeys: string[], layout: TileLayout, display?: Display): Promise<TileResult>;
44
+ }
45
+ //# sourceMappingURL=linux-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linux-manager.d.ts","sourceRoot":"","sources":["../../src/window-manager/linux-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,OAAO,EACP,UAAU,EACV,cAAc,EACd,UAAU,EACX,MAAM,YAAY,CAAC;AAyBpB;;GAEG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,gBAAgB,CAAwB;IAEhD,WAAW,IAAI,MAAM;IAIrB,WAAW,IAAI,OAAO;IAKtB;;OAEG;YACW,WAAW;IAOzB;;OAEG;YACW,YAAY;IAO1B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IA4EvC;;OAEG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAuC5F;;OAEG;YACW,kBAAkB;IAsBhC;;OAEG;YACW,aAAa;IAuD3B;;OAEG;IACG,WAAW,CACf,YAAY,EAAE,MAAM,EAAE,EACtB,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,UAAU,CAAC;CAoEvB"}
@@ -0,0 +1,299 @@
1
+ /**
2
+ * Linux Window Manager
3
+ *
4
+ * Implements window positioning and tiling using wmctrl and xrandr for X11.
5
+ * Note: Wayland does not support window positioning by design.
6
+ */
7
+ import { exec as execCb } from 'child_process';
8
+ import { promisify } from 'util';
9
+ import { calculateAllSlots } from './smart-layouts.js';
10
+ const execAsync = promisify(execCb);
11
+ /**
12
+ * Check if a command exists on the system
13
+ */
14
+ async function commandExists(cmd) {
15
+ try {
16
+ await execAsync(`which ${cmd}`);
17
+ return true;
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ }
23
+ /**
24
+ * Check if running under Wayland
25
+ */
26
+ function isWayland() {
27
+ return process.env.XDG_SESSION_TYPE === 'wayland' ||
28
+ process.env.WAYLAND_DISPLAY !== undefined;
29
+ }
30
+ /**
31
+ * Linux Window Manager using wmctrl and xrandr
32
+ */
33
+ export class LinuxWindowManager {
34
+ wmctrlAvailable = null;
35
+ xdotoolAvailable = null;
36
+ getPlatform() {
37
+ return 'linux';
38
+ }
39
+ isSupported() {
40
+ // Linux is supported, but Wayland has limitations
41
+ return process.platform === 'linux';
42
+ }
43
+ /**
44
+ * Check if wmctrl is available (lazy check)
45
+ */
46
+ async checkWmctrl() {
47
+ if (this.wmctrlAvailable === null) {
48
+ this.wmctrlAvailable = await commandExists('wmctrl');
49
+ }
50
+ return this.wmctrlAvailable;
51
+ }
52
+ /**
53
+ * Check if xdotool is available (lazy check)
54
+ */
55
+ async checkXdotool() {
56
+ if (this.xdotoolAvailable === null) {
57
+ this.xdotoolAvailable = await commandExists('xdotool');
58
+ }
59
+ return this.xdotoolAvailable;
60
+ }
61
+ /**
62
+ * Get all displays using xrandr
63
+ */
64
+ async getDisplays() {
65
+ if (isWayland()) {
66
+ // Wayland doesn't provide standard display enumeration
67
+ // Return a single display with estimated dimensions
68
+ return [
69
+ {
70
+ id: 'wayland-primary',
71
+ bounds: { x: 0, y: 0, width: 1920, height: 1080 },
72
+ workArea: { x: 0, y: 0, width: 1920, height: 1080 },
73
+ isPrimary: true,
74
+ },
75
+ ];
76
+ }
77
+ try {
78
+ const { stdout } = await execAsync('xrandr --query');
79
+ const displays = [];
80
+ // Parse xrandr output
81
+ // Example: "DP-1 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis)"
82
+ const lines = stdout.split('\n');
83
+ let displayIndex = 0;
84
+ for (const line of lines) {
85
+ const match = line.match(/^(\S+)\s+connected\s*(primary)?\s*(\d+)x(\d+)\+(\d+)\+(\d+)/);
86
+ if (match) {
87
+ const [, name, primary, width, height, x, y] = match;
88
+ displays.push({
89
+ id: name,
90
+ bounds: {
91
+ x: parseInt(x, 10),
92
+ y: parseInt(y, 10),
93
+ width: parseInt(width, 10),
94
+ height: parseInt(height, 10),
95
+ },
96
+ workArea: {
97
+ // Estimate work area (subtract common panel sizes)
98
+ x: parseInt(x, 10),
99
+ y: parseInt(y, 10) + 28, // Assume 28px top panel
100
+ width: parseInt(width, 10),
101
+ height: parseInt(height, 10) - 28,
102
+ },
103
+ isPrimary: primary === 'primary' || displayIndex === 0,
104
+ });
105
+ displayIndex++;
106
+ }
107
+ }
108
+ if (displays.length === 0) {
109
+ // Fallback
110
+ return [
111
+ {
112
+ id: 'primary',
113
+ bounds: { x: 0, y: 0, width: 1920, height: 1080 },
114
+ workArea: { x: 0, y: 28, width: 1920, height: 1052 },
115
+ isPrimary: true,
116
+ },
117
+ ];
118
+ }
119
+ return displays;
120
+ }
121
+ catch {
122
+ // Fallback to reasonable defaults
123
+ return [
124
+ {
125
+ id: 'primary',
126
+ bounds: { x: 0, y: 0, width: 1920, height: 1080 },
127
+ workArea: { x: 0, y: 28, width: 1920, height: 1052 },
128
+ isPrimary: true,
129
+ },
130
+ ];
131
+ }
132
+ }
133
+ /**
134
+ * Position a terminal window by its terminal key
135
+ */
136
+ async positionWindow(terminalKey, geometry) {
137
+ if (isWayland()) {
138
+ return {
139
+ success: false,
140
+ error: 'Window positioning is not supported on Wayland. Use your compositor\'s built-in tiling.',
141
+ };
142
+ }
143
+ const hasWmctrl = await this.checkWmctrl();
144
+ if (!hasWmctrl) {
145
+ return {
146
+ success: false,
147
+ error: 'wmctrl not installed. Install with: sudo apt install wmctrl',
148
+ };
149
+ }
150
+ const colonIndex = terminalKey.indexOf(':');
151
+ if (colonIndex === -1) {
152
+ return { success: false, error: `Invalid terminal key format: ${terminalKey}` };
153
+ }
154
+ const prefix = terminalKey.substring(0, colonIndex);
155
+ const value = terminalKey.substring(colonIndex + 1);
156
+ switch (prefix) {
157
+ case 'PID':
158
+ return this.positionByPid(value, geometry);
159
+ case 'WINDOWID':
160
+ case 'X11':
161
+ return this.positionByWindowId(value, geometry);
162
+ default:
163
+ // Try PID-based positioning as fallback
164
+ if (/^\d+$/.test(value)) {
165
+ return this.positionByPid(value, geometry);
166
+ }
167
+ return { success: false, error: `Unsupported terminal key prefix: ${prefix}` };
168
+ }
169
+ }
170
+ /**
171
+ * Position a window by X11 window ID using wmctrl
172
+ */
173
+ async positionByWindowId(windowId, geometry) {
174
+ const { x, y, width, height } = geometry;
175
+ try {
176
+ // wmctrl -e format: gravity,x,y,width,height
177
+ // gravity 0 means use current gravity
178
+ await execAsync(`wmctrl -i -r ${windowId} -e 0,${x},${y},${width},${height}`);
179
+ // Activate the window
180
+ await execAsync(`wmctrl -i -a ${windowId}`);
181
+ return { success: true };
182
+ }
183
+ catch (err) {
184
+ return { success: false, error: err instanceof Error ? err.message : String(err) };
185
+ }
186
+ }
187
+ /**
188
+ * Position a window by process ID
189
+ */
190
+ async positionByPid(pid, geometry) {
191
+ const { x, y, width, height } = geometry;
192
+ try {
193
+ // First, try to find the window ID for this PID using wmctrl
194
+ const { stdout } = await execAsync('wmctrl -l -p');
195
+ // Parse wmctrl output to find window with matching PID
196
+ // Format: 0x0400006 0 12345 hostname Window Title
197
+ const lines = stdout.split('\n');
198
+ let windowId = null;
199
+ for (const line of lines) {
200
+ const match = line.match(/^(0x[\da-f]+)\s+\d+\s+(\d+)/i);
201
+ if (match && match[2] === pid) {
202
+ windowId = match[1];
203
+ break;
204
+ }
205
+ }
206
+ // If not found directly, try xdotool to search by PID
207
+ if (!windowId) {
208
+ const hasXdotool = await this.checkXdotool();
209
+ if (hasXdotool) {
210
+ try {
211
+ const { stdout: xdoResult } = await execAsync(`xdotool search --pid ${pid}`);
212
+ const ids = xdoResult.trim().split('\n').filter(Boolean);
213
+ if (ids.length > 0) {
214
+ // Convert decimal to hex for wmctrl
215
+ windowId = '0x' + parseInt(ids[0], 10).toString(16);
216
+ }
217
+ }
218
+ catch {
219
+ // xdotool search failed
220
+ }
221
+ }
222
+ }
223
+ if (!windowId) {
224
+ return { success: false, error: `No window found for PID ${pid}` };
225
+ }
226
+ // Position using wmctrl
227
+ await execAsync(`wmctrl -i -r ${windowId} -e 0,${x},${y},${width},${height}`);
228
+ // Activate the window
229
+ await execAsync(`wmctrl -i -a ${windowId}`);
230
+ return { success: true };
231
+ }
232
+ catch (err) {
233
+ return { success: false, error: err instanceof Error ? err.message : String(err) };
234
+ }
235
+ }
236
+ /**
237
+ * Tile multiple terminal windows
238
+ */
239
+ async tileWindows(terminalKeys, layout, display) {
240
+ if (terminalKeys.length === 0) {
241
+ return { success: true, positioned: 0, total: 0 };
242
+ }
243
+ if (isWayland()) {
244
+ return {
245
+ success: false,
246
+ positioned: 0,
247
+ total: terminalKeys.length,
248
+ errors: ['Window tiling is not supported on Wayland. Use your compositor\'s built-in tiling.'],
249
+ };
250
+ }
251
+ const hasWmctrl = await this.checkWmctrl();
252
+ if (!hasWmctrl) {
253
+ return {
254
+ success: false,
255
+ positioned: 0,
256
+ total: terminalKeys.length,
257
+ errors: ['wmctrl not installed. Install with: sudo apt install wmctrl'],
258
+ };
259
+ }
260
+ // Get display info
261
+ const displays = await this.getDisplays();
262
+ const targetDisplay = display || displays.find(d => d.isPrimary) || displays[0];
263
+ if (!targetDisplay) {
264
+ return {
265
+ success: false,
266
+ positioned: 0,
267
+ total: terminalKeys.length,
268
+ errors: ['No display available'],
269
+ };
270
+ }
271
+ // Use smart layout engine for all window counts (consistent with tile state)
272
+ const allSlots = calculateAllSlots(targetDisplay.workArea, terminalKeys.length);
273
+ const errors = [];
274
+ let positioned = 0;
275
+ // Position each window
276
+ for (let i = 0; i < terminalKeys.length; i++) {
277
+ const terminalKey = terminalKeys[i];
278
+ const geometry = allSlots[i].geometry;
279
+ const result = await this.positionWindow(terminalKey, geometry);
280
+ if (result.success) {
281
+ positioned++;
282
+ }
283
+ else if (result.error) {
284
+ errors.push(`${terminalKey}: ${result.error}`);
285
+ }
286
+ // Small delay between windows
287
+ if (i < terminalKeys.length - 1) {
288
+ await new Promise(resolve => setTimeout(resolve, 50));
289
+ }
290
+ }
291
+ return {
292
+ success: positioned === terminalKeys.length,
293
+ positioned,
294
+ total: terminalKeys.length,
295
+ errors: errors.length > 0 ? errors : undefined,
296
+ };
297
+ }
298
+ }
299
+ //# sourceMappingURL=linux-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linux-manager.js","sourceRoot":"","sources":["../../src/window-manager/linux-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * macOS Window Manager
3
+ *
4
+ * Implements window positioning and tiling using AppleScript.
5
+ * Supports iTerm2, Terminal.app, and PID-based fallback.
6
+ */
7
+ import type { WindowManager, WindowGeometry, Display, TileLayout, PositionResult, TileResult } from './types.js';
8
+ /**
9
+ * macOS Window Manager using AppleScript
10
+ */
11
+ export declare class MacOSWindowManager implements WindowManager {
12
+ getPlatform(): string;
13
+ isSupported(): boolean;
14
+ /**
15
+ * Get all displays using NSScreen via JXA (JavaScript for Automation).
16
+ * Falls back to Finder AppleScript (primary only) if JXA fails.
17
+ */
18
+ getDisplays(): Promise<Display[]>;
19
+ /**
20
+ * Enumerate all displays via JXA using NSScreen.
21
+ * Returns displays with screen coordinates (top-left origin, Y-down).
22
+ */
23
+ private getDisplaysViaJXA;
24
+ /**
25
+ * Fallback: get primary display via Finder AppleScript
26
+ */
27
+ private getDisplaysViaFinder;
28
+ private defaultDisplay;
29
+ /**
30
+ * Position a terminal window by its terminal key.
31
+ * Handles DISCOVERED: wrapper by extracting the inner terminal type.
32
+ */
33
+ positionWindow(terminalKey: string, geometry: WindowGeometry): Promise<PositionResult>;
34
+ /**
35
+ * Position an iTerm2 window by session UUID
36
+ */
37
+ private positionITerm;
38
+ /**
39
+ * Position a Terminal.app window by TTY path
40
+ */
41
+ private positionTerminalApp;
42
+ /**
43
+ * Find a TTY across all known terminal apps and position the window.
44
+ * Tries iTerm2 first (most common for discovered sessions), then Terminal.app.
45
+ */
46
+ private findAndPositionByTTY;
47
+ /**
48
+ * Find a TTY across all known terminal apps and return window bounds.
49
+ * Tries iTerm2 first, then Terminal.app.
50
+ */
51
+ private findBoundsByTTY;
52
+ /**
53
+ * Position a window by process ID using System Events
54
+ * Note: This is app-level only (cannot select specific tabs)
55
+ */
56
+ private positionByPid;
57
+ /**
58
+ * Resolve a TTY device path from a PID using lsof.
59
+ * Useful when ps returns ?? but the process has a controlling TTY.
60
+ */
61
+ private resolveTtyFromPid;
62
+ /**
63
+ * Resolve a PID to a positioned window via TTY lookup with PID fallback.
64
+ * Chain: PID → lsof → TTY → iTerm/Terminal.app (tab-specific) → PID app-level
65
+ */
66
+ private resolveAndPositionByPid;
67
+ /**
68
+ * Resolve a PID to window bounds via TTY lookup.
69
+ * Chain: PID → lsof → TTY → findBoundsByTTY
70
+ */
71
+ private resolveBoundsByPid;
72
+ /**
73
+ * Position the browser window showing the Jacques GUI.
74
+ * Searches for a window with "Jacques" in its title across common browsers.
75
+ */
76
+ positionBrowserWindow(geometry: WindowGeometry): Promise<PositionResult>;
77
+ /**
78
+ * Get current bounds of a terminal window.
79
+ * Returns null if bounds cannot be determined.
80
+ * Handles DISCOVERED: wrapper by extracting the inner terminal type.
81
+ */
82
+ private getWindowBounds;
83
+ /**
84
+ * Detect which display contains the center point of the given bounds.
85
+ * Returns the matching display, or null if no display contains the center.
86
+ */
87
+ private detectDisplayForBounds;
88
+ /**
89
+ * Auto-detect the best display for tiling based on where windows currently are.
90
+ * Uses majority vote: tiles on the display with the most windows.
91
+ */
92
+ private detectTargetDisplay;
93
+ /**
94
+ * Get the target display for a set of terminal windows using majority vote.
95
+ * Returns the display with the most terminal windows, or primary display as fallback.
96
+ */
97
+ getTargetDisplayForTerminals(terminalKeys: string[]): Promise<Display | null>;
98
+ /**
99
+ * Tile multiple terminal windows
100
+ */
101
+ tileWindows(terminalKeys: string[], layout: TileLayout, display?: Display): Promise<TileResult>;
102
+ }
103
+ //# sourceMappingURL=macos-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"macos-manager.d.ts","sourceRoot":"","sources":["../../src/window-manager/macos-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,OAAO,EACP,UAAU,EACV,cAAc,EACd,UAAU,EACX,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD,WAAW,IAAI,MAAM;IAIrB,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAavC;;;OAGG;YACW,iBAAiB;IAoD/B;;OAEG;YACW,oBAAoB;IAwBlC,OAAO,CAAC,cAAc;IAStB;;;OAGG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAuC5F;;OAEG;YACW,aAAa;IA2C3B;;OAEG;YACW,mBAAmB;IAwCjC;;;OAGG;YACW,oBAAoB;IAwClC;;;OAGG;YACW,eAAe;IA8D7B;;;OAGG;YACW,aAAa;IA+B3B;;;OAGG;YACW,iBAAiB;IAa/B;;;OAGG;YACW,uBAAuB;IAWrC;;;OAGG;YACW,kBAAkB;IAQhC;;;OAGG;IACG,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAwC9E;;;;OAIG;YACW,eAAe;IAiE7B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;;OAGG;YACW,mBAAmB;IA8BjC;;;OAGG;IACG,4BAA4B,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAOnF;;OAEG;IACG,WAAW,CACf,YAAY,EAAE,MAAM,EAAE,EACtB,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,UAAU,CAAC;CA8DvB"}