claude-code-plus-plus 0.2.0 → 0.2.1
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/cli/commands/index.js +5 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/start.js +4 -1
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/index.js +18 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/parser.js +8 -3
- package/dist/cli/parser.js.map +1 -1
- package/dist/cli/validators.js +30 -20
- package/dist/cli/validators.js.map +1 -1
- package/dist/config/defaults.js +10 -5
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/index.js +24 -4
- package/dist/config/index.js.map +1 -1
- package/dist/config/loader.js +29 -20
- package/dist/config/loader.js.map +1 -1
- package/dist/config/paths.js +30 -21
- package/dist/config/paths.js.map +1 -1
- package/dist/config/schema.js +6 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/git/index.js +6 -1
- package/dist/git/index.js.map +1 -1
- package/dist/git/worktree.js +18 -13
- package/dist/git/worktree.js.map +1 -1
- package/dist/index.js +41 -6
- package/dist/index.js.map +1 -1
- package/dist/launcher/index.d.ts.map +1 -1
- package/dist/launcher/index.js +60 -26
- package/dist/launcher/index.js.map +1 -1
- package/dist/platform/clipboard.js +22 -15
- package/dist/platform/clipboard.js.map +1 -1
- package/dist/platform/detector.js +37 -22
- package/dist/platform/detector.js.map +1 -1
- package/dist/platform/index.js +42 -4
- package/dist/platform/index.js.map +1 -1
- package/dist/platform/paths.js +61 -48
- package/dist/platform/paths.js.map +1 -1
- package/dist/platform/shell.js +35 -27
- package/dist/platform/shell.js.map +1 -1
- package/dist/sidebar/app.d.ts.map +1 -1
- package/dist/sidebar/app.js +73 -39
- package/dist/sidebar/app.js.map +1 -1
- package/dist/sidebar/index.js +4 -2
- package/dist/sidebar/index.js.map +1 -1
- package/dist/sidebar/input.js +12 -5
- package/dist/sidebar/input.js.map +1 -1
- package/dist/sidebar/render.js +102 -90
- package/dist/sidebar/render.js.map +1 -1
- package/dist/terminal/bar-handler.js +9 -7
- package/dist/terminal/bar-handler.js.map +1 -1
- package/dist/terminal/bar-render.js +6 -2
- package/dist/terminal/bar-render.js.map +1 -1
- package/dist/terminal/index.js +6 -1
- package/dist/terminal/index.js.map +1 -1
- package/dist/tmux/commands.js +18 -11
- package/dist/tmux/commands.js.map +1 -1
- package/dist/tmux/index.js +33 -7
- package/dist/tmux/index.js.map +1 -1
- package/dist/tmux/pane.js +76 -51
- package/dist/tmux/pane.js.map +1 -1
- package/dist/types.js +4 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/async.js +16 -7
- package/dist/utils/async.js.map +1 -1
- package/dist/utils/errors.js +31 -14
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/id.js +19 -10
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/index.js +65 -6
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.js +17 -10
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/string.js +22 -10
- package/dist/utils/string.js.map +1 -1
- package/dist/utils/validation.js +28 -13
- package/dist/utils/validation.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Terminal Bar Rendering
|
|
3
4
|
*
|
|
4
5
|
* Pure functions for rendering the terminal tab bar with ANSI codes.
|
|
5
6
|
* The tab bar is a single row showing terminal tabs with keyboard hints on the right.
|
|
6
7
|
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.renderTerminalBar = renderTerminalBar;
|
|
10
|
+
exports.findClickedTab = findClickedTab;
|
|
7
11
|
// ============================================================================
|
|
8
12
|
// ANSI Escape Codes
|
|
9
13
|
// ============================================================================
|
|
@@ -37,7 +41,7 @@ const ansi = {
|
|
|
37
41
|
* @param width - Available width in columns
|
|
38
42
|
* @returns Object with ANSI output string and tab positions for click handling
|
|
39
43
|
*/
|
|
40
|
-
|
|
44
|
+
function renderTerminalBar(terminals, activeIndex, width) {
|
|
41
45
|
const tabPositions = [];
|
|
42
46
|
// Hints shown on the right
|
|
43
47
|
const hints = '1-9:switch n:new d:del';
|
|
@@ -111,7 +115,7 @@ export function renderTerminalBar(terminals, activeIndex, width) {
|
|
|
111
115
|
* @param tabPositions - Array of tab positions
|
|
112
116
|
* @returns Tab index, -1 for new terminal button, or null if no tab clicked
|
|
113
117
|
*/
|
|
114
|
-
|
|
118
|
+
function findClickedTab(col, tabPositions) {
|
|
115
119
|
for (const tab of tabPositions) {
|
|
116
120
|
if (col >= tab.startCol && col <= tab.endCol) {
|
|
117
121
|
return tab.index;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bar-render.js","sourceRoot":"","sources":["../../src/terminal/bar-render.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"bar-render.js","sourceRoot":"","sources":["../../src/terminal/bar-render.ts"],"names":[],"mappings":"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"}
|
package/dist/terminal/index.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Terminal Module
|
|
3
4
|
*
|
|
4
5
|
* Provides terminal management functionality for sessions.
|
|
5
6
|
* Each session can have multiple shell terminals with a tab bar UI.
|
|
6
7
|
*/
|
|
7
|
-
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.findClickedTab = exports.renderTerminalBar = void 0;
|
|
10
|
+
var bar_render_1 = require("./bar-render");
|
|
11
|
+
Object.defineProperty(exports, "renderTerminalBar", { enumerable: true, get: function () { return bar_render_1.renderTerminalBar; } });
|
|
12
|
+
Object.defineProperty(exports, "findClickedTab", { enumerable: true, get: function () { return bar_render_1.findClickedTab; } });
|
|
8
13
|
// Note: bar-handler.ts is a standalone executable, not imported here
|
|
9
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/terminal/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/terminal/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,2CAIsB;AAHpB,+GAAA,iBAAiB,OAAA;AACjB,4GAAA,cAAc,OAAA;AAIhB,qEAAqE"}
|
package/dist/tmux/commands.js
CHANGED
|
@@ -1,14 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Low-level tmux command execution
|
|
3
4
|
*/
|
|
4
|
-
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.exec = exec;
|
|
7
|
+
exports.run = run;
|
|
8
|
+
exports.check = check;
|
|
9
|
+
exports.isAvailable = isAvailable;
|
|
10
|
+
exports.attach = attach;
|
|
11
|
+
const child_process_1 = require("child_process");
|
|
5
12
|
/**
|
|
6
13
|
* Execute a tmux command and return output
|
|
7
14
|
*/
|
|
8
|
-
|
|
15
|
+
function exec(args, options = {}) {
|
|
9
16
|
const cmd = `tmux ${args.join(' ')}`;
|
|
10
17
|
try {
|
|
11
|
-
const result = execSync(cmd, {
|
|
18
|
+
const result = (0, child_process_1.execSync)(cmd, {
|
|
12
19
|
encoding: 'utf-8',
|
|
13
20
|
stdio: options.silent ? ['pipe', 'pipe', 'ignore'] : ['pipe', 'pipe', 'pipe'],
|
|
14
21
|
});
|
|
@@ -23,9 +30,9 @@ export function exec(args, options = {}) {
|
|
|
23
30
|
/**
|
|
24
31
|
* Execute a tmux command silently (ignore errors)
|
|
25
32
|
*/
|
|
26
|
-
|
|
33
|
+
function run(args) {
|
|
27
34
|
try {
|
|
28
|
-
execSync(`tmux ${args.join(' ')}`, { stdio: 'ignore' });
|
|
35
|
+
(0, child_process_1.execSync)(`tmux ${args.join(' ')}`, { stdio: 'ignore' });
|
|
29
36
|
}
|
|
30
37
|
catch {
|
|
31
38
|
// Ignore errors
|
|
@@ -34,9 +41,9 @@ export function run(args) {
|
|
|
34
41
|
/**
|
|
35
42
|
* Check if a tmux command succeeds
|
|
36
43
|
*/
|
|
37
|
-
|
|
44
|
+
function check(args) {
|
|
38
45
|
try {
|
|
39
|
-
execSync(`tmux ${args.join(' ')} 2>/dev/null`, { stdio: 'ignore' });
|
|
46
|
+
(0, child_process_1.execSync)(`tmux ${args.join(' ')} 2>/dev/null`, { stdio: 'ignore' });
|
|
40
47
|
return true;
|
|
41
48
|
}
|
|
42
49
|
catch {
|
|
@@ -46,9 +53,9 @@ export function check(args) {
|
|
|
46
53
|
/**
|
|
47
54
|
* Check if tmux is available
|
|
48
55
|
*/
|
|
49
|
-
|
|
56
|
+
function isAvailable() {
|
|
50
57
|
try {
|
|
51
|
-
execSync('which tmux', { stdio: 'ignore' });
|
|
58
|
+
(0, child_process_1.execSync)('which tmux', { stdio: 'ignore' });
|
|
52
59
|
return true;
|
|
53
60
|
}
|
|
54
61
|
catch {
|
|
@@ -58,8 +65,8 @@ export function isAvailable() {
|
|
|
58
65
|
/**
|
|
59
66
|
* Attach to a session (blocks until detach)
|
|
60
67
|
*/
|
|
61
|
-
|
|
62
|
-
const result = spawnSync('tmux', ['attach-session', '-t', sessionName], {
|
|
68
|
+
function attach(sessionName) {
|
|
69
|
+
const result = (0, child_process_1.spawnSync)('tmux', ['attach-session', '-t', sessionName], {
|
|
63
70
|
stdio: 'inherit',
|
|
64
71
|
});
|
|
65
72
|
return result.status || 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/tmux/commands.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/tmux/commands.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAOH,oBAYC;AAKD,kBAMC;AAKD,sBAOC;AAKD,kCAOC;AAKD,wBAKC;AA9DD,iDAAoD;AAEpD;;GAEG;AACH,SAAgB,IAAI,CAAC,IAAc,EAAE,UAAgC,EAAE;IACrE,MAAM,GAAG,GAAG,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,GAAG,EAAE;YAC3B,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAC9E,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC9B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,GAAG,CAAC,IAAc;IAChC,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,KAAK,CAAC,IAAc;IAClC,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW;IACzB,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,MAAM,CAAC,WAAmB;IACxC,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE;QACtE,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
package/dist/tmux/index.js
CHANGED
|
@@ -1,16 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Tmux Module
|
|
3
4
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.removeHook = exports.setHook = exports.runShell = exports.bindKey = exports.setPaneOption = exports.setOption = exports.getPaneDimensions = exports.joinPane = exports.breakPane = exports.swapPanes = exports.killPane = exports.resizePane = exports.selectPane = exports.runInPane = exports.sendControlKey = exports.sendKeys = exports.listPanes = exports.splitVertical = exports.splitHorizontal = exports.detachClient = exports.killSession = exports.createSession = exports.sessionExists = exports.check = exports.run = exports.exec = exports.attach = exports.isAvailable = void 0;
|
|
7
|
+
var commands_1 = require("./commands");
|
|
8
|
+
Object.defineProperty(exports, "isAvailable", { enumerable: true, get: function () { return commands_1.isAvailable; } });
|
|
9
|
+
Object.defineProperty(exports, "attach", { enumerable: true, get: function () { return commands_1.attach; } });
|
|
10
|
+
Object.defineProperty(exports, "exec", { enumerable: true, get: function () { return commands_1.exec; } });
|
|
11
|
+
Object.defineProperty(exports, "run", { enumerable: true, get: function () { return commands_1.run; } });
|
|
12
|
+
Object.defineProperty(exports, "check", { enumerable: true, get: function () { return commands_1.check; } });
|
|
13
|
+
var pane_1 = require("./pane");
|
|
6
14
|
// Session
|
|
7
|
-
|
|
15
|
+
Object.defineProperty(exports, "sessionExists", { enumerable: true, get: function () { return pane_1.sessionExists; } });
|
|
16
|
+
Object.defineProperty(exports, "createSession", { enumerable: true, get: function () { return pane_1.createSession; } });
|
|
17
|
+
Object.defineProperty(exports, "killSession", { enumerable: true, get: function () { return pane_1.killSession; } });
|
|
18
|
+
Object.defineProperty(exports, "detachClient", { enumerable: true, get: function () { return pane_1.detachClient; } });
|
|
8
19
|
// Panes
|
|
9
|
-
|
|
20
|
+
Object.defineProperty(exports, "splitHorizontal", { enumerable: true, get: function () { return pane_1.splitHorizontal; } });
|
|
21
|
+
Object.defineProperty(exports, "splitVertical", { enumerable: true, get: function () { return pane_1.splitVertical; } });
|
|
22
|
+
Object.defineProperty(exports, "listPanes", { enumerable: true, get: function () { return pane_1.listPanes; } });
|
|
23
|
+
Object.defineProperty(exports, "sendKeys", { enumerable: true, get: function () { return pane_1.sendKeys; } });
|
|
24
|
+
Object.defineProperty(exports, "sendControlKey", { enumerable: true, get: function () { return pane_1.sendControlKey; } });
|
|
25
|
+
Object.defineProperty(exports, "runInPane", { enumerable: true, get: function () { return pane_1.runInPane; } });
|
|
26
|
+
Object.defineProperty(exports, "selectPane", { enumerable: true, get: function () { return pane_1.selectPane; } });
|
|
27
|
+
Object.defineProperty(exports, "resizePane", { enumerable: true, get: function () { return pane_1.resizePane; } });
|
|
28
|
+
Object.defineProperty(exports, "killPane", { enumerable: true, get: function () { return pane_1.killPane; } });
|
|
29
|
+
Object.defineProperty(exports, "swapPanes", { enumerable: true, get: function () { return pane_1.swapPanes; } });
|
|
30
|
+
Object.defineProperty(exports, "breakPane", { enumerable: true, get: function () { return pane_1.breakPane; } });
|
|
31
|
+
Object.defineProperty(exports, "joinPane", { enumerable: true, get: function () { return pane_1.joinPane; } });
|
|
32
|
+
Object.defineProperty(exports, "getPaneDimensions", { enumerable: true, get: function () { return pane_1.getPaneDimensions; } });
|
|
10
33
|
// Options
|
|
11
|
-
setOption,
|
|
34
|
+
Object.defineProperty(exports, "setOption", { enumerable: true, get: function () { return pane_1.setOption; } });
|
|
35
|
+
Object.defineProperty(exports, "setPaneOption", { enumerable: true, get: function () { return pane_1.setPaneOption; } });
|
|
12
36
|
// Keys
|
|
13
|
-
bindKey,
|
|
37
|
+
Object.defineProperty(exports, "bindKey", { enumerable: true, get: function () { return pane_1.bindKey; } });
|
|
38
|
+
Object.defineProperty(exports, "runShell", { enumerable: true, get: function () { return pane_1.runShell; } });
|
|
14
39
|
// Hooks
|
|
15
|
-
setHook,
|
|
40
|
+
Object.defineProperty(exports, "setHook", { enumerable: true, get: function () { return pane_1.setHook; } });
|
|
41
|
+
Object.defineProperty(exports, "removeHook", { enumerable: true, get: function () { return pane_1.removeHook; } });
|
|
16
42
|
//# sourceMappingURL=index.js.map
|
package/dist/tmux/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tmux/index.ts"],"names":[],"mappings":"AAAA;;GAEG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tmux/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uCAAmE;AAA1D,uGAAA,WAAW,OAAA;AAAE,kGAAA,MAAM,OAAA;AAAE,gGAAA,IAAI,OAAA;AAAE,+FAAA,GAAG,OAAA;AAAE,iGAAA,KAAK,OAAA;AAC9C,+BA+BgB;AA5Bd,UAAU;AACV,qGAAA,aAAa,OAAA;AACb,qGAAA,aAAa,OAAA;AACb,mGAAA,WAAW,OAAA;AACX,oGAAA,YAAY,OAAA;AACZ,QAAQ;AACR,uGAAA,eAAe,OAAA;AACf,qGAAA,aAAa,OAAA;AACb,iGAAA,SAAS,OAAA;AACT,gGAAA,QAAQ,OAAA;AACR,sGAAA,cAAc,OAAA;AACd,iGAAA,SAAS,OAAA;AACT,kGAAA,UAAU,OAAA;AACV,kGAAA,UAAU,OAAA;AACV,gGAAA,QAAQ,OAAA;AACR,iGAAA,SAAS,OAAA;AACT,iGAAA,SAAS,OAAA;AACT,gGAAA,QAAQ,OAAA;AACR,yGAAA,iBAAiB,OAAA;AACjB,UAAU;AACV,iGAAA,SAAS,OAAA;AACT,qGAAA,aAAa,OAAA;AACb,OAAO;AACP,+FAAA,OAAO,OAAA;AACP,gGAAA,QAAQ,OAAA;AACR,QAAQ;AACR,+FAAA,OAAO,OAAA;AACP,kGAAA,UAAU,OAAA"}
|
package/dist/tmux/pane.js
CHANGED
|
@@ -1,34 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Tmux pane and session operations
|
|
3
4
|
*/
|
|
4
|
-
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.sessionExists = sessionExists;
|
|
7
|
+
exports.createSession = createSession;
|
|
8
|
+
exports.killSession = killSession;
|
|
9
|
+
exports.detachClient = detachClient;
|
|
10
|
+
exports.splitHorizontal = splitHorizontal;
|
|
11
|
+
exports.splitVertical = splitVertical;
|
|
12
|
+
exports.listPanes = listPanes;
|
|
13
|
+
exports.sendKeys = sendKeys;
|
|
14
|
+
exports.sendControlKey = sendControlKey;
|
|
15
|
+
exports.runInPane = runInPane;
|
|
16
|
+
exports.selectPane = selectPane;
|
|
17
|
+
exports.resizePane = resizePane;
|
|
18
|
+
exports.killPane = killPane;
|
|
19
|
+
exports.swapPanes = swapPanes;
|
|
20
|
+
exports.breakPane = breakPane;
|
|
21
|
+
exports.getPaneDimensions = getPaneDimensions;
|
|
22
|
+
exports.joinPane = joinPane;
|
|
23
|
+
exports.setOption = setOption;
|
|
24
|
+
exports.setPaneOption = setPaneOption;
|
|
25
|
+
exports.bindKey = bindKey;
|
|
26
|
+
exports.runShell = runShell;
|
|
27
|
+
exports.setHook = setHook;
|
|
28
|
+
exports.removeHook = removeHook;
|
|
29
|
+
const commands_1 = require("./commands");
|
|
5
30
|
// ============================================================================
|
|
6
31
|
// Session Operations
|
|
7
32
|
// ============================================================================
|
|
8
33
|
/**
|
|
9
34
|
* Check if a session exists
|
|
10
35
|
*/
|
|
11
|
-
|
|
12
|
-
return check(['has-session', '-t', name]);
|
|
36
|
+
function sessionExists(name) {
|
|
37
|
+
return (0, commands_1.check)(['has-session', '-t', name]);
|
|
13
38
|
}
|
|
14
39
|
/**
|
|
15
40
|
* Create a new detached session
|
|
16
41
|
*/
|
|
17
|
-
|
|
18
|
-
run(['new-session', '-d', '-s', name, '-c', `"${cwd}"`]);
|
|
19
|
-
return exec(['display-message', '-p', '-t', name, "'#{pane_id}'"]);
|
|
42
|
+
function createSession(name, cwd) {
|
|
43
|
+
(0, commands_1.run)(['new-session', '-d', '-s', name, '-c', `"${cwd}"`]);
|
|
44
|
+
return (0, commands_1.exec)(['display-message', '-p', '-t', name, "'#{pane_id}'"]);
|
|
20
45
|
}
|
|
21
46
|
/**
|
|
22
47
|
* Kill a session
|
|
23
48
|
*/
|
|
24
|
-
|
|
25
|
-
run(['kill-session', '-t', name]);
|
|
49
|
+
function killSession(name) {
|
|
50
|
+
(0, commands_1.run)(['kill-session', '-t', name]);
|
|
26
51
|
}
|
|
27
52
|
/**
|
|
28
53
|
* Detach current client from session
|
|
29
54
|
*/
|
|
30
|
-
|
|
31
|
-
run(['detach-client']);
|
|
55
|
+
function detachClient() {
|
|
56
|
+
(0, commands_1.run)(['detach-client']);
|
|
32
57
|
}
|
|
33
58
|
// ============================================================================
|
|
34
59
|
// Pane Operations
|
|
@@ -37,28 +62,28 @@ export function detachClient() {
|
|
|
37
62
|
* Split pane horizontally (creates pane to the right)
|
|
38
63
|
* @param percentage Width percentage for the LEFT pane
|
|
39
64
|
*/
|
|
40
|
-
|
|
65
|
+
function splitHorizontal(sessionName, percentage, cwd) {
|
|
41
66
|
const args = ['split-window', '-h', '-t', sessionName, '-p', String(100 - percentage)];
|
|
42
67
|
if (cwd)
|
|
43
68
|
args.push('-c', `"${cwd}"`);
|
|
44
|
-
run(args);
|
|
45
|
-
return exec(['display-message', '-p', '-t', sessionName, "'#{pane_id}'"]);
|
|
69
|
+
(0, commands_1.run)(args);
|
|
70
|
+
return (0, commands_1.exec)(['display-message', '-p', '-t', sessionName, "'#{pane_id}'"]);
|
|
46
71
|
}
|
|
47
72
|
/**
|
|
48
73
|
* Split pane vertically (creates pane below)
|
|
49
74
|
*/
|
|
50
|
-
|
|
75
|
+
function splitVertical(sessionName, percentage, cwd) {
|
|
51
76
|
const args = ['split-window', '-v', '-t', sessionName, '-p', String(100 - percentage)];
|
|
52
77
|
if (cwd)
|
|
53
78
|
args.push('-c', `"${cwd}"`);
|
|
54
|
-
run(args);
|
|
55
|
-
return exec(['display-message', '-p', '-t', sessionName, "'#{pane_id}'"]);
|
|
79
|
+
(0, commands_1.run)(args);
|
|
80
|
+
return (0, commands_1.exec)(['display-message', '-p', '-t', sessionName, "'#{pane_id}'"]);
|
|
56
81
|
}
|
|
57
82
|
/**
|
|
58
83
|
* List panes in a session
|
|
59
84
|
*/
|
|
60
|
-
|
|
61
|
-
const output = exec(['list-panes', '-t', sessionName, '-F', "'#{pane_id},#{pane_width},#{pane_height},#{pane_active}'"], { silent: true });
|
|
85
|
+
function listPanes(sessionName) {
|
|
86
|
+
const output = (0, commands_1.exec)(['list-panes', '-t', sessionName, '-F', "'#{pane_id},#{pane_width},#{pane_height},#{pane_active}'"], { silent: true });
|
|
62
87
|
if (!output)
|
|
63
88
|
return [];
|
|
64
89
|
return output.split('\n').filter(Boolean).map((line) => {
|
|
@@ -74,69 +99,69 @@ export function listPanes(sessionName) {
|
|
|
74
99
|
/**
|
|
75
100
|
* Send keys to a pane
|
|
76
101
|
*/
|
|
77
|
-
|
|
102
|
+
function sendKeys(paneId, text, enter = true) {
|
|
78
103
|
// Escape single quotes
|
|
79
104
|
const escaped = text.replace(/'/g, "'\\''");
|
|
80
|
-
run(['send-keys', '-t', paneId, '-l', `'${escaped}'`]);
|
|
105
|
+
(0, commands_1.run)(['send-keys', '-t', paneId, '-l', `'${escaped}'`]);
|
|
81
106
|
if (enter) {
|
|
82
|
-
run(['send-keys', '-t', paneId, 'Enter']);
|
|
107
|
+
(0, commands_1.run)(['send-keys', '-t', paneId, 'Enter']);
|
|
83
108
|
}
|
|
84
109
|
}
|
|
85
110
|
/**
|
|
86
111
|
* Send a control key (e.g., C-c, Enter, Escape)
|
|
87
112
|
*/
|
|
88
|
-
|
|
89
|
-
run(['send-keys', '-t', paneId, key]);
|
|
113
|
+
function sendControlKey(paneId, key) {
|
|
114
|
+
(0, commands_1.run)(['send-keys', '-t', paneId, key]);
|
|
90
115
|
}
|
|
91
116
|
/**
|
|
92
117
|
* Run a command in a pane
|
|
93
118
|
*/
|
|
94
|
-
|
|
119
|
+
function runInPane(paneId, command) {
|
|
95
120
|
sendKeys(paneId, command, true);
|
|
96
121
|
}
|
|
97
122
|
/**
|
|
98
123
|
* Select (focus) a pane
|
|
99
124
|
*/
|
|
100
|
-
|
|
101
|
-
run(['select-pane', '-t', paneId]);
|
|
125
|
+
function selectPane(paneId) {
|
|
126
|
+
(0, commands_1.run)(['select-pane', '-t', paneId]);
|
|
102
127
|
}
|
|
103
128
|
/**
|
|
104
129
|
* Resize a pane
|
|
105
130
|
*/
|
|
106
|
-
|
|
131
|
+
function resizePane(paneId, width, height) {
|
|
107
132
|
if (width !== undefined) {
|
|
108
|
-
run(['resize-pane', '-t', paneId, '-x', String(width)]);
|
|
133
|
+
(0, commands_1.run)(['resize-pane', '-t', paneId, '-x', String(width)]);
|
|
109
134
|
}
|
|
110
135
|
if (height !== undefined) {
|
|
111
|
-
run(['resize-pane', '-t', paneId, '-y', String(height)]);
|
|
136
|
+
(0, commands_1.run)(['resize-pane', '-t', paneId, '-y', String(height)]);
|
|
112
137
|
}
|
|
113
138
|
}
|
|
114
139
|
/**
|
|
115
140
|
* Kill a pane
|
|
116
141
|
*/
|
|
117
|
-
|
|
118
|
-
run(['kill-pane', '-t', paneId]);
|
|
142
|
+
function killPane(paneId) {
|
|
143
|
+
(0, commands_1.run)(['kill-pane', '-t', paneId]);
|
|
119
144
|
}
|
|
120
145
|
/**
|
|
121
146
|
* Swap two panes
|
|
122
147
|
*/
|
|
123
|
-
|
|
124
|
-
run(['swap-pane', '-s', paneId1, '-t', paneId2]);
|
|
148
|
+
function swapPanes(paneId1, paneId2) {
|
|
149
|
+
(0, commands_1.run)(['swap-pane', '-s', paneId1, '-t', paneId2]);
|
|
125
150
|
}
|
|
126
151
|
/**
|
|
127
152
|
* Break a pane to background window
|
|
128
153
|
*/
|
|
129
|
-
|
|
154
|
+
function breakPane(paneId, windowName) {
|
|
130
155
|
const args = ['break-pane', '-d', '-s', paneId];
|
|
131
156
|
if (windowName)
|
|
132
157
|
args.push('-n', `"${windowName}"`);
|
|
133
|
-
run(args);
|
|
158
|
+
(0, commands_1.run)(args);
|
|
134
159
|
}
|
|
135
160
|
/**
|
|
136
161
|
* Get current pane dimensions
|
|
137
162
|
*/
|
|
138
|
-
|
|
139
|
-
const output = exec(['display-message', '-p', '-t', paneId, "'#{pane_width},#{pane_height}'"], { silent: true });
|
|
163
|
+
function getPaneDimensions(paneId) {
|
|
164
|
+
const output = (0, commands_1.exec)(['display-message', '-p', '-t', paneId, "'#{pane_width},#{pane_height}'"], { silent: true });
|
|
140
165
|
if (!output) {
|
|
141
166
|
return { width: 80, height: 24 }; // fallback
|
|
142
167
|
}
|
|
@@ -146,9 +171,9 @@ export function getPaneDimensions(paneId) {
|
|
|
146
171
|
/**
|
|
147
172
|
* Join a pane from background
|
|
148
173
|
*/
|
|
149
|
-
|
|
174
|
+
function joinPane(sourcePaneId, targetPaneId, horizontal = true) {
|
|
150
175
|
const dir = horizontal ? '-h' : '-v';
|
|
151
|
-
run(['join-pane', dir, '-s', sourcePaneId, '-t', targetPaneId]);
|
|
176
|
+
(0, commands_1.run)(['join-pane', dir, '-s', sourcePaneId, '-t', targetPaneId]);
|
|
152
177
|
}
|
|
153
178
|
// ============================================================================
|
|
154
179
|
// Options
|
|
@@ -156,17 +181,17 @@ export function joinPane(sourcePaneId, targetPaneId, horizontal = true) {
|
|
|
156
181
|
/**
|
|
157
182
|
* Set a tmux option
|
|
158
183
|
*/
|
|
159
|
-
|
|
184
|
+
function setOption(option, value, global = false) {
|
|
160
185
|
const args = global
|
|
161
186
|
? ['set-option', '-g', option, value]
|
|
162
187
|
: ['set-option', option, value];
|
|
163
|
-
run(args);
|
|
188
|
+
(0, commands_1.run)(args);
|
|
164
189
|
}
|
|
165
190
|
/**
|
|
166
191
|
* Set a pane-specific option
|
|
167
192
|
*/
|
|
168
|
-
|
|
169
|
-
run(['set-option', '-p', '-t', paneId, option, value]);
|
|
193
|
+
function setPaneOption(paneId, option, value) {
|
|
194
|
+
(0, commands_1.run)(['set-option', '-p', '-t', paneId, option, value]);
|
|
170
195
|
}
|
|
171
196
|
// ============================================================================
|
|
172
197
|
// Key Bindings
|
|
@@ -174,14 +199,14 @@ export function setPaneOption(paneId, option, value) {
|
|
|
174
199
|
/**
|
|
175
200
|
* Bind a key in root table
|
|
176
201
|
*/
|
|
177
|
-
|
|
178
|
-
run(['bind-key', '-T', 'root', key, ...command.split(' ')]);
|
|
202
|
+
function bindKey(key, command) {
|
|
203
|
+
(0, commands_1.run)(['bind-key', '-T', 'root', key, ...command.split(' ')]);
|
|
179
204
|
}
|
|
180
205
|
/**
|
|
181
206
|
* Run a shell command via tmux
|
|
182
207
|
*/
|
|
183
|
-
|
|
184
|
-
run(['run-shell', '-b', `'${command}'`]);
|
|
208
|
+
function runShell(command) {
|
|
209
|
+
(0, commands_1.run)(['run-shell', '-b', `'${command}'`]);
|
|
185
210
|
}
|
|
186
211
|
// ============================================================================
|
|
187
212
|
// Hooks
|
|
@@ -192,15 +217,15 @@ export function runShell(command) {
|
|
|
192
217
|
* @param hookName - Hook name (e.g., 'after-resize-pane', 'client-attached')
|
|
193
218
|
* @param command - Command to run when hook fires (caller must handle quoting)
|
|
194
219
|
*/
|
|
195
|
-
|
|
196
|
-
run(['set-hook', '-t', sessionName, hookName, command]);
|
|
220
|
+
function setHook(sessionName, hookName, command) {
|
|
221
|
+
(0, commands_1.run)(['set-hook', '-t', sessionName, hookName, command]);
|
|
197
222
|
}
|
|
198
223
|
/**
|
|
199
224
|
* Remove a tmux hook from a session
|
|
200
225
|
* @param sessionName - Target session
|
|
201
226
|
* @param hookName - Hook name to remove
|
|
202
227
|
*/
|
|
203
|
-
|
|
204
|
-
run(['set-hook', '-u', '-t', sessionName, hookName]);
|
|
228
|
+
function removeHook(sessionName, hookName) {
|
|
229
|
+
(0, commands_1.run)(['set-hook', '-u', '-t', sessionName, hookName]);
|
|
205
230
|
}
|
|
206
231
|
//# sourceMappingURL=pane.js.map
|
package/dist/tmux/pane.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pane.js","sourceRoot":"","sources":["../../src/tmux/pane.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"pane.js","sourceRoot":"","sources":["../../src/tmux/pane.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Core Type Definitions
|
|
3
4
|
*/
|
|
4
|
-
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DEFAULT_CONFIG = void 0;
|
|
7
|
+
exports.DEFAULT_CONFIG = {
|
|
5
8
|
claudeCommand: 'claude',
|
|
6
9
|
skipPermissions: true,
|
|
7
10
|
worktreesDir: null,
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAkHU,QAAA,cAAc,GAAc;IACvC,aAAa,EAAE,QAAQ;IACvB,eAAe,EAAE,IAAI;IACrB,YAAY,EAAE,IAAI;CACnB,CAAC"}
|
package/dist/utils/async.js
CHANGED
|
@@ -1,14 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Async Utilities
|
|
3
4
|
*
|
|
4
5
|
* Helper functions for asynchronous operations.
|
|
5
6
|
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.delay = delay;
|
|
9
|
+
exports.debounce = debounce;
|
|
10
|
+
exports.throttle = throttle;
|
|
11
|
+
exports.retry = retry;
|
|
12
|
+
exports.withTimeout = withTimeout;
|
|
13
|
+
exports.mapWithConcurrency = mapWithConcurrency;
|
|
14
|
+
exports.createDeferred = createDeferred;
|
|
6
15
|
/**
|
|
7
16
|
* Delay execution for a specified number of milliseconds
|
|
8
17
|
* @param ms - Milliseconds to wait
|
|
9
18
|
* @returns Promise that resolves after the delay
|
|
10
19
|
*/
|
|
11
|
-
|
|
20
|
+
function delay(ms) {
|
|
12
21
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
13
22
|
}
|
|
14
23
|
/**
|
|
@@ -17,7 +26,7 @@ export function delay(ms) {
|
|
|
17
26
|
* @param ms - Debounce delay in milliseconds
|
|
18
27
|
* @returns Debounced function
|
|
19
28
|
*/
|
|
20
|
-
|
|
29
|
+
function debounce(fn, ms) {
|
|
21
30
|
let timeoutId = null;
|
|
22
31
|
return (...args) => {
|
|
23
32
|
if (timeoutId !== null) {
|
|
@@ -35,7 +44,7 @@ export function debounce(fn, ms) {
|
|
|
35
44
|
* @param ms - Throttle interval in milliseconds
|
|
36
45
|
* @returns Throttled function
|
|
37
46
|
*/
|
|
38
|
-
|
|
47
|
+
function throttle(fn, ms) {
|
|
39
48
|
let lastCall = 0;
|
|
40
49
|
let timeoutId = null;
|
|
41
50
|
return (...args) => {
|
|
@@ -60,7 +69,7 @@ export function throttle(fn, ms) {
|
|
|
60
69
|
* @param options - Retry options
|
|
61
70
|
* @returns Result of the function
|
|
62
71
|
*/
|
|
63
|
-
|
|
72
|
+
async function retry(fn, options = {}) {
|
|
64
73
|
const { maxAttempts = 3, initialDelay = 100, maxDelay = 5000, backoffFactor = 2, shouldRetry = () => true, } = options;
|
|
65
74
|
let lastError;
|
|
66
75
|
let currentDelay = initialDelay;
|
|
@@ -86,7 +95,7 @@ export async function retry(fn, options = {}) {
|
|
|
86
95
|
* @param errorMessage - Error message for timeout
|
|
87
96
|
* @returns Result of the function
|
|
88
97
|
*/
|
|
89
|
-
|
|
98
|
+
async function withTimeout(fn, ms, errorMessage = 'Operation timed out') {
|
|
90
99
|
return new Promise((resolve, reject) => {
|
|
91
100
|
const timeoutId = setTimeout(() => {
|
|
92
101
|
reject(new Error(errorMessage));
|
|
@@ -109,7 +118,7 @@ export async function withTimeout(fn, ms, errorMessage = 'Operation timed out')
|
|
|
109
118
|
* @param concurrency - Maximum concurrent operations
|
|
110
119
|
* @returns Array of results
|
|
111
120
|
*/
|
|
112
|
-
|
|
121
|
+
async function mapWithConcurrency(items, fn, concurrency) {
|
|
113
122
|
const results = [];
|
|
114
123
|
let currentIndex = 0;
|
|
115
124
|
async function worker() {
|
|
@@ -126,7 +135,7 @@ export async function mapWithConcurrency(items, fn, concurrency) {
|
|
|
126
135
|
* Create a deferred promise
|
|
127
136
|
* @returns Object with promise and resolve/reject functions
|
|
128
137
|
*/
|
|
129
|
-
|
|
138
|
+
function createDeferred() {
|
|
130
139
|
let resolve;
|
|
131
140
|
let reject;
|
|
132
141
|
const promise = new Promise((res, rej) => {
|
package/dist/utils/async.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async.js","sourceRoot":"","sources":["../../src/utils/async.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"async.js","sourceRoot":"","sources":["../../src/utils/async.ts"],"names":[],"mappings":"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"}
|