claude-code-plus-plus 0.2.4 → 0.3.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/ansi.d.ts +42 -0
- package/dist/ansi.d.ts.map +1 -0
- package/dist/ansi.js +53 -0
- package/dist/ansi.js.map +1 -0
- package/dist/constants.d.ts +67 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +109 -0
- package/dist/constants.js.map +1 -0
- package/dist/sidebar/app.d.ts +2 -1
- package/dist/sidebar/app.d.ts.map +1 -1
- package/dist/sidebar/app.js +129 -205
- package/dist/sidebar/app.js.map +1 -1
- package/dist/sidebar/commands.d.ts +64 -0
- package/dist/sidebar/commands.d.ts.map +1 -0
- package/dist/sidebar/commands.js +180 -0
- package/dist/sidebar/commands.js.map +1 -0
- package/dist/sidebar/pane-orchestrator.d.ts +31 -0
- package/dist/sidebar/pane-orchestrator.d.ts.map +1 -0
- package/dist/sidebar/pane-orchestrator.js +185 -0
- package/dist/sidebar/pane-orchestrator.js.map +1 -0
- package/dist/sidebar/render.d.ts +2 -23
- package/dist/sidebar/render.d.ts.map +1 -1
- package/dist/sidebar/render.js +100 -129
- package/dist/sidebar/render.js.map +1 -1
- package/dist/sidebar/session-manager.d.ts +23 -0
- package/dist/sidebar/session-manager.d.ts.map +1 -0
- package/dist/sidebar/session-manager.js +122 -0
- package/dist/sidebar/session-manager.js.map +1 -0
- package/dist/sidebar/terminal-manager.d.ts +48 -0
- package/dist/sidebar/terminal-manager.d.ts.map +1 -0
- package/dist/sidebar/terminal-manager.js +223 -0
- package/dist/sidebar/terminal-manager.js.map +1 -0
- package/dist/terminal/bar-handler.js +6 -19
- package/dist/terminal/bar-handler.js.map +1 -1
- package/dist/terminal/bar-render.d.ts.map +1 -1
- package/dist/terminal/bar-render.js +15 -35
- package/dist/terminal/bar-render.js.map +1 -1
- package/package.json +1 -2
- package/assets/screenshot.png +0 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pane Orchestrator
|
|
4
|
+
*
|
|
5
|
+
* Handles tmux pane layout management including:
|
|
6
|
+
* - Breaking and joining panes for fullscreen modals
|
|
7
|
+
* - Enforcing sidebar width
|
|
8
|
+
* - Managing pane resize hooks
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.setupTerminalBarResize = setupTerminalBarResize;
|
|
45
|
+
exports.removeTerminalBarResize = removeTerminalBarResize;
|
|
46
|
+
exports.enforceSidebarWidth = enforceSidebarWidth;
|
|
47
|
+
exports.breakSessionPanes = breakSessionPanes;
|
|
48
|
+
exports.joinSessionPanes = joinSessionPanes;
|
|
49
|
+
const child_process_1 = require("child_process");
|
|
50
|
+
const fs_1 = require("fs");
|
|
51
|
+
const tmux = __importStar(require("../tmux"));
|
|
52
|
+
const constants_1 = require("../constants");
|
|
53
|
+
/**
|
|
54
|
+
* Set up terminal bar resize enforcement (hook + mouse binding).
|
|
55
|
+
* Uses a file-based script to avoid complex quoting issues.
|
|
56
|
+
*/
|
|
57
|
+
function setupTerminalBarResize(sessionName, claudePaneId, barPaneId, terminalBodyPaneId) {
|
|
58
|
+
const hookCmd = createResizeHookScript(claudePaneId, barPaneId, terminalBodyPaneId);
|
|
59
|
+
// Set up the after-resize-pane hook
|
|
60
|
+
tmux.setHook(sessionName, 'after-resize-pane', hookCmd);
|
|
61
|
+
// Also bind MouseDragEnd1Border to run the script when mouse drag ends
|
|
62
|
+
const safeName = `${claudePaneId}-${barPaneId}`.replace(/%/g, '');
|
|
63
|
+
const scriptPath = `${constants_1.RESIZE_HOOK_SCRIPT_PREFIX}${safeName}.sh`;
|
|
64
|
+
try {
|
|
65
|
+
(0, child_process_1.execSync)(`tmux bind-key -T root MouseDragEnd1Border run-shell "sh ${scriptPath}"`, { stdio: 'ignore' });
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Ignore errors - binding may already exist
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Remove terminal bar resize hook
|
|
73
|
+
*/
|
|
74
|
+
function removeTerminalBarResize(sessionName) {
|
|
75
|
+
try {
|
|
76
|
+
tmux.removeHook(sessionName, 'after-resize-pane');
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Hook may not exist
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Create a shell script for terminal bar resize hook and return the hook command.
|
|
84
|
+
*/
|
|
85
|
+
function createResizeHookScript(claudePaneId, barPaneId, terminalBodyPaneId) {
|
|
86
|
+
const safeName = `${claudePaneId}-${barPaneId}`.replace(/%/g, '');
|
|
87
|
+
const scriptPath = `${constants_1.RESIZE_HOOK_SCRIPT_PREFIX}${safeName}.sh`;
|
|
88
|
+
const scriptContent = `#!/bin/sh
|
|
89
|
+
# Terminal bar resize hook - keeps bar at ${constants_1.TERMINAL_BAR_HEIGHT} row(s)
|
|
90
|
+
# Lock check - prevent recursion
|
|
91
|
+
LOCK=$(tmux show-option -gqv @cpp-resizing 2>/dev/null)
|
|
92
|
+
[ -n "$LOCK" ] && exit 0
|
|
93
|
+
|
|
94
|
+
# Get current heights
|
|
95
|
+
BAR_H=$(tmux display-message -p -t "${barPaneId}" '#{pane_height}' 2>/dev/null)
|
|
96
|
+
[ -z "$BAR_H" ] && exit 0
|
|
97
|
+
[ "$BAR_H" -eq ${constants_1.TERMINAL_BAR_HEIGHT} ] && exit 0
|
|
98
|
+
|
|
99
|
+
CLAUDE_H=$(tmux display-message -p -t "${claudePaneId}" '#{pane_height}' 2>/dev/null)
|
|
100
|
+
BODY_H=$(tmux display-message -p -t "${terminalBodyPaneId}" '#{pane_height}' 2>/dev/null)
|
|
101
|
+
|
|
102
|
+
# Get previous heights (to detect which pane shrank)
|
|
103
|
+
PREV_CLAUDE=$(tmux show-option -gqv @cpp-prev-claude 2>/dev/null)
|
|
104
|
+
PREV_BODY=$(tmux show-option -gqv @cpp-prev-body 2>/dev/null)
|
|
105
|
+
|
|
106
|
+
# Acquire lock and set trap
|
|
107
|
+
tmux set-option -g @cpp-resizing 1
|
|
108
|
+
trap 'tmux set-option -gu @cpp-resizing 2>/dev/null' EXIT
|
|
109
|
+
|
|
110
|
+
# Calculate how much bar is over target
|
|
111
|
+
D=$((BAR_H - ${constants_1.TERMINAL_BAR_HEIGHT}))
|
|
112
|
+
|
|
113
|
+
# Determine which pane to grow based on which one shrank
|
|
114
|
+
if [ -n "$PREV_CLAUDE" ] && [ "$CLAUDE_H" -lt "$PREV_CLAUDE" ]; then
|
|
115
|
+
# Claude shrank (user dragged tabs ceiling UP) -> grow Terminal body
|
|
116
|
+
tmux resize-pane -t "${terminalBodyPaneId}" -U "$D" 2>/dev/null
|
|
117
|
+
elif [ -n "$PREV_BODY" ] && [ "$BODY_H" -lt "$PREV_BODY" ]; then
|
|
118
|
+
# Terminal body shrank (user dragged body ceiling DOWN) -> grow Claude
|
|
119
|
+
tmux resize-pane -t "${claudePaneId}" -D "$D" 2>/dev/null
|
|
120
|
+
else
|
|
121
|
+
# Fallback: just set bar height directly
|
|
122
|
+
:
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
# Set bar to exact height
|
|
126
|
+
tmux resize-pane -t "${barPaneId}" -y ${constants_1.TERMINAL_BAR_HEIGHT} 2>/dev/null
|
|
127
|
+
|
|
128
|
+
# Store FINAL heights (after adjustment) for next comparison
|
|
129
|
+
FINAL_CLAUDE=$(tmux display-message -p -t "${claudePaneId}" '#{pane_height}' 2>/dev/null)
|
|
130
|
+
FINAL_BODY=$(tmux display-message -p -t "${terminalBodyPaneId}" '#{pane_height}' 2>/dev/null)
|
|
131
|
+
tmux set-option -g @cpp-prev-claude "$FINAL_CLAUDE"
|
|
132
|
+
tmux set-option -g @cpp-prev-body "$FINAL_BODY"
|
|
133
|
+
`;
|
|
134
|
+
(0, fs_1.writeFileSync)(scriptPath, scriptContent, { mode: 0o755 });
|
|
135
|
+
return `"run-shell 'sh ${scriptPath}'"`;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Enforce sidebar width by resizing the pane
|
|
139
|
+
*/
|
|
140
|
+
function enforceSidebarWidth(sidebarPaneId) {
|
|
141
|
+
try {
|
|
142
|
+
tmux.resizePane(sidebarPaneId, constants_1.SIDEBAR_WIDTH);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// Pane may not exist yet
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Break session panes for fullscreen modal
|
|
150
|
+
*/
|
|
151
|
+
function breakSessionPanes(session) {
|
|
152
|
+
// Break active terminal first (if any)
|
|
153
|
+
if (session.terminals.length > 0) {
|
|
154
|
+
const activeTerminal = session.terminals[session.activeTerminalIndex];
|
|
155
|
+
if (activeTerminal) {
|
|
156
|
+
tmux.breakPane(activeTerminal.paneId);
|
|
157
|
+
}
|
|
158
|
+
// Break terminal bar
|
|
159
|
+
if (session.terminalBarPaneId) {
|
|
160
|
+
tmux.breakPane(session.terminalBarPaneId);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// Break Claude pane
|
|
164
|
+
tmux.breakPane(session.paneId);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Join session panes after fullscreen modal
|
|
168
|
+
*/
|
|
169
|
+
function joinSessionPanes(session, sidebarPaneId, sessionName) {
|
|
170
|
+
// Join Claude pane
|
|
171
|
+
tmux.joinPane(session.paneId, sidebarPaneId, true);
|
|
172
|
+
// Join terminal bar and active terminal if session has terminals
|
|
173
|
+
if (session.terminals.length > 0 && session.terminalBarPaneId) {
|
|
174
|
+
// Join terminal bar below Claude pane
|
|
175
|
+
tmux.joinPane(session.terminalBarPaneId, session.paneId, false);
|
|
176
|
+
// Join active terminal below terminal bar
|
|
177
|
+
const activeTerminal = session.terminals[session.activeTerminalIndex];
|
|
178
|
+
if (activeTerminal) {
|
|
179
|
+
tmux.joinPane(activeTerminal.paneId, session.terminalBarPaneId, false);
|
|
180
|
+
// Re-setup resize hook
|
|
181
|
+
setupTerminalBarResize(sessionName, session.paneId, session.terminalBarPaneId, activeTerminal.paneId);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=pane-orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pane-orchestrator.js","sourceRoot":"","sources":["../../src/sidebar/pane-orchestrator.ts"],"names":[],"mappings":"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"}
|
package/dist/sidebar/render.d.ts
CHANGED
|
@@ -3,29 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* ANSI-based terminal rendering for the sidebar.
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
moveTo: (row: number, col: number) => string;
|
|
9
|
-
hideCursor: string;
|
|
10
|
-
showCursor: string;
|
|
11
|
-
reset: string;
|
|
12
|
-
bold: string;
|
|
13
|
-
dim: string;
|
|
14
|
-
inverse: string;
|
|
15
|
-
fg: {
|
|
16
|
-
black: string;
|
|
17
|
-
red: string;
|
|
18
|
-
green: string;
|
|
19
|
-
yellow: string;
|
|
20
|
-
blue: string;
|
|
21
|
-
magenta: string;
|
|
22
|
-
cyan: string;
|
|
23
|
-
white: string;
|
|
24
|
-
gray: string;
|
|
25
|
-
};
|
|
26
|
-
enableMouse: string;
|
|
27
|
-
disableMouse: string;
|
|
28
|
-
};
|
|
6
|
+
import { ansi } from '../ansi';
|
|
7
|
+
export { ansi };
|
|
29
8
|
/**
|
|
30
9
|
* Truncate string to fit width
|
|
31
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/sidebar/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/sidebar/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAgB/B,OAAO,EAAE,IAAI,EAAE,CAAC;AAMhB;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAY,GAAG,MAAM,CAG1E;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKzD;AAMD,OAAO,KAAK,EAAE,YAAY,EAAqB,QAAQ,EAAgB,MAAM,UAAU,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,EAAE,CA0B9D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CA4EtD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAqEpF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAsG1G;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAyEpH;AAuBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAgDrF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAW5D"}
|