cloudforge-agent 0.1.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/git.d.ts ADDED
@@ -0,0 +1,97 @@
1
+ /**
2
+ * CloudForge Agent Git Manager
3
+ * Manages Git operations via CLI
4
+ */
5
+ import type { AgentConfig } from './config.js';
6
+ export interface GitStatus {
7
+ branch: string;
8
+ isRepo: boolean;
9
+ modified: string[];
10
+ staged: string[];
11
+ untracked: string[];
12
+ ahead: number;
13
+ behind: number;
14
+ }
15
+ export interface GitLog {
16
+ hash: string;
17
+ shortHash: string;
18
+ author: string;
19
+ date: string;
20
+ message: string;
21
+ }
22
+ export interface GitDiff {
23
+ file?: string;
24
+ diff: string;
25
+ }
26
+ export interface GitResult {
27
+ success: boolean;
28
+ message?: string;
29
+ error?: string;
30
+ }
31
+ export interface GitCommitResult extends GitResult {
32
+ hash?: string;
33
+ }
34
+ export declare class GitManager {
35
+ private config;
36
+ constructor(config: AgentConfig);
37
+ /**
38
+ * Check if git is available
39
+ */
40
+ private isGitAvailable;
41
+ /**
42
+ * Check if path is inside a git repository
43
+ */
44
+ isGitRepo(cwd: string): Promise<boolean>;
45
+ /**
46
+ * Get git status
47
+ */
48
+ status(cwd: string): Promise<GitStatus>;
49
+ /**
50
+ * Stage files
51
+ */
52
+ add(cwd: string, files: string[]): Promise<GitResult>;
53
+ /**
54
+ * Unstage files
55
+ */
56
+ reset(cwd: string, files: string[]): Promise<GitResult>;
57
+ /**
58
+ * Commit staged changes
59
+ */
60
+ commit(cwd: string, message: string): Promise<GitCommitResult>;
61
+ /**
62
+ * Pull from remote
63
+ */
64
+ pull(cwd: string): Promise<GitResult>;
65
+ /**
66
+ * Push to remote
67
+ */
68
+ push(cwd: string): Promise<GitResult>;
69
+ /**
70
+ * Get diff
71
+ */
72
+ diff(cwd: string, file?: string, staged?: boolean): Promise<GitDiff>;
73
+ /**
74
+ * Get commit log
75
+ */
76
+ log(cwd: string, limit?: number): Promise<GitLog[]>;
77
+ /**
78
+ * Discard changes in working directory
79
+ */
80
+ checkout(cwd: string, files: string[]): Promise<GitResult>;
81
+ /**
82
+ * Get list of branches
83
+ */
84
+ branches(cwd: string): Promise<{
85
+ current: string;
86
+ branches: string[];
87
+ }>;
88
+ /**
89
+ * Switch branch
90
+ */
91
+ switchBranch(cwd: string, branch: string): Promise<GitResult>;
92
+ /**
93
+ * Create new branch
94
+ */
95
+ createBranch(cwd: string, branch: string, checkout?: boolean): Promise<GitResult>;
96
+ }
97
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAI9C,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,WAAW;IAI/B;;OAEG;YACW,cAAc;IAS5B;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS9C;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAuF7C;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAe3D;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAe7D;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAwBpE;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAc3C;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAc3C;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBjF;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAuB7D;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAehE;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IA4B7E;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAcnE;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,SAAS,CAAC;CAkB9F"}
package/dist/git.js ADDED
@@ -0,0 +1,320 @@
1
+ /**
2
+ * CloudForge Agent Git Manager
3
+ * Manages Git operations via CLI
4
+ */
5
+ import { exec } from 'child_process';
6
+ import { promisify } from 'util';
7
+ import chalk from 'chalk';
8
+ const execAsync = promisify(exec);
9
+ export class GitManager {
10
+ config;
11
+ constructor(config) {
12
+ this.config = config;
13
+ }
14
+ /**
15
+ * Check if git is available
16
+ */
17
+ async isGitAvailable() {
18
+ try {
19
+ await execAsync('git --version');
20
+ return true;
21
+ }
22
+ catch {
23
+ return false;
24
+ }
25
+ }
26
+ /**
27
+ * Check if path is inside a git repository
28
+ */
29
+ async isGitRepo(cwd) {
30
+ try {
31
+ await execAsync('git rev-parse --is-inside-work-tree', { cwd });
32
+ return true;
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ }
38
+ /**
39
+ * Get git status
40
+ */
41
+ async status(cwd) {
42
+ if (this.config.debug) {
43
+ console.log(chalk.gray(`Git status: ${cwd}`));
44
+ }
45
+ const isRepo = await this.isGitRepo(cwd);
46
+ if (!isRepo) {
47
+ return {
48
+ branch: '',
49
+ isRepo: false,
50
+ modified: [],
51
+ staged: [],
52
+ untracked: [],
53
+ ahead: 0,
54
+ behind: 0,
55
+ };
56
+ }
57
+ try {
58
+ // Get branch name
59
+ const { stdout: branchOut } = await execAsync('git branch --show-current', { cwd });
60
+ const branch = branchOut.trim();
61
+ // Get status with porcelain format
62
+ const { stdout: statusOut } = await execAsync('git status --porcelain -u', { cwd });
63
+ const modified = [];
64
+ const staged = [];
65
+ const untracked = [];
66
+ statusOut.split('\n').filter(Boolean).forEach(line => {
67
+ const indexStatus = line[0];
68
+ const workingStatus = line[1];
69
+ const file = line.slice(3);
70
+ // Staged changes (index status)
71
+ if (indexStatus !== ' ' && indexStatus !== '?') {
72
+ staged.push(file);
73
+ }
74
+ // Modified in working tree
75
+ if (workingStatus === 'M' || workingStatus === 'D') {
76
+ modified.push(file);
77
+ }
78
+ // Untracked files
79
+ if (indexStatus === '?' && workingStatus === '?') {
80
+ untracked.push(file);
81
+ }
82
+ });
83
+ // Get ahead/behind count
84
+ let ahead = 0;
85
+ let behind = 0;
86
+ try {
87
+ const { stdout: trackingOut } = await execAsync('git rev-list --left-right --count HEAD...@{upstream}', { cwd });
88
+ const [aheadStr, behindStr] = trackingOut.trim().split('\t');
89
+ ahead = parseInt(aheadStr, 10) || 0;
90
+ behind = parseInt(behindStr, 10) || 0;
91
+ }
92
+ catch {
93
+ // No upstream tracking, ignore
94
+ }
95
+ return {
96
+ branch,
97
+ isRepo: true,
98
+ modified,
99
+ staged,
100
+ untracked,
101
+ ahead,
102
+ behind,
103
+ };
104
+ }
105
+ catch (err) {
106
+ console.error(chalk.red('Git status error:'), err);
107
+ throw err;
108
+ }
109
+ }
110
+ /**
111
+ * Stage files
112
+ */
113
+ async add(cwd, files) {
114
+ if (this.config.debug) {
115
+ console.log(chalk.gray(`Git add: ${files.join(', ')}`));
116
+ }
117
+ try {
118
+ const fileArgs = files.map(f => `"${f}"`).join(' ');
119
+ await execAsync(`git add ${fileArgs}`, { cwd });
120
+ return { success: true, message: `Staged ${files.length} file(s)` };
121
+ }
122
+ catch (err) {
123
+ const error = err;
124
+ return { success: false, error: error.stderr || error.message };
125
+ }
126
+ }
127
+ /**
128
+ * Unstage files
129
+ */
130
+ async reset(cwd, files) {
131
+ if (this.config.debug) {
132
+ console.log(chalk.gray(`Git reset: ${files.join(', ')}`));
133
+ }
134
+ try {
135
+ const fileArgs = files.map(f => `"${f}"`).join(' ');
136
+ await execAsync(`git reset HEAD ${fileArgs}`, { cwd });
137
+ return { success: true, message: `Unstaged ${files.length} file(s)` };
138
+ }
139
+ catch (err) {
140
+ const error = err;
141
+ return { success: false, error: error.stderr || error.message };
142
+ }
143
+ }
144
+ /**
145
+ * Commit staged changes
146
+ */
147
+ async commit(cwd, message) {
148
+ if (this.config.debug) {
149
+ console.log(chalk.gray(`Git commit: ${message}`));
150
+ }
151
+ try {
152
+ // Use -m with properly escaped message
153
+ const escapedMessage = message.replace(/"/g, '\\"');
154
+ await execAsync(`git commit -m "${escapedMessage}"`, { cwd });
155
+ // Get the commit hash
156
+ const { stdout: hashOut } = await execAsync('git rev-parse --short HEAD', { cwd });
157
+ const hash = hashOut.trim();
158
+ return { success: true, hash, message: `Committed: ${hash}` };
159
+ }
160
+ catch (err) {
161
+ const error = err;
162
+ return { success: false, error: error.stderr || error.message };
163
+ }
164
+ }
165
+ /**
166
+ * Pull from remote
167
+ */
168
+ async pull(cwd) {
169
+ if (this.config.debug) {
170
+ console.log(chalk.gray('Git pull'));
171
+ }
172
+ try {
173
+ const { stdout } = await execAsync('git pull', { cwd });
174
+ return { success: true, message: stdout.trim() || 'Already up to date' };
175
+ }
176
+ catch (err) {
177
+ const error = err;
178
+ return { success: false, error: error.stderr || error.message };
179
+ }
180
+ }
181
+ /**
182
+ * Push to remote
183
+ */
184
+ async push(cwd) {
185
+ if (this.config.debug) {
186
+ console.log(chalk.gray('Git push'));
187
+ }
188
+ try {
189
+ const { stdout } = await execAsync('git push', { cwd });
190
+ return { success: true, message: stdout.trim() || 'Push successful' };
191
+ }
192
+ catch (err) {
193
+ const error = err;
194
+ return { success: false, error: error.stderr || error.message };
195
+ }
196
+ }
197
+ /**
198
+ * Get diff
199
+ */
200
+ async diff(cwd, file, staged = false) {
201
+ if (this.config.debug) {
202
+ console.log(chalk.gray(`Git diff: ${file || 'all'}, staged=${staged}`));
203
+ }
204
+ try {
205
+ const stagedFlag = staged ? '--cached' : '';
206
+ const fileArg = file ? `"${file}"` : '';
207
+ const { stdout } = await execAsync(`git diff ${stagedFlag} ${fileArg}`.trim(), { cwd, maxBuffer: 5 * 1024 * 1024 } // 5MB buffer for large diffs
208
+ );
209
+ return { file, diff: stdout };
210
+ }
211
+ catch (err) {
212
+ const error = err;
213
+ throw new Error(error.stderr || error.message);
214
+ }
215
+ }
216
+ /**
217
+ * Get commit log
218
+ */
219
+ async log(cwd, limit = 20) {
220
+ if (this.config.debug) {
221
+ console.log(chalk.gray(`Git log: limit=${limit}`));
222
+ }
223
+ try {
224
+ // Use a custom format for easy parsing
225
+ const format = '%H|%h|%an|%aI|%s';
226
+ const { stdout } = await execAsync(`git log -n ${limit} --format="${format}"`, { cwd });
227
+ return stdout.trim().split('\n').filter(Boolean).map(line => {
228
+ const [hash, shortHash, author, date, message] = line.split('|');
229
+ return { hash, shortHash, author, date, message };
230
+ });
231
+ }
232
+ catch (err) {
233
+ const error = err;
234
+ throw new Error(error.stderr || error.message);
235
+ }
236
+ }
237
+ /**
238
+ * Discard changes in working directory
239
+ */
240
+ async checkout(cwd, files) {
241
+ if (this.config.debug) {
242
+ console.log(chalk.gray(`Git checkout: ${files.join(', ')}`));
243
+ }
244
+ try {
245
+ const fileArgs = files.map(f => `"${f}"`).join(' ');
246
+ await execAsync(`git checkout -- ${fileArgs}`, { cwd });
247
+ return { success: true, message: `Discarded changes in ${files.length} file(s)` };
248
+ }
249
+ catch (err) {
250
+ const error = err;
251
+ return { success: false, error: error.stderr || error.message };
252
+ }
253
+ }
254
+ /**
255
+ * Get list of branches
256
+ */
257
+ async branches(cwd) {
258
+ if (this.config.debug) {
259
+ console.log(chalk.gray('Git branches'));
260
+ }
261
+ try {
262
+ const { stdout } = await execAsync('git branch', { cwd });
263
+ const lines = stdout.trim().split('\n').filter(Boolean);
264
+ let current = '';
265
+ const branches = [];
266
+ lines.forEach(line => {
267
+ const isCurrent = line.startsWith('*');
268
+ const name = line.replace(/^\*?\s+/, '').trim();
269
+ branches.push(name);
270
+ if (isCurrent) {
271
+ current = name;
272
+ }
273
+ });
274
+ return { current, branches };
275
+ }
276
+ catch (err) {
277
+ const error = err;
278
+ throw new Error(error.stderr || error.message);
279
+ }
280
+ }
281
+ /**
282
+ * Switch branch
283
+ */
284
+ async switchBranch(cwd, branch) {
285
+ if (this.config.debug) {
286
+ console.log(chalk.gray(`Git switch: ${branch}`));
287
+ }
288
+ try {
289
+ await execAsync(`git checkout "${branch}"`, { cwd });
290
+ return { success: true, message: `Switched to branch '${branch}'` };
291
+ }
292
+ catch (err) {
293
+ const error = err;
294
+ return { success: false, error: error.stderr || error.message };
295
+ }
296
+ }
297
+ /**
298
+ * Create new branch
299
+ */
300
+ async createBranch(cwd, branch, checkout = true) {
301
+ if (this.config.debug) {
302
+ console.log(chalk.gray(`Git create branch: ${branch}`));
303
+ }
304
+ try {
305
+ if (checkout) {
306
+ await execAsync(`git checkout -b "${branch}"`, { cwd });
307
+ return { success: true, message: `Created and switched to branch '${branch}'` };
308
+ }
309
+ else {
310
+ await execAsync(`git branch "${branch}"`, { cwd });
311
+ return { success: true, message: `Created branch '${branch}'` };
312
+ }
313
+ }
314
+ catch (err) {
315
+ const error = err;
316
+ return { success: false, error: error.stderr || error.message };
317
+ }
318
+ }
319
+ }
320
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CloudForge Agent
4
+ * Connects your server to CloudForge for remote terminal access
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}
package/dist/index.js ADDED
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CloudForge Agent
4
+ * Connects your server to CloudForge for remote terminal access
5
+ */
6
+ import { Command } from 'commander';
7
+ import chalk from 'chalk';
8
+ import { createConfig, VERSION, getSystemInfo } from './config.js';
9
+ import { WebSocketManager } from './websocket.js';
10
+ import { TerminalManager } from './terminal.js';
11
+ import { FileManager } from './files.js';
12
+ import { GitManager } from './git.js';
13
+ const program = new Command();
14
+ program
15
+ .name('cloudforge-agent')
16
+ .description('CloudForge Agent - Connect your server to CloudForge')
17
+ .version(VERSION)
18
+ .option('-t, --token <token>', 'Agent token from CloudForge dashboard')
19
+ .option('-s, --server <url>', 'CloudForge server URL (default: https://cloud-forge.me)')
20
+ .option('-d, --debug', 'Enable debug logging')
21
+ .action(async (options) => {
22
+ console.log(chalk.cyan(`
23
+ _____ _ _ _____
24
+ / ____| | | | ___|
25
+ | | | | ___ _ _ __| | |_ ___ _ __ __ _ ___
26
+ | | | |/ _ \\| | | |/ _\` | _/ _ \\| '__/ _\` |/ _ \\
27
+ | |____| | (_) | |_| | (_| | || (_) | | | (_| | __/
28
+ \\_____|_|\\___/ \\__,_|\\__,_\\_| \\___/|_| \\__, |\\___|
29
+ __/ |
30
+ |___/
31
+ `));
32
+ console.log(chalk.gray(` Agent v${VERSION}`));
33
+ console.log();
34
+ try {
35
+ // Create configuration
36
+ const config = createConfig({
37
+ token: options.token,
38
+ serverUrl: options.server,
39
+ debug: options.debug,
40
+ });
41
+ if (config.debug) {
42
+ console.log(chalk.gray('Debug mode enabled'));
43
+ console.log(chalk.gray(`Server URL: ${config.serverUrl}`));
44
+ }
45
+ // Get system info
46
+ const systemInfo = getSystemInfo();
47
+ console.log(chalk.gray(`System: ${systemInfo.os}`));
48
+ console.log(chalk.gray(`Hostname: ${systemInfo.hostname}`));
49
+ console.log(chalk.gray(`Shell: ${systemInfo.shell}`));
50
+ console.log();
51
+ // Create terminal manager
52
+ const terminalManager = new TerminalManager(config);
53
+ // Create file manager
54
+ const fileManager = new FileManager(config);
55
+ // Create git manager
56
+ const gitManager = new GitManager(config);
57
+ // Create and connect WebSocket manager
58
+ const wsManager = new WebSocketManager(config, terminalManager, fileManager, gitManager);
59
+ // Handle graceful shutdown
60
+ const shutdown = async () => {
61
+ console.log();
62
+ console.log(chalk.yellow('Shutting down agent...'));
63
+ terminalManager.killAll();
64
+ wsManager.disconnect();
65
+ console.log(chalk.green('Agent stopped.'));
66
+ process.exit(0);
67
+ };
68
+ process.on('SIGINT', shutdown);
69
+ process.on('SIGTERM', shutdown);
70
+ // Connect to CloudForge
71
+ console.log(chalk.yellow('Connecting to CloudForge...'));
72
+ await wsManager.connect();
73
+ }
74
+ catch (err) {
75
+ console.error(chalk.red('Error:'), err instanceof Error ? err.message : String(err));
76
+ process.exit(1);
77
+ }
78
+ });
79
+ program.parse();
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * CloudForge Agent Terminal Manager
3
+ * Manages PTY terminal sessions
4
+ */
5
+ import { type IPty } from 'node-pty';
6
+ import type { AgentConfig } from './config.js';
7
+ export interface TerminalSession {
8
+ pty: IPty;
9
+ sessionId: string;
10
+ onData: (callback: (data: string) => void) => void;
11
+ onExit: (callback: (exitCode: number) => void) => void;
12
+ write: (data: string) => void;
13
+ resize: (cols: number, rows: number) => void;
14
+ kill: () => void;
15
+ }
16
+ export declare class TerminalManager {
17
+ private sessions;
18
+ private config;
19
+ constructor(config: AgentConfig);
20
+ /**
21
+ * Spawn a new terminal session
22
+ */
23
+ spawn(sessionId: string, shell: string, cols: number, rows: number, cwd?: string): TerminalSession;
24
+ /**
25
+ * Get a terminal session by ID
26
+ */
27
+ get(sessionId: string): TerminalSession | undefined;
28
+ /**
29
+ * Check if a session exists
30
+ */
31
+ has(sessionId: string): boolean;
32
+ /**
33
+ * Remove a terminal session
34
+ */
35
+ remove(sessionId: string): boolean;
36
+ /**
37
+ * Kill and remove a terminal session
38
+ */
39
+ kill(sessionId: string): boolean;
40
+ /**
41
+ * Kill all terminal sessions
42
+ */
43
+ killAll(): void;
44
+ /**
45
+ * Get the number of active sessions
46
+ */
47
+ get count(): number;
48
+ /**
49
+ * Get all session IDs
50
+ */
51
+ get sessionIds(): string[];
52
+ /**
53
+ * Get the current working directory of a terminal session.
54
+ * Uses /proc on Linux, lsof on macOS with child process tree traversal.
55
+ */
56
+ getCwd(sessionId: string): Promise<string | null>;
57
+ /**
58
+ * Get cwd from a child process (Linux /proc)
59
+ */
60
+ private getChildCwd;
61
+ }
62
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAY,EAAE,KAAK,IAAI,EAAE,MAAM,UAAU,CAAA;AAKzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAI9C,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,IAAI,CAAA;IACT,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAA;IAClD,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAA;IACtD,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C,IAAI,EAAE,MAAM,IAAI,CAAA;CACjB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,WAAW;IAI/B;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe;IA2ElG;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAInD;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/B;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAUhC;;OAEG;IACH,OAAO,IAAI,IAAI;IAUf;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,EAAE,CAEzB;IAED;;;OAGG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkDvD;;OAEG;YACW,WAAW;CAgB1B"}