@ozaiya/openclaw-channel 0.10.29 → 0.10.31

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.
@@ -9,14 +9,23 @@
9
9
  * stateless self-contained JPEGs, so they render cleanly over the DataChannel
10
10
  * (unlike the old stateful VNC/RFB stream, which stalled).
11
11
  *
12
- * Transport ladder: P2P DataChannel TURN relay (the existing path, kept as
13
- * automatic fallback). Signaling rides the existing sandbox-screen relay WS as JSON
14
- * **text**; binary over the same WS stays the fallback, so the server never has to
15
- * parse anything.
12
+ * On top of the DataChannel, when the gateway has a working ffmpeg (enableVideo)
13
+ * and the viewer's offer includes an m=video section, we ALSO answer with a
14
+ * sendonly H.264 media track the JPEG poll then feeds an ffmpeg transcoder and
15
+ * the video rides RTP/SRTP with native browser decode (mirrors the machine-screen
16
+ * daemon's proven werift media mode). Inter-frame compression carries ~20fps where
17
+ * independent JPEGs managed ~10 on the same uplink. Ladder: H.264 media track →
18
+ * JPEG DataChannel → JPEG relay.
19
+ *
20
+ * Transport ladder fallback is automatic: if the channel never opens or drops, the
21
+ * relay (kept connected as the signaling pipe) resumes carrying frames. Signaling
22
+ * rides the existing sandbox-screen relay WS as JSON **text**; the server never has
23
+ * to parse anything.
16
24
  *
17
25
  * The viewer is the OFFERER (mirrors the machine-screen path); this plugin is the
18
- * ANSWERER. `werift` is pure-TS (no native build) and loaded lazily, so a gateway
19
- * without it simply keeps using the relay.
26
+ * ANSWERER. The peer connection is built lazily when the offer arrives, so codec
27
+ * config can depend on what the viewer offered. `werift` is pure-TS (no native
28
+ * build) and loaded lazily, so a gateway without it simply keeps using the relay.
20
29
  */
21
30
  import { createRequire } from "node:module";
22
31
  const esmRequire = createRequire(import.meta.url);
@@ -32,6 +41,27 @@ function getWerift() {
32
41
  }
33
42
  return weriftModule;
34
43
  }
