@vibecompany/247-cli 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/README.md +110 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +277 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/hooks.d.ts +3 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +127 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +116 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/logs.d.ts +3 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +38 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/service.d.ts +3 -0
- package/dist/commands/service.d.ts.map +1 -0
- package/dist/commands/service.js +235 -0
- package/dist/commands/service.js.map +1 -0
- package/dist/commands/start.d.ts +3 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +109 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +62 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +3 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +23 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +121 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/hooks/installer.d.ts +36 -0
- package/dist/hooks/installer.d.ts.map +1 -0
- package/dist/hooks/installer.js +175 -0
- package/dist/hooks/installer.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +46 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +88 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/paths.d.ts +34 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +76 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/prerequisites.d.ts +36 -0
- package/dist/lib/prerequisites.d.ts.map +1 -0
- package/dist/lib/prerequisites.js +181 -0
- package/dist/lib/prerequisites.js.map +1 -0
- package/dist/lib/process.d.ts +39 -0
- package/dist/lib/process.d.ts.map +1 -0
- package/dist/lib/process.js +188 -0
- package/dist/lib/process.js.map +1 -0
- package/dist/service/index.d.ts +44 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/index.js +18 -0
- package/dist/service/index.js.map +1 -0
- package/dist/service/launchd.d.ts +18 -0
- package/dist/service/launchd.d.ts.map +1 -0
- package/dist/service/launchd.js +208 -0
- package/dist/service/launchd.js.map +1 -0
- package/dist/service/systemd.d.ts +18 -0
- package/dist/service/systemd.d.ts.map +1 -0
- package/dist/service/systemd.js +196 -0
- package/dist/service/systemd.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface PrerequisiteCheck {
|
|
2
|
+
name: string;
|
|
3
|
+
status: 'ok' | 'warn' | 'error';
|
|
4
|
+
message: string;
|
|
5
|
+
required: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Check if Node.js version is sufficient
|
|
9
|
+
*/
|
|
10
|
+
export declare function checkNodeVersion(): PrerequisiteCheck;
|
|
11
|
+
/**
|
|
12
|
+
* Check if tmux is installed
|
|
13
|
+
*/
|
|
14
|
+
export declare function checkTmux(): PrerequisiteCheck;
|
|
15
|
+
/**
|
|
16
|
+
* Check platform compatibility
|
|
17
|
+
*/
|
|
18
|
+
export declare function checkPlatform(): PrerequisiteCheck;
|
|
19
|
+
/**
|
|
20
|
+
* Check if a port is available
|
|
21
|
+
*/
|
|
22
|
+
export declare function checkPort(port: number): Promise<PrerequisiteCheck>;
|
|
23
|
+
/**
|
|
24
|
+
* Run all prerequisite checks
|
|
25
|
+
*/
|
|
26
|
+
export declare function checkAllPrerequisites(port?: number): Promise<PrerequisiteCheck[]>;
|
|
27
|
+
/**
|
|
28
|
+
* Check if all required prerequisites are met
|
|
29
|
+
*/
|
|
30
|
+
export declare function allRequiredMet(checks: PrerequisiteCheck[]): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Check native dependencies (node-pty, better-sqlite3)
|
|
33
|
+
*/
|
|
34
|
+
export declare function checkNativeDeps(): Promise<PrerequisiteCheck>;
|
|
35
|
+
export declare const checkNode: typeof checkNodeVersion;
|
|
36
|
+
//# sourceMappingURL=prerequisites.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prerequisites.d.ts","sourceRoot":"","sources":["../../src/lib/prerequisites.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,iBAAiB,CA4BpD;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,iBAAiB,CAsB7C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,iBAAiB,CA2BjD;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkCxE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAYvF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAInE;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAgClE;AAGD,eAAO,MAAM,SAAS,yBAAmB,CAAC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { platform } from 'os';
|
|
3
|
+
import * as net from 'net';
|
|
4
|
+
/**
|
|
5
|
+
* Check if Node.js version is sufficient
|
|
6
|
+
*/
|
|
7
|
+
export function checkNodeVersion() {
|
|
8
|
+
const version = process.version;
|
|
9
|
+
const major = parseInt(version.slice(1).split('.')[0], 10);
|
|
10
|
+
if (major >= 22) {
|
|
11
|
+
return {
|
|
12
|
+
name: 'Node.js',
|
|
13
|
+
status: 'ok',
|
|
14
|
+
message: version,
|
|
15
|
+
required: true,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if (major >= 18) {
|
|
19
|
+
return {
|
|
20
|
+
name: 'Node.js',
|
|
21
|
+
status: 'warn',
|
|
22
|
+
message: `${version} (recommended: >=22)`,
|
|
23
|
+
required: true,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
name: 'Node.js',
|
|
28
|
+
status: 'error',
|
|
29
|
+
message: `${version} (required: >=22)`,
|
|
30
|
+
required: true,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check if tmux is installed
|
|
35
|
+
*/
|
|
36
|
+
export function checkTmux() {
|
|
37
|
+
try {
|
|
38
|
+
const output = execSync('tmux -V', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
39
|
+
return {
|
|
40
|
+
name: 'tmux',
|
|
41
|
+
status: 'ok',
|
|
42
|
+
message: output.trim(),
|
|
43
|
+
required: true,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
const os = platform();
|
|
48
|
+
const installCmd = os === 'darwin'
|
|
49
|
+
? 'brew install tmux'
|
|
50
|
+
: 'sudo apt install tmux';
|
|
51
|
+
return {
|
|
52
|
+
name: 'tmux',
|
|
53
|
+
status: 'error',
|
|
54
|
+
message: `Not installed. Run: ${installCmd}`,
|
|
55
|
+
required: true,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check platform compatibility
|
|
61
|
+
*/
|
|
62
|
+
export function checkPlatform() {
|
|
63
|
+
const os = platform();
|
|
64
|
+
if (os === 'darwin') {
|
|
65
|
+
return {
|
|
66
|
+
name: 'Platform',
|
|
67
|
+
status: 'ok',
|
|
68
|
+
message: 'macOS',
|
|
69
|
+
required: true,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
if (os === 'linux') {
|
|
73
|
+
return {
|
|
74
|
+
name: 'Platform',
|
|
75
|
+
status: 'ok',
|
|
76
|
+
message: 'Linux',
|
|
77
|
+
required: true,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
name: 'Platform',
|
|
82
|
+
status: 'error',
|
|
83
|
+
message: `Unsupported: ${os}. Only macOS and Linux are supported.`,
|
|
84
|
+
required: true,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if a port is available
|
|
89
|
+
*/
|
|
90
|
+
export async function checkPort(port) {
|
|
91
|
+
return new Promise((resolve) => {
|
|
92
|
+
const server = net.createServer();
|
|
93
|
+
server.once('error', (err) => {
|
|
94
|
+
if (err.code === 'EADDRINUSE') {
|
|
95
|
+
resolve({
|
|
96
|
+
name: `Port ${port}`,
|
|
97
|
+
status: 'error',
|
|
98
|
+
message: 'Port is already in use',
|
|
99
|
+
required: false,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
resolve({
|
|
104
|
+
name: `Port ${port}`,
|
|
105
|
+
status: 'warn',
|
|
106
|
+
message: `Could not check: ${err.message}`,
|
|
107
|
+
required: false,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
server.once('listening', () => {
|
|
112
|
+
server.close();
|
|
113
|
+
resolve({
|
|
114
|
+
name: `Port ${port}`,
|
|
115
|
+
status: 'ok',
|
|
116
|
+
message: 'Available',
|
|
117
|
+
required: false,
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
server.listen(port, '127.0.0.1');
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Run all prerequisite checks
|
|
125
|
+
*/
|
|
126
|
+
export async function checkAllPrerequisites(port) {
|
|
127
|
+
const checks = [
|
|
128
|
+
checkPlatform(),
|
|
129
|
+
checkNodeVersion(),
|
|
130
|
+
checkTmux(),
|
|
131
|
+
];
|
|
132
|
+
if (port) {
|
|
133
|
+
checks.push(await checkPort(port));
|
|
134
|
+
}
|
|
135
|
+
return checks;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Check if all required prerequisites are met
|
|
139
|
+
*/
|
|
140
|
+
export function allRequiredMet(checks) {
|
|
141
|
+
return checks
|
|
142
|
+
.filter(c => c.required)
|
|
143
|
+
.every(c => c.status !== 'error');
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Check native dependencies (node-pty, better-sqlite3)
|
|
147
|
+
*/
|
|
148
|
+
export async function checkNativeDeps() {
|
|
149
|
+
const issues = [];
|
|
150
|
+
// Check node-pty
|
|
151
|
+
try {
|
|
152
|
+
await import('@homebridge/node-pty-prebuilt-multiarch');
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
issues.push('node-pty');
|
|
156
|
+
}
|
|
157
|
+
// Check better-sqlite3
|
|
158
|
+
try {
|
|
159
|
+
await import('better-sqlite3');
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
issues.push('better-sqlite3');
|
|
163
|
+
}
|
|
164
|
+
if (issues.length === 0) {
|
|
165
|
+
return {
|
|
166
|
+
name: 'Native modules',
|
|
167
|
+
status: 'ok',
|
|
168
|
+
message: 'All native modules loaded successfully',
|
|
169
|
+
required: true,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
name: 'Native modules',
|
|
174
|
+
status: 'error',
|
|
175
|
+
message: `Failed to load: ${issues.join(', ')}`,
|
|
176
|
+
required: true,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// Aliases for backwards compatibility
|
|
180
|
+
export const checkNode = checkNodeVersion;
|
|
181
|
+
//# sourceMappingURL=prerequisites.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prerequisites.js","sourceRoot":"","sources":["../../src/lib/prerequisites.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if the agent process is running
|
|
3
|
+
*/
|
|
4
|
+
export declare function isAgentRunning(): {
|
|
5
|
+
running: boolean;
|
|
6
|
+
pid?: number;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Start the agent as a background daemon
|
|
10
|
+
*/
|
|
11
|
+
export declare function startAgentDaemon(): Promise<{
|
|
12
|
+
success: boolean;
|
|
13
|
+
pid?: number;
|
|
14
|
+
error?: string;
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* Stop the running agent
|
|
18
|
+
*/
|
|
19
|
+
export declare function stopAgent(): {
|
|
20
|
+
success: boolean;
|
|
21
|
+
error?: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Restart the agent
|
|
25
|
+
*/
|
|
26
|
+
export declare function restartAgent(): Promise<{
|
|
27
|
+
success: boolean;
|
|
28
|
+
pid?: number;
|
|
29
|
+
error?: string;
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* Get agent health status by checking the API
|
|
33
|
+
*/
|
|
34
|
+
export declare function getAgentHealth(port: number): Promise<{
|
|
35
|
+
healthy: boolean;
|
|
36
|
+
sessions?: number;
|
|
37
|
+
error?: string;
|
|
38
|
+
}>;
|
|
39
|
+
//# sourceMappingURL=process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/lib/process.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CA+BnE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA6EpG;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAqDhE;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAUhG;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1D,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAWD"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, unlinkSync, openSync } from 'fs';
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { getAgentPaths, ensureDirectories } from './paths.js';
|
|
5
|
+
import { loadConfig } from './config.js';
|
|
6
|
+
/**
|
|
7
|
+
* Check if the agent process is running
|
|
8
|
+
*/
|
|
9
|
+
export function isAgentRunning() {
|
|
10
|
+
const paths = getAgentPaths();
|
|
11
|
+
if (!existsSync(paths.pidFile)) {
|
|
12
|
+
return { running: false };
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
const pidStr = readFileSync(paths.pidFile, 'utf-8').trim();
|
|
16
|
+
const pid = parseInt(pidStr, 10);
|
|
17
|
+
if (isNaN(pid)) {
|
|
18
|
+
return { running: false };
|
|
19
|
+
}
|
|
20
|
+
// Check if process is actually running
|
|
21
|
+
try {
|
|
22
|
+
process.kill(pid, 0); // Signal 0 just checks if process exists
|
|
23
|
+
return { running: true, pid };
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Process doesn't exist, clean up stale PID file
|
|
27
|
+
try {
|
|
28
|
+
unlinkSync(paths.pidFile);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// Ignore cleanup errors
|
|
32
|
+
}
|
|
33
|
+
return { running: false };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return { running: false };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Start the agent as a background daemon
|
|
42
|
+
*/
|
|
43
|
+
export async function startAgentDaemon() {
|
|
44
|
+
const paths = getAgentPaths();
|
|
45
|
+
const config = loadConfig();
|
|
46
|
+
if (!config) {
|
|
47
|
+
return { success: false, error: 'Configuration not found. Run: 247 init' };
|
|
48
|
+
}
|
|
49
|
+
// Check if already running
|
|
50
|
+
const status = isAgentRunning();
|
|
51
|
+
if (status.running) {
|
|
52
|
+
return { success: false, error: `Agent is already running (PID: ${status.pid})` };
|
|
53
|
+
}
|
|
54
|
+
ensureDirectories();
|
|
55
|
+
// Determine the entry point
|
|
56
|
+
const entryPoint = paths.isDev
|
|
57
|
+
? join(paths.agentRoot, 'src', 'index.ts')
|
|
58
|
+
: join(paths.agentRoot, 'dist', 'index.js');
|
|
59
|
+
if (!existsSync(entryPoint) && !existsSync(entryPoint.replace('.ts', '.js'))) {
|
|
60
|
+
return { success: false, error: `Agent entry point not found: ${entryPoint}` };
|
|
61
|
+
}
|
|
62
|
+
// Prepare log files
|
|
63
|
+
const stdoutLog = join(paths.logDir, 'agent.log');
|
|
64
|
+
const stderrLog = join(paths.logDir, 'agent.error.log');
|
|
65
|
+
const stdout = openSync(stdoutLog, 'a');
|
|
66
|
+
const stderr = openSync(stderrLog, 'a');
|
|
67
|
+
// Build command
|
|
68
|
+
let command;
|
|
69
|
+
let args;
|
|
70
|
+
if (paths.isDev) {
|
|
71
|
+
// Development: use tsx for TypeScript
|
|
72
|
+
command = 'npx';
|
|
73
|
+
args = ['tsx', entryPoint];
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// Production: use node directly
|
|
77
|
+
command = paths.nodePath;
|
|
78
|
+
args = [entryPoint];
|
|
79
|
+
}
|
|
80
|
+
// Spawn detached process
|
|
81
|
+
const child = spawn(command, args, {
|
|
82
|
+
cwd: paths.agentRoot,
|
|
83
|
+
detached: true,
|
|
84
|
+
stdio: ['ignore', stdout, stderr],
|
|
85
|
+
env: {
|
|
86
|
+
...process.env,
|
|
87
|
+
AGENT_247_CONFIG: paths.configPath,
|
|
88
|
+
AGENT_247_DATA: paths.dataDir,
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
if (!child.pid) {
|
|
92
|
+
return { success: false, error: 'Failed to start agent process' };
|
|
93
|
+
}
|
|
94
|
+
// Write PID file
|
|
95
|
+
writeFileSync(paths.pidFile, String(child.pid), 'utf-8');
|
|
96
|
+
// Detach from parent
|
|
97
|
+
child.unref();
|
|
98
|
+
// Wait a moment to check if process started successfully
|
|
99
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
100
|
+
const checkStatus = isAgentRunning();
|
|
101
|
+
if (!checkStatus.running) {
|
|
102
|
+
return { success: false, error: 'Agent process exited immediately. Check logs for errors.' };
|
|
103
|
+
}
|
|
104
|
+
return { success: true, pid: child.pid };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Stop the running agent
|
|
108
|
+
*/
|
|
109
|
+
export function stopAgent() {
|
|
110
|
+
const status = isAgentRunning();
|
|
111
|
+
if (!status.running || !status.pid) {
|
|
112
|
+
return { success: true }; // Already stopped
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
// Send SIGTERM for graceful shutdown
|
|
116
|
+
process.kill(status.pid, 'SIGTERM');
|
|
117
|
+
// Wait for process to exit (max 5 seconds)
|
|
118
|
+
const maxWait = 5000;
|
|
119
|
+
const startTime = Date.now();
|
|
120
|
+
while (Date.now() - startTime < maxWait) {
|
|
121
|
+
try {
|
|
122
|
+
process.kill(status.pid, 0);
|
|
123
|
+
// Still running, wait more
|
|
124
|
+
// Use synchronous wait
|
|
125
|
+
const waitTime = 100;
|
|
126
|
+
const end = Date.now() + waitTime;
|
|
127
|
+
while (Date.now() < end) {
|
|
128
|
+
// Busy wait (not ideal but works for short durations)
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Process exited
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// If still running after timeout, force kill
|
|
137
|
+
try {
|
|
138
|
+
process.kill(status.pid, 0);
|
|
139
|
+
process.kill(status.pid, 'SIGKILL');
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// Process already exited
|
|
143
|
+
}
|
|
144
|
+
// Clean up PID file
|
|
145
|
+
const paths = getAgentPaths();
|
|
146
|
+
if (existsSync(paths.pidFile)) {
|
|
147
|
+
try {
|
|
148
|
+
unlinkSync(paths.pidFile);
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// Ignore cleanup errors
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return { success: true };
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
return { success: false, error: err.message };
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Restart the agent
|
|
162
|
+
*/
|
|
163
|
+
export async function restartAgent() {
|
|
164
|
+
const stopResult = stopAgent();
|
|
165
|
+
if (!stopResult.success) {
|
|
166
|
+
return { success: false, error: `Failed to stop: ${stopResult.error}` };
|
|
167
|
+
}
|
|
168
|
+
// Wait a moment before starting
|
|
169
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
170
|
+
return startAgentDaemon();
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get agent health status by checking the API
|
|
174
|
+
*/
|
|
175
|
+
export async function getAgentHealth(port) {
|
|
176
|
+
try {
|
|
177
|
+
const response = await fetch(`http://localhost:${port}/api/sessions`);
|
|
178
|
+
if (!response.ok) {
|
|
179
|
+
return { healthy: false, error: `HTTP ${response.status}` };
|
|
180
|
+
}
|
|
181
|
+
const sessions = await response.json();
|
|
182
|
+
return { healthy: true, sessions: sessions.length };
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
return { healthy: false, error: err.message };
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/lib/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface ServiceStatus {
|
|
2
|
+
installed: boolean;
|
|
3
|
+
running: boolean;
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
pid?: number;
|
|
6
|
+
configPath?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ServiceInstallOptions {
|
|
9
|
+
startNow?: boolean;
|
|
10
|
+
enableAtBoot?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface ServiceResult {
|
|
13
|
+
success: boolean;
|
|
14
|
+
error?: string;
|
|
15
|
+
configPath?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ServiceManager {
|
|
18
|
+
/** Platform identifier */
|
|
19
|
+
platform: 'macos' | 'linux';
|
|
20
|
+
/** Service identifier */
|
|
21
|
+
serviceName: string;
|
|
22
|
+
/** Get current service status */
|
|
23
|
+
status(): Promise<ServiceStatus>;
|
|
24
|
+
/** Install service configuration */
|
|
25
|
+
install(options?: ServiceInstallOptions): Promise<ServiceResult>;
|
|
26
|
+
/** Uninstall service configuration */
|
|
27
|
+
uninstall(): Promise<ServiceResult>;
|
|
28
|
+
/** Start the service */
|
|
29
|
+
start(): Promise<ServiceResult>;
|
|
30
|
+
/** Stop the service */
|
|
31
|
+
stop(): Promise<ServiceResult>;
|
|
32
|
+
/** Restart the service */
|
|
33
|
+
restart(): Promise<ServiceResult>;
|
|
34
|
+
/** Get log file paths */
|
|
35
|
+
getLogPaths(): {
|
|
36
|
+
stdout: string;
|
|
37
|
+
stderr: string;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create platform-appropriate service manager
|
|
42
|
+
*/
|
|
43
|
+
export declare function createServiceManager(): ServiceManager;
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/service/index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;IAE5B,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IAEpB,iCAAiC;IACjC,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAEjC,oCAAoC;IACpC,OAAO,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAEjE,sCAAsC;IACtC,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAEpC,wBAAwB;IACxB,KAAK,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAEhC,uBAAuB;IACvB,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAE/B,0BAA0B;IAC1B,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAElC,yBAAyB;IACzB,WAAW,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAWrD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { platform } from 'os';
|
|
2
|
+
import { LaunchdService } from './launchd.js';
|
|
3
|
+
import { SystemdService } from './systemd.js';
|
|
4
|
+
/**
|
|
5
|
+
* Create platform-appropriate service manager
|
|
6
|
+
*/
|
|
7
|
+
export function createServiceManager() {
|
|
8
|
+
const os = platform();
|
|
9
|
+
switch (os) {
|
|
10
|
+
case 'darwin':
|
|
11
|
+
return new LaunchdService();
|
|
12
|
+
case 'linux':
|
|
13
|
+
return new SystemdService();
|
|
14
|
+
default:
|
|
15
|
+
throw new Error(`Unsupported platform: ${os}. Only macOS and Linux are supported.`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAkD9C;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEtB,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,EAAE,CAAC;QAC9B,KAAK,OAAO;YACV,OAAO,IAAI,cAAc,EAAE,CAAC;QAC9B;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,uCAAuC,CAAC,CAAC;IACxF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ServiceManager, ServiceStatus, ServiceInstallOptions, ServiceResult } from './index.js';
|
|
2
|
+
export declare class LaunchdService implements ServiceManager {
|
|
3
|
+
platform: "macos";
|
|
4
|
+
serviceName: string;
|
|
5
|
+
private get plistPath();
|
|
6
|
+
status(): Promise<ServiceStatus>;
|
|
7
|
+
install(options?: ServiceInstallOptions): Promise<ServiceResult>;
|
|
8
|
+
uninstall(): Promise<ServiceResult>;
|
|
9
|
+
start(): Promise<ServiceResult>;
|
|
10
|
+
stop(): Promise<ServiceResult>;
|
|
11
|
+
restart(): Promise<ServiceResult>;
|
|
12
|
+
getLogPaths(): {
|
|
13
|
+
stdout: string;
|
|
14
|
+
stderr: string;
|
|
15
|
+
};
|
|
16
|
+
private generatePlist;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=launchd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launchd.d.ts","sourceRoot":"","sources":["../../src/service/launchd.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQtG,qBAAa,cAAe,YAAW,cAAc;IACnD,QAAQ,EAAG,OAAO,CAAU;IAC5B,WAAW,SAAiB;IAE5B,OAAO,KAAK,SAAS,GAEpB;IAEK,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC;IA2BhC,OAAO,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,aAAa,CAAC;IA2DpE,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;IAoBnC,KAAK,IAAI,OAAO,CAAC,aAAa,CAAC;IAS/B,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;IAS9B,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAMvC,WAAW,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAQjD,OAAO,CAAC,aAAa;CA0EtB"}
|