@leverageaiapps/locus 1.0.6 → 1.0.7
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/exec.d.ts +2 -2
- package/dist/exec.d.ts.map +1 -1
- package/dist/exec.js +88 -69
- package/dist/exec.js.map +1 -1
- package/package.json +1 -1
package/dist/exec.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as pty from 'node-pty';
|
|
2
2
|
export interface ExecOptions {
|
|
3
3
|
cols?: number;
|
|
4
4
|
rows?: number;
|
|
@@ -10,7 +10,7 @@ export declare function getLocalSize(): {
|
|
|
10
10
|
cols: number;
|
|
11
11
|
rows: number;
|
|
12
12
|
};
|
|
13
|
-
export declare function spawnExec(options?: ExecOptions):
|
|
13
|
+
export declare function spawnExec(options?: ExecOptions): pty.IPty;
|
|
14
14
|
export declare function writeToExec(data: string): void;
|
|
15
15
|
export declare function resizeExec(cols: number, rows: number): void;
|
|
16
16
|
export declare function killExec(): void;
|
package/dist/exec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAGhC,MAAM,WAAW,WAAW;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAWD,wBAAgB,YAAY,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAE7D;AAqBD,wBAAgB,SAAS,CAAC,OAAO,GAAE,WAAgB,GAAG,GAAG,CAAC,IAAI,CA4D7D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI9C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAM3D;AAED,wBAAgB,QAAQ,IAAI,IAAI,CAU/B;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAEjE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAEjE;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC"}
|
package/dist/exec.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.getLocalSize = getLocalSize;
|
|
4
37
|
exports.spawnExec = spawnExec;
|
|
@@ -8,17 +41,35 @@ exports.killExec = killExec;
|
|
|
8
41
|
exports.onExecData = onExecData;
|
|
9
42
|
exports.onExecExit = onExecExit;
|
|
10
43
|
exports.isExecRunning = isExecRunning;
|
|
11
|
-
const
|
|
12
|
-
let
|
|
44
|
+
const pty = __importStar(require("node-pty"));
|
|
45
|
+
let ptyProcess = null;
|
|
13
46
|
let dataCallback = null;
|
|
14
47
|
let exitCallback = null;
|
|
15
|
-
// Track terminal size
|
|
48
|
+
// Track terminal size
|
|
16
49
|
let localCols = 80;
|
|
17
50
|
let localRows = 24;
|
|
18
51
|
// Get local terminal size
|
|
19
52
|
function getLocalSize() {
|
|
20
53
|
return { cols: localCols, rows: localRows };
|
|
21
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Strip ANSI escape codes from output
|
|
57
|
+
*/
|
|
58
|
+
function stripAnsi(str) {
|
|
59
|
+
// Remove all ANSI escape sequences
|
|
60
|
+
// This regex matches:
|
|
61
|
+
// - CSI sequences: ESC [ ... final_byte
|
|
62
|
+
// - OSC sequences: ESC ] ... ST
|
|
63
|
+
// - Simple escapes: ESC followed by single char
|
|
64
|
+
return str
|
|
65
|
+
.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '') // CSI sequences (colors, cursor, etc.)
|
|
66
|
+
.replace(/\x1b\][^\x07]*\x07/g, '') // OSC sequences (title, etc.)
|
|
67
|
+
.replace(/\x1b\][^\x1b]*\x1b\\/g, '') // OSC with ST terminator
|
|
68
|
+
.replace(/\x1b[PX^_][^\x1b]*\x1b\\/g, '') // DCS, SOS, PM, APC sequences
|
|
69
|
+
.replace(/\x1b[@-Z\\-_]/g, '') // Fe sequences
|
|
70
|
+
.replace(/\x1b[ -/][0-9;]*[@-~]/g, '') // Other escape sequences
|
|
71
|
+
.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f]/g, ''); // Control characters except \t, \n, \r
|
|
72
|
+
}
|
|
22
73
|
function spawnExec(options = {}) {
|
|
23
74
|
// Default to user's shell
|
|
24
75
|
const shell = process.env.SHELL || '/bin/bash';
|
|
@@ -27,100 +78,68 @@ function spawnExec(options = {}) {
|
|
|
27
78
|
localCols = options.cols || process.stdout.columns || 80;
|
|
28
79
|
localRows = options.rows || process.stdout.rows || 24;
|
|
29
80
|
const cwd = options.cwd || process.cwd();
|
|
30
|
-
// Environment
|
|
31
|
-
// Key insight: By NOT using PTY, programs will detect isatty()=false
|
|
32
|
-
// and automatically disable colors. We also set explicit env vars
|
|
33
|
-
// for programs that check these instead of isatty().
|
|
81
|
+
// Environment setup
|
|
34
82
|
const env = {
|
|
35
83
|
...process.env,
|
|
36
84
|
PATH: process.env.PATH || '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin',
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
NO_COLOR: '1', // Standard for disabling colors
|
|
40
|
-
FORCE_COLOR: '0', // npm/yarn/chalk
|
|
41
|
-
CLICOLOR: '0', // BSD/macOS ls
|
|
42
|
-
CLICOLOR_FORCE: '0', // Force disable
|
|
43
|
-
GIT_TERMINAL_PROMPT: '0', // Disable git prompts
|
|
44
|
-
// Keep shell interactive for tab completion
|
|
45
|
-
PS1: '$ ', // Simple prompt
|
|
85
|
+
TERM: 'xterm-256color',
|
|
86
|
+
COLORTERM: 'truecolor',
|
|
46
87
|
};
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
if (isShell && args.length === 0) {
|
|
53
|
-
finalArgs = ['-i'];
|
|
54
|
-
}
|
|
55
|
-
// Spawn with pipes instead of PTY
|
|
56
|
-
// This makes isatty() return false for the child process
|
|
57
|
-
execProcess = (0, child_process_1.spawn)(finalCommand, finalArgs, {
|
|
88
|
+
// Spawn PTY process
|
|
89
|
+
ptyProcess = pty.spawn(command, args, {
|
|
90
|
+
name: 'xterm-256color',
|
|
91
|
+
cols: localCols,
|
|
92
|
+
rows: localRows,
|
|
58
93
|
cwd,
|
|
59
94
|
env,
|
|
60
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
61
|
-
shell: false, // Don't wrap in another shell since we're already running a shell
|
|
62
|
-
});
|
|
63
|
-
// Handle stdout
|
|
64
|
-
execProcess.stdout?.on('data', (data) => {
|
|
65
|
-
const output = data.toString();
|
|
66
|
-
// Write to local terminal (mirror)
|
|
67
|
-
process.stdout.write(output);
|
|
68
|
-
// Send to callback
|
|
69
|
-
if (dataCallback) {
|
|
70
|
-
dataCallback(output);
|
|
71
|
-
}
|
|
72
95
|
});
|
|
73
|
-
// Handle
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
// Send to callback
|
|
96
|
+
// Handle PTY output - strip ANSI codes before sending
|
|
97
|
+
ptyProcess.onData((data) => {
|
|
98
|
+
// Write original to local terminal (with colors)
|
|
99
|
+
process.stdout.write(data);
|
|
100
|
+
// Send stripped version to callback (for remote clients)
|
|
79
101
|
if (dataCallback) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
execProcess.on('exit', (code) => {
|
|
85
|
-
if (exitCallback) {
|
|
86
|
-
exitCallback(code ?? 0);
|
|
102
|
+
const stripped = stripAnsi(data);
|
|
103
|
+
if (stripped) {
|
|
104
|
+
dataCallback(stripped);
|
|
105
|
+
}
|
|
87
106
|
}
|
|
88
|
-
execProcess = null;
|
|
89
107
|
});
|
|
90
|
-
|
|
91
|
-
|
|
108
|
+
// Handle PTY exit
|
|
109
|
+
ptyProcess.onExit(({ exitCode }) => {
|
|
92
110
|
if (exitCallback) {
|
|
93
|
-
exitCallback(
|
|
111
|
+
exitCallback(exitCode);
|
|
94
112
|
}
|
|
95
|
-
|
|
113
|
+
ptyProcess = null;
|
|
96
114
|
});
|
|
97
|
-
// Forward local stdin to
|
|
115
|
+
// Forward local stdin to PTY
|
|
98
116
|
if (process.stdin.isTTY) {
|
|
99
117
|
process.stdin.setRawMode(true);
|
|
100
118
|
}
|
|
101
119
|
process.stdin.resume();
|
|
102
120
|
process.stdin.on('data', (data) => {
|
|
103
|
-
if (
|
|
104
|
-
|
|
121
|
+
if (ptyProcess) {
|
|
122
|
+
ptyProcess.write(data.toString());
|
|
105
123
|
}
|
|
106
124
|
});
|
|
107
|
-
return
|
|
125
|
+
return ptyProcess;
|
|
108
126
|
}
|
|
109
127
|
function writeToExec(data) {
|
|
110
|
-
if (
|
|
111
|
-
|
|
128
|
+
if (ptyProcess) {
|
|
129
|
+
ptyProcess.write(data);
|
|
112
130
|
}
|
|
113
131
|
}
|
|
114
|
-
// Resize is a no-op in pipe mode (no PTY to resize)
|
|
115
132
|
function resizeExec(cols, rows) {
|
|
116
133
|
localCols = cols;
|
|
117
134
|
localRows = rows;
|
|
118
|
-
|
|
135
|
+
if (ptyProcess) {
|
|
136
|
+
ptyProcess.resize(cols, rows);
|
|
137
|
+
}
|
|
119
138
|
}
|
|
120
139
|
function killExec() {
|
|
121
|
-
if (
|
|
122
|
-
|
|
123
|
-
|
|
140
|
+
if (ptyProcess) {
|
|
141
|
+
ptyProcess.kill();
|
|
142
|
+
ptyProcess = null;
|
|
124
143
|
}
|
|
125
144
|
// Restore terminal
|
|
126
145
|
if (process.stdin.isTTY) {
|
|
@@ -134,6 +153,6 @@ function onExecExit(callback) {
|
|
|
134
153
|
exitCallback = callback;
|
|
135
154
|
}
|
|
136
155
|
function isExecRunning() {
|
|
137
|
-
return
|
|
156
|
+
return ptyProcess !== null;
|
|
138
157
|
}
|
|
139
158
|
//# sourceMappingURL=exec.js.map
|
package/dist/exec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"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"}
|