@thenewlabs/entangle-serve 2.9.0 → 2.11.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.
- package/dist/agent.d.ts +2 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +12 -1
- package/dist/agent.js.map +1 -1
- package/dist/capability.d.ts +1 -0
- package/dist/capability.d.ts.map +1 -1
- package/dist/capability.js +1 -1
- package/dist/capability.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +21 -0
- package/dist/daemon.js.map +1 -1
- package/dist/host-session.d.ts +44 -3
- package/dist/host-session.d.ts.map +1 -1
- package/dist/host-session.js +11 -1
- package/dist/host-session.js.map +1 -1
- package/dist/host-terminal.d.ts.map +1 -1
- package/dist/host-terminal.js +360 -14
- package/dist/host-terminal.js.map +1 -1
- package/dist/ipc.d.ts +24 -0
- package/dist/ipc.d.ts.map +1 -1
- package/dist/ipc.js.map +1 -1
- package/dist/multi-session.d.ts +2 -1
- package/dist/multi-session.d.ts.map +1 -1
- package/dist/multi-session.js +10 -3
- package/dist/multi-session.js.map +1 -1
- package/dist/remote-host-session.d.ts +11 -1
- package/dist/remote-host-session.d.ts.map +1 -1
- package/dist/remote-host-session.js +24 -2
- package/dist/remote-host-session.js.map +1 -1
- package/dist/session.d.ts +3 -2
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +3 -1
- package/dist/session.js.map +1 -1
- package/dist/shared-session.d.ts +50 -13
- package/dist/shared-session.d.ts.map +1 -1
- package/dist/shared-session.js +110 -25
- package/dist/shared-session.js.map +1 -1
- package/dist/shared-workspace.d.ts +59 -7
- package/dist/shared-workspace.d.ts.map +1 -1
- package/dist/shared-workspace.js +97 -15
- package/dist/shared-workspace.js.map +1 -1
- package/dist/stream-manager.d.ts +15 -2
- package/dist/stream-manager.d.ts.map +1 -1
- package/dist/stream-manager.js +96 -1
- package/dist/stream-manager.js.map +1 -1
- package/package.json +6 -4
package/dist/shared-session.js
CHANGED
|
@@ -1,28 +1,51 @@
|
|
|
1
1
|
import * as pty from '@homebridge/node-pty-prebuilt-multiarch';
|
|
2
2
|
import { randomBytes } from 'crypto';
|
|
3
|
+
// @xterm/headless + @xterm/addon-serialize are CommonJS. Under Node's ESM loader
|
|
4
|
+
// (how the published serve/dist runs) only their default export (module.exports)
|
|
5
|
+
// is reliably visible — a named `import { Terminal }` throws at runtime — so we
|
|
6
|
+
// import the default for the runtime VALUES and a type-only named import (erased
|
|
7
|
+
// at compile time) for the TYPES. esbuild's CJS bundle handles this the same.
|
|
8
|
+
import xtermHeadless from '@xterm/headless';
|
|
9
|
+
import xtermAddonSerialize from '@xterm/addon-serialize';
|
|
3
10
|
import { getConfig, buildChildEnv } from '@thenewlabs/entangle-utils';
|
|
11
|
+
const XtermTerminal = xtermHeadless.Terminal;
|
|
12
|
+
const XtermSerializeAddon = xtermAddonSerialize.SerializeAddon;
|
|
13
|
+
/** Scrollback the per-window emulator retains (lines of history for serialize). */
|
|
14
|
+
const EMULATOR_SCROLLBACK = 5000;
|
|
15
|
+
/** Default scrollback lines a fresh attach/repaint replays (see shared-workspace). */
|
|
16
|
+
const DEFAULT_SCROLLBACK_LINES = 1000;
|
|
4
17
|
/**
|
|
5
18
|
* A single shared PTY — the per-window unit of a {@link SharedWorkspace}.
|
|
6
19
|
*
|
|
7
20
|
* Unlike the per-stream shells the StreamManager spawns, there is exactly ONE
|
|
8
21
|
* shell here: its output fans out to the host renderer and all viewers, and its
|
|
9
22
|
* input is merged from the host and all viewers (collaborative). Late joiners
|
|
10
|
-
*
|
|
23
|
+
* are synced with a SERIALIZED current frame produced by an authoritative
|
|
24
|
+
* headless xterm emulator that consumes the PTY byte stream in lockstep.
|
|
25
|
+
*
|
|
26
|
+
* The emulator (one per window) is what makes window-switch repaints and attach
|
|
27
|
+
* syncs correct: instead of replaying a truncated ring of raw bytes — which
|
|
28
|
+
* cannot reconstruct a full-screen (alt-screen) app's current frame — we ask
|
|
29
|
+
* {@link SerializeAddon} for the terminal's current screen (plus optional
|
|
30
|
+
* scrollback). Replaying that reproduces exactly what the app is showing now,
|
|
31
|
+
* alt-screen and all (serialize emits the `\x1b[?1049h` + alt content when the
|
|
32
|
+
* app is on the alt buffer, or just the restored primary once it has quit).
|
|
11
33
|
*
|
|
12
34
|
* The host terminal size is authoritative — the shell is sized to the host's
|
|
13
35
|
* (inner) region and viewers render that stream in their own terminals.
|
|
14
36
|
*
|
|
15
37
|
* In the multi-window model a SharedWorkspace owns N of these (one per window)
|
|
16
|
-
* and taps the ACTIVE one via {@link onHostData} + {@link
|
|
38
|
+
* and taps the ACTIVE one via {@link onHostData} + {@link snapshot}; `id` and
|
|
17
39
|
* `title` identify the window in the WINDOW_CTL window-state broadcast.
|
|
18
40
|
*/
|
|
19
41
|
export class SharedSession {
|
|
20
42
|
output;
|
|
21
43
|
ptyProcess;
|
|
22
44
|
viewers = new Map();
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
45
|
+
/** Authoritative emulator fed the PTY stream; source of serialized frames. */
|
|
46
|
+
term;
|
|
47
|
+
serializeAddon;
|
|
48
|
+
termDisposed = false;
|
|
26
49
|
exited = false;
|
|
27
50
|
hostDataCb;
|
|
28
51
|
exitCb;
|
|
@@ -38,9 +61,18 @@ export class SharedSession {
|
|
|
38
61
|
const config = getConfig();
|
|
39
62
|
this.cols = Math.max(1, opts.cols);
|
|
40
63
|
this.rows = Math.max(1, opts.rows);
|
|
41
|
-
this.maxReplayBytes = opts.maxReplayBytes ?? 256 * 1024;
|
|
42
64
|
this.id = opts.id ?? randomBytes(6).toString('base64url');
|
|
43
65
|
this.title = opts.title ?? 'shell';
|
|
66
|
+
// Authoritative headless emulator: fed every PTY byte so a snapshot can
|
|
67
|
+
// reconstruct the current frame. SerializeAddon requires allowProposedApi.
|
|
68
|
+
this.term = new XtermTerminal({
|
|
69
|
+
cols: this.cols,
|
|
70
|
+
rows: this.rows,
|
|
71
|
+
scrollback: EMULATOR_SCROLLBACK,
|
|
72
|
+
allowProposedApi: true,
|
|
73
|
+
});
|
|
74
|
+
this.serializeAddon = new XtermSerializeAddon();
|
|
75
|
+
this.term.loadAddon(this.serializeAddon);
|
|
44
76
|
const env = buildChildEnv(config.agentEnvPassthrough, {});
|
|
45
77
|
env.TERM = 'xterm-256color';
|
|
46
78
|
this.ptyProcess = pty.spawn(config.agentShell, [], {
|
|
@@ -52,7 +84,15 @@ export class SharedSession {
|
|
|
52
84
|
});
|
|
53
85
|
this.ptyProcess.onData((data) => {
|
|
54
86
|
const buf = Buffer.from(data, 'utf8');
|
|
55
|
-
this.
|
|
87
|
+
// Feed the emulator so a later snapshot reflects this output. xterm parses
|
|
88
|
+
// writes asynchronously (on a microtask), so a snapshot taken in the SAME
|
|
89
|
+
// tick as a write can miss the last chunk; that's fine here because
|
|
90
|
+
// snapshots only ever happen on a window switch or an attach — a different
|
|
91
|
+
// tick than the last live write — by which time the parse has drained. The
|
|
92
|
+
// live fan-out below is unchanged and byte-exact (streaming is not routed
|
|
93
|
+
// through the emulator).
|
|
94
|
+
if (!this.termDisposed)
|
|
95
|
+
this.term.write(buf);
|
|
56
96
|
this.hostDataCb?.(buf);
|
|
57
97
|
const bytes = new Uint8Array(buf);
|
|
58
98
|
for (const v of this.viewers.values()) {
|
|
@@ -73,6 +113,7 @@ export class SharedSession {
|
|
|
73
113
|
catch { }
|
|
74
114
|
}
|
|
75
115
|
this.viewers.clear();
|
|
116
|
+
this.disposeTerm();
|
|
76
117
|
this.exitCb?.(code, signal);
|
|
77
118
|
});
|
|
78
119
|
this.output.info(`Shared session started: shell=${config.agentShell}, cols=${this.cols}, rows=${this.rows}`);
|
|
@@ -90,7 +131,7 @@ export class SharedSession {
|
|
|
90
131
|
return;
|
|
91
132
|
this.ptyProcess.write(typeof data === 'string' ? data : Buffer.from(data).toString('utf8'));
|
|
92
133
|
}
|
|
93
|
-
/** Resize the shared shell (host is authoritative). */
|
|
134
|
+
/** Resize the shared shell (host is authoritative) and its emulator. */
|
|
94
135
|
resize(cols, rows) {
|
|
95
136
|
if (this.exited || cols < 1 || rows < 1)
|
|
96
137
|
return;
|
|
@@ -100,16 +141,23 @@ export class SharedSession {
|
|
|
100
141
|
this.ptyProcess.resize(cols, rows);
|
|
101
142
|
}
|
|
102
143
|
catch { }
|
|
144
|
+
if (!this.termDisposed) {
|
|
145
|
+
try {
|
|
146
|
+
this.term.resize(cols, rows);
|
|
147
|
+
}
|
|
148
|
+
catch { }
|
|
149
|
+
}
|
|
103
150
|
}
|
|
104
151
|
/**
|
|
105
|
-
* Attach a viewer. Returns the current
|
|
106
|
-
*
|
|
152
|
+
* Attach a viewer. Returns the current serialized frame (with a page of
|
|
153
|
+
* scrollback) so the caller can send it as the viewer's initial output and
|
|
154
|
+
* sync its screen — including recent history — to the window's current state.
|
|
107
155
|
*/
|
|
108
156
|
attach(viewer) {
|
|
109
157
|
this.viewers.set(viewer.sid, viewer);
|
|
110
158
|
this.output.info(`Viewer attached: ${viewer.sid} (${this.viewers.size} total)`);
|
|
111
159
|
this.viewersChangedCb?.(this.viewers.size);
|
|
112
|
-
return { replay: this.
|
|
160
|
+
return { replay: this.snapshot({ scrollback: DEFAULT_SCROLLBACK_LINES }) };
|
|
113
161
|
}
|
|
114
162
|
/** Detach a viewer (disconnect / stream close). */
|
|
115
163
|
detach(sid) {
|
|
@@ -119,28 +167,65 @@ export class SharedSession {
|
|
|
119
167
|
}
|
|
120
168
|
}
|
|
121
169
|
viewerCount() { return this.viewers.size; }
|
|
122
|
-
/**
|
|
123
|
-
|
|
170
|
+
/**
|
|
171
|
+
* A serialized snapshot of the window's CURRENT frame (what the emulator is
|
|
172
|
+
* showing right now), optionally prefixed with `opts.scrollback` lines of
|
|
173
|
+
* history. Replaying these bytes into a fresh/cleared terminal reproduces the
|
|
174
|
+
* window's screen — full-screen/alt-buffer apps included. Callers are sync, so
|
|
175
|
+
* this is sync; see the {@link ptyProcess} onData comment on why the emulator
|
|
176
|
+
* is guaranteed to be flushed by the time a switch/attach takes a snapshot.
|
|
177
|
+
*/
|
|
178
|
+
snapshot(opts) {
|
|
179
|
+
if (this.termDisposed)
|
|
180
|
+
return new Uint8Array(0);
|
|
181
|
+
const text = this.serializeAddon.serialize({ scrollback: opts?.scrollback ?? 0 });
|
|
182
|
+
return new Uint8Array(Buffer.from(text, 'utf8'));
|
|
183
|
+
}
|
|
184
|
+
/** Back-compat alias for {@link snapshot} (host's initial paint / repaints). */
|
|
185
|
+
getReplay(opts) { return this.snapshot(opts); }
|
|
186
|
+
/**
|
|
187
|
+
* All buffer lines of the emulator — scrollback history plus the current
|
|
188
|
+
* screen, oldest first — each trimmed of trailing whitespace. This is the
|
|
189
|
+
* source for the host's copy-mode/scrollback pager: unlike {@link snapshot}
|
|
190
|
+
* (which serializes SGR-styled bytes for a terminal to REPLAY), this returns
|
|
191
|
+
* PLAIN TEXT for a pager to render. Colour/SGR reconstruction is an explicit
|
|
192
|
+
* non-goal here; the pager shows history text only.
|
|
193
|
+
*
|
|
194
|
+
* `buf.length` includes scrollback. If a full-screen (alt-screen) app is
|
|
195
|
+
* active the active buffer is the alt buffer, which has no scrollback — so the
|
|
196
|
+
* lines are just its current screen; that edge case is acceptable and not
|
|
197
|
+
* special-cased.
|
|
198
|
+
*/
|
|
199
|
+
scrollbackLines() {
|
|
200
|
+
if (this.termDisposed)
|
|
201
|
+
return [];
|
|
202
|
+
const buf = this.term.buffer.active;
|
|
203
|
+
const lines = [];
|
|
204
|
+
for (let i = 0; i < buf.length; i++)
|
|
205
|
+
lines.push(buf.getLine(i)?.translateToString(true) ?? '');
|
|
206
|
+
return lines;
|
|
207
|
+
}
|
|
124
208
|
kill() {
|
|
125
|
-
if (this.exited)
|
|
209
|
+
if (this.exited) {
|
|
210
|
+
this.disposeTerm();
|
|
126
211
|
return;
|
|
212
|
+
}
|
|
127
213
|
try {
|
|
128
214
|
this.ptyProcess.kill();
|
|
129
215
|
}
|
|
130
216
|
catch { }
|
|
217
|
+
// The emulator is released on the onExit path; if the PTY never reports exit
|
|
218
|
+
// the double-dispose guard makes an eventual dispose idempotent.
|
|
131
219
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
this.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
this.replayBytes -= dropped.length;
|
|
220
|
+
/** Release the emulator's resources exactly once. */
|
|
221
|
+
disposeTerm() {
|
|
222
|
+
if (this.termDisposed)
|
|
223
|
+
return;
|
|
224
|
+
this.termDisposed = true;
|
|
225
|
+
try {
|
|
226
|
+
this.term.dispose();
|
|
140
227
|
}
|
|
141
|
-
|
|
142
|
-
replaySnapshot() {
|
|
143
|
-
return new Uint8Array(Buffer.concat(this.replay, this.replayBytes));
|
|
228
|
+
catch { }
|
|
144
229
|
}
|
|
145
230
|
}
|
|
146
231
|
//# sourceMappingURL=shared-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-session.js","sourceRoot":"","sources":["../src/shared-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,yCAAyC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAiB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"shared-session.js","sourceRoot":"","sources":["../src/shared-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import type { WindowStateBody } from '@thenewlabs/entangle-protocol';
|
|
|
7
7
|
* window of its own choosing — its "active" window. The workspace multiplexes
|
|
8
8
|
* that window's output onto the stream via {@link onData}, repaints it on a
|
|
9
9
|
* per-viewport window switch (also via {@link onData}: a clear + the new
|
|
10
|
-
* window's
|
|
10
|
+
* window's serialized frame), and pushes that viewport's own {@link WindowStateBody} to
|
|
11
11
|
* it via {@link onWindowState} on every change. Different viewports can sit on
|
|
12
12
|
* different windows independently (or share one by being on the same window).
|
|
13
13
|
* `onExit` fires only when the workspace as a whole ends (its last window
|
|
@@ -20,6 +20,16 @@ export interface Viewport {
|
|
|
20
20
|
onExit: (code: number | null, signal: string | null) => void;
|
|
21
21
|
onWindowState: (state: WindowStateBody) => void;
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Repaint bytes for an IN-PLACE redraw (e.g. a viewer resize): leave the alt
|
|
25
|
+
* buffer, home, clear the screen — but NOT the scrollback (no `\x1b[3J`), so the
|
|
26
|
+
* consumer keeps its accumulated history — then the serialized frame.
|
|
27
|
+
*
|
|
28
|
+
* Exported as the canonical in-place-repaint sequence; host-terminal replicates
|
|
29
|
+
* these same bytes inline for its alt-screen-exit repaint (it deliberately does
|
|
30
|
+
* not import this module, staying decoupled from the concrete workspace).
|
|
31
|
+
*/
|
|
32
|
+
export declare function screenPayload(frame: Uint8Array): Buffer;
|
|
23
33
|
/**
|
|
24
34
|
* A shared, tmux-style workspace of windows with a PER-CONSUMER active window.
|
|
25
35
|
*
|
|
@@ -53,7 +63,6 @@ export declare class SharedWorkspace {
|
|
|
53
63
|
private viewportActive;
|
|
54
64
|
private exited;
|
|
55
65
|
private readonly cwd?;
|
|
56
|
-
private readonly maxReplayBytes?;
|
|
57
66
|
private readonly maxWindows;
|
|
58
67
|
private hostDataCb?;
|
|
59
68
|
private exitCb?;
|
|
@@ -65,7 +74,6 @@ export declare class SharedWorkspace {
|
|
|
65
74
|
cols: number;
|
|
66
75
|
rows: number;
|
|
67
76
|
cwd?: string;
|
|
68
|
-
maxReplayBytes?: number;
|
|
69
77
|
maxWindows?: number;
|
|
70
78
|
});
|
|
71
79
|
/** Register the host's local rendering callback for the host's active window. */
|
|
@@ -86,8 +94,20 @@ export declare class SharedWorkspace {
|
|
|
86
94
|
write(data: Uint8Array | string): void;
|
|
87
95
|
/** Resize the workspace (host is authoritative) — every window is sized to it. */
|
|
88
96
|
resize(cols: number, rows: number): void;
|
|
89
|
-
/**
|
|
90
|
-
|
|
97
|
+
/**
|
|
98
|
+
* Serialized current frame of the HOST's active window (host's initial paint).
|
|
99
|
+
* Defaults to no scrollback so the host's real terminal isn't flooded with
|
|
100
|
+
* history on go-live; the host-terminal passes `{ scrollback: 0 }` explicitly.
|
|
101
|
+
*/
|
|
102
|
+
getReplay(opts?: {
|
|
103
|
+
scrollback?: number;
|
|
104
|
+
}): Uint8Array;
|
|
105
|
+
/**
|
|
106
|
+
* All buffer lines (scrollback history + current screen, oldest first) of the
|
|
107
|
+
* HOST's active window — the source for the host's own scrollback pager. Plain
|
|
108
|
+
* text only (see {@link SharedSession.scrollbackLines}).
|
|
109
|
+
*/
|
|
110
|
+
scrollbackLines(): string[];
|
|
91
111
|
/** Number of attached client viewports. */
|
|
92
112
|
viewerCount(): number;
|
|
93
113
|
/** Kill every window (which drives the workspace to exit). */
|
|
@@ -107,12 +127,25 @@ export declare class SharedWorkspace {
|
|
|
107
127
|
writeFromViewport(sid: string, data: Uint8Array | string): void;
|
|
108
128
|
/**
|
|
109
129
|
* Repaint a SINGLE viewport with ITS OWN active window's screen (the same
|
|
110
|
-
* clear +
|
|
130
|
+
* switch payload — clear + serialized frame — a per-viewport window switch
|
|
131
|
+
* sends, scoped to one sid). The
|
|
111
132
|
* host stays authoritative over the shell size, so when a remote viewer
|
|
112
133
|
* resizes we can't resize the PTY under everyone else; instead we re-send that
|
|
113
134
|
* viewer's active window's screen so its locally-corrupted display is redrawn.
|
|
114
135
|
*/
|
|
115
136
|
repaintViewport(sid: string): void;
|
|
137
|
+
/**
|
|
138
|
+
* Redraw a SINGLE viewport's VISIBLE screen in place, PRESERVING its scrollback
|
|
139
|
+
* (a {@link screenPayload}: clear the screen but NOT the consumer's history — no
|
|
140
|
+
* `\x1b[3J`). Unlike {@link repaintViewport}'s switch payload, this is for a
|
|
141
|
+
* VIEWER RESIZE: the web client keeps its own accumulated xterm scrollback, so
|
|
142
|
+
* we must only redraw the current screen at the new size and must NOT wipe the
|
|
143
|
+
* history the client is holding. The host stays authoritative over the shell
|
|
144
|
+
* size, so a remote resize can't reshape the PTY under everyone else; instead we
|
|
145
|
+
* re-send just this viewer's active-window screen so its locally-reflowed
|
|
146
|
+
* display is redrawn clean.
|
|
147
|
+
*/
|
|
148
|
+
repaintViewportScreen(sid: string): void;
|
|
116
149
|
/**
|
|
117
150
|
* Switch a viewport's active window to `index` and repaint just it (no-op if
|
|
118
151
|
* out of range or already there). Only the given viewport moves; the host and
|
|
@@ -136,6 +169,21 @@ export declare class SharedWorkspace {
|
|
|
136
169
|
* consumer's active index. Closing the last window ends the whole workspace.
|
|
137
170
|
*/
|
|
138
171
|
closeWindowFromViewport(sid: string, index: number): void;
|
|
172
|
+
/**
|
|
173
|
+
* A FRESH serialized frame of THAT viewport's active window (mirrors
|
|
174
|
+
* {@link windowStateForViewport} but for the frame). Used by the daemon to
|
|
175
|
+
* answer a client's on-demand `refresh` with the window's live screen, rather
|
|
176
|
+
* than the single post-attach replay cached client-side.
|
|
177
|
+
*/
|
|
178
|
+
snapshotForViewport(sid: string, opts?: {
|
|
179
|
+
scrollback?: number;
|
|
180
|
+
}): Uint8Array;
|
|
181
|
+
/**
|
|
182
|
+
* All buffer lines (scrollback history + current screen, oldest first) of
|
|
183
|
+
* THAT viewport's active window — the source for a client/host scrollback
|
|
184
|
+
* pager. Plain text only (see {@link SharedSession.scrollbackLines}).
|
|
185
|
+
*/
|
|
186
|
+
scrollbackLinesForViewport(sid: string): string[];
|
|
139
187
|
/** Current window state as seen by a viewport (shared list + its own active). */
|
|
140
188
|
windowStateForViewport(sid: string): WindowStateBody;
|
|
141
189
|
/** Create a new window and switch the HOST to it. */
|
|
@@ -165,7 +213,11 @@ export declare class SharedWorkspace {
|
|
|
165
213
|
* `win`. Background windows keep running; a consumer only sees its own active.
|
|
166
214
|
*/
|
|
167
215
|
private routeWindowOutput;
|
|
168
|
-
/**
|
|
216
|
+
/**
|
|
217
|
+
* Repaint the HOST with a switch payload + its active window's frame. No
|
|
218
|
+
* scrollback: the host's real terminal shouldn't be flooded with history on a
|
|
219
|
+
* window switch (its own scrollback is the terminal's, not the window's).
|
|
220
|
+
*/
|
|
169
221
|
private repaintHost;
|
|
170
222
|
/** Push the host its own window-state (host's active index). */
|
|
171
223
|
private sendHostWindowState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-workspace.d.ts","sourceRoot":"","sources":["../src/shared-workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAc,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGjF;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACpC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7D,aAAa,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;CACjD;
|
|
1
|
+
{"version":3,"file":"shared-workspace.d.ts","sourceRoot":"","sources":["../src/shared-workspace.ts"],"names":[],"mappings":"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"}
|
package/dist/shared-workspace.js
CHANGED
|
@@ -1,8 +1,33 @@
|
|
|
1
1
|
import { SharedSession } from './shared-session.js';
|
|
2
|
-
/**
|
|
3
|
-
const
|
|
2
|
+
/** Default scrollback lines a viewport/attach repaint replays with its frame. */
|
|
3
|
+
const DEFAULT_SCROLLBACK_LINES = 1000;
|
|
4
4
|
/** Hard cap on concurrent windows so a client can't spawn unbounded shells. */
|
|
5
5
|
const DEFAULT_MAX_WINDOWS = 16;
|
|
6
|
+
/**
|
|
7
|
+
* Repaint bytes for a WINDOW SWITCH: leave any alt buffer (`\x1b[?1049l`), home,
|
|
8
|
+
* clear the screen AND scrollback (`\x1b[2J\x1b[3J`), then the serialized frame.
|
|
9
|
+
*
|
|
10
|
+
* The `\x1b[3J` (erase scrollback) is retained here ONLY because it is paired
|
|
11
|
+
* atomically with a serialize that REBUILDS the target window's own scrollback:
|
|
12
|
+
* we wipe the consumer's history and immediately repopulate it with the window
|
|
13
|
+
* we're switching to. That's why it no longer loses history the way the old raw
|
|
14
|
+
* `CLEAR` + truncated-ring replay did — the frame carries the history with it.
|
|
15
|
+
*/
|
|
16
|
+
function switchPayload(frame) {
|
|
17
|
+
return Buffer.concat([Buffer.from('\x1b[?1049l\x1b[H\x1b[2J\x1b[3J'), Buffer.from(frame)]);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Repaint bytes for an IN-PLACE redraw (e.g. a viewer resize): leave the alt
|
|
21
|
+
* buffer, home, clear the screen — but NOT the scrollback (no `\x1b[3J`), so the
|
|
22
|
+
* consumer keeps its accumulated history — then the serialized frame.
|
|
23
|
+
*
|
|
24
|
+
* Exported as the canonical in-place-repaint sequence; host-terminal replicates
|
|
25
|
+
* these same bytes inline for its alt-screen-exit repaint (it deliberately does
|
|
26
|
+
* not import this module, staying decoupled from the concrete workspace).
|
|
27
|
+
*/
|
|
28
|
+
export function screenPayload(frame) {
|
|
29
|
+
return Buffer.concat([Buffer.from('\x1b[?1049l\x1b[H\x1b[2J'), Buffer.from(frame)]);
|
|
30
|
+
}
|
|
6
31
|
/**
|
|
7
32
|
* A shared, tmux-style workspace of windows with a PER-CONSUMER active window.
|
|
8
33
|
*
|
|
@@ -36,7 +61,6 @@ export class SharedWorkspace {
|
|
|
36
61
|
viewportActive = new Map();
|
|
37
62
|
exited = false;
|
|
38
63
|
cwd;
|
|
39
|
-
maxReplayBytes;
|
|
40
64
|
maxWindows;
|
|
41
65
|
hostDataCb;
|
|
42
66
|
exitCb;
|
|
@@ -50,8 +74,6 @@ export class SharedWorkspace {
|
|
|
50
74
|
this.rows = Math.max(1, opts.rows);
|
|
51
75
|
if (opts.cwd !== undefined)
|
|
52
76
|
this.cwd = opts.cwd;
|
|
53
|
-
if (opts.maxReplayBytes !== undefined)
|
|
54
|
-
this.maxReplayBytes = opts.maxReplayBytes;
|
|
55
77
|
this.maxWindows = opts.maxWindows ?? DEFAULT_MAX_WINDOWS;
|
|
56
78
|
// Start with a single window so the existing single-shell behavior is
|
|
57
79
|
// preserved when nobody ever creates a second one.
|
|
@@ -90,9 +112,21 @@ export class SharedWorkspace {
|
|
|
90
112
|
for (const w of this.windows)
|
|
91
113
|
w.resize(cols, rows);
|
|
92
114
|
}
|
|
93
|
-
/**
|
|
94
|
-
|
|
95
|
-
|
|
115
|
+
/**
|
|
116
|
+
* Serialized current frame of the HOST's active window (host's initial paint).
|
|
117
|
+
* Defaults to no scrollback so the host's real terminal isn't flooded with
|
|
118
|
+
* history on go-live; the host-terminal passes `{ scrollback: 0 }` explicitly.
|
|
119
|
+
*/
|
|
120
|
+
getReplay(opts) {
|
|
121
|
+
return this.windows[this.hostActiveIndex]?.snapshot({ scrollback: opts?.scrollback ?? 0 }) ?? new Uint8Array(0);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* All buffer lines (scrollback history + current screen, oldest first) of the
|
|
125
|
+
* HOST's active window — the source for the host's own scrollback pager. Plain
|
|
126
|
+
* text only (see {@link SharedSession.scrollbackLines}).
|
|
127
|
+
*/
|
|
128
|
+
scrollbackLines() {
|
|
129
|
+
return this.windows[this.hostActiveIndex]?.scrollbackLines() ?? [];
|
|
96
130
|
}
|
|
97
131
|
/** Number of attached client viewports. */
|
|
98
132
|
viewerCount() { return this.viewports.size; }
|
|
@@ -117,7 +151,9 @@ export class SharedWorkspace {
|
|
|
117
151
|
this.viewportActive.set(v.sid, 0);
|
|
118
152
|
this.output.info(`Viewport attached: ${v.sid} (${this.viewports.size} total)`);
|
|
119
153
|
this.viewersChangedCb?.(this.viewports.size);
|
|
120
|
-
|
|
154
|
+
// No clear prefix: the client's terminal is fresh, so just the serialized
|
|
155
|
+
// frame (with a page of scrollback) syncs its screen and history.
|
|
156
|
+
return { replay: this.windows[0]?.snapshot({ scrollback: DEFAULT_SCROLLBACK_LINES }) ?? new Uint8Array(0) };
|
|
121
157
|
}
|
|
122
158
|
/** Detach a client viewport (disconnect / stream close). */
|
|
123
159
|
detachViewport(sid) {
|
|
@@ -135,7 +171,8 @@ export class SharedWorkspace {
|
|
|
135
171
|
}
|
|
136
172
|
/**
|
|
137
173
|
* Repaint a SINGLE viewport with ITS OWN active window's screen (the same
|
|
138
|
-
* clear +
|
|
174
|
+
* switch payload — clear + serialized frame — a per-viewport window switch
|
|
175
|
+
* sends, scoped to one sid). The
|
|
139
176
|
* host stays authoritative over the shell size, so when a remote viewer
|
|
140
177
|
* resizes we can't resize the PTY under everyone else; instead we re-send that
|
|
141
178
|
* viewer's active window's screen so its locally-corrupted display is redrawn.
|
|
@@ -149,7 +186,33 @@ export class SharedWorkspace {
|
|
|
149
186
|
const active = this.windows[this.viewportActive.get(sid) ?? 0];
|
|
150
187
|
if (!active)
|
|
151
188
|
return;
|
|
152
|
-
const payload =
|
|
189
|
+
const payload = switchPayload(active.snapshot({ scrollback: DEFAULT_SCROLLBACK_LINES }));
|
|
190
|
+
try {
|
|
191
|
+
v.onData(new Uint8Array(payload));
|
|
192
|
+
}
|
|
193
|
+
catch { }
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Redraw a SINGLE viewport's VISIBLE screen in place, PRESERVING its scrollback
|
|
197
|
+
* (a {@link screenPayload}: clear the screen but NOT the consumer's history — no
|
|
198
|
+
* `\x1b[3J`). Unlike {@link repaintViewport}'s switch payload, this is for a
|
|
199
|
+
* VIEWER RESIZE: the web client keeps its own accumulated xterm scrollback, so
|
|
200
|
+
* we must only redraw the current screen at the new size and must NOT wipe the
|
|
201
|
+
* history the client is holding. The host stays authoritative over the shell
|
|
202
|
+
* size, so a remote resize can't reshape the PTY under everyone else; instead we
|
|
203
|
+
* re-send just this viewer's active-window screen so its locally-reflowed
|
|
204
|
+
* display is redrawn clean.
|
|
205
|
+
*/
|
|
206
|
+
repaintViewportScreen(sid) {
|
|
207
|
+
if (this.exited)
|
|
208
|
+
return;
|
|
209
|
+
const v = this.viewports.get(sid);
|
|
210
|
+
if (!v)
|
|
211
|
+
return;
|
|
212
|
+
const active = this.windows[this.viewportActive.get(sid) ?? 0];
|
|
213
|
+
if (!active)
|
|
214
|
+
return;
|
|
215
|
+
const payload = screenPayload(active.snapshot({ scrollback: 0 }));
|
|
153
216
|
try {
|
|
154
217
|
v.onData(new Uint8Array(payload));
|
|
155
218
|
}
|
|
@@ -216,6 +279,23 @@ export class SharedWorkspace {
|
|
|
216
279
|
}
|
|
217
280
|
catch { }
|
|
218
281
|
}
|
|
282
|
+
/**
|
|
283
|
+
* A FRESH serialized frame of THAT viewport's active window (mirrors
|
|
284
|
+
* {@link windowStateForViewport} but for the frame). Used by the daemon to
|
|
285
|
+
* answer a client's on-demand `refresh` with the window's live screen, rather
|
|
286
|
+
* than the single post-attach replay cached client-side.
|
|
287
|
+
*/
|
|
288
|
+
snapshotForViewport(sid, opts) {
|
|
289
|
+
return this.windows[this.viewportActive.get(sid) ?? 0]?.snapshot(opts) ?? new Uint8Array(0);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* All buffer lines (scrollback history + current screen, oldest first) of
|
|
293
|
+
* THAT viewport's active window — the source for a client/host scrollback
|
|
294
|
+
* pager. Plain text only (see {@link SharedSession.scrollbackLines}).
|
|
295
|
+
*/
|
|
296
|
+
scrollbackLinesForViewport(sid) {
|
|
297
|
+
return this.windows[this.viewportActive.get(sid) ?? 0]?.scrollbackLines() ?? [];
|
|
298
|
+
}
|
|
219
299
|
/** Current window state as seen by a viewport (shared list + its own active). */
|
|
220
300
|
windowStateForViewport(sid) {
|
|
221
301
|
const windows = this.windows.map((w) => ({ id: w.id, title: w.title }));
|
|
@@ -291,7 +371,6 @@ export class SharedWorkspace {
|
|
|
291
371
|
cols: this.cols,
|
|
292
372
|
rows: this.rows,
|
|
293
373
|
...(this.cwd !== undefined ? { cwd: this.cwd } : {}),
|
|
294
|
-
...(this.maxReplayBytes !== undefined ? { maxReplayBytes: this.maxReplayBytes } : {}),
|
|
295
374
|
});
|
|
296
375
|
win.onExit((code, signal) => this.handleWindowExit(win, code, signal));
|
|
297
376
|
// Tap EVERY window once, for its whole lifetime; the router delivers each
|
|
@@ -333,13 +412,16 @@ export class SharedWorkspace {
|
|
|
333
412
|
}
|
|
334
413
|
}
|
|
335
414
|
}
|
|
336
|
-
/**
|
|
415
|
+
/**
|
|
416
|
+
* Repaint the HOST with a switch payload + its active window's frame. No
|
|
417
|
+
* scrollback: the host's real terminal shouldn't be flooded with history on a
|
|
418
|
+
* window switch (its own scrollback is the terminal's, not the window's).
|
|
419
|
+
*/
|
|
337
420
|
repaintHost() {
|
|
338
421
|
const active = this.windows[this.hostActiveIndex];
|
|
339
422
|
if (!active)
|
|
340
423
|
return;
|
|
341
|
-
|
|
342
|
-
this.hostDataCb?.(payload);
|
|
424
|
+
this.hostDataCb?.(switchPayload(active.snapshot({ scrollback: 0 })));
|
|
343
425
|
}
|
|
344
426
|
/** Push the host its own window-state (host's active index). */
|
|
345
427
|
sendHostWindowState() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-workspace.js","sourceRoot":"","sources":["../src/shared-workspace.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shared-workspace.js","sourceRoot":"","sources":["../src/shared-workspace.ts"],"names":[],"mappings":"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"}
|