@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.
Files changed (85) hide show
  1. package/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +203 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/index.d.ts +9 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +6 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/manage/channels.d.ts +15 -0
  10. package/dist/manage/channels.d.ts.map +1 -0
  11. package/dist/manage/channels.js +34 -0
  12. package/dist/manage/channels.js.map +1 -0
  13. package/dist/manage/config.d.ts +3 -0
  14. package/dist/manage/config.d.ts.map +1 -0
  15. package/dist/manage/config.js +36 -0
  16. package/dist/manage/config.js.map +1 -0
  17. package/dist/manage/devices.d.ts +5 -0
  18. package/dist/manage/devices.d.ts.map +1 -0
  19. package/dist/manage/devices.js +90 -0
  20. package/dist/manage/devices.js.map +1 -0
  21. package/dist/manage/health.d.ts +3 -0
  22. package/dist/manage/health.d.ts.map +1 -0
  23. package/dist/manage/health.js +115 -0
  24. package/dist/manage/health.js.map +1 -0
  25. package/dist/manage/update.d.ts +3 -0
  26. package/dist/manage/update.d.ts.map +1 -0
  27. package/dist/manage/update.js +303 -0
  28. package/dist/manage/update.js.map +1 -0
  29. package/dist/protocol.d.ts +31 -0
  30. package/dist/protocol.d.ts.map +1 -0
  31. package/dist/protocol.js +11 -0
  32. package/dist/protocol.js.map +1 -0
  33. package/dist/server.d.ts +29 -0
  34. package/dist/server.d.ts.map +1 -0
  35. package/dist/server.js +339 -0
  36. package/dist/server.js.map +1 -0
  37. package/dist/setup/orchestrator.d.ts +23 -0
  38. package/dist/setup/orchestrator.d.ts.map +1 -0
  39. package/dist/setup/orchestrator.js +142 -0
  40. package/dist/setup/orchestrator.js.map +1 -0
  41. package/dist/setup/steps/channels.d.ts +3 -0
  42. package/dist/setup/steps/channels.d.ts.map +1 -0
  43. package/dist/setup/steps/channels.js +38 -0
  44. package/dist/setup/steps/channels.js.map +1 -0
  45. package/dist/setup/steps/configure.d.ts +3 -0
  46. package/dist/setup/steps/configure.d.ts.map +1 -0
  47. package/dist/setup/steps/configure.js +65 -0
  48. package/dist/setup/steps/configure.js.map +1 -0
  49. package/dist/setup/steps/health.d.ts +3 -0
  50. package/dist/setup/steps/health.d.ts.map +1 -0
  51. package/dist/setup/steps/health.js +95 -0
  52. package/dist/setup/steps/health.js.map +1 -0
  53. package/dist/setup/steps/openclaw.d.ts +3 -0
  54. package/dist/setup/steps/openclaw.d.ts.map +1 -0
  55. package/dist/setup/steps/openclaw.js +22 -0
  56. package/dist/setup/steps/openclaw.js.map +1 -0
  57. package/dist/setup/steps/service.d.ts +3 -0
  58. package/dist/setup/steps/service.d.ts.map +1 -0
  59. package/dist/setup/steps/service.js +37 -0
  60. package/dist/setup/steps/service.js.map +1 -0
  61. package/dist/setup/steps/system.d.ts +3 -0
  62. package/dist/setup/steps/system.d.ts.map +1 -0
  63. package/dist/setup/steps/system.js +60 -0
  64. package/dist/setup/steps/system.js.map +1 -0
  65. package/dist/setup/steps/tailscale.d.ts +3 -0
  66. package/dist/setup/steps/tailscale.d.ts.map +1 -0
  67. package/dist/setup/steps/tailscale.js +40 -0
  68. package/dist/setup/steps/tailscale.js.map +1 -0
  69. package/dist/setup/types.d.ts +36 -0
  70. package/dist/setup/types.d.ts.map +1 -0
  71. package/dist/setup/types.js +2 -0
  72. package/dist/setup/types.js.map +1 -0
  73. package/dist/utils/crypto.d.ts +11 -0
  74. package/dist/utils/crypto.d.ts.map +1 -0
  75. package/dist/utils/crypto.js +47 -0
  76. package/dist/utils/crypto.js.map +1 -0
  77. package/dist/utils/exec.d.ts +12 -0
  78. package/dist/utils/exec.d.ts.map +1 -0
  79. package/dist/utils/exec.js +99 -0
  80. package/dist/utils/exec.js.map +1 -0
  81. package/dist/utils/logger.d.ts +4 -0
  82. package/dist/utils/logger.d.ts.map +1 -0
  83. package/dist/utils/logger.js +30 -0
  84. package/dist/utils/logger.js.map +1 -0
  85. package/package.json +40 -0
