@floegence/floeterm-terminal-web 0.5.23 → 0.6.0

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 (62) hide show
  1. package/README.md +21 -1
  2. package/dist/core/PagedTerminalOutputCoordinator.js +3 -4
  3. package/dist/core/PagedTerminalOutputCoordinator.js.map +1 -1
  4. package/dist/core/TerminalCore.d.ts +3 -0
  5. package/dist/core/TerminalCore.d.ts.map +1 -1
  6. package/dist/core/TerminalCore.js +121 -35
  7. package/dist/core/TerminalCore.js.map +1 -1
  8. package/dist/core/TerminalInputBridge.d.ts +17 -7
  9. package/dist/core/TerminalInputBridge.d.ts.map +1 -1
  10. package/dist/core/TerminalInputBridge.js +78 -73
  11. package/dist/core/TerminalInputBridge.js.map +1 -1
  12. package/dist/core/TerminalOutputPipeline.js +2 -2
  13. package/dist/core/TerminalOutputPipeline.js.map +1 -1
  14. package/dist/entries/live.d.ts +7 -0
  15. package/dist/entries/live.d.ts.map +1 -0
  16. package/dist/entries/live.js +4 -0
  17. package/dist/entries/live.js.map +1 -0
  18. package/dist/fabric/BeamtermFabricRenderer.d.ts +11 -4
  19. package/dist/fabric/BeamtermFabricRenderer.d.ts.map +1 -1
  20. package/dist/fabric/BeamtermFabricRenderer.js +259 -47
  21. package/dist/fabric/BeamtermFabricRenderer.js.map +1 -1
  22. package/dist/fabric/TerminalFabricCoordinator.d.ts +1 -1
  23. package/dist/fabric/TerminalFabricCoordinator.d.ts.map +1 -1
  24. package/dist/fabric/TerminalFabricCoordinator.js +4 -7
  25. package/dist/fabric/TerminalFabricCoordinator.js.map +1 -1
  26. package/dist/fabric/TerminalLiveFabric.d.ts +3 -43
  27. package/dist/fabric/TerminalLiveFabric.d.ts.map +1 -1
  28. package/dist/fabric/TerminalLiveFabric.js +3 -97
  29. package/dist/fabric/TerminalLiveFabric.js.map +1 -1
  30. package/dist/fabric/types.d.ts +41 -3
  31. package/dist/fabric/types.d.ts.map +1 -1
  32. package/dist/index.d.ts +1 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/internal/BeamtermResourceLoader.d.ts +1 -1
  36. package/dist/internal/BeamtermResourceLoader.d.ts.map +1 -1
  37. package/dist/internal/BeamtermResourceLoader.js +1 -1
  38. package/dist/internal/BeamtermResourceLoader.js.map +1 -1
  39. package/dist/internal/SequenceBuffer.d.ts +7 -11
  40. package/dist/internal/SequenceBuffer.d.ts.map +1 -1
  41. package/dist/internal/SequenceBuffer.js +52 -103
  42. package/dist/internal/SequenceBuffer.js.map +1 -1
  43. package/dist/live/client.d.ts +62 -0
  44. package/dist/live/client.d.ts.map +1 -0
  45. package/dist/live/client.js +326 -0
  46. package/dist/live/client.js.map +1 -0
  47. package/dist/live/codec.d.ts +97 -0
  48. package/dist/live/codec.d.ts.map +1 -0
  49. package/dist/live/codec.js +386 -0
  50. package/dist/live/codec.js.map +1 -0
  51. package/dist/live/transport.d.ts +37 -0
  52. package/dist/live/transport.d.ts.map +1 -0
  53. package/dist/live/transport.js +194 -0
  54. package/dist/live/transport.js.map +1 -0
  55. package/dist/manager/TerminalInstanceController.d.ts +11 -0
  56. package/dist/manager/TerminalInstanceController.d.ts.map +1 -1
  57. package/dist/manager/TerminalInstanceController.js +265 -38
  58. package/dist/manager/TerminalInstanceController.js.map +1 -1
  59. package/dist/types.d.ts +41 -2
  60. package/dist/types.d.ts.map +1 -1
  61. package/dist/types.js.map +1 -1
  62. package/package.json +6 -2
