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,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Launcher
|
|
3
|
+
*
|
|
4
|
+
* Creates tmux session, sets up panes, and spawns sidebar process.
|
|
5
|
+
*/
|
|
6
|
+
import { resolve, dirname } from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import { existsSync, writeFileSync, chmodSync } from 'fs';
|
|
9
|
+
import { execSync } from 'child_process';
|
|
10
|
+
import { tmpdir } from 'os';
|
|
11
|
+
import * as tmux from '../tmux';
|
|
12
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
13
|
+
const __dirname = dirname(__filename);
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Session Name Generation
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Generate a unique session name from repo path
|
|
19
|
+
*/
|
|
20
|
+
export function generateSessionName(repoPath) {
|
|
21
|
+
const projectName = repoPath.split('/').pop() || 'project';
|
|
22
|
+
// Create a simple hash from the path
|
|
23
|
+
let hash = 0;
|
|
24
|
+
for (let i = 0; i < repoPath.length; i++) {
|
|
25
|
+
const char = repoPath.charCodeAt(i);
|
|
26
|
+
hash = ((hash << 5) - hash) + char;
|
|
27
|
+
hash = hash & hash;
|
|
28
|
+
}
|
|
29
|
+
const hashStr = Math.abs(hash).toString(36).substring(0, 6);
|
|
30
|
+
return `cpp-${projectName.substring(0, 15)}-${hashStr}`;
|
|
31
|
+
}
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// Launcher
|
|
34
|
+
// ============================================================================
|
|
35
|
+
/**
|
|
36
|
+
* Launch or attach to a claude-code-plus-plus session
|
|
37
|
+
*/
|
|
38
|
+
export async function launch(options) {
|
|
39
|
+
const { repoPath, sessionName, forceNew = false } = options;
|
|
40
|
+
// Check if session exists
|
|
41
|
+
if (tmux.sessionExists(sessionName)) {
|
|
42
|
+
if (forceNew) {
|
|
43
|
+
console.log('Killing existing session...');
|
|
44
|
+
tmux.killSession(sessionName);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
console.log(`Reattaching to existing session: ${sessionName}`);
|
|
48
|
+
console.log('(Use --new to force create a fresh session)');
|
|
49
|
+
const exitCode = tmux.attach(sessionName);
|
|
50
|
+
return { sessionName, attached: true, exitCode };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
console.log(`Starting Claude++ for: ${repoPath}`);
|
|
54
|
+
console.log(`Session: ${sessionName}`);
|
|
55
|
+
// Create session
|
|
56
|
+
tmux.createSession(sessionName, repoPath);
|
|
57
|
+
// Configure tmux options
|
|
58
|
+
configureTmux(sessionName);
|
|
59
|
+
// Get initial pane (will be sidebar)
|
|
60
|
+
const panes = tmux.listPanes(sessionName);
|
|
61
|
+
const sidebarPaneId = panes[0]?.id || '%0';
|
|
62
|
+
// Split to create main pane (25% sidebar, 75% main)
|
|
63
|
+
const mainPaneId = tmux.splitHorizontal(sessionName, 25, repoPath);
|
|
64
|
+
// Spawn sidebar process
|
|
65
|
+
const sidebarCommand = getSidebarCommand(repoPath, sessionName, mainPaneId, sidebarPaneId);
|
|
66
|
+
tmux.runInPane(sidebarPaneId, sidebarCommand);
|
|
67
|
+
// Show welcome screen in main pane
|
|
68
|
+
showWelcomeScreen(sessionName, mainPaneId);
|
|
69
|
+
// Set up additional tmux bindings
|
|
70
|
+
setupBindings(sessionName, sidebarPaneId);
|
|
71
|
+
// Focus sidebar
|
|
72
|
+
tmux.selectPane(sidebarPaneId);
|
|
73
|
+
// Attach
|
|
74
|
+
console.log('Attaching to tmux session...');
|
|
75
|
+
console.log('Detach with Ctrl+B d (sessions keep running!)');
|
|
76
|
+
const exitCode = tmux.attach(sessionName);
|
|
77
|
+
return { sessionName, attached: true, exitCode };
|
|
78
|
+
}
|
|
79
|
+
// ============================================================================
|
|
80
|
+
// Helpers
|
|
81
|
+
// ============================================================================
|
|
82
|
+
/**
|
|
83
|
+
* Configure tmux options for better UX
|
|
84
|
+
*/
|
|
85
|
+
function configureTmux(sessionName) {
|
|
86
|
+
tmux.setOption('mouse', 'on', true);
|
|
87
|
+
tmux.setOption('status', 'off');
|
|
88
|
+
tmux.setOption('pane-border-style', 'fg=colour238');
|
|
89
|
+
tmux.setOption('pane-active-border-style', 'fg=colour39');
|
|
90
|
+
// Auto-copy to clipboard on macOS
|
|
91
|
+
try {
|
|
92
|
+
execSync(`tmux bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"`, { stdio: 'ignore' });
|
|
93
|
+
execSync(`tmux bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"`, { stdio: 'ignore' });
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Not on macOS or pbcopy not available
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get the command to run sidebar
|
|
101
|
+
*/
|
|
102
|
+
function getSidebarCommand(repoPath, sessionName, mainPaneId, sidebarPaneId) {
|
|
103
|
+
// Look for sidebar in same directory as launcher
|
|
104
|
+
const srcDir = resolve(__dirname, '..');
|
|
105
|
+
const tsPath = resolve(srcDir, 'sidebar', 'index.ts');
|
|
106
|
+
const jsPath = resolve(srcDir, 'sidebar', 'index.js');
|
|
107
|
+
const args = [
|
|
108
|
+
`"${repoPath}"`,
|
|
109
|
+
`"${sessionName}"`,
|
|
110
|
+
`"${mainPaneId}"`,
|
|
111
|
+
`"${sidebarPaneId}"`,
|
|
112
|
+
].join(' ');
|
|
113
|
+
if (existsSync(tsPath)) {
|
|
114
|
+
return `npx tsx "${tsPath}" ${args}`;
|
|
115
|
+
}
|
|
116
|
+
else if (existsSync(jsPath)) {
|
|
117
|
+
return `node "${jsPath}" ${args}`;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Fallback - show error
|
|
121
|
+
return `echo "Sidebar not found at ${tsPath} or ${jsPath}"`;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Show welcome screen in main pane
|
|
126
|
+
*/
|
|
127
|
+
function showWelcomeScreen(sessionName, mainPaneId) {
|
|
128
|
+
const tempDir = tmpdir();
|
|
129
|
+
const welcomeScript = `${tempDir}/claude-pp-welcome-${sessionName}.sh`;
|
|
130
|
+
const content = `#!/bin/bash
|
|
131
|
+
clear
|
|
132
|
+
cat << 'WELCOME'
|
|
133
|
+
|
|
134
|
+
╔═══════════════════════════════════════════════════════════╗
|
|
135
|
+
║ ║
|
|
136
|
+
║ ██████╗██╗ █████╗ ██╗ ██╗██████╗ ███████╗ ║
|
|
137
|
+
║ ██╔════╝██║ ██╔══██╗██║ ██║██╔══██╗██╔════╝ ║
|
|
138
|
+
║ ██║ ██║ ███████║██║ ██║██║ ██║█████╗ ║
|
|
139
|
+
║ ██║ ██║ ██╔══██║██║ ██║██║ ██║██╔══╝ ║
|
|
140
|
+
║ ╚██████╗███████╗██║ ██║╚██████╔╝██████╔╝███████╗ ║
|
|
141
|
+
║ ╚═════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝ ║
|
|
142
|
+
║ CODE ++ ║
|
|
143
|
+
║ ║
|
|
144
|
+
╚═══════════════════════════════════════════════════════════╝
|
|
145
|
+
|
|
146
|
+
Multi-agent Claude Code with git worktree isolation
|
|
147
|
+
|
|
148
|
+
───────────────────────────────────────────────────────────────
|
|
149
|
+
|
|
150
|
+
GETTING STARTED
|
|
151
|
+
|
|
152
|
+
↑/↓ or j/k Navigate worktrees & sessions
|
|
153
|
+
Enter Create new session or switch to selected
|
|
154
|
+
n Create new worktree
|
|
155
|
+
d Delete selected item
|
|
156
|
+
q Quit
|
|
157
|
+
|
|
158
|
+
───────────────────────────────────────────────────────────────
|
|
159
|
+
|
|
160
|
+
GLOBAL SHORTCUTS (work from any pane)
|
|
161
|
+
|
|
162
|
+
Ctrl+T Create new terminal in active session
|
|
163
|
+
Ctrl+G Toggle sidebar collapse
|
|
164
|
+
|
|
165
|
+
───────────────────────────────────────────────────────────────
|
|
166
|
+
|
|
167
|
+
TMUX SHORTCUTS
|
|
168
|
+
|
|
169
|
+
Ctrl+B ←/→ Switch between panes
|
|
170
|
+
Ctrl+B d Detach (sessions keep running!)
|
|
171
|
+
|
|
172
|
+
───────────────────────────────────────────────────────────────
|
|
173
|
+
|
|
174
|
+
Select a worktree in the sidebar and press Enter to begin.
|
|
175
|
+
|
|
176
|
+
WELCOME
|
|
177
|
+
read -r
|
|
178
|
+
`;
|
|
179
|
+
writeFileSync(welcomeScript, content);
|
|
180
|
+
chmodSync(welcomeScript, 0o755);
|
|
181
|
+
tmux.runInPane(mainPaneId, welcomeScript);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Set up additional key bindings
|
|
185
|
+
*/
|
|
186
|
+
function setupBindings(sessionName, sidebarPaneId) {
|
|
187
|
+
// Set up hook to enforce sidebar width on attach
|
|
188
|
+
try {
|
|
189
|
+
execSync(`tmux set-hook -t ${sessionName} client-attached "resize-pane -t ${sidebarPaneId} -x 25"`, { stdio: 'ignore' });
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
// Ignore
|
|
193
|
+
}
|
|
194
|
+
// Disable scroll wheel in sidebar pane
|
|
195
|
+
const condition = `#{==:#{pane_id},${sidebarPaneId}}`;
|
|
196
|
+
try {
|
|
197
|
+
execSync(`tmux bind-key -T root WheelUpPane if-shell -F "${condition}" "" "copy-mode -e; send-keys -M"`, { stdio: 'ignore' });
|
|
198
|
+
execSync(`tmux bind-key -T root WheelDownPane if-shell -F "${condition}" "" "copy-mode -e; send-keys -M"`, { stdio: 'ignore' });
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
// Ignore
|
|
202
|
+
}
|
|
203
|
+
// Global key bindings that route to sidebar regardless of active pane
|
|
204
|
+
// Ctrl+T - create new terminal
|
|
205
|
+
try {
|
|
206
|
+
execSync(`tmux bind-key -T root C-t send-keys -t ${sidebarPaneId} C-t`, { stdio: 'ignore' });
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
// Ignore
|
|
210
|
+
}
|
|
211
|
+
// Ctrl+G - toggle sidebar collapse
|
|
212
|
+
try {
|
|
213
|
+
execSync(`tmux bind-key -T root C-g send-keys -t ${sidebarPaneId} C-g`, { stdio: 'ignore' });
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
// Ignore
|
|
217
|
+
}
|
|
218
|
+
// Ctrl+Q - quit
|
|
219
|
+
try {
|
|
220
|
+
execSync(`tmux bind-key -T root C-q send-keys -t ${sidebarPaneId} C-q`, { stdio: 'ignore' });
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// Ignore
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/launcher/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Multiplexer Class
|
|
3
|
+
*
|
|
4
|
+
* Provides shared functionality for multiplexer implementations.
|
|
5
|
+
*/
|
|
6
|
+
import type { IMultiplexer, MultiplexerCapabilities, CreatePaneOptions, CreateSessionOptions, JoinPaneOptions, PaneSize, Direction, PaneInfo, WindowInfo } from '../types';
|
|
7
|
+
/**
|
|
8
|
+
* Abstract base class for multiplexer implementations
|
|
9
|
+
*/
|
|
10
|
+
export declare abstract class BaseMultiplexer implements IMultiplexer {
|
|
11
|
+
abstract readonly name: string;
|
|
12
|
+
abstract readonly capabilities: MultiplexerCapabilities;
|
|
13
|
+
abstract initialize(): Promise<void>;
|
|
14
|
+
abstract shutdown(): Promise<void>;
|
|
15
|
+
abstract isAvailable(): Promise<boolean>;
|
|
16
|
+
abstract getVersion(): Promise<string>;
|
|
17
|
+
abstract createSession(options: CreateSessionOptions): Promise<string>;
|
|
18
|
+
abstract attachSession(sessionName: string): Promise<void>;
|
|
19
|
+
abstract detachSession(): Promise<void>;
|
|
20
|
+
abstract sessionExists(sessionName: string): Promise<boolean>;
|
|
21
|
+
abstract killSession(sessionName: string): Promise<void>;
|
|
22
|
+
abstract listSessions(): Promise<string[]>;
|
|
23
|
+
abstract createPane(options: CreatePaneOptions): Promise<string>;
|
|
24
|
+
abstract destroyPane(paneId: string): Promise<void>;
|
|
25
|
+
abstract focusPane(paneId: string): Promise<void>;
|
|
26
|
+
abstract resizePane(paneId: string, size: PaneSize, direction: Direction): Promise<void>;
|
|
27
|
+
abstract getPaneInfo(paneId: string): Promise<PaneInfo | null>;
|
|
28
|
+
abstract listPanes(): Promise<PaneInfo[]>;
|
|
29
|
+
abstract hidePane(paneId: string): Promise<void>;
|
|
30
|
+
abstract showPane(options: JoinPaneOptions): Promise<void>;
|
|
31
|
+
abstract isPaneVisible(paneId: string): Promise<boolean>;
|
|
32
|
+
abstract sendInput(paneId: string, text: string): Promise<void>;
|
|
33
|
+
abstract sendKeys(paneId: string, keys: string[]): Promise<void>;
|
|
34
|
+
abstract runCommand(paneId: string, command: string): Promise<void>;
|
|
35
|
+
abstract createWindow(name?: string, cwd?: string): Promise<string>;
|
|
36
|
+
abstract destroyWindow(windowId: string): Promise<void>;
|
|
37
|
+
abstract selectWindow(windowId: string): Promise<void>;
|
|
38
|
+
abstract renameWindow(windowId: string, name: string): Promise<void>;
|
|
39
|
+
abstract listWindows(): Promise<WindowInfo[]>;
|
|
40
|
+
abstract setOption(option: string, value: string, global?: boolean): Promise<void>;
|
|
41
|
+
abstract getOption(option: string): Promise<string>;
|
|
42
|
+
abstract bindKey(key: string, action: string): Promise<void>;
|
|
43
|
+
abstract unbindKey(key: string): Promise<void>;
|
|
44
|
+
abstract enableMouse(): Promise<void>;
|
|
45
|
+
abstract disableMouse(): Promise<void>;
|
|
46
|
+
abstract copyToClipboard(text: string): Promise<void>;
|
|
47
|
+
abstract runShellCommand(command: string): Promise<string>;
|
|
48
|
+
/**
|
|
49
|
+
* Calculate pane size value for the multiplexer
|
|
50
|
+
*/
|
|
51
|
+
protected calculatePaneSize(size: PaneSize): string;
|
|
52
|
+
/**
|
|
53
|
+
* Validate pane ID format
|
|
54
|
+
*/
|
|
55
|
+
protected validatePaneId(paneId: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Validate window ID format
|
|
58
|
+
*/
|
|
59
|
+
protected validateWindowId(windowId: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Validate session name
|
|
62
|
+
*/
|
|
63
|
+
protected validateSessionName(name: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Escape shell argument
|
|
66
|
+
*/
|
|
67
|
+
protected escapeShellArg(arg: string): string;
|
|
68
|
+
/**
|
|
69
|
+
* Convert direction to tmux flag
|
|
70
|
+
*/
|
|
71
|
+
protected directionToFlag(direction: Direction): string;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/multiplexer/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,UAAU,EACX,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,8BAAsB,eAAgB,YAAW,YAAY;IAC3D,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAC;IAMxD,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IACpC,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAClC,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IACxC,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAEtC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;IACtE,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1D,QAAQ,CAAC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IACvC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAC7D,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACxD,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAE1C,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAChE,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACnD,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACjD,QAAQ,CAAC,UAAU,CACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC;IAChB,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC9D,QAAQ,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAEzC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1D,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAExD,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/D,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAChE,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAEnE,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACnE,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACvD,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACtD,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACpE,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAE7C,QAAQ,CAAC,SAAS,CAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC;IAChB,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACnD,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5D,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE9C,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IACrC,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IACtC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACrD,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM1D;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM;IAUnD;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAKjD;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKrD;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKpD;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI7C;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;CAYxD"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Multiplexer Class
|
|
3
|
+
*
|
|
4
|
+
* Provides shared functionality for multiplexer implementations.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Abstract base class for multiplexer implementations
|
|
8
|
+
*/
|
|
9
|
+
export class BaseMultiplexer {
|
|
10
|
+
// =========================================================================
|
|
11
|
+
// Shared utility methods
|
|
12
|
+
// =========================================================================
|
|
13
|
+
/**
|
|
14
|
+
* Calculate pane size value for the multiplexer
|
|
15
|
+
*/
|
|
16
|
+
calculatePaneSize(size) {
|
|
17
|
+
if (size.percent !== undefined) {
|
|
18
|
+
return `${size.percent}%`;
|
|
19
|
+
}
|
|
20
|
+
if (size.cells !== undefined) {
|
|
21
|
+
return String(size.cells);
|
|
22
|
+
}
|
|
23
|
+
return '50%';
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Validate pane ID format
|
|
27
|
+
*/
|
|
28
|
+
validatePaneId(paneId) {
|
|
29
|
+
// tmux format: %<number>
|
|
30
|
+
return /^%\d+$/.test(paneId);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Validate window ID format
|
|
34
|
+
*/
|
|
35
|
+
validateWindowId(windowId) {
|
|
36
|
+
// tmux format: @<number>
|
|
37
|
+
return /^@\d+$/.test(windowId);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Validate session name
|
|
41
|
+
*/
|
|
42
|
+
validateSessionName(name) {
|
|
43
|
+
// No dots or colons in tmux session names
|
|
44
|
+
return !/[.:]/.test(name) && name.length > 0 && name.length < 100;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Escape shell argument
|
|
48
|
+
*/
|
|
49
|
+
escapeShellArg(arg) {
|
|
50
|
+
return `'${arg.replace(/'/g, "'\\''")}'`;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Convert direction to tmux flag
|
|
54
|
+
*/
|
|
55
|
+
directionToFlag(direction) {
|
|
56
|
+
switch (direction) {
|
|
57
|
+
case 'up':
|
|
58
|
+
return '-U';
|
|
59
|
+
case 'down':
|
|
60
|
+
return '-D';
|
|
61
|
+
case 'left':
|
|
62
|
+
return '-L';
|
|
63
|
+
case 'right':
|
|
64
|
+
return '-R';
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/multiplexer/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH;;GAEG;AACH,MAAM,OAAgB,eAAe;IA2DnC,4EAA4E;IAC5E,yBAAyB;IACzB,4EAA4E;IAE5E;;OAEG;IACO,iBAAiB,CAAC,IAAc;QACxC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC;QAC5B,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACO,cAAc,CAAC,MAAc;QACrC,yBAAyB;QACzB,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACO,gBAAgB,CAAC,QAAgB;QACzC,yBAAyB;QACzB,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACO,mBAAmB,CAAC,IAAY;QACxC,0CAA0C;QAC1C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;IACpE,CAAC;IAED;;OAEG;IACO,cAAc,CAAC,GAAW;QAClC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;IAC3C,CAAC;IAED;;OAEG;IACO,eAAe,CAAC,SAAoB;QAC5C,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC;YACd,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC;YACd,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC;YACd,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multiplexer Factory
|
|
3
|
+
*
|
|
4
|
+
* Creates the appropriate multiplexer based on platform and configuration.
|
|
5
|
+
*/
|
|
6
|
+
import type { IMultiplexer } from '../types';
|
|
7
|
+
import type { MultiplexerConfig } from '../types';
|
|
8
|
+
/**
|
|
9
|
+
* Multiplexer type
|
|
10
|
+
*/
|
|
11
|
+
export type MultiplexerType = 'tmux' | 'windows' | 'auto';
|
|
12
|
+
/**
|
|
13
|
+
* Create a multiplexer based on configuration
|
|
14
|
+
*/
|
|
15
|
+
export declare function createMultiplexer(config?: Partial<MultiplexerConfig>): IMultiplexer;
|
|
16
|
+
/**
|
|
17
|
+
* Detect the best available multiplexer for the current platform
|
|
18
|
+
*/
|
|
19
|
+
export declare function detectMultiplexer(): IMultiplexer;
|
|
20
|
+
/**
|
|
21
|
+
* Check if a multiplexer is available
|
|
22
|
+
*/
|
|
23
|
+
export declare function isMultiplexerAvailable(type?: MultiplexerType): Promise<boolean>;
|
|
24
|
+
/**
|
|
25
|
+
* Get the multiplexer that would be used on this system
|
|
26
|
+
*/
|
|
27
|
+
export declare function getDefaultMultiplexerType(): MultiplexerType;
|
|
28
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/multiplexer/factory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAMlD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAE1D;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAClC,YAAY,CASd;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CA6BhD;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,CAAC,EAAE,eAAe,GACrB,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,eAAe,CAY3D"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multiplexer Factory
|
|
3
|
+
*
|
|
4
|
+
* Creates the appropriate multiplexer based on platform and configuration.
|
|
5
|
+
*/
|
|
6
|
+
import { detectPlatform, isTmuxAvailable } from '../platform';
|
|
7
|
+
import { createTmuxMultiplexer } from './tmux';
|
|
8
|
+
import { MultiplexerError } from '../utils';
|
|
9
|
+
/**
|
|
10
|
+
* Create a multiplexer based on configuration
|
|
11
|
+
*/
|
|
12
|
+
export function createMultiplexer(config) {
|
|
13
|
+
const type = config?.type ?? 'auto';
|
|
14
|
+
if (type === 'tmux') {
|
|
15
|
+
return createTmuxMultiplexer();
|
|
16
|
+
}
|
|
17
|
+
// Auto-detect (includes handling 'windows' in the future via detectMultiplexer)
|
|
18
|
+
return detectMultiplexer();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Detect the best available multiplexer for the current platform
|
|
22
|
+
*/
|
|
23
|
+
export function detectMultiplexer() {
|
|
24
|
+
const platform = detectPlatform();
|
|
25
|
+
// On Unix-like systems, prefer tmux
|
|
26
|
+
if (platform === 'darwin' || platform === 'linux') {
|
|
27
|
+
if (isTmuxAvailable()) {
|
|
28
|
+
return createTmuxMultiplexer();
|
|
29
|
+
}
|
|
30
|
+
throw new MultiplexerError('tmux is not installed. Please install tmux to use Claude Code++.\n' +
|
|
31
|
+
' macOS: brew install tmux\n' +
|
|
32
|
+
' Ubuntu/Debian: apt install tmux\n' +
|
|
33
|
+
' Fedora: dnf install tmux');
|
|
34
|
+
}
|
|
35
|
+
// On Windows, we would use Windows multiplexer
|
|
36
|
+
if (platform === 'win32') {
|
|
37
|
+
// For now, suggest using WSL
|
|
38
|
+
throw new MultiplexerError('Windows native support is not yet available.\n' +
|
|
39
|
+
'Please use WSL (Windows Subsystem for Linux) with tmux installed.');
|
|
40
|
+
}
|
|
41
|
+
throw new MultiplexerError(`Unsupported platform: ${platform}. ` +
|
|
42
|
+
'Claude Code++ requires tmux on macOS/Linux.');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Check if a multiplexer is available
|
|
46
|
+
*/
|
|
47
|
+
export async function isMultiplexerAvailable(type) {
|
|
48
|
+
try {
|
|
49
|
+
const config = type && (type === 'tmux' || type === 'auto')
|
|
50
|
+
? { type }
|
|
51
|
+
: undefined;
|
|
52
|
+
const multiplexer = createMultiplexer(config);
|
|
53
|
+
return await multiplexer.isAvailable();
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get the multiplexer that would be used on this system
|
|
61
|
+
*/
|
|
62
|
+
export function getDefaultMultiplexerType() {
|
|
63
|
+
const platform = detectPlatform();
|
|
64
|
+
if (platform === 'darwin' || platform === 'linux') {
|
|
65
|
+
return 'tmux';
|
|
66
|
+
}
|
|
67
|
+
if (platform === 'win32') {
|
|
68
|
+
return 'windows';
|
|
69
|
+
}
|
|
70
|
+
return 'auto';
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/multiplexer/factory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAO5C;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAmC;IAEnC,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC;IAEpC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAED,gFAAgF;IAChF,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAElC,oCAAoC;IACpC,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClD,IAAI,eAAe,EAAE,EAAE,CAAC;YACtB,OAAO,qBAAqB,EAAE,CAAC;QACjC,CAAC;QACD,MAAM,IAAI,gBAAgB,CACxB,oEAAoE;YACpE,8BAA8B;YAC9B,qCAAqC;YACrC,4BAA4B,CAC7B,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,6BAA6B;QAC7B,MAAM,IAAI,gBAAgB,CACxB,gDAAgD;YAChD,mEAAmE,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,gBAAgB,CACxB,yBAAyB,QAAQ,IAAI;QACrC,6CAA6C,CAC9C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,CAAC;YACzD,CAAC,CAAC,EAAE,IAAI,EAAE;YACV,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAElC,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multiplexer Module
|
|
3
|
+
*
|
|
4
|
+
* Provides an abstraction layer for terminal multiplexers.
|
|
5
|
+
* Currently supports tmux, with Windows support planned.
|
|
6
|
+
*/
|
|
7
|
+
export { BaseMultiplexer } from './base';
|
|
8
|
+
export { createMultiplexer, detectMultiplexer, isMultiplexerAvailable, getDefaultMultiplexerType, } from './factory';
|
|
9
|
+
export type { MultiplexerType } from './factory';
|
|
10
|
+
export { TmuxMultiplexer, createTmuxMultiplexer, tmux, tmuxCommand, tmuxQuery, tmuxRun, tmuxCheck, applyTmuxConfig, DEFAULT_TMUX_CONFIG, getTmuxVersionNumber, tmuxSupports, } from './tmux';
|
|
11
|
+
export type { TmuxCommandOptions, TmuxConfig } from './tmux';
|
|
12
|
+
export { WindowsMultiplexer, createWindowsMultiplexer, } from './windows';
|
|
13
|
+
export type { IMultiplexer, MultiplexerCapabilities, CreatePaneOptions, CreateSessionOptions, JoinPaneOptions, PaneSize, Direction, SplitOrientation, } from '../types';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/multiplexer/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAGzC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGjD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,IAAI,EACJ,WAAW,EACX,SAAS,EACT,OAAO,EACP,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,GACb,MAAM,QAAQ,CAAC;AAChB,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAG7D,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,SAAS,EACT,gBAAgB,GACjB,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multiplexer Module
|
|
3
|
+
*
|
|
4
|
+
* Provides an abstraction layer for terminal multiplexers.
|
|
5
|
+
* Currently supports tmux, with Windows support planned.
|
|
6
|
+
*/
|
|
7
|
+
// Base class
|
|
8
|
+
export { BaseMultiplexer } from './base';
|
|
9
|
+
// Factory
|
|
10
|
+
export { createMultiplexer, detectMultiplexer, isMultiplexerAvailable, getDefaultMultiplexerType, } from './factory';
|
|
11
|
+
// tmux implementation
|
|
12
|
+
export { TmuxMultiplexer, createTmuxMultiplexer, tmux, tmuxCommand, tmuxQuery, tmuxRun, tmuxCheck, applyTmuxConfig, DEFAULT_TMUX_CONFIG, getTmuxVersionNumber, tmuxSupports, } from './tmux';
|
|
13
|
+
// Windows implementation (placeholder)
|
|
14
|
+
export { WindowsMultiplexer, createWindowsMultiplexer, } from './windows';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/multiplexer/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,UAAU;AACV,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,WAAW,CAAC;AAGnB,sBAAsB;AACtB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,IAAI,EACJ,WAAW,EACX,SAAS,EACT,OAAO,EACP,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,GACb,MAAM,QAAQ,CAAC;AAGhB,uCAAuC;AACvC,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tmux Multiplexer Module
|
|
3
|
+
*/
|
|
4
|
+
export { TmuxMultiplexer, createTmuxMultiplexer } from './tmux-multiplexer';
|
|
5
|
+
export { tmux, tmuxCommand, tmuxQuery, tmuxRun, tmuxCheck, } from './tmux-commands';
|
|
6
|
+
export type { TmuxCommandOptions } from './tmux-commands';
|
|
7
|
+
export { applyTmuxConfig, setupKeyBindings, enableMouseWithClipboard, disableScrollInPane, getTmuxVersionNumber, tmuxSupports, DEFAULT_TMUX_CONFIG, } from './tmux-config';
|
|
8
|
+
export type { TmuxConfig } from './tmux-config';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/multiplexer/tmux/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,IAAI,EACJ,WAAW,EACX,SAAS,EACT,OAAO,EACP,SAAS,GACV,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tmux Multiplexer Module
|
|
3
|
+
*/
|
|
4
|
+
export { TmuxMultiplexer, createTmuxMultiplexer } from './tmux-multiplexer';
|
|
5
|
+
export { tmux, tmuxCommand, tmuxQuery, tmuxRun, tmuxCheck, } from './tmux-commands';
|
|
6
|
+
export { applyTmuxConfig, setupKeyBindings, enableMouseWithClipboard, disableScrollInPane, getTmuxVersionNumber, tmuxSupports, DEFAULT_TMUX_CONFIG, } from './tmux-config';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/multiplexer/tmux/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,IAAI,EACJ,WAAW,EACX,SAAS,EACT,OAAO,EACP,SAAS,GACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,GACpB,MAAM,eAAe,CAAC"}
|