@openclaw-cloud/agent-controller 3.3.0 → 3.3.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.
@@ -1,7 +1,10 @@
1
1
  import type { AgentCommand, AgentResponse } from '../types.js';
2
2
  /**
3
3
  * Backend → Centrifugo `slack_event` command. Forwards one Slack message event
4
- * to the openclaw relay client over the local WS server and waits for its ack.
4
+ * to the openclaw relay client over the local WS server. The push resolves once
5
+ * the frame is written to that client socket — NOT on openclaw's later
6
+ * dispatch-ack (see src/slack-relay-server.ts) — so `delivered:true` means the
7
+ * relay client received the frame, not that openclaw dispatched it to the agent.
5
8
  *
6
9
  * No CLI wrapper — same exemption as `telegram_webhook`: the payload is a live
7
10
  * routed message that only makes sense arriving over the WS with a connected
@@ -3,7 +3,10 @@ import { toErrorMessage, toErrorResponse } from '../utils/response.js';
3
3
  import { pushSlackEvent } from '../slack-relay-server.js';
4
4
  /**
5
5
  * Backend → Centrifugo `slack_event` command. Forwards one Slack message event
6
- * to the openclaw relay client over the local WS server and waits for its ack.
6
+ * to the openclaw relay client over the local WS server. The push resolves once
7
+ * the frame is written to that client socket — NOT on openclaw's later
8
+ * dispatch-ack (see src/slack-relay-server.ts) — so `delivered:true` means the
9
+ * relay client received the frame, not that openclaw dispatched it to the agent.
7
10
  *
8
11
  * No CLI wrapper — same exemption as `telegram_webhook`: the payload is a live
9
12
  * routed message that only makes sense arriving over the WS with a connected
@@ -16,7 +19,7 @@ export async function handleSlackEvent(cmd) {
16
19
  return { id: cmd.id, type: cmd.type, success: false, error: 'Missing event' };
17
20
  }
18
21
  if (!deliveryId) {
19
- // Without it the client can't ack, so the push would hang until timeout.
22
+ // Required: it's the backend's at-least-once redelivery key and rides in the frame.
20
23
  return { id: cmd.id, type: cmd.type, success: false, error: 'Missing deliveryId' };
21
24
  }
22
25
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"slack-event.js","sourceRoot":"","sources":["../../src/handlers/slack-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAiB;IACtD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,OAIxC,CAAC;IAEF,wEAAwE;IACxE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAChF,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,yEAAyE;QACzE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;IACrF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,cAAc,CAAC;YACnB,KAAK;YACL,UAAU;YACV,KAAK,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,EAAE;SACrD,CAAC,CAAC;QACH,4EAA4E;QAC5E,YAAY,EAAE,IAAI,CAChB,uBAAuB,EACvB,MAAM,EACN,mDAAmD,UAAU,GAAG,EAChE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,CAClC,CAAC;QACF,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;IAClF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,EAAE,IAAI,CAChB,uBAAuB,EACvB,OAAO,EACP,sCAAsC,UAAU,MAAM,cAAc,CAAC,GAAG,CAAC,EAAE,EAC3E,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,CAClC,CAAC;QACF,OAAO,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"slack-event.js","sourceRoot":"","sources":["../../src/handlers/slack-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAiB;IACtD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,OAIxC,CAAC;IAEF,wEAAwE;IACxE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAChF,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,oFAAoF;QACpF,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;IACrF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,cAAc,CAAC;YACnB,KAAK;YACL,UAAU;YACV,KAAK,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,EAAE;SACrD,CAAC,CAAC;QACH,4EAA4E;QAC5E,YAAY,EAAE,IAAI,CAChB,uBAAuB,EACvB,MAAM,EACN,mDAAmD,UAAU,GAAG,EAChE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,CAClC,CAAC;QACF,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;IAClF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,EAAE,IAAI,CAChB,uBAAuB,EACvB,OAAO,EACP,sCAAsC,UAAU,MAAM,cAAc,CAAC,GAAG,CAAC,EAAE,EAC3E,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,CAClC,CAAC;QACF,OAAO,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
@@ -5,8 +5,16 @@
5
5
  * dials us at `ws://127.0.0.1:8788/slack-relay?gateway_id=<AGENT_ID>` with an
6
6
  * `Authorization: Bearer <token>` header (see the client in openclaw
7
7
  * `extensions/slack/src/monitor/relay-source.ts`). We speak the server half of
8
- * that wire protocol: send a `hello` on connect, push `slack_event` frames, and
9
- * resolve each push when the client returns a matching `ack`.
8
+ * that wire protocol: send a `hello` on connect and push `slack_event` frames.
9
+ *
10
+ * We resolve each push as soon as the frame is written to the connected client
11
+ * socket (the `ws.send` callback fires with no error) — NOT when openclaw later
12
+ * returns its dispatch `ack`. openclaw only acks after it has dispatched the
13
+ * message to a possibly-busy agent, so waiting on that ack blocked the backend's
14
+ * serial (prefetch(1)) messages-broker for up to a full agent turn and produced
15
+ * false ack-timeouts. openclaw still sends the ack; we simply ignore it. The
16
+ * residual loss window (openclaw crashes after receiving the frame but before
17
+ * dispatch) is covered by openclaw's own channel+ts dedup on redelivery.
10
18
  *
11
19
  * The backend delivers events over Centrifugo as `slack_event` system commands;
12
20
  * `handlers/slack-event.ts` calls `pushSlackEvent()` here. We bind loopback only
@@ -26,9 +34,15 @@ export declare function startSlackRelayServer(): {
26
34
  close: () => void;
27
35
  };
28
36
  /**
29
- * Send a `slack_event` frame to the connected openclaw client and resolve when a
30
- * matching `ack` returns. Rejects on: no connected client, a 15s ack timeout, a
31
- * send error, or the socket closing before the ack. The backend redelivers on
32
- * rejection (at-least-once), keyed by the same `delivery_id`.
37
+ * Send a `slack_event` frame to the connected openclaw client and resolve as
38
+ * soon as the frame is written to that socket (the `ws.send` callback fires with
39
+ * no error). We do NOT wait for openclaw's dispatch `ack` — see the module
40
+ * header for why. `delivered:true` on the backend therefore means "openclaw's
41
+ * relay client received the frame", not "openclaw dispatched it to the agent".
42
+ *
43
+ * Rejects on: no connected client, a send error, or the send stalling past
44
+ * `SEND_TIMEOUT_MS`. The backend redelivers on rejection (at-least-once), keyed
45
+ * by the same `delivery_id`; the no-client rejection is the durability contract
46
+ * that makes the backend retry rather than drop when nothing is connected.
33
47
  */
