@astroanywhere/agent 0.2.4 → 0.2.5

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 (49) hide show
  1. package/README.md +19 -15
  2. package/dist/cli.js +6 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/setup.d.ts.map +1 -1
  5. package/dist/commands/setup.js +89 -14
  6. package/dist/commands/setup.js.map +1 -1
  7. package/dist/commands/start.d.ts.map +1 -1
  8. package/dist/commands/start.js +4 -0
  9. package/dist/commands/start.js.map +1 -1
  10. package/dist/lib/display.d.ts +1 -1
  11. package/dist/lib/display.d.ts.map +1 -1
  12. package/dist/lib/display.js +5 -0
  13. package/dist/lib/display.js.map +1 -1
  14. package/dist/lib/openclaw-bridge.d.ts +39 -7
  15. package/dist/lib/openclaw-bridge.d.ts.map +1 -1
  16. package/dist/lib/openclaw-bridge.js +256 -40
  17. package/dist/lib/openclaw-bridge.js.map +1 -1
  18. package/dist/lib/openclaw-gateway.d.ts +52 -0
  19. package/dist/lib/openclaw-gateway.d.ts.map +1 -0
  20. package/dist/lib/openclaw-gateway.js +116 -0
  21. package/dist/lib/openclaw-gateway.js.map +1 -0
  22. package/dist/lib/providers.d.ts.map +1 -1
  23. package/dist/lib/providers.js +6 -37
  24. package/dist/lib/providers.js.map +1 -1
  25. package/dist/lib/ssh-discovery.d.ts +3 -1
  26. package/dist/lib/ssh-discovery.d.ts.map +1 -1
  27. package/dist/lib/ssh-discovery.js +34 -24
  28. package/dist/lib/ssh-discovery.js.map +1 -1
  29. package/dist/lib/ssh-installer.d.ts +26 -0
  30. package/dist/lib/ssh-installer.d.ts.map +1 -1
  31. package/dist/lib/ssh-installer.js +126 -4
  32. package/dist/lib/ssh-installer.js.map +1 -1
  33. package/dist/lib/task-executor.d.ts +7 -0
  34. package/dist/lib/task-executor.d.ts.map +1 -1
  35. package/dist/lib/task-executor.js +16 -2
  36. package/dist/lib/task-executor.js.map +1 -1
  37. package/dist/lib/websocket-client.d.ts +3 -0
  38. package/dist/lib/websocket-client.d.ts.map +1 -1
  39. package/dist/lib/websocket-client.js +6 -0
  40. package/dist/lib/websocket-client.js.map +1 -1
  41. package/dist/providers/index.d.ts +3 -1
  42. package/dist/providers/index.d.ts.map +1 -1
  43. package/dist/providers/index.js +9 -3
  44. package/dist/providers/index.js.map +1 -1
  45. package/dist/providers/openclaw-adapter.d.ts +21 -29
  46. package/dist/providers/openclaw-adapter.d.ts.map +1 -1
  47. package/dist/providers/openclaw-adapter.js +147 -385
  48. package/dist/providers/openclaw-adapter.js.map +1 -1
  49. package/package.json +1 -1
@@ -1,12 +1,16 @@
1
1
  /**
2
- * OpenClaw Bridge — Persistent gateway connection for channel operations
2
+ * OpenClaw Bridge — Persistent gateway connection for channel operations + task execution
3
3
  *
4
- * Unlike the per-task OpenClawAdapter (which creates a new connection per task),
5
- * the bridge maintains a single long-lived WebSocket to the OpenClaw gateway
6
- * for notification delivery, approval routing, and inbound message forwarding.
4
+ * Maintains a single long-lived WebSocket to the OpenClaw gateway for:
5
+ * 1. Channel relay: notification delivery, approval routing, inbound message forwarding
6
+ * 2. Task execution: session-multiplexed chat.send for adapter-delegated tasks
7
7
  *
8
- * This enables the relay-routed architecture:
9
- * Server → Relay → Agent Runner (bridge) OpenClaw Gateway → User channels
8
+ * Architecture after consolidation:
9
+ * Server → Relay → Agent Runner → OpenClawAdapter (thin wrapper)
10
+ * ↓ setBridge()
11
+ * OpenClawBridge (single WS) → local gateway
12
+ * ↑
13
+ * Channel relay (notifications/approvals)
10
14
  */
11
15
  import { EventEmitter } from 'node:events';
12
16
  import { readFileSync, existsSync } from 'node:fs';
@@ -14,12 +18,12 @@ import { join } from 'node:path';
14
18
  import { homedir } from 'node:os';
15
19
  import WebSocket from 'ws';
16
20
  import { randomUUID } from 'node:crypto';
21
+ import { readGatewayConfig, parseGatewayFrame, matchesSessionKey, PROTOCOL_VERSION, CONNECT_TIMEOUT_MS, } from './openclaw-gateway.js';
17
22
  // ---------------------------------------------------------------------------
18
23
  // Constants
19
24
  // ---------------------------------------------------------------------------
20
- const PROTOCOL_VERSION = 3;
21
- const CONNECT_TIMEOUT_MS = 10_000;
22
25
  const REQUEST_TIMEOUT_MS = 15_000;
26
+ const TASK_REQUEST_TIMEOUT_MS = 120_000; // chat.send can take longer to respond
23
27
  const APPROVAL_TIMEOUT_MS = 300_000; // 5 minutes
24
28
  const RECONNECT_DELAY_MS = 5_000;
25
29
  // ---------------------------------------------------------------------------
@@ -30,6 +34,7 @@ export class OpenClawBridge extends EventEmitter {
30
34
  gatewayConfig = null;
31
35
  pendingRequests = new Map();
32
36
  pendingApprovals = new Map();
37
+ activeSessions = new Map();
33
38
  _connected = false;
34
39
  _started = false;
35
40
  _connecting = false;
@@ -45,7 +50,7 @@ export class OpenClawBridge extends EventEmitter {
45
50
  async start() {
46
51
  if (this._started)
47
52
  return this._connected;
48
- const config = this.readGatewayConfig();
53
+ const config = readGatewayConfig();
49
54
  if (!config)
50
55
  return false;
51
56
  this.gatewayConfig = config;
@@ -81,6 +86,8 @@ export class OpenClawBridge extends EventEmitter {
81
86
  pending.reject(new Error('Bridge stopped'));
82
87
  this.pendingApprovals.delete(id);
83
88
  }
89
+ // Fail all active task sessions
90
+ this.failAllActiveSessions('Bridge stopped');
84
91
  if (this.ws) {
85
92
  this.ws.removeAllListeners();
86
93
  this.ws.close();
@@ -90,27 +97,6 @@ export class OpenClawBridge extends EventEmitter {
90
97
  // to prevent leaks if the bridge is restarted after stop()
91
98
  this.removeAllListeners();
92
99
  }
93
- // ─── Gateway Config ─────────────────────────────────────────────
94
- readGatewayConfig() {
95
- try {
96
- const configPath = join(homedir(), '.openclaw', 'openclaw.json');
97
- if (!existsSync(configPath))
98
- return null;
99
- const raw = JSON.parse(readFileSync(configPath, 'utf-8'));
100
- const port = raw?.gateway?.port;
101
- if (!port)
102
- return null;
103
- const token = raw?.gateway?.auth?.token || '';
104
- const bind = raw?.gateway?.bind || '127.0.0.1';
105
- const host = bind === 'loopback' || bind === '127.0.0.1' ? '127.0.0.1' : bind;
106
- // Read default notification recipient from astro-specific config
107
- const defaultRecipient = raw?.astro?.notifyTo || undefined;
108
- return { port, token, url: `ws://${host}:${port}`, defaultRecipient };
109
- }
110
- catch {
111
- return null;
112
- }
113
- }
114
100
  // ─── Gateway Connection ─────────────────────────────────────────
115
101
  connect() {
116
102
  if (!this.gatewayConfig)
@@ -137,13 +123,9 @@ export class OpenClawBridge extends EventEmitter {
137
123
  const ws = new WebSocket(this.gatewayConfig.url);
138
124
  this.ws = ws;
139
125
  ws.on('message', (data) => {
140
- let frame;
141
- try {
142
- frame = JSON.parse(String(data));
143
- }
144
- catch {
126
+ const frame = parseGatewayFrame(data);
127
+ if (!frame)
145
128
  return;
146
- }
147
129
  // Challenge → send connect
148
130
  if (frame.type === 'event' && frame.event === 'connect.challenge') {
149
131
  ws.send(JSON.stringify({
@@ -159,7 +141,7 @@ export class OpenClawBridge extends EventEmitter {
159
141
  platform: process.platform,
160
142
  mode: 'backend',
161
143
  },
162
- caps: [],
144
+ caps: ['tool-events'],
163
145
  auth: { token: this.gatewayConfig.token },
164
146
  role: 'operator',
165
147
  scopes: ['operator.read', 'operator.write', 'operator.admin'],
@@ -194,8 +176,12 @@ export class OpenClawBridge extends EventEmitter {
194
176
  }
195
177
  });
196
178
  ws.on('close', () => {
179
+ const wasConnected = this._connected;
197
180
  this._connected = false;
198
181
  this.ws = null;
182
+ if (wasConnected) {
183
+ this.failAllActiveSessions('Gateway connection closed unexpectedly');
184
+ }
199
185
  this.emit('disconnected');
200
186
  if (this._started) {
201
187
  this.scheduleReconnect();
@@ -222,17 +208,18 @@ export class OpenClawBridge extends EventEmitter {
222
208
  }, RECONNECT_DELAY_MS);
223
209
  }
224
210
  // ─── Request/Response ───────────────────────────────────────────
225
- sendRequest(method, params) {
211
+ sendRequest(method, params, timeoutMs) {
226
212
  return new Promise((resolve, reject) => {
227
213
  if (!this.isConnected) {
228
214
  reject(new Error('OpenClaw gateway not connected'));
229
215
  return;
230
216
  }
231
217
  const id = randomUUID();
218
+ const effectiveTimeout = timeoutMs ?? REQUEST_TIMEOUT_MS;
232
219
  const timeoutId = setTimeout(() => {
233
220
  this.pendingRequests.delete(id);
234
221
  reject(new Error(`Request ${method} timed out`));
235
- }, REQUEST_TIMEOUT_MS);
222
+ }, effectiveTimeout);
236
223
  this.pendingRequests.set(id, { resolve, reject, timeoutId });
237
224
  try {
238
225
  this.ws.send(JSON.stringify({
@@ -265,6 +252,11 @@ export class OpenClawBridge extends EventEmitter {
265
252
  }
266
253
  }
267
254
  handleEvent(frame) {
255
+ // Route agent and chat events to active task sessions
256
+ if (frame.event === 'agent' || frame.event === 'chat') {
257
+ this.routeTaskEvent(frame);
258
+ return;
259
+ }
268
260
  if (frame.event === 'approval.response') {
269
261
  // Direct approval response (if gateway supports it in the future)
270
262
  const approvalId = frame.payload?.approvalId;
@@ -290,6 +282,7 @@ export class OpenClawBridge extends EventEmitter {
290
282
  // Otherwise forward as a regular inbound message
291
283
  this.emit('inbound', frame.payload);
292
284
  }
285
+ // Ignore tick/health/presence/heartbeat silently
293
286
  }
294
287
  resolveApproval(approvalId, response) {
295
288
  const pending = this.pendingApprovals.get(approvalId);
@@ -300,7 +293,230 @@ export class OpenClawBridge extends EventEmitter {
300
293
  }
301
294
  this.emit('approval-response', { approvalId, response });
302
295
  }
303
- // ─── Public API ─────────────────────────────────────────────────
296
+ // ─── Task Execution (Session Multiplexing) ─────────────────────
297
+ /**
298
+ * Execute a task by sending chat.send through the shared WebSocket connection.
299
+ * Returns a Promise that resolves when the task completes (lifecycle.end + chat.final).
300
+ */
301
+ executeTask(sessionKey, message, stream, signal, timeout) {
302
+ return new Promise((resolve, reject) => {
303
+ if (!this.isConnected) {
304
+ reject(new Error('OpenClaw gateway not connected'));
305
+ return;
306
+ }
307
+ const session = {
308
+ sessionKey,
309
+ outputText: '',
310
+ artifacts: [],
311
+ metrics: undefined,
312
+ lifecycleEnded: false,
313
+ chatFinalReceived: false,
314
+ finished: false,
315
+ stream,
316
+ signal,
317
+ abortHandler: () => { },
318
+ resolve,
319
+ };
320
+ // Abort handler
321
+ session.abortHandler = () => {
322
+ try {
323
+ this.ws?.send(JSON.stringify({
324
+ type: 'req',
325
+ id: `abort-${randomUUID()}`,
326
+ method: 'chat.abort',
327
+ params: { sessionKey },
328
+ }));
329
+ }
330
+ catch { /* ignore */ }
331
+ this.finishSession(sessionKey, 'Task cancelled');
332
+ };
333
+ signal.addEventListener('abort', session.abortHandler);
334
+ // Task-level timeout
335
+ if (timeout) {
336
+ session.taskTimeout = setTimeout(() => {
337
+ this.finishSession(sessionKey, 'Task timed out');
338
+ }, timeout);
339
+ }
340
+ this.activeSessions.set(sessionKey, session);
341
+ // Send chat.send via the shared request mechanism
342
+ const idempotencyKey = randomUUID();
343
+ this.sendRequest('chat.send', {
344
+ sessionKey,
345
+ message,
346
+ idempotencyKey,
347
+ }, TASK_REQUEST_TIMEOUT_MS).then((payload) => {
348
+ const p = payload;
349
+ const runId = p?.runId;
350
+ if (runId) {
351
+ stream.status('running', 10, 'Task dispatched to agent');
352
+ }
353
+ }).catch((err) => {
354
+ this.finishSession(sessionKey, `Gateway rejected task: ${err.message}`);
355
+ });
356
+ });
357
+ }
358
+ /**
359
+ * Send a chat message to resume an existing session.
360
+ * Simplified variant of executeTask without artifact tracking.
361
+ */
362
+ sendChatMessage(sessionKey, message, stream, signal) {
363
+ return this.executeTask(sessionKey, message, stream, signal);
364
+ }
365
+ /** Route agent/chat events to the correct TaskSession */
366
+ routeTaskEvent(frame) {
367
+ const p = frame.payload || {};
368
+ // Find the matching session by sessionKey
369
+ let session;
370
+ for (const s of this.activeSessions.values()) {
371
+ if (matchesSessionKey(p.sessionKey, s.sessionKey)) {
372
+ session = s;
373
+ break;
374
+ }
375
+ }
376
+ if (!session || session.finished)
377
+ return;
378
+ if (frame.event === 'agent') {
379
+ this.handleAgentEvent(session, p);
380
+ }
381
+ else if (frame.event === 'chat') {
382
+ this.handleChatEvent(session, p);
383
+ }
384
+ }
385
+ handleAgentEvent(session, payload) {
386
+ const streamType = payload.stream;
387
+ const eventData = payload.data;
388
+ if (streamType === 'lifecycle') {
389
+ const phase = eventData?.phase;
390
+ if (phase === 'start') {
391
+ session.stream.sessionInit(payload.sessionKey || session.sessionKey, eventData?.model || undefined);
392
+ }
393
+ else if (phase === 'end') {
394
+ // Extract usage metrics from lifecycle.end
395
+ const usage = eventData?.usage;
396
+ const cost = (eventData?.total_cost_usd ?? eventData?.cost_usd);
397
+ const numTurns = eventData?.num_turns;
398
+ const durationMs = eventData?.duration_ms;
399
+ const model = eventData?.model;
400
+ if (usage || cost !== undefined) {
401
+ session.metrics = {
402
+ inputTokens: usage?.input_tokens,
403
+ outputTokens: usage?.output_tokens,
404
+ totalCost: cost,
405
+ numTurns,
406
+ durationMs,
407
+ model,
408
+ };
409
+ }
410
+ session.lifecycleEnded = true;
411
+ this.tryFinishAfterLifecycle(session);
412
+ }
413
+ }
414
+ else if (streamType === 'assistant') {
415
+ const delta = eventData?.delta || eventData?.text;
416
+ if (delta) {
417
+ session.outputText += delta;
418
+ session.stream.text(delta);
419
+ }
420
+ }
421
+ else if (streamType === 'tool_use') {
422
+ const toolName = eventData?.name || eventData?.toolName || 'unknown';
423
+ const toolInput = eventData?.input || eventData?.toolInput || {};
424
+ session.stream.toolUse(toolName, toolInput);
425
+ }
426
+ else if (streamType === 'tool_result') {
427
+ const toolName = eventData?.name || eventData?.toolName || 'unknown';
428
+ const result = eventData?.result || eventData?.output || '';
429
+ const success = eventData?.success !== false;
430
+ session.stream.toolResult(toolName, result, success);
431
+ }
432
+ else if (streamType === 'file_change') {
433
+ const filePath = eventData?.path || eventData?.file;
434
+ const rawAction = eventData?.type || eventData?.action || 'modified';
435
+ const action = (['created', 'modified', 'deleted'].includes(rawAction) ? rawAction : 'modified');
436
+ if (filePath) {
437
+ session.artifacts.push({ type: 'file', name: filePath, path: filePath, metadata: { action } });
438
+ session.stream.fileChange(filePath, action);
439
+ }
440
+ }
441
+ }
442
+ handleChatEvent(session, payload) {
443
+ const state = payload.state;
444
+ if (state === 'final') {
445
+ session.chatFinalReceived = true;
446
+ // Extract final message content
447
+ const message = payload.message;
448
+ if (message) {
449
+ const content = message.content;
450
+ if (content) {
451
+ for (const block of content) {
452
+ if (block.type === 'text' && block.text) {
453
+ // Only add if not already captured via agent delta events
454
+ if (!session.outputText.includes(block.text)) {
455
+ session.outputText += block.text;
456
+ }
457
+ }
458
+ }
459
+ }
460
+ }
461
+ // Extract model/usage from chat.final if not yet captured
462
+ if (!session.metrics) {
463
+ const usage = payload.usage;
464
+ const cost = (payload.total_cost_usd ?? payload.cost_usd);
465
+ const model = (payload.model ?? payload.message?.model);
466
+ if (usage || cost !== undefined || model) {
467
+ session.metrics = {
468
+ inputTokens: usage?.input_tokens,
469
+ outputTokens: usage?.output_tokens,
470
+ totalCost: cost,
471
+ model,
472
+ };
473
+ }
474
+ }
475
+ // If lifecycle already ended, finish immediately
476
+ if (session.lifecycleEnded) {
477
+ this.finishSession(session.sessionKey);
478
+ }
479
+ }
480
+ }
481
+ /** Finish when both lifecycle.end and chat.final have been seen, or
482
+ * after a short grace period if only lifecycle.end arrived. */
483
+ tryFinishAfterLifecycle(session) {
484
+ if (session.chatFinalReceived) {
485
+ this.finishSession(session.sessionKey);
486
+ }
487
+ else {
488
+ // Grace period: if chat.final doesn't arrive within 500ms, finish anyway
489
+ session.gracePeriodTimeout = setTimeout(() => {
490
+ if (!session.finished)
491
+ this.finishSession(session.sessionKey);
492
+ }, 500);
493
+ }
494
+ }
495
+ finishSession(sessionKey, error) {
496
+ const session = this.activeSessions.get(sessionKey);
497
+ if (!session || session.finished)
498
+ return;
499
+ session.finished = true;
500
+ session.signal.removeEventListener('abort', session.abortHandler);
501
+ if (session.taskTimeout)
502
+ clearTimeout(session.taskTimeout);
503
+ if (session.gracePeriodTimeout)
504
+ clearTimeout(session.gracePeriodTimeout);
505
+ this.activeSessions.delete(sessionKey);
506
+ session.resolve({
507
+ output: session.outputText,
508
+ error,
509
+ artifacts: session.artifacts.length > 0 ? session.artifacts : undefined,
510
+ metrics: session.metrics,
511
+ });
512
+ }
513
+ /** Fail all active task sessions — called on WebSocket close before reconnect */
514
+ failAllActiveSessions(error) {
515
+ for (const sessionKey of [...this.activeSessions.keys()]) {
516
+ this.finishSession(sessionKey, error);
517
+ }
518
+ }
519
+ // ─── Public API (Channel Relay) ────────────────────────────────
304
520
  async sendNotification(notification) {
305
521
  const prefix = this.getNotificationPrefix(notification.type);
306
522
  const msg = `${prefix} ${notification.summary}${notification.astroUrl ? `\n\n${notification.astroUrl}` : ''}`;
@@ -1 +1 @@
1
- {"version":3,"file":"openclaw-bridge.js","sourceRoot":"","sources":["../../src/lib/openclaw-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openclaw-bridge.js","sourceRoot":"","sources":["../../src/lib/openclaw-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * OpenClaw Gateway — Shared utilities for adapter and bridge
3
+ *
4
+ * Consolidates config reading, probing, frame parsing, and session key
5
+ * management that was previously duplicated across openclaw-adapter.ts,
6
+ * openclaw-bridge.ts, and providers.ts.
7
+ */
8
+ export interface GatewayConfig {
9
+ port: number;
10
+ token: string;
11
+ url: string;
12
+ /** Default notification recipient (e.g., Telegram username). Read from openclaw.json */
13
+ defaultRecipient?: string;
14
+ }
15
+ export interface GatewayFrame {
16
+ type: 'event' | 'res';
17
+ id?: string;
18
+ event?: string;
19
+ ok?: boolean;
20
+ payload?: Record<string, unknown>;
21
+ error?: {
22
+ code: string;
23
+ message: string;
24
+ };
25
+ seq?: number;
26
+ }
27
+ export declare const PROTOCOL_VERSION = 3;
28
+ export declare const CONNECT_TIMEOUT_MS = 10000;
29
+ /**
30
+ * Read the OpenClaw gateway config from ~/.openclaw/openclaw.json.
31
+ * Returns null if the config file doesn't exist or is invalid.
32
+ */
33
+ export declare function readGatewayConfig(): GatewayConfig | null;
34
+ /**
35
+ * Parse a raw WebSocket message into a GatewayFrame.
36
+ * Returns null if the data is not valid JSON.
37
+ */
38
+ export declare function parseGatewayFrame(data: unknown): GatewayFrame | null;
39
+ /**
40
+ * Quick probe: connect to a WebSocket URL and check for connect.challenge.
41
+ * Does NOT perform a full handshake — just confirms the gateway is reachable.
42
+ */
43
+ export declare function probeGateway(url: string, timeoutMs?: number): Promise<boolean>;
44
+ /** Create a session key for a task */
45
+ export declare function makeSessionKey(taskId: string): string;
46
+ /**
47
+ * Check if a payload's sessionKey matches the expected key.
48
+ * The gateway prepends 'agent:main:' to session keys in events,
49
+ * so we need to match both forms.
50
+ */
51
+ export declare function matchesSessionKey(payloadKey: unknown, expectedKey: string): boolean;
52
+ //# sourceMappingURL=openclaw-gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-gateway.d.ts","sourceRoot":"","sources":["../../src/lib/openclaw-gateway.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAMD,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAMzC;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,GAAG,IAAI,CAoBxD;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAMpE;AAMD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAiC5E;AAMD,sCAAsC;AACtC,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAGnF"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * OpenClaw Gateway — Shared utilities for adapter and bridge
3
+ *
4
+ * Consolidates config reading, probing, frame parsing, and session key
5
+ * management that was previously duplicated across openclaw-adapter.ts,
6
+ * openclaw-bridge.ts, and providers.ts.
7
+ */
8
+ import { existsSync, readFileSync } from 'node:fs';
9
+ import { join } from 'node:path';
10
+ import { homedir } from 'node:os';
11
+ import WebSocket from 'ws';
12
+ // ---------------------------------------------------------------------------
13
+ // Constants
14
+ // ---------------------------------------------------------------------------
15
+ export const PROTOCOL_VERSION = 3;
16
+ export const CONNECT_TIMEOUT_MS = 10_000;
17
+ // ---------------------------------------------------------------------------
18
+ // Config Reader
19
+ // ---------------------------------------------------------------------------
20
+ /**
21
+ * Read the OpenClaw gateway config from ~/.openclaw/openclaw.json.
22
+ * Returns null if the config file doesn't exist or is invalid.
23
+ */
24
+ export function readGatewayConfig() {
25
+ try {
26
+ const configPath = join(homedir(), '.openclaw', 'openclaw.json');
27
+ if (!existsSync(configPath))
28
+ return null;
29
+ const raw = JSON.parse(readFileSync(configPath, 'utf-8'));
30
+ const port = raw?.gateway?.port;
31
+ if (!port)
32
+ return null;
33
+ const token = raw?.gateway?.auth?.token || '';
34
+ const bind = raw?.gateway?.bind || '127.0.0.1';
35
+ const host = bind === 'loopback' || bind === '127.0.0.1' ? '127.0.0.1' : bind;
36
+ // Read default notification recipient from astro-specific config
37
+ const defaultRecipient = raw?.astro?.notifyTo || undefined;
38
+ return { port, token, url: `ws://${host}:${port}`, defaultRecipient };
39
+ }
40
+ catch {
41
+ return null;
42
+ }
43
+ }
44
+ // ---------------------------------------------------------------------------
45
+ // Frame Parser
46
+ // ---------------------------------------------------------------------------
47
+ /**
48
+ * Parse a raw WebSocket message into a GatewayFrame.
49
+ * Returns null if the data is not valid JSON.
50
+ */
51
+ export function parseGatewayFrame(data) {
52
+ try {
53
+ return JSON.parse(String(data));
54
+ }
55
+ catch {
56
+ return null;
57
+ }
58
+ }
59
+ // ---------------------------------------------------------------------------
60
+ // Gateway Probe
61
+ // ---------------------------------------------------------------------------
62
+ /**
63
+ * Quick probe: connect to a WebSocket URL and check for connect.challenge.
64
+ * Does NOT perform a full handshake — just confirms the gateway is reachable.
65
+ */
66
+ export function probeGateway(url, timeoutMs = 5000) {
67
+ return new Promise((resolve) => {
68
+ let resolved = false;
69
+ const done = (val) => { if (!resolved) {
70
+ resolved = true;
71
+ resolve(val);
72
+ } };
73
+ const ws = new WebSocket(url);
74
+ const timeout = setTimeout(() => {
75
+ ws.removeAllListeners();
76
+ ws.close();
77
+ done(false);
78
+ }, timeoutMs);
79
+ ws.on('message', (data) => {
80
+ const frame = parseGatewayFrame(data);
81
+ if (frame?.type === 'event' && frame.event === 'connect.challenge') {
82
+ clearTimeout(timeout);
83
+ ws.removeAllListeners();
84
+ ws.close();
85
+ done(true);
86
+ }
87
+ });
88
+ ws.on('error', () => {
89
+ clearTimeout(timeout);
90
+ ws?.removeAllListeners();
91
+ done(false);
92
+ });
93
+ ws.on('close', () => {
94
+ clearTimeout(timeout);
95
+ done(false);
96
+ });
97
+ });
98
+ }
99
+ // ---------------------------------------------------------------------------
100
+ // Session Key Utilities
101
+ // ---------------------------------------------------------------------------
102
+ /** Create a session key for a task */
103
+ export function makeSessionKey(taskId) {
104
+ return `astro:task:${taskId}`;
105
+ }
106
+ /**
107
+ * Check if a payload's sessionKey matches the expected key.
108
+ * The gateway prepends 'agent:main:' to session keys in events,
109
+ * so we need to match both forms.
110
+ */
111
+ export function matchesSessionKey(payloadKey, expectedKey) {
112
+ if (typeof payloadKey !== 'string')
113
+ return false;
114
+ return payloadKey === expectedKey || payloadKey === `agent:main:${expectedKey}`;
115
+ }
116
+ //# sourceMappingURL=openclaw-gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-gateway.js","sourceRoot":"","sources":["../../src/lib/openclaw-gateway.ts"],"names":[],"mappings":"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"}