@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,271 @@
1
+ /**
2
+ * Terminal Key Utilities
3
+ *
4
+ * Unified parsing, building, and matching of terminal key identifiers.
5
+ * Terminal keys uniquely identify terminal sessions across different terminal emulators.
6
+ *
7
+ * @module connection/terminal-key
8
+ */
9
+ import { TerminalKeyPrefix } from './constants.js';
10
+ /**
11
+ * Parse a terminal key string into its components.
12
+ *
13
+ * Handles all key formats:
14
+ * - ITERM:w0t0p0:UUID or ITERM:UUID
15
+ * - TTY:/dev/ttys001
16
+ * - PID:12345
17
+ * - KITTY:42
18
+ * - WEZTERM:pane:0
19
+ * - DISCOVERED:TTY:ttys001:12345
20
+ * - AUTO:session-uuid
21
+ *
22
+ * @param key The terminal key string to parse
23
+ * @returns Parsed terminal key structure
24
+ */
25
+ export function parseTerminalKey(key) {
26
+ if (!key) {
27
+ return {
28
+ prefix: TerminalKeyPrefix.UNKNOWN,
29
+ value: '',
30
+ isDiscovered: false,
31
+ };
32
+ }
33
+ // Check for DISCOVERED: wrapper
34
+ if (key.startsWith('DISCOVERED:')) {
35
+ const inner = key.substring(11); // Remove "DISCOVERED:"
36
+ const innerParsed = parseInnerKey(inner);
37
+ return {
38
+ prefix: TerminalKeyPrefix.DISCOVERED,
39
+ value: inner,
40
+ isDiscovered: true,
41
+ innerKey: innerParsed,
42
+ pid: innerParsed.pid,
43
+ uuid: innerParsed.uuid,
44
+ tty: innerParsed.tty,
45
+ };
46
+ }
47
+ return parseInnerKey(key);
48
+ }
49
+ /**
50
+ * Parse the inner portion of a terminal key (without DISCOVERED: wrapper)
51
+ */
52
+ function parseInnerKey(key) {
53
+ const colonIndex = key.indexOf(':');
54
+ if (colonIndex === -1) {
55
+ return {
56
+ prefix: TerminalKeyPrefix.UNKNOWN,
57
+ value: key,
58
+ isDiscovered: false,
59
+ };
60
+ }
61
+ const prefix = key.substring(0, colonIndex).toUpperCase();
62
+ const value = key.substring(colonIndex + 1);
63
+ const result = {
64
+ prefix: (prefix in TerminalKeyPrefix ? prefix : TerminalKeyPrefix.UNKNOWN),
65
+ value,
66
+ isDiscovered: false,
67
+ };
68
+ // Extract type-specific fields
69
+ switch (result.prefix) {
70
+ case TerminalKeyPrefix.ITERM:
71
+ result.uuid = extractItermUuid(value);
72
+ break;
73
+ case TerminalKeyPrefix.TTY:
74
+ result.tty = value;
75
+ // Check for TTY:path:pid format (used in DISCOVERED:TTY:...)
76
+ const ttyParts = value.split(':');
77
+ if (ttyParts.length >= 2) {
78
+ const lastPart = ttyParts[ttyParts.length - 1];
79
+ const maybePid = parseInt(lastPart, 10);
80
+ if (!isNaN(maybePid) && maybePid > 0) {
81
+ result.pid = maybePid;
82
+ result.tty = ttyParts.slice(0, -1).join(':');
83
+ }
84
+ }
85
+ break;
86
+ case TerminalKeyPrefix.PID:
87
+ const pid = parseInt(value, 10);
88
+ if (!isNaN(pid) && pid > 0) {
89
+ result.pid = pid;
90
+ }
91
+ break;
92
+ case TerminalKeyPrefix.KITTY:
93
+ case TerminalKeyPrefix.WEZTERM:
94
+ case TerminalKeyPrefix.TERM:
95
+ case TerminalKeyPrefix.WT:
96
+ case TerminalKeyPrefix.AUTO:
97
+ // No special extraction needed
98
+ break;
99
+ }
100
+ return result;
101
+ }
102
+ /**
103
+ * Build a terminal key string from identity information.
104
+ *
105
+ * Priority order:
106
+ * 1. iTerm session ID
107
+ * 2. Kitty window ID
108
+ * 3. WezTerm pane ID
109
+ * 4. Windows Terminal session
110
+ * 5. TTY path
111
+ * 6. PID (fallback)
112
+ *
113
+ * @param info Terminal identity information
114
+ * @returns Terminal key string or null if no valid identity
115
+ */
116
+ export function buildTerminalKey(info) {
117
+ if (info.itermSessionId) {
118
+ return `ITERM:${info.itermSessionId}`;
119
+ }
120
+ if (info.kittyWindowId) {
121
+ return `KITTY:${info.kittyWindowId}`;
122
+ }
123
+ if (info.weztermPaneId) {
124
+ return `WEZTERM:${info.weztermPaneId}`;
125
+ }
126
+ if (info.wtSession) {
127
+ return `WT:${info.wtSession}`;
128
+ }
129
+ if (info.termSessionId) {
130
+ return `TERM:${info.termSessionId}`;
131
+ }
132
+ if (info.tty) {
133
+ return `TTY:${info.tty}`;
134
+ }
135
+ if (info.pid && info.pid > 0) {
136
+ return `PID:${info.pid}`;
137
+ }
138
+ return null;
139
+ }
140
+ /**
141
+ * Extract PID from a terminal key if present.
142
+ *
143
+ * Handles formats:
144
+ * - PID:12345
145
+ * - DISCOVERED:PID:12345
146
+ * - DISCOVERED:TTY:ttys001:12345 (PID at end)
147
+ *
148
+ * @param key Terminal key string
149
+ * @returns PID number or null if not extractable
150
+ */
151
+ export function extractPid(key) {
152
+ if (!key)
153
+ return null;
154
+ // Check for DISCOVERED:PID:xxx or PID:xxx
155
+ const pidMatch = key.match(/(?:DISCOVERED:)?PID:(\d+)/);
156
+ if (pidMatch) {
157
+ return parseInt(pidMatch[1], 10);
158
+ }
159
+ // Check for DISCOVERED:TTY:xxx:pid at the end
160
+ const ttyMatch = key.match(/DISCOVERED:TTY:[^:]+:(\d+)$/);
161
+ if (ttyMatch) {
162
+ return parseInt(ttyMatch[1], 10);
163
+ }
164
+ return null;
165
+ }
166
+ /**
167
+ * Extract the UUID from an iTerm session ID or terminal key.
168
+ *
169
+ * iTerm's ITERM_SESSION_ID format is "w0t0p0:UUID" where:
170
+ * - w0 = window index
171
+ * - t0 = tab index
172
+ * - p0 = pane index
173
+ * - UUID = unique session identifier
174
+ *
175
+ * AppleScript's `unique ID of session` returns just the UUID portion.
176
+ *
177
+ * @param value The iTerm session ID value (after ITERM: prefix) or full key
178
+ * @returns The UUID portion, or the input if no colon present
179
+ */
180
+ export function extractItermUuid(value) {
181
+ if (!value)
182
+ return '';
183
+ // If this is a full ITERM: key, extract the value portion
184
+ let itermValue = value;
185
+ if (value.startsWith('ITERM:')) {
186
+ itermValue = value.substring(6);
187
+ }
188
+ // Find the colon separator between w0t0p0 and UUID
189
+ const colonIndex = itermValue.indexOf(':');
190
+ if (colonIndex === -1) {
191
+ // No colon means it's already just the UUID
192
+ return itermValue;
193
+ }
194
+ // Return everything after the colon (the UUID)
195
+ return itermValue.substring(colonIndex + 1);
196
+ }
197
+ /**
198
+ * Check if two terminal keys refer to the same terminal.
199
+ *
200
+ * Handles special cases:
201
+ * - iTerm keys match by UUID (ignoring w0t0p0 prefix differences)
202
+ * - DISCOVERED: wrapper is unwrapped for comparison
203
+ * - Exact string match as fallback
204
+ *
205
+ * @param keyA First terminal key
206
+ * @param keyB Second terminal key
207
+ * @returns True if keys match the same terminal
208
+ */
209
+ export function matchTerminalKeys(keyA, keyB) {
210
+ if (!keyA || !keyB)
211
+ return false;
212
+ // Exact match
213
+ if (keyA === keyB)
214
+ return true;
215
+ const parsedA = parseTerminalKey(keyA);
216
+ const parsedB = parseTerminalKey(keyB);
217
+ // Get effective prefix (unwrap DISCOVERED)
218
+ const effectiveA = parsedA.isDiscovered && parsedA.innerKey ? parsedA.innerKey : parsedA;
219
+ const effectiveB = parsedB.isDiscovered && parsedB.innerKey ? parsedB.innerKey : parsedB;
220
+ // Different types don't match
221
+ if (effectiveA.prefix !== effectiveB.prefix)
222
+ return false;
223
+ // iTerm: match by UUID (handles w0t0p0:UUID vs UUID mismatch)
224
+ if (effectiveA.prefix === TerminalKeyPrefix.ITERM) {
225
+ const uuidA = effectiveA.uuid || extractItermUuid(effectiveA.value);
226
+ const uuidB = effectiveB.uuid || extractItermUuid(effectiveB.value);
227
+ return uuidA === uuidB && uuidA !== '';
228
+ }
229
+ // TTY: match by path (ignore PID suffix if present)
230
+ if (effectiveA.prefix === TerminalKeyPrefix.TTY) {
231
+ const ttyA = effectiveA.tty || effectiveA.value.split(':')[0];
232
+ const ttyB = effectiveB.tty || effectiveB.value.split(':')[0];
233
+ return ttyA === ttyB;
234
+ }
235
+ // PID: match by number
236
+ if (effectiveA.prefix === TerminalKeyPrefix.PID) {
237
+ return effectiveA.pid === effectiveB.pid && effectiveA.pid !== undefined;
238
+ }
239
+ // Default: exact value match
240
+ return effectiveA.value === effectiveB.value;
241
+ }
242
+ /**
243
+ * Get a human-readable description of a terminal key.
244
+ *
245
+ * @param key Terminal key string
246
+ * @returns Human-readable description
247
+ */
248
+ export function describeTerminalKey(key) {
249
+ const parsed = parseTerminalKey(key);
250
+ if (parsed.prefix === TerminalKeyPrefix.UNKNOWN) {
251
+ return `Unknown terminal: ${key}`;
252
+ }
253
+ const prefix = parsed.isDiscovered ? `Discovered ${parsed.innerKey?.prefix || 'unknown'}` : parsed.prefix;
254
+ switch (parsed.innerKey?.prefix || parsed.prefix) {
255
+ case TerminalKeyPrefix.ITERM:
256
+ return `${prefix} (UUID: ${parsed.uuid?.substring(0, 8)}...)`;
257
+ case TerminalKeyPrefix.TTY:
258
+ return `${prefix} (${parsed.tty})`;
259
+ case TerminalKeyPrefix.PID:
260
+ return `${prefix} (PID: ${parsed.pid})`;
261
+ case TerminalKeyPrefix.KITTY:
262
+ return `${prefix} (Window: ${parsed.value})`;
263
+ case TerminalKeyPrefix.WEZTERM:
264
+ return `${prefix} (Pane: ${parsed.value})`;
265
+ case TerminalKeyPrefix.AUTO:
266
+ return `Auto-registered session`;
267
+ default:
268
+ return `${prefix}: ${parsed.value}`;
269
+ }
270
+ }
271
+ //# sourceMappingURL=terminal-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-key.js","sourceRoot":"","sources":["../../src/connection/terminal-key.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Terminal Key Utilities Tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=terminal-key.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-key.test.d.ts","sourceRoot":"","sources":["../../src/connection/terminal-key.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Terminal Key Utilities Tests
3
+ */
4
+ import { parseTerminalKey, buildTerminalKey, extractPid, extractItermUuid, matchTerminalKeys, describeTerminalKey, } from './terminal-key.js';
5
+ import { TerminalKeyPrefix } from './constants.js';
6
+ describe('terminal-key', () => {
7
+ describe('parseTerminalKey', () => {
8
+ it('should parse ITERM key with w0t0p0:UUID format', () => {
9
+ const result = parseTerminalKey('ITERM:w0t0p0:8A7D83CA-3FA0-4D00-B34E-08C4FFA1E512');
10
+ expect(result.prefix).toBe(TerminalKeyPrefix.ITERM);
11
+ expect(result.value).toBe('w0t0p0:8A7D83CA-3FA0-4D00-B34E-08C4FFA1E512');
12
+ expect(result.uuid).toBe('8A7D83CA-3FA0-4D00-B34E-08C4FFA1E512');
13
+ expect(result.isDiscovered).toBe(false);
14
+ });
15
+ it('should parse ITERM key with UUID only', () => {
16
+ const result = parseTerminalKey('ITERM:8A7D83CA-3FA0-4D00-B34E-08C4FFA1E512');
17
+ expect(result.prefix).toBe(TerminalKeyPrefix.ITERM);
18
+ expect(result.uuid).toBe('8A7D83CA-3FA0-4D00-B34E-08C4FFA1E512');
19
+ });
20
+ it('should parse TTY key', () => {
21
+ const result = parseTerminalKey('TTY:/dev/ttys001');
22
+ expect(result.prefix).toBe(TerminalKeyPrefix.TTY);
23
+ expect(result.tty).toBe('/dev/ttys001');
24
+ });
25
+ it('should parse PID key', () => {
26
+ const result = parseTerminalKey('PID:12345');
27
+ expect(result.prefix).toBe(TerminalKeyPrefix.PID);
28
+ expect(result.pid).toBe(12345);
29
+ });
30
+ it('should parse KITTY key', () => {
31
+ const result = parseTerminalKey('KITTY:42');
32
+ expect(result.prefix).toBe(TerminalKeyPrefix.KITTY);
33
+ expect(result.value).toBe('42');
34
+ });
35
+ it('should parse WEZTERM key', () => {
36
+ const result = parseTerminalKey('WEZTERM:pane:0');
37
+ expect(result.prefix).toBe(TerminalKeyPrefix.WEZTERM);
38
+ expect(result.value).toBe('pane:0');
39
+ });
40
+ it('should parse AUTO key', () => {
41
+ const result = parseTerminalKey('AUTO:abc-123-def');
42
+ expect(result.prefix).toBe(TerminalKeyPrefix.AUTO);
43
+ expect(result.value).toBe('abc-123-def');
44
+ });
45
+ it('should parse DISCOVERED:TTY key with PID', () => {
46
+ const result = parseTerminalKey('DISCOVERED:TTY:ttys001:12345');
47
+ expect(result.prefix).toBe(TerminalKeyPrefix.DISCOVERED);
48
+ expect(result.isDiscovered).toBe(true);
49
+ expect(result.innerKey?.prefix).toBe(TerminalKeyPrefix.TTY);
50
+ expect(result.pid).toBe(12345);
51
+ expect(result.tty).toBe('ttys001');
52
+ });
53
+ it('should parse DISCOVERED:PID key', () => {
54
+ const result = parseTerminalKey('DISCOVERED:PID:54321');
55
+ expect(result.prefix).toBe(TerminalKeyPrefix.DISCOVERED);
56
+ expect(result.isDiscovered).toBe(true);
57
+ expect(result.innerKey?.prefix).toBe(TerminalKeyPrefix.PID);
58
+ expect(result.pid).toBe(54321);
59
+ });
60
+ it('should parse DISCOVERED:iTerm2 key', () => {
61
+ const result = parseTerminalKey('DISCOVERED:iTerm2:ABC123-DEF456');
62
+ expect(result.prefix).toBe(TerminalKeyPrefix.DISCOVERED);
63
+ expect(result.isDiscovered).toBe(true);
64
+ });
65
+ it('should handle empty string', () => {
66
+ const result = parseTerminalKey('');
67
+ expect(result.prefix).toBe(TerminalKeyPrefix.UNKNOWN);
68
+ expect(result.value).toBe('');
69
+ });
70
+ it('should handle key without colon', () => {
71
+ const result = parseTerminalKey('invalid-key');
72
+ expect(result.prefix).toBe(TerminalKeyPrefix.UNKNOWN);
73
+ expect(result.value).toBe('invalid-key');
74
+ });
75
+ });
76
+ describe('buildTerminalKey', () => {
77
+ it('should build ITERM key', () => {
78
+ const key = buildTerminalKey({ itermSessionId: 'w0t0p0:UUID-123' });
79
+ expect(key).toBe('ITERM:w0t0p0:UUID-123');
80
+ });
81
+ it('should build TTY key', () => {
82
+ const key = buildTerminalKey({ tty: '/dev/ttys001' });
83
+ expect(key).toBe('TTY:/dev/ttys001');
84
+ });
85
+ it('should build PID key', () => {
86
+ const key = buildTerminalKey({ pid: 12345 });
87
+ expect(key).toBe('PID:12345');
88
+ });
89
+ it('should build KITTY key', () => {
90
+ const key = buildTerminalKey({ kittyWindowId: '42' });
91
+ expect(key).toBe('KITTY:42');
92
+ });
93
+ it('should build WEZTERM key', () => {
94
+ const key = buildTerminalKey({ weztermPaneId: 'pane:0' });
95
+ expect(key).toBe('WEZTERM:pane:0');
96
+ });
97
+ it('should prioritize iTerm over TTY', () => {
98
+ const key = buildTerminalKey({ itermSessionId: 'UUID', tty: '/dev/ttys001' });
99
+ expect(key).toBe('ITERM:UUID');
100
+ });
101
+ it('should prioritize TTY over PID', () => {
102
+ const key = buildTerminalKey({ tty: '/dev/ttys001', pid: 12345 });
103
+ expect(key).toBe('TTY:/dev/ttys001');
104
+ });
105
+ it('should return null for empty identity', () => {
106
+ const key = buildTerminalKey({});
107
+ expect(key).toBeNull();
108
+ });
109
+ it('should return null for zero PID', () => {
110
+ const key = buildTerminalKey({ pid: 0 });
111
+ expect(key).toBeNull();
112
+ });
113
+ });
114
+ describe('extractPid', () => {
115
+ it('should extract PID from PID:xxx format', () => {
116
+ expect(extractPid('PID:12345')).toBe(12345);
117
+ });
118
+ it('should extract PID from DISCOVERED:PID:xxx format', () => {
119
+ expect(extractPid('DISCOVERED:PID:54321')).toBe(54321);
120
+ });
121
+ it('should extract PID from DISCOVERED:TTY:xxx:pid format', () => {
122
+ expect(extractPid('DISCOVERED:TTY:ttys001:68231')).toBe(68231);
123
+ });
124
+ it('should return null for TTY without PID', () => {
125
+ expect(extractPid('TTY:/dev/ttys001')).toBeNull();
126
+ });
127
+ it('should return null for ITERM key', () => {
128
+ expect(extractPid('ITERM:w0t0p0:UUID')).toBeNull();
129
+ });
130
+ it('should return null for empty string', () => {
131
+ expect(extractPid('')).toBeNull();
132
+ });
133
+ it('should return null for null-ish input', () => {
134
+ expect(extractPid(null)).toBeNull();
135
+ });
136
+ });
137
+ describe('extractItermUuid', () => {
138
+ it('should extract UUID from w0t0p0:UUID format', () => {
139
+ expect(extractItermUuid('w0t0p0:8A7D83CA-3FA0-4D00-B34E-08C4FFA1E512'))
140
+ .toBe('8A7D83CA-3FA0-4D00-B34E-08C4FFA1E512');
141
+ });
142
+ it('should extract UUID from w1t2p0:UUID format', () => {
143
+ expect(extractItermUuid('w1t2p0:ABCDEF12-3456-7890-ABCD-EF1234567890'))
144
+ .toBe('ABCDEF12-3456-7890-ABCD-EF1234567890');
145
+ });
146
+ it('should return value as-is if no colon present', () => {
147
+ expect(extractItermUuid('8A7D83CA-3FA0-4D00-B34E-08C4FFA1E512'))
148
+ .toBe('8A7D83CA-3FA0-4D00-B34E-08C4FFA1E512');
149
+ });
150
+ it('should handle full ITERM: key', () => {
151
+ expect(extractItermUuid('ITERM:w0t0p0:UUID-123'))
152
+ .toBe('UUID-123');
153
+ });
154
+ it('should return empty string for empty input', () => {
155
+ expect(extractItermUuid('')).toBe('');
156
+ });
157
+ });
158
+ describe('matchTerminalKeys', () => {
159
+ it('should match identical keys', () => {
160
+ expect(matchTerminalKeys('ITERM:w0t0p0:UUID', 'ITERM:w0t0p0:UUID')).toBe(true);
161
+ });
162
+ it('should match iTerm keys with same UUID but different w/t/p prefix', () => {
163
+ expect(matchTerminalKeys('ITERM:w0t0p0:8A7D83CA-3FA0-4D00-B34E-08C4FFA1E512', 'ITERM:w1t2p0:8A7D83CA-3FA0-4D00-B34E-08C4FFA1E512')).toBe(true);
164
+ });
165
+ it('should match iTerm key with and without w/t/p prefix', () => {
166
+ expect(matchTerminalKeys('ITERM:w0t0p0:UUID-123', 'ITERM:UUID-123')).toBe(true);
167
+ });
168
+ it('should not match iTerm keys with different UUIDs', () => {
169
+ expect(matchTerminalKeys('ITERM:UUID-A', 'ITERM:UUID-B')).toBe(false);
170
+ });
171
+ it('should match TTY keys', () => {
172
+ expect(matchTerminalKeys('TTY:/dev/ttys001', 'TTY:/dev/ttys001')).toBe(true);
173
+ });
174
+ it('should not match different TTY keys', () => {
175
+ expect(matchTerminalKeys('TTY:/dev/ttys001', 'TTY:/dev/ttys002')).toBe(false);
176
+ });
177
+ it('should match PID keys', () => {
178
+ expect(matchTerminalKeys('PID:12345', 'PID:12345')).toBe(true);
179
+ });
180
+ it('should not match different types', () => {
181
+ expect(matchTerminalKeys('ITERM:UUID', 'TTY:/dev/ttys001')).toBe(false);
182
+ });
183
+ it('should match DISCOVERED key with unwrapped key', () => {
184
+ expect(matchTerminalKeys('DISCOVERED:TTY:ttys001:12345', 'TTY:ttys001')).toBe(true);
185
+ });
186
+ it('should return false for empty keys', () => {
187
+ expect(matchTerminalKeys('', 'ITERM:UUID')).toBe(false);
188
+ expect(matchTerminalKeys('ITERM:UUID', '')).toBe(false);
189
+ });
190
+ });
191
+ describe('describeTerminalKey', () => {
192
+ it('should describe ITERM key', () => {
193
+ const desc = describeTerminalKey('ITERM:w0t0p0:8A7D83CA-3FA0-4D00-B34E-08C4FFA1E512');
194
+ expect(desc).toContain('ITERM');
195
+ expect(desc).toContain('8A7D83CA');
196
+ });
197
+ it('should describe TTY key', () => {
198
+ const desc = describeTerminalKey('TTY:/dev/ttys001');
199
+ expect(desc).toContain('TTY');
200
+ expect(desc).toContain('/dev/ttys001');
201
+ });
202
+ it('should describe PID key', () => {
203
+ const desc = describeTerminalKey('PID:12345');
204
+ expect(desc).toContain('PID');
205
+ expect(desc).toContain('12345');
206
+ });
207
+ it('should describe DISCOVERED key', () => {
208
+ const desc = describeTerminalKey('DISCOVERED:TTY:ttys001:12345');
209
+ expect(desc).toContain('Discovered');
210
+ });
211
+ it('should describe AUTO key', () => {
212
+ const desc = describeTerminalKey('AUTO:session-123');
213
+ expect(desc).toContain('Auto-registered');
214
+ });
215
+ it('should describe unknown key', () => {
216
+ const desc = describeTerminalKey('invalid');
217
+ expect(desc).toContain('Unknown');
218
+ });
219
+ });
220
+ });
221
+ //# sourceMappingURL=terminal-key.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-key.test.js","sourceRoot":"","sources":["../../src/connection/terminal-key.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Worktree Management
3
+ *
4
+ * Creates, lists, inspects, and removes git worktrees for the project.
5
+ * Extends git-info.ts (read-only detection) with write operations.
6
+ *
7
+ * @module connection/worktree
8
+ */
9
+ export interface CreateWorktreeOptions {
10
+ /** Canonical git repo root (main worktree root) */
11
+ repoRoot: string;
12
+ /** Name for the new worktree (used as directory suffix and branch name) */
13
+ name: string;
14
+ /** Base branch to create from (defaults to HEAD) */
15
+ baseBranch?: string;
16
+ }
17
+ export interface CreateWorktreeResult {
18
+ success: boolean;
19
+ /** Absolute path to the new worktree directory */
20
+ worktreePath?: string;
21
+ /** Branch name created for the worktree */
22
+ branch?: string;
23
+ error?: string;
24
+ }
25
+ export interface WorktreeEntry {
26
+ /** Worktree name (basename of directory) */
27
+ name: string;
28
+ /** Absolute path to worktree directory */
29
+ path: string;
30
+ /** Branch checked out in this worktree */
31
+ branch: string | null;
32
+ /** Whether this is the main worktree */
33
+ isMain: boolean;
34
+ }
35
+ export interface WorktreeStatus {
36
+ /** Whether the worktree has uncommitted changes (staged or unstaged) */
37
+ hasUncommittedChanges: boolean;
38
+ /** Whether the worktree branch has been merged into the default branch */
39
+ isMergedToMain: boolean;
40
+ }
41
+ export interface WorktreeWithStatus extends WorktreeEntry {
42
+ status: WorktreeStatus;
43
+ }
44
+ export interface RemoveWorktreeOptions {
45
+ /** Canonical git repo root (main worktree root) */
46
+ repoRoot: string;
47
+ /** Absolute path of the worktree to remove */
48
+ worktreePath: string;
49
+ /** Force removal even with uncommitted changes */
50
+ force?: boolean;
51
+ /** Also delete the branch after removing the worktree */
52
+ deleteBranch?: boolean;
53
+ }
54
+ export interface RemoveWorktreeResult {
55
+ success: boolean;
56
+ error?: string;
57
+ /** Whether the branch was also deleted */
58
+ branchDeleted?: boolean;
59
+ }
60
+ export declare function validateWorktreeName(name: string): string | null;
61
+ /**
62
+ * Compute the worktree path: sibling to repo root with name suffix.
63
+ * e.g. /path/to/project → /path/to/project-<name>
64
+ */
65
+ export declare function computeWorktreePath(repoRoot: string, name: string): string;
66
+ /**
67
+ * Create a new git worktree as a sibling directory.
68
+ *
69
+ * Runs `git worktree add -b <name> <path>` which creates both
70
+ * the worktree directory and a new branch.
71
+ */
72
+ export declare function createWorktree(options: CreateWorktreeOptions): Promise<CreateWorktreeResult>;
73
+ /**
74
+ * List all worktrees for a repository.
75
+ * Prunes stale entries first, then wraps `git worktree list --porcelain`.
76
+ */
77
+ export declare function listWorktrees(repoRoot: string): Promise<WorktreeEntry[]>;
78
+ /**
79
+ * Parse `git worktree list --porcelain` output into structured entries.
80
+ *
81
+ * Format:
82
+ * worktree /path/to/main
83
+ * HEAD abc123
84
+ * branch refs/heads/main
85
+ * (blank line)
86
+ * worktree /path/to/other
87
+ * HEAD def456
88
+ * branch refs/heads/feature
89
+ * (blank line)
90
+ */
91
+ export declare function parsePorcelainOutput(output: string, repoRoot: string): WorktreeEntry[];
92
+ /**
93
+ * Detect the default branch for a repository (main or master).
94
+ * Tries `git symbolic-ref refs/remotes/origin/HEAD`, falls back to checking
95
+ * if 'main' or 'master' branch exists locally.
96
+ */
97
+ export declare function detectDefaultBranch(repoRoot: string): Promise<string>;
98
+ /**
99
+ * Check status of a single worktree: uncommitted changes and merge status.
100
+ */
101
+ export declare function checkWorktreeStatus(worktreePath: string, branch: string | null, defaultBranch: string, repoRoot: string): Promise<WorktreeStatus>;
102
+ /**
103
+ * List all worktrees with their status (uncommitted changes, merge status).
104
+ * Returns all worktrees including main.
105
+ */
106
+ export declare function listWorktreesWithStatus(repoRoot: string): Promise<WorktreeWithStatus[]>;
107
+ /**
108
+ * Remove a git worktree and optionally delete its branch.
109
+ *
110
+ * Runs `git worktree remove <path>` with optional --force flag.
111
+ * If deleteBranch is true, also runs `git branch -d <branch>`.
112
+ */
113
+ export declare function removeWorktree(options: RemoveWorktreeOptions): Promise<RemoveWorktreeResult>;
114
+ //# sourceMappingURL=worktree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/connection/worktree.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAuBH,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,qBAAqB,EAAE,OAAO,CAAC;IAC/B,0EAA0E;IAC1E,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yDAAyD;IACzD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAMD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKhE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1E;AAID;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA8ClG;AAID;;;GAGG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAkB9E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAoCtF;AAID;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB3E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC,CA2DzB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA2B7F;AAID;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAgElG"}