claude-code-plus-plus 0.1.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.
@@ -0,0 +1,364 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Terminal Manager - Tab UI for terminal panes
4
+ *
5
+ * Runs in a small horizontal pane above the terminal area.
6
+ * Shows tabs for each terminal, allows switching between them.
7
+ *
8
+ * Layout:
9
+ * ┌──────────────────────────────────────┐
10
+ * │ [Terminal 1] [Terminal 2] [Term...] │ <- This pane (3 rows)
11
+ * ├──────────────────────────────────────┤
12
+ * │ Active terminal content │ <- One terminal visible
13
+ * └──────────────────────────────────────┘
14
+ */
15
+ import { execSync } from 'child_process';
16
+ import { readFileSync, writeFileSync, existsSync, watchFile, unwatchFile } from 'fs';
17
+ // ANSI escape codes
18
+ const ESC = '\x1b';
19
+ const CSI = `${ESC}[`;
20
+ const ansi = {
21
+ clearScreen: `${CSI}2J`,
22
+ moveTo: (row, col) => `${CSI}${row};${col}H`,
23
+ reset: `${CSI}0m`,
24
+ bold: `${CSI}1m`,
25
+ dim: `${CSI}2m`,
26
+ inverse: `${CSI}7m`,
27
+ fg: {
28
+ black: `${CSI}30m`,
29
+ red: `${CSI}31m`,
30
+ green: `${CSI}32m`,
31
+ yellow: `${CSI}33m`,
32
+ blue: `${CSI}34m`,
33
+ magenta: `${CSI}35m`,
34
+ cyan: `${CSI}36m`,
35
+ white: `${CSI}37m`,
36
+ gray: `${CSI}90m`,
37
+ },
38
+ bg: {
39
+ black: `${CSI}40m`,
40
+ red: `${CSI}41m`,
41
+ green: `${CSI}42m`,
42
+ yellow: `${CSI}43m`,
43
+ blue: `${CSI}44m`,
44
+ magenta: `${CSI}45m`,
45
+ cyan: `${CSI}46m`,
46
+ white: `${CSI}47m`,
47
+ gray: `${CSI}100m`,
48
+ },
49
+ hideCursor: `${CSI}?25l`,
50
+ showCursor: `${CSI}?25h`,
51
+ // Mouse support
52
+ enableMouse: `${CSI}?1000h${CSI}?1006h`, // Enable mouse tracking + SGR extended mode
53
+ disableMouse: `${CSI}?1000l${CSI}?1006l`,
54
+ };
55
+ class TerminalManager {
56
+ stateFile;
57
+ state = null;
58
+ running = false;
59
+ tabPositions = [];
60
+ constructor(stateFile) {
61
+ this.stateFile = stateFile;
62
+ }
63
+ loadState() {
64
+ try {
65
+ if (!existsSync(this.stateFile)) {
66
+ return false;
67
+ }
68
+ const data = readFileSync(this.stateFile, 'utf-8');
69
+ this.state = JSON.parse(data);
70
+ return true;
71
+ }
72
+ catch (err) {
73
+ return false;
74
+ }
75
+ }
76
+ saveState() {
77
+ if (!this.state)
78
+ return;
79
+ try {
80
+ writeFileSync(this.stateFile, JSON.stringify(this.state, null, 2));
81
+ }
82
+ catch (err) {
83
+ // Failed to save state
84
+ }
85
+ }
86
+ start() {
87
+ // Initial state load
88
+ if (!this.loadState()) {
89
+ console.error('Failed to load state file');
90
+ process.exit(1);
91
+ }
92
+ this.running = true;
93
+ // Set up terminal
94
+ process.stdout.write(ansi.hideCursor);
95
+ process.stdout.write(ansi.enableMouse);
96
+ // Set up raw mode for input
97
+ if (process.stdin.isTTY) {
98
+ process.stdin.setRawMode(true);
99
+ }
100
+ process.stdin.resume();
101
+ // Use raw data handler for both keyboard and mouse
102
+ process.stdin.on('data', this.handleInput.bind(this));
103
+ // Watch state file for changes
104
+ watchFile(this.stateFile, { interval: 100 }, () => {
105
+ this.loadState();
106
+ this.render();
107
+ });
108
+ // Handle resize
109
+ process.stdout.on('resize', () => {
110
+ this.render();
111
+ });
112
+ // Initial render
113
+ this.render();
114
+ }
115
+ stop() {
116
+ this.running = false;
117
+ unwatchFile(this.stateFile);
118
+ process.stdout.write(ansi.disableMouse);
119
+ process.stdout.write(ansi.showCursor);
120
+ process.stdout.write(ansi.reset);
121
+ if (process.stdin.isTTY) {
122
+ process.stdin.setRawMode(false);
123
+ }
124
+ process.stdin.pause();
125
+ }
126
+ handleInput(data) {
127
+ if (!this.state)
128
+ return;
129
+ const input = data.toString();
130
+ // Check for SGR mouse events: \x1b[<button;col;rowM or \x1b[<button;col;rowm
131
+ // Button 0 = left click press, lowercase 'm' = release
132
+ const mouseMatch = input.match(/\x1b\[<(\d+);(\d+);(\d+)([Mm])/);
133
+ if (mouseMatch) {
134
+ const button = parseInt(mouseMatch[1], 10);
135
+ const col = parseInt(mouseMatch[2], 10);
136
+ const row = parseInt(mouseMatch[3], 10);
137
+ const isRelease = mouseMatch[4] === 'm';
138
+ // Handle left click release (button 0)
139
+ if (button === 0 && isRelease && row === 1) {
140
+ this.handleTabClick(col);
141
+ }
142
+ return;
143
+ }
144
+ // Handle keyboard input
145
+ const key = input;
146
+ // Number keys 1-9 to switch directly to tab
147
+ if (key >= '1' && key <= '9') {
148
+ const tabIndex = parseInt(key, 10) - 1;
149
+ if (tabIndex < this.state.terminals.length) {
150
+ this.switchToTab(tabIndex);
151
+ }
152
+ return;
153
+ }
154
+ // Tab key to cycle forward
155
+ if (key === '\t') {
156
+ this.switchTab(1);
157
+ return;
158
+ }
159
+ // Shift+Tab (backtab) to cycle backward - comes as \x1b[Z
160
+ if (key === '\x1b[Z') {
161
+ this.switchTab(-1);
162
+ return;
163
+ }
164
+ // 'h' or left arrow - move left
165
+ if (key === 'h' || key === '\x1b[D' || key === '\x1bOD') {
166
+ this.switchTab(-1);
167
+ return;
168
+ }
169
+ // 'l' or right arrow - move right
170
+ if (key === 'l' || key === '\x1b[C' || key === '\x1bOC') {
171
+ this.switchTab(1);
172
+ return;
173
+ }
174
+ // Enter - focus the terminal pane
175
+ if (key === '\r') {
176
+ this.focusActiveTerminal();
177
+ return;
178
+ }
179
+ // 'd' - delete current terminal
180
+ if (key === 'd') {
181
+ this.deleteCurrentTerminal();
182
+ return;
183
+ }
184
+ // 'c' or 'n' - create new terminal
185
+ if (key === 'c' || key === 'n') {
186
+ this.requestNewTerminal();
187
+ return;
188
+ }
189
+ // Ignore Ctrl+C
190
+ if (key === '\x03') {
191
+ return;
192
+ }
193
+ }
194
+ handleTabClick(col) {
195
+ // Find which tab was clicked based on column position
196
+ for (const tab of this.tabPositions) {
197
+ if (col >= tab.startCol && col <= tab.endCol) {
198
+ if (tab.index !== this.state?.activeIndex) {
199
+ this.switchToTab(tab.index);
200
+ }
201
+ return;
202
+ }
203
+ }
204
+ }
205
+ switchToTab(targetIndex) {
206
+ if (!this.state || targetIndex < 0 || targetIndex >= this.state.terminals.length)
207
+ return;
208
+ if (targetIndex === this.state.activeIndex)
209
+ return;
210
+ // Notify sidebar to handle the switch - sidebar will do the pane manipulation
211
+ // and update the state file, which we'll pick up via file watch
212
+ this.notifySidebar('switch', targetIndex);
213
+ }
214
+ switchTab(direction) {
215
+ if (!this.state || this.state.terminals.length === 0)
216
+ return;
217
+ const newIndex = this.state.activeIndex + direction;
218
+ // Bounds check
219
+ if (newIndex < 0 || newIndex >= this.state.terminals.length) {
220
+ return;
221
+ }
222
+ const currentTerminal = this.state.terminals[this.state.activeIndex];
223
+ const newTerminal = this.state.terminals[newIndex];
224
+ // Swap panes: break current, join new
225
+ try {
226
+ // Break current terminal to background
227
+ execSync(`tmux break-pane -d -t ${currentTerminal.id}`, { stdio: 'ignore' });
228
+ // Join new terminal below the manager pane
229
+ execSync(`tmux join-pane -v -t ${this.state.terminalManagerPaneId} -s ${newTerminal.id}`, { stdio: 'ignore' });
230
+ // Update state and save to file
231
+ this.state.activeIndex = newIndex;
232
+ this.saveState();
233
+ // Notify sidebar of the change
234
+ this.notifySidebar('switch', newIndex);
235
+ this.render();
236
+ }
237
+ catch (err) {
238
+ // Swap failed, try to recover
239
+ }
240
+ }
241
+ focusActiveTerminal() {
242
+ if (!this.state || this.state.terminals.length === 0)
243
+ return;
244
+ const activeTerminal = this.state.terminals[this.state.activeIndex];
245
+ try {
246
+ execSync(`tmux select-pane -t ${activeTerminal.id}`, { stdio: 'ignore' });
247
+ }
248
+ catch (err) {
249
+ // Focus failed
250
+ }
251
+ }
252
+ deleteCurrentTerminal() {
253
+ if (!this.state || this.state.terminals.length === 0)
254
+ return;
255
+ const terminalToDelete = this.state.terminals[this.state.activeIndex];
256
+ // Notify sidebar to handle deletion
257
+ this.notifySidebar('delete', this.state.activeIndex);
258
+ }
259
+ requestNewTerminal() {
260
+ if (!this.state)
261
+ return;
262
+ // Send Ctrl+T to sidebar to create new terminal
263
+ try {
264
+ execSync(`tmux send-keys -t ${this.state.sidebarPaneId} C-t`, { stdio: 'ignore' });
265
+ }
266
+ catch (err) {
267
+ // Failed to send
268
+ }
269
+ }
270
+ notifySidebar(action, index) {
271
+ if (!this.state)
272
+ return;
273
+ // Send special key sequence to sidebar
274
+ // Format: Ctrl+U followed by action code, space, and index, then Enter
275
+ const actionCode = action === 'switch' ? 'S' : 'D';
276
+ try {
277
+ // Use -l (literal) flag to send the command string as-is
278
+ execSync(`tmux send-keys -t ${this.state.sidebarPaneId} C-u`, { stdio: 'ignore' });
279
+ execSync(`tmux send-keys -t ${this.state.sidebarPaneId} -l "${actionCode} ${index}"`, { stdio: 'ignore' });
280
+ execSync(`tmux send-keys -t ${this.state.sidebarPaneId} Enter`, { stdio: 'ignore' });
281
+ }
282
+ catch (err) {
283
+ // Failed to notify
284
+ }
285
+ }
286
+ render() {
287
+ if (!this.state)
288
+ return;
289
+ const cols = process.stdout.columns || 80;
290
+ let output = ansi.clearScreen;
291
+ output += ansi.moveTo(1, 1);
292
+ // Clear tab positions
293
+ this.tabPositions = [];
294
+ const hints = 'click/1-9:switch ↵:focus n:new d:del';
295
+ const hintsLen = hints.length;
296
+ if (this.state.terminals.length === 0) {
297
+ // No terminals message on left, hints on right
298
+ const msg = "No terminals. Press 'n' to create.";
299
+ const padding = cols - msg.length - hintsLen - 2;
300
+ output += `${ansi.dim}${msg}${' '.repeat(Math.max(1, padding))}${hints}${ansi.reset}`;
301
+ }
302
+ else {
303
+ // Build tabs and track positions
304
+ let tabLine = '';
305
+ let currentCol = 1; // 1-indexed column position
306
+ for (let i = 0; i < this.state.terminals.length; i++) {
307
+ const term = this.state.terminals[i];
308
+ const isActive = i === this.state.activeIndex;
309
+ const tabNum = i + 1; // 1-indexed for display
310
+ // Calculate available space for tabs (leave room for hints)
311
+ const availableForTabs = cols - hintsLen - 4;
312
+ const maxTitleLen = Math.max(4, Math.floor(availableForTabs / this.state.terminals.length) - 5);
313
+ // Truncate title if needed
314
+ let title = term.title;
315
+ if (title.length > maxTitleLen) {
316
+ title = title.slice(0, maxTitleLen - 2) + '..';
317
+ }
318
+ // Show tab number for quick switching (only for tabs 1-9)
319
+ const tabText = tabNum <= 9 ? ` ${tabNum}:${title} ` : ` ${title} `;
320
+ // Record tab position for click handling
321
+ this.tabPositions.push({
322
+ index: i,
323
+ startCol: currentCol,
324
+ endCol: currentCol + tabText.length - 1,
325
+ });
326
+ currentCol += tabText.length;
327
+ if (isActive) {
328
+ tabLine += `${ansi.bg.cyan}${ansi.fg.black}${ansi.bold}${tabText}${ansi.reset}`;
329
+ }
330
+ else {
331
+ tabLine += `${ansi.dim}${tabText}${ansi.reset}`;
332
+ }
333
+ // Add separator
334
+ if (i < this.state.terminals.length - 1) {
335
+ tabLine += `${ansi.fg.gray}│${ansi.reset}`;
336
+ currentCol += 1;
337
+ }
338
+ }
339
+ // Calculate padding between tabs and hints
340
+ const tabsWidth = currentCol - 1;
341
+ const padding = cols - tabsWidth - hintsLen - 1;
342
+ output += tabLine;
343
+ output += ' '.repeat(Math.max(1, padding));
344
+ output += `${ansi.dim}${hints}${ansi.reset}`;
345
+ }
346
+ process.stdout.write(output);
347
+ }
348
+ }
349
+ // Main entry point
350
+ async function main() {
351
+ const args = process.argv.slice(2);
352
+ if (args.length < 1) {
353
+ console.error('Usage: terminal-manager <stateFile>');
354
+ process.exit(1);
355
+ }
356
+ const stateFile = args[0];
357
+ const manager = new TerminalManager(stateFile);
358
+ manager.start();
359
+ }
360
+ main().catch((err) => {
361
+ console.error('Terminal manager error:', err);
362
+ process.exit(1);
363
+ });
364
+ //# sourceMappingURL=terminal-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-manager.js","sourceRoot":"","sources":["../src/terminal-manager.ts"],"names":[],"mappings":"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"}
package/dist/tmux.d.ts ADDED
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Tmux control utilities
3
+ */
4
+ export interface TmuxPane {
5
+ id: string;
6
+ width: number;
7
+ height: number;
8
+ active: boolean;
9
+ }
10
+ export interface TmuxWindow {
11
+ id: string;
12
+ name: string;
13
+ active: boolean;
14
+ panes: TmuxPane[];
15
+ }
16
+ export declare class Tmux {
17
+ private sessionName;
18
+ constructor(sessionName?: string);
19
+ /**
20
+ * Check if tmux is installed
21
+ */
22
+ static isAvailable(): boolean;
23
+ /**
24
+ * Check if our session already exists
25
+ */
26
+ sessionExists(): boolean;
27
+ /**
28
+ * Kill existing session if it exists
29
+ */
30
+ killSession(): void;
31
+ /**
32
+ * Create a new tmux session (detached)
33
+ * Returns the initial window/pane ID
34
+ */
35
+ createSession(startDir: string): string;
36
+ /**
37
+ * Split pane horizontally (left/right)
38
+ * Returns the new pane ID (right pane)
39
+ */
40
+ splitHorizontal(percentage?: number, startDir?: string): string;
41
+ /**
42
+ * Split pane vertically (top/bottom)
43
+ * Returns the new pane ID (bottom pane)
44
+ */
45
+ splitVertical(percentage?: number, startDir?: string): string;
46
+ /**
47
+ * Send keys to a specific pane
48
+ */
49
+ /**
50
+ * Send literal text to a pane (spaces and special chars preserved)
51
+ */
52
+ sendKeys(paneId: string, keys: string, enter?: boolean): void;
53
+ /**
54
+ * Send control/special keys (e.g., C-c for Ctrl+C, Enter, Escape)
55
+ */
56
+ sendControlKey(paneId: string, key: string): void;
57
+ /**
58
+ * Run a command in a specific pane
59
+ */
60
+ runInPane(paneId: string, command: string): void;
61
+ /**
62
+ * Select (focus) a specific pane
63
+ */
64
+ selectPane(paneId: string): void;
65
+ /**
66
+ * Resize a pane
67
+ */
68
+ resizePane(paneId: string, width?: number, height?: number): void;
69
+ /**
70
+ * Break a pane out to its own window (keeps it running in background)
71
+ * Returns the new window ID
72
+ */
73
+ breakPane(paneId: string, windowName?: string): string;
74
+ /**
75
+ * Join a pane from another window into the current window
76
+ * Returns the new pane ID
77
+ */
78
+ joinPane(sourcePaneId: string, targetPaneId: string, horizontal?: boolean): string;
79
+ /**
80
+ * Swap two panes
81
+ */
82
+ swapPane(paneId1: string, paneId2: string): void;
83
+ /**
84
+ * Create a new pane by splitting, run a command, then break it to background
85
+ * Returns the pane ID (which persists even after breaking to background window)
86
+ */
87
+ createBackgroundPane(startDir: string, command?: string): string;
88
+ /**
89
+ * Bring a background pane to the foreground (swap with current right pane)
90
+ */
91
+ showPane(paneId: string, targetPaneId: string): void;
92
+ /**
93
+ * Create a new window (like a tab)
94
+ */
95
+ createWindow(name: string, startDir?: string): string;
96
+ /**
97
+ * Select a window by index or ID
98
+ */
99
+ selectWindow(windowId: string): void;
100
+ /**
101
+ * Rename a window
102
+ */
103
+ renameWindow(windowId: string, name: string): void;
104
+ /**
105
+ * Kill a pane
106
+ */
107
+ killPane(paneId: string): void;
108
+ /**
109
+ * Kill a window
110
+ */
111
+ killWindow(windowId: string): void;
112
+ /**
113
+ * Detach the current client from the session
114
+ */
115
+ detachClient(): void;
116
+ /**
117
+ * Attach to the session (takes over the terminal)
118
+ * This is blocking - returns only after detach/exit
119
+ */
120
+ attach(): number;
121
+ /**
122
+ * Get list of panes in current window
123
+ */
124
+ listPanes(): TmuxPane[];
125
+ /**
126
+ * Get list of windows
127
+ */
128
+ listWindows(): TmuxWindow[];
129
+ /**
130
+ * Set a tmux option
131
+ */
132
+ setOption(option: string, value: string, global?: boolean): void;
133
+ /**
134
+ * Set a pane-specific option
135
+ */
136
+ setPaneOption(paneId: string, option: string, value: string): void;
137
+ /**
138
+ * Bind a key
139
+ */
140
+ bindKey(key: string, command: string): void;
141
+ /**
142
+ * Unbind a key
143
+ */
144
+ unbindKey(table: string, key: string): void;
145
+ /**
146
+ * Bind a conditional key (does different things based on pane)
147
+ */
148
+ bindConditionalKey(table: string, key: string, condition: string, ifTrue: string, ifFalse: string): void;
149
+ /**
150
+ * Set up a key binding to toggle sidebar width
151
+ * Binds to Ctrl+G (no prefix needed, works from any pane)
152
+ */
153
+ bindSidebarToggle(sidebarPaneId: string, expandedWidth: number, collapsedWidth: number): void;
154
+ /**
155
+ * Disable scroll wheel for a specific pane, keep it for others
156
+ */
157
+ disableScrollForPane(paneId: string): void;
158
+ /**
159
+ * Get session name
160
+ */
161
+ getSessionName(): string;
162
+ }
163
+ //# sourceMappingURL=tmux.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tmux.d.ts","sourceRoot":"","sources":["../src/tmux.ts"],"names":[],"mappings":"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"}