@robota-sdk/agent-transport-ws 3.0.0-beta.100

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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,564 @@
1
+ # @robota-sdk/agent-transport-ws
2
+
3
+ ## 3.0.0-beta.100
4
+ ### Patch Changes
5
+
6
+ - @robota-sdk/agent-core@3.0.0-beta.100
7
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.100
8
+ - @robota-sdk/agent-interface-session@3.0.0-beta.100
9
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.100
10
+ - @robota-sdk/agent-transport@3.0.0-beta.100
11
+
12
+ ## 3.0.0-beta.99
13
+ ### Patch Changes
14
+
15
+ - @robota-sdk/agent-core@3.0.0-beta.99
16
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.99
17
+ - @robota-sdk/agent-interface-session@3.0.0-beta.99
18
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.99
19
+ - @robota-sdk/agent-transport@3.0.0-beta.99
20
+
21
+ ## 3.0.0-beta.98
22
+ ### Patch Changes
23
+
24
+ - @robota-sdk/agent-core@3.0.0-beta.98
25
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.98
26
+ - @robota-sdk/agent-interface-session@3.0.0-beta.98
27
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.98
28
+ - @robota-sdk/agent-transport@3.0.0-beta.98
29
+
30
+ ## 3.0.0-beta.97
31
+ ### Patch Changes
32
+
33
+ - Updated dependencies [c207a31]
34
+ - Updated dependencies [9b4f63b]
35
+ - Updated dependencies [7911a7d]
36
+ - Updated dependencies [23a30cd]
37
+ - @robota-sdk/agent-core@3.0.0-beta.97
38
+ - @robota-sdk/agent-transport@3.0.0-beta.97
39
+ - @robota-sdk/agent-interface-session@3.0.0-beta.97
40
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.97
41
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.97
42
+
43
+ ## 3.0.0-beta.96
44
+ ### Patch Changes
45
+
46
+ - @robota-sdk/agent-core@3.0.0-beta.96
47
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.96
48
+ - @robota-sdk/agent-interface-session@3.0.0-beta.96
49
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.96
50
+ - @robota-sdk/agent-transport@3.0.0-beta.96
51
+
52
+ ## 3.0.0-beta.95
53
+ ### Patch Changes
54
+
55
+ - Updated dependencies [c967c57]
56
+ - Updated dependencies [60f3965]
57
+ - Updated dependencies [115e104]
58
+ - Updated dependencies [04719a9]
59
+ - Updated dependencies [04a6de4]
60
+ - Updated dependencies [0ba247b]
61
+ - Updated dependencies [02053ec]
62
+ - @robota-sdk/agent-transport@3.0.0-beta.95
63
+ - @robota-sdk/agent-interface-session@3.0.0-beta.95
64
+ - @robota-sdk/agent-core@3.0.0-beta.95
65
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.95
66
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.95
67
+
68
+ ## 3.0.0-beta.94
69
+ ### Patch Changes
70
+
71
+ - Updated dependencies [fef3a50]
72
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.94
73
+ - @robota-sdk/agent-interface-session@3.0.0-beta.94
74
+ - @robota-sdk/agent-transport@3.0.0-beta.94
75
+ - @robota-sdk/agent-core@3.0.0-beta.94
76
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.94
77
+
78
+ ## 3.0.0-beta.93
79
+ ### Patch Changes
80
+
81
+ - Updated dependencies
82
+ - @robota-sdk/agent-core@3.0.0-beta.93
83
+ - @robota-sdk/agent-interface-session@3.0.0-beta.93
84
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.93
85
+ - @robota-sdk/agent-transport@3.0.0-beta.93
86
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.93
87
+
88
+ ## 3.0.0-beta.92
89
+ ### Patch Changes
90
+
91
+ - Updated dependencies
92
+ - @robota-sdk/agent-core@3.0.0-beta.92
93
+ - @robota-sdk/agent-interface-session@3.0.0-beta.92
94
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.92
95
+ - @robota-sdk/agent-transport@3.0.0-beta.92
96
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.92
97
+
98
+ ## 3.0.0-beta.91
99
+ ### Patch Changes
100
+
101
+ - @robota-sdk/agent-core@3.0.0-beta.91
102
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.91
103
+ - @robota-sdk/agent-interface-session@3.0.0-beta.91
104
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.91
105
+ - @robota-sdk/agent-transport@3.0.0-beta.91
106
+
107
+ ## 3.0.0-beta.90
108
+ ### Patch Changes
109
+
110
+ - @robota-sdk/agent-core@3.0.0-beta.90
111
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.90
112
+ - @robota-sdk/agent-interface-session@3.0.0-beta.90
113
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.90
114
+ - @robota-sdk/agent-transport@3.0.0-beta.90
115
+
116
+ ## 3.0.0-beta.89
117
+ ### Patch Changes
118
+
119
+ - Updated dependencies [3427887]
120
+ - @robota-sdk/agent-transport@3.0.0-beta.89
121
+ - @robota-sdk/agent-core@3.0.0-beta.89
122
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.89
123
+ - @robota-sdk/agent-interface-session@3.0.0-beta.89
124
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.89
125
+
126
+ ## 3.0.0-beta.88
127
+
128
+ ### Patch Changes
129
+
130
+ - @robota-sdk/agent-core@3.0.0-beta.88
131
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.88
132
+ - @robota-sdk/agent-interface-session@3.0.0-beta.88
133
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.88
134
+ - @robota-sdk/agent-transport@3.0.0-beta.88
135
+
136
+ ## 3.0.0-beta.87
137
+
138
+ ### Patch Changes
139
+
140
+ - Release the migrated Robota product with its public SDK namespace, robota command, compatible SDK exports, internal product configuration, and verified CLI startup and delivery corrections.
141
+ - Updated dependencies
142
+ - Updated dependencies [66af868]
143
+ - Updated dependencies [7d9cc66]
144
+ - Updated dependencies [7d9cc66]
145
+ - Updated dependencies [7d9cc66]
146
+ - Updated dependencies [7d9cc66]
147
+ - Updated dependencies [7d9cc66]
148
+ - Updated dependencies [7d9cc66]
149
+ - Updated dependencies [7d9cc66]
150
+ - Updated dependencies [7d9cc66]
151
+ - @robota-sdk/agent-core@3.0.0-beta.87
152
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.87
153
+ - @robota-sdk/agent-interface-session@3.0.0-beta.87
154
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.87
155
+ - @robota-sdk/agent-transport@3.0.0-beta.87
156
+
157
+ ## 3.0.0-beta.86
158
+
159
+ ### Patch Changes
160
+
161
+ - @robota-sdk/agent-core@3.0.0-beta.86
162
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.86
163
+ - @robota-sdk/agent-interface-session@3.0.0-beta.86
164
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.86
165
+ - @robota-sdk/agent-transport@3.0.0-beta.86
166
+
167
+ ## 3.0.0-beta.85
168
+
169
+ ### Patch Changes
170
+
171
+ - Updated dependencies [41cca13]
172
+ - Updated dependencies [9a01e78]
173
+ - Updated dependencies [ada3841]
174
+ - Updated dependencies [5093a30]
175
+ - Updated dependencies [94b2c87]
176
+ - Updated dependencies [3ab2eca]
177
+ - @robota-sdk/agent-core@3.0.0-beta.85
178
+ - @robota-sdk/agent-transport@3.0.0-beta.85
179
+ - @robota-sdk/agent-interface-session@3.0.0-beta.85
180
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.85
181
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.85
182
+
183
+ ## 3.0.0-beta.84
184
+
185
+ ### Patch Changes
186
+
187
+ - 9c6a8db: The wire protocol gained several request/reply pairs so a GUI never has to scrape command output for
188
+ data it can read directly.
189
+
190
+ `get-settings`/`update-settings` read and write the Settings screen; a patch applies through the same
191
+ function its matching slash command uses, so the two paths cannot drift. `list-models` returns the
192
+ configured models grouped by provider profile, with the current profile and model. `get-agent-definitions`
193
+ returns the agent switcher's roster and current selection. `project-status`, `project-diff` and
194
+ `project-memory` back the Project panel's git status, one file's diff, and project memory; a host
195
+ without this capability answers `protocol_error` instead of hanging. `rename-session` and
196
+ `delete-session` rename or remove a stored session from the list, current or not, each with its own
197
+ success/failure reply.
198
+
199
+ The `messages` frame gained an optional `display` field — the same history projected into display
200
+ segments (text runs and finished tool calls, diffs included) — and the connection's own `driverId`, so
201
+ a reload, reconnect or resume shows tool rows and tells a co-driver's turns from its own. The `error`
202
+ frame gained optional `code`, `provider`, `retryAfterSeconds` and `model` fields so a renderer can say
203
+ what kind of failure happened (`auth`, `rate_limit`, `model_unavailable`, `network`, `provider`) instead
204
+ of showing only raw text; a session error this classification does not recognize is unchanged.
205
+
206
+ `TCommandSurfaceLocality` names whether a `'remote'`-sourced command is provably on this machine. The
207
+ WebRTC/device-mesh transport now forwards `'remote'` for it (it proves no locality, the same rule
208
+ already applied to pairing), and both the WS and WebRTC transports forward it into the Settings
209
+ read/write path, so a command that refuses a remote surface (installing a plugin) refuses identically
210
+ regardless of which transport carried it.
211
+
212
+ - Updated dependencies [9f46375]
213
+ - Updated dependencies [e8d70ac]
214
+ - Updated dependencies [9c6a8db]
215
+ - Updated dependencies [9c6a8db]
216
+ - Updated dependencies [9c6a8db]
217
+ - @robota-sdk/agent-core@3.0.0-beta.84
218
+ - @robota-sdk/agent-interface-session@3.0.0-beta.84
219
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.84
220
+ - @robota-sdk/agent-transport@3.0.0-beta.84
221
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.84
222
+
223
+ ## 3.0.0-beta.83
224
+
225
+ ### Minor Changes
226
+
227
+ - 6ae3f28: A served runtime can list its workspace's sessions, start a new one and switch to another without the
228
+ process or any client connection restarting. The GUI shows them in a sessions sidebar.
229
+
230
+ - `agent-interface-session` is **`major`** for two reasons:
231
+ - It adds `ISessionListing`, `ISessionDirectory` and `ISessionSwitchedEvent`.
232
+ - `IInteractiveSessionEvents` gains a required `session_switched` event. An exhaustive map over the
233
+ event names stops compiling until it classifies the new event.
234
+ - `agent-transport` is **`major`** for the same kind of reason:
235
+ - It adds the wire messages `list-sessions` → `sessions`/`sessions_error`, `new-session`,
236
+ `switch-session`, and the broadcast `session_switched`.
237
+ - It adds a `sessionDirectory` handler option. A refusal to switch comes back as a
238
+ `protocol_error` carrying the reason.
239
+ - An exhaustive map over message types must add the new variants.
240
+ - `agent-transport-ws` passes a configured `sessionDirectory` to every connection.
241
+ - `agent-framework` is **`major` because `IRuntimeHostHandle.session` is now a `SessionSlot`**, not the
242
+ `InteractiveSession`, and `bindTransports` receives the slot.
243
+ - The slot is an `IInteractiveSession` that forwards to the current session. Members outside that
244
+ interface are read through `host.session.current`, which changes on a switch.
245
+ - Adds `InteractiveSession.whenInitialized()`.
246
+ - Exports `listUnreadableSessions`.
247
+ - `agent-ui-web` is **`major`**:
248
+ - `IWsSessionState` gains session listing state and actions.
249
+ - It adds a `SessionSidebar`.
250
+ - `/resume` opens the sidebar.
251
+ - `agent-cli`: `robota --serve` provides the session directory, and refuses a switch that would lose
252
+ work in progress. External-event grants belong to the run: a switch reopens them on the new session,
253
+ as the TUI already does.
254
+ - External-event grant history (spent tokens, rate windows, revocations) belongs to the run. The new
255
+ option `externalEventGrantHistory` (from `createExternalEventGrantHistory()`) is shared by every
256
+ session that a served runtime or the TUI builds. A session switch therefore replays no spent token
257
+ and resets no rate limit. The TUI previously had this gap when it switched sessions.
258
+
259
+ - 57f57f5: A daemon keeps several sessions live, and each client is bound to its own: one client's switch moves
260
+ only that client.
261
+
262
+ - `agent-interface-session`: `ISessionBinder`/`ISessionBinding`, the session-change refusal codes with
263
+ `isSessionChangeRefusal`, and listing rows that may say `live` and `clients`.
264
+ - `agent-framework`: `SessionPool` and `SessionChangeRefusal`.
265
+ - `agent-transport` (**major**): a new server frame, `session_change_failed`, which an exhaustive
266
+ consumer must handle. A refused `new-session` or `switch-session` now answers with it, carrying a
267
+ `code`, instead of `protocol_error`; both requests take an optional `requestId` that it echoes.
268
+ - `agent-transport-ws`: the `sessionBinder` option binds each connection to its own session and
269
+ releases the binding when the connection closes.
270
+ - `agent-cli`: `robota --serve` and the daemon keep up to four sessions live. Each WebSocket client and
271
+ attached terminal is bound to its own session; leaving a busy session is no longer refused, and only
272
+ the last driver of a session with a pending prompt is kept from leaving it. Grants and the supervised
273
+ name stay on the runtime's first session, and its reported activity covers every live session.
274
+ - `agent-ui-web`: a refused new or switch shows the host's reason as a notice (an older host's
275
+ `protocol_error` still does); the session sidebar marks live sessions and counts the other clients
276
+ on each; after a reconnect to a host that keeps sessions live, the GUI returns to the session it was on.
277
+ - `agent-ui-terminal`: an attached terminal shows why a switch was refused, and the picker's switch
278
+ stays pending until the host answers; the session picker marks live sessions and their clients.
279
+
280
+ ### Patch Changes
281
+
282
+ - 57280bf: Every published package now declares `"engines": { "node": ">=22.12.0" }`. Before, 27 of the 38
283
+ packages declared no floor (`agent-core`, `agent-tools` and every provider among them),
284
+ `agent-session` and `agent-file-authority` declared `>=20.19.0`, and the other nine declared
285
+ `>=22.0.0`, so a consumer on Node 20 saw at most a warning from a transitive dependency.
286
+
287
+ Why 22.12: `agent-cli` and `agent-ui-terminal` need Node 22 through `ink` 7, and the CommonJS entries
288
+ of `agent-tools` and its dependents, `agent-transport`/`node` and its dependents, and
289
+ `agent-ui-terminal` `require()` ESM-only dependencies (`p-limit`, `jose`, `chalk`), which Node 22
290
+ supports unflagged only from 22.12. `engines` is advisory unless the consumer enables `engine-strict`.
291
+
292
+ No code changes: `tsdown` now reads `node22.12.0` as its build target from the field.
293
+
294
+ - 18c0d5c: Every published package now exports `./package.json`, so `require('<package>/package.json')` and
295
+ `import('<package>/package.json', { with: { type: 'json' } })` work instead of failing with
296
+ `ERR_PACKAGE_PATH_NOT_EXPORTED`, and each tarball now ships the package's `CHANGELOG.md`.
297
+ - Updated dependencies [3c81769]
298
+ - Updated dependencies [724fabb]
299
+ - Updated dependencies [d877de2]
300
+ - Updated dependencies [d61e159]
301
+ - Updated dependencies [bfe8ed5]
302
+ - Updated dependencies [e689c8e]
303
+ - Updated dependencies [7b72344]
304
+ - Updated dependencies [6ae3f28]
305
+ - Updated dependencies [be0e53c]
306
+ - Updated dependencies [57f57f5]
307
+ - Updated dependencies [ba822c1]
308
+ - Updated dependencies [6e6b06b]
309
+ - Updated dependencies [8bd5fac]
310
+ - Updated dependencies [57280bf]
311
+ - Updated dependencies [5033dd9]
312
+ - Updated dependencies [18c0d5c]
313
+ - Updated dependencies [dbd888d]
314
+ - Updated dependencies [1887e54]
315
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.83
316
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.83
317
+ - @robota-sdk/agent-transport@3.0.0-beta.83
318
+ - @robota-sdk/agent-core@3.0.0-beta.83
319
+ - @robota-sdk/agent-interface-session@3.0.0-beta.83
320
+
321
+ ## 3.0.0-beta.82
322
+
323
+ ### Patch Changes
324
+
325
+ - Updated dependencies [c7f9203]
326
+ - @robota-sdk/agent-transport@3.0.0-beta.82
327
+ - @robota-sdk/agent-core@3.0.0-beta.82
328
+ - @robota-sdk/agent-interface-session@3.0.0-beta.82
329
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.82
330
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.82
331
+
332
+ ## 3.0.0-beta.81
333
+
334
+ ### Patch Changes
335
+
336
+ - Updated dependencies [3038eb7]
337
+ - Updated dependencies [02b7452]
338
+ - Updated dependencies [ec5e477]
339
+ - @robota-sdk/agent-core@3.0.0-beta.81
340
+ - @robota-sdk/agent-interface-session@3.0.0-beta.81
341
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.81
342
+ - @robota-sdk/agent-transport@3.0.0-beta.81
343
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.81
344
+
345
+ ## 3.0.0-beta.80
346
+
347
+ ### Major Changes
348
+
349
+ - e82215f: **ARCH-011: replace the ambiguous transport lifecycle stub with executable conformance.**
350
+
351
+ `ITransportAdapter` now requires a frozen `service | runner` lifecycle descriptor. `start()` resolves
352
+ at the concrete transport's documented readiness boundary; start before attach and repeated active
353
+ start reject a stable lifecycle error, repeated stop is safe, and stopped adapters can reattach and
354
+ restart.
355
+
356
+ Runner adapters launch separately and expose a typed terminal outcome through
357
+ `waitForCompletion()`. The registry accepts base adapters, rejects duplicate names, keeps
358
+ configuration as an optional capability, returns complete ordered records whose pending slots become
359
+ registry-owned `abandoned` outcomes on stop/rollback, and exposes a real-runner-only first-failure
360
+ wait. It serializes startup/stop, rejects active restart before mutation, and reverses partial startup
361
+ from the currently failing adapter with typed safe rollback details. Runtime host and serve mode
362
+ propagate real nonzero runner results without treating normal shutdown abandonment as failure.
363
+
364
+ HTTP, MCP, both WebSocket adapters, WebRTC, and headless invoke one shared public conformance kit.
365
+ The former `TuiTransport` export is removed because it ignored the attached session; use `renderApp`
366
+ or `TuiInteractionChannel`, which honestly own their session lifecycle.
367
+
368
+ ### Minor Changes
369
+
370
+ - 9db63ee: Add named session capability roles and explicit capability-host queries while preserving the legacy
371
+ `IInteractiveSession` interface shape. HTTP, MCP, protocol, WS, WebRTC, and headless transports now
372
+ declare only the session roles they consume, and the direct aggregate-cast floor is zero.
373
+ - 2ebff01: Emit the complete persisted checkpoint and branch lifecycle, forward plan, context-refresh, and
374
+ branch events through protocol transports, and render deterministic bounded notices in the TUI.
375
+ Transport-owned delivery failures now enter the owning carrier cleanup lifecycle without reversing
376
+ an already-committed session operation.
377
+ - 5c5ff23: TRANS-001: payload-agnostic transport — opaque binary frames + consumer-declared event types
378
+
379
+ The WS transport now carries **arbitrary payloads** alongside the text-agent protocol on one
380
+ connection, instead of forcing every app-level payload through the `text_delta`/`submit` wire
381
+ protocol.
382
+
383
+ - `agent-interface-transport` adds the channel contracts (`IBinaryFrame`, `IChannelEventFrame`,
384
+ `IChannelDescriptor`, `IPayloadChannel`, `IPayloadChannelHost`, `TChannelEventMap`,
385
+ `TChannelFrame`, `TChannelReceiveResult`). Content-neutral carrier mechanics — no payload domain.
386
+ - `agent-transport-protocol` adds the pure channel frame codec (`encodeBinaryFrame`,
387
+ `encodeChannelEventFrame`, `decodeChannelFrame`, `isChannelFrame`). `TClientMessage` /
388
+ `TServerMessage` are unchanged.
389
+ - `agent-transport-ws` becomes a carrier that routes by WebSocket frame opcode — TEXT to the
390
+ text-agent protocol profile, BINARY to consumer-declared channels — and `WsTransport` now
391
+ implements `IPayloadChannelHost` (`registerChannel`). `PayloadChannelRegistry` is exported.
392
+
393
+ Additive only: existing transports, consumers, and the agent wire protocol are untouched.
394
+
395
+ ### Patch Changes
396
+
397
+ - 235da81: **BREAKING — ARCH-030: `createWsHandler` takes the carrier's delivery boundary, not a raw `send`.**
398
+
399
+ `createWsHandler` had two outbound semantics on one connection. The session-event fan-out went through
400
+ a guard that reported carrier failures through `onDeliveryError`; every reply to an inbound frame got
401
+ the raw `send`. Eleven reply families were unguarded — five resolving from a Promise continuation, so a
402
+ reply landing after a disconnect escaped as an **unhandled rejection** while the carrier's cleanup was
403
+ never notified, and six synchronous ones that threw into the carrier's inbound listener instead.
404
+
405
+ `IWsHandlerOptions` now takes a single `deliver: TOutboundDeliver` in place of `send` and
406
+ `onDeliveryError`. **The carrier builds the boundary** from its own sink and its own failure policy and
407
+ passes it down — not the reverse, because a protocol layer handed a raw sink so it can hand a wrapper
408
+ back leaves the raw sink reachable, which is how the twelfth reply family gets added unguarded.
409
+
410
+ ```ts
411
+ // before
412
+ const { onMessage, cleanup } = createWsHandler({
413
+ session,
414
+ send: (msg) => ws.send(JSON.stringify(msg)),
415
+ onDeliveryError: (error) => ws.close(1011, error.message),
416
+ });
417
+
418
+ // after
419
+ const deliver = createOutboundDelivery(
420
+ (msg) => ws.send(JSON.stringify(msg)),
421
+ (error) => ws.close(1011, error.message),
422
+ );
423
+ const { onMessage, cleanup } = createWsHandler({ session, deliver });
424
+ ```
425
+
426
+ `TOutboundDeliver` is branded and `createOutboundDelivery` is its only producer, so a plain
427
+ `(message: TServerMessage) => void` is refused by the compiler wherever a boundary is required.
428
+
429
+ **The boundary latches:** it reports at most one delivery failure per connection, after which frames are
430
+ dropped without a further report. All three carriers already treated a delivery failure as terminal and
431
+ each had grown its own latch; it belongs upstream of all three. `SessionResumeBridge` builds a fresh
432
+ boundary per `attach`, which is what un-latches the session after a reconnect, and buffers a frame
433
+ before the boundary so a dropped one still replays.
434
+
435
+ **`ISubscribeSessionEventsOptions` is no longer exported** from the package barrel. It is the options bag
436
+ of `subscribeSessionEvents`, which is package-internal, and it was already absent from the SPEC's public
437
+ API table. Its `onDeliveryError` member is gone regardless — carrier-failure containment is the
438
+ boundary's job now.
439
+
440
+ `agent-transport-ws` and `agent-transport-webrtc` are `patch`: `WsSessionDelivery` (whose raw `send` is
441
+ now private, with `deliver` the only public sink) and `PairingGate` are not on their packages' barrels,
442
+ and every barrel export of both packages keeps its signature.
443
+
444
+ - 4f3c075: Assemble complete, verified package generations before switching build output; preserve the previous generation on build failure and pack only verified regular-file images. Include copied CLI web assets in affected-build ordering and artifact transfer. Preserve the CLI version in managed build paths. Public runtime contracts remain compatible (patch).
445
+ - 94cc355: REMOTE-002 Stage A: extract the transport-neutral session bridge + wire protocol into a new
446
+ `@robota-sdk/agent-transport-protocol` package (`createWsHandler`, `TClientMessage`/`TServerMessage`); repoint
447
+ `agent-transport-ws` and `agent-web-ui` at it (no pass-through re-export). Add a new
448
+ `@robota-sdk/agent-transport-webrtc` package: a `WebRtcTransport` (`IConfigurableTransport`, `defaultEnabled:false`)
449
+ that carries an `IInteractiveSession` over an `RTCDataChannel` reusing the shared handler, with a lazily-loaded
450
+ optional `werift` peer dependency that throws an explicit "WebRTC transport unavailable" error on absence (never a
451
+ silent no-op). No user-facing enable path and no auth in Stage A (that lands in Stage B); the transport is proven
452
+ by an in-process loopback data-channel round-trip only.
453
+
454
+ (Bump target corrected during REL-023 triage: `@robota-sdk/agent-web-ui` was dissolved by GUI-006 (#1141, 2026-07-12) before this work was ever published; its protocol-consumer role now lives in `@robota-sdk/agent-transport-webrtc-web`.)
455
+
456
+ - Updated dependencies [7b6234c]
457
+ - Updated dependencies [37b4bd7]
458
+ - Updated dependencies [4eea54b]
459
+ - Updated dependencies [50d2c9f]
460
+ - Updated dependencies [1698be4]
461
+ - Updated dependencies [a5961c9]
462
+ - Updated dependencies [d4189b9]
463
+ - Updated dependencies [9edae52]
464
+ - Updated dependencies [4078a72]
465
+ - Updated dependencies [4c73a0b]
466
+ - Updated dependencies [196a900]
467
+ - Updated dependencies [f336838]
468
+ - Updated dependencies [34e50f0]
469
+ - Updated dependencies [722e88a]
470
+ - Updated dependencies [d23c848]
471
+ - Updated dependencies [4c5148e]
472
+ - Updated dependencies [0116a29]
473
+ - Updated dependencies [fec722f]
474
+ - Updated dependencies [e82215f]
475
+ - Updated dependencies [52b7346]
476
+ - Updated dependencies [9db63ee]
477
+ - Updated dependencies [b078afa]
478
+ - Updated dependencies [2ebff01]
479
+ - Updated dependencies [9db63ee]
480
+ - Updated dependencies [2ebff01]
481
+ - Updated dependencies [2d3b2c0]
482
+ - Updated dependencies [4772067]
483
+ - Updated dependencies [0f98419]
484
+ - Updated dependencies [64ba748]
485
+ - Updated dependencies [9fbab1b]
486
+ - Updated dependencies [d312755]
487
+ - Updated dependencies [a009f5b]
488
+ - Updated dependencies [3244fb8]
489
+ - Updated dependencies [1e3f91a]
490
+ - Updated dependencies [4f3c075]
491
+ - Updated dependencies [475e085]
492
+ - Updated dependencies [e477440]
493
+ - Updated dependencies [9dcb5da]
494
+ - Updated dependencies [a95ca85]
495
+ - Updated dependencies [b6d14ce]
496
+ - Updated dependencies [0382a51]
497
+ - Updated dependencies [93d061d]
498
+ - Updated dependencies [39554a1]
499
+ - Updated dependencies [d28430a]
500
+ - Updated dependencies [7669851]
501
+ - Updated dependencies [4b76cfa]
502
+ - Updated dependencies [07b627f]
503
+ - Updated dependencies [d0de5b2]
504
+ - Updated dependencies [9665c6e]
505
+ - Updated dependencies [44393be]
506
+ - Updated dependencies [c7fa299]
507
+ - Updated dependencies [5134b3b]
508
+ - Updated dependencies [d6b9404]
509
+ - Updated dependencies [5c5ff23]
510
+ - Updated dependencies [9814afc]
511
+ - @robota-sdk/agent-core@3.0.0-beta.80
512
+ - @robota-sdk/agent-interface-session@3.0.0-beta.80
513
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.80
514
+ - @robota-sdk/agent-transport@3.0.0-beta.80
515
+ - @robota-sdk/agent-interface-analytics@3.0.0-beta.80
516
+
517
+ ## 3.0.0-beta.79
518
+
519
+ ### Patch Changes
520
+
521
+ - @robota-sdk/agent-core@3.0.0-beta.79
522
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.79
523
+
524
+ ## 3.0.0-beta.78
525
+
526
+ ### Patch Changes
527
+
528
+ - Updated dependencies [6f308d1]
529
+ - @robota-sdk/agent-core@3.0.0-beta.78
530
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.78
531
+
532
+ ## 3.0.0-beta.77
533
+
534
+ ### Patch Changes
535
+
536
+ - Updated dependencies
537
+ - @robota-sdk/agent-core@3.0.0-beta.77
538
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.77
539
+
540
+ ## 3.0.0-beta.76
541
+
542
+ ### Minor Changes
543
+
544
+ - 9df3a88: Split the consolidated `@robota-sdk/agent-transport` package into per-concern transport packages (DQ-AUDIT-005) so unrelated heavy dependencies (React/Ink, ws, Hono, MCP SDK) no longer share one publishable unit and are not dragged into non-TUI consumers' graphs:
545
+
546
+ - `@robota-sdk/agent-transport` — lean core: headless adapter + `TransportRegistry` + scripted-provider testing fixtures (no external runtime deps).
547
+ - `@robota-sdk/agent-transport-tui` — React + Ink terminal UI.
548
+ - `@robota-sdk/agent-transport-ws` — WebSocket transport + protocol (`agent-web-ui` now depends only on this for WS types).
549
+ - `@robota-sdk/agent-transport-http` — Hono HTTP transport.
550
+ - `@robota-sdk/agent-transport-mcp` — MCP server transport.
551
+
552
+ The default transport-registry wiring (pre-registering `WsTransport`) moves to the CLI composition root, removing the core→ws edge.
553
+
554
+ ### Patch Changes
555
+
556
+ - Updated dependencies
557
+ - Updated dependencies [c0a6287]
558
+ - Updated dependencies [9df3a88]
559
+ - Updated dependencies
560
+ - Updated dependencies
561
+ - Updated dependencies [576af62]
562
+ - @robota-sdk/agent-core@3.0.0-beta.76
563
+ - @robota-sdk/agent-framework@3.0.0-beta.76
564
+ - @robota-sdk/agent-interface-transport@3.0.0-beta.76