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.
Files changed (39) hide show
  1. package/dist/ansi.d.ts +42 -0
  2. package/dist/ansi.d.ts.map +1 -0
  3. package/dist/ansi.js +53 -0
  4. package/dist/ansi.js.map +1 -0
  5. package/dist/constants.d.ts +67 -0
  6. package/dist/constants.d.ts.map +1 -0
  7. package/dist/constants.js +109 -0
  8. package/dist/constants.js.map +1 -0
  9. package/dist/sidebar/app.d.ts +2 -1
  10. package/dist/sidebar/app.d.ts.map +1 -1
  11. package/dist/sidebar/app.js +129 -205
  12. package/dist/sidebar/app.js.map +1 -1
  13. package/dist/sidebar/commands.d.ts +64 -0
  14. package/dist/sidebar/commands.d.ts.map +1 -0
  15. package/dist/sidebar/commands.js +180 -0
  16. package/dist/sidebar/commands.js.map +1 -0
  17. package/dist/sidebar/pane-orchestrator.d.ts +31 -0
  18. package/dist/sidebar/pane-orchestrator.d.ts.map +1 -0
  19. package/dist/sidebar/pane-orchestrator.js +185 -0
  20. package/dist/sidebar/pane-orchestrator.js.map +1 -0
  21. package/dist/sidebar/render.d.ts +2 -23
  22. package/dist/sidebar/render.d.ts.map +1 -1
  23. package/dist/sidebar/render.js +100 -129
  24. package/dist/sidebar/render.js.map +1 -1
  25. package/dist/sidebar/session-manager.d.ts +23 -0
  26. package/dist/sidebar/session-manager.d.ts.map +1 -0
  27. package/dist/sidebar/session-manager.js +122 -0
  28. package/dist/sidebar/session-manager.js.map +1 -0
  29. package/dist/sidebar/terminal-manager.d.ts +48 -0
  30. package/dist/sidebar/terminal-manager.d.ts.map +1 -0
  31. package/dist/sidebar/terminal-manager.js +223 -0
  32. package/dist/sidebar/terminal-manager.js.map +1 -0
  33. package/dist/terminal/bar-handler.js +6 -19
  34. package/dist/terminal/bar-handler.js.map +1 -1
  35. package/dist/terminal/bar-render.d.ts.map +1 -1
  36. package/dist/terminal/bar-render.js +15 -35
  37. package/dist/terminal/bar-render.js.map +1 -1
  38. package/package.json +1 -2
  39. 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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"}
@@ -3,29 +3,8 @@
3
3
  *
4
4
  * ANSI-based terminal rendering for the sidebar.
5
5
  */
6
- export declare const ansi: {
7
- clearScreen: string;
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;AASH,eAAO,MAAM,IAAI;;kBAGD,MAAM,OAAO,MAAM;;;;;;;;;;;;;;;;;;;;CA4BlC,CAAC;AAMF;;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,CA2EtD;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"}
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"}