@overlordai/cli 1.0.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/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +97 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/install.d.ts +2 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +19 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/logs.d.ts +4 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +21 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/start.d.ts +2 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +28 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +66 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +2 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +30 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/upgrade.d.ts +4 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +158 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/installer/admin-creator.d.ts +19 -0
- package/dist/installer/admin-creator.d.ts.map +1 -0
- package/dist/installer/admin-creator.js +34 -0
- package/dist/installer/admin-creator.js.map +1 -0
- package/dist/installer/config-writer.d.ts +16 -0
- package/dist/installer/config-writer.d.ts.map +1 -0
- package/dist/installer/config-writer.js +61 -0
- package/dist/installer/config-writer.js.map +1 -0
- package/dist/installer/db-initializer.d.ts +18 -0
- package/dist/installer/db-initializer.d.ts.map +1 -0
- package/dist/installer/db-initializer.js +81 -0
- package/dist/installer/db-initializer.js.map +1 -0
- package/dist/installer/env-checker.d.ts +44 -0
- package/dist/installer/env-checker.d.ts.map +1 -0
- package/dist/installer/env-checker.js +135 -0
- package/dist/installer/env-checker.js.map +1 -0
- package/dist/installer/secret-gen.d.ts +27 -0
- package/dist/installer/secret-gen.d.ts.map +1 -0
- package/dist/installer/secret-gen.js +35 -0
- package/dist/installer/secret-gen.js.map +1 -0
- package/dist/installer/wizard.d.ts +12 -0
- package/dist/installer/wizard.d.ts.map +1 -0
- package/dist/installer/wizard.js +213 -0
- package/dist/installer/wizard.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +49 -0
- package/dist/main.js.map +1 -0
- package/dist/process-manager.d.ts +36 -0
- package/dist/process-manager.d.ts.map +1 -0
- package/dist/process-manager.js +111 -0
- package/dist/process-manager.js.map +1 -0
- package/package.json +34 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import * as p from '@clack/prompts';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import * as os from 'node:os';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { EnvChecker } from './env-checker.js';
|
|
6
|
+
import { SecretGenerator } from './secret-gen.js';
|
|
7
|
+
import { ConfigWriter } from './config-writer.js';
|
|
8
|
+
import { DbInitializer } from './db-initializer.js';
|
|
9
|
+
import { AdminCreator } from './admin-creator.js';
|
|
10
|
+
/**
|
|
11
|
+
* 10-step interactive installation wizard using @clack/prompts.
|
|
12
|
+
*/
|
|
13
|
+
export class InstallWizard {
|
|
14
|
+
checker = new EnvChecker();
|
|
15
|
+
secretGen = new SecretGenerator();
|
|
16
|
+
configWriter = new ConfigWriter();
|
|
17
|
+
dbInit = new DbInitializer();
|
|
18
|
+
adminCreator = new AdminCreator();
|
|
19
|
+
async run() {
|
|
20
|
+
// Step 1: Welcome
|
|
21
|
+
p.note('This wizard will guide you through setting up Overlord.\n' +
|
|
22
|
+
'You can press Ctrl+C at any time to cancel.', 'Welcome to Overlord');
|
|
23
|
+
// Step 2: Check prerequisites
|
|
24
|
+
const s = p.spinner();
|
|
25
|
+
s.start('Checking prerequisites...');
|
|
26
|
+
const gitCheck = this.checker.checkGit();
|
|
27
|
+
if (!gitCheck.ok) {
|
|
28
|
+
s.stop('Prerequisites check failed');
|
|
29
|
+
p.log.error(`Git: ${gitCheck.detail}`);
|
|
30
|
+
throw new Error('Missing required dependency: Git >= 2.20');
|
|
31
|
+
}
|
|
32
|
+
const nodeCheck = this.checker.checkNode();
|
|
33
|
+
if (!nodeCheck.ok) {
|
|
34
|
+
s.stop('Prerequisites check failed');
|
|
35
|
+
p.log.error(`Node.js: ${nodeCheck.detail}`);
|
|
36
|
+
throw new Error('Missing required dependency: Node.js >= 20');
|
|
37
|
+
}
|
|
38
|
+
s.stop('Prerequisites OK');
|
|
39
|
+
p.log.success(`Git: ${gitCheck.detail}`);
|
|
40
|
+
p.log.success(`Node.js: ${nodeCheck.detail}`);
|
|
41
|
+
// Optional CLI checks (non-blocking)
|
|
42
|
+
const claudeCheck = this.checker.checkClaudeCli();
|
|
43
|
+
const cursorCheck = this.checker.checkCursorCli();
|
|
44
|
+
const codeCheck = this.checker.checkCodeCli();
|
|
45
|
+
if (claudeCheck.ok)
|
|
46
|
+
p.log.success(`claude CLI: found`);
|
|
47
|
+
else
|
|
48
|
+
p.log.warn('claude CLI: not found (optional)');
|
|
49
|
+
if (cursorCheck.ok)
|
|
50
|
+
p.log.success(`agent CLI: found`);
|
|
51
|
+
else
|
|
52
|
+
p.log.warn('agent CLI: not found (optional)');
|
|
53
|
+
if (codeCheck.ok)
|
|
54
|
+
p.log.success(`code CLI: found`);
|
|
55
|
+
else
|
|
56
|
+
p.log.warn('code CLI: not found (optional)');
|
|
57
|
+
// Step 3: Choose install directory
|
|
58
|
+
const installDir = await p.text({
|
|
59
|
+
message: 'Installation directory:',
|
|
60
|
+
placeholder: path.join(os.homedir(), '.overlord'),
|
|
61
|
+
defaultValue: path.join(os.homedir(), '.overlord'),
|
|
62
|
+
validate: (value) => {
|
|
63
|
+
if (!value)
|
|
64
|
+
return 'Directory is required';
|
|
65
|
+
if (!path.isAbsolute(value))
|
|
66
|
+
return 'Must be an absolute path';
|
|
67
|
+
return undefined;
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
if (p.isCancel(installDir))
|
|
71
|
+
throw new Error('cancelled');
|
|
72
|
+
// Check disk space for chosen directory
|
|
73
|
+
const diskCheck = this.checker.checkDiskSpace(path.dirname(installDir));
|
|
74
|
+
if (!diskCheck.ok) {
|
|
75
|
+
p.log.error(`Disk space: ${diskCheck.detail}`);
|
|
76
|
+
throw new Error('Insufficient disk space');
|
|
77
|
+
}
|
|
78
|
+
p.log.success(`Disk space: ${diskCheck.detail}`);
|
|
79
|
+
// Step 4: Generate secrets
|
|
80
|
+
const secrets = this.secretGen.generateAll();
|
|
81
|
+
p.log.success('Secrets generated (JWT_SECRET, WORKER_JWT_SECRET, ENCRYPTION_KEY)');
|
|
82
|
+
// Step 5: Configure Redis URL
|
|
83
|
+
const redisUrl = await p.text({
|
|
84
|
+
message: 'Redis URL:',
|
|
85
|
+
placeholder: 'redis://localhost:6379/0',
|
|
86
|
+
defaultValue: 'redis://localhost:6379/0',
|
|
87
|
+
validate: (value) => {
|
|
88
|
+
if (!value)
|
|
89
|
+
return 'Redis URL is required';
|
|
90
|
+
if (!value.startsWith('redis://') && !value.startsWith('rediss://')) {
|
|
91
|
+
return 'Must start with redis:// or rediss://';
|
|
92
|
+
}
|
|
93
|
+
return undefined;
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
if (p.isCancel(redisUrl))
|
|
97
|
+
throw new Error('cancelled');
|
|
98
|
+
// Step 6: Configure DB path
|
|
99
|
+
const dbPath = await p.text({
|
|
100
|
+
message: 'SQLite database path:',
|
|
101
|
+
placeholder: path.join(installDir, 'data', 'overlord.db'),
|
|
102
|
+
defaultValue: path.join(installDir, 'data', 'overlord.db'),
|
|
103
|
+
validate: (value) => {
|
|
104
|
+
if (!value)
|
|
105
|
+
return 'Database path is required';
|
|
106
|
+
if (!path.isAbsolute(value))
|
|
107
|
+
return 'Must be an absolute path';
|
|
108
|
+
return undefined;
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
if (p.isCancel(dbPath))
|
|
112
|
+
throw new Error('cancelled');
|
|
113
|
+
// Step 7: Write .env file
|
|
114
|
+
const envPath = path.join(installDir, '.env');
|
|
115
|
+
const envConfig = {
|
|
116
|
+
NODE_ENV: 'production',
|
|
117
|
+
INSTALL_DIR: installDir,
|
|
118
|
+
DATABASE_PATH: dbPath,
|
|
119
|
+
REDIS_URL: redisUrl,
|
|
120
|
+
JWT_SECRET: secrets.jwtSecret,
|
|
121
|
+
WORKER_JWT_SECRET: secrets.workerJwtSecret,
|
|
122
|
+
ENCRYPTION_KEY: secrets.encryptionKey,
|
|
123
|
+
SERVER_PORT: '9000',
|
|
124
|
+
WORKER_DIAG_PORT: '9100',
|
|
125
|
+
};
|
|
126
|
+
const writeSpinner = p.spinner();
|
|
127
|
+
writeSpinner.start('Writing configuration...');
|
|
128
|
+
this.configWriter.write(envConfig, envPath);
|
|
129
|
+
writeSpinner.stop('Configuration written');
|
|
130
|
+
p.log.success(`.env written to ${envPath} (chmod 600)`);
|
|
131
|
+
// Step 8: Run migrations
|
|
132
|
+
const migrationsDir = path.join(process.cwd(), 'database', 'migrations');
|
|
133
|
+
const migrateSpinner = p.spinner();
|
|
134
|
+
migrateSpinner.start('Initializing database...');
|
|
135
|
+
try {
|
|
136
|
+
this.dbInit.initialize(dbPath, migrationsDir);
|
|
137
|
+
migrateSpinner.stop('Database initialized');
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
migrateSpinner.stop('Database initialization failed');
|
|
141
|
+
p.log.error(err instanceof Error ? err.message : String(err));
|
|
142
|
+
throw err;
|
|
143
|
+
}
|
|
144
|
+
// Step 9: Create admin user
|
|
145
|
+
const adminUsername = await p.text({
|
|
146
|
+
message: 'Admin username:',
|
|
147
|
+
placeholder: 'admin',
|
|
148
|
+
defaultValue: 'admin',
|
|
149
|
+
validate: (value) => {
|
|
150
|
+
if (!value || value.length < 2)
|
|
151
|
+
return 'Username must be at least 2 characters';
|
|
152
|
+
return undefined;
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
if (p.isCancel(adminUsername))
|
|
156
|
+
throw new Error('cancelled');
|
|
157
|
+
const adminPassword = await p.password({
|
|
158
|
+
message: 'Admin password:',
|
|
159
|
+
validate: (value) => {
|
|
160
|
+
if (!value || value.length < 8)
|
|
161
|
+
return 'Password must be at least 8 characters';
|
|
162
|
+
return undefined;
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
if (p.isCancel(adminPassword))
|
|
166
|
+
throw new Error('cancelled');
|
|
167
|
+
const gitName = await p.text({
|
|
168
|
+
message: 'Admin Git name:',
|
|
169
|
+
placeholder: 'Admin',
|
|
170
|
+
defaultValue: 'Admin',
|
|
171
|
+
});
|
|
172
|
+
if (p.isCancel(gitName))
|
|
173
|
+
throw new Error('cancelled');
|
|
174
|
+
const gitEmail = await p.text({
|
|
175
|
+
message: 'Admin Git email:',
|
|
176
|
+
placeholder: 'admin@example.com',
|
|
177
|
+
validate: (value) => {
|
|
178
|
+
if (!value || !value.includes('@'))
|
|
179
|
+
return 'Valid email is required';
|
|
180
|
+
return undefined;
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
if (p.isCancel(gitEmail))
|
|
184
|
+
throw new Error('cancelled');
|
|
185
|
+
const adminSpinner = p.spinner();
|
|
186
|
+
adminSpinner.start('Creating admin account...');
|
|
187
|
+
const adminConfig = {
|
|
188
|
+
username: adminUsername,
|
|
189
|
+
password: adminPassword,
|
|
190
|
+
gitName: gitName,
|
|
191
|
+
gitEmail: gitEmail,
|
|
192
|
+
};
|
|
193
|
+
try {
|
|
194
|
+
await this.adminCreator.create(dbPath, adminConfig);
|
|
195
|
+
adminSpinner.stop('Admin account created');
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
adminSpinner.stop('Failed to create admin account');
|
|
199
|
+
p.log.error(err instanceof Error ? err.message : String(err));
|
|
200
|
+
throw err;
|
|
201
|
+
}
|
|
202
|
+
// Step 10: Complete
|
|
203
|
+
p.note(`Installation directory: ${installDir}\n` +
|
|
204
|
+
`Database: ${dbPath}\n` +
|
|
205
|
+
`Redis: ${redisUrl}\n` +
|
|
206
|
+
`Admin user: ${adminUsername}\n\n` +
|
|
207
|
+
`Next steps:\n` +
|
|
208
|
+
` 1. Run ${chalk.cyan('overlord start')} to start services\n` +
|
|
209
|
+
` 2. Run ${chalk.cyan('overlord status')} to check status\n` +
|
|
210
|
+
` 3. Run ${chalk.cyan('overlord doctor')} to verify setup`, 'Installation Summary');
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/installer/wizard.ts"],"names":[],"mappings":"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"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { installCommand } from './commands/install.js';
|
|
4
|
+
import { startCommand } from './commands/start.js';
|
|
5
|
+
import { stopCommand } from './commands/stop.js';
|
|
6
|
+
import { statusCommand } from './commands/status.js';
|
|
7
|
+
import { logsCommand } from './commands/logs.js';
|
|
8
|
+
import { doctorCommand } from './commands/doctor.js';
|
|
9
|
+
import { upgradeCommand } from './commands/upgrade.js';
|
|
10
|
+
const program = new Command();
|
|
11
|
+
program
|
|
12
|
+
.name('overlord')
|
|
13
|
+
.description('Overlord Operations CLI — server installation, management, and diagnostics')
|
|
14
|
+
.version('1.0.0');
|
|
15
|
+
program
|
|
16
|
+
.command('install')
|
|
17
|
+
.description('Interactive installation wizard')
|
|
18
|
+
.action(installCommand);
|
|
19
|
+
program
|
|
20
|
+
.command('start')
|
|
21
|
+
.description('Start server and worker processes')
|
|
22
|
+
.argument('[component]', 'Component to start (server, worker, or all)', 'all')
|
|
23
|
+
.action(startCommand);
|
|
24
|
+
program
|
|
25
|
+
.command('stop')
|
|
26
|
+
.description('Stop all processes')
|
|
27
|
+
.argument('[component]', 'Component to stop (server, worker, or all)', 'all')
|
|
28
|
+
.action(stopCommand);
|
|
29
|
+
program
|
|
30
|
+
.command('status')
|
|
31
|
+
.description('Show process status table')
|
|
32
|
+
.action(statusCommand);
|
|
33
|
+
program
|
|
34
|
+
.command('logs')
|
|
35
|
+
.description('Tail server/worker logs')
|
|
36
|
+
.argument('[component]', 'Component to show logs for (server, worker)', 'server')
|
|
37
|
+
.option('-n, --lines <number>', 'Number of lines to show', '50')
|
|
38
|
+
.action(logsCommand);
|
|
39
|
+
program
|
|
40
|
+
.command('doctor')
|
|
41
|
+
.description('Run system health checks')
|
|
42
|
+
.action(doctorCommand);
|
|
43
|
+
program
|
|
44
|
+
.command('upgrade')
|
|
45
|
+
.description('Download and apply latest release')
|
|
46
|
+
.option('--rollback', 'Rollback to previous version')
|
|
47
|
+
.action(upgradeCommand);
|
|
48
|
+
program.parse();
|
|
49
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,4EAA4E,CAAC;KACzF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,mCAAmC,CAAC;KAChD,QAAQ,CAAC,aAAa,EAAE,6CAA6C,EAAE,KAAK,CAAC;KAC7E,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oBAAoB,CAAC;KACjC,QAAQ,CAAC,aAAa,EAAE,4CAA4C,EAAE,KAAK,CAAC;KAC5E,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,yBAAyB,CAAC;KACtC,QAAQ,CAAC,aAAa,EAAE,6CAA6C,EAAE,QAAQ,CAAC;KAChF,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,EAAE,IAAI,CAAC;KAC/D,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,YAAY,EAAE,8BAA8B,CAAC;KACpD,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type ChildProcess } from 'node:child_process';
|
|
2
|
+
export interface PM2AppConfig {
|
|
3
|
+
name: string;
|
|
4
|
+
script: string;
|
|
5
|
+
cwd?: string;
|
|
6
|
+
instances?: number;
|
|
7
|
+
env?: Record<string, string>;
|
|
8
|
+
waitReady?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface PM2ProcessInfo {
|
|
11
|
+
name: string;
|
|
12
|
+
pid: number;
|
|
13
|
+
status: string;
|
|
14
|
+
cpu: number;
|
|
15
|
+
memory: number;
|
|
16
|
+
uptime: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Wrapper around PM2 programmatic API via CLI invocation.
|
|
20
|
+
* Uses pm2 commands directly to manage processes.
|
|
21
|
+
*/
|
|
22
|
+
export declare class ProcessManager {
|
|
23
|
+
private pm2Bin;
|
|
24
|
+
constructor(pm2Bin?: string);
|
|
25
|
+
start(config: PM2AppConfig): Promise<void>;
|
|
26
|
+
stop(name: string): Promise<void>;
|
|
27
|
+
restart(name: string): Promise<void>;
|
|
28
|
+
list(): Promise<PM2ProcessInfo[]>;
|
|
29
|
+
logs(name: string, lines?: number): Promise<ChildProcess>;
|
|
30
|
+
dump(): Promise<void>;
|
|
31
|
+
delete(name: string): Promise<void>;
|
|
32
|
+
killDaemon(): Promise<void>;
|
|
33
|
+
private exec;
|
|
34
|
+
private execWithEnv;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=process-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../src/process-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE5E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,GAAE,MAAc;IAI5B,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC1C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpC,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAuBjC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAO7D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,WAAW;CAOpB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { execFileSync, spawn } from 'node:child_process';
|
|
2
|
+
/**
|
|
3
|
+
* Wrapper around PM2 programmatic API via CLI invocation.
|
|
4
|
+
* Uses pm2 commands directly to manage processes.
|
|
5
|
+
*/
|
|
6
|
+
export class ProcessManager {
|
|
7
|
+
pm2Bin;
|
|
8
|
+
constructor(pm2Bin = 'pm2') {
|
|
9
|
+
this.pm2Bin = pm2Bin;
|
|
10
|
+
}
|
|
11
|
+
async start(config) {
|
|
12
|
+
const args = ['start', config.script, '--name', config.name];
|
|
13
|
+
if (config.cwd) {
|
|
14
|
+
args.push('--cwd', config.cwd);
|
|
15
|
+
}
|
|
16
|
+
if (config.instances !== undefined) {
|
|
17
|
+
args.push('-i', String(config.instances));
|
|
18
|
+
}
|
|
19
|
+
if (config.waitReady) {
|
|
20
|
+
args.push('--wait-ready');
|
|
21
|
+
}
|
|
22
|
+
// Build a minimal env for PM2 — never spread process.env to avoid leaking secrets
|
|
23
|
+
const childEnv = {
|
|
24
|
+
PATH: process.env.PATH ?? '/usr/local/bin:/usr/bin:/bin',
|
|
25
|
+
HOME: process.env.HOME ?? '',
|
|
26
|
+
USER: process.env.USER ?? '',
|
|
27
|
+
SHELL: process.env.SHELL ?? '/bin/sh',
|
|
28
|
+
LANG: process.env.LANG ?? 'en_US.UTF-8',
|
|
29
|
+
TERM: process.env.TERM ?? 'xterm-256color',
|
|
30
|
+
NODE_ENV: process.env.NODE_ENV ?? 'production',
|
|
31
|
+
};
|
|
32
|
+
if (config.env) {
|
|
33
|
+
for (const [key, value] of Object.entries(config.env)) {
|
|
34
|
+
childEnv[key] = value;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
this.execWithEnv(args, childEnv);
|
|
38
|
+
}
|
|
39
|
+
async stop(name) {
|
|
40
|
+
try {
|
|
41
|
+
this.exec(['stop', name]);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Process may already be stopped
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async restart(name) {
|
|
48
|
+
this.exec(['reload', name]);
|
|
49
|
+
}
|
|
50
|
+
async list() {
|
|
51
|
+
try {
|
|
52
|
+
const output = execFileSync(this.pm2Bin, ['jlist'], {
|
|
53
|
+
encoding: 'utf-8',
|
|
54
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
55
|
+
});
|
|
56
|
+
const processes = JSON.parse(output);
|
|
57
|
+
return processes.map((proc) => ({
|
|
58
|
+
name: proc.name,
|
|
59
|
+
pid: (proc.pid ?? 0),
|
|
60
|
+
status: (proc.pm2_env?.status ?? 'unknown'),
|
|
61
|
+
cpu: (proc.monit?.cpu ?? 0),
|
|
62
|
+
memory: (proc.monit?.memory ?? 0),
|
|
63
|
+
uptime: proc.pm2_env?.pm_uptime
|
|
64
|
+
? Date.now() - proc.pm2_env.pm_uptime
|
|
65
|
+
: 0,
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async logs(name, lines = 50) {
|
|
73
|
+
const child = spawn(this.pm2Bin, ['logs', name, '--lines', String(lines)], {
|
|
74
|
+
stdio: 'inherit',
|
|
75
|
+
});
|
|
76
|
+
return child;
|
|
77
|
+
}
|
|
78
|
+
async dump() {
|
|
79
|
+
this.exec(['save']);
|
|
80
|
+
}
|
|
81
|
+
async delete(name) {
|
|
82
|
+
try {
|
|
83
|
+
this.exec(['delete', name]);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Process may not exist
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async killDaemon() {
|
|
90
|
+
try {
|
|
91
|
+
this.exec(['kill']);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Daemon may already be dead
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exec(args) {
|
|
98
|
+
execFileSync(this.pm2Bin, args, {
|
|
99
|
+
encoding: 'utf-8',
|
|
100
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
execWithEnv(args, env) {
|
|
104
|
+
execFileSync(this.pm2Bin, args, {
|
|
105
|
+
encoding: 'utf-8',
|
|
106
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
107
|
+
env,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=process-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../src/process-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@overlordai/cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist"
|
|
8
|
+
],
|
|
9
|
+
"bin": {
|
|
10
|
+
"overlord": "./dist/main.js"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"commander": "^13.1.0",
|
|
14
|
+
"@clack/prompts": "^0.10.0",
|
|
15
|
+
"chalk": "^5.4.1",
|
|
16
|
+
"bcrypt": "^6.0.0",
|
|
17
|
+
"better-sqlite3": "^11.0.0",
|
|
18
|
+
"dotenv": "^16.5.0",
|
|
19
|
+
"@overlordai/protocol": "1.0.0"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"typescript": "^5.9.0",
|
|
23
|
+
"@types/node": "^22.0.0",
|
|
24
|
+
"@types/better-sqlite3": "^7.6.0",
|
|
25
|
+
"@types/bcrypt": "^5.0.2",
|
|
26
|
+
"vitest": "^4.0.18"
|
|
27
|
+
},
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsc",
|
|
30
|
+
"start": "node dist/main.js",
|
|
31
|
+
"test": "vitest run",
|
|
32
|
+
"lint": "tsc --noEmit"
|
|
33
|
+
}
|
|
34
|
+
}
|