@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.
- package/dist/config/config.d.ts +34 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +32 -0
- package/dist/config/config.js.map +1 -0
- package/dist/connection/applescript.d.ts +46 -0
- package/dist/connection/applescript.d.ts.map +1 -0
- package/dist/connection/applescript.js +62 -0
- package/dist/connection/applescript.js.map +1 -0
- package/dist/connection/applescript.test.d.ts +5 -0
- package/dist/connection/applescript.test.d.ts.map +1 -0
- package/dist/connection/applescript.test.js +64 -0
- package/dist/connection/applescript.test.js.map +1 -0
- package/dist/connection/constants.d.ts +88 -0
- package/dist/connection/constants.d.ts.map +1 -0
- package/dist/connection/constants.js +110 -0
- package/dist/connection/constants.js.map +1 -0
- package/dist/connection/git-info.d.ts +30 -0
- package/dist/connection/git-info.d.ts.map +1 -0
- package/dist/connection/git-info.js +52 -0
- package/dist/connection/git-info.js.map +1 -0
- package/dist/connection/git-info.test.d.ts +5 -0
- package/dist/connection/git-info.test.d.ts.map +1 -0
- package/dist/connection/git-info.test.js +35 -0
- package/dist/connection/git-info.test.js.map +1 -0
- package/dist/connection/index.d.ts +19 -0
- package/dist/connection/index.d.ts.map +1 -0
- package/dist/connection/index.js +36 -0
- package/dist/connection/index.js.map +1 -0
- package/dist/connection/process-detection.d.ts +58 -0
- package/dist/connection/process-detection.d.ts.map +1 -0
- package/dist/connection/process-detection.js +239 -0
- package/dist/connection/process-detection.js.map +1 -0
- package/dist/connection/process-detection.test.d.ts +5 -0
- package/dist/connection/process-detection.test.d.ts.map +1 -0
- package/dist/connection/process-detection.test.js +43 -0
- package/dist/connection/process-detection.test.js.map +1 -0
- package/dist/connection/session-discovery.d.ts +55 -0
- package/dist/connection/session-discovery.d.ts.map +1 -0
- package/dist/connection/session-discovery.js +311 -0
- package/dist/connection/session-discovery.js.map +1 -0
- package/dist/connection/terminal-key.d.ts +126 -0
- package/dist/connection/terminal-key.d.ts.map +1 -0
- package/dist/connection/terminal-key.js +271 -0
- package/dist/connection/terminal-key.js.map +1 -0
- package/dist/connection/terminal-key.test.d.ts +5 -0
- package/dist/connection/terminal-key.test.d.ts.map +1 -0
- package/dist/connection/terminal-key.test.js +221 -0
- package/dist/connection/terminal-key.test.js.map +1 -0
- package/dist/connection/worktree.d.ts +114 -0
- package/dist/connection/worktree.d.ts.map +1 -0
- package/dist/connection/worktree.js +320 -0
- package/dist/connection/worktree.js.map +1 -0
- package/dist/connection/worktree.test.d.ts +5 -0
- package/dist/connection/worktree.test.d.ts.map +1 -0
- package/dist/connection/worktree.test.js +113 -0
- package/dist/connection/worktree.test.js.map +1 -0
- package/dist/focus-watcher.d.ts +51 -0
- package/dist/focus-watcher.d.ts.map +1 -0
- package/dist/focus-watcher.js +169 -0
- package/dist/focus-watcher.js.map +1 -0
- package/dist/handlers/event-handler.d.ts +93 -0
- package/dist/handlers/event-handler.d.ts.map +1 -0
- package/dist/handlers/event-handler.js +196 -0
- package/dist/handlers/event-handler.js.map +1 -0
- package/dist/handlers/event-handler.test.d.ts +5 -0
- package/dist/handlers/event-handler.test.d.ts.map +1 -0
- package/dist/handlers/event-handler.test.js +305 -0
- package/dist/handlers/event-handler.test.js.map +1 -0
- package/dist/handlers/session-handler.d.ts +23 -0
- package/dist/handlers/session-handler.d.ts.map +1 -0
- package/dist/handlers/session-handler.js +104 -0
- package/dist/handlers/session-handler.js.map +1 -0
- package/dist/handlers/session-handler.test.d.ts +5 -0
- package/dist/handlers/session-handler.test.d.ts.map +1 -0
- package/dist/handlers/session-handler.test.js +89 -0
- package/dist/handlers/session-handler.test.js.map +1 -0
- package/dist/handlers/settings-handler.d.ts +32 -0
- package/dist/handlers/settings-handler.d.ts.map +1 -0
- package/dist/handlers/settings-handler.js +127 -0
- package/dist/handlers/settings-handler.js.map +1 -0
- package/dist/handlers/settings-handler.test.d.ts +5 -0
- package/dist/handlers/settings-handler.test.d.ts.map +1 -0
- package/dist/handlers/settings-handler.test.js +105 -0
- package/dist/handlers/settings-handler.test.js.map +1 -0
- package/dist/handlers/window-handler.d.ts +30 -0
- package/dist/handlers/window-handler.d.ts.map +1 -0
- package/dist/handlers/window-handler.js +486 -0
- package/dist/handlers/window-handler.js.map +1 -0
- package/dist/handlers/window-handler.test.d.ts +8 -0
- package/dist/handlers/window-handler.test.d.ts.map +1 -0
- package/dist/handlers/window-handler.test.js +167 -0
- package/dist/handlers/window-handler.test.js.map +1 -0
- package/dist/handlers/worktree-handler.d.ts +28 -0
- package/dist/handlers/worktree-handler.d.ts.map +1 -0
- package/dist/handlers/worktree-handler.js +268 -0
- package/dist/handlers/worktree-handler.js.map +1 -0
- package/dist/handlers/worktree-handler.test.d.ts +8 -0
- package/dist/handlers/worktree-handler.test.d.ts.map +1 -0
- package/dist/handlers/worktree-handler.test.js +118 -0
- package/dist/handlers/worktree-handler.test.js.map +1 -0
- package/dist/handlers/ws-utils.d.ts +12 -0
- package/dist/handlers/ws-utils.d.ts.map +1 -0
- package/dist/handlers/ws-utils.js +16 -0
- package/dist/handlers/ws-utils.js.map +1 -0
- package/dist/http-api.d.ts +26 -0
- package/dist/http-api.d.ts.map +1 -0
- package/dist/http-api.js +148 -0
- package/dist/http-api.js.map +1 -0
- package/dist/logger.d.ts +42 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +147 -0
- package/dist/logger.js.map +1 -0
- package/dist/logging/logger-factory.d.ts +51 -0
- package/dist/logging/logger-factory.d.ts.map +1 -0
- package/dist/logging/logger-factory.js +59 -0
- package/dist/logging/logger-factory.js.map +1 -0
- package/dist/mcp/search-tool.d.ts +65 -0
- package/dist/mcp/search-tool.d.ts.map +1 -0
- package/dist/mcp/search-tool.js +176 -0
- package/dist/mcp/search-tool.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +152 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/process-scanner.d.ts +96 -0
- package/dist/process-scanner.d.ts.map +1 -0
- package/dist/process-scanner.js +194 -0
- package/dist/process-scanner.js.map +1 -0
- package/dist/routes/__tests__/archive-routes.test.d.ts +5 -0
- package/dist/routes/__tests__/archive-routes.test.d.ts.map +1 -0
- package/dist/routes/__tests__/archive-routes.test.js +158 -0
- package/dist/routes/__tests__/archive-routes.test.js.map +1 -0
- package/dist/routes/__tests__/config-routes.test.d.ts +5 -0
- package/dist/routes/__tests__/config-routes.test.d.ts.map +1 -0
- package/dist/routes/__tests__/config-routes.test.js +112 -0
- package/dist/routes/__tests__/config-routes.test.js.map +1 -0
- package/dist/routes/__tests__/http-utils.test.d.ts +5 -0
- package/dist/routes/__tests__/http-utils.test.d.ts.map +1 -0
- package/dist/routes/__tests__/http-utils.test.js +102 -0
- package/dist/routes/__tests__/http-utils.test.js.map +1 -0
- package/dist/routes/__tests__/notification-routes.test.d.ts +5 -0
- package/dist/routes/__tests__/notification-routes.test.d.ts.map +1 -0
- package/dist/routes/__tests__/notification-routes.test.js +91 -0
- package/dist/routes/__tests__/notification-routes.test.js.map +1 -0
- package/dist/routes/__tests__/project-routes.test.d.ts +5 -0
- package/dist/routes/__tests__/project-routes.test.d.ts.map +1 -0
- package/dist/routes/__tests__/project-routes.test.js +168 -0
- package/dist/routes/__tests__/project-routes.test.js.map +1 -0
- package/dist/routes/__tests__/session-routes.test.d.ts +5 -0
- package/dist/routes/__tests__/session-routes.test.d.ts.map +1 -0
- package/dist/routes/__tests__/session-routes.test.js +198 -0
- package/dist/routes/__tests__/session-routes.test.js.map +1 -0
- package/dist/routes/__tests__/source-routes.test.d.ts +5 -0
- package/dist/routes/__tests__/source-routes.test.d.ts.map +1 -0
- package/dist/routes/__tests__/source-routes.test.js +142 -0
- package/dist/routes/__tests__/source-routes.test.js.map +1 -0
- package/dist/routes/__tests__/sync-routes.test.d.ts +5 -0
- package/dist/routes/__tests__/sync-routes.test.d.ts.map +1 -0
- package/dist/routes/__tests__/sync-routes.test.js +77 -0
- package/dist/routes/__tests__/sync-routes.test.js.map +1 -0
- package/dist/routes/__tests__/test-helpers.d.ts +47 -0
- package/dist/routes/__tests__/test-helpers.d.ts.map +1 -0
- package/dist/routes/__tests__/test-helpers.js +97 -0
- package/dist/routes/__tests__/test-helpers.js.map +1 -0
- package/dist/routes/archive-routes.d.ts +15 -0
- package/dist/routes/archive-routes.d.ts.map +1 -0
- package/dist/routes/archive-routes.js +181 -0
- package/dist/routes/archive-routes.js.map +1 -0
- package/dist/routes/claude-routes.d.ts +9 -0
- package/dist/routes/claude-routes.d.ts.map +1 -0
- package/dist/routes/claude-routes.js +47 -0
- package/dist/routes/claude-routes.js.map +1 -0
- package/dist/routes/config-routes.d.ts +9 -0
- package/dist/routes/config-routes.d.ts.map +1 -0
- package/dist/routes/config-routes.js +56 -0
- package/dist/routes/config-routes.js.map +1 -0
- package/dist/routes/config-store.d.ts +41 -0
- package/dist/routes/config-store.d.ts.map +1 -0
- package/dist/routes/config-store.js +52 -0
- package/dist/routes/config-store.js.map +1 -0
- package/dist/routes/http-utils.d.ts +32 -0
- package/dist/routes/http-utils.d.ts.map +1 -0
- package/dist/routes/http-utils.js +123 -0
- package/dist/routes/http-utils.js.map +1 -0
- package/dist/routes/index.d.ts +19 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +17 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/notification-routes.d.ts +10 -0
- package/dist/routes/notification-routes.d.ts.map +1 -0
- package/dist/routes/notification-routes.js +64 -0
- package/dist/routes/notification-routes.js.map +1 -0
- package/dist/routes/project-routes.d.ts +22 -0
- package/dist/routes/project-routes.d.ts.map +1 -0
- package/dist/routes/project-routes.js +415 -0
- package/dist/routes/project-routes.js.map +1 -0
- package/dist/routes/session-routes.d.ts +18 -0
- package/dist/routes/session-routes.d.ts.map +1 -0
- package/dist/routes/session-routes.js +609 -0
- package/dist/routes/session-routes.js.map +1 -0
- package/dist/routes/source-routes.d.ts +12 -0
- package/dist/routes/source-routes.d.ts.map +1 -0
- package/dist/routes/source-routes.js +119 -0
- package/dist/routes/source-routes.js.map +1 -0
- package/dist/routes/static-routes.d.ts +12 -0
- package/dist/routes/static-routes.d.ts.map +1 -0
- package/dist/routes/static-routes.js +52 -0
- package/dist/routes/static-routes.js.map +1 -0
- package/dist/routes/sync-routes.d.ts +9 -0
- package/dist/routes/sync-routes.d.ts.map +1 -0
- package/dist/routes/sync-routes.js +78 -0
- package/dist/routes/sync-routes.js.map +1 -0
- package/dist/routes/tile-routes.d.ts +10 -0
- package/dist/routes/tile-routes.d.ts.map +1 -0
- package/dist/routes/tile-routes.js +108 -0
- package/dist/routes/tile-routes.js.map +1 -0
- package/dist/routes/types.d.ts +17 -0
- package/dist/routes/types.d.ts.map +1 -0
- package/dist/routes/types.js +5 -0
- package/dist/routes/types.js.map +1 -0
- package/dist/routes/usage-routes.d.ts +8 -0
- package/dist/routes/usage-routes.d.ts.map +1 -0
- package/dist/routes/usage-routes.js +18 -0
- package/dist/routes/usage-routes.js.map +1 -0
- package/dist/server.d.ts +8 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +173 -0
- package/dist/server.js.map +1 -0
- package/dist/services/branch-divergence-service.d.ts +48 -0
- package/dist/services/branch-divergence-service.d.ts.map +1 -0
- package/dist/services/branch-divergence-service.js +156 -0
- package/dist/services/branch-divergence-service.js.map +1 -0
- package/dist/services/broadcast-service.d.ts +68 -0
- package/dist/services/broadcast-service.d.ts.map +1 -0
- package/dist/services/broadcast-service.js +78 -0
- package/dist/services/broadcast-service.js.map +1 -0
- package/dist/services/broadcast-service.test.d.ts +5 -0
- package/dist/services/broadcast-service.test.d.ts.map +1 -0
- package/dist/services/broadcast-service.test.js +130 -0
- package/dist/services/broadcast-service.test.js.map +1 -0
- package/dist/services/chat-service.d.ts +72 -0
- package/dist/services/chat-service.d.ts.map +1 -0
- package/dist/services/chat-service.js +342 -0
- package/dist/services/chat-service.js.map +1 -0
- package/dist/services/chat-system-prompt.d.ts +14 -0
- package/dist/services/chat-system-prompt.d.ts.map +1 -0
- package/dist/services/chat-system-prompt.js +68 -0
- package/dist/services/chat-system-prompt.js.map +1 -0
- package/dist/services/notification-service.d.ts +115 -0
- package/dist/services/notification-service.d.ts.map +1 -0
- package/dist/services/notification-service.js +424 -0
- package/dist/services/notification-service.js.map +1 -0
- package/dist/services/notification-service.test.d.ts +5 -0
- package/dist/services/notification-service.test.d.ts.map +1 -0
- package/dist/services/notification-service.test.js +918 -0
- package/dist/services/notification-service.test.js.map +1 -0
- package/dist/session/cleanup-service.d.ts +51 -0
- package/dist/session/cleanup-service.d.ts.map +1 -0
- package/dist/session/cleanup-service.js +98 -0
- package/dist/session/cleanup-service.js.map +1 -0
- package/dist/session/cleanup-service.test.d.ts +5 -0
- package/dist/session/cleanup-service.test.d.ts.map +1 -0
- package/dist/session/cleanup-service.test.js +121 -0
- package/dist/session/cleanup-service.test.js.map +1 -0
- package/dist/session/process-monitor.d.ts +79 -0
- package/dist/session/process-monitor.d.ts.map +1 -0
- package/dist/session/process-monitor.js +270 -0
- package/dist/session/process-monitor.js.map +1 -0
- package/dist/session/process-monitor.test.d.ts +5 -0
- package/dist/session/process-monitor.test.d.ts.map +1 -0
- package/dist/session/process-monitor.test.js +367 -0
- package/dist/session/process-monitor.test.js.map +1 -0
- package/dist/session/session-factory.d.ts +29 -0
- package/dist/session/session-factory.d.ts.map +1 -0
- package/dist/session/session-factory.js +123 -0
- package/dist/session/session-factory.js.map +1 -0
- package/dist/session/session-factory.test.d.ts +5 -0
- package/dist/session/session-factory.test.d.ts.map +1 -0
- package/dist/session/session-factory.test.js +299 -0
- package/dist/session/session-factory.test.js.map +1 -0
- package/dist/session-registry.d.ts +168 -0
- package/dist/session-registry.d.ts.map +1 -0
- package/dist/session-registry.js +626 -0
- package/dist/session-registry.js.map +1 -0
- package/dist/session-registry.test.d.ts +5 -0
- package/dist/session-registry.test.d.ts.map +1 -0
- package/dist/session-registry.test.js +582 -0
- package/dist/session-registry.test.js.map +1 -0
- package/dist/start-server.d.ts +31 -0
- package/dist/start-server.d.ts.map +1 -0
- package/dist/start-server.js +408 -0
- package/dist/start-server.js.map +1 -0
- package/dist/terminal-activator.d.ts +29 -0
- package/dist/terminal-activator.d.ts.map +1 -0
- package/dist/terminal-activator.js +264 -0
- package/dist/terminal-activator.js.map +1 -0
- package/dist/terminal-activator.test.d.ts +9 -0
- package/dist/terminal-activator.test.d.ts.map +1 -0
- package/dist/terminal-activator.test.js +95 -0
- package/dist/terminal-activator.test.js.map +1 -0
- package/dist/terminal-launcher.d.ts +51 -0
- package/dist/terminal-launcher.d.ts.map +1 -0
- package/dist/terminal-launcher.js +298 -0
- package/dist/terminal-launcher.js.map +1 -0
- package/dist/terminal-launcher.test.d.ts +8 -0
- package/dist/terminal-launcher.test.d.ts.map +1 -0
- package/dist/terminal-launcher.test.js +222 -0
- package/dist/terminal-launcher.test.js.map +1 -0
- package/dist/types.d.ts +796 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/dist/unix-socket.d.ts +68 -0
- package/dist/unix-socket.d.ts.map +1 -0
- package/dist/unix-socket.js +180 -0
- package/dist/unix-socket.js.map +1 -0
- package/dist/usage-limits.d.ts +13 -0
- package/dist/usage-limits.d.ts.map +1 -0
- package/dist/usage-limits.js +112 -0
- package/dist/usage-limits.js.map +1 -0
- package/dist/watchers/handoff-watcher.d.ts +74 -0
- package/dist/watchers/handoff-watcher.d.ts.map +1 -0
- package/dist/watchers/handoff-watcher.js +124 -0
- package/dist/watchers/handoff-watcher.js.map +1 -0
- package/dist/watchers/handoff-watcher.test.d.ts +8 -0
- package/dist/watchers/handoff-watcher.test.d.ts.map +1 -0
- package/dist/watchers/handoff-watcher.test.js +142 -0
- package/dist/watchers/handoff-watcher.test.js.map +1 -0
- package/dist/websocket.d.ts +107 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +268 -0
- package/dist/websocket.js.map +1 -0
- package/dist/window-manager/index.d.ts +28 -0
- package/dist/window-manager/index.d.ts.map +1 -0
- package/dist/window-manager/index.js +56 -0
- package/dist/window-manager/index.js.map +1 -0
- package/dist/window-manager/layouts.d.ts +42 -0
- package/dist/window-manager/layouts.d.ts.map +1 -0
- package/dist/window-manager/layouts.js +133 -0
- package/dist/window-manager/layouts.js.map +1 -0
- package/dist/window-manager/linux-manager.d.ts +45 -0
- package/dist/window-manager/linux-manager.d.ts.map +1 -0
- package/dist/window-manager/linux-manager.js +299 -0
- package/dist/window-manager/linux-manager.js.map +1 -0
- package/dist/window-manager/macos-manager.d.ts +103 -0
- package/dist/window-manager/macos-manager.d.ts.map +1 -0
- package/dist/window-manager/macos-manager.js +637 -0
- package/dist/window-manager/macos-manager.js.map +1 -0
- package/dist/window-manager/smart-layouts.d.ts +116 -0
- package/dist/window-manager/smart-layouts.d.ts.map +1 -0
- package/dist/window-manager/smart-layouts.js +188 -0
- package/dist/window-manager/smart-layouts.js.map +1 -0
- package/dist/window-manager/smart-layouts.test.d.ts +8 -0
- package/dist/window-manager/smart-layouts.test.d.ts.map +1 -0
- package/dist/window-manager/smart-layouts.test.js +311 -0
- package/dist/window-manager/smart-layouts.test.js.map +1 -0
- package/dist/window-manager/tile-state.d.ts +87 -0
- package/dist/window-manager/tile-state.d.ts.map +1 -0
- package/dist/window-manager/tile-state.js +136 -0
- package/dist/window-manager/tile-state.js.map +1 -0
- package/dist/window-manager/tile-state.test.d.ts +8 -0
- package/dist/window-manager/tile-state.test.d.ts.map +1 -0
- package/dist/window-manager/tile-state.test.js +179 -0
- package/dist/window-manager/tile-state.test.js.map +1 -0
- package/dist/window-manager/types.d.ts +104 -0
- package/dist/window-manager/types.d.ts.map +1 -0
- package/dist/window-manager/types.js +8 -0
- package/dist/window-manager/types.js.map +1 -0
- package/dist/window-manager/windows-manager.d.ts +44 -0
- package/dist/window-manager/windows-manager.d.ts.map +1 -0
- package/dist/window-manager/windows-manager.js +281 -0
- package/dist/window-manager/windows-manager.js.map +1 -0
- package/dist/window-manager/windows-manager.test.d.ts +8 -0
- package/dist/window-manager/windows-manager.test.d.ts.map +1 -0
- package/dist/window-manager/windows-manager.test.js +183 -0
- package/dist/window-manager/windows-manager.test.js.map +1 -0
- package/gui-dist/assets/index-BmYIHRYe.js +142 -0
- package/gui-dist/assets/index-D_N5RH8O.css +1 -0
- package/gui-dist/assets/vendor-icons-ByXNrcwf.js +336 -0
- package/gui-dist/assets/vendor-markdown-DWPYwU1x.js +22 -0
- package/gui-dist/assets/vendor-react-CpILBTDM.js +59 -0
- package/gui-dist/index.html +17 -0
- package/gui-dist/jacsub.png +0 -0
- 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":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AA0CnD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;YACL,MAAM,EAAE,iBAAiB,CAAC,OAAO;YACjC,KAAK,EAAE,EAAE;YACT,YAAY,EAAE,KAAK;SACpB,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB;QACxD,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO;YACL,MAAM,EAAE,iBAAiB,CAAC,UAAU;YACpC,KAAK,EAAE,KAAK;YACZ,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,WAAW;YACrB,GAAG,EAAE,WAAW,CAAC,GAAG;YACpB,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,GAAG,EAAE,WAAW,CAAC,GAAG;SACrB,CAAC;IACJ,CAAC;IAED,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,MAAM,EAAE,iBAAiB,CAAC,OAAO;YACjC,KAAK,EAAE,GAAG;YACV,YAAY,EAAE,KAAK;SACpB,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1D,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAsB;QAChC,MAAM,EAAE,CAAC,MAAM,IAAI,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAsB;QAC/F,KAAK;QACL,YAAY,EAAE,KAAK;KACpB,CAAC;IAEF,+BAA+B;IAC/B,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,iBAAiB,CAAC,KAAK;YAC1B,MAAM,CAAC,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM;QAER,KAAK,iBAAiB,CAAC,GAAG;YACxB,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC;YACnB,6DAA6D;YAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACrC,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC;oBACtB,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;YACD,MAAM;QAER,KAAK,iBAAiB,CAAC,GAAG;YACxB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;YACnB,CAAC;YACD,MAAM;QAER,KAAK,iBAAiB,CAAC,KAAK,CAAC;QAC7B,KAAK,iBAAiB,CAAC,OAAO,CAAC;QAC/B,KAAK,iBAAiB,CAAC,IAAI,CAAC;QAC5B,KAAK,iBAAiB,CAAC,EAAE,CAAC;QAC1B,KAAK,iBAAiB,CAAC,IAAI;YACzB,+BAA+B;YAC/B,MAAM;IACV,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAsB;IACrD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,OAAO,SAAS,IAAI,CAAC,cAAc,EAAE,CAAC;IACxC,CAAC;IACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO,SAAS,IAAI,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO,WAAW,IAAI,CAAC,aAAa,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,CAAC;IACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;IACtC,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACxD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC1D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,0DAA0D;IAC1D,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,mDAAmD;IACnD,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,4CAA4C;QAC5C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,+CAA+C;IAC/C,OAAO,UAAU,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,IAAY;IAC1D,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAEjC,cAAc;IACd,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE/B,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAEvC,2CAA2C;IAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IACzF,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAEzF,8BAA8B;IAC9B,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1D,8DAA8D;IAC9D,IAAI,UAAU,CAAC,MAAM,KAAK,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,IAAI,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,IAAI,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACpE,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,oDAAoD;IACpD,IAAI,UAAU,CAAC,MAAM,KAAK,iBAAiB,CAAC,GAAG,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,IAAI,KAAK,IAAI,CAAC;IACvB,CAAC;IAED,uBAAuB;IACvB,IAAI,UAAU,CAAC,MAAM,KAAK,iBAAiB,CAAC,GAAG,EAAE,CAAC;QAChD,OAAO,UAAU,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,CAAC;IAC3E,CAAC;IAED,6BAA6B;IAC7B,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAErC,IAAI,MAAM,CAAC,MAAM,KAAK,iBAAiB,CAAC,OAAO,EAAE,CAAC;QAChD,OAAO,qBAAqB,GAAG,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IAE1G,QAAQ,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACjD,KAAK,iBAAiB,CAAC,KAAK;YAC1B,OAAO,GAAG,MAAM,WAAW,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;QAChE,KAAK,iBAAiB,CAAC,GAAG;YACxB,OAAO,GAAG,MAAM,KAAK,MAAM,CAAC,GAAG,GAAG,CAAC;QACrC,KAAK,iBAAiB,CAAC,GAAG;YACxB,OAAO,GAAG,MAAM,UAAU,MAAM,CAAC,GAAG,GAAG,CAAC;QAC1C,KAAK,iBAAiB,CAAC,KAAK;YAC1B,OAAO,GAAG,MAAM,aAAa,MAAM,CAAC,KAAK,GAAG,CAAC;QAC/C,KAAK,iBAAiB,CAAC,OAAO;YAC5B,OAAO,GAAG,MAAM,WAAW,MAAM,CAAC,KAAK,GAAG,CAAC;QAC7C,KAAK,iBAAiB,CAAC,IAAI;YACzB,OAAO,yBAAyB,CAAC;QACnC;YACE,OAAO,GAAG,MAAM,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;IACxC,CAAC;AACH,CAAC"}
|
|
@@ -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"}
|