@getaclaw/agent 0.1.1
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/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +203 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/manage/channels.d.ts +15 -0
- package/dist/manage/channels.d.ts.map +1 -0
- package/dist/manage/channels.js +34 -0
- package/dist/manage/channels.js.map +1 -0
- package/dist/manage/config.d.ts +3 -0
- package/dist/manage/config.d.ts.map +1 -0
- package/dist/manage/config.js +36 -0
- package/dist/manage/config.js.map +1 -0
- package/dist/manage/devices.d.ts +5 -0
- package/dist/manage/devices.d.ts.map +1 -0
- package/dist/manage/devices.js +90 -0
- package/dist/manage/devices.js.map +1 -0
- package/dist/manage/health.d.ts +3 -0
- package/dist/manage/health.d.ts.map +1 -0
- package/dist/manage/health.js +115 -0
- package/dist/manage/health.js.map +1 -0
- package/dist/manage/update.d.ts +3 -0
- package/dist/manage/update.d.ts.map +1 -0
- package/dist/manage/update.js +303 -0
- package/dist/manage/update.js.map +1 -0
- package/dist/protocol.d.ts +31 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +11 -0
- package/dist/protocol.js.map +1 -0
- package/dist/server.d.ts +29 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +339 -0
- package/dist/server.js.map +1 -0
- package/dist/setup/orchestrator.d.ts +23 -0
- package/dist/setup/orchestrator.d.ts.map +1 -0
- package/dist/setup/orchestrator.js +142 -0
- package/dist/setup/orchestrator.js.map +1 -0
- package/dist/setup/steps/channels.d.ts +3 -0
- package/dist/setup/steps/channels.d.ts.map +1 -0
- package/dist/setup/steps/channels.js +38 -0
- package/dist/setup/steps/channels.js.map +1 -0
- package/dist/setup/steps/configure.d.ts +3 -0
- package/dist/setup/steps/configure.d.ts.map +1 -0
- package/dist/setup/steps/configure.js +65 -0
- package/dist/setup/steps/configure.js.map +1 -0
- package/dist/setup/steps/health.d.ts +3 -0
- package/dist/setup/steps/health.d.ts.map +1 -0
- package/dist/setup/steps/health.js +95 -0
- package/dist/setup/steps/health.js.map +1 -0
- package/dist/setup/steps/openclaw.d.ts +3 -0
- package/dist/setup/steps/openclaw.d.ts.map +1 -0
- package/dist/setup/steps/openclaw.js +22 -0
- package/dist/setup/steps/openclaw.js.map +1 -0
- package/dist/setup/steps/service.d.ts +3 -0
- package/dist/setup/steps/service.d.ts.map +1 -0
- package/dist/setup/steps/service.js +37 -0
- package/dist/setup/steps/service.js.map +1 -0
- package/dist/setup/steps/system.d.ts +3 -0
- package/dist/setup/steps/system.d.ts.map +1 -0
- package/dist/setup/steps/system.js +60 -0
- package/dist/setup/steps/system.js.map +1 -0
- package/dist/setup/steps/tailscale.d.ts +3 -0
- package/dist/setup/steps/tailscale.d.ts.map +1 -0
- package/dist/setup/steps/tailscale.js +40 -0
- package/dist/setup/steps/tailscale.js.map +1 -0
- package/dist/setup/types.d.ts +36 -0
- package/dist/setup/types.d.ts.map +1 -0
- package/dist/setup/types.js +2 -0
- package/dist/setup/types.js.map +1 -0
- package/dist/utils/crypto.d.ts +11 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +47 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/exec.d.ts +12 -0
- package/dist/utils/exec.d.ts.map +1 -0
- package/dist/utils/exec.js +99 -0
- package/dist/utils/exec.js.map +1 -0
- package/dist/utils/logger.d.ts +4 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +30 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +40 -0
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { logger, enableFileLogging } from './utils/logger.js';
|
|
6
|
+
import { generateToken, generateTlsCert, hashToken } from './utils/crypto.js';
|
|
7
|
+
import { AgentServer } from './server.js';
|
|
8
|
+
import { safeExec } from './utils/exec.js';
|
|
9
|
+
const DEFAULT_CONFIG_DIR = '/etc/getaclaw';
|
|
10
|
+
const DEFAULT_PORT = 34567;
|
|
11
|
+
const program = new Command();
|
|
12
|
+
program
|
|
13
|
+
.name('getaclaw-agent')
|
|
14
|
+
.description('Get a Claw Agent — manages OpenClaw setup and ongoing maintenance')
|
|
15
|
+
.version('0.1.0');
|
|
16
|
+
// --- init ---
|
|
17
|
+
program
|
|
18
|
+
.command('init')
|
|
19
|
+
.description('Initialize the agent: generate TLS cert, save config')
|
|
20
|
+
.option('--token <token>', 'Pairing token (generated if not provided)')
|
|
21
|
+
.option('--port <port>', 'Agent port', String(DEFAULT_PORT))
|
|
22
|
+
.option('--config-dir <dir>', 'Configuration directory', DEFAULT_CONFIG_DIR)
|
|
23
|
+
.action(async (opts) => {
|
|
24
|
+
const configDir = opts.configDir;
|
|
25
|
+
const port = parseInt(opts.port, 10);
|
|
26
|
+
const pairingToken = opts.token || generateToken();
|
|
27
|
+
logger.info('Initializing getaclaw-agent', { configDir, port });
|
|
28
|
+
// Create config directory
|
|
29
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
30
|
+
fs.mkdirSync(path.join(configDir, 'tls'), { recursive: true });
|
|
31
|
+
// Generate TLS certificate
|
|
32
|
+
logger.info('Generating self-signed TLS certificate...');
|
|
33
|
+
const tls = generateTlsCert(pairingToken);
|
|
34
|
+
const certPath = path.join(configDir, 'tls', 'cert.pem');
|
|
35
|
+
const keyPath = path.join(configDir, 'tls', 'key.pem');
|
|
36
|
+
fs.writeFileSync(certPath, tls.cert, 'utf-8');
|
|
37
|
+
fs.writeFileSync(keyPath, tls.key, 'utf-8');
|
|
38
|
+
fs.chmodSync(certPath, 0o644);
|
|
39
|
+
fs.chmodSync(keyPath, 0o600);
|
|
40
|
+
// Save agent config
|
|
41
|
+
const config = {
|
|
42
|
+
port,
|
|
43
|
+
pairingTokenHash: hashToken(pairingToken),
|
|
44
|
+
certPath,
|
|
45
|
+
keyPath,
|
|
46
|
+
configDir,
|
|
47
|
+
fingerprint: tls.fingerprint,
|
|
48
|
+
createdAt: new Date().toISOString(),
|
|
49
|
+
};
|
|
50
|
+
const configPath = path.join(configDir, 'config.json');
|
|
51
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
52
|
+
fs.chmodSync(configPath, 0o600);
|
|
53
|
+
logger.info('Agent initialized successfully');
|
|
54
|
+
logger.info(`Port: ${port}`);
|
|
55
|
+
logger.info(`Config: ${configPath}`);
|
|
56
|
+
logger.info(`TLS fingerprint: ${tls.fingerprint}`);
|
|
57
|
+
if (!opts.token) {
|
|
58
|
+
logger.info(`Pairing token: ${pairingToken}`);
|
|
59
|
+
logger.info('Save this token — it will not be shown again.');
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
// --- serve ---
|
|
63
|
+
program
|
|
64
|
+
.command('serve')
|
|
65
|
+
.description('Start the agent HTTPS/WebSocket server')
|
|
66
|
+
.option('--config-dir <dir>', 'Configuration directory', DEFAULT_CONFIG_DIR)
|
|
67
|
+
.action(async (opts) => {
|
|
68
|
+
const configDir = opts.configDir;
|
|
69
|
+
const configPath = path.join(configDir, 'config.json');
|
|
70
|
+
if (!fs.existsSync(configPath)) {
|
|
71
|
+
logger.error(`Config not found at ${configPath}. Run "getaclaw-agent init" first.`);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
enableFileLogging();
|
|
75
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
76
|
+
const server = new AgentServer({
|
|
77
|
+
port: config.port,
|
|
78
|
+
certPath: config.certPath,
|
|
79
|
+
keyPath: config.keyPath,
|
|
80
|
+
pairingTokenHash: config.pairingTokenHash,
|
|
81
|
+
configDir,
|
|
82
|
+
});
|
|
83
|
+
// Graceful shutdown
|
|
84
|
+
const shutdown = async () => {
|
|
85
|
+
logger.info('Shutting down agent server...');
|
|
86
|
+
await server.stop();
|
|
87
|
+
process.exit(0);
|
|
88
|
+
};
|
|
89
|
+
process.on('SIGTERM', shutdown);
|
|
90
|
+
process.on('SIGINT', shutdown);
|
|
91
|
+
await server.start();
|
|
92
|
+
logger.info(`Agent server running on port ${config.port}`);
|
|
93
|
+
// Auto-detect init-config and start setup if present
|
|
94
|
+
const initConfigPath = path.join(configDir, 'init-config.json');
|
|
95
|
+
if (fs.existsSync(initConfigPath)) {
|
|
96
|
+
try {
|
|
97
|
+
const initConfig = JSON.parse(fs.readFileSync(initConfigPath, 'utf-8'));
|
|
98
|
+
const setupConfig = initConfig.setup;
|
|
99
|
+
if (setupConfig) {
|
|
100
|
+
logger.info('Found init-config.json, auto-starting setup');
|
|
101
|
+
server.autoStartSetup(setupConfig).then((result) => {
|
|
102
|
+
// Only rename to .done if setup succeeded
|
|
103
|
+
const donePath = path.join(configDir, 'init-config.done.json');
|
|
104
|
+
if (result.success) {
|
|
105
|
+
fs.renameSync(initConfigPath, donePath);
|
|
106
|
+
logger.info('Setup succeeded, renamed init-config.json to init-config.done.json');
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
logger.warn('Setup finished with errors, keeping init-config.json for retry');
|
|
110
|
+
}
|
|
111
|
+
}).catch((err) => {
|
|
112
|
+
logger.error('Auto-setup error', {
|
|
113
|
+
error: err instanceof Error ? err.message : String(err),
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
logger.error('Failed to read init-config.json', {
|
|
120
|
+
error: err instanceof Error ? err.message : String(err),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
// --- service ---
|
|
126
|
+
const serviceCmd = program
|
|
127
|
+
.command('service')
|
|
128
|
+
.description('Manage the getaclaw-agent systemd service');
|
|
129
|
+
serviceCmd
|
|
130
|
+
.command('install')
|
|
131
|
+
.description('Install the systemd service')
|
|
132
|
+
.action(async () => {
|
|
133
|
+
const serviceContent = `[Unit]
|
|
134
|
+
Description=Get a Claw Agent
|
|
135
|
+
After=network-online.target
|
|
136
|
+
Wants=network-online.target
|
|
137
|
+
|
|
138
|
+
[Service]
|
|
139
|
+
Type=simple
|
|
140
|
+
User=getaclaw-agent
|
|
141
|
+
ExecStart=/usr/bin/getaclaw-agent serve
|
|
142
|
+
Restart=always
|
|
143
|
+
RestartSec=5
|
|
144
|
+
Environment=NODE_ENV=production
|
|
145
|
+
Environment=GETACLAW_CONFIG=${DEFAULT_CONFIG_DIR}/config.json
|
|
146
|
+
|
|
147
|
+
[Install]
|
|
148
|
+
WantedBy=multi-user.target
|
|
149
|
+
`;
|
|
150
|
+
const servicePath = '/etc/systemd/system/getaclaw-agent.service';
|
|
151
|
+
logger.info('Installing systemd service...');
|
|
152
|
+
fs.writeFileSync(servicePath, serviceContent, 'utf-8');
|
|
153
|
+
await safeExec('systemctl', ['daemon-reload']);
|
|
154
|
+
await safeExec('systemctl', ['enable', 'getaclaw-agent']);
|
|
155
|
+
logger.info('Service installed and enabled');
|
|
156
|
+
logger.info('Start with: systemctl start getaclaw-agent');
|
|
157
|
+
});
|
|
158
|
+
serviceCmd
|
|
159
|
+
.command('uninstall')
|
|
160
|
+
.description('Remove the systemd service')
|
|
161
|
+
.action(async () => {
|
|
162
|
+
logger.info('Stopping and disabling service...');
|
|
163
|
+
try {
|
|
164
|
+
await safeExec('systemctl', ['stop', 'getaclaw-agent']);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// May not be running
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
await safeExec('systemctl', ['disable', 'getaclaw-agent']);
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// May not be enabled
|
|
174
|
+
}
|
|
175
|
+
const servicePath = '/etc/systemd/system/getaclaw-agent.service';
|
|
176
|
+
if (fs.existsSync(servicePath)) {
|
|
177
|
+
fs.unlinkSync(servicePath);
|
|
178
|
+
}
|
|
179
|
+
await safeExec('systemctl', ['daemon-reload']);
|
|
180
|
+
logger.info('Service uninstalled');
|
|
181
|
+
});
|
|
182
|
+
serviceCmd
|
|
183
|
+
.command('status')
|
|
184
|
+
.description('Check the service status')
|
|
185
|
+
.action(async () => {
|
|
186
|
+
try {
|
|
187
|
+
const result = await safeExec('systemctl', ['status', 'getaclaw-agent']);
|
|
188
|
+
console.log(result.stdout);
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
const execErr = err;
|
|
192
|
+
if (execErr.result?.stdout) {
|
|
193
|
+
console.log(execErr.result.stdout);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
logger.error('Failed to get service status', {
|
|
197
|
+
error: err instanceof Error ? err.message : String(err),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
program.parse();
|
|
203
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { AgentServer } from './server.js';
|
|
2
|
+
export type { AgentServerConfig } from './server.js';
|
|
3
|
+
export { SetupOrchestrator } from './setup/orchestrator.js';
|
|
4
|
+
export type { ClientMessage, AgentMessage, AgentEventPayload, SetupEvent, Action, } from './protocol.js';
|
|
5
|
+
export { isValidClientMessage } from './protocol.js';
|
|
6
|
+
export type { SetupConfig, ChannelConfig, StepName, StepState, StepStatus, } from './setup/types.js';
|
|
7
|
+
export { generateToken, generateTlsCert, computeCertFingerprint } from './utils/crypto.js';
|
|
8
|
+
export { logger } from './utils/logger.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EACV,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EACV,WAAW,EACX,aAAa,EACb,QAAQ,EACR,SAAS,EACT,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { AgentServer } from './server.js';
|
|
2
|
+
export { SetupOrchestrator } from './setup/orchestrator.js';
|
|
3
|
+
export { isValidClientMessage } from './protocol.js';
|
|
4
|
+
export { generateToken, generateTlsCert, computeCertFingerprint } from './utils/crypto.js';
|
|
5
|
+
export { logger } from './utils/logger.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAQ5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAQrD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface ChannelEntry {
|
|
2
|
+
type: string;
|
|
3
|
+
name: string;
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
config: Record<string, unknown>;
|
|
6
|
+
}
|
|
7
|
+
export declare function listChannels(): Promise<ChannelEntry[]>;
|
|
8
|
+
export declare function addChannel(channel: {
|
|
9
|
+
type: string;
|
|
10
|
+
name: string;
|
|
11
|
+
config: Record<string, unknown>;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
export declare function removeChannel(name: string): Promise<void>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=channels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/manage/channels.ts"],"names":[],"mappings":"AAGA,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAG5D;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBhB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY/D"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { getConfig, setConfig } from './config.js';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
export async function listChannels() {
|
|
4
|
+
const config = await getConfig();
|
|
5
|
+
return config.channels ?? [];
|
|
6
|
+
}
|
|
7
|
+
export async function addChannel(channel) {
|
|
8
|
+
const config = await getConfig();
|
|
9
|
+
const channels = config.channels ?? [];
|
|
10
|
+
// Check for duplicate name
|
|
11
|
+
if (channels.some((ch) => ch.name === channel.name)) {
|
|
12
|
+
throw new Error(`Channel with name "${channel.name}" already exists`);
|
|
13
|
+
}
|
|
14
|
+
channels.push({
|
|
15
|
+
type: channel.type,
|
|
16
|
+
name: channel.name,
|
|
17
|
+
enabled: true,
|
|
18
|
+
config: channel.config,
|
|
19
|
+
});
|
|
20
|
+
await setConfig({ channels });
|
|
21
|
+
logger.info(`Channel added: ${channel.name} (${channel.type})`);
|
|
22
|
+
}
|
|
23
|
+
export async function removeChannel(name) {
|
|
24
|
+
const config = await getConfig();
|
|
25
|
+
const channels = config.channels ?? [];
|
|
26
|
+
const idx = channels.findIndex((ch) => ch.name === name);
|
|
27
|
+
if (idx === -1) {
|
|
28
|
+
throw new Error(`Channel "${name}" not found`);
|
|
29
|
+
}
|
|
30
|
+
channels.splice(idx, 1);
|
|
31
|
+
await setConfig({ channels });
|
|
32
|
+
logger.info(`Channel removed: ${name}`);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=channels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/manage/channels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAS5C,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IACjC,OAAQ,MAAM,CAAC,QAA2B,IAAI,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAIhC;IACC,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAI,MAAM,CAAC,QAA2B,IAAI,EAAE,CAAC;IAE3D,2BAA2B;IAC3B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,IAAI,kBAAkB,CAAC,CAAC;IACxE,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,MAAM,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9B,MAAM,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAI,MAAM,CAAC,QAA2B,IAAI,EAAE,CAAC;IAE3D,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACzD,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,aAAa,CAAC,CAAC;IACjD,CAAC;IAED,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACxB,MAAM,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9B,MAAM,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/manage/config.ts"],"names":[],"mappings":"AAOA,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAGlE;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ/E"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
const OPENCLAW_CONFIG_PATH = path.join(os.homedir(), '.openclaw', 'openclaw.json');
|
|
6
|
+
export async function getConfig() {
|
|
7
|
+
const raw = await fs.readFile(OPENCLAW_CONFIG_PATH, 'utf-8');
|
|
8
|
+
return JSON.parse(raw);
|
|
9
|
+
}
|
|
10
|
+
export async function setConfig(updates) {
|
|
11
|
+
const current = await getConfig();
|
|
12
|
+
// Deep merge updates into current config
|
|
13
|
+
const merged = deepMerge(current, updates);
|
|
14
|
+
await fs.writeFile(OPENCLAW_CONFIG_PATH, JSON.stringify(merged, null, 2), 'utf-8');
|
|
15
|
+
logger.info('OpenClaw config updated', { keys: Object.keys(updates) });
|
|
16
|
+
}
|
|
17
|
+
function deepMerge(target, source) {
|
|
18
|
+
const result = { ...target };
|
|
19
|
+
for (const key of Object.keys(source)) {
|
|
20
|
+
const sourceVal = source[key];
|
|
21
|
+
const targetVal = target[key];
|
|
22
|
+
if (sourceVal !== null &&
|
|
23
|
+
typeof sourceVal === 'object' &&
|
|
24
|
+
!Array.isArray(sourceVal) &&
|
|
25
|
+
targetVal !== null &&
|
|
26
|
+
typeof targetVal === 'object' &&
|
|
27
|
+
!Array.isArray(targetVal)) {
|
|
28
|
+
result[key] = deepMerge(targetVal, sourceVal);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
result[key] = sourceVal;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/manage/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;AAEnF,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAgC;IAC9D,MAAM,OAAO,GAAG,MAAM,SAAS,EAAE,CAAC;IAElC,yCAAyC;IACzC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE3C,MAAM,EAAE,CAAC,SAAS,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACnF,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,SAAS,CAChB,MAA+B,EAC/B,MAA+B;IAE/B,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAE9B,IACE,SAAS,KAAK,IAAI;YAClB,OAAO,SAAS,KAAK,QAAQ;YAC7B,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YACzB,SAAS,KAAK,IAAI;YAClB,OAAO,SAAS,KAAK,QAAQ;YAC7B,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EACzB,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACrB,SAAoC,EACpC,SAAoC,CACrC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AgentMessage, ClientMessage } from '../protocol.js';
|
|
2
|
+
export declare function handleDevicesList(msg: ClientMessage, sendEvent: (event: AgentMessage) => void): Promise<void>;
|
|
3
|
+
export declare function handleDevicesApprove(msg: ClientMessage, sendEvent: (event: AgentMessage) => void): Promise<void>;
|
|
4
|
+
export declare function handleDevicesReject(msg: ClientMessage, sendEvent: (event: AgentMessage) => void): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=devices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devices.d.ts","sourceRoot":"","sources":["../../src/manage/devices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIlE,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GACvC,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GACvC,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GACvC,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { safeExec } from '../utils/exec.js';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
export async function handleDevicesList(msg, sendEvent) {
|
|
4
|
+
try {
|
|
5
|
+
const result = await safeExec('openclaw', ['devices', 'list', '--json']);
|
|
6
|
+
const devices = JSON.parse(result.stdout);
|
|
7
|
+
sendEvent({
|
|
8
|
+
id: msg.id,
|
|
9
|
+
type: 'response',
|
|
10
|
+
action: msg.action,
|
|
11
|
+
status: 'ok',
|
|
12
|
+
data: { devices },
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
17
|
+
logger.error('Failed to list devices', { error: errorMessage });
|
|
18
|
+
sendEvent({
|
|
19
|
+
id: msg.id,
|
|
20
|
+
type: 'error',
|
|
21
|
+
status: 'error',
|
|
22
|
+
data: { message: `Failed to list devices: ${errorMessage}` },
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export async function handleDevicesApprove(msg, sendEvent) {
|
|
27
|
+
try {
|
|
28
|
+
const deviceId = msg.params?.deviceId;
|
|
29
|
+
if (!deviceId) {
|
|
30
|
+
sendEvent({
|
|
31
|
+
id: msg.id,
|
|
32
|
+
type: 'error',
|
|
33
|
+
status: 'error',
|
|
34
|
+
data: { message: 'Missing deviceId in params' },
|
|
35
|
+
});
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
await safeExec('openclaw', ['devices', 'approve', deviceId]);
|
|
39
|
+
sendEvent({
|
|
40
|
+
id: msg.id,
|
|
41
|
+
type: 'response',
|
|
42
|
+
action: msg.action,
|
|
43
|
+
status: 'ok',
|
|
44
|
+
data: { message: `Device ${deviceId} approved` },
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
49
|
+
logger.error('Failed to approve device', { error: errorMessage });
|
|
50
|
+
sendEvent({
|
|
51
|
+
id: msg.id,
|
|
52
|
+
type: 'error',
|
|
53
|
+
status: 'error',
|
|
54
|
+
data: { message: `Failed to approve device: ${errorMessage}` },
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export async function handleDevicesReject(msg, sendEvent) {
|
|
59
|
+
try {
|
|
60
|
+
const deviceId = msg.params?.deviceId;
|
|
61
|
+
if (!deviceId) {
|
|
62
|
+
sendEvent({
|
|
63
|
+
id: msg.id,
|
|
64
|
+
type: 'error',
|
|
65
|
+
status: 'error',
|
|
66
|
+
data: { message: 'Missing deviceId in params' },
|
|
67
|
+
});
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
await safeExec('openclaw', ['devices', 'reject', deviceId]);
|
|
71
|
+
sendEvent({
|
|
72
|
+
id: msg.id,
|
|
73
|
+
type: 'response',
|
|
74
|
+
action: msg.action,
|
|
75
|
+
status: 'ok',
|
|
76
|
+
data: { message: `Device ${deviceId} rejected` },
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
81
|
+
logger.error('Failed to reject device', { error: errorMessage });
|
|
82
|
+
sendEvent({
|
|
83
|
+
id: msg.id,
|
|
84
|
+
type: 'error',
|
|
85
|
+
status: 'error',
|
|
86
|
+
data: { message: `Failed to reject device: ${errorMessage}` },
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=devices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devices.js","sourceRoot":"","sources":["../../src/manage/devices.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/manage/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIlE,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GACvC,OAAO,CAAC,IAAI,CAAC,CAkBf"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { safeExec } from '../utils/exec.js';
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
export async function handleHealthAction(msg, sendEvent) {
|
|
4
|
+
switch (msg.action) {
|
|
5
|
+
case 'health.check':
|
|
6
|
+
await handleHealthCheck(msg, sendEvent);
|
|
7
|
+
break;
|
|
8
|
+
case 'health.logs':
|
|
9
|
+
await handleHealthLogs(msg, sendEvent);
|
|
10
|
+
break;
|
|
11
|
+
default:
|
|
12
|
+
sendEvent({
|
|
13
|
+
id: msg.id,
|
|
14
|
+
type: 'error',
|
|
15
|
+
status: 'error',
|
|
16
|
+
data: { message: `Unknown health action: ${msg.action}` },
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async function handleHealthCheck(msg, sendEvent) {
|
|
21
|
+
try {
|
|
22
|
+
// Check gateway service status
|
|
23
|
+
const serviceResult = await safeExec('systemctl', ['is-active', 'openclaw-gateway']);
|
|
24
|
+
const serviceStatus = serviceResult.stdout.trim();
|
|
25
|
+
// Get uptime
|
|
26
|
+
const uptimeResult = await safeExec('uptime', ['-s']);
|
|
27
|
+
const uptimeSince = uptimeResult.stdout.trim();
|
|
28
|
+
// Get openclaw version
|
|
29
|
+
let version = 'unknown';
|
|
30
|
+
try {
|
|
31
|
+
const versionResult = await safeExec('openclaw', ['--version']);
|
|
32
|
+
version = versionResult.stdout.trim();
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// openclaw may not be installed yet
|
|
36
|
+
}
|
|
37
|
+
// Check gateway HTTP endpoint
|
|
38
|
+
let gatewayReachable = false;
|
|
39
|
+
try {
|
|
40
|
+
const curlResult = await safeExec('curl', [
|
|
41
|
+
'-s',
|
|
42
|
+
'-o', '/dev/null',
|
|
43
|
+
'-w', '%{http_code}',
|
|
44
|
+
'--max-time', '3',
|
|
45
|
+
'http://127.0.0.1:18789',
|
|
46
|
+
]);
|
|
47
|
+
const httpCode = parseInt(curlResult.stdout.trim(), 10);
|
|
48
|
+
gatewayReachable = httpCode >= 200 && httpCode < 500;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// not reachable
|
|
52
|
+
}
|
|
53
|
+
// System resource info
|
|
54
|
+
const freeResult = await safeExec('free', ['-m']);
|
|
55
|
+
const memLines = freeResult.stdout.split('\n');
|
|
56
|
+
let memTotal = 0;
|
|
57
|
+
let memUsed = 0;
|
|
58
|
+
if (memLines.length > 1) {
|
|
59
|
+
const parts = memLines[1].split(/\s+/);
|
|
60
|
+
memTotal = parseInt(parts[1], 10) || 0;
|
|
61
|
+
memUsed = parseInt(parts[2], 10) || 0;
|
|
62
|
+
}
|
|
63
|
+
sendEvent({
|
|
64
|
+
id: msg.id,
|
|
65
|
+
type: 'response',
|
|
66
|
+
action: msg.action,
|
|
67
|
+
status: 'ok',
|
|
68
|
+
data: {
|
|
69
|
+
gateway: {
|
|
70
|
+
service: serviceStatus,
|
|
71
|
+
reachable: gatewayReachable,
|
|
72
|
+
version,
|
|
73
|
+
},
|
|
74
|
+
system: {
|
|
75
|
+
uptimeSince,
|
|
76
|
+
memoryMB: { total: memTotal, used: memUsed },
|
|
77
|
+
agentUptime: Math.round(process.uptime()),
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
84
|
+
logger.error('Health check failed', { error: errorMessage });
|
|
85
|
+
sendEvent({
|
|
86
|
+
id: msg.id,
|
|
87
|
+
type: 'error',
|
|
88
|
+
status: 'error',
|
|
89
|
+
data: { message: `Health check failed: ${errorMessage}` },
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async function handleHealthLogs(msg, sendEvent) {
|
|
94
|
+
try {
|
|
95
|
+
const lines = msg.params?.lines ?? 100;
|
|
96
|
+
const result = await safeExec('systemctl', ['status', 'openclaw-gateway']);
|
|
97
|
+
sendEvent({
|
|
98
|
+
id: msg.id,
|
|
99
|
+
type: 'response',
|
|
100
|
+
action: msg.action,
|
|
101
|
+
status: 'ok',
|
|
102
|
+
data: { logs: result.stdout },
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
107
|
+
sendEvent({
|
|
108
|
+
id: msg.id,
|
|
109
|
+
type: 'error',
|
|
110
|
+
status: 'error',
|
|
111
|
+
data: { message: `Failed to get logs: ${errorMessage}` },
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/manage/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/manage/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAQlE,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,EACxC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA0Df"}
|