termify-agent 1.0.4 → 1.0.6
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/agent.d.ts +5 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +26 -0
- package/dist/agent.js.map +1 -1
- package/dist/auth.js +1 -1
- package/dist/daemon.d.ts +62 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +267 -0
- package/dist/daemon.js.map +1 -0
- package/dist/index.js +299 -54
- package/dist/index.js.map +1 -1
- package/dist/pty-manager.d.ts +8 -0
- package/dist/pty-manager.d.ts.map +1 -1
- package/dist/pty-manager.js +73 -4
- package/dist/pty-manager.js.map +1 -1
- package/dist/stats-manager.d.ts +82 -0
- package/dist/stats-manager.d.ts.map +1 -0
- package/dist/stats-manager.js +181 -0
- package/dist/stats-manager.js.map +1 -0
- package/dist/ws-client.d.ts +44 -0
- package/dist/ws-client.d.ts.map +1 -1
- package/dist/ws-client.js +9 -0
- package/dist/ws-client.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -7,7 +7,8 @@ import { login, logout } from './auth.js';
|
|
|
7
7
|
import { getConfig, isConfigured, getConfigPath } from './config.js';
|
|
8
8
|
import { setLogLevel, setQuietMode } from './utils/logger.js';
|
|
9
9
|
import { getSystemInfo } from './utils/machine-id.js';
|
|
10
|
-
|
|
10
|
+
import { getDaemonStatus, startDaemon, stopDaemon, restartDaemon, killDaemon, getRecentLogs, clearLogs, printDaemonStatus, isDaemonChild, getDaemonDir, } from './daemon.js';
|
|
11
|
+
const VERSION = '1.0.5';
|
|
11
12
|
const program = new Command();
|
|
12
13
|
program
|
|
13
14
|
.name('termify-agent')
|
|
@@ -24,20 +25,111 @@ program
|
|
|
24
25
|
if (opts.verbose)
|
|
25
26
|
setLogLevel('debug');
|
|
26
27
|
});
|
|
28
|
+
/**
|
|
29
|
+
* Helper to start the agent (used by both start and login --start)
|
|
30
|
+
*/
|
|
31
|
+
async function runAgent(options) {
|
|
32
|
+
if (!isConfigured()) {
|
|
33
|
+
console.log(chalk.red('Error: Not logged in.'));
|
|
34
|
+
console.log(chalk.gray('Run `termify-agent login` first.'));
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
// Start as background daemon
|
|
38
|
+
if (options.daemon && !options.daemonChild) {
|
|
39
|
+
const result = startDaemon();
|
|
40
|
+
if (result.success) {
|
|
41
|
+
console.log(chalk.green(`✓ Agent started in background (PID: ${result.pid})`));
|
|
42
|
+
console.log(chalk.gray(` Logs: ${getDaemonDir()}/agent.log`));
|
|
43
|
+
console.log(chalk.gray(` Use \`termify-agent ps\` to check status`));
|
|
44
|
+
console.log(chalk.gray(` Use \`termify-agent stop\` to stop`));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
console.log(chalk.red(`✗ Failed to start: ${result.error}`));
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// Run in foreground (or as daemon child)
|
|
53
|
+
const agent = new Agent();
|
|
54
|
+
const isDaemon = isDaemonChild() || options.daemonChild;
|
|
55
|
+
if (!isDaemon) {
|
|
56
|
+
console.log(chalk.bold('\n🚀 Termify Agent\n'));
|
|
57
|
+
}
|
|
58
|
+
const spinner = isDaemon ? null : ora('Connecting to Termify...').start();
|
|
59
|
+
agent.on('connected', (agentId, agentName) => {
|
|
60
|
+
if (spinner) {
|
|
61
|
+
spinner.succeed(chalk.green(`Connected as ${agentName}`));
|
|
62
|
+
console.log(chalk.gray(` Agent ID: ${agentId}`));
|
|
63
|
+
console.log(chalk.gray(` Terminals: ${agent.terminalCount}`));
|
|
64
|
+
console.log(chalk.gray('\nWaiting for terminal requests... (Ctrl+C to stop)\n'));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.log(`[${new Date().toISOString()}] Connected as ${agentName} (ID: ${agentId})`);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
agent.on('disconnected', (reason) => {
|
|
71
|
+
if (isDaemon) {
|
|
72
|
+
console.log(`[${new Date().toISOString()}] Disconnected: ${reason}. Reconnecting...`);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
console.log(chalk.yellow(`\nDisconnected: ${reason}`));
|
|
76
|
+
console.log(chalk.gray('Attempting to reconnect...'));
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
agent.on('authFailed', (error) => {
|
|
80
|
+
if (spinner) {
|
|
81
|
+
spinner.fail(chalk.red(`Authentication failed: ${error}`));
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
console.error(`[${new Date().toISOString()}] Authentication failed: ${error}`);
|
|
85
|
+
}
|
|
86
|
+
console.log(chalk.gray('\nYour credentials may have expired.'));
|
|
87
|
+
console.log(chalk.gray('Run `termify-agent login` to re-authenticate.'));
|
|
88
|
+
process.exit(1);
|
|
89
|
+
});
|
|
90
|
+
agent.on('stopped', () => {
|
|
91
|
+
if (isDaemon) {
|
|
92
|
+
console.log(`[${new Date().toISOString()}] Agent stopped.`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log(chalk.gray('\nAgent stopped.'));
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
const started = agent.start({ daemon: isDaemon });
|
|
99
|
+
if (!started) {
|
|
100
|
+
if (spinner) {
|
|
101
|
+
spinner.fail('Failed to start agent');
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
console.error(`[${new Date().toISOString()}] Failed to start agent`);
|
|
105
|
+
}
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
27
109
|
/**
|
|
28
110
|
* Login command - authenticate with Termify
|
|
29
111
|
*/
|
|
30
112
|
program
|
|
31
113
|
.command('login')
|
|
32
|
-
.description('Authenticate with Termify')
|
|
114
|
+
.description('Authenticate with Termify and optionally start the agent')
|
|
33
115
|
.option('-s, --server <url>', 'Termify server URL')
|
|
34
116
|
.option('-c, --code <code>', 'Pairing code (if you already have one)')
|
|
117
|
+
.option('--start', 'Start the agent after successful login')
|
|
118
|
+
.option('-d, --daemon', 'Start agent in background after login (implies --start)')
|
|
35
119
|
.action(async (options) => {
|
|
36
120
|
const success = await login({
|
|
37
121
|
serverUrl: options.server,
|
|
38
122
|
pairingCode: options.code,
|
|
39
123
|
});
|
|
40
|
-
|
|
124
|
+
if (!success) {
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
// Auto-start if requested
|
|
128
|
+
if (options.daemon || options.start) {
|
|
129
|
+
console.log(chalk.gray('\nStarting agent...\n'));
|
|
130
|
+
await runAgent({ daemon: options.daemon });
|
|
131
|
+
}
|
|
132
|
+
process.exit(0);
|
|
41
133
|
});
|
|
42
134
|
/**
|
|
43
135
|
* Logout command - clear credentials
|
|
@@ -45,7 +137,19 @@ program
|
|
|
45
137
|
program
|
|
46
138
|
.command('logout')
|
|
47
139
|
.description('Log out and clear stored credentials')
|
|
48
|
-
.
|
|
140
|
+
.option('--stop', 'Stop running agent before logging out')
|
|
141
|
+
.action(async (options) => {
|
|
142
|
+
// Stop daemon if running and --stop flag used
|
|
143
|
+
if (options.stop) {
|
|
144
|
+
const status = getDaemonStatus();
|
|
145
|
+
if (status.running) {
|
|
146
|
+
console.log(chalk.gray('Stopping running agent...'));
|
|
147
|
+
const result = await stopDaemon();
|
|
148
|
+
if (result.success) {
|
|
149
|
+
console.log(chalk.green('✓ Agent stopped'));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
49
153
|
await logout();
|
|
50
154
|
process.exit(0);
|
|
51
155
|
});
|
|
@@ -55,56 +159,81 @@ program
|
|
|
55
159
|
program
|
|
56
160
|
.command('start')
|
|
57
161
|
.description('Start the agent and connect to Termify')
|
|
58
|
-
.option('-d, --daemon', 'Run
|
|
162
|
+
.option('-d, --daemon', 'Run in background (daemon mode)')
|
|
163
|
+
.option('--daemon-child', 'Internal flag for daemon child process')
|
|
59
164
|
.action(async (options) => {
|
|
165
|
+
await runAgent(options);
|
|
166
|
+
});
|
|
167
|
+
/**
|
|
168
|
+
* Stop command - stop the running daemon
|
|
169
|
+
*/
|
|
170
|
+
program
|
|
171
|
+
.command('stop')
|
|
172
|
+
.description('Stop the running agent daemon')
|
|
173
|
+
.action(async () => {
|
|
174
|
+
const status = getDaemonStatus();
|
|
175
|
+
if (!status.running) {
|
|
176
|
+
console.log(chalk.yellow('Agent is not running.'));
|
|
177
|
+
process.exit(0);
|
|
178
|
+
}
|
|
179
|
+
const spinner = ora('Stopping agent...').start();
|
|
180
|
+
const result = await stopDaemon();
|
|
181
|
+
if (result.success) {
|
|
182
|
+
spinner.succeed(chalk.green('Agent stopped'));
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
spinner.fail(chalk.red(`Failed to stop: ${result.error}`));
|
|
186
|
+
process.exit(1);
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
/**
|
|
190
|
+
* Restart command - restart the daemon
|
|
191
|
+
*/
|
|
192
|
+
program
|
|
193
|
+
.command('restart')
|
|
194
|
+
.description('Restart the agent daemon')
|
|
195
|
+
.action(async () => {
|
|
60
196
|
if (!isConfigured()) {
|
|
61
197
|
console.log(chalk.red('Error: Not logged in.'));
|
|
62
198
|
console.log(chalk.gray('Run `termify-agent login` first.'));
|
|
63
199
|
process.exit(1);
|
|
64
200
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
201
|
+
const spinner = ora('Restarting agent...').start();
|
|
202
|
+
const result = await restartDaemon();
|
|
203
|
+
if (result.success) {
|
|
204
|
+
spinner.succeed(chalk.green(`Agent restarted (PID: ${result.pid})`));
|
|
205
|
+
console.log(chalk.gray(` Use \`termify-agent ps\` to check status`));
|
|
69
206
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const spinner = ora('Connecting to Termify...').start();
|
|
73
|
-
agent.on('connected', (agentId, agentName) => {
|
|
74
|
-
spinner.succeed(chalk.green(`Connected as ${agentName}`));
|
|
75
|
-
console.log(chalk.gray(` Agent ID: ${agentId}`));
|
|
76
|
-
console.log(chalk.gray(` Terminals: ${agent.terminalCount}`));
|
|
77
|
-
console.log(chalk.gray('\nWaiting for terminal requests... (Ctrl+C to stop)\n'));
|
|
78
|
-
});
|
|
79
|
-
agent.on('disconnected', (reason) => {
|
|
80
|
-
console.log(chalk.yellow(`\nDisconnected: ${reason}`));
|
|
81
|
-
console.log(chalk.gray('Attempting to reconnect...'));
|
|
82
|
-
});
|
|
83
|
-
agent.on('authFailed', (error) => {
|
|
84
|
-
spinner.fail(chalk.red(`Authentication failed: ${error}`));
|
|
85
|
-
console.log(chalk.gray('\nYour credentials may have expired.'));
|
|
86
|
-
console.log(chalk.gray('Run `termify-agent login` to re-authenticate.'));
|
|
207
|
+
else {
|
|
208
|
+
spinner.fail(chalk.red(`Failed to restart: ${result.error}`));
|
|
87
209
|
process.exit(1);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
/**
|
|
213
|
+
* Kill command - force kill the daemon
|
|
214
|
+
*/
|
|
215
|
+
program
|
|
216
|
+
.command('kill')
|
|
217
|
+
.description('Force kill the agent daemon')
|
|
218
|
+
.action(() => {
|
|
219
|
+
const spinner = ora('Killing agent...').start();
|
|
220
|
+
const result = killDaemon();
|
|
221
|
+
if (result.success) {
|
|
222
|
+
spinner.succeed(chalk.green('Agent killed'));
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
spinner.fail(chalk.red(`Failed to kill: ${result.error}`));
|
|
95
226
|
process.exit(1);
|
|
96
227
|
}
|
|
97
228
|
});
|
|
98
229
|
/**
|
|
99
|
-
*
|
|
230
|
+
* PS command - show running processes
|
|
100
231
|
*/
|
|
101
232
|
program
|
|
102
|
-
.command('
|
|
103
|
-
.description('
|
|
233
|
+
.command('ps')
|
|
234
|
+
.description('Show agent process status')
|
|
104
235
|
.action(() => {
|
|
105
|
-
|
|
106
|
-
console.log(chalk.gray('Use Ctrl+C to stop the foreground agent.'));
|
|
107
|
-
process.exit(1);
|
|
236
|
+
printDaemonStatus();
|
|
108
237
|
});
|
|
109
238
|
/**
|
|
110
239
|
* Status command - show current status
|
|
@@ -115,7 +244,17 @@ program
|
|
|
115
244
|
.action(() => {
|
|
116
245
|
const config = getConfig();
|
|
117
246
|
const systemInfo = getSystemInfo();
|
|
247
|
+
const daemonStatus = getDaemonStatus();
|
|
118
248
|
console.log(chalk.bold('\n📊 Termify Agent Status\n'));
|
|
249
|
+
// Daemon status
|
|
250
|
+
if (daemonStatus.running) {
|
|
251
|
+
console.log(chalk.green('● Agent is running'));
|
|
252
|
+
console.log(chalk.gray(` PID: ${daemonStatus.pid}`));
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
console.log(chalk.gray('○ Agent is not running'));
|
|
256
|
+
}
|
|
257
|
+
console.log();
|
|
119
258
|
// Login status
|
|
120
259
|
if (isConfigured()) {
|
|
121
260
|
console.log(chalk.green('✓ Logged in'));
|
|
@@ -162,29 +301,135 @@ program
|
|
|
162
301
|
console.log(chalk.gray(`\nConfig file: ${getConfigPath()}`));
|
|
163
302
|
});
|
|
164
303
|
/**
|
|
165
|
-
* Logs command -
|
|
304
|
+
* Logs command - view agent logs
|
|
166
305
|
*/
|
|
167
306
|
program
|
|
168
307
|
.command('logs')
|
|
169
308
|
.description('View agent logs')
|
|
170
|
-
.option('-f, --follow', 'Follow log output')
|
|
309
|
+
.option('-f, --follow', 'Follow log output (tail -f)')
|
|
171
310
|
.option('-n, --lines <number>', 'Number of lines to show', '50')
|
|
172
|
-
.
|
|
173
|
-
|
|
174
|
-
|
|
311
|
+
.option('--clear', 'Clear all logs')
|
|
312
|
+
.action(async (options) => {
|
|
313
|
+
if (options.clear) {
|
|
314
|
+
clearLogs();
|
|
315
|
+
console.log(chalk.green('✓ Logs cleared'));
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
const lines = parseInt(options.lines, 10) || 50;
|
|
319
|
+
const logLines = getRecentLogs(lines);
|
|
320
|
+
if (logLines.length === 0) {
|
|
321
|
+
console.log(chalk.gray('No logs found.'));
|
|
322
|
+
console.log(chalk.gray(`Log file: ${getDaemonDir()}/agent.log`));
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
console.log(chalk.bold(`\n📜 Last ${Math.min(lines, logLines.length)} log lines\n`));
|
|
326
|
+
console.log(logLines.join('\n'));
|
|
327
|
+
if (options.follow) {
|
|
328
|
+
console.log(chalk.gray('\n--- Following logs (Ctrl+C to stop) ---\n'));
|
|
329
|
+
const fs = await import('fs');
|
|
330
|
+
const path = await import('path');
|
|
331
|
+
const logFile = path.join(getDaemonDir(), 'agent.log');
|
|
332
|
+
if (fs.existsSync(logFile)) {
|
|
333
|
+
const { spawn } = await import('child_process');
|
|
334
|
+
const tail = spawn('tail', ['-f', logFile], { stdio: 'inherit' });
|
|
335
|
+
process.on('SIGINT', () => {
|
|
336
|
+
tail.kill();
|
|
337
|
+
process.exit(0);
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
}
|
|
175
341
|
});
|
|
176
|
-
|
|
177
|
-
|
|
342
|
+
/**
|
|
343
|
+
* Help command - show all commands
|
|
344
|
+
*/
|
|
345
|
+
program
|
|
346
|
+
.command('help [command]')
|
|
347
|
+
.description('Display help for a specific command')
|
|
348
|
+
.action((command) => {
|
|
349
|
+
if (command) {
|
|
350
|
+
const cmd = program.commands.find((c) => c.name() === command);
|
|
351
|
+
if (cmd) {
|
|
352
|
+
cmd.help();
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
console.log(chalk.red(`Unknown command: ${command}`));
|
|
356
|
+
console.log(chalk.gray('Run `termify-agent help` to see all commands.'));
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
showFullHelp();
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
/**
|
|
364
|
+
* Show full help with all commands and examples
|
|
365
|
+
*/
|
|
366
|
+
function showFullHelp() {
|
|
178
367
|
console.log(chalk.bold(`
|
|
179
|
-
|
|
180
|
-
║
|
|
181
|
-
║
|
|
182
|
-
║
|
|
183
|
-
║
|
|
184
|
-
║
|
|
185
|
-
|
|
368
|
+
╔════════════════════════════════════════════════════════════════╗
|
|
369
|
+
║ ║
|
|
370
|
+
║ 🖥️ Termify Agent v${VERSION} ║
|
|
371
|
+
║ ║
|
|
372
|
+
║ Connect your local terminal to Termify platform ║
|
|
373
|
+
║ ║
|
|
374
|
+
╚════════════════════════════════════════════════════════════════╝
|
|
186
375
|
`));
|
|
187
|
-
|
|
376
|
+
console.log(chalk.bold('USAGE'));
|
|
377
|
+
console.log(chalk.gray(' $ termify-agent <command> [options]\n'));
|
|
378
|
+
console.log(chalk.bold('COMMANDS'));
|
|
379
|
+
console.log(chalk.cyan(' login') + chalk.gray(' Authenticate with Termify'));
|
|
380
|
+
console.log(chalk.cyan(' logout') + chalk.gray(' Log out and clear credentials'));
|
|
381
|
+
console.log(chalk.cyan(' start') + chalk.gray(' Start the agent'));
|
|
382
|
+
console.log(chalk.cyan(' stop') + chalk.gray(' Stop the running agent'));
|
|
383
|
+
console.log(chalk.cyan(' restart') + chalk.gray(' Restart the agent'));
|
|
384
|
+
console.log(chalk.cyan(' kill') + chalk.gray(' Force kill the agent'));
|
|
385
|
+
console.log(chalk.cyan(' ps') + chalk.gray(' Show agent process status'));
|
|
386
|
+
console.log(chalk.cyan(' status') + chalk.gray(' Show agent status and config'));
|
|
387
|
+
console.log(chalk.cyan(' config') + chalk.gray(' Show or modify configuration'));
|
|
388
|
+
console.log(chalk.cyan(' logs') + chalk.gray(' View agent logs'));
|
|
389
|
+
console.log(chalk.cyan(' help') + chalk.gray(' Show this help message'));
|
|
390
|
+
console.log(chalk.bold('\nGLOBAL OPTIONS'));
|
|
391
|
+
console.log(chalk.gray(' -q, --quiet Suppress non-error output'));
|
|
392
|
+
console.log(chalk.gray(' -v, --verbose Enable verbose logging'));
|
|
393
|
+
console.log(chalk.gray(' -V, --version Show version number'));
|
|
394
|
+
console.log(chalk.bold('\nCOMMAND OPTIONS'));
|
|
395
|
+
console.log(chalk.cyan('\n login:'));
|
|
396
|
+
console.log(chalk.gray(' -s, --server <url> Termify server URL'));
|
|
397
|
+
console.log(chalk.gray(' -c, --code <code> Pairing code (if you have one)'));
|
|
398
|
+
console.log(chalk.gray(' --start Start agent after login'));
|
|
399
|
+
console.log(chalk.gray(' -d, --daemon Start agent in background after login'));
|
|
400
|
+
console.log(chalk.cyan('\n logout:'));
|
|
401
|
+
console.log(chalk.gray(' --stop Stop running agent before logging out'));
|
|
402
|
+
console.log(chalk.cyan('\n start:'));
|
|
403
|
+
console.log(chalk.gray(' -d, --daemon Run in background (daemon mode)'));
|
|
404
|
+
console.log(chalk.cyan('\n logs:'));
|
|
405
|
+
console.log(chalk.gray(' -f, --follow Follow log output in real-time'));
|
|
406
|
+
console.log(chalk.gray(' -n, --lines <n> Number of lines to show (default: 50)'));
|
|
407
|
+
console.log(chalk.gray(' --clear Clear all logs'));
|
|
408
|
+
console.log(chalk.cyan('\n config:'));
|
|
409
|
+
console.log(chalk.gray(' --server <url> Set server URL'));
|
|
410
|
+
console.log(chalk.gray(' --show Show current configuration'));
|
|
411
|
+
console.log(chalk.bold('\nEXAMPLES'));
|
|
412
|
+
console.log(chalk.gray(' # Login and start agent in background'));
|
|
413
|
+
console.log(chalk.white(' $ termify-agent login -d\n'));
|
|
414
|
+
console.log(chalk.gray(' # Login with a specific server'));
|
|
415
|
+
console.log(chalk.white(' $ termify-agent login -s https://termify.example.com\n'));
|
|
416
|
+
console.log(chalk.gray(' # Start agent in background'));
|
|
417
|
+
console.log(chalk.white(' $ termify-agent start -d\n'));
|
|
418
|
+
console.log(chalk.gray(' # Check if agent is running'));
|
|
419
|
+
console.log(chalk.white(' $ termify-agent ps\n'));
|
|
420
|
+
console.log(chalk.gray(' # View and follow logs'));
|
|
421
|
+
console.log(chalk.white(' $ termify-agent logs -f\n'));
|
|
422
|
+
console.log(chalk.gray(' # Stop the agent'));
|
|
423
|
+
console.log(chalk.white(' $ termify-agent stop\n'));
|
|
424
|
+
console.log(chalk.bold('FILES'));
|
|
425
|
+
console.log(chalk.gray(` Config: ${getConfigPath()}`));
|
|
426
|
+
console.log(chalk.gray(` Logs: ${getDaemonDir()}/agent.log`));
|
|
427
|
+
console.log(chalk.gray(` PID: ${getDaemonDir()}/agent.pid\n`));
|
|
428
|
+
}
|
|
429
|
+
// Show help if no command
|
|
430
|
+
if (process.argv.length === 2) {
|
|
431
|
+
showFullHelp();
|
|
432
|
+
process.exit(0);
|
|
188
433
|
}
|
|
189
434
|
program.parse();
|
|
190
435
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/pty-manager.d.ts
CHANGED
|
@@ -21,6 +21,10 @@ export declare class PTYManager {
|
|
|
21
21
|
private instances;
|
|
22
22
|
private onData;
|
|
23
23
|
private onExit;
|
|
24
|
+
/**
|
|
25
|
+
* Check if a file exists and is executable
|
|
26
|
+
*/
|
|
27
|
+
private shellExists;
|
|
24
28
|
/**
|
|
25
29
|
* Get the default shell for the current platform
|
|
26
30
|
*/
|
|
@@ -33,6 +37,10 @@ export declare class PTYManager {
|
|
|
33
37
|
* Set callback for terminal exit
|
|
34
38
|
*/
|
|
35
39
|
setExitHandler(callback: ExitCallback): void;
|
|
40
|
+
/**
|
|
41
|
+
* Validate and get a valid cwd
|
|
42
|
+
*/
|
|
43
|
+
private getValidCwd;
|
|
36
44
|
/**
|
|
37
45
|
* Create a new PTY instance
|
|
38
46
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty-manager.d.ts","sourceRoot":"","sources":["../src/pty-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"pty-manager.d.ts","sourceRoot":"","sources":["../src/pty-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAKhC,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,KAAK,YAAY,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAC/D,KAAK,YAAY,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;AAEnE;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,MAAM,CAA6B;IAE3C;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAI5C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAI5C;;OAEG;IACH,OAAO,CAAC,WAAW;IA8BnB;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO;IA8E7D;;OAEG;IACH,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAgBhD;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAmB/D;;OAEG;IACH,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAkBjC;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAWzC;;OAEG;IACH,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIhC;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,OAAO,IAAI,IAAI;CAYhB"}
|
package/dist/pty-manager.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as pty from 'node-pty';
|
|
2
2
|
import os from 'os';
|
|
3
|
+
import fs from 'fs';
|
|
3
4
|
import { logger } from './utils/logger.js';
|
|
4
5
|
/**
|
|
5
6
|
* Manages local PTY instances for agent terminals
|
|
@@ -8,6 +9,18 @@ export class PTYManager {
|
|
|
8
9
|
instances = new Map();
|
|
9
10
|
onData = null;
|
|
10
11
|
onExit = null;
|
|
12
|
+
/**
|
|
13
|
+
* Check if a file exists and is executable
|
|
14
|
+
*/
|
|
15
|
+
shellExists(shellPath) {
|
|
16
|
+
try {
|
|
17
|
+
fs.accessSync(shellPath, fs.constants.X_OK);
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
11
24
|
/**
|
|
12
25
|
* Get the default shell for the current platform
|
|
13
26
|
*/
|
|
@@ -15,7 +28,20 @@ export class PTYManager {
|
|
|
15
28
|
if (os.platform() === 'win32') {
|
|
16
29
|
return process.env.COMSPEC || 'cmd.exe';
|
|
17
30
|
}
|
|
18
|
-
|
|
31
|
+
// First try $SHELL environment variable
|
|
32
|
+
if (process.env.SHELL && this.shellExists(process.env.SHELL)) {
|
|
33
|
+
return process.env.SHELL;
|
|
34
|
+
}
|
|
35
|
+
// Try common shells in order of preference
|
|
36
|
+
const commonShells = ['/bin/zsh', '/bin/bash', '/bin/sh'];
|
|
37
|
+
for (const shell of commonShells) {
|
|
38
|
+
if (this.shellExists(shell)) {
|
|
39
|
+
logger.debug(`Using detected shell: ${shell}`);
|
|
40
|
+
return shell;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Fallback to /bin/sh (should always exist on Unix)
|
|
44
|
+
return '/bin/sh';
|
|
19
45
|
}
|
|
20
46
|
/**
|
|
21
47
|
* Set callback for terminal output
|
|
@@ -29,6 +55,37 @@ export class PTYManager {
|
|
|
29
55
|
setExitHandler(callback) {
|
|
30
56
|
this.onExit = callback;
|
|
31
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Validate and get a valid cwd
|
|
60
|
+
*/
|
|
61
|
+
getValidCwd(requestedCwd) {
|
|
62
|
+
// Try requested cwd first
|
|
63
|
+
if (requestedCwd) {
|
|
64
|
+
try {
|
|
65
|
+
if (fs.existsSync(requestedCwd) && fs.statSync(requestedCwd).isDirectory()) {
|
|
66
|
+
return requestedCwd;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
logger.warn(`Requested cwd ${requestedCwd} is not accessible`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Fallback to home directory
|
|
74
|
+
const homedir = os.homedir();
|
|
75
|
+
try {
|
|
76
|
+
if (fs.existsSync(homedir) && fs.statSync(homedir).isDirectory()) {
|
|
77
|
+
return homedir;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
logger.warn(`Home directory ${homedir} is not accessible`);
|
|
82
|
+
}
|
|
83
|
+
// Last resort: /tmp or current directory
|
|
84
|
+
if (fs.existsSync('/tmp')) {
|
|
85
|
+
return '/tmp';
|
|
86
|
+
}
|
|
87
|
+
return process.cwd();
|
|
88
|
+
}
|
|
32
89
|
/**
|
|
33
90
|
* Create a new PTY instance
|
|
34
91
|
*/
|
|
@@ -40,7 +97,12 @@ export class PTYManager {
|
|
|
40
97
|
const cols = options.cols || 80;
|
|
41
98
|
const rows = options.rows || 24;
|
|
42
99
|
const shell = options.shell || this.getDefaultShell();
|
|
43
|
-
const cwd = options.cwd
|
|
100
|
+
const cwd = this.getValidCwd(options.cwd);
|
|
101
|
+
// Verify shell exists before trying to spawn
|
|
102
|
+
if (!this.shellExists(shell)) {
|
|
103
|
+
logger.error(`Shell ${shell} does not exist or is not executable`);
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
44
106
|
// Merge environment variables
|
|
45
107
|
const env = {
|
|
46
108
|
...process.env,
|
|
@@ -48,7 +110,7 @@ export class PTYManager {
|
|
|
48
110
|
TERM: 'xterm-256color',
|
|
49
111
|
COLORTERM: 'truecolor',
|
|
50
112
|
};
|
|
51
|
-
logger.
|
|
113
|
+
logger.info(`Creating PTY: shell=${shell}, cwd=${cwd}, cols=${cols}, rows=${rows}`);
|
|
52
114
|
try {
|
|
53
115
|
const ptyProcess = pty.spawn(shell, [], {
|
|
54
116
|
name: 'xterm-256color',
|
|
@@ -82,7 +144,14 @@ export class PTYManager {
|
|
|
82
144
|
return true;
|
|
83
145
|
}
|
|
84
146
|
catch (error) {
|
|
85
|
-
|
|
147
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
148
|
+
logger.error(`Failed to create terminal ${terminalId}: ${errorMessage}`);
|
|
149
|
+
// Provide diagnostic information for common errors
|
|
150
|
+
if (errorMessage.includes('posix_spawnp failed') || errorMessage.includes('spawn')) {
|
|
151
|
+
logger.error(`Diagnostic info: shell=${shell}, cwd=${cwd}, platform=${os.platform()}, arch=${os.arch()}`);
|
|
152
|
+
logger.error(`Shell exists: ${this.shellExists(shell)}, CWD exists: ${fs.existsSync(cwd)}`);
|
|
153
|
+
logger.error(`This error often means node-pty needs to be rebuilt: npm rebuild node-pty`);
|
|
154
|
+
}
|
|
86
155
|
return false;
|
|
87
156
|
}
|
|
88
157
|
}
|