@@ -0,0 +1,386 @@
1
+ export const StreamKind = 'terminal/live_v1';
2
+ export const FRAME_HEADER_BYTES = 8;
3
+ export const MAX_FRAME_PAYLOAD_BYTES = 256 * 1024;
4
+ export const MAX_INPUT_BYTES = 64 * 1024;
5
+ export const MAX_OUTPUT_BATCH_BYTES = 64 * 1024;
6
+ export const MAX_OUTPUT_BATCH_CHUNKS = 256;
7
+ export const MAX_IDENTIFIER_BYTES = 256;
8
+ export var TerminalLiveFrameType;
9
+ (function (TerminalLiveFrameType) {
10
+ TerminalLiveFrameType[TerminalLiveFrameType["Attach"] = 1] = "Attach";
11
+ TerminalLiveFrameType[TerminalLiveFrameType["Input"] = 2] = "Input";
12
+ TerminalLiveFrameType[TerminalLiveFrameType["Resize"] = 3] = "Resize";
13
+ TerminalLiveFrameType[TerminalLiveFrameType["Detach"] = 4] = "Detach";
14
+ TerminalLiveFrameType[TerminalLiveFrameType["Attached"] = 129] = "Attached";
15
+ TerminalLiveFrameType[TerminalLiveFrameType["OutputBatch"] = 130] = "OutputBatch";
16
+ TerminalLiveFrameType[TerminalLiveFrameType["ResizeApplied"] = 131] = "ResizeApplied";
17
+ TerminalLiveFrameType[TerminalLiveFrameType["SessionClosed"] = 132] = "SessionClosed";
18
+ TerminalLiveFrameType[TerminalLiveFrameType["GeometryChanged"] = 133] = "GeometryChanged";
19
+ TerminalLiveFrameType[TerminalLiveFrameType["Error"] = 255] = "Error";
20
+ })(TerminalLiveFrameType || (TerminalLiveFrameType = {}));
21
+ const encoder = new TextEncoder();
22
+ const decoder = new TextDecoder('utf-8', { fatal: true });
23
+ const isFrameType = (value) => Object.values(TerminalLiveFrameType)
24
+ .some(candidate => typeof candidate === 'number' && candidate === value);
25
+ const frame = (type, payload) => {
26
+ if (!isFrameType(type))
27
+ throw new Error('unknown terminal live frame type');
28
+ if (payload.byteLength > MAX_FRAME_PAYLOAD_BYTES)
29
+ throw new Error('terminal live frame payload is too large');
30
+ const out = new Uint8Array(FRAME_HEADER_BYTES + payload.byteLength);
31
+ const view = new DataView(out.buffer);
32
+ out[0] = type;
33
+ view.setUint32(4, payload.byteLength, false);
34
+ out.set(payload, FRAME_HEADER_BYTES);
35
+ return out;
36
+ };
37
+ export class TerminalLiveDecoder {
38
+ constructor() {
39
+ this.buffer = new Uint8Array();
40
+ }
41
+ push(chunk) {
42
+ if (chunk.byteLength > 0) {
43
+ const joined = new Uint8Array(this.buffer.byteLength + chunk.byteLength);
44
+ joined.set(this.buffer);
45
+ joined.set(chunk, this.buffer.byteLength);
46
+ this.buffer = joined;
47
+ }
48
+ const frames = [];
49
+ let offset = 0;
50
+ while (this.buffer.byteLength - offset >= FRAME_HEADER_BYTES) {
51
+ const view = new DataView(this.buffer.buffer, this.buffer.byteOffset + offset);
52
+ const type = this.buffer[offset];
53
+ if (!isFrameType(type))
54
+ throw new Error('unknown terminal live frame type');
55
+ if (this.buffer[offset + 1] !== 0 || view.getUint16(2, false) !== 0) {
56
+ throw new Error('terminal live frame reserved bits are non-zero');
57
+ }
58
+ const payloadLength = view.getUint32(4, false);
59
+ if (payloadLength > MAX_FRAME_PAYLOAD_BYTES)
60
+ throw new Error('terminal live frame payload is too large');
61
+ const frameLength = FRAME_HEADER_BYTES + payloadLength;
62
+ if (this.buffer.byteLength - offset < frameLength)
63
+ break;
64
+ frames.push({
65
+ type,
66
+ flags: 0,
67
+ payload: this.buffer.slice(offset + FRAME_HEADER_BYTES, offset + frameLength),
68
+ });
69
+ offset += frameLength;
70
+ }
71
+ this.buffer = offset === this.buffer.byteLength ? new Uint8Array() : this.buffer.slice(offset);
72
+ return frames;
73
+ }
74
+ }
75
+ const assertPositiveUint32 = (value, name) => {
76
+ if (!Number.isSafeInteger(value) || value <= 0 || value > 0xffffffff) {
77
+ throw new Error(`${name} must be a positive uint32`);
78
+ }
79
+ };
80
+ const assertPositiveUint64 = (value, name) => {
81
+ if (value <= 0n || value > 0xffffffffffffffffn)
82
+ throw new Error(`${name} must be a positive uint64`);
83
+ };
84
+ const assertUint64 = (value, name) => {
85
+ if (value < 0n || value > 0xffffffffffffffffn)
86
+ throw new Error(`${name} must be a uint64`);
87
+ };
88
+ const writeString = (value) => {
89
+ const encoded = encoder.encode(value);
90
+ if (encoded.byteLength === 0 || encoded.byteLength > MAX_IDENTIFIER_BYTES) {
91
+ throw new Error('terminal live identifier has an invalid length');
92
+ }
93
+ const out = new Uint8Array(2 + encoded.byteLength);
94
+ new DataView(out.buffer).setUint16(0, encoded.byteLength, false);
95
+ out.set(encoded, 2);
96
+ return out;
97
+ };
98
+ const readString = (payload, offset) => {
99
+ if (offset < 0 || offset + 2 > payload.byteLength) {
100
+ throw new Error('invalid terminal live identifier payload');
101
+ }
102
+ const length = new DataView(payload.buffer, payload.byteOffset + offset, 2).getUint16(0, false);
103
+ if (length === 0 || length > MAX_IDENTIFIER_BYTES || offset + 2 + length > payload.byteLength) {
104
+ throw new Error('terminal live identifier has an invalid length');
105
+ }
106
+ const nextOffset = offset + 2 + length;
107
+ return { value: decoder.decode(payload.subarray(offset + 2, nextOffset)), nextOffset };
108
+ };
109
+ export const encodeAttach = (value) => {
110
+ assertPositiveUint64(value.attachGeneration, 'attachGeneration');
111
+ assertPositiveUint32(value.cols, 'cols');
112
+ assertPositiveUint32(value.rows, 'rows');
113
+ const session = writeString(value.sessionId);
114
+ const connection = writeString(value.connectionId);
115
+ const payload = new Uint8Array(16 + session.byteLength + connection.byteLength);
116
+ const view = new DataView(payload.buffer);
117
+ view.setBigUint64(0, value.attachGeneration, false);
118
+ view.setUint32(8, value.cols, false);
119
+ view.setUint32(12, value.rows, false);
120
+ payload.set(session, 16);
121
+ payload.set(connection, 16 + session.byteLength);
122
+ return frame(TerminalLiveFrameType.Attach, payload);
123
+ };
124
+ export const decodeAttach = (value) => {
125
+ if (value.type !== TerminalLiveFrameType.Attach)
126
+ throw new Error('unexpected terminal live frame type');
127
+ if (value.payload.byteLength < 22)
128
+ throw new Error('invalid terminal live attach payload');
129
+ const view = new DataView(value.payload.buffer, value.payload.byteOffset);
130
+ const attachGeneration = view.getBigUint64(0, false);
131
+ const cols = view.getUint32(8, false);
132
+ const rows = view.getUint32(12, false);
133
+ assertPositiveUint64(attachGeneration, 'attachGeneration');
134
+ assertPositiveUint32(cols, 'cols');
135
+ assertPositiveUint32(rows, 'rows');
136
+ const session = readString(value.payload, 16);
137
+ const connection = readString(value.payload, session.nextOffset);
138
+ if (connection.nextOffset !== value.payload.byteLength)
139
+ throw new Error('invalid terminal live attach payload');
140
+ return {
141
+ attachGeneration,
142
+ cols,
143
+ rows,
144
+ sessionId: session.value,
145
+ connectionId: connection.value,
146
+ };
147
+ };
148
+ export const encodeInput = (value) => {
149
+ assertPositiveUint64(value.sequence, 'sequence');
150
+ if (value.data.byteLength === 0 || value.data.byteLength > MAX_INPUT_BYTES) {
151
+ throw new Error('terminal live input payload has an invalid length');
152
+ }
153
+ const payload = new Uint8Array(8 + value.data.byteLength);
154
+ new DataView(payload.buffer).setBigUint64(0, value.sequence, false);
155
+ payload.set(value.data, 8);
156
+ return frame(TerminalLiveFrameType.Input, payload);
157
+ };
158
+ export const decodeInput = (value) => {
159
+ if (value.type !== TerminalLiveFrameType.Input)
160
+ throw new Error('unexpected terminal live frame type');
161
+ if (value.payload.byteLength <= 8 || value.payload.byteLength - 8 > MAX_INPUT_BYTES) {
162
+ throw new Error('invalid terminal live input payload');
163
+ }
164
+ const sequence = new DataView(value.payload.buffer, value.payload.byteOffset).getBigUint64(0, false);
165
+ assertPositiveUint64(sequence, 'sequence');
166
+ return { sequence, data: value.payload.slice(8) };
167
+ };
168
+ export const encodeResize = (value) => {
169
+ assertPositiveUint64(value.sequence, 'sequence');
170
+ assertPositiveUint32(value.cols, 'cols');
171
+ assertPositiveUint32(value.rows, 'rows');
172
+ const payload = new Uint8Array(16);
173
+ const view = new DataView(payload.buffer);
174
+ view.setBigUint64(0, value.sequence, false);
175
+ view.setUint32(8, value.cols, false);
176
+ view.setUint32(12, value.rows, false);
177
+ return frame(TerminalLiveFrameType.Resize, payload);
178
+ };
179
+ export const decodeResize = (value) => {
180
+ if (value.type !== TerminalLiveFrameType.Resize)
181
+ throw new Error('unexpected terminal live frame type');
182
+ if (value.payload.byteLength !== 16)
183
+ throw new Error('invalid terminal live resize payload');
184
+ const view = new DataView(value.payload.buffer, value.payload.byteOffset);
185
+ const sequence = view.getBigUint64(0, false);
186
+ const cols = view.getUint32(8, false);
187
+ const rows = view.getUint32(12, false);
188
+ assertPositiveUint64(sequence, 'sequence');
189
+ assertPositiveUint32(cols, 'cols');
190
+ assertPositiveUint32(rows, 'rows');
191
+ return { sequence, cols, rows };
192
+ };
193
+ export const encodeAttached = (value) => {
194
+ assertPositiveUint64(value.historyGeneration, 'historyGeneration');
195
+ assertPositiveUint64(value.historyStartSequence, 'historyStartSequence');
196
+ assertPositiveUint64(value.geometryGeneration, 'geometryGeneration');
197
+ assertPositiveUint32(value.cols, 'cols');
198
+ assertPositiveUint32(value.rows, 'rows');
199
+ if (value.historyStartSequence > value.historyBoundarySequence + 1n) {
200
+ throw new Error('historyStartSequence exceeds the attached history boundary');
201
+ }
202
+ const payload = new Uint8Array(40);
203
+ const view = new DataView(payload.buffer);
204
+ view.setBigUint64(0, value.historyBoundarySequence, false);
205
+ view.setBigUint64(8, value.historyGeneration, false);
206
+ view.setBigUint64(16, value.historyStartSequence, false);
207
+ view.setBigUint64(24, value.geometryGeneration, false);
208
+ view.setUint32(32, value.cols, false);
209
+ view.setUint32(36, value.rows, false);
210
+ return frame(TerminalLiveFrameType.Attached, payload);
211
+ };
212
+ export const decodeAttached = (value) => {
213
+ if (value.type !== TerminalLiveFrameType.Attached)
214
+ throw new Error('unexpected terminal live frame type');
215
+ if (value.payload.byteLength !== 40)
216
+ throw new Error('invalid terminal live attached payload');
217
+ const view = new DataView(value.payload.buffer, value.payload.byteOffset);
218
+ const attached = {
219
+ historyBoundarySequence: view.getBigUint64(0, false),
220
+ historyGeneration: view.getBigUint64(8, false),
221
+ historyStartSequence: view.getBigUint64(16, false),
222
+ geometryGeneration: view.getBigUint64(24, false),
223
+ cols: view.getUint32(32, false),
224
+ rows: view.getUint32(36, false),
225
+ };
226
+ assertPositiveUint64(attached.historyGeneration, 'historyGeneration');
227
+ assertPositiveUint64(attached.historyStartSequence, 'historyStartSequence');
228
+ assertPositiveUint64(attached.geometryGeneration, 'geometryGeneration');
229
+ assertPositiveUint32(attached.cols, 'cols');
230
+ assertPositiveUint32(attached.rows, 'rows');
231
+ if (attached.historyStartSequence > attached.historyBoundarySequence + 1n) {
232
+ throw new Error('historyStartSequence exceeds the attached history boundary');
233
+ }
234
+ return attached;
235
+ };
236
+ export const encodeResizeApplied = (value) => {
237
+ assertPositiveUint64(value.sequence, 'sequence');
238
+ assertPositiveUint64(value.geometryGeneration, 'geometryGeneration');
239
+ assertUint64(value.outputSequenceBoundary, 'outputSequenceBoundary');
240
+ assertPositiveUint32(value.cols, 'cols');
241
+ assertPositiveUint32(value.rows, 'rows');
242
+ const payload = new Uint8Array(32);
243
+ const view = new DataView(payload.buffer);
244
+ view.setBigUint64(0, value.sequence, false);
245
+ view.setBigUint64(8, value.geometryGeneration, false);
246
+ view.setBigUint64(16, value.outputSequenceBoundary, false);
247
+ view.setUint32(24, value.cols, false);
248
+ view.setUint32(28, value.rows, false);
249
+ return frame(TerminalLiveFrameType.ResizeApplied, payload);
250
+ };
251
+ export const decodeResizeApplied = (value) => {
252
+ if (value.type !== TerminalLiveFrameType.ResizeApplied)
253
+ throw new Error('unexpected terminal live frame type');
254
+ if (value.payload.byteLength !== 32)
255
+ throw new Error('invalid terminal live resize applied payload');
256
+ const view = new DataView(value.payload.buffer, value.payload.byteOffset);
257
+ const sequence = view.getBigUint64(0, false);
258
+ const geometryGeneration = view.getBigUint64(8, false);
259
+ const outputSequenceBoundary = view.getBigUint64(16, false);
260
+ const cols = view.getUint32(24, false);
261
+ const rows = view.getUint32(28, false);
262
+ assertPositiveUint64(sequence, 'sequence');
263
+ assertPositiveUint64(geometryGeneration, 'geometryGeneration');
264
+ assertUint64(outputSequenceBoundary, 'outputSequenceBoundary');
265
+ assertPositiveUint32(cols, 'cols');
266
+ assertPositiveUint32(rows, 'rows');
267
+ return { sequence, geometryGeneration, outputSequenceBoundary, cols, rows };
268
+ };
269
+ export const encodeGeometryChanged = (value) => {
270
+ assertPositiveUint64(value.generation, 'geometryGeneration');
271
+ assertUint64(value.outputSequenceBoundary, 'outputSequenceBoundary');
272
+ assertPositiveUint32(value.cols, 'cols');
273
+ assertPositiveUint32(value.rows, 'rows');
274
+ const payload = new Uint8Array(24);
275
+ const view = new DataView(payload.buffer);
276
+ view.setBigUint64(0, value.generation, false);
277
+ view.setBigUint64(8, value.outputSequenceBoundary, false);
278
+ view.setUint32(16, value.cols, false);
279
+ view.setUint32(20, value.rows, false);
280
+ return frame(TerminalLiveFrameType.GeometryChanged, payload);
281
+ };
282
+ export const decodeGeometryChanged = (value) => {
283
+ if (value.type !== TerminalLiveFrameType.GeometryChanged)
284
+ throw new Error('unexpected terminal live frame type');
285
+ if (value.payload.byteLength !== 24)
286
+ throw new Error('invalid terminal live geometry payload');
287
+ const view = new DataView(value.payload.buffer, value.payload.byteOffset);
288
+ const generation = view.getBigUint64(0, false);
289
+ const outputSequenceBoundary = view.getBigUint64(8, false);
290
+ const cols = view.getUint32(16, false);
291
+ const rows = view.getUint32(20, false);
292
+ assertPositiveUint64(generation, 'geometryGeneration');
293
+ assertUint64(outputSequenceBoundary, 'outputSequenceBoundary');
294
+ assertPositiveUint32(cols, 'cols');
295
+ assertPositiveUint32(rows, 'rows');
296
+ return { generation, outputSequenceBoundary, cols, rows };
297
+ };
298
+ export const encodeOutputBatch = (value) => {
299
+ assertPositiveUint64(value.geometryGeneration, 'geometryGeneration');
300
+ assertPositiveUint32(value.cols, 'cols');
301
+ assertPositiveUint32(value.rows, 'rows');
302
+ if (value.records.length === 0 || value.records.length > MAX_OUTPUT_BATCH_CHUNKS) {
303
+ throw new Error('invalid terminal live output record count');
304
+ }
305
+ let dataBytes = 0;
306
+ let payloadBytes = 18;
307
+ for (const record of value.records) {
308
+ assertPositiveUint64(record.sequence, 'sequence');
309
+ if (record.data.byteLength === 0)
310
+ throw new Error('invalid terminal live output data');
311
+ dataBytes += record.data.byteLength;
312
+ payloadBytes += 20 + record.data.byteLength;
313
+ }
314
+ if (dataBytes > MAX_OUTPUT_BATCH_BYTES)
315
+ throw new Error('terminal live output batch is too large');
316
+ const payload = new Uint8Array(payloadBytes);
317
+ const view = new DataView(payload.buffer);
318
+ view.setBigUint64(0, value.geometryGeneration, false);
319
+ view.setUint32(8, value.cols, false);
320
+ view.setUint32(12, value.rows, false);
321
+ view.setUint16(16, value.records.length, false);
322
+ let offset = 18;
323
+ for (const record of value.records) {
324
+ view.setBigUint64(offset, record.sequence, false);
325
+ view.setBigUint64(offset + 8, record.timestampMs, false);
326
+ view.setUint32(offset + 16, record.data.byteLength, false);
327
+ payload.set(record.data, offset + 20);
328
+ offset += 20 + record.data.byteLength;
329
+ }
330
+ return frame(TerminalLiveFrameType.OutputBatch, payload);
331
+ };
332
+ export const decodeOutputBatch = (value) => {
333
+ if (value.type !== TerminalLiveFrameType.OutputBatch)
334
+ throw new Error('unexpected terminal live frame type');
335
+ if (value.payload.byteLength < 18)
336
+ throw new Error('invalid terminal live output payload');
337
+ const view = new DataView(value.payload.buffer, value.payload.byteOffset);
338
+ const geometryGeneration = view.getBigUint64(0, false);
339
+ const cols = view.getUint32(8, false);
340
+ const rows = view.getUint32(12, false);
341
+ assertPositiveUint64(geometryGeneration, 'geometryGeneration');
342
+ assertPositiveUint32(cols, 'cols');
343
+ assertPositiveUint32(rows, 'rows');
344
+ const count = view.getUint16(16, false);
345
+ if (count === 0 || count > MAX_OUTPUT_BATCH_CHUNKS)
346
+ throw new Error('invalid terminal live output record count');
347
+ const records = [];
348
+ let offset = 18;
349
+ let dataBytes = 0;
350
+ for (let index = 0; index < count; index += 1) {
351
+ if (value.payload.byteLength - offset < 20)
352
+ throw new Error('invalid terminal live output payload');
353
+ const size = view.getUint32(offset + 16, false);
354
+ if (size === 0 || size > value.payload.byteLength - offset - 20)
355
+ throw new Error('invalid terminal live output payload');
356
+ dataBytes += size;
357
+ if (dataBytes > MAX_OUTPUT_BATCH_BYTES)
358
+ throw new Error('terminal live output batch is too large');
359
+ const sequence = view.getBigUint64(offset, false);
360
+ assertPositiveUint64(sequence, 'sequence');
361
+ records.push({
362
+ sequence,
363
+ timestampMs: view.getBigUint64(offset + 8, false),
364
+ data: value.payload.slice(offset + 20, offset + 20 + size),
365
+ });
366
+ offset += 20 + size;
367
+ }
368
+ if (offset !== value.payload.byteLength)
369
+ throw new Error('invalid terminal live output payload');
370
+ return { geometryGeneration, cols, rows, records };
371
+ };
372
+ export const decodeProtocolError = (value) => {
373
+ if (value.type !== TerminalLiveFrameType.Error)
374
+ throw new Error('unexpected terminal live frame type');
375
+ if (value.payload.byteLength < 4)
376
+ throw new Error('invalid terminal live error payload');
377
+ const view = new DataView(value.payload.buffer, value.payload.byteOffset);
378
+ const code = view.getUint16(0, false);
379
+ const size = view.getUint16(2, false);
380
+ if (code === 0 || size === 0 || size > MAX_IDENTIFIER_BYTES || size !== value.payload.byteLength - 4) {
381
+ throw new Error('invalid terminal live error payload');
382
+ }
383
+ return { code, message: decodeUtf8(value.payload.subarray(4)) };
384
+ };
385
+ export const decodeUtf8 = (value) => decoder.decode(value);
386
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/live/codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { TerminalAtomicAttachResult, TerminalAtomicTransport, TerminalDataChunk, TerminalEventSource, TerminalID, TerminalSessionInfo, TerminalHistoryPage } from '../types.js';
2
+ import { type ConnectTerminalLiveOptions, type TerminalByteStream } from './client.js';
3
+ import { StreamKind } from './codec.js';
4
+ export type TerminalLiveControlPlane = Readonly<{
5
+ history(sessionId: TerminalID, startSeq: number, endSeq: number): Promise<TerminalDataChunk[]>;
6
+ historyPage(sessionId: TerminalID, startSequence: number, endSequence: number, historyGeneration: number): Promise<TerminalHistoryPage>;
7
+ clear(sessionId: TerminalID): Promise<void>;
8
+ listSessions?(): Promise<TerminalSessionInfo[]>;
9
+ createSession?(name?: string, workingDir?: string, cols?: number, rows?: number): Promise<TerminalSessionInfo>;
10
+ deleteSession?(sessionId: TerminalID): Promise<void>;
11
+ renameSession?(sessionId: TerminalID, newName: string): Promise<void>;
12
+ }>;
13
+ export type TerminalLiveAttachResult = TerminalAtomicAttachResult & Readonly<{
14
+ runtimeAttachGeneration: number;
15
+ }>;
16
+ export type TerminalLiveTransport = Omit<TerminalAtomicTransport, 'attachWithHistoryBoundary'> & Readonly<{
17
+ attachWithHistoryBoundary(sessionId: TerminalID, cols: number, rows: number): Promise<TerminalLiveAttachResult>;
18
+ forgetSession(sessionId: string): void;
19
+ syncConnectionEpoch(key: object | null): void;
20
+ dispose(): void;
21
+ }>;
22
+ export type CreateTerminalLiveTransportOptions = Readonly<{
23
+ connectionId: string;
24
+ openStream: ConnectTerminalLiveOptions['openStream'];
25
+ control: TerminalLiveControlPlane;
26
+ controlEvents?: TerminalEventSource;
27
+ onError?: (sessionId: string, error: Error) => void;
28
+ }>;
29
+ export type TerminalLiveTransportBundle = Readonly<{
30
+ transport: TerminalLiveTransport;
31
+ eventSource: TerminalEventSource;
32
+ }>;
33
+ export declare const createTerminalLiveTransport: (options: CreateTerminalLiveTransportOptions) => TerminalLiveTransportBundle;
34
+ export type OpenTerminalLiveStream = (kind: typeof StreamKind, options?: Readonly<{
35
+ signal?: AbortSignal;
36
+ }>) => Promise<TerminalByteStream>;
37
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/live/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,uBAAuB,EACvB,iBAAiB,EAEjB,mBAAmB,EACnB,UAAU,EAEV,mBAAmB,EACnB,mBAAmB,EAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EAExB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC/F,WAAW,CACT,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChC,KAAK,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,YAAY,CAAC,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAChD,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/G,aAAa,CAAC,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,aAAa,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvE,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,0BAA0B,GAAG,QAAQ,CAAC;IAC3E,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,uBAAuB,EAAE,2BAA2B,CAAC,GAAG,QAAQ,CAAC;IACxG,yBAAyB,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAChH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9C,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,kCAAkC,GAAG,QAAQ,CAAC;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,0BAA0B,CAAC,YAAY,CAAC,CAAC;IACrD,OAAO,EAAE,wBAAwB,CAAC;IAClC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrD,CAAC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IACjD,SAAS,EAAE,qBAAqB,CAAC;IACjC,WAAW,EAAE,mBAAmB,CAAC;CAClC,CAAC,CAAC;AASH,eAAO,MAAM,2BAA2B,GAAI,SAAS,kCAAkC,KAAG,2BA6LzF,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CACnC,IAAI,EAAE,OAAO,UAAU,EACvB,OAAO,CAAC,EAAE,QAAQ,CAAC;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC,KACzC,OAAO,CAAC,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,194 @@
1
+ import { connectTerminalLive, } from './client.js';
2
+ const textEncoder = new TextEncoder();
3
+ export const createTerminalLiveTransport = (options) => {
4
+ const listeners = new Map();
5
+ const deletionListeners = new Map();
6
+ const geometryListeners = new Map();
7
+ const entries = new Map();
8
+ const attachEpochs = new Map();
9
+ let connectionEpochKey;
10
+ let nextGeneration = 0;
11
+ let disposed = false;
12
+ const emit = (sessionId, event) => {
13
+ for (const listener of listeners.get(sessionId) ?? [])
14
+ listener(event);
15
+ };
16
+ const emitDeleted = (sessionId) => {
17
+ for (const listener of deletionListeners.get(sessionId) ?? [])
18
+ listener();
19
+ };
20
+ const emitGeometry = (sessionId, geometry) => {
21
+ const event = { sessionId, ...geometry };
22
+ for (const listener of geometryListeners.get(sessionId) ?? [])
23
+ listener(event);
24
+ };
25
+ const closeEntry = (sessionId) => {
26
+ const entry = entries.get(sessionId);
27
+ if (!entry)
28
+ return;
29
+ entries.delete(sessionId);
30
+ void entry.connection.close();
31
+ };
32
+ const attachWithHistoryBoundary = async (sessionId, cols, rows) => {
33
+ if (disposed)
34
+ throw new Error('terminal live transport is disposed');
35
+ const epoch = (attachEpochs.get(sessionId) ?? 0) + 1;
36
+ attachEpochs.set(sessionId, epoch);
37
+ closeEntry(sessionId);
38
+ nextGeneration += 1;
39
+ const generation = nextGeneration;
40
+ const connection = await connectTerminalLive({
41
+ openStream: options.openStream,
42
+ attach: {
43
+ sessionId,
44
+ connectionId: options.connectionId,
45
+ attachGeneration: generation,
46
+ cols,
47
+ rows,
48
+ },
49
+ onOutputBatch: records => {
50
+ for (const record of records) {
51
+ const sequence = Number(record.sequence);
52
+ const timestampMs = Number(record.timestampMs);
53
+ if (!Number.isSafeInteger(sequence) || !Number.isSafeInteger(timestampMs)) {
54
+ const error = new Error('terminal live output metadata exceeds JavaScript safe integer range');
55
+ options.onError?.(sessionId, error);
56
+ emit(sessionId, { sessionId, type: 'error', data: new Uint8Array(), error: error.message });
57
+ return;
58
+ }
59
+ emit(sessionId, {
60
+ sessionId,
61
+ type: 'data',
62
+ data: record.data,
63
+ sequence,
64
+ timestampMs,
65
+ liveBatchSize: records.length,
66
+ });
67
+ }
68
+ },
69
+ onGeometry: geometry => emitGeometry(sessionId, geometry),
70
+ onClosed: reason => {
71
+ const current = entries.get(sessionId);
72
+ if (!current || current.generation !== generation)
73
+ return;
74
+ entries.delete(sessionId);
75
+ if (reason === 'session_closed') {
76
+ emitDeleted(sessionId);
77
+ return;
78
+ }
79
+ emit(sessionId, {
80
+ sessionId,
81
+ type: 'error',
82
+ data: new Uint8Array(),
83
+ error: 'terminal live stream closed',
84
+ });
85
+ },
86
+ onError: error => {
87
+ options.onError?.(sessionId, error);
88
+ const current = entries.get(sessionId);
89
+ if (current?.generation === generation)
90
+ entries.delete(sessionId);
91
+ emit(sessionId, { sessionId, type: 'error', data: new Uint8Array(), error: error.message });
92
+ },
93
+ });
94
+ if (disposed || attachEpochs.get(sessionId) !== epoch) {
95
+ await connection.close();
96
+ const error = new Error('terminal live attach was superseded');
97
+ error.name = 'AbortError';
98
+ throw error;
99
+ }
100
+ entries.set(sessionId, { generation, connection });
101
+ return {
102
+ ...connection.attached,
103
+ runtimeAttachGeneration: generation,
104
+ };
105
+ };
106
+ const transport = {
107
+ attach: async (sessionId, cols, rows) => {
108
+ await attachWithHistoryBoundary(sessionId, cols, rows);
109
+ },
110
+ attachWithHistoryBoundary,
111
+ resize: async (sessionId, cols, rows) => {
112
+ const entry = entries.get(sessionId);
113
+ if (!entry)
114
+ throw new Error('terminal live session is not attached');
115
+ await entry.connection.resize(cols, rows);
116
+ },
117
+ sendInput: async (sessionId, input) => {
118
+ const entry = entries.get(sessionId);
119
+ if (!entry)
120
+ throw new Error('terminal live session is not attached');
121
+ await entry.connection.sendInput(textEncoder.encode(String(input ?? '')));
122
+ },
123
+ history: options.control.history,
124
+ historyPage: options.control.historyPage,
125
+ clear: options.control.clear,
126
+ listSessions: options.control.listSessions,
127
+ createSession: options.control.createSession,
128
+ deleteSession: options.control.deleteSession ? async (sessionId) => {
129
+ await options.control.deleteSession(sessionId);
130
+ closeEntry(sessionId);
131
+ emitDeleted(sessionId);
132
+ } : undefined,
133
+ renameSession: options.control.renameSession,
134
+ forgetSession: closeEntry,
135
+ syncConnectionEpoch: key => {
136
+ if (connectionEpochKey === undefined) {
137
+ connectionEpochKey = key;
138
+ return;
139
+ }
140
+ if (connectionEpochKey === key)
141
+ return;
142
+ connectionEpochKey = key;
143
+ for (const sessionId of Array.from(entries.keys()))
144
+ closeEntry(sessionId);
145
+ },
146
+ dispose: () => {
147
+ if (disposed)
148
+ return;
149
+ disposed = true;
150
+ for (const sessionId of Array.from(entries.keys()))
151
+ closeEntry(sessionId);
152
+ listeners.clear();
153
+ deletionListeners.clear();
154
+ geometryListeners.clear();
155
+ },
156
+ };
157
+ const eventSource = {
158
+ onTerminalData: (sessionId, handler) => {
159
+ const set = listeners.get(sessionId) ?? new Set();
160
+ set.add(handler);
161
+ listeners.set(sessionId, set);
162
+ return () => {
163
+ set.delete(handler);
164
+ if (set.size === 0)
165
+ listeners.delete(sessionId);
166
+ };
167
+ },
168
+ onTerminalNameUpdate: options.controlEvents?.onTerminalNameUpdate
169
+ ? (sessionId, handler) => (options.controlEvents.onTerminalNameUpdate(sessionId, handler))
170
+ : undefined,
171
+ onTerminalGeometry: (sessionId, handler) => {
172
+ const set = geometryListeners.get(sessionId) ?? new Set();
173
+ set.add(handler);
174
+ geometryListeners.set(sessionId, set);
175
+ return () => {
176
+ set.delete(handler);
177
+ if (set.size === 0)
178
+ geometryListeners.delete(sessionId);
179
+ };
180
+ },
181
+ onSessionDeleted: (sessionId, handler) => {
182
+ const set = deletionListeners.get(sessionId) ?? new Set();
183
+ set.add(handler);
184
+ deletionListeners.set(sessionId, set);
185
+ return () => {
186
+ set.delete(handler);
187
+ if (set.size === 0)
188
+ deletionListeners.delete(sessionId);
189
+ };
190
+ },
191
+ };
192
+ return { transport, eventSource };
193
+ };
194
+ //# sourceMappingURL=transport.js.map