44
+ let packetizerModule;
45
+ function getPacketizer() {
46
+ if (packetizerModule === undefined) {
47
+ try {
48
+ // Static import would make werift a hard dependency of the plugin entry;
49
+ // resolved lazily so a werift-less install still loads (relay-only).
50
+ packetizerModule = esmRequire("./h264Packetizer.js");
51
+ }
52
+ catch {
53
+ packetizerModule = null;
54
+ }
55
+ }
56
+ return packetizerModule;
57
+ }
58
+ const H264_RTCP_FEEDBACK = [
59
+ { type: "nack" },
60
+ { type: "nack", parameter: "pli" },
61
+ { type: "goog-remb" },
62
+ { type: "transport-cc" },
63
+ { type: "ccm", parameter: "fir" },
64
+ ];
35
65
  /**
36
66
  * Create an answerer WebRTC session for one viewer. Returns null when werift is
37
67
  * unavailable so the caller transparently falls back to the relay pipe.
@@ -42,81 +72,188 @@ export function createSandboxRtcSession(opts) {
42
72
  opts.log?.warn?.("[sandbox-rtc] werift not available; relay only");
43
73
  return null;
44
74
  }
45
- const iceServers = opts.iceServers && opts.iceServers.length
46
- ? opts.iceServers
47
- : [{ urls: "stun:stun.l.google.com:19302" }];
48
- let pc;
75
+ // OZAIYA_RTC_NO_TURN=1 strips TURN from OUR candidates (diagnostic knob —
76
+ // werift 0.22.x had a dead TURN data path where relay↔relay pairs passed
77
+ // ICE but dropped every DTLS packet; fixed by the werift upgrade, but keep
78
+ // the escape hatch). NOTE: werift never sends checks from host candidates
79
+ // toward remote RELAY candidates (verified with tcpdump on the coturn), so
80
+ // stripping TURN here leaves only hairpin/host pairs — on a typical
81
+ // home-router + Docker-Desktop-NAT topology that means NO usable pair.
82
+ const stripTurn = process.env.OZAIYA_RTC_NO_TURN === "1";
83
+ const iceServers = (opts.iceServers ?? [])
84
+ .filter((s) => !stripTurn || !String(s.urls).includes("turn"))
85
+ .concat([{ urls: "stun:stun.l.google.com:19302" }]);
86
+ let pc = null;
49
87
  let dc = null;
50
88
  let active = false;
51
89
  let closed = false;
52
- try {
53
- pc = new werift.RTCPeerConnection({ iceServers });
54
- }
55
- catch (err) {
56
- opts.log?.warn?.(`[sandbox-rtc] failed to create peer: ${String(err)}`);
57
- return null;
58
- }
59
- pc.onIceCandidate.subscribe((candidate) => {
60
- if (!candidate || closed)
90
+ let mediaReady = false;
91
+ let videoTrack = null;
92
+ let packetizer = null;
93
+ let tsBaseNs = null;
94
+ const earlyIce = []; // candidates that beat the offer
95
+ const setMediaReady = (ready) => {
96
+ if (mediaReady === ready)
61
97
  return;
62
- opts.sendSignal(JSON.stringify({
63
- type: "rtc-ice",
64
- candidate: JSON.stringify({
65
- candidate: candidate.candidate,
66
- sdpMid: candidate.sdpMid ?? null,
67
- sdpMLineIndex: candidate.sdpMLineIndex ?? null,
68
- }),
69
- }));
70
- });
71
- pc.connectionStateChange.subscribe((state) => {
72
- // Terminal failure before the channel ever opened let the caller keep the
73
- // relay alive (it does anyway). 'disconnected' may recover, so ignore it.
74
- if ((state === "failed" || state === "closed") && !active && !closed) {
75
- opts.onClosed();
98
+ mediaReady = ready;
99
+ opts.onMediaStateChange?.(ready);
100
+ };
101
+ /** Build the peer once the offer is known (codec config depends on it). */
102
+ function buildPeer(offerSdp) {
103
+ const pkt = getPacketizer();
104
+ const wantsVideo = !!opts.enableVideo && /\bm=video\b/.test(offerSdp) && !!pkt;
105
+ const config = { iceServers };
106
+ // Containerized gateways can't NAT-traverse reliably (the Docker NAT is
107
+ // symmetric, the browser's host candidates are mDNS-obfuscated, and a
108
+ // same-router viewer would need hairpin) but when the deployment
109
+ // PUBLISHES a UDP port range and tells us the host's reachable IP(s),
110
+ // werift binds inside that range and advertises those IPs as plain host
111
+ // candidates, giving the viewer a directly checkable address. Set
112
+ // OZAIYA_RTC_PORT_RANGE=50700-50719 (must match the compose `ports`
113
+ // mapping 1:1) and OZAIYA_RTC_HOST_IPS=<lan-ip>[,<public-ip>].
114
+ const range = process.env.OZAIYA_RTC_PORT_RANGE?.match(/^(\d+)-(\d+)$/);
115
+ if (range)
116
+ config.icePortRange = [Number(range[1]), Number(range[2])];
117
+ const hostIps = (process.env.OZAIYA_RTC_HOST_IPS ?? "")
118
+ .split(",").map((s) => s.trim()).filter(Boolean);
119
+ if (hostIps.length)
120
+ config.iceAdditionalHostAddresses = hostIps;
121
+ if (range || hostIps.length) {
122
+ opts.log?.info?.(`[sandbox-rtc] direct-candidate config: ports=${range ? `${range[1]}-${range[2]}` : "auto"} hostIps=${hostIps.join(",") || "none"}`);
76
123
  }
77
- });
78
- pc.onDataChannel.subscribe((channel) => {
79
- dc = channel;
80
- opts.log?.info?.(`[sandbox-rtc] onDataChannel readyState=${channel.readyState}`);
81
- channel.onMessage.subscribe((msg) => {
82
- if (closed)
124
+ if (wantsVideo) {
125
+ config.codecs = {
126
+ video: [
127
+ new werift.RTCRtpCodecParameters({
128
+ mimeType: "video/H264",
129
+ clockRate: 90000,
130
+ rtcpFeedback: H264_RTCP_FEEDBACK,
131
+ parameters: "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f",
132
+ }),
133
+ ],
134
+ };
135
+ config.headerExtensions = {
136
+ video: [werift.useSdesMid(), werift.useAbsSendTime(), werift.useTransportWideCC()],
137
+ };
138
+ }
139
+ pc = new werift.RTCPeerConnection(config);
140
+ if (wantsVideo && pkt) {
141
+ videoTrack = new werift.MediaStreamTrack({ kind: "video" });
142
+ const transceiver = pc.addTransceiver(videoTrack, { direction: "sendonly" });
143
+ packetizer = new pkt.H264Packetizer();
144
+ // Viewer lost frames it can't recover via NACK — with a ≤1s GOP the next
145
+ // IDR lands soon, so PLI is informational here.
146
+ transceiver.sender.onPictureLossIndication.subscribe(() => {
147
+ opts.log?.info?.("[sandbox-rtc] PLI from viewer (next keyframe ≤1s away)");
148
+ });
149
+ opts.log?.info?.("[sandbox-rtc] answering with sendonly H.264 track");
150
+ }
151
+ pc.onIceCandidate.subscribe((candidate) => {
152
+ if (!candidate || closed)
83
153
  return;
84
- // Preserve text vs binary: text = JSON control (input/viewport), binary =
85
- // the app's compact input encoding.
86
- if (typeof msg === "string")
87
- opts.onData(msg);
88
- else
89
- opts.onData(Buffer.isBuffer(msg) ? msg : Buffer.from(msg));
154
+ opts.sendSignal(JSON.stringify({
155
+ type: "rtc-ice",
156
+ candidate: JSON.stringify({
157
+ candidate: candidate.candidate,
158
+ sdpMid: candidate.sdpMid ?? null,
159
+ sdpMLineIndex: candidate.sdpMLineIndex ?? null,
160
+ }),
161
+ }));
90
162
  });
91
- const markOpen = () => {
92
- if (active || closed)
163
+ pc.connectionStateChange.subscribe((state) => {
164
+ if (closed)
93
165
  return;
94
- active = true;
95
- opts.log?.info?.("[sandbox-rtc] DataChannel open — P2P carrying the screencast");
96
- opts.onActive();
97
- };
98
- channel.stateChanged.subscribe((state) => {
99
- if (state === "open")
100
- markOpen();
101
- else if (state === "closed") {
102
- active = false;
103
- if (!closed)
166
+ opts.log?.info?.(`[sandbox-rtc] connection state: ${state}`);
167
+ if (state === "connected") {
168
+ if (videoTrack)
169
+ setMediaReady(true);
170
+ }
171
+ else if (state === "failed" || state === "closed" || state === "disconnected") {
172
+ setMediaReady(false);
173
+ // Terminal failure before the channel ever opened → let the caller keep
174
+ // the relay alive (it does anyway). 'disconnected' may recover.
175
+ if ((state === "failed" || state === "closed") && !active)
104
176
  opts.onClosed();
105
177
  }
106
178
  });
107
- // werift may hand over an ALREADY-open channel (more likely over the slower
108
- // TURN-relayed path) — stateChanged won't re-fire 'open', so check now.
109
- if (channel.readyState === "open")
110
- markOpen();
111
- });
179
+ pc.iceConnectionStateChange?.subscribe?.((state) => {
180
+ if (!closed)
181
+ opts.log?.info?.(`[sandbox-rtc] ice state: ${state}`);
182
+ });
183
+ pc.onDataChannel.subscribe((channel) => {
184
+ dc = channel;
185
+ opts.log?.info?.(`[sandbox-rtc] onDataChannel readyState=${channel.readyState}`);
186
+ channel.onMessage.subscribe((msg) => {
187
+ if (closed)
188
+ return;
189
+ // Preserve text vs binary: text = JSON control (input/viewport), binary =
190
+ // the app's compact input encoding.
191
+ if (typeof msg === "string")
192
+ opts.onData(msg);
193
+ else
194
+ opts.onData(Buffer.isBuffer(msg) ? msg : Buffer.from(msg));
195
+ });
196
+ const markOpen = () => {
197
+ if (active || closed)
198
+ return;
199
+ active = true;
200
+ opts.log?.info?.("[sandbox-rtc] DataChannel open — P2P carrying the screencast");
201
+ opts.onActive();
202
+ };
203
+ channel.stateChanged.subscribe((state) => {
204
+ if (state === "open")
205
+ markOpen();
206
+ else if (state === "closed") {
207
+ active = false;
208
+ if (!closed)
209
+ opts.onClosed();
210
+ }
211
+ });
212
+ // werift may hand over an ALREADY-open channel (more likely over the slower
213
+ // TURN-relayed path) — stateChanged won't re-fire 'open', so check now.
214
+ if (channel.readyState === "open")
215
+ markOpen();
216
+ });
217
+ }
112
218
  async function handleOffer(sdp) {
219
+ // A fresh offer after a terminal ICE failure is the viewer retrying —
220
+ // a failed werift peer can't renegotiate, so rebuild from scratch.
221
+ if (pc && (pc.connectionState === "failed" || pc.connectionState === "closed")) {
222
+ opts.log?.info?.("[sandbox-rtc] fresh offer on a dead peer — rebuilding");
223
+ try {
224
+ pc.close();
225
+ }
226
+ catch { /* already dead */ }
227
+ pc = null;
228
+ dc = null;
229
+ active = false;
230
+ videoTrack = null;
231
+ packetizer = null;
232
+ tsBaseNs = null;
233
+ setMediaReady(false);
234
+ }
235
+ if (!pc)
236
+ buildPeer(sdp);
113
237
  await pc.setRemoteDescription({ type: "offer", sdp });
238
+ for (const c of earlyIce.splice(0)) {
239
+ pc.addIceCandidate(c).catch(() => { });
240
+ }
114
241
  const answer = await pc.createAnswer();
242
+ // Send the answer IMMEDIATELY (trickle ICE). werift's setLocalDescription
243
+ // does not resolve until ICE GATHERING completes — behind a symmetric-NAT
244
+ // container doing TURN allocations that takes tens of seconds (or hangs),
245
+ // and the viewer can't apply our trickled candidates until it has the
246
+ // answer, so awaiting first deadlocks the whole handshake on slow
247
+ // gathering. Candidates stream via onIceCandidate as they're found.
248
+ opts.sendSignal(JSON.stringify({ type: "rtc-answer", sdp: answer.sdp }));
115
249
  await pc.setLocalDescription(answer);
116
- opts.sendSignal(JSON.stringify({ type: "rtc-answer", sdp: pc.localDescription?.sdp ?? answer.sdp }));
117
250
  }
118
251
  async function handleIce(candidate) {
119
252
  const parsed = typeof candidate === "string" ? JSON.parse(candidate) : candidate;
253
+ if (!pc) {
254
+ earlyIce.push(parsed);
255
+ return;
256
+ }
120
257
  await pc.addIceCandidate(parsed);
121
258
  }
122
259
  return {
@@ -156,9 +293,30 @@ export function createSandboxRtcSession(opts) {
156
293
  return 0;
157
294
  }
158
295
  },
296
+ isMediaReady: () => mediaReady && !closed,
297
+ sendVideoFrame: (accessUnit) => {
298
+ if (closed || !mediaReady || !videoTrack || !packetizer)
299
+ return false;
300
+ const now = process.hrtime.bigint();
301
+ if (tsBaseNs === null)
302
+ tsBaseNs = now;
303
+ // 90 kHz RTP timestamp from a monotonic clock — inter-frame spacing stays
304
+ // accurate regardless of the (backpressure-varying) capture rate.
305
+ const rtpTs = Number(((now - tsBaseNs) * 90000n) / 1000000000n) >>> 0;
306
+ try {
307
+ for (const p of packetizer.packetize(accessUnit, rtpTs)) {
308
+ videoTrack.writeRtp(p);
309
+ }
310
+ return true;
311
+ }
312
+ catch {
313
+ return false;
314
+ }
315
+ },
159
316
  close: () => {
160
317
  closed = true;
161
318
  active = false;
319
+ setMediaReady(false);
162
320
  try {
163
321
  dc?.close?.();
164
322
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sandboxScreenRtc.js","sourceRoot":"","sources":["../../src/sandboxScreenRtc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sandboxScreenRtc.js","sourceRoot":"","sources":["../../src/sandboxScreenRtc.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ozaiya/openclaw-channel",
3
- "version": "0.10.29",
3
+ "version": "0.10.31",
4
4
  "description": "OpenClaw channel plugin for Ozaiya Chat",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -67,7 +67,7 @@
67
67
  "libsodium-wrappers": "^0.7.15",
68
68
  "node-pty": "^1.0.0",
69
69
  "socket.io-client": "^4.8.1",
70
- "werift": "^0.22.9",
70
+ "werift": "^0.23.0",
71
71
  "ws": "^8.18.0"
72
72
  },
73
73
  "devDependencies": {
@@ -77,4 +77,4 @@
77
77
  "registry": "https://registry.npmjs.org",
78
78
  "access": "public"
79
79
  }
80
- }
80
+ }