@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.
Files changed (74) hide show
  1. package/README.md +110 -0
  2. package/dist/commands/doctor.d.ts +3 -0
  3. package/dist/commands/doctor.d.ts.map +1 -0
  4. package/dist/commands/doctor.js +277 -0
  5. package/dist/commands/doctor.js.map +1 -0
  6. package/dist/commands/hooks.d.ts +3 -0
  7. package/dist/commands/hooks.d.ts.map +1 -0
  8. package/dist/commands/hooks.js +127 -0
  9. package/dist/commands/hooks.js.map +1 -0
  10. package/dist/commands/init.d.ts +3 -0
  11. package/dist/commands/init.d.ts.map +1 -0
  12. package/dist/commands/init.js +116 -0
  13. package/dist/commands/init.js.map +1 -0
  14. package/dist/commands/logs.d.ts +3 -0
  15. package/dist/commands/logs.d.ts.map +1 -0
  16. package/dist/commands/logs.js +38 -0
  17. package/dist/commands/logs.js.map +1 -0
  18. package/dist/commands/service.d.ts +3 -0
  19. package/dist/commands/service.d.ts.map +1 -0
  20. package/dist/commands/service.js +235 -0
  21. package/dist/commands/service.js.map +1 -0
  22. package/dist/commands/start.d.ts +3 -0
  23. package/dist/commands/start.d.ts.map +1 -0
  24. package/dist/commands/start.js +109 -0
  25. package/dist/commands/start.js.map +1 -0
  26. package/dist/commands/status.d.ts +3 -0
  27. package/dist/commands/status.d.ts.map +1 -0
  28. package/dist/commands/status.js +62 -0
  29. package/dist/commands/status.js.map +1 -0
  30. package/dist/commands/stop.d.ts +3 -0
  31. package/dist/commands/stop.d.ts.map +1 -0
  32. package/dist/commands/stop.js +23 -0
  33. package/dist/commands/stop.js.map +1 -0
  34. package/dist/commands/update.d.ts +3 -0
  35. package/dist/commands/update.d.ts.map +1 -0
  36. package/dist/commands/update.js +121 -0
  37. package/dist/commands/update.js.map +1 -0
  38. package/dist/hooks/installer.d.ts +36 -0
  39. package/dist/hooks/installer.d.ts.map +1 -0
  40. package/dist/hooks/installer.js +175 -0
  41. package/dist/hooks/installer.js.map +1 -0
  42. package/dist/index.d.ts +3 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +38 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/lib/config.d.ts +46 -0
  47. package/dist/lib/config.d.ts.map +1 -0
  48. package/dist/lib/config.js +88 -0
  49. package/dist/lib/config.js.map +1 -0
  50. package/dist/lib/paths.d.ts +34 -0
  51. package/dist/lib/paths.d.ts.map +1 -0
  52. package/dist/lib/paths.js +76 -0
  53. package/dist/lib/paths.js.map +1 -0
  54. package/dist/lib/prerequisites.d.ts +36 -0
  55. package/dist/lib/prerequisites.d.ts.map +1 -0
  56. package/dist/lib/prerequisites.js +181 -0
  57. package/dist/lib/prerequisites.js.map +1 -0
  58. package/dist/lib/process.d.ts +39 -0
  59. package/dist/lib/process.d.ts.map +1 -0
  60. package/dist/lib/process.js +188 -0
  61. package/dist/lib/process.js.map +1 -0
  62. package/dist/service/index.d.ts +44 -0
  63. package/dist/service/index.d.ts.map +1 -0
  64. package/dist/service/index.js +18 -0
  65. package/dist/service/index.js.map +1 -0
  66. package/dist/service/launchd.d.ts +18 -0
  67. package/dist/service/launchd.d.ts.map +1 -0
  68. package/dist/service/launchd.js +208 -0
  69. package/dist/service/launchd.js.map +1 -0
  70. package/dist/service/systemd.d.ts +18 -0
  71. package/dist/service/systemd.d.ts.map +1 -0
  72. package/dist/service/systemd.js +196 -0
  73. package/dist/service/systemd.js.map +1 -0
  74. 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"}