34
48
  export declare function pushSlackEvent(payload: SlackEventPayload): Promise<void>;
@@ -8,8 +8,16 @@ import { toErrorMessage } from './utils/response.js';
8
8
  * dials us at `ws://127.0.0.1:8788/slack-relay?gateway_id=<AGENT_ID>` with an
9
9
  * `Authorization: Bearer <token>` header (see the client in openclaw
10
10
  * `extensions/slack/src/monitor/relay-source.ts`). We speak the server half of
11
- * that wire protocol: send a `hello` on connect, push `slack_event` frames, and
12
- * resolve each push when the client returns a matching `ack`.
11
+ * that wire protocol: send a `hello` on connect and push `slack_event` frames.
12
+ *
13
+ * We resolve each push as soon as the frame is written to the connected client
14
+ * socket (the `ws.send` callback fires with no error) — NOT when openclaw later
15
+ * returns its dispatch `ack`. openclaw only acks after it has dispatched the
16
+ * message to a possibly-busy agent, so waiting on that ack blocked the backend's
17
+ * serial (prefetch(1)) messages-broker for up to a full agent turn and produced
18
+ * false ack-timeouts. openclaw still sends the ack; we simply ignore it. The
19
+ * residual loss window (openclaw crashes after receiving the frame but before
20
+ * dispatch) is covered by openclaw's own channel+ts dedup on redelivery.
13
21
  *
14
22
  * The backend delivers events over Centrifugo as `slack_event` system commands;
15
23
  * `handlers/slack-event.ts` calls `pushSlackEvent()` here. We bind loopback only
@@ -20,8 +28,14 @@ export const SLACK_RELAY_PORT = 8788;
20
28
  const SLACK_RELAY_PATH = '/slack-relay';
21
29
  /** Matches the client's `SLACK_RELAY_MAX_PAYLOAD_BYTES` (1 MiB). */
22
30
  const SLACK_RELAY_MAX_PAYLOAD_BYTES = 1024 * 1024;
23
- /** How long a single push waits for its `ack` before rejecting. */
24
- const ACK_TIMEOUT_MS = 15_000;
31
+ /**
32
+ * Safety net only — a healthy loopback `ws.send` calls back in ~ms. This bounds
33
+ * the ONE remaining wait (the send callback) so a stalled/half-open client can't
34
+ * hang the backend's serial broker. It is NOT a wait for openclaw's dispatch-ack
35
+ * (that ack is ignored); the previous 15s ACK_TIMEOUT_MS was that wait and is
36
+ * gone. A successful send never approaches this budget.
37
+ */
38
+ const SEND_TIMEOUT_MS = 2_000;
25
39
  // Module-level singleton so the slack_event handler can reach pushSlackEvent()
26
40
  // without threading the server through buildHandlers() — mirrors how handlers
27
41
  // reach the shared `logCollector`. Set on start, cleared on close.
@@ -36,7 +50,7 @@ export function startSlackRelayServer() {
36
50
  perMessageDeflate: false,
37
51
  verifyClient: verifyRelayClient,
38
52
  });
39
- const serverState = { wss, socket: null, pending: new Map() };
53
+ const serverState = { wss, socket: null };
40
54
  state = serverState;
41
55
  wss.on('connection', (ws) => handleConnection(serverState, ws));
42
56
  wss.on('listening', () => {
@@ -49,11 +63,8 @@ export function startSlackRelayServer() {
49
63
  });
50
64
  return {
51
65
  close: () => {
52
- for (const [deliveryId, pending] of serverState.pending) {
53
- clearTimeout(pending.timer);
54
- pending.reject(new Error('Slack relay server shutting down'));
55
- serverState.pending.delete(deliveryId);
56
- }
66
+ // No pending-ack map to drain — pushSlackEvent resolves on frame-send, so
67
+ // nothing is in flight here.
57
68
  serverState.socket?.close();
58
69
  serverState.socket = null;
59
70
  wss.close();
@@ -63,10 +74,16 @@ export function startSlackRelayServer() {
63
74
  };
64
75
  }
65
76
  /**
66
- * Send a `slack_event` frame to the connected openclaw client and resolve when a
67
- * matching `ack` returns. Rejects on: no connected client, a 15s ack timeout, a
68
- * send error, or the socket closing before the ack. The backend redelivers on
69
- * rejection (at-least-once), keyed by the same `delivery_id`.
77
+ * Send a `slack_event` frame to the connected openclaw client and resolve as
78
+ * soon as the frame is written to that socket (the `ws.send` callback fires with
79
+ * no error). We do NOT wait for openclaw's dispatch `ack` — see the module
80
+ * header for why. `delivered:true` on the backend therefore means "openclaw's
81
+ * relay client received the frame", not "openclaw dispatched it to the agent".
82
+ *
83
+ * Rejects on: no connected client, a send error, or the send stalling past
84
+ * `SEND_TIMEOUT_MS`. The backend redelivers on rejection (at-least-once), keyed
85
+ * by the same `delivery_id`; the no-client rejection is the durability contract
86
+ * that makes the backend retry rather than drop when nothing is connected.
70
87
  */
71
88
  export function pushSlackEvent(payload) {
72
89
  const serverState = state;
@@ -78,28 +95,34 @@ export function pushSlackEvent(payload) {
78
95
  return Promise.reject(new Error('No Slack relay client connected'));
79
96
  }
80
97
  const { event, deliveryId, route } = payload;
98
+ const frame = JSON.stringify({
99
+ type: 'slack_event',
100
+ delivery_id: deliveryId,
101
+ route,
102
+ payload: { event },
103
+ });
81
104
  return new Promise((resolve, reject) => {
82
- // slack_event is a serialized system command, so only one delivery is in
83
- // flight per agent at a time — delivery_id never collides in the pending map.
105
+ let settled = false;
106
+ // Bounds the send itself, not openclaw's dispatch. Fires only if the socket
107
+ // stalls (half-open client, full send buffer) so a broken client can't hang
108
+ // the backend's serial broker.
84
109
  const timer = setTimeout(() => {
85
- serverState.pending.delete(deliveryId);
86
- reject(new Error(`Slack relay ack timed out after ${ACK_TIMEOUT_MS}ms (delivery ${deliveryId})`));
87
- }, ACK_TIMEOUT_MS);
88
- // A hanging ack must never hold the process open during shutdown.
110
+ if (settled)
111
+ return;
112
+ settled = true;
113
+ reject(new Error(`Slack relay send stalled after ${SEND_TIMEOUT_MS}ms (delivery ${deliveryId})`));
114
+ }, SEND_TIMEOUT_MS);
115
+ // A hanging send must never hold the process open during shutdown.
89
116
  timer.unref?.();
90
- serverState.pending.set(deliveryId, { socket: ws, resolve, reject, timer });
91
- const frame = JSON.stringify({
92
- type: 'slack_event',
93
- delivery_id: deliveryId,
94
- route,
95
- payload: { event },
96
- });
97
117
  ws.send(frame, (err) => {
98
- if (err) {
99
- clearTimeout(timer);
100
- serverState.pending.delete(deliveryId);
118
+ if (settled)
119
+ return;
120
+ settled = true;
121
+ clearTimeout(timer);
122
+ if (err)
101
123
  reject(err);
102
- }
124
+ else
125
+ resolve(); // frame handed to the client socket — ack no longer awaited
103
126
  });
104
127
  });
105
128
  }
@@ -136,7 +159,7 @@ function handleConnection(serverState, ws) {
136
159
  console.log('[slack-relay] openclaw relay client connected');
137
160
  // hello first — the client reads an optional slack_identity from it; we omit it.
138
161
  ws.send(JSON.stringify({ type: 'hello' }));
139
- ws.on('message', (data) => handleClientFrame(serverState, data));
162
+ ws.on('message', (data) => handleClientFrame(data));
140
163
  ws.on('error', (err) => {
141
164
  console.error('[slack-relay] client socket error:', toErrorMessage(err));
142
165
  });
@@ -145,38 +168,22 @@ function handleConnection(serverState, ws) {
145
168
  if (serverState.socket === ws) {
146
169
  serverState.socket = null;
147
170
  }
148
- // A socket closing before its ack means the delivery is lost on this hop;
149
- // reject so the backend redelivers rather than hanging until the timeout.
150
- for (const [deliveryId, pending] of serverState.pending) {
151
- if (pending.socket !== ws)
152
- continue;
153
- clearTimeout(pending.timer);
154
- pending.reject(new Error('Slack relay client disconnected before ack'));
155
- serverState.pending.delete(deliveryId);
156
- }
171
+ // Nothing to fail on close — pushSlackEvent already resolved on frame-send,
172
+ // so there are no in-flight deliveries tied to this socket.
157
173
  });
158
174
  }
159
- function handleClientFrame(serverState, data) {
160
- let frame;
175
+ function handleClientFrame(data) {
176
+ // openclaw still sends `{ type:'ack', delivery_id }` after it dispatches each
177
+ // event to the agent. We resolved the push on frame-send and keep no pending
178
+ // map, so every ack — for any delivery_id, already-resolved or unknown — is a
179
+ // harmless no-op. Parse only to surface a malformed frame; the result is
180
+ // deliberately discarded.
161
181
  try {
162
- frame = JSON.parse(rawDataToString(data));
182
+ JSON.parse(rawDataToString(data));
163
183
  }
164
184
  catch {
165
185
  console.warn('[slack-relay] dropping malformed JSON frame from client');
166
- return;
167
186
  }
168
- if (!frame || typeof frame !== 'object')
169
- return;
170
- const record = frame;
171
- // The client only ever sends `ack`.
172
- if (record.type !== 'ack' || typeof record.delivery_id !== 'string')
173
- return;
174
- const pending = serverState.pending.get(record.delivery_id);
175
- if (!pending)
176
- return; // unknown or late ack — ignore
177
- clearTimeout(pending.timer);
178
- serverState.pending.delete(record.delivery_id);
179
- pending.resolve();
180
187
  }
181
188
  function rawDataToString(data) {
182
189
  if (typeof data === 'string')
@@ -1 +1 @@
1
- {"version":3,"file":"slack-relay-server.js","sourceRoot":"","sources":["../src/slack-relay-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack-relay-server.js","sourceRoot":"","sources":["../src/slack-relay-server.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": "3.3.0",
3
+ "version": "3.3.1",
4
4
  "packageManager": "pnpm@11.5.2",
5
5
  "type": "module",
6
6
  "engines": {