@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.
Files changed (61) hide show
  1. package/dist/commands/doctor.d.ts +2 -0
  2. package/dist/commands/doctor.d.ts.map +1 -0
  3. package/dist/commands/doctor.js +97 -0
  4. package/dist/commands/doctor.js.map +1 -0
  5. package/dist/commands/install.d.ts +2 -0
  6. package/dist/commands/install.d.ts.map +1 -0
  7. package/dist/commands/install.js +19 -0
  8. package/dist/commands/install.js.map +1 -0
  9. package/dist/commands/logs.d.ts +4 -0
  10. package/dist/commands/logs.d.ts.map +1 -0
  11. package/dist/commands/logs.js +21 -0
  12. package/dist/commands/logs.js.map +1 -0
  13. package/dist/commands/start.d.ts +2 -0
  14. package/dist/commands/start.d.ts.map +1 -0
  15. package/dist/commands/start.js +28 -0
  16. package/dist/commands/start.js.map +1 -0
  17. package/dist/commands/status.d.ts +2 -0
  18. package/dist/commands/status.d.ts.map +1 -0
  19. package/dist/commands/status.js +66 -0
  20. package/dist/commands/status.js.map +1 -0
  21. package/dist/commands/stop.d.ts +2 -0
  22. package/dist/commands/stop.d.ts.map +1 -0
  23. package/dist/commands/stop.js +30 -0
  24. package/dist/commands/stop.js.map +1 -0
  25. package/dist/commands/upgrade.d.ts +4 -0
  26. package/dist/commands/upgrade.d.ts.map +1 -0
  27. package/dist/commands/upgrade.js +158 -0
  28. package/dist/commands/upgrade.js.map +1 -0
  29. package/dist/installer/admin-creator.d.ts +19 -0
  30. package/dist/installer/admin-creator.d.ts.map +1 -0
  31. package/dist/installer/admin-creator.js +34 -0
  32. package/dist/installer/admin-creator.js.map +1 -0
  33. package/dist/installer/config-writer.d.ts +16 -0
  34. package/dist/installer/config-writer.d.ts.map +1 -0
  35. package/dist/installer/config-writer.js +61 -0
  36. package/dist/installer/config-writer.js.map +1 -0
  37. package/dist/installer/db-initializer.d.ts +18 -0
  38. package/dist/installer/db-initializer.d.ts.map +1 -0
  39. package/dist/installer/db-initializer.js +81 -0
  40. package/dist/installer/db-initializer.js.map +1 -0
  41. package/dist/installer/env-checker.d.ts +44 -0
  42. package/dist/installer/env-checker.d.ts.map +1 -0
  43. package/dist/installer/env-checker.js +135 -0
  44. package/dist/installer/env-checker.js.map +1 -0
  45. package/dist/installer/secret-gen.d.ts +27 -0
  46. package/dist/installer/secret-gen.d.ts.map +1 -0
  47. package/dist/installer/secret-gen.js +35 -0
  48. package/dist/installer/secret-gen.js.map +1 -0
  49. package/dist/installer/wizard.d.ts +12 -0
  50. package/dist/installer/wizard.d.ts.map +1 -0
  51. package/dist/installer/wizard.js +213 -0
  52. package/dist/installer/wizard.js.map +1 -0
  53. package/dist/main.d.ts +3 -0
  54. package/dist/main.d.ts.map +1 -0
  55. package/dist/main.js +49 -0
  56. package/dist/main.js.map +1 -0
  57. package/dist/process-manager.d.ts +36 -0
  58. package/dist/process-manager.d.ts.map +1 -0
  59. package/dist/process-manager.js +111 -0
  60. package/dist/process-manager.js.map +1 -0
  61. 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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=main.d.ts.map
@@ -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
@@ -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":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAoB5E;;;GAGG;AACH,MAAM,OAAO,cAAc;IACjB,MAAM,CAAS;IAEvB,YAAY,SAAiB,KAAK;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAoB;QAC9B,MAAM,IAAI,GAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAEvE,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC;QAED,kFAAkF;QAClF,MAAM,QAAQ,GAA2B;YACvC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,8BAA8B;YACxD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;YAC5B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;YAC5B,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS;YACrC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,aAAa;YACvC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,gBAAgB;YAC1C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY;SAC/C,CAAC;QACF,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtD,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACxB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY;QACrB,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE;gBAClD,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YAEH,MAAM,SAAS,GAAc,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;gBACnC,IAAI,EAAE,IAAI,CAAC,IAAc;gBACzB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAW;gBAC9B,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,SAAS,CAAW;gBACrD,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAW;gBACrC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAW;gBAC3C,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS;oBAC7B,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAI,IAAI,CAAC,OAAO,CAAC,SAAoB;oBACjD,CAAC,CAAC,CAAC;aACN,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,QAAgB,EAAE;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;YACzE,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,IAAc;QACzB,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;YAC9B,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW,CAAC,IAAc,EAAE,GAA2B;QAC7D,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;YAC9B,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;CACF"}
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
+ }