@openclaw-cloud/agent-controller 2.3.1 → 2.3.3

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.
@@ -12,6 +12,18 @@ export interface McpBoardClientOptions {
12
12
  /**
13
13
  * MCP client for communicating with the openclaw-cloud MCP server.
14
14
  * Used by BoardHandler to call board tools and receive board event notifications.
15
+ *
16
+ * The backend stores MCP sessions in Redis with a TTL that is refreshed on each
17
+ * request and on SSE keepalives. If the session disappears server-side (Redis
18
+ * flush during deploy, TTL expiry during long idle, transient network drop where
19
+ * the GET SSE channel never recovered) every subsequent callTool returns
20
+ * `-32001 Session not found`. Without recovery, the agent-controller is stuck
21
+ * with a dead client until process restart.
22
+ *
23
+ * `callTool` and `listTools` transparently re-establish the session on
24
+ * `Session not found` and retry exactly once. A mutex prevents concurrent
25
+ * reconnects when many calls fail at the same moment. Persistent failure
26
+ * bubbles up and is handled by the restart-loop.
15
27
  */
16
28
  export declare class McpBoardClient {
17
29
  private client;
@@ -19,6 +31,7 @@ export declare class McpBoardClient {
19
31
  private onBoardEvent?;
20
32
  private url;
21
33
  private token;
34
+ private reconnectInFlight;
22
35
  constructor(options: McpBoardClientOptions);
23
36
  setEventHandler(handler: (event: Record<string, unknown>) => void): void;
24
37
  connect(): Promise<void>;
@@ -26,4 +39,26 @@ export declare class McpBoardClient {
26
39
  callTool(name: string, args?: Record<string, unknown>): Promise<McpToolResult>;
27
40
  listTools(): Promise<string[]>;
28
41
  isConnected(): boolean;
42
+ /**
43
+ * Match either an `McpError` carrying `code: -32001` or a generic Error whose
44
+ * message contains the JSON-RPC text / HTTP 404 status from the SDK transport.
45
+ */
46
+ private isSessionLost;
47
+ private handleSessionLost;
48
+ /**
49
+ * Mutex-guarded reconnect. Concurrent callers all await the same in-flight
50
+ * promise so a burst of failed callTool invocations triggers exactly one
51
+ * fresh transport+session, not N. Capped at a single retry per failure —
52
+ * if the retry also fails, the error propagates and the supervising
53
+ * restart-loop takes over.
54
+ */
55
+ private reconnect;
56
+ private performReconnect;
57
+ /**
58
+ * Notification handler is registered on the Client instance, so we must
59
+ * re-install it every time we replace that instance during reconnect.
60
+ * Listens for `board/event` notifications dispatched by the backend's
61
+ * McpSessionManager.
62
+ */
63
+ private installNotificationHandler;
29
64
  }
@@ -1,9 +1,28 @@
1
1
  import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
2
  import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
3
3
  import { z } from 'zod';
4
+ import { logCollector } from './connection.js';
5
+ // Notification schema is shared across the initial connect() and every reconnect()
6
+ // so we install the same handler each time the underlying Client is replaced.
7
+ const BoardEventNotification = z.object({
8
+ method: z.literal('board/event'),
9
+ params: z.object({}).passthrough().optional(),
10
+ });
4
11
  /**
5
12
  * MCP client for communicating with the openclaw-cloud MCP server.
6
13
  * Used by BoardHandler to call board tools and receive board event notifications.
14
+ *
15
+ * The backend stores MCP sessions in Redis with a TTL that is refreshed on each
16
+ * request and on SSE keepalives. If the session disappears server-side (Redis
17
+ * flush during deploy, TTL expiry during long idle, transient network drop where
18
+ * the GET SSE channel never recovered) every subsequent callTool returns
19
+ * `-32001 Session not found`. Without recovery, the agent-controller is stuck
20
+ * with a dead client until process restart.
21
+ *
22
+ * `callTool` and `listTools` transparently re-establish the session on
23
+ * `Session not found` and retry exactly once. A mutex prevents concurrent
24
+ * reconnects when many calls fail at the same moment. Persistent failure
25
+ * bubbles up and is handled by the restart-loop.
7
26
  */
8
27
  export class McpBoardClient {
9
28
  client;
@@ -11,6 +30,7 @@ export class McpBoardClient {
11
30
  onBoardEvent;
12
31
  url;
13
32
  token;
33
+ reconnectInFlight = null;
14
34
  constructor(options) {
15
35
  this.url = options.url;
16
36
  this.token = options.token;
@@ -27,17 +47,7 @@ export class McpBoardClient {
27
47
  });
28
48
  await this.client.connect(transport);
29
49
  this.connected = true;
30
- // Listen for board event notifications from MCP server.
31
- // The backend dispatches these as method 'board/event' via McpSessionManager.
32
- const BoardEventNotification = z.object({
33
- method: z.literal('board/event'),
34
- params: z.object({}).passthrough().optional(),
35
- });
36
- this.client.setNotificationHandler(BoardEventNotification, (notification) => {
37
- if (this.onBoardEvent && notification.params) {
38
- this.onBoardEvent(notification.params);
39
- }
40
- });
50
+ this.installNotificationHandler();
41
51
  console.log('[mcp] Client connected to', this.url);
42
52
  }
43
53
  async disconnect() {
@@ -54,17 +64,116 @@ export class McpBoardClient {
54
64
  async callTool(name, args = {}) {
55
65
  if (!this.connected)
56
66
  throw new Error('MCP client not connected');
57
- const result = await this.client.callTool({ name, arguments: args });
58
- return result;
67
+ try {
68
+ return (await this.client.callTool({ name, arguments: args }));
69
+ }
70
+ catch (err) {
71
+ if (!this.isSessionLost(err))
72
+ throw err;
73
+ await this.handleSessionLost(err, { tool: name });
74
+ return (await this.client.callTool({ name, arguments: args }));
75
+ }
59
76
  }
60
77
  async listTools() {
61
78
  if (!this.connected)
62
79
  throw new Error('MCP client not connected');
63
- const result = await this.client.listTools();
64
- return result.tools.map((t) => t.name);
80
+ try {
81
+ const result = await this.client.listTools();
82
+ return result.tools.map((t) => t.name);
83
+ }
84
+ catch (err) {
85
+ if (!this.isSessionLost(err))
86
+ throw err;
87
+ await this.handleSessionLost(err, { tool: 'listTools' });
88
+ const result = await this.client.listTools();
89
+ return result.tools.map((t) => t.name);
90
+ }
65
91
  }
66
92
  isConnected() {
67
93
  return this.connected;
68
94
  }
95
+ // ---------------------------------------------------------------------------
96
+ // Reconnect / recovery internals
97
+ // ---------------------------------------------------------------------------
98
+ /**
99
+ * Match either an `McpError` carrying `code: -32001` or a generic Error whose
100
+ * message contains the JSON-RPC text / HTTP 404 status from the SDK transport.
101
+ */
102
+ isSessionLost(err) {
103
+ if (err &&
104
+ typeof err === 'object' &&
105
+ 'code' in err &&
106
+ err.code === -32001) {
107
+ return true;
108
+ }
109
+ const msg = err instanceof Error ? err.message : String(err);
110
+ return /-32001|Session not found|HTTP 404/i.test(msg);
111
+ }
112
+ async handleSessionLost(err, ctx) {
113
+ const message = err instanceof Error ? err.message : String(err);
114
+ logCollector?.push('mcp_session_lost', 'warn', `Reconnecting after: ${message}`, ctx);
115
+ await this.reconnect();
116
+ }
117
+ /**
118
+ * Mutex-guarded reconnect. Concurrent callers all await the same in-flight
119
+ * promise so a burst of failed callTool invocations triggers exactly one
120
+ * fresh transport+session, not N. Capped at a single retry per failure —
121
+ * if the retry also fails, the error propagates and the supervising
122
+ * restart-loop takes over.
123
+ */
124
+ async reconnect() {
125
+ if (this.reconnectInFlight) {
126
+ return this.reconnectInFlight;
127
+ }
128
+ this.reconnectInFlight = this.performReconnect().finally(() => {
129
+ this.reconnectInFlight = null;
130
+ });
131
+ return this.reconnectInFlight;
132
+ }
133
+ async performReconnect() {
134
+ // Best-effort close — transport may already be dead.
135
+ try {
136
+ await this.client.close();
137
+ }
138
+ catch {
139
+ // ignored
140
+ }
141
+ // The SDK transport caches sessionId per instance; we must replace both
142
+ // the Client and the StreamableHTTPClientTransport, not reuse them.
143
+ this.client = new Client({ name: 'agent-controller', version: '1.0.0' }, { capabilities: {} });
144
+ const transport = new StreamableHTTPClientTransport(new URL(this.url), {
145
+ requestInit: {
146
+ headers: { Authorization: `Bearer ${this.token}` },
147
+ },
148
+ });
149
+ await this.client.connect(transport);
150
+ this.connected = true;
151
+ this.installNotificationHandler();
152
+ let toolCount;
153
+ try {
154
+ const result = await this.client.listTools();
155
+ toolCount = result.tools.length;
156
+ }
157
+ catch {
158
+ // Tool count is informational only — don't fail the reconnect over it.
159
+ }
160
+ logCollector?.push('mcp_reconnected', 'info', 'MCP session re-established', {
161
+ url: this.url,
162
+ tools: toolCount,
163
+ });
164
+ }
165
+ /**
166
+ * Notification handler is registered on the Client instance, so we must
167
+ * re-install it every time we replace that instance during reconnect.
168
+ * Listens for `board/event` notifications dispatched by the backend's
169
+ * McpSessionManager.
170
+ */
171
+ installNotificationHandler() {
172
+ this.client.setNotificationHandler(BoardEventNotification, (notification) => {
173
+ if (this.onBoardEvent && notification.params) {
174
+ this.onBoardEvent(notification.params);
175
+ }
176
+ });
177
+ }
69
178
  }
70
179
  //# sourceMappingURL=mcp-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAY/C,mFAAmF;AACnF,8EAA8E;AAC9E,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,cAAc;IACjB,MAAM,CAAS;IACf,SAAS,GAAG,KAAK,CAAC;IAClB,YAAY,CAA4C;IACxD,GAAG,CAAS;IACZ,KAAK,CAAS;IACd,iBAAiB,GAAyB,IAAI,CAAC;IAEvD,YAAY,OAA8B;QACxC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,eAAe,CAAC,OAAiD;QAC/D,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACrE,WAAW,EAAE;gBACX,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,EAAE;aACnD;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAElC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,sBAAsB;YACxB,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,OAAgC,EAAE;QAC7D,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAkB,CAAC;QAClF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;gBAAE,MAAM,GAAG,CAAC;YACxC,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAkB,CAAC;QAClF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;gBAAE,MAAM,GAAG,CAAC;YACxC,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,8EAA8E;IAC9E,iCAAiC;IACjC,8EAA8E;IAE9E;;;OAGG;IACK,aAAa,CAAC,GAAY;QAChC,IACE,GAAG;YACH,OAAO,GAAG,KAAK,QAAQ;YACvB,MAAM,IAAI,GAAG;YACZ,GAAyB,CAAC,IAAI,KAAK,CAAC,KAAK,EAC1C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,oCAAoC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,GAAY,EAAE,GAAqB;QACjE,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,uBAAuB,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QACtF,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,SAAS;QACrB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC5D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,qDAAqD;QACrD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,UAAU;QACZ,CAAC;QAED,wEAAwE;QACxE,oEAAoE;QACpE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/F,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACrE,WAAW,EAAE;gBACX,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,EAAE;aACnD;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAElC,IAAI,SAA6B,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC7C,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;QACzE,CAAC;QAED,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,4BAA4B,EAAE;YAC1E,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,0BAA0B;QAChC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,sBAAsB,EAAE,CAAC,YAAY,EAAE,EAAE;YAC1E,IAAI,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;gBAC7C,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAiC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ export type AutoPairOutcome = {
2
+ status: 'approved';
3
+ requestId: string;
4
+ deviceId: string;
5
+ } | {
6
+ status: 'skipped';
7
+ reason: 'cli_missing' | 'no_pending' | 'no_match' | 'list_failed' | 'approve_failed' | 'identity_error';
8
+ detail?: string;
9
+ };
10
+ /**
11
+ * Best-effort one-shot auto-approval of our own pending pairing request via
12
+ * the local `openclaw` CLI. Never throws — all failures resolve to a
13
+ * `{ status: 'skipped', reason }` outcome so the caller can treat it as a
14
+ * no-op and continue its retry loop.
15
+ */
16
+ export declare function autoApproveOwnPairing(): Promise<AutoPairOutcome>;
@@ -0,0 +1,84 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ import { logCollector } from '../../connection.js';
4
+ import { toErrorMessage } from '../../utils/response.js';
5
+ import { loadOrCreateDeviceIdentity } from './device-identity.js';
6
+ const execFileAsync = promisify(execFile);
7
+ const CLI_TIMEOUT_MS = 10_000;
8
+ function isErrnoException(e) {
9
+ return e instanceof Error && typeof e.code === 'string';
10
+ }
11
+ /**
12
+ * Best-effort one-shot auto-approval of our own pending pairing request via
13
+ * the local `openclaw` CLI. Never throws — all failures resolve to a
14
+ * `{ status: 'skipped', reason }` outcome so the caller can treat it as a
15
+ * no-op and continue its retry loop.
16
+ */
17
+ export async function autoApproveOwnPairing() {
18
+ let ownDeviceId;
19
+ try {
20
+ ownDeviceId = loadOrCreateDeviceIdentity().deviceId;
21
+ }
22
+ catch (err) {
23
+ const detail = toErrorMessage(err);
24
+ logCollector?.push('chat_provider_auto_pair', 'warn', `Failed to load device identity: ${detail}`, {});
25
+ return { status: 'skipped', reason: 'identity_error', detail };
26
+ }
27
+ logCollector?.push('chat_provider_auto_pair', 'info', 'Pairing required — attempting auto-approve', { deviceId: ownDeviceId });
28
+ // 1. List pending pairing requests.
29
+ let listStdout;
30
+ try {
31
+ const { stdout } = await execFileAsync('openclaw', ['devices', 'list', '--json'], {
32
+ timeout: CLI_TIMEOUT_MS,
33
+ });
34
+ listStdout = stdout;
35
+ }
36
+ catch (err) {
37
+ if (isErrnoException(err) && err.code === 'ENOENT') {
38
+ logCollector?.push('chat_provider_auto_pair', 'warn', 'openclaw CLI not found in PATH — skipping auto-pair', { deviceId: ownDeviceId });
39
+ return { status: 'skipped', reason: 'cli_missing' };
40
+ }
41
+ const detail = toErrorMessage(err);
42
+ logCollector?.push('chat_provider_auto_pair', 'warn', `openclaw devices list failed: ${detail}`, { deviceId: ownDeviceId });
43
+ return { status: 'skipped', reason: 'list_failed', detail };
44
+ }
45
+ // 2. Parse the JSON payload.
46
+ let parsed;
47
+ try {
48
+ parsed = JSON.parse(listStdout);
49
+ }
50
+ catch (err) {
51
+ const detail = toErrorMessage(err);
52
+ logCollector?.push('chat_provider_auto_pair', 'warn', `openclaw devices list failed: ${detail}`, { deviceId: ownDeviceId, parseError: true });
53
+ return { status: 'skipped', reason: 'list_failed', detail };
54
+ }
55
+ const pending = Array.isArray(parsed?.pending) ? parsed.pending : [];
56
+ if (pending.length === 0) {
57
+ logCollector?.push('chat_provider_auto_pair', 'info', 'No pending pairing requests on gateway', { deviceId: ownDeviceId });
58
+ return { status: 'skipped', reason: 'no_pending' };
59
+ }
60
+ // 3. Match our own deviceId.
61
+ const match = pending.find((p) => p?.deviceId === ownDeviceId);
62
+ if (!match) {
63
+ logCollector?.push('chat_provider_auto_pair', 'warn', 'No pending request matches our deviceId', { ownDeviceId, pendingCount: pending.length });
64
+ return { status: 'skipped', reason: 'no_match' };
65
+ }
66
+ // 4. Approve.
67
+ const { requestId } = match;
68
+ try {
69
+ await execFileAsync('openclaw', ['devices', 'approve', requestId, '--json'], {
70
+ timeout: CLI_TIMEOUT_MS,
71
+ });
72
+ }
73
+ catch (err) {
74
+ const detail = toErrorMessage(err);
75
+ logCollector?.push('chat_provider_auto_pair', 'warn', `openclaw devices approve failed: ${detail}`, { requestId, deviceId: ownDeviceId });
76
+ return { status: 'skipped', reason: 'approve_failed', detail };
77
+ }
78
+ logCollector?.push('chat_provider_auto_pair', 'info', 'Approved own pending pairing request', {
79
+ requestId,
80
+ deviceId: ownDeviceId,
81
+ });
82
+ return { status: 'approved', requestId, deviceId: ownDeviceId };
83
+ }
84
+ //# sourceMappingURL=auto-pair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-pair.js","sourceRoot":"","sources":["../../../src/providers/openclaw/auto-pair.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import net from 'node:net';
2
2
  import { OpenclawGatewayAdapter } from './gateway-adapter.js';
3
+ import { autoApproveOwnPairing } from './auto-pair.js';
3
4
  export { OpenclawGatewayAdapter } from './gateway-adapter.js';
4
5
  function tcpPing(host, port, timeoutMs) {
5
6
  return new Promise((resolve) => {
@@ -41,6 +42,7 @@ export class OpenclawProvider {
41
42
  this._connecting = (async () => {
42
43
  const maxRetries = 5;
43
44
  const baseDelayMs = 2000;
45
+ let attemptedAutoPair = false;
44
46
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
45
47
  try {
46
48
  // Always create fresh adapter — old one may have stale state after gateway restart
@@ -55,6 +57,14 @@ export class OpenclawProvider {
55
57
  console.warn(`Chat provider connect failed (attempt ${attempt}/${maxRetries}): ${msg}`);
56
58
  this.adapter?.disconnect();
57
59
  this.adapter = null;
60
+ if (!attemptedAutoPair && msg.includes('pairing required')) {
61
+ attemptedAutoPair = true;
62
+ const outcome = await autoApproveOwnPairing();
63
+ if (outcome.status === 'approved') {
64
+ // Skip back-off — retry immediately on the next iteration
65
+ continue;
66
+ }
67
+ }
58
68
  if (attempt < maxRetries) {
59
69
  await new Promise((r) => setTimeout(r, baseDelayMs * Math.min(attempt, 5)));
60
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/openclaw/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/openclaw/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw-cloud/agent-controller",
3
- "version": "2.3.1",
3
+ "version": "2.3.3",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {