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/LICENSE +21 -0
- package/README.md +125 -0
- package/dist/config.d.ts +35 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +59 -0
- package/dist/config.js.map +1 -0
- package/dist/files.d.ts +84 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +285 -0
- package/dist/files.js.map +1 -0
- package/dist/git.d.ts +97 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +320 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +80 -0
- package/dist/index.js.map +1 -0
- package/dist/terminal.d.ts +62 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +207 -0
- package/dist/terminal.js.map +1 -0
- package/dist/websocket.d.ts +60 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +695 -0
- package/dist/websocket.js.map +1 -0
- package/package.json +45 -0
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
|
package/dist/git.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|