package/dist/server.js ADDED
@@ -0,0 +1,339 @@
1
+ import https from 'node:https';
2
+ import fs from 'node:fs';
3
+ import { WebSocketServer, WebSocket } from 'ws';
4
+ import { logger } from './utils/logger.js';
5
+ import { computeCertFingerprint, generateSessionToken, hashToken } from './utils/crypto.js';
6
+ import { isValidClientMessage } from './protocol.js';
7
+ import { SetupOrchestrator } from './setup/orchestrator.js';
8
+ import { handleManageAction } from './manage/update.js';
9
+ import { handleHealthAction } from './manage/health.js';
10
+ const MAX_AUTH_FAILURES = 5;
11
+ const LOCKOUT_DURATION_MS = 15 * 60 * 1000; // 15 minutes
12
+ const RATE_LIMIT_WINDOW_MS = 60 * 1000; // 1 minute
13
+ export class AgentServer {
14
+ httpsServer;
15
+ wss;
16
+ config;
17
+ orchestrator;
18
+ rateLimits = new Map();
19
+ sessionTokens = new Set();
20
+ authenticatedClients = new WeakMap();
21
+ constructor(config) {
22
+ this.config = config;
23
+ const tlsOptions = {
24
+ cert: fs.readFileSync(config.certPath, 'utf-8'),
25
+ key: fs.readFileSync(config.keyPath, 'utf-8'),
26
+ };
27
+ this.httpsServer = https.createServer(tlsOptions, this.handleHttpRequest.bind(this));
28
+ this.wss = new WebSocketServer({ server: this.httpsServer, path: '/ws' });
29
+ this.orchestrator = new SetupOrchestrator(config.configDir);
30
+ this.wss.on('connection', this.handleConnection.bind(this));
31
+ }
32
+ async start() {
33
+ return new Promise((resolve) => {
34
+ this.httpsServer.listen(this.config.port, '0.0.0.0', () => {
35
+ logger.info(`Agent server listening on port ${this.config.port}`);
36
+ resolve();
37
+ });
38
+ });
39
+ }
40
+ async stop() {
41
+ this.wss.clients.forEach((client) => client.close());
42
+ return new Promise((resolve, reject) => {
43
+ this.httpsServer.close((err) => {
44
+ if (err)
45
+ reject(err);
46
+ else
47
+ resolve();
48
+ });
49
+ });
50
+ }
51
+ handleHttpRequest(req, res) {
52
+ res.setHeader('Access-Control-Allow-Origin', '*');
53
+ res.setHeader('Access-Control-Allow-Methods', 'GET');
54
+ if (req.method === 'GET' && req.url === '/health') {
55
+ const setupStatus = this.orchestrator.getStatus();
56
+ res.writeHead(200, { 'Content-Type': 'application/json' });
57
+ res.end(JSON.stringify({
58
+ status: 'ok',
59
+ version: process.env.npm_package_version ?? '0.1.0',
60
+ setup: setupStatus.state,
61
+ uptime: process.uptime(),
62
+ }));
63
+ return;
64
+ }
65
+ if (req.method === 'GET' && req.url === '/setup-status') {
66
+ const status = this.orchestrator.getStatus();
67
+ res.writeHead(200, { 'Content-Type': 'application/json' });
68
+ res.end(JSON.stringify(status));
69
+ return;
70
+ }
71
+ if (req.method === 'GET' && req.url === '/fingerprint') {
72
+ const cert = fs.readFileSync(this.config.certPath, 'utf-8');
73
+ const fingerprint = computeCertFingerprint(cert);
74
+ res.writeHead(200, { 'Content-Type': 'application/json' });
75
+ res.end(JSON.stringify({ fingerprint }));
76
+ return;
77
+ }
78
+ res.writeHead(404, { 'Content-Type': 'application/json' });
79
+ res.end(JSON.stringify({ error: 'Not found' }));
80
+ }
81
+ handleConnection(ws, req) {
82
+ const ip = req.socket.remoteAddress ?? 'unknown';
83
+ logger.info(`WebSocket connection from ${ip}`);
84
+ // Check rate limit
85
+ if (this.isRateLimited(ip)) {
86
+ logger.warn(`Rate-limited connection attempt from ${ip}`);
87
+ this.send(ws, {
88
+ type: 'error',
89
+ status: 'error',
90
+ data: { message: 'Too many failed authentication attempts. Try again later.' },
91
+ });
92
+ ws.close(4029, 'Rate limited');
93
+ return;
94
+ }
95
+ // Set authentication timeout - must authenticate within 10 seconds
96
+ const authTimeout = setTimeout(() => {
97
+ if (!this.authenticatedClients.get(ws)) {
98
+ logger.warn(`Authentication timeout for ${ip}`);
99
+ ws.close(4001, 'Authentication timeout');
100
+ }
101
+ }, 10_000);
102
+ ws.on('message', (data) => {
103
+ this.handleMessage(ws, data, ip).catch((err) => {
104
+ logger.error('Error handling message', { error: err });
105
+ this.send(ws, {
106
+ type: 'error',
107
+ status: 'error',
108
+ data: { message: 'Internal server error' },
109
+ });
110
+ });
111
+ });
112
+ ws.on('close', () => {
113
+ clearTimeout(authTimeout);
114
+ this.authenticatedClients.delete(ws);
115
+ logger.info(`WebSocket disconnected: ${ip}`);
116
+ });
117
+ ws.on('error', (err) => {
118
+ logger.error(`WebSocket error from ${ip}`, { error: err.message });
119
+ });
120
+ }
121
+ async handleMessage(ws, raw, ip) {
122
+ let parsed;
123
+ try {
124
+ parsed = JSON.parse(String(raw));
125
+ }
126
+ catch {
127
+ this.send(ws, { type: 'error', status: 'error', data: { message: 'Invalid JSON' } });
128
+ return;
129
+ }
130
+ if (!isValidClientMessage(parsed)) {
131
+ this.send(ws, {
132
+ type: 'error',
133
+ status: 'error',
134
+ data: { message: 'Invalid message format' },
135
+ });
136
+ return;
137
+ }
138
+ const msg = parsed;
139
+ // Authenticate
140
+ if (!this.authenticatedClients.get(ws)) {
141
+ const tokenHash = hashToken(msg.token);
142
+ const isValidPairing = tokenHash === this.config.pairingTokenHash;
143
+ const isValidSession = this.sessionTokens.has(msg.token);
144
+ if (!isValidPairing && !isValidSession) {
145
+ this.recordAuthFailure(ip);
146
+ this.send(ws, {
147
+ id: msg.id,
148
+ type: 'error',
149
+ status: 'error',
150
+ data: { message: 'Authentication failed' },
151
+ });
152
+ if (this.isRateLimited(ip)) {
153
+ ws.close(4029, 'Rate limited');
154
+ }
155
+ return;
156
+ }
157
+ this.authenticatedClients.set(ws, true);
158
+ // Issue a session token if they used the pairing token
159
+ if (isValidPairing) {
160
+ const sessionToken = generateSessionToken();
161
+ this.sessionTokens.add(sessionToken);
162
+ this.send(ws, {
163
+ id: msg.id,
164
+ type: 'response',
165
+ action: 'auth',
166
+ status: 'ok',
167
+ data: { sessionToken, message: 'Authenticated' },
168
+ });
169
+ return;
170
+ }
171
+ }
172
+ // Route the message
173
+ await this.routeMessage(ws, msg);
174
+ }
175
+ async routeMessage(ws, msg) {
176
+ const sendEvent = (event) => this.send(ws, event);
177
+ try {
178
+ switch (msg.type) {
179
+ case 'setup':
180
+ await this.handleSetupAction(ws, msg, sendEvent);
181
+ break;
182
+ case 'manage':
183
+ await handleManageAction(msg, sendEvent, this.config.configDir);
184
+ break;
185
+ case 'health':
186
+ await handleHealthAction(msg, sendEvent);
187
+ break;
188
+ default:
189
+ this.send(ws, {
190
+ id: msg.id,
191
+ type: 'error',
192
+ status: 'error',
193
+ data: { message: `Unknown message type: ${msg.type}` },
194
+ });
195
+ }
196
+ }
197
+ catch (err) {
198
+ const message = err instanceof Error ? err.message : 'Unknown error';
199
+ this.send(ws, {
200
+ id: msg.id,
201
+ type: 'error',
202
+ status: 'error',
203
+ data: { message },
204
+ });
205
+ }
206
+ }
207
+ async handleSetupAction(ws, msg, sendEvent) {
208
+ switch (msg.action) {
209
+ case 'setup.start': {
210
+ const config = msg.params;
211
+ if (!config) {
212
+ sendEvent({
213
+ id: msg.id,
214
+ type: 'error',
215
+ status: 'error',
216
+ data: { message: 'Missing setup configuration in params' },
217
+ });
218
+ return;
219
+ }
220
+ this.orchestrator.on('step.started', (step) => {
221
+ sendEvent({ type: 'event', event: 'step.started', payload: { step } });
222
+ });
223
+ this.orchestrator.on('step.progress', (step, progress) => {
224
+ sendEvent({ type: 'event', event: 'step.progress', payload: { step, progress } });
225
+ });
226
+ this.orchestrator.on('step.completed', (step, duration) => {
227
+ sendEvent({ type: 'event', event: 'step.completed', payload: { step, duration } });
228
+ });
229
+ this.orchestrator.on('step.error', (step, error) => {
230
+ sendEvent({ type: 'event', event: 'step.error', payload: { step, error } });
231
+ });
232
+ this.orchestrator.on('log', (step, output) => {
233
+ sendEvent({ type: 'event', event: 'log', payload: { step, output } });
234
+ });
235
+ const result = await this.orchestrator.run(config);
236
+ sendEvent({
237
+ id: msg.id,
238
+ type: 'event',
239
+ event: 'setup.completed',
240
+ payload: { message: 'Setup completed' },
241
+ data: result,
242
+ status: 'ok',
243
+ });
244
+ break;
245
+ }
246
+ case 'setup.status': {
247
+ const status = this.orchestrator.getStatus();
248
+ sendEvent({
249
+ id: msg.id,
250
+ type: 'response',
251
+ action: msg.action,
252
+ status: 'ok',
253
+ data: status,
254
+ });
255
+ break;
256
+ }
257
+ case 'setup.retry': {
258
+ const stepName = msg.params?.step;
259
+ if (!stepName) {
260
+ sendEvent({
261
+ id: msg.id,
262
+ type: 'error',
263
+ status: 'error',
264
+ data: { message: 'Missing step name for retry' },
265
+ });
266
+ return;
267
+ }
268
+ await this.orchestrator.retryStep(stepName);
269
+ sendEvent({
270
+ id: msg.id,
271
+ type: 'response',
272
+ action: msg.action,
273
+ status: 'ok',
274
+ data: { message: `Step ${stepName} retried` },
275
+ });
276
+ break;
277
+ }
278
+ default:
279
+ sendEvent({
280
+ id: msg.id,
281
+ type: 'error',
282
+ status: 'error',
283
+ data: { message: `Unknown setup action: ${msg.action}` },
284
+ });
285
+ }
286
+ }
287
+ async autoStartSetup(config) {
288
+ logger.info('Auto-starting setup from init-config');
289
+ try {
290
+ const result = await this.orchestrator.run(config);
291
+ logger.info('Auto-setup finished', { success: result.success });
292
+ return result;
293
+ }
294
+ catch (err) {
295
+ logger.error('Auto-setup failed', {
296
+ error: err instanceof Error ? err.message : String(err),
297
+ });
298
+ return { success: false, error: err instanceof Error ? err.message : String(err) };
299
+ }
300
+ }
301
+ send(ws, message) {
302
+ if (ws.readyState === WebSocket.OPEN) {
303
+ ws.send(JSON.stringify(message));
304
+ }
305
+ }
306
+ isRateLimited(ip) {
307
+ const entry = this.rateLimits.get(ip);
308
+ if (!entry)
309
+ return false;
310
+ if (entry.lockedUntil > Date.now())
311
+ return true;
312
+ if (entry.lockedUntil > 0 && entry.lockedUntil <= Date.now()) {
313
+ this.rateLimits.delete(ip);
314
+ return false;
315
+ }
316
+ return false;
317
+ }
318
+ recordAuthFailure(ip) {
319
+ const now = Date.now();
320
+ let entry = this.rateLimits.get(ip);
321
+ if (!entry) {
322
+ entry = { failures: 0, lockedUntil: 0 };
323
+ this.rateLimits.set(ip, entry);
324
+ }
325
+ entry.failures++;
326
+ if (entry.failures >= MAX_AUTH_FAILURES) {
327
+ entry.lockedUntil = now + LOCKOUT_DURATION_MS;
328
+ logger.warn(`IP ${ip} locked out for 15 minutes after ${entry.failures} failed attempts`);
329
+ }
330
+ // Reset failures after the rate limit window
331
+ setTimeout(() => {
332
+ const current = this.rateLimits.get(ip);
333
+ if (current && current.lockedUntil === 0) {
334
+ current.failures = Math.max(0, current.failures - 1);
335
+ }
336
+ }, RATE_LIMIT_WINDOW_MS);
337
+ }
338
+ }
339
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import type { StepStatus } from './types.js';
3
+ export type OrchestratorState = 'idle' | 'running' | 'completed' | 'error';
4
+ export declare class SetupOrchestrator extends EventEmitter {
5
+ private state;
6
+ private stepStatuses;
7
+ private config;
8
+ private configDir;
9
+ private results;
10
+ constructor(configDir: string);
11
+ getStatus(): {
12
+ results?: {
13
+ [k: string]: unknown;
14
+ } | undefined;
15
+ state: OrchestratorState;
16
+ steps: StepStatus[];
17
+ };
18
+ run(rawConfig: Record<string, unknown>): Promise<Record<string, unknown>>;
19
+ retryStep(stepName: string): Promise<void>;
20
+ private executeStep;
21
+ private updateStepStatus;
22
+ }
23
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/setup/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAsC,UAAU,EAAa,MAAM,YAAY,CAAC;AAS5F,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAe3E,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAA8B;gBAEjC,SAAS,EAAE,MAAM;IAa7B,SAAS;;;;;;;IAUH,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAyCzE,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAelC,WAAW;IAuCzB,OAAO,CAAC,gBAAgB;CASzB"}
@@ -0,0 +1,142 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import { logger } from '../utils/logger.js';
3
+ import { systemStep } from './steps/system.js';
4
+ import { openclawStep } from './steps/openclaw.js';
5
+ import { configureStep } from './steps/configure.js';
6
+ import { tailscaleStep } from './steps/tailscale.js';
7
+ import { channelsStep } from './steps/channels.js';
8
+ import { serviceStep } from './steps/service.js';
9
+ import { healthStep } from './steps/health.js';
10
+ const MAX_RETRIES = 3;
11
+ const BASE_BACKOFF_MS = 1000;
12
+ const ALL_STEPS = [
13
+ systemStep,
14
+ openclawStep,
15
+ configureStep,
16
+ tailscaleStep,
17
+ channelsStep,
18
+ serviceStep,
19
+ healthStep,
20
+ ];
21
+ export class SetupOrchestrator extends EventEmitter {
22
+ state = 'idle';
23
+ stepStatuses = new Map();
24
+ config = null;
25
+ configDir;
26
+ results = new Map();
27
+ constructor(configDir) {
28
+ super();
29
+ this.configDir = configDir;
30
+ for (const step of ALL_STEPS) {
31
+ this.stepStatuses.set(step.name, {
32
+ name: step.name,
33
+ state: 'pending',
34
+ retries: 0,
35
+ });
36
+ }
37
+ }
38
+ getStatus() {
39
+ return {
40
+ state: this.state,
41
+ steps: Array.from(this.stepStatuses.values()),
42
+ ...(this.state === 'completed' || this.state === 'error'
43
+ ? { results: Object.fromEntries(this.results) }
44
+ : {}),
45
+ };
46
+ }
47
+ async run(rawConfig) {
48
+ if (this.state === 'running') {
49
+ throw new Error('Setup is already running');
50
+ }
51
+ this.config = rawConfig;
52
+ this.state = 'running';
53
+ logger.info('Starting setup orchestration');
54
+ const ctx = {
55
+ config: this.config,
56
+ configDir: this.configDir,
57
+ emit: this.emit.bind(this),
58
+ results: this.results,
59
+ };
60
+ for (const step of ALL_STEPS) {
61
+ if (!step.shouldRun(this.config)) {
62
+ this.updateStepStatus(step.name, 'skipped');
63
+ logger.info(`Skipping step: ${step.name}`);
64
+ continue;
65
+ }
66
+ const success = await this.executeStep(step, ctx);
67
+ if (!success && step.required) {
68
+ this.state = 'error';
69
+ logger.error(`Required step failed: ${step.name}. Aborting setup.`);
70
+ return { success: false, failedStep: step.name, steps: this.getStatus().steps };
71
+ }
72
+ }
73
+ this.state = 'completed';
74
+ logger.info('Setup orchestration completed successfully');
75
+ return {
76
+ success: true,
77
+ steps: this.getStatus().steps,
78
+ results: Object.fromEntries(this.results),
79
+ };
80
+ }
81
+ async retryStep(stepName) {
82
+ const step = ALL_STEPS.find((s) => s.name === stepName);
83
+ if (!step)
84
+ throw new Error(`Unknown step: ${stepName}`);
85
+ if (!this.config)
86
+ throw new Error('No setup configuration loaded');
87
+ const ctx = {
88
+ config: this.config,
89
+ configDir: this.configDir,
90
+ emit: this.emit.bind(this),
91
+ results: this.results,
92
+ };
93
+ await this.executeStep(step, ctx);
94
+ }
95
+ async executeStep(step, ctx) {
96
+ const status = this.stepStatuses.get(step.name);
97
+ for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
98
+ if (attempt > 0) {
99
+ const backoff = BASE_BACKOFF_MS * Math.pow(2, attempt - 1);
100
+ logger.info(`Retrying step ${step.name} (attempt ${attempt + 1}) after ${backoff}ms`);
101
+ await sleep(backoff);
102
+ status.retries = attempt;
103
+ }
104
+ this.updateStepStatus(step.name, 'running');
105
+ this.emit('step.started', step.name);
106
+ const startTime = Date.now();
107
+ try {
108
+ await step.execute(ctx);
109
+ const duration = Date.now() - startTime;
110
+ status.duration = duration;
111
+ this.updateStepStatus(step.name, 'completed');
112
+ this.emit('step.completed', step.name, duration);
113
+ logger.info(`Step ${step.name} completed in ${duration}ms`);
114
+ return true;
115
+ }
116
+ catch (err) {
117
+ const errorMessage = err instanceof Error ? err.message : String(err);
118
+ status.error = errorMessage;
119
+ logger.error(`Step ${step.name} failed (attempt ${attempt + 1})`, { error: errorMessage });
120
+ this.emit('step.error', step.name, errorMessage);
121
+ if (attempt === MAX_RETRIES) {
122
+ this.updateStepStatus(step.name, 'error');
123
+ return false;
124
+ }
125
+ }
126
+ }
127
+ return false;
128
+ }
129
+ updateStepStatus(name, state) {
130
+ const status = this.stepStatuses.get(name);
131
+ if (status) {
132
+ status.state = state;
133
+ if (state !== 'error') {
134
+ status.error = undefined;
135
+ }
136
+ }
137
+ }
138
+ }
139
+ function sleep(ms) {
140
+ return new Promise((resolve) => setTimeout(resolve, ms));
141
+ }
142
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/setup/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SetupStep } from '../types.js';
2
+ export declare const channelsStep: SetupStep;
3
+ //# sourceMappingURL=channels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../../src/setup/steps/channels.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,aAAa,CAAC;AAG1D,eAAO,MAAM,YAAY,EAAE,SAuC1B,CAAC"}
@@ -0,0 +1,38 @@
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
+ export const channelsStep = {
6
+ name: 'channels',
7
+ description: 'Configure messaging channels',
8
+ required: false,
9
+ shouldRun: (config) => config.channels.length > 0,
10
+ async execute(ctx) {
11
+ const channels = ctx.config.channels;
12
+ ctx.emit('log', 'channels', `Configuring ${channels.length} channel(s)...`);
13
+ ctx.emit('step.progress', 'channels', 10);
14
+ const openclawDir = path.join(os.homedir(), '.openclaw');
15
+ const configPath = path.join(openclawDir, 'openclaw.json');
16
+ // Read existing config
17
+ const rawConfig = await fs.readFile(configPath, 'utf-8');
18
+ const openclawConfig = JSON.parse(rawConfig);
19
+ // Update channels section
20
+ openclawConfig.channels = channels.map((ch, idx) => {
21
+ ctx.emit('log', 'channels', `Configuring channel: ${ch.type} (${ch.name})`);
22
+ const progress = 10 + Math.round(((idx + 1) / channels.length) * 80);
23
+ ctx.emit('step.progress', 'channels', progress);
24
+ return {
25
+ type: ch.type,
26
+ name: ch.name,
27
+ enabled: true,
28
+ config: ch.config,
29
+ };
30
+ });
31
+ // Write updated config
32
+ await fs.writeFile(configPath, JSON.stringify(openclawConfig, null, 2), 'utf-8');
33
+ ctx.emit('step.progress', 'channels', 100);
34
+ ctx.emit('log', 'channels', `${channels.length} channel(s) configured successfully`);
35
+ logger.info(`Configured ${channels.length} channels`);
36
+ },
37
+ };
38
+ //# sourceMappingURL=channels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../../src/setup/steps/channels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,CAAC,MAAM,YAAY,GAAc;IACrC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,8BAA8B;IAC3C,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;IAEjD,KAAK,CAAC,OAAO,CAAC,GAAgB;QAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;QACrC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,eAAe,QAAQ,CAAC,MAAM,gBAAgB,CAAC,CAAC;QAC5E,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAE1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAE3D,uBAAuB;QACvB,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAE7C,0BAA0B;QAC1B,cAAc,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;YACjD,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,wBAAwB,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5E,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACrE,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEhD,OAAO;gBACL,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,EAAE,CAAC,MAAM;aAClB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAEjF,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QAC3C,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC,MAAM,qCAAqC,CAAC,CAAC;QACrF,MAAM,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC;IACxD,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SetupStep } from '../types.js';
2
+ export declare const configureStep: SetupStep;
3
+ //# sourceMappingURL=configure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../../../src/setup/steps/configure.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,aAAa,CAAC;AAY1D,eAAO,MAAM,aAAa,EAAE,SA2D3B,CAAC"}