@redplanethq/corebrain 1.0.0 → 2.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/browser/close.d.ts +10 -0
- package/dist/commands/browser/close.d.ts.map +1 -0
- package/dist/commands/browser/close.js +60 -0
- package/dist/commands/browser/close.js.map +1 -0
- package/dist/commands/browser/command.d.ts +10 -0
- package/dist/commands/browser/command.d.ts.map +1 -0
- package/dist/commands/browser/command.js +67 -0
- package/dist/commands/browser/command.js.map +1 -0
- package/dist/commands/browser/create-profile.d.ts +10 -0
- package/dist/commands/browser/create-profile.d.ts.map +1 -0
- package/dist/commands/browser/create-profile.js +29 -0
- package/dist/commands/browser/create-profile.js.map +1 -0
- package/dist/commands/browser/delete-profile.d.ts +10 -0
- package/dist/commands/browser/delete-profile.d.ts.map +1 -0
- package/dist/commands/browser/delete-profile.js +27 -0
- package/dist/commands/browser/delete-profile.js.map +1 -0
- package/dist/commands/browser/install.d.ts +8 -0
- package/dist/commands/browser/install.d.ts.map +1 -0
- package/dist/commands/browser/install.js +49 -0
- package/dist/commands/browser/install.js.map +1 -0
- package/dist/commands/browser/open.d.ts +12 -0
- package/dist/commands/browser/open.d.ts.map +1 -0
- package/dist/commands/browser/open.js +65 -0
- package/dist/commands/browser/open.js.map +1 -0
- package/dist/commands/browser/status.d.ts +8 -0
- package/dist/commands/browser/status.d.ts.map +1 -0
- package/dist/commands/browser/status.js +48 -0
- package/dist/commands/browser/status.js.map +1 -0
- package/dist/commands/coding/[agent]/config.d.ts +18 -0
- package/dist/commands/coding/[agent]/config.d.ts.map +1 -0
- package/dist/commands/coding/[agent]/config.js +91 -0
- package/dist/commands/coding/[agent]/config.js.map +1 -0
- package/dist/commands/coding/config.d.ts +23 -0
- package/dist/commands/coding/config.d.ts.map +1 -0
- package/dist/commands/coding/config.js +116 -0
- package/dist/commands/coding/config.js.map +1 -0
- package/dist/commands/coding/index.d.ts +8 -0
- package/dist/commands/coding/index.d.ts.map +1 -0
- package/dist/commands/coding/index.js +42 -0
- package/dist/commands/coding/index.js.map +1 -0
- package/dist/commands/coding/remove.d.ts +10 -0
- package/dist/commands/coding/remove.d.ts.map +1 -0
- package/dist/commands/coding/remove.js +37 -0
- package/dist/commands/coding/remove.js.map +1 -0
- package/dist/commands/coding/setup.d.ts +8 -0
- package/dist/commands/coding/setup.d.ts.map +1 -0
- package/dist/commands/coding/setup.js +114 -0
- package/dist/commands/coding/setup.js.map +1 -0
- package/dist/commands/exec/config.d.ts +14 -0
- package/dist/commands/exec/config.d.ts.map +1 -0
- package/dist/commands/exec/config.js +79 -0
- package/dist/commands/exec/config.js.map +1 -0
- package/dist/commands/gateway/config.d.ts +8 -0
- package/dist/commands/gateway/config.d.ts.map +1 -0
- package/dist/commands/gateway/config.js +192 -0
- package/dist/commands/gateway/config.js.map +1 -0
- package/dist/commands/gateway/index.d.ts +14 -0
- package/dist/commands/gateway/index.d.ts.map +1 -0
- package/dist/commands/gateway/index.js +10 -0
- package/dist/commands/gateway/index.js.map +1 -0
- package/dist/commands/gateway/off.d.ts +8 -0
- package/dist/commands/gateway/off.d.ts.map +1 -0
- package/dist/commands/gateway/off.js +70 -0
- package/dist/commands/gateway/off.js.map +1 -0
- package/dist/commands/gateway/on.d.ts +8 -0
- package/dist/commands/gateway/on.d.ts.map +1 -0
- package/dist/commands/gateway/on.js +135 -0
- package/dist/commands/gateway/on.js.map +1 -0
- package/dist/commands/gateway/restart.d.ts +8 -0
- package/dist/commands/gateway/restart.d.ts.map +1 -0
- package/dist/commands/gateway/restart.js +70 -0
- package/dist/commands/gateway/restart.js.map +1 -0
- package/dist/commands/gateway/status.d.ts +8 -0
- package/dist/commands/gateway/status.d.ts.map +1 -0
- package/dist/commands/gateway/status.js +98 -0
- package/dist/commands/gateway/status.js.map +1 -0
- package/dist/commands/gateway/uninstall.d.ts +8 -0
- package/dist/commands/gateway/uninstall.d.ts.map +1 -0
- package/dist/commands/gateway/uninstall.js +80 -0
- package/dist/commands/gateway/uninstall.js.map +1 -0
- package/dist/commands/index.d.ts +1 -5
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/login.d.ts +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/logout.d.ts +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/me.d.ts +1 -1
- package/dist/commands/me.d.ts.map +1 -1
- package/dist/commands/server.d.ts +10 -0
- package/dist/commands/server.d.ts.map +1 -0
- package/dist/commands/server.js +60 -0
- package/dist/commands/server.js.map +1 -0
- package/dist/commands/token.d.ts +1 -1
- package/dist/commands/token.d.ts.map +1 -1
- package/dist/components/error-message.d.ts.map +1 -1
- package/dist/components/error-message.js +6 -1
- package/dist/components/error-message.js.map +1 -1
- package/dist/components/info-message.d.ts.map +1 -1
- package/dist/components/info-message.js +5 -1
- package/dist/components/info-message.js.map +1 -1
- package/dist/components/success-message.d.ts.map +1 -1
- package/dist/components/success-message.js +5 -1
- package/dist/components/success-message.js.map +1 -1
- package/dist/components/warning-message.d.ts +2 -3
- package/dist/components/warning-message.d.ts.map +1 -1
- package/dist/components/warning-message.js +10 -4
- package/dist/components/warning-message.js.map +1 -1
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +31 -30
- package/dist/config/index.js.map +1 -1
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +4 -36
- package/dist/config/paths.js.map +1 -1
- package/dist/config/preferences.d.ts +14 -0
- package/dist/config/preferences.d.ts.map +1 -0
- package/dist/config/preferences.js +82 -0
- package/dist/config/preferences.js.map +1 -0
- package/dist/config/themes.d.ts +5 -0
- package/dist/config/themes.d.ts.map +1 -1
- package/dist/config/themes.js +5 -0
- package/dist/config/themes.js.map +1 -1
- package/dist/server/gateway-client.d.ts +75 -0
- package/dist/server/gateway-client.d.ts.map +1 -0
- package/dist/server/gateway-client.js +264 -0
- package/dist/server/gateway-client.js.map +1 -0
- package/dist/server/gateway-entry.d.ts +7 -0
- package/dist/server/gateway-entry.d.ts.map +1 -0
- package/dist/server/gateway-entry.js +113 -0
- package/dist/server/gateway-entry.js.map +1 -0
- package/dist/server/gateway.d.ts +5 -0
- package/dist/server/gateway.d.ts.map +1 -0
- package/dist/server/gateway.js +136 -0
- package/dist/server/gateway.js.map +1 -0
- package/dist/server/tools/browser-tools.d.ts +28 -0
- package/dist/server/tools/browser-tools.d.ts.map +1 -0
- package/dist/server/tools/browser-tools.js +179 -0
- package/dist/server/tools/browser-tools.js.map +1 -0
- package/dist/server/tools/coding-tools.d.ts +27 -0
- package/dist/server/tools/coding-tools.d.ts.map +1 -0
- package/dist/server/tools/coding-tools.js +345 -0
- package/dist/server/tools/coding-tools.js.map +1 -0
- package/dist/server/tools/exec-tools.d.ts +14 -0
- package/dist/server/tools/exec-tools.d.ts.map +1 -0
- package/dist/server/tools/exec-tools.js +203 -0
- package/dist/server/tools/exec-tools.js.map +1 -0
- package/dist/types/config.d.ts +36 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/agent-browser.d.ts +63 -0
- package/dist/utils/agent-browser.d.ts.map +1 -0
- package/dist/utils/agent-browser.js +301 -0
- package/dist/utils/agent-browser.js.map +1 -0
- package/dist/utils/coding-runner.d.ts +60 -0
- package/dist/utils/coding-runner.d.ts.map +1 -0
- package/dist/utils/coding-runner.js +174 -0
- package/dist/utils/coding-runner.js.map +1 -0
- package/dist/utils/coding-sessions.d.ts +61 -0
- package/dist/utils/coding-sessions.d.ts.map +1 -0
- package/dist/utils/coding-sessions.js +112 -0
- package/dist/utils/coding-sessions.js.map +1 -0
- package/dist/utils/process.d.ts +22 -0
- package/dist/utils/process.d.ts.map +1 -0
- package/dist/utils/process.js +81 -0
- package/dist/utils/process.js.map +1 -0
- package/dist/utils/service-manager/index.d.ts +49 -0
- package/dist/utils/service-manager/index.d.ts.map +1 -0
- package/dist/utils/service-manager/index.js +137 -0
- package/dist/utils/service-manager/index.js.map +1 -0
- package/dist/utils/service-manager/launchd.d.ts +31 -0
- package/dist/utils/service-manager/launchd.d.ts.map +1 -0
- package/dist/utils/service-manager/launchd.js +208 -0
- package/dist/utils/service-manager/launchd.js.map +1 -0
- package/dist/utils/service-manager/systemd.d.ts +31 -0
- package/dist/utils/service-manager/systemd.d.ts.map +1 -0
- package/dist/utils/service-manager/systemd.js +187 -0
- package/dist/utils/service-manager/systemd.js.map +1 -0
- package/dist/utils/tmux.d.ts +37 -0
- package/dist/utils/tmux.d.ts.map +1 -0
- package/dist/utils/tmux.js +96 -0
- package/dist/utils/tmux.js.map +1 -0
- package/package.json +15 -12
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { platform } from 'node:os';
|
|
2
|
+
import { installLaunchdService, uninstallLaunchdService, isLaunchdServiceInstalled, getLaunchdServiceStatus, startLaunchdService, stopLaunchdService, getLaunchdServicePid, LAUNCHD_SERVICE_NAME, } from './launchd.js';
|
|
3
|
+
import { installSystemdService, uninstallSystemdService, isSystemdServiceInstalled, getSystemdServiceStatus, startSystemdService, stopSystemdService, getSystemdServicePid, SYSTEMD_SERVICE_NAME, } from './systemd.js';
|
|
4
|
+
/**
|
|
5
|
+
* Detect the appropriate service manager for the current platform
|
|
6
|
+
*/
|
|
7
|
+
export function getServiceType() {
|
|
8
|
+
const os = platform();
|
|
9
|
+
if (os === 'darwin') {
|
|
10
|
+
return 'launchd';
|
|
11
|
+
}
|
|
12
|
+
if (os === 'linux') {
|
|
13
|
+
return 'systemd';
|
|
14
|
+
}
|
|
15
|
+
return 'none';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get the service name for the current platform
|
|
19
|
+
*/
|
|
20
|
+
export function getServiceName() {
|
|
21
|
+
const serviceType = getServiceType();
|
|
22
|
+
switch (serviceType) {
|
|
23
|
+
case 'launchd':
|
|
24
|
+
return LAUNCHD_SERVICE_NAME;
|
|
25
|
+
case 'systemd':
|
|
26
|
+
return SYSTEMD_SERVICE_NAME;
|
|
27
|
+
default:
|
|
28
|
+
return 'corebrain-gateway';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Install the gateway as an OS-level service
|
|
33
|
+
*/
|
|
34
|
+
export async function installService(config) {
|
|
35
|
+
const serviceType = getServiceType();
|
|
36
|
+
switch (serviceType) {
|
|
37
|
+
case 'launchd':
|
|
38
|
+
await installLaunchdService(config);
|
|
39
|
+
break;
|
|
40
|
+
case 'systemd':
|
|
41
|
+
await installSystemdService(config);
|
|
42
|
+
break;
|
|
43
|
+
case 'none':
|
|
44
|
+
throw new Error('Service installation is not supported on this platform. Only macOS (launchd) and Linux (systemd) are supported.');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Uninstall the gateway OS-level service
|
|
49
|
+
*/
|
|
50
|
+
export async function uninstallService(name) {
|
|
51
|
+
const serviceType = getServiceType();
|
|
52
|
+
switch (serviceType) {
|
|
53
|
+
case 'launchd':
|
|
54
|
+
await uninstallLaunchdService(name);
|
|
55
|
+
break;
|
|
56
|
+
case 'systemd':
|
|
57
|
+
await uninstallSystemdService(name);
|
|
58
|
+
break;
|
|
59
|
+
case 'none':
|
|
60
|
+
throw new Error('Service management is not supported on this platform.');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Check if the gateway service is installed
|
|
65
|
+
*/
|
|
66
|
+
export async function isServiceInstalled(name) {
|
|
67
|
+
const serviceType = getServiceType();
|
|
68
|
+
switch (serviceType) {
|
|
69
|
+
case 'launchd':
|
|
70
|
+
return isLaunchdServiceInstalled(name);
|
|
71
|
+
case 'systemd':
|
|
72
|
+
return isSystemdServiceInstalled(name);
|
|
73
|
+
case 'none':
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get the current status of the gateway service
|
|
79
|
+
*/
|
|
80
|
+
export async function getServiceStatus(name) {
|
|
81
|
+
const serviceType = getServiceType();
|
|
82
|
+
switch (serviceType) {
|
|
83
|
+
case 'launchd':
|
|
84
|
+
return getLaunchdServiceStatus(name);
|
|
85
|
+
case 'systemd':
|
|
86
|
+
return getSystemdServiceStatus(name);
|
|
87
|
+
case 'none':
|
|
88
|
+
return 'not-installed';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Start the gateway service
|
|
93
|
+
*/
|
|
94
|
+
export async function startService(name) {
|
|
95
|
+
const serviceType = getServiceType();
|
|
96
|
+
switch (serviceType) {
|
|
97
|
+
case 'launchd':
|
|
98
|
+
await startLaunchdService(name);
|
|
99
|
+
break;
|
|
100
|
+
case 'systemd':
|
|
101
|
+
await startSystemdService(name);
|
|
102
|
+
break;
|
|
103
|
+
case 'none':
|
|
104
|
+
throw new Error('Service management is not supported on this platform.');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Stop the gateway service
|
|
109
|
+
*/
|
|
110
|
+
export async function stopService(name) {
|
|
111
|
+
const serviceType = getServiceType();
|
|
112
|
+
switch (serviceType) {
|
|
113
|
+
case 'launchd':
|
|
114
|
+
await stopLaunchdService(name);
|
|
115
|
+
break;
|
|
116
|
+
case 'systemd':
|
|
117
|
+
await stopSystemdService(name);
|
|
118
|
+
break;
|
|
119
|
+
case 'none':
|
|
120
|
+
throw new Error('Service management is not supported on this platform.');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get the PID of the running gateway service
|
|
125
|
+
*/
|
|
126
|
+
export function getServicePid(name) {
|
|
127
|
+
const serviceType = getServiceType();
|
|
128
|
+
switch (serviceType) {
|
|
129
|
+
case 'launchd':
|
|
130
|
+
return getLaunchdServicePid(name);
|
|
131
|
+
case 'systemd':
|
|
132
|
+
return getSystemdServicePid(name);
|
|
133
|
+
case 'none':
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/service-manager/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ServiceConfig, ServiceStatus } from './index.js';
|
|
2
|
+
export declare const LAUNCHD_SERVICE_NAME = "dev.corebrain.gateway";
|
|
3
|
+
/**
|
|
4
|
+
* Install the gateway as a launchd service
|
|
5
|
+
*/
|
|
6
|
+
export declare function installLaunchdService(config: ServiceConfig): Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* Uninstall the launchd service
|
|
9
|
+
*/
|
|
10
|
+
export declare function uninstallLaunchdService(name: string): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Check if the launchd service is installed
|
|
13
|
+
*/
|
|
14
|
+
export declare function isLaunchdServiceInstalled(name: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Get the status of the launchd service
|
|
17
|
+
*/
|
|
18
|
+
export declare function getLaunchdServiceStatus(name: string): Promise<ServiceStatus>;
|
|
19
|
+
/**
|
|
20
|
+
* Start the launchd service
|
|
21
|
+
*/
|
|
22
|
+
export declare function startLaunchdService(name: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Stop the launchd service
|
|
25
|
+
*/
|
|
26
|
+
export declare function stopLaunchdService(name: string): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Get the PID of the running launchd service
|
|
29
|
+
*/
|
|
30
|
+
export declare function getLaunchdServicePid(name: string): number | null;
|
|
31
|
+
//# sourceMappingURL=launchd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launchd.d.ts","sourceRoot":"","sources":["../../../src/utils/service-manager/launchd.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAC,aAAa,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC;AAE1D,eAAO,MAAM,oBAAoB,0BAA0B,CAAC;AAqE5D;;GAEG;AACH,wBAAsB,qBAAqB,CAC1C,MAAM,EAAE,aAAa,GACnB,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBzE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG/D;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC5C,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,aAAa,CAAC,CA4BxB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBrE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUpE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsBhE"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { existsSync, mkdirSync, writeFileSync, unlinkSync, } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
export const LAUNCHD_SERVICE_NAME = 'dev.corebrain.gateway';
|
|
6
|
+
const LAUNCH_AGENTS_DIR = join(homedir(), 'Library', 'LaunchAgents');
|
|
7
|
+
function getPlistPath(name) {
|
|
8
|
+
return join(LAUNCH_AGENTS_DIR, `${name}.plist`);
|
|
9
|
+
}
|
|
10
|
+
function generatePlist(config) {
|
|
11
|
+
// Expand ~ to home directory for log paths
|
|
12
|
+
const expandPath = (p) => p.replace(/^~/, homedir());
|
|
13
|
+
const logPath = expandPath(config.logPath);
|
|
14
|
+
const errorLogPath = expandPath(config.errorLogPath);
|
|
15
|
+
// Ensure log directory exists
|
|
16
|
+
const logDir = logPath.substring(0, logPath.lastIndexOf('/'));
|
|
17
|
+
if (!existsSync(logDir)) {
|
|
18
|
+
mkdirSync(logDir, { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
// Build program arguments array
|
|
21
|
+
const programArgs = [config.command, ...config.args]
|
|
22
|
+
.map(arg => ` <string>${escapeXml(arg)}</string>`)
|
|
23
|
+
.join('\n');
|
|
24
|
+
const userPath = process.env.PATH;
|
|
25
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
26
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
27
|
+
<plist version="1.0">
|
|
28
|
+
<dict>
|
|
29
|
+
<key>Label</key>
|
|
30
|
+
<string>${escapeXml(config.name)}</string>
|
|
31
|
+
<key>ProgramArguments</key>
|
|
32
|
+
<array>
|
|
33
|
+
${programArgs}
|
|
34
|
+
</array>
|
|
35
|
+
<key>WorkingDirectory</key>
|
|
36
|
+
<string>${escapeXml(config.workingDirectory)}</string>
|
|
37
|
+
<key>RunAtLoad</key>
|
|
38
|
+
<true/>
|
|
39
|
+
<key>KeepAlive</key>
|
|
40
|
+
<dict>
|
|
41
|
+
<key>SuccessfulExit</key>
|
|
42
|
+
<false/>
|
|
43
|
+
</dict>
|
|
44
|
+
<key>StandardOutPath</key>
|
|
45
|
+
<string>${escapeXml(logPath)}</string>
|
|
46
|
+
<key>StandardErrorPath</key>
|
|
47
|
+
<string>${escapeXml(errorLogPath)}</string>
|
|
48
|
+
<key>EnvironmentVariables</key>
|
|
49
|
+
<dict>
|
|
50
|
+
<key>PATH</key>
|
|
51
|
+
<string>${userPath}</string>
|
|
52
|
+
</dict>
|
|
53
|
+
</dict>
|
|
54
|
+
</plist>
|
|
55
|
+
`;
|
|
56
|
+
}
|
|
57
|
+
function escapeXml(str) {
|
|
58
|
+
return str
|
|
59
|
+
.replace(/&/g, '&')
|
|
60
|
+
.replace(/</g, '<')
|
|
61
|
+
.replace(/>/g, '>')
|
|
62
|
+
.replace(/"/g, '"')
|
|
63
|
+
.replace(/'/g, ''');
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Install the gateway as a launchd service
|
|
67
|
+
*/
|
|
68
|
+
export async function installLaunchdService(config) {
|
|
69
|
+
// Ensure LaunchAgents directory exists
|
|
70
|
+
if (!existsSync(LAUNCH_AGENTS_DIR)) {
|
|
71
|
+
mkdirSync(LAUNCH_AGENTS_DIR, { recursive: true });
|
|
72
|
+
}
|
|
73
|
+
const plistPath = getPlistPath(config.name);
|
|
74
|
+
// Unload existing service if it exists
|
|
75
|
+
if (existsSync(plistPath)) {
|
|
76
|
+
try {
|
|
77
|
+
execSync(`launchctl unload "${plistPath}"`, { stdio: 'ignore' });
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Ignore errors if service wasn't loaded
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Generate and write plist file
|
|
84
|
+
const plistContent = generatePlist(config);
|
|
85
|
+
writeFileSync(plistPath, plistContent, 'utf-8');
|
|
86
|
+
// Load the service
|
|
87
|
+
try {
|
|
88
|
+
execSync(`launchctl load "${plistPath}"`, { stdio: 'pipe' });
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
throw new Error(`Failed to load launchd service: ${error instanceof Error ? error.message : String(error)}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Uninstall the launchd service
|
|
96
|
+
*/
|
|
97
|
+
export async function uninstallLaunchdService(name) {
|
|
98
|
+
const plistPath = getPlistPath(name);
|
|
99
|
+
if (!existsSync(plistPath)) {
|
|
100
|
+
return; // Nothing to uninstall
|
|
101
|
+
}
|
|
102
|
+
// Unload the service
|
|
103
|
+
try {
|
|
104
|
+
execSync(`launchctl unload "${plistPath}"`, { stdio: 'ignore' });
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Ignore errors if service wasn't loaded
|
|
108
|
+
}
|
|
109
|
+
// Remove the plist file
|
|
110
|
+
unlinkSync(plistPath);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Check if the launchd service is installed
|
|
114
|
+
*/
|
|
115
|
+
export function isLaunchdServiceInstalled(name) {
|
|
116
|
+
const plistPath = getPlistPath(name);
|
|
117
|
+
return existsSync(plistPath);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get the status of the launchd service
|
|
121
|
+
*/
|
|
122
|
+
export async function getLaunchdServiceStatus(name) {
|
|
123
|
+
if (!isLaunchdServiceInstalled(name)) {
|
|
124
|
+
return 'not-installed';
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
// Use launchctl list | grep to get tabular format: "PID\tStatus\tLabel"
|
|
128
|
+
const output = execSync(`launchctl list | grep "${name}" 2>/dev/null`, {
|
|
129
|
+
encoding: 'utf-8',
|
|
130
|
+
});
|
|
131
|
+
// Parse output: "86602\t0\tdev.corebrain.gateway" or "-\t0\tdev.corebrain.gateway"
|
|
132
|
+
const line = output.trim();
|
|
133
|
+
if (line) {
|
|
134
|
+
const parts = line.split(/\s+/);
|
|
135
|
+
if (parts.length >= 1) {
|
|
136
|
+
const pid = parts[0];
|
|
137
|
+
if (pid && pid !== '-' && !isNaN(parseInt(pid, 10))) {
|
|
138
|
+
return 'running';
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return 'stopped';
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// Service not loaded or grep found nothing
|
|
146
|
+
return 'stopped';
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Start the launchd service
|
|
151
|
+
*/
|
|
152
|
+
export async function startLaunchdService(name) {
|
|
153
|
+
const plistPath = getPlistPath(name);
|
|
154
|
+
if (!existsSync(plistPath)) {
|
|
155
|
+
throw new Error(`Service ${name} is not installed`);
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
// First ensure it's loaded
|
|
159
|
+
execSync(`launchctl load "${plistPath}" 2>/dev/null`, { stdio: 'ignore' });
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// May already be loaded, ignore
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
// Start the service
|
|
166
|
+
execSync(`launchctl start "${name}"`, { stdio: 'pipe' });
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
throw new Error(`Failed to start service: ${error instanceof Error ? error.message : String(error)}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Stop the launchd service
|
|
174
|
+
*/
|
|
175
|
+
export async function stopLaunchdService(name) {
|
|
176
|
+
try {
|
|
177
|
+
execSync(`launchctl stop "${name}"`, { stdio: 'pipe' });
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
throw new Error(`Failed to stop service: ${error instanceof Error ? error.message : String(error)}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get the PID of the running launchd service
|
|
185
|
+
*/
|
|
186
|
+
export function getLaunchdServicePid(name) {
|
|
187
|
+
try {
|
|
188
|
+
// Use launchctl list | grep to get tabular format
|
|
189
|
+
const output = execSync(`launchctl list | grep "${name}" 2>/dev/null`, {
|
|
190
|
+
encoding: 'utf-8',
|
|
191
|
+
});
|
|
192
|
+
const line = output.trim();
|
|
193
|
+
if (line) {
|
|
194
|
+
const parts = line.split(/\s+/);
|
|
195
|
+
if (parts.length >= 1) {
|
|
196
|
+
const pid = parseInt(parts[0], 10);
|
|
197
|
+
if (!isNaN(pid) && pid > 0) {
|
|
198
|
+
return pid;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=launchd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launchd.js","sourceRoot":"","sources":["../../../src/utils/service-manager/launchd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ServiceConfig, ServiceStatus } from './index.js';
|
|
2
|
+
export declare const SYSTEMD_SERVICE_NAME = "corebrain-gateway";
|
|
3
|
+
/**
|
|
4
|
+
* Install the gateway as a systemd user service
|
|
5
|
+
*/
|
|
6
|
+
export declare function installSystemdService(config: ServiceConfig): Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* Uninstall the systemd user service
|
|
9
|
+
*/
|
|
10
|
+
export declare function uninstallSystemdService(name: string): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Check if the systemd service is installed
|
|
13
|
+
*/
|
|
14
|
+
export declare function isSystemdServiceInstalled(name: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Get the status of the systemd service
|
|
17
|
+
*/
|
|
18
|
+
export declare function getSystemdServiceStatus(name: string): Promise<ServiceStatus>;
|
|
19
|
+
/**
|
|
20
|
+
* Start the systemd service
|
|
21
|
+
*/
|
|
22
|
+
export declare function startSystemdService(name: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Stop the systemd service
|
|
25
|
+
*/
|
|
26
|
+
export declare function stopSystemdService(name: string): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Get the PID of the running systemd service
|
|
29
|
+
*/
|
|
30
|
+
export declare function getSystemdServicePid(name: string): number | null;
|
|
31
|
+
//# sourceMappingURL=systemd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemd.d.ts","sourceRoot":"","sources":["../../../src/utils/service-manager/systemd.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE5D,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AA0CxD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA6ChF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BzE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG/D;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAoBlF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYrE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkBhE"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { existsSync, mkdirSync, writeFileSync, unlinkSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
export const SYSTEMD_SERVICE_NAME = 'corebrain-gateway';
|
|
6
|
+
const SYSTEMD_USER_DIR = join(homedir(), '.config', 'systemd', 'user');
|
|
7
|
+
function getServiceFilePath(name) {
|
|
8
|
+
return join(SYSTEMD_USER_DIR, `${name}.service`);
|
|
9
|
+
}
|
|
10
|
+
function generateServiceUnit(config) {
|
|
11
|
+
// Expand ~ to home directory for log paths
|
|
12
|
+
const expandPath = (p) => p.replace(/^~/, homedir());
|
|
13
|
+
const logPath = expandPath(config.logPath);
|
|
14
|
+
const errorLogPath = expandPath(config.errorLogPath);
|
|
15
|
+
// Ensure log directory exists
|
|
16
|
+
const logDir = logPath.substring(0, logPath.lastIndexOf('/'));
|
|
17
|
+
if (!existsSync(logDir)) {
|
|
18
|
+
mkdirSync(logDir, { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
// Build ExecStart command
|
|
21
|
+
const execStart = [config.command, ...config.args].join(' ');
|
|
22
|
+
return `[Unit]
|
|
23
|
+
Description=${config.displayName}
|
|
24
|
+
After=network.target
|
|
25
|
+
|
|
26
|
+
[Service]
|
|
27
|
+
Type=simple
|
|
28
|
+
ExecStart=${execStart}
|
|
29
|
+
WorkingDirectory=${config.workingDirectory}
|
|
30
|
+
Restart=on-failure
|
|
31
|
+
RestartSec=5
|
|
32
|
+
StandardOutput=append:${logPath}
|
|
33
|
+
StandardError=append:${errorLogPath}
|
|
34
|
+
Environment=PATH=/usr/local/bin:/usr/bin:/bin
|
|
35
|
+
|
|
36
|
+
[Install]
|
|
37
|
+
WantedBy=default.target
|
|
38
|
+
`;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Install the gateway as a systemd user service
|
|
42
|
+
*/
|
|
43
|
+
export async function installSystemdService(config) {
|
|
44
|
+
// Ensure systemd user directory exists
|
|
45
|
+
if (!existsSync(SYSTEMD_USER_DIR)) {
|
|
46
|
+
mkdirSync(SYSTEMD_USER_DIR, { recursive: true });
|
|
47
|
+
}
|
|
48
|
+
const servicePath = getServiceFilePath(config.name);
|
|
49
|
+
// Stop existing service if running
|
|
50
|
+
try {
|
|
51
|
+
execSync(`systemctl --user stop ${config.name}`, { stdio: 'ignore' });
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Ignore errors if service wasn't running
|
|
55
|
+
}
|
|
56
|
+
// Generate and write service file
|
|
57
|
+
const serviceContent = generateServiceUnit(config);
|
|
58
|
+
writeFileSync(servicePath, serviceContent, 'utf-8');
|
|
59
|
+
// Reload systemd daemon
|
|
60
|
+
try {
|
|
61
|
+
execSync('systemctl --user daemon-reload', { stdio: 'pipe' });
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
throw new Error(`Failed to reload systemd daemon: ${error instanceof Error ? error.message : String(error)}`);
|
|
65
|
+
}
|
|
66
|
+
// Enable the service (start on login)
|
|
67
|
+
try {
|
|
68
|
+
execSync(`systemctl --user enable ${config.name}`, { stdio: 'pipe' });
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
throw new Error(`Failed to enable systemd service: ${error instanceof Error ? error.message : String(error)}`);
|
|
72
|
+
}
|
|
73
|
+
// Start the service
|
|
74
|
+
try {
|
|
75
|
+
execSync(`systemctl --user start ${config.name}`, { stdio: 'pipe' });
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
throw new Error(`Failed to start systemd service: ${error instanceof Error ? error.message : String(error)}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Uninstall the systemd user service
|
|
83
|
+
*/
|
|
84
|
+
export async function uninstallSystemdService(name) {
|
|
85
|
+
const servicePath = getServiceFilePath(name);
|
|
86
|
+
// Stop the service
|
|
87
|
+
try {
|
|
88
|
+
execSync(`systemctl --user stop ${name}`, { stdio: 'ignore' });
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Ignore errors if service wasn't running
|
|
92
|
+
}
|
|
93
|
+
// Disable the service
|
|
94
|
+
try {
|
|
95
|
+
execSync(`systemctl --user disable ${name}`, { stdio: 'ignore' });
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// Ignore errors if service wasn't enabled
|
|
99
|
+
}
|
|
100
|
+
// Remove the service file
|
|
101
|
+
if (existsSync(servicePath)) {
|
|
102
|
+
unlinkSync(servicePath);
|
|
103
|
+
}
|
|
104
|
+
// Reload systemd daemon
|
|
105
|
+
try {
|
|
106
|
+
execSync('systemctl --user daemon-reload', { stdio: 'ignore' });
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Ignore errors
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Check if the systemd service is installed
|
|
114
|
+
*/
|
|
115
|
+
export function isSystemdServiceInstalled(name) {
|
|
116
|
+
const servicePath = getServiceFilePath(name);
|
|
117
|
+
return existsSync(servicePath);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get the status of the systemd service
|
|
121
|
+
*/
|
|
122
|
+
export async function getSystemdServiceStatus(name) {
|
|
123
|
+
if (!isSystemdServiceInstalled(name)) {
|
|
124
|
+
return 'not-installed';
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
const output = execSync(`systemctl --user is-active ${name} 2>/dev/null`, {
|
|
128
|
+
encoding: 'utf-8',
|
|
129
|
+
});
|
|
130
|
+
const status = output.trim();
|
|
131
|
+
if (status === 'active') {
|
|
132
|
+
return 'running';
|
|
133
|
+
}
|
|
134
|
+
return 'stopped';
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// Service not active or error checking
|
|
138
|
+
return 'stopped';
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Start the systemd service
|
|
143
|
+
*/
|
|
144
|
+
export async function startSystemdService(name) {
|
|
145
|
+
if (!isSystemdServiceInstalled(name)) {
|
|
146
|
+
throw new Error(`Service ${name} is not installed`);
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
execSync(`systemctl --user start ${name}`, { stdio: 'pipe' });
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
throw new Error(`Failed to start service: ${error instanceof Error ? error.message : String(error)}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Stop the systemd service
|
|
157
|
+
*/
|
|
158
|
+
export async function stopSystemdService(name) {
|
|
159
|
+
try {
|
|
160
|
+
execSync(`systemctl --user stop ${name}`, { stdio: 'pipe' });
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
throw new Error(`Failed to stop service: ${error instanceof Error ? error.message : String(error)}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get the PID of the running systemd service
|
|
168
|
+
*/
|
|
169
|
+
export function getSystemdServicePid(name) {
|
|
170
|
+
try {
|
|
171
|
+
const output = execSync(`systemctl --user show ${name} --property=MainPID 2>/dev/null`, {
|
|
172
|
+
encoding: 'utf-8',
|
|
173
|
+
});
|
|
174
|
+
const match = output.match(/MainPID=(\d+)/);
|
|
175
|
+
if (match) {
|
|
176
|
+
const pid = parseInt(match[1], 10);
|
|
177
|
+
if (pid > 0) {
|
|
178
|
+
return pid;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=systemd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemd.js","sourceRoot":"","sources":["../../../src/utils/service-manager/systemd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if tmux is installed and available
|
|
3
|
+
*/
|
|
4
|
+
export declare function isTmuxAvailable(): Promise<boolean>;
|
|
5
|
+
/**
|
|
6
|
+
* Check if a tmux session exists
|
|
7
|
+
*/
|
|
8
|
+
export declare function sessionExists(name: string): Promise<boolean>;
|
|
9
|
+
/**
|
|
10
|
+
* Create a new detached tmux session with a command
|
|
11
|
+
*/
|
|
12
|
+
export declare function createSession(name: string, command: string): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Kill a tmux session
|
|
15
|
+
*/
|
|
16
|
+
export declare function killSession(name: string): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Get the PID of a tmux session
|
|
19
|
+
*/
|
|
20
|
+
export declare function getSessionPid(name: string): Promise<number | null>;
|
|
21
|
+
/**
|
|
22
|
+
* List all tmux sessions
|
|
23
|
+
*/
|
|
24
|
+
export declare function listSessions(): Promise<string[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Get the content of a tmux pane
|
|
27
|
+
*/
|
|
28
|
+
export declare function getSessionContent(name: string, lines?: number): Promise<string>;
|
|
29
|
+
/**
|
|
30
|
+
* Send keys to a tmux session
|
|
31
|
+
*/
|
|
32
|
+
export declare function sendKeys(name: string, keys: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Check if a process with the given PID is running
|
|
35
|
+
*/
|
|
36
|
+
export declare function isPidRunning(pid: number): boolean;
|
|
37
|
+
//# sourceMappingURL=tmux.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmux.d.ts","sourceRoot":"","sources":["../../src/utils/tmux.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAOxD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOlE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxE;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAOtD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,SAAM,GACT,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQjD"}
|