claude-code-plus-plus 0.1.0 → 0.2.0
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/app.d.ts +52 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +318 -0
- package/dist/app.js.map +1 -0
- package/dist/cli/commands/index.d.ts +5 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +5 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/start.d.ts +16 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +20 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +7 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/parser.d.ts +31 -0
- package/dist/cli/parser.d.ts.map +1 -0
- package/dist/cli/parser.js +112 -0
- package/dist/cli/parser.js.map +1 -0
- package/dist/cli/validators.d.ts +46 -0
- package/dist/cli/validators.d.ts.map +1 -0
- package/dist/cli/validators.js +149 -0
- package/dist/cli/validators.js.map +1 -0
- package/dist/config/defaults.d.ts +14 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +27 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +12 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +38 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +107 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/paths.d.ts +47 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +86 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +15 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +32 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/index.d.ts +13 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +13 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/session/index.d.ts +7 -0
- package/dist/core/session/index.d.ts.map +1 -0
- package/dist/core/session/index.js +6 -0
- package/dist/core/session/index.js.map +1 -0
- package/dist/core/session/session-manager.d.ts +46 -0
- package/dist/core/session/session-manager.d.ts.map +1 -0
- package/dist/core/session/session-manager.js +245 -0
- package/dist/core/session/session-manager.js.map +1 -0
- package/dist/core/session/session.d.ts +44 -0
- package/dist/core/session/session.d.ts.map +1 -0
- package/dist/core/session/session.js +78 -0
- package/dist/core/session/session.js.map +1 -0
- package/dist/core/terminal/index.d.ts +7 -0
- package/dist/core/terminal/index.d.ts.map +1 -0
- package/dist/core/terminal/index.js +6 -0
- package/dist/core/terminal/index.js.map +1 -0
- package/dist/core/terminal/terminal-manager.d.ts +36 -0
- package/dist/core/terminal/terminal-manager.d.ts.map +1 -0
- package/dist/core/terminal/terminal-manager.js +182 -0
- package/dist/core/terminal/terminal-manager.js.map +1 -0
- package/dist/core/terminal/terminal.d.ts +27 -0
- package/dist/core/terminal/terminal.d.ts.map +1 -0
- package/dist/core/terminal/terminal.js +38 -0
- package/dist/core/terminal/terminal.js.map +1 -0
- package/dist/core/workspace/index.d.ts +7 -0
- package/dist/core/workspace/index.d.ts.map +1 -0
- package/dist/core/workspace/index.js +6 -0
- package/dist/core/workspace/index.js.map +1 -0
- package/dist/core/workspace/workspace-manager.d.ts +59 -0
- package/dist/core/workspace/workspace-manager.d.ts.map +1 -0
- package/dist/core/workspace/workspace-manager.js +224 -0
- package/dist/core/workspace/workspace-manager.js.map +1 -0
- package/dist/core/workspace/workspace.d.ts +56 -0
- package/dist/core/workspace/workspace.d.ts.map +1 -0
- package/dist/core/workspace/workspace.js +96 -0
- package/dist/core/workspace/workspace.js.map +1 -0
- package/dist/core/worktree/index.d.ts +7 -0
- package/dist/core/worktree/index.d.ts.map +1 -0
- package/dist/core/worktree/index.js +6 -0
- package/dist/core/worktree/index.js.map +1 -0
- package/dist/core/worktree/worktree-manager.d.ts +47 -0
- package/dist/core/worktree/worktree-manager.d.ts.map +1 -0
- package/dist/core/worktree/worktree-manager.js +170 -0
- package/dist/core/worktree/worktree-manager.js.map +1 -0
- package/dist/core/worktree/worktree.d.ts +35 -0
- package/dist/core/worktree/worktree.d.ts.map +1 -0
- package/dist/core/worktree/worktree.js +50 -0
- package/dist/core/worktree/worktree.js.map +1 -0
- package/dist/events/bus.d.ts +76 -0
- package/dist/events/bus.d.ts.map +1 -0
- package/dist/events/bus.js +223 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/events/handlers/index.d.ts +28 -0
- package/dist/events/handlers/index.d.ts.map +1 -0
- package/dist/events/handlers/index.js +44 -0
- package/dist/events/handlers/index.js.map +1 -0
- package/dist/events/handlers/session-events.d.ts +12 -0
- package/dist/events/handlers/session-events.d.ts.map +1 -0
- package/dist/events/handlers/session-events.js +38 -0
- package/dist/events/handlers/session-events.js.map +1 -0
- package/dist/events/handlers/terminal-events.d.ts +12 -0
- package/dist/events/handlers/terminal-events.d.ts.map +1 -0
- package/dist/events/handlers/terminal-events.js +37 -0
- package/dist/events/handlers/terminal-events.js.map +1 -0
- package/dist/events/handlers/ui-events.d.ts +11 -0
- package/dist/events/handlers/ui-events.d.ts.map +1 -0
- package/dist/events/handlers/ui-events.js +202 -0
- package/dist/events/handlers/ui-events.js.map +1 -0
- package/dist/events/index.d.ts +9 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +10 -0
- package/dist/events/index.js.map +1 -0
- package/dist/git/index.d.ts +5 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +5 -0
- package/dist/git/index.js.map +1 -0
- package/dist/git/worktree.d.ts +44 -0
- package/dist/git/worktree.d.ts.map +1 -0
- package/dist/git/worktree.js +158 -0
- package/dist/git/worktree.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -144
- package/dist/index.js.map +1 -1
- package/dist/launcher/index.d.ts +24 -0
- package/dist/launcher/index.d.ts.map +1 -0
- package/dist/launcher/index.js +226 -0
- package/dist/launcher/index.js.map +1 -0
- package/dist/multiplexer/base.d.ts +73 -0
- package/dist/multiplexer/base.d.ts.map +1 -0
- package/dist/multiplexer/base.js +68 -0
- package/dist/multiplexer/base.js.map +1 -0
- package/dist/multiplexer/factory.d.ts +28 -0
- package/dist/multiplexer/factory.d.ts.map +1 -0
- package/dist/multiplexer/factory.js +72 -0
- package/dist/multiplexer/factory.js.map +1 -0
- package/dist/multiplexer/index.d.ts +14 -0
- package/dist/multiplexer/index.d.ts.map +1 -0
- package/dist/multiplexer/index.js +15 -0
- package/dist/multiplexer/index.js.map +1 -0
- package/dist/multiplexer/tmux/index.d.ts +9 -0
- package/dist/multiplexer/tmux/index.d.ts.map +1 -0
- package/dist/multiplexer/tmux/index.js +7 -0
- package/dist/multiplexer/tmux/index.js.map +1 -0
- package/dist/multiplexer/tmux/tmux-commands.d.ts +96 -0
- package/dist/multiplexer/tmux/tmux-commands.d.ts.map +1 -0
- package/dist/multiplexer/tmux/tmux-commands.js +282 -0
- package/dist/multiplexer/tmux/tmux-commands.js.map +1 -0
- package/dist/multiplexer/tmux/tmux-config.d.ts +57 -0
- package/dist/multiplexer/tmux/tmux-config.d.ts.map +1 -0
- package/dist/multiplexer/tmux/tmux-config.js +103 -0
- package/dist/multiplexer/tmux/tmux-config.js.map +1 -0
- package/dist/multiplexer/tmux/tmux-multiplexer.d.ts +94 -0
- package/dist/multiplexer/tmux/tmux-multiplexer.d.ts.map +1 -0
- package/dist/multiplexer/tmux/tmux-multiplexer.js +302 -0
- package/dist/multiplexer/tmux/tmux-multiplexer.js.map +1 -0
- package/dist/multiplexer/windows/index.d.ts +5 -0
- package/dist/multiplexer/windows/index.d.ts.map +1 -0
- package/dist/multiplexer/windows/index.js +5 -0
- package/dist/multiplexer/windows/index.js.map +1 -0
- package/dist/multiplexer/windows/windows-multiplexer.d.ts +61 -0
- package/dist/multiplexer/windows/windows-multiplexer.d.ts.map +1 -0
- package/dist/multiplexer/windows/windows-multiplexer.js +151 -0
- package/dist/multiplexer/windows/windows-multiplexer.js.map +1 -0
- package/dist/platform/clipboard.d.ts +26 -0
- package/dist/platform/clipboard.d.ts.map +1 -0
- package/dist/platform/clipboard.js +154 -0
- package/dist/platform/clipboard.js.map +1 -0
- package/dist/platform/detector.d.ts +78 -0
- package/dist/platform/detector.d.ts.map +1 -0
- package/dist/platform/detector.js +169 -0
- package/dist/platform/detector.js.map +1 -0
- package/dist/platform/index.d.ts +14 -0
- package/dist/platform/index.d.ts.map +1 -0
- package/dist/platform/index.js +15 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/paths.d.ts +63 -0
- package/dist/platform/paths.d.ts.map +1 -0
- package/dist/platform/paths.js +149 -0
- package/dist/platform/paths.js.map +1 -0
- package/dist/platform/shell.d.ts +43 -0
- package/dist/platform/shell.d.ts.map +1 -0
- package/dist/platform/shell.js +187 -0
- package/dist/platform/shell.js.map +1 -0
- package/dist/services/claude/claude-detector.d.ts +37 -0
- package/dist/services/claude/claude-detector.d.ts.map +1 -0
- package/dist/services/claude/claude-detector.js +83 -0
- package/dist/services/claude/claude-detector.js.map +1 -0
- package/dist/services/claude/claude-service.d.ts +57 -0
- package/dist/services/claude/claude-service.d.ts.map +1 -0
- package/dist/services/claude/claude-service.js +108 -0
- package/dist/services/claude/claude-service.js.map +1 -0
- package/dist/services/claude/index.d.ts +7 -0
- package/dist/services/claude/index.d.ts.map +1 -0
- package/dist/services/claude/index.js +6 -0
- package/dist/services/claude/index.js.map +1 -0
- package/dist/services/git/branch-service.d.ts +64 -0
- package/dist/services/git/branch-service.d.ts.map +1 -0
- package/dist/services/git/branch-service.js +217 -0
- package/dist/services/git/branch-service.js.map +1 -0
- package/dist/services/git/git-service.d.ts +44 -0
- package/dist/services/git/git-service.d.ts.map +1 -0
- package/dist/services/git/git-service.js +145 -0
- package/dist/services/git/git-service.js.map +1 -0
- package/dist/services/git/index.d.ts +8 -0
- package/dist/services/git/index.d.ts.map +1 -0
- package/dist/services/git/index.js +7 -0
- package/dist/services/git/index.js.map +1 -0
- package/dist/services/git/worktree-service.d.ts +61 -0
- package/dist/services/git/worktree-service.d.ts.map +1 -0
- package/dist/services/git/worktree-service.js +243 -0
- package/dist/services/git/worktree-service.js.map +1 -0
- package/dist/services/index.d.ts +12 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +12 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/process/index.d.ts +8 -0
- package/dist/services/process/index.d.ts.map +1 -0
- package/dist/services/process/index.js +6 -0
- package/dist/services/process/index.js.map +1 -0
- package/dist/services/process/process-monitor.d.ts +98 -0
- package/dist/services/process/process-monitor.d.ts.map +1 -0
- package/dist/services/process/process-monitor.js +173 -0
- package/dist/services/process/process-monitor.js.map +1 -0
- package/dist/services/process/process-spawner.d.ts +55 -0
- package/dist/services/process/process-spawner.d.ts.map +1 -0
- package/dist/services/process/process-spawner.js +93 -0
- package/dist/services/process/process-spawner.js.map +1 -0
- package/dist/sidebar/app.d.ts +70 -0
- package/dist/sidebar/app.d.ts.map +1 -0
- package/dist/sidebar/app.js +1203 -0
- package/dist/sidebar/app.js.map +1 -0
- package/dist/sidebar/index.d.ts +8 -0
- package/dist/sidebar/index.d.ts.map +1 -0
- package/dist/sidebar/index.js +26 -0
- package/dist/sidebar/index.js.map +1 -0
- package/dist/sidebar/input.d.ts +33 -0
- package/dist/sidebar/input.d.ts.map +1 -0
- package/dist/sidebar/input.js +153 -0
- package/dist/sidebar/input.js.map +1 -0
- package/dist/sidebar/render.d.ts +73 -0
- package/dist/sidebar/render.d.ts.map +1 -0
- package/dist/sidebar/render.js +403 -0
- package/dist/sidebar/render.js.map +1 -0
- package/dist/state/actions.d.ts +49 -0
- package/dist/state/actions.d.ts.map +1 -0
- package/dist/state/actions.js +512 -0
- package/dist/state/actions.js.map +1 -0
- package/dist/state/index.d.ts +16 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +28 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/middleware/index.d.ts +7 -0
- package/dist/state/middleware/index.d.ts.map +1 -0
- package/dist/state/middleware/index.js +6 -0
- package/dist/state/middleware/index.js.map +1 -0
- package/dist/state/middleware/logger.d.ts +22 -0
- package/dist/state/middleware/logger.d.ts.map +1 -0
- package/dist/state/middleware/logger.js +45 -0
- package/dist/state/middleware/logger.js.map +1 -0
- package/dist/state/middleware/persistence.d.ts +29 -0
- package/dist/state/middleware/persistence.d.ts.map +1 -0
- package/dist/state/middleware/persistence.js +71 -0
- package/dist/state/middleware/persistence.js.map +1 -0
- package/dist/state/persistence/file-adapter.d.ts +48 -0
- package/dist/state/persistence/file-adapter.d.ts.map +1 -0
- package/dist/state/persistence/file-adapter.js +96 -0
- package/dist/state/persistence/file-adapter.js.map +1 -0
- package/dist/state/persistence/index.d.ts +8 -0
- package/dist/state/persistence/index.d.ts.map +1 -0
- package/dist/state/persistence/index.js +6 -0
- package/dist/state/persistence/index.js.map +1 -0
- package/dist/state/persistence/serializer.d.ts +41 -0
- package/dist/state/persistence/serializer.d.ts.map +1 -0
- package/dist/state/persistence/serializer.js +114 -0
- package/dist/state/persistence/serializer.js.map +1 -0
- package/dist/state/selectors.d.ts +67 -0
- package/dist/state/selectors.d.ts.map +1 -0
- package/dist/state/selectors.js +177 -0
- package/dist/state/selectors.js.map +1 -0
- package/dist/state/store.d.ts +86 -0
- package/dist/state/store.d.ts.map +1 -0
- package/dist/state/store.js +161 -0
- package/dist/state/store.js.map +1 -0
- package/dist/state/types.d.ts +269 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/state/types.js +7 -0
- package/dist/state/types.js.map +1 -0
- package/dist/terminal/bar-handler.d.ts +15 -0
- package/dist/terminal/bar-handler.d.ts.map +1 -0
- package/dist/terminal/bar-handler.js +242 -0
- package/dist/terminal/bar-handler.js.map +1 -0
- package/dist/terminal/bar-render.d.ts +33 -0
- package/dist/terminal/bar-render.d.ts.map +1 -0
- package/dist/terminal/bar-render.js +122 -0
- package/dist/terminal/bar-render.js.map +1 -0
- package/dist/terminal/index.d.ts +8 -0
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/index.js +9 -0
- package/dist/terminal/index.js.map +1 -0
- package/dist/tmux/commands.d.ts +26 -0
- package/dist/tmux/commands.d.ts.map +1 -0
- package/dist/tmux/commands.js +67 -0
- package/dist/tmux/commands.js.map +1 -0
- package/dist/tmux/index.d.ts +6 -0
- package/dist/tmux/index.d.ts.map +1 -0
- package/dist/tmux/index.js +16 -0
- package/dist/tmux/index.js.map +1 -0
- package/dist/tmux/pane.d.ts +111 -0
- package/dist/tmux/pane.d.ts.map +1 -0
- package/dist/tmux/pane.js +206 -0
- package/dist/tmux/pane.js.map +1 -0
- package/dist/types/config.d.ts +103 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +7 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/entities.d.ts +88 -0
- package/dist/types/entities.d.ts.map +1 -0
- package/dist/types/entities.js +8 -0
- package/dist/types/entities.js.map +1 -0
- package/dist/types/events.d.ts +156 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +8 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/multiplexer.d.ts +238 -0
- package/dist/types/multiplexer.d.ts.map +1 -0
- package/dist/types/multiplexer.js +8 -0
- package/dist/types/multiplexer.js.map +1 -0
- package/dist/types.d.ts +67 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -2
- package/dist/types.js.map +1 -1
- package/dist/ui/components/base.d.ts +155 -0
- package/dist/ui/components/base.d.ts.map +1 -0
- package/dist/ui/components/base.js +269 -0
- package/dist/ui/components/base.js.map +1 -0
- package/dist/ui/components/index.d.ts +10 -0
- package/dist/ui/components/index.d.ts.map +1 -0
- package/dist/ui/components/index.js +10 -0
- package/dist/ui/components/index.js.map +1 -0
- package/dist/ui/components/input-field.d.ts +98 -0
- package/dist/ui/components/input-field.d.ts.map +1 -0
- package/dist/ui/components/input-field.js +274 -0
- package/dist/ui/components/input-field.js.map +1 -0
- package/dist/ui/components/list.d.ts +94 -0
- package/dist/ui/components/list.d.ts.map +1 -0
- package/dist/ui/components/list.js +294 -0
- package/dist/ui/components/list.js.map +1 -0
- package/dist/ui/components/modal.d.ts +83 -0
- package/dist/ui/components/modal.d.ts.map +1 -0
- package/dist/ui/components/modal.js +249 -0
- package/dist/ui/components/modal.js.map +1 -0
- package/dist/ui/components/tabs.d.ts +97 -0
- package/dist/ui/components/tabs.d.ts.map +1 -0
- package/dist/ui/components/tabs.js +252 -0
- package/dist/ui/components/tabs.js.map +1 -0
- package/dist/ui/components/text.d.ts +60 -0
- package/dist/ui/components/text.d.ts.map +1 -0
- package/dist/ui/components/text.js +224 -0
- package/dist/ui/components/text.js.map +1 -0
- package/dist/ui/index.d.ts +12 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +18 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/input/index.d.ts +8 -0
- package/dist/ui/input/index.d.ts.map +1 -0
- package/dist/ui/input/index.js +8 -0
- package/dist/ui/input/index.js.map +1 -0
- package/dist/ui/input/input-manager.d.ts +83 -0
- package/dist/ui/input/input-manager.d.ts.map +1 -0
- package/dist/ui/input/input-manager.js +200 -0
- package/dist/ui/input/input-manager.js.map +1 -0
- package/dist/ui/input/keybindings.d.ts +47 -0
- package/dist/ui/input/keybindings.d.ts.map +1 -0
- package/dist/ui/input/keybindings.js +168 -0
- package/dist/ui/input/keybindings.js.map +1 -0
- package/dist/ui/input/keyboard.d.ts +24 -0
- package/dist/ui/input/keyboard.d.ts.map +1 -0
- package/dist/ui/input/keyboard.js +230 -0
- package/dist/ui/input/keyboard.js.map +1 -0
- package/dist/ui/input/mouse.d.ts +44 -0
- package/dist/ui/input/mouse.d.ts.map +1 -0
- package/dist/ui/input/mouse.js +161 -0
- package/dist/ui/input/mouse.js.map +1 -0
- package/dist/ui/layout/box.d.ts +63 -0
- package/dist/ui/layout/box.d.ts.map +1 -0
- package/dist/ui/layout/box.js +160 -0
- package/dist/ui/layout/box.js.map +1 -0
- package/dist/ui/layout/constraints.d.ts +77 -0
- package/dist/ui/layout/constraints.d.ts.map +1 -0
- package/dist/ui/layout/constraints.js +154 -0
- package/dist/ui/layout/constraints.js.map +1 -0
- package/dist/ui/layout/flex.d.ts +59 -0
- package/dist/ui/layout/flex.d.ts.map +1 -0
- package/dist/ui/layout/flex.js +163 -0
- package/dist/ui/layout/flex.js.map +1 -0
- package/dist/ui/layout/index.d.ts +7 -0
- package/dist/ui/layout/index.d.ts.map +1 -0
- package/dist/ui/layout/index.js +7 -0
- package/dist/ui/layout/index.js.map +1 -0
- package/dist/ui/modals/delete-modal.d.ts +27 -0
- package/dist/ui/modals/delete-modal.d.ts.map +1 -0
- package/dist/ui/modals/delete-modal.js +59 -0
- package/dist/ui/modals/delete-modal.js.map +1 -0
- package/dist/ui/modals/index.d.ts +7 -0
- package/dist/ui/modals/index.d.ts.map +1 -0
- package/dist/ui/modals/index.js +7 -0
- package/dist/ui/modals/index.js.map +1 -0
- package/dist/ui/modals/input-modal.d.ts +66 -0
- package/dist/ui/modals/input-modal.d.ts.map +1 -0
- package/dist/ui/modals/input-modal.js +185 -0
- package/dist/ui/modals/input-modal.js.map +1 -0
- package/dist/ui/modals/quit-modal.d.ts +30 -0
- package/dist/ui/modals/quit-modal.d.ts.map +1 -0
- package/dist/ui/modals/quit-modal.js +65 -0
- package/dist/ui/modals/quit-modal.js.map +1 -0
- package/dist/ui/renderer/ansi.d.ts +206 -0
- package/dist/ui/renderer/ansi.d.ts.map +1 -0
- package/dist/ui/renderer/ansi.js +318 -0
- package/dist/ui/renderer/ansi.js.map +1 -0
- package/dist/ui/renderer/canvas.d.ts +126 -0
- package/dist/ui/renderer/canvas.d.ts.map +1 -0
- package/dist/ui/renderer/canvas.js +346 -0
- package/dist/ui/renderer/canvas.js.map +1 -0
- package/dist/ui/renderer/colors.d.ts +65 -0
- package/dist/ui/renderer/colors.d.ts.map +1 -0
- package/dist/ui/renderer/colors.js +260 -0
- package/dist/ui/renderer/colors.js.map +1 -0
- package/dist/ui/renderer/index.d.ts +8 -0
- package/dist/ui/renderer/index.d.ts.map +1 -0
- package/dist/ui/renderer/index.js +8 -0
- package/dist/ui/renderer/index.js.map +1 -0
- package/dist/ui/renderer/symbols.d.ts +176 -0
- package/dist/ui/renderer/symbols.d.ts.map +1 -0
- package/dist/ui/renderer/symbols.js +246 -0
- package/dist/ui/renderer/symbols.js.map +1 -0
- package/dist/ui/views/index.d.ts +7 -0
- package/dist/ui/views/index.d.ts.map +1 -0
- package/dist/ui/views/index.js +7 -0
- package/dist/ui/views/index.js.map +1 -0
- package/dist/ui/views/sidebar-view.d.ts +89 -0
- package/dist/ui/views/sidebar-view.d.ts.map +1 -0
- package/dist/ui/views/sidebar-view.js +259 -0
- package/dist/ui/views/sidebar-view.js.map +1 -0
- package/dist/ui/views/terminal-bar-view.d.ts +67 -0
- package/dist/ui/views/terminal-bar-view.d.ts.map +1 -0
- package/dist/ui/views/terminal-bar-view.js +172 -0
- package/dist/ui/views/terminal-bar-view.js.map +1 -0
- package/dist/ui/views/welcome-view.d.ts +34 -0
- package/dist/ui/views/welcome-view.d.ts.map +1 -0
- package/dist/ui/views/welcome-view.js +116 -0
- package/dist/ui/views/welcome-view.js.map +1 -0
- package/dist/utils/async.d.ts +68 -0
- package/dist/utils/async.d.ts.map +1 -0
- package/dist/utils/async.js +138 -0
- package/dist/utils/async.js.map +1 -0
- package/dist/utils/errors.d.ts +136 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +224 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/id.d.ts +51 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +79 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/index.d.ts +15 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +75 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +212 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/string.d.ts +71 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/string.js +163 -0
- package/dist/utils/string.js.map +1 -0
- package/dist/utils/validation.d.ts +72 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +196 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Bar Rendering
|
|
3
|
+
*
|
|
4
|
+
* Pure functions for rendering the terminal tab bar with ANSI codes.
|
|
5
|
+
* The tab bar is a single row showing terminal tabs with keyboard hints on the right.
|
|
6
|
+
*/
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// ANSI Escape Codes
|
|
9
|
+
// ============================================================================
|
|
10
|
+
const ESC = '\x1b';
|
|
11
|
+
const CSI = `${ESC}[`;
|
|
12
|
+
const ansi = {
|
|
13
|
+
clearLine: `${CSI}2K`,
|
|
14
|
+
moveTo: (row, col) => `${CSI}${row};${col}H`,
|
|
15
|
+
reset: `${CSI}0m`,
|
|
16
|
+
bold: `${CSI}1m`,
|
|
17
|
+
dim: `${CSI}2m`,
|
|
18
|
+
fg: {
|
|
19
|
+
black: `${CSI}30m`,
|
|
20
|
+
white: `${CSI}37m`,
|
|
21
|
+
gray: `${CSI}90m`,
|
|
22
|
+
cyan: `${CSI}36m`,
|
|
23
|
+
},
|
|
24
|
+
bg: {
|
|
25
|
+
cyan: `${CSI}46m`,
|
|
26
|
+
},
|
|
27
|
+
hideCursor: `${CSI}?25l`,
|
|
28
|
+
};
|
|
29
|
+
// ============================================================================
|
|
30
|
+
// Rendering
|
|
31
|
+
// ============================================================================
|
|
32
|
+
/**
|
|
33
|
+
* Render the terminal tab bar as a single row
|
|
34
|
+
*
|
|
35
|
+
* @param terminals - Array of terminals
|
|
36
|
+
* @param activeIndex - Index of the active terminal
|
|
37
|
+
* @param width - Available width in columns
|
|
38
|
+
* @returns Object with ANSI output string and tab positions for click handling
|
|
39
|
+
*/
|
|
40
|
+
export function renderTerminalBar(terminals, activeIndex, width) {
|
|
41
|
+
const tabPositions = [];
|
|
42
|
+
// Hints shown on the right
|
|
43
|
+
const hints = '1-9:switch n:new d:del';
|
|
44
|
+
const hintsLen = hints.length;
|
|
45
|
+
let output = ansi.hideCursor + ansi.clearLine + ansi.moveTo(1, 1);
|
|
46
|
+
if (terminals.length === 0) {
|
|
47
|
+
// No terminals message
|
|
48
|
+
const msg = "No terminals. Press 'n' to create.";
|
|
49
|
+
const padding = Math.max(1, width - msg.length - hintsLen - 2);
|
|
50
|
+
output += `${ansi.dim}${msg}${ansi.reset}`;
|
|
51
|
+
output += ' '.repeat(padding);
|
|
52
|
+
output += `${ansi.dim}${hints}${ansi.reset}`;
|
|
53
|
+
return { output, tabPositions };
|
|
54
|
+
}
|
|
55
|
+
// Calculate available space for tabs
|
|
56
|
+
const availableForTabs = width - hintsLen - 4;
|
|
57
|
+
const maxTabWidth = Math.max(8, Math.floor(availableForTabs / terminals.length) - 1);
|
|
58
|
+
let currentCol = 1;
|
|
59
|
+
for (let i = 0; i < terminals.length; i++) {
|
|
60
|
+
const terminal = terminals[i];
|
|
61
|
+
const isActive = i === activeIndex;
|
|
62
|
+
const tabNum = i + 1;
|
|
63
|
+
// Truncate title if needed
|
|
64
|
+
let title = terminal.title;
|
|
65
|
+
const maxTitleLen = maxTabWidth - 4; // Room for " N: " prefix
|
|
66
|
+
if (title.length > maxTitleLen) {
|
|
67
|
+
title = title.slice(0, maxTitleLen - 2) + '..';
|
|
68
|
+
}
|
|
69
|
+
// Tab text: " 1:Title " (only show number for 1-9)
|
|
70
|
+
const tabText = tabNum <= 9 ? ` ${tabNum}:${title} ` : ` ${title} `;
|
|
71
|
+
// Track tab position for click handling
|
|
72
|
+
tabPositions.push({
|
|
73
|
+
index: i,
|
|
74
|
+
startCol: currentCol,
|
|
75
|
+
endCol: currentCol + tabText.length - 1,
|
|
76
|
+
});
|
|
77
|
+
// Render tab
|
|
78
|
+
if (isActive) {
|
|
79
|
+
output += `${ansi.bg.cyan}${ansi.fg.black}${ansi.bold}${tabText}${ansi.reset}`;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
output += `${ansi.dim}${tabText}${ansi.reset}`;
|
|
83
|
+
}
|
|
84
|
+
currentCol += tabText.length;
|
|
85
|
+
// Add separator between tabs
|
|
86
|
+
if (i < terminals.length - 1) {
|
|
87
|
+
output += `${ansi.fg.gray}|${ansi.reset}`;
|
|
88
|
+
currentCol += 1;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Add [+] button for new terminal
|
|
92
|
+
const plusBtn = ' [+]';
|
|
93
|
+
tabPositions.push({
|
|
94
|
+
index: -1, // Special index for "new terminal"
|
|
95
|
+
startCol: currentCol,
|
|
96
|
+
endCol: currentCol + plusBtn.length - 1,
|
|
97
|
+
});
|
|
98
|
+
output += `${ansi.fg.cyan}${plusBtn}${ansi.reset}`;
|
|
99
|
+
currentCol += plusBtn.length;
|
|
100
|
+
// Padding and hints on right
|
|
101
|
+
const tabsWidth = currentCol - 1;
|
|
102
|
+
const padding = Math.max(1, width - tabsWidth - hintsLen - 1);
|
|
103
|
+
output += ' '.repeat(padding);
|
|
104
|
+
output += `${ansi.dim}${hints}${ansi.reset}`;
|
|
105
|
+
return { output, tabPositions };
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Find which tab was clicked based on column position
|
|
109
|
+
*
|
|
110
|
+
* @param col - Column position of click (1-indexed)
|
|
111
|
+
* @param tabPositions - Array of tab positions
|
|
112
|
+
* @returns Tab index, -1 for new terminal button, or null if no tab clicked
|
|
113
|
+
*/
|
|
114
|
+
export function findClickedTab(col, tabPositions) {
|
|
115
|
+
for (const tab of tabPositions) {
|
|
116
|
+
if (col >= tab.startCol && col <= tab.endCol) {
|
|
117
|
+
return tab.index;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=bar-render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bar-render.js","sourceRoot":"","sources":["../../src/terminal/bar-render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Module
|
|
3
|
+
*
|
|
4
|
+
* Provides terminal management functionality for sessions.
|
|
5
|
+
* Each session can have multiple shell terminals with a tab bar UI.
|
|
6
|
+
*/
|
|
7
|
+
export { renderTerminalBar, findClickedTab, type TabPosition, } from './bar-render';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/terminal/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,KAAK,WAAW,GACjB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Module
|
|
3
|
+
*
|
|
4
|
+
* Provides terminal management functionality for sessions.
|
|
5
|
+
* Each session can have multiple shell terminals with a tab bar UI.
|
|
6
|
+
*/
|
|
7
|
+
export { renderTerminalBar, findClickedTab, } from './bar-render';
|
|
8
|
+
// Note: bar-handler.ts is a standalone executable, not imported here
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/terminal/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,iBAAiB,EACjB,cAAc,GAEf,MAAM,cAAc,CAAC;AAEtB,qEAAqE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Low-level tmux command execution
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Execute a tmux command and return output
|
|
6
|
+
*/
|
|
7
|
+
export declare function exec(args: string[], options?: {
|
|
8
|
+
silent?: boolean;
|
|
9
|
+
}): string;
|
|
10
|
+
/**
|
|
11
|
+
* Execute a tmux command silently (ignore errors)
|
|
12
|
+
*/
|
|
13
|
+
export declare function run(args: string[]): void;
|
|
14
|
+
/**
|
|
15
|
+
* Check if a tmux command succeeds
|
|
16
|
+
*/
|
|
17
|
+
export declare function check(args: string[]): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Check if tmux is available
|
|
20
|
+
*/
|
|
21
|
+
export declare function isAvailable(): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Attach to a session (blocks until detach)
|
|
24
|
+
*/
|
|
25
|
+
export declare function attach(sessionName: string): number;
|
|
26
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/tmux/commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAY/E;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAMxC;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAO7C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAOrC;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKlD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Low-level tmux command execution
|
|
3
|
+
*/
|
|
4
|
+
import { execSync, spawnSync } from 'child_process';
|
|
5
|
+
/**
|
|
6
|
+
* Execute a tmux command and return output
|
|
7
|
+
*/
|
|
8
|
+
export function exec(args, options = {}) {
|
|
9
|
+
const cmd = `tmux ${args.join(' ')}`;
|
|
10
|
+
try {
|
|
11
|
+
const result = execSync(cmd, {
|
|
12
|
+
encoding: 'utf-8',
|
|
13
|
+
stdio: options.silent ? ['pipe', 'pipe', 'ignore'] : ['pipe', 'pipe', 'pipe'],
|
|
14
|
+
});
|
|
15
|
+
return result.trim();
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (options.silent)
|
|
19
|
+
return '';
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Execute a tmux command silently (ignore errors)
|
|
25
|
+
*/
|
|
26
|
+
export function run(args) {
|
|
27
|
+
try {
|
|
28
|
+
execSync(`tmux ${args.join(' ')}`, { stdio: 'ignore' });
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// Ignore errors
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if a tmux command succeeds
|
|
36
|
+
*/
|
|
37
|
+
export function check(args) {
|
|
38
|
+
try {
|
|
39
|
+
execSync(`tmux ${args.join(' ')} 2>/dev/null`, { stdio: 'ignore' });
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if tmux is available
|
|
48
|
+
*/
|
|
49
|
+
export function isAvailable() {
|
|
50
|
+
try {
|
|
51
|
+
execSync('which tmux', { stdio: 'ignore' });
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Attach to a session (blocks until detach)
|
|
60
|
+
*/
|
|
61
|
+
export function attach(sessionName) {
|
|
62
|
+
const result = spawnSync('tmux', ['attach-session', '-t', sessionName], {
|
|
63
|
+
stdio: 'inherit',
|
|
64
|
+
});
|
|
65
|
+
return result.status || 0;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/tmux/commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEpD;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,IAAc,EAAE,UAAgC,EAAE;IACrE,MAAM,GAAG,GAAG,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;YAC3B,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAC9E,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC9B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,GAAG,CAAC,IAAc;IAChC,IAAI,CAAC;QACH,QAAQ,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,IAAc;IAClC,IAAI,CAAC;QACH,QAAQ,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,QAAQ,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,WAAmB;IACxC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE;QACtE,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tmux Module
|
|
3
|
+
*/
|
|
4
|
+
export { isAvailable, attach, exec, run, check } from './commands';
|
|
5
|
+
export { type TmuxPane, sessionExists, createSession, killSession, detachClient, splitHorizontal, splitVertical, listPanes, sendKeys, sendControlKey, runInPane, selectPane, resizePane, killPane, swapPanes, breakPane, joinPane, getPaneDimensions, setOption, setPaneOption, bindKey, runShell, setHook, removeHook, } from './pane';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tmux/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAEL,KAAK,QAAQ,EAEb,aAAa,EACb,aAAa,EACb,WAAW,EACX,YAAY,EAEZ,eAAe,EACf,aAAa,EACb,SAAS,EACT,QAAQ,EACR,cAAc,EACd,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,QAAQ,EACR,iBAAiB,EAEjB,SAAS,EACT,aAAa,EAEb,OAAO,EACP,QAAQ,EAER,OAAO,EACP,UAAU,GACX,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tmux Module
|
|
3
|
+
*/
|
|
4
|
+
export { isAvailable, attach, exec, run, check } from './commands';
|
|
5
|
+
export {
|
|
6
|
+
// Session
|
|
7
|
+
sessionExists, createSession, killSession, detachClient,
|
|
8
|
+
// Panes
|
|
9
|
+
splitHorizontal, splitVertical, listPanes, sendKeys, sendControlKey, runInPane, selectPane, resizePane, killPane, swapPanes, breakPane, joinPane, getPaneDimensions,
|
|
10
|
+
// Options
|
|
11
|
+
setOption, setPaneOption,
|
|
12
|
+
// Keys
|
|
13
|
+
bindKey, runShell,
|
|
14
|
+
// Hooks
|
|
15
|
+
setHook, removeHook, } from './pane';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tmux/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO;AAGL,UAAU;AACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,YAAY;AACZ,QAAQ;AACR,eAAe,EACf,aAAa,EACb,SAAS,EACT,QAAQ,EACR,cAAc,EACd,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,QAAQ,EACR,iBAAiB;AACjB,UAAU;AACV,SAAS,EACT,aAAa;AACb,OAAO;AACP,OAAO,EACP,QAAQ;AACR,QAAQ;AACR,OAAO,EACP,UAAU,GACX,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tmux pane and session operations
|
|
3
|
+
*/
|
|
4
|
+
export interface TmuxPane {
|
|
5
|
+
id: string;
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
active: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Check if a session exists
|
|
12
|
+
*/
|
|
13
|
+
export declare function sessionExists(name: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Create a new detached session
|
|
16
|
+
*/
|
|
17
|
+
export declare function createSession(name: string, cwd: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Kill a session
|
|
20
|
+
*/
|
|
21
|
+
export declare function killSession(name: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* Detach current client from session
|
|
24
|
+
*/
|
|
25
|
+
export declare function detachClient(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Split pane horizontally (creates pane to the right)
|
|
28
|
+
* @param percentage Width percentage for the LEFT pane
|
|
29
|
+
*/
|
|
30
|
+
export declare function splitHorizontal(sessionName: string, percentage: number, cwd?: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Split pane vertically (creates pane below)
|
|
33
|
+
*/
|
|
34
|
+
export declare function splitVertical(sessionName: string, percentage: number, cwd?: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* List panes in a session
|
|
37
|
+
*/
|
|
38
|
+
export declare function listPanes(sessionName: string): TmuxPane[];
|
|
39
|
+
/**
|
|
40
|
+
* Send keys to a pane
|
|
41
|
+
*/
|
|
42
|
+
export declare function sendKeys(paneId: string, text: string, enter?: boolean): void;
|
|
43
|
+
/**
|
|
44
|
+
* Send a control key (e.g., C-c, Enter, Escape)
|
|
45
|
+
*/
|
|
46
|
+
export declare function sendControlKey(paneId: string, key: string): void;
|
|
47
|
+
/**
|
|
48
|
+
* Run a command in a pane
|
|
49
|
+
*/
|
|
50
|
+
export declare function runInPane(paneId: string, command: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* Select (focus) a pane
|
|
53
|
+
*/
|
|
54
|
+
export declare function selectPane(paneId: string): void;
|
|
55
|
+
/**
|
|
56
|
+
* Resize a pane
|
|
57
|
+
*/
|
|
58
|
+
export declare function resizePane(paneId: string, width?: number, height?: number): void;
|
|
59
|
+
/**
|
|
60
|
+
* Kill a pane
|
|
61
|
+
*/
|
|
62
|
+
export declare function killPane(paneId: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* Swap two panes
|
|
65
|
+
*/
|
|
66
|
+
export declare function swapPanes(paneId1: string, paneId2: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* Break a pane to background window
|
|
69
|
+
*/
|
|
70
|
+
export declare function breakPane(paneId: string, windowName?: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* Get current pane dimensions
|
|
73
|
+
*/
|
|
74
|
+
export declare function getPaneDimensions(paneId: string): {
|
|
75
|
+
width: number;
|
|
76
|
+
height: number;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Join a pane from background
|
|
80
|
+
*/
|
|
81
|
+
export declare function joinPane(sourcePaneId: string, targetPaneId: string, horizontal?: boolean): void;
|
|
82
|
+
/**
|
|
83
|
+
* Set a tmux option
|
|
84
|
+
*/
|
|
85
|
+
export declare function setOption(option: string, value: string, global?: boolean): void;
|
|
86
|
+
/**
|
|
87
|
+
* Set a pane-specific option
|
|
88
|
+
*/
|
|
89
|
+
export declare function setPaneOption(paneId: string, option: string, value: string): void;
|
|
90
|
+
/**
|
|
91
|
+
* Bind a key in root table
|
|
92
|
+
*/
|
|
93
|
+
export declare function bindKey(key: string, command: string): void;
|
|
94
|
+
/**
|
|
95
|
+
* Run a shell command via tmux
|
|
96
|
+
*/
|
|
97
|
+
export declare function runShell(command: string): void;
|
|
98
|
+
/**
|
|
99
|
+
* Set a tmux hook for a session
|
|
100
|
+
* @param sessionName - Target session
|
|
101
|
+
* @param hookName - Hook name (e.g., 'after-resize-pane', 'client-attached')
|
|
102
|
+
* @param command - Command to run when hook fires (caller must handle quoting)
|
|
103
|
+
*/
|
|
104
|
+
export declare function setHook(sessionName: string, hookName: string, command: string): void;
|
|
105
|
+
/**
|
|
106
|
+
* Remove a tmux hook from a session
|
|
107
|
+
* @param sessionName - Target session
|
|
108
|
+
* @param hookName - Hook name to remove
|
|
109
|
+
*/
|
|
110
|
+
export declare function removeHook(sessionName: string, hookName: string): void;
|
|
111
|
+
//# sourceMappingURL=pane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pane.d.ts","sourceRoot":"","sources":["../../src/tmux/pane.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tmux pane and session operations
|
|
3
|
+
*/
|
|
4
|
+
import { exec, run, check } from './commands';
|
|
5
|
+
// ============================================================================
|
|
6
|
+
// Session Operations
|
|
7
|
+
// ============================================================================
|
|
8
|
+
/**
|
|
9
|
+
* Check if a session exists
|
|
10
|
+
*/
|
|
11
|
+
export function sessionExists(name) {
|
|
12
|
+
return check(['has-session', '-t', name]);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Create a new detached session
|
|
16
|
+
*/
|
|
17
|
+
export function createSession(name, cwd) {
|
|
18
|
+
run(['new-session', '-d', '-s', name, '-c', `"${cwd}"`]);
|
|
19
|
+
return exec(['display-message', '-p', '-t', name, "'#{pane_id}'"]);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Kill a session
|
|
23
|
+
*/
|
|
24
|
+
export function killSession(name) {
|
|
25
|
+
run(['kill-session', '-t', name]);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Detach current client from session
|
|
29
|
+
*/
|
|
30
|
+
export function detachClient() {
|
|
31
|
+
run(['detach-client']);
|
|
32
|
+
}
|
|
33
|
+
// ============================================================================
|
|
34
|
+
// Pane Operations
|
|
35
|
+
// ============================================================================
|
|
36
|
+
/**
|
|
37
|
+
* Split pane horizontally (creates pane to the right)
|
|
38
|
+
* @param percentage Width percentage for the LEFT pane
|
|
39
|
+
*/
|
|
40
|
+
export function splitHorizontal(sessionName, percentage, cwd) {
|
|
41
|
+
const args = ['split-window', '-h', '-t', sessionName, '-p', String(100 - percentage)];
|
|
42
|
+
if (cwd)
|
|
43
|
+
args.push('-c', `"${cwd}"`);
|
|
44
|
+
run(args);
|
|
45
|
+
return exec(['display-message', '-p', '-t', sessionName, "'#{pane_id}'"]);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Split pane vertically (creates pane below)
|
|
49
|
+
*/
|
|
50
|
+
export function splitVertical(sessionName, percentage, cwd) {
|
|
51
|
+
const args = ['split-window', '-v', '-t', sessionName, '-p', String(100 - percentage)];
|
|
52
|
+
if (cwd)
|
|
53
|
+
args.push('-c', `"${cwd}"`);
|
|
54
|
+
run(args);
|
|
55
|
+
return exec(['display-message', '-p', '-t', sessionName, "'#{pane_id}'"]);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* List panes in a session
|
|
59
|
+
*/
|
|
60
|
+
export function listPanes(sessionName) {
|
|
61
|
+
const output = exec(['list-panes', '-t', sessionName, '-F', "'#{pane_id},#{pane_width},#{pane_height},#{pane_active}'"], { silent: true });
|
|
62
|
+
if (!output)
|
|
63
|
+
return [];
|
|
64
|
+
return output.split('\n').filter(Boolean).map((line) => {
|
|
65
|
+
const [id, width, height, active] = line.split(',');
|
|
66
|
+
return {
|
|
67
|
+
id,
|
|
68
|
+
width: parseInt(width, 10),
|
|
69
|
+
height: parseInt(height, 10),
|
|
70
|
+
active: active === '1',
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Send keys to a pane
|
|
76
|
+
*/
|
|
77
|
+
export function sendKeys(paneId, text, enter = true) {
|
|
78
|
+
// Escape single quotes
|
|
79
|
+
const escaped = text.replace(/'/g, "'\\''");
|
|
80
|
+
run(['send-keys', '-t', paneId, '-l', `'${escaped}'`]);
|
|
81
|
+
if (enter) {
|
|
82
|
+
run(['send-keys', '-t', paneId, 'Enter']);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Send a control key (e.g., C-c, Enter, Escape)
|
|
87
|
+
*/
|
|
88
|
+
export function sendControlKey(paneId, key) {
|
|
89
|
+
run(['send-keys', '-t', paneId, key]);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Run a command in a pane
|
|
93
|
+
*/
|
|
94
|
+
export function runInPane(paneId, command) {
|
|
95
|
+
sendKeys(paneId, command, true);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Select (focus) a pane
|
|
99
|
+
*/
|
|
100
|
+
export function selectPane(paneId) {
|
|
101
|
+
run(['select-pane', '-t', paneId]);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Resize a pane
|
|
105
|
+
*/
|
|
106
|
+
export function resizePane(paneId, width, height) {
|
|
107
|
+
if (width !== undefined) {
|
|
108
|
+
run(['resize-pane', '-t', paneId, '-x', String(width)]);
|
|
109
|
+
}
|
|
110
|
+
if (height !== undefined) {
|
|
111
|
+
run(['resize-pane', '-t', paneId, '-y', String(height)]);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Kill a pane
|
|
116
|
+
*/
|
|
117
|
+
export function killPane(paneId) {
|
|
118
|
+
run(['kill-pane', '-t', paneId]);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Swap two panes
|
|
122
|
+
*/
|
|
123
|
+
export function swapPanes(paneId1, paneId2) {
|
|
124
|
+
run(['swap-pane', '-s', paneId1, '-t', paneId2]);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Break a pane to background window
|
|
128
|
+
*/
|
|
129
|
+
export function breakPane(paneId, windowName) {
|
|
130
|
+
const args = ['break-pane', '-d', '-s', paneId];
|
|
131
|
+
if (windowName)
|
|
132
|
+
args.push('-n', `"${windowName}"`);
|
|
133
|
+
run(args);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get current pane dimensions
|
|
137
|
+
*/
|
|
138
|
+
export function getPaneDimensions(paneId) {
|
|
139
|
+
const output = exec(['display-message', '-p', '-t', paneId, "'#{pane_width},#{pane_height}'"], { silent: true });
|
|
140
|
+
if (!output) {
|
|
141
|
+
return { width: 80, height: 24 }; // fallback
|
|
142
|
+
}
|
|
143
|
+
const [width, height] = output.trim().split(',').map(n => parseInt(n, 10));
|
|
144
|
+
return { width: width || 80, height: height || 24 };
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Join a pane from background
|
|
148
|
+
*/
|
|
149
|
+
export function joinPane(sourcePaneId, targetPaneId, horizontal = true) {
|
|
150
|
+
const dir = horizontal ? '-h' : '-v';
|
|
151
|
+
run(['join-pane', dir, '-s', sourcePaneId, '-t', targetPaneId]);
|
|
152
|
+
}
|
|
153
|
+
// ============================================================================
|
|
154
|
+
// Options
|
|
155
|
+
// ============================================================================
|
|
156
|
+
/**
|
|
157
|
+
* Set a tmux option
|
|
158
|
+
*/
|
|
159
|
+
export function setOption(option, value, global = false) {
|
|
160
|
+
const args = global
|
|
161
|
+
? ['set-option', '-g', option, value]
|
|
162
|
+
: ['set-option', option, value];
|
|
163
|
+
run(args);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Set a pane-specific option
|
|
167
|
+
*/
|
|
168
|
+
export function setPaneOption(paneId, option, value) {
|
|
169
|
+
run(['set-option', '-p', '-t', paneId, option, value]);
|
|
170
|
+
}
|
|
171
|
+
// ============================================================================
|
|
172
|
+
// Key Bindings
|
|
173
|
+
// ============================================================================
|
|
174
|
+
/**
|
|
175
|
+
* Bind a key in root table
|
|
176
|
+
*/
|
|
177
|
+
export function bindKey(key, command) {
|
|
178
|
+
run(['bind-key', '-T', 'root', key, ...command.split(' ')]);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Run a shell command via tmux
|
|
182
|
+
*/
|
|
183
|
+
export function runShell(command) {
|
|
184
|
+
run(['run-shell', '-b', `'${command}'`]);
|
|
185
|
+
}
|
|
186
|
+
// ============================================================================
|
|
187
|
+
// Hooks
|
|
188
|
+
// ============================================================================
|
|
189
|
+
/**
|
|
190
|
+
* Set a tmux hook for a session
|
|
191
|
+
* @param sessionName - Target session
|
|
192
|
+
* @param hookName - Hook name (e.g., 'after-resize-pane', 'client-attached')
|
|
193
|
+
* @param command - Command to run when hook fires (caller must handle quoting)
|
|
194
|
+
*/
|
|
195
|
+
export function setHook(sessionName, hookName, command) {
|
|
196
|
+
run(['set-hook', '-t', sessionName, hookName, command]);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Remove a tmux hook from a session
|
|
200
|
+
* @param sessionName - Target session
|
|
201
|
+
* @param hookName - Hook name to remove
|
|
202
|
+
*/
|
|
203
|
+
export function removeHook(sessionName, hookName) {
|
|
204
|
+
run(['set-hook', '-u', '-t', sessionName, hookName]);
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=pane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pane.js","sourceRoot":"","sources":["../../src/tmux/pane.ts"],"names":[],"mappings":"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"}
|