@hex1b/web-terminal 0.1.0 → 0.166.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/README.md +314 -11
- package/dist/backend-selection.d.ts +7 -0
- package/dist/backend-selection.d.ts.map +1 -0
- package/dist/backend-selection.js +23 -0
- package/dist/backend-selection.js.map +1 -0
- package/dist/hyperlinks.d.ts +10 -0
- package/dist/hyperlinks.d.ts.map +1 -0
- package/dist/hyperlinks.js +28 -0
- package/dist/hyperlinks.js.map +1 -0
- package/dist/mouse-input.d.ts +3 -0
- package/dist/mouse-input.d.ts.map +1 -1
- package/dist/mouse-input.js +69 -2
- package/dist/mouse-input.js.map +1 -1
- package/dist/protocol.d.ts +1 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +40 -0
- package/dist/protocol.js.map +1 -1
- package/dist/render-backend.d.ts +31 -0
- package/dist/render-backend.d.ts.map +1 -0
- package/dist/render-backend.js +5 -0
- package/dist/render-backend.js.map +1 -0
- package/dist/renderer-options.d.ts +3 -0
- package/dist/renderer-options.d.ts.map +1 -0
- package/dist/renderer-options.js +6 -0
- package/dist/renderer-options.js.map +1 -0
- package/dist/renderer.d.ts +12 -24
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +35 -173
- package/dist/renderer.js.map +1 -1
- package/dist/terminal-worker.js +18 -10
- package/dist/terminal-worker.js.map +1 -1
- package/dist/types.d.ts +77 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/web-terminal.d.ts +8 -1
- package/dist/web-terminal.d.ts.map +1 -1
- package/dist/web-terminal.js +130 -17
- package/dist/web-terminal.js.map +1 -1
- package/dist/webgl2-backend.d.ts +38 -0
- package/dist/webgl2-backend.d.ts.map +1 -0
- package/dist/webgl2-backend.js +456 -0
- package/dist/webgl2-backend.js.map +1 -0
- package/dist/webgpu-backend.d.ts +24 -0
- package/dist/webgpu-backend.d.ts.map +1 -0
- package/dist/webgpu-backend.js +234 -0
- package/dist/webgpu-backend.js.map +1 -0
- package/dist/wire-types.d.ts +20 -2
- package/dist/wire-types.d.ts.map +1 -1
- package/dist/wire-types.js.map +1 -1
- package/package.json +2 -2
package/dist/terminal-worker.js
CHANGED
|
@@ -52,7 +52,7 @@ function fail(error) {
|
|
|
52
52
|
stats.connected = false;
|
|
53
53
|
clearInterval(metricsTimer);
|
|
54
54
|
clearInterval(blinkTimer);
|
|
55
|
-
socket?.close(
|
|
55
|
+
socket?.close();
|
|
56
56
|
emitStats();
|
|
57
57
|
postStatus(message, "error");
|
|
58
58
|
renderer?.dispose();
|
|
@@ -123,7 +123,9 @@ async function drawFrame() {
|
|
|
123
123
|
type: "geometry", columns: metadata.columns, rows: metadata.rows,
|
|
124
124
|
cellWidth: metadata.cellWidth, cellHeight: metadata.cellHeight,
|
|
125
125
|
mouseTracking: metadata.mouseTracking, peer: metadata.peer,
|
|
126
|
-
history: metadata.history, revision: frame.revision,
|
|
126
|
+
history: metadata.history, revision: frame.revision, title: metadata.title,
|
|
127
|
+
progress: metadata.progress, shellIntegration: metadata.shellIntegration,
|
|
128
|
+
text, hyperlinks: metadata.hyperlinks
|
|
127
129
|
});
|
|
128
130
|
send({ type: "ack", revision: frame.revision });
|
|
129
131
|
emitStats(text);
|
|
@@ -194,8 +196,8 @@ async function initialize(message) {
|
|
|
194
196
|
if (typeof self.requestAnimationFrame !== "function") {
|
|
195
197
|
throw new Error("This browser does not support requestAnimationFrame in a dedicated OffscreenCanvas worker");
|
|
196
198
|
}
|
|
197
|
-
postStatus("Loading terminal font and initializing
|
|
198
|
-
renderer = await TerminalRenderer.create(message.canvas, message.scale, fail, message.font);
|
|
199
|
+
postStatus("Loading terminal font and initializing renderer...");
|
|
200
|
+
renderer = await TerminalRenderer.create(message.canvas, message.scale, fail, message.font, message.renderer);
|
|
199
201
|
if (failed || stopped) {
|
|
200
202
|
renderer?.dispose();
|
|
201
203
|
return;
|
|
@@ -203,7 +205,10 @@ async function initialize(message) {
|
|
|
203
205
|
stats.gpu = "ready";
|
|
204
206
|
stats.backingScale = message.scale;
|
|
205
207
|
emitStats();
|
|
206
|
-
|
|
208
|
+
const rendererName = renderer.backend.kind === "webgpu" ? "WebGPU" : "WebGL2";
|
|
209
|
+
if (renderer.fallbackReason)
|
|
210
|
+
postStatus(`Using WebGL2: ${renderer.fallbackReason}`);
|
|
211
|
+
postStatus(`${rendererName} ready. Attaching terminal view...`);
|
|
207
212
|
const url = new URL(message.url);
|
|
208
213
|
if (!["ws:", "wss:"].includes(url.protocol)) {
|
|
209
214
|
throw new Error("The terminal WebSocket URL must use ws: or wss:");
|
|
@@ -215,7 +220,7 @@ async function initialize(message) {
|
|
|
215
220
|
return;
|
|
216
221
|
stats.connected = true;
|
|
217
222
|
self.postMessage({ type: "connected" });
|
|
218
|
-
postStatus(
|
|
223
|
+
postStatus(`Connected · ${rendererName} worker · server-authoritative cells and graphics`, "ready");
|
|
219
224
|
emitStats();
|
|
220
225
|
});
|
|
221
226
|
socket.addEventListener("message", event => {
|
|
@@ -225,19 +230,22 @@ async function initialize(message) {
|
|
|
225
230
|
}
|
|
226
231
|
receiveFrame(event.data).catch(fail);
|
|
227
232
|
});
|
|
228
|
-
|
|
233
|
+
// WebSocket errors are followed by close, which carries the browser's actual status.
|
|
234
|
+
// Rejecting mount on error would terminate this worker before that status can be delivered.
|
|
229
235
|
socket.addEventListener("close", event => {
|
|
230
236
|
stats.connected = false;
|
|
231
237
|
if (!failed && !stopped) {
|
|
232
238
|
stats.gpu = "stopped";
|
|
233
239
|
stats.fps = 0;
|
|
234
|
-
postStatus(`View disconnected (${event.code}${event.reason ? `: ${event.reason}` : ""}). Attach another view to reconnect.`, "error");
|
|
235
|
-
emitStats();
|
|
236
240
|
stopped = true;
|
|
237
241
|
clearInterval(metricsTimer);
|
|
238
242
|
clearInterval(blinkTimer);
|
|
239
243
|
renderer?.dispose();
|
|
240
|
-
self.postMessage({ type: "
|
|
244
|
+
self.postMessage({ type: "closed", details: {
|
|
245
|
+
code: event.code, reason: event.reason, wasClean: event.wasClean
|
|
246
|
+
} });
|
|
247
|
+
postStatus(`View disconnected (${event.code}${event.reason ? `: ${event.reason}` : ""}). Attach another view to reconnect.`, "error");
|
|
248
|
+
emitStats();
|
|
241
249
|
}
|
|
242
250
|
});
|
|
243
251
|
metricsTimer = setInterval(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-worker.js","sourceRoot":"","sources":["../src/terminal-worker.ts"],"names":[],"mappings":"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","sourcesContent":["import { decodeFrame, screenText } from \"./protocol.js\";\nimport { TerminalRenderer } from \"./renderer.js\";\nimport type { TerminalSize, TerminalStatusLevel } from \"./types.js\";\nimport type { FrameMetadata, TerminalCell, TerminalCommand, WorkerInputMessage, WorkerOutputMessage, WorkerStats } from \"./wire-types.js\";\nimport { errorMessage } from \"./validation.js\";\n\n// This module is only executed as a dedicated worker. Keeping its global local to\n// this module avoids leaking worker/WebGPU ambient dependencies to public declarations.\ndeclare const self: {\n postMessage(message: WorkerOutputMessage): void;\n requestAnimationFrame(callback: FrameRequestCallback): number;\n close(): void;\n addEventListener(type: \"error\", callback: (event: ErrorEvent) => void): void;\n addEventListener(type: \"unhandledrejection\", callback: (event: PromiseRejectionEvent) => void): void;\n addEventListener(type: \"message\", callback: (event: MessageEvent<WorkerInputMessage>) => void): void;\n};\n\nlet renderer: TerminalRenderer | undefined;\nlet socket: WebSocket | undefined;\nlet failed = false;\nlet stopped = false;\nlet processing = false;\nlet drawing = false;\nlet frameInFlight = false;\nlet scheduled = false;\nlet needsRender = false;\nlet hasBlink = false;\nlet lastBlink = true;\nlet metadata: FrameMetadata | undefined;\nlet cells: (TerminalCell | undefined)[] = [];\nlet localRevision = 0;\nlet pendingFrame: { revision: number; full: boolean; changedCells: number } | undefined;\nlet renderPromise = Promise.resolve();\nlet metricsTimer: ReturnType<typeof setInterval> | undefined;\nlet blinkTimer: ReturnType<typeof setInterval> | undefined;\nlet viewport: TerminalSize | undefined;\nconst stats: WorkerStats = {\n revision: 0, fullFrames: 0, frames: 0, presentations: 0,\n changedCells: 0, lastChangedCells: 0, discardedFrames: 0,\n imageCount: 0, textureBytes: 0, atlasGlyphs: 0, atlasBytes: 0,\n bytesReceived: 0, imageUploadBytes: 0, imagePayloadBytes: 0,\n gpu: \"initializing\", connected: false, warnings: [],\n fps: 0, receivedKBps: 0, workloadMBps: 0,\n captureMs: 0, rendererCpuMs: 0, preparationCpuMs: 0,\n workloadBytes: 0, outputBatches: 0, serverElapsedMs: 0,\n};\nlet sample = { time: performance.now(), presentations: 0, bytes: 0, workload: 0 };\n\nfunction postStatus(message: string, level: TerminalStatusLevel = \"info\"): void {\n self.postMessage({ type: \"status\", message, level });\n}\n\nfunction send(message: TerminalCommand): void {\n if (socket?.readyState === WebSocket.OPEN) socket.send(JSON.stringify(message));\n}\n\nfunction emitStats(text?: string): void {\n if (renderer && !renderer.disposed) Object.assign(stats, renderer.metrics());\n self.postMessage({ type: \"stats\", stats: { ...stats }, ...(text === undefined ? {} : { text }) });\n}\n\nfunction fail(error: unknown): void {\n if (failed || stopped) return;\n failed = true;\n const message = errorMessage(error);\n stats.gpu = \"error\";\n stats.connected = false;\n clearInterval(metricsTimer);\n clearInterval(blinkTimer);\n socket?.close(1011, \"Browser renderer failed\");\n emitStats();\n postStatus(message, \"error\");\n renderer?.dispose();\n}\n\nself.addEventListener(\"error\", event => {\n event.preventDefault();\n fail(event.error || new Error(event.message));\n});\nself.addEventListener(\"unhandledrejection\", event => {\n event.preventDefault();\n fail(event.reason);\n});\n\n/** At most one state frame, one decode, and one GPU submission are outstanding. */\nfunction scheduleRender() {\n needsRender = true;\n if (scheduled || drawing || processing || failed || stopped || !metadata) return;\n scheduled = true;\n self.requestAnimationFrame(() => {\n scheduled = false;\n if (processing || drawing || failed || stopped) return;\n renderPromise = drawFrame();\n });\n}\n\nasync function drawFrame() {\n if (!needsRender || !metadata || !renderer) return;\n needsRender = false;\n drawing = true;\n const frame = pendingFrame;\n try {\n renderer.resize(metadata.columns, metadata.rows, viewport);\n const blink = Math.floor(performance.now() / 600) % 2 === 0;\n const result = renderer.render(cells, metadata, blink);\n // This is bounded completion/backpressure, not GPU readback or a GPU timing measurement.\n await renderer.idle();\n if (failed || stopped) return;\n lastBlink = blink;\n stats.presentations++;\n stats.rendererCpuMs = result.cpuMs;\n stats.quads = result.quads;\n stats.drawCalls = result.drawCalls;\n stats.warnings = renderer.canvasLimited\n ? [...metadata.warnings, `Canvas resolution capped by the GPU; terminal grid remains ${metadata.columns}x${metadata.rows}`]\n : metadata.warnings;\n if (frame) {\n pendingFrame = undefined;\n frameInFlight = false;\n stats.frames++;\n if (frame.full) stats.fullFrames++;\n stats.revision = frame.revision;\n stats.changedCells += frame.changedCells;\n stats.lastChangedCells = frame.changedCells;\n stats.captureMs = metadata.stats.captureMs;\n stats.workloadBytes = metadata.stats.workloadBytes;\n stats.outputBatches = metadata.stats.outputBatches;\n stats.serverElapsedMs = metadata.stats.elapsedMs;\n stats.columns = metadata.columns;\n stats.rows = metadata.rows;\n stats.mouseTracking = metadata.mouseTracking;\n stats.peer = metadata.peer;\n stats.history = metadata.history;\n const text = screenText(cells, metadata.columns, metadata.rows);\n self.postMessage({\n type: \"geometry\", columns: metadata.columns, rows: metadata.rows,\n cellWidth: metadata.cellWidth, cellHeight: metadata.cellHeight,\n mouseTracking: metadata.mouseTracking, peer: metadata.peer,\n history: metadata.history, revision: frame.revision, text\n });\n send({ type: \"ack\", revision: frame.revision });\n emitStats(text);\n }\n } catch (error) {\n fail(error);\n } finally {\n drawing = false;\n if (needsRender && !processing) scheduleRender();\n }\n}\n\nasync function receiveFrame(buffer: ArrayBuffer): Promise<void> {\n if (failed || stopped || !renderer) return;\n if (frameInFlight) throw new Error(\"Server sent a second state frame before acknowledgement\");\n frameInFlight = true;\n processing = true;\n stats.bytesReceived += buffer.byteLength || 0;\n try {\n const frame = decodeFrame(buffer);\n const next = frame.metadata;\n if (!next.full && (next.baseRevision !== localRevision || next.revision <= localRevision ||\n !metadata || next.columns !== metadata.columns || next.rows !== metadata.rows)) {\n stats.discardedFrames++;\n frameInFlight = false;\n // A discarded frame must release the server's one-in-flight gate before resync.\n send({ type: \"ack\", revision: next.revision });\n send({ type: \"resync\" });\n postStatus(`Revision mismatch (local ${localRevision}, base ${next.baseRevision}); requesting a full frame`);\n return;\n }\n await renderPromise;\n if (failed || stopped) return;\n // No blink presentation may reference textures while this resource transaction is in progress.\n await renderer.idle();\n await renderer.updateImages(frame.images, next.retainedImages);\n if (failed || stopped) return;\n const preparationStart = performance.now();\n const nextCells: (TerminalCell | undefined)[] = next.full\n ? new Array<TerminalCell | undefined>(next.columns * next.rows) : cells.slice();\n for (const cell of frame.cells) nextCells[cell.index] = cell;\n renderer.prepareGlyphs(nextCells);\n cells = nextCells;\n metadata = next;\n localRevision = next.revision;\n pendingFrame = { revision: next.revision, full: next.full, changedCells: frame.cells.length };\n hasBlink = cells.some(cell => cell && (cell.attributes & 16) && !(cell.attributes & 64)) ||\n (next.cursor.visible && (next.cursor.shape === 0 || next.cursor.shape % 2 === 1));\n stats.preparationCpuMs = performance.now() - preparationStart;\n needsRender = true;\n } finally {\n processing = false;\n if (needsRender) scheduleRender();\n }\n}\n\nasync function initialize(message: Extract<WorkerInputMessage, { type: \"init\" }>): Promise<void> {\n if (renderer || socket) throw new Error(\"Worker is already initialized\");\n if (typeof self.requestAnimationFrame !== \"function\") {\n throw new Error(\"This browser does not support requestAnimationFrame in a dedicated OffscreenCanvas worker\");\n }\n postStatus(\"Loading terminal font and initializing WebGPU...\");\n renderer = await TerminalRenderer.create(message.canvas, message.scale, fail, message.font);\n if (failed || stopped) {\n renderer?.dispose();\n return;\n }\n stats.gpu = \"ready\";\n stats.backingScale = message.scale;\n emitStats();\n postStatus(\"WebGPU ready. Attaching terminal view...\");\n const url = new URL(message.url);\n if (![\"ws:\", \"wss:\"].includes(url.protocol)) {\n throw new Error(\"The terminal WebSocket URL must use ws: or wss:\");\n }\n socket = new WebSocket(url);\n socket.binaryType = \"arraybuffer\";\n socket.addEventListener(\"open\", () => {\n if (failed || stopped) return;\n stats.connected = true;\n self.postMessage({ type: \"connected\" });\n postStatus(\"Connected · WebGPU worker · server-authoritative cells and graphics\", \"ready\");\n emitStats();\n });\n socket.addEventListener(\"message\", event => {\n if (!(event.data instanceof ArrayBuffer)) {\n fail(new Error(`Expected binary HWT1 frame, received ${String(event.data).slice(0, 200)}`));\n return;\n }\n receiveFrame(event.data).catch(fail);\n });\n socket.addEventListener(\"error\", () => fail(new Error(\"WebSocket connection failed; verify the demo server is running\")));\n socket.addEventListener(\"close\", event => {\n stats.connected = false;\n if (!failed && !stopped) {\n stats.gpu = \"stopped\";\n stats.fps = 0;\n postStatus(`View disconnected (${event.code}${event.reason ? `: ${event.reason}` : \"\"}). Attach another view to reconnect.`, \"error\");\n emitStats();\n stopped = true;\n clearInterval(metricsTimer);\n clearInterval(blinkTimer);\n renderer?.dispose();\n self.postMessage({ type: \"disconnected\" });\n }\n });\n metricsTimer = setInterval(() => {\n const now = performance.now();\n const seconds = (now - sample.time) / 1000;\n stats.fps = (stats.presentations - sample.presentations) / seconds;\n stats.receivedKBps = (stats.bytesReceived - sample.bytes) / seconds / 1000;\n stats.workloadMBps = Math.max(0, stats.workloadBytes - sample.workload) / seconds / 1000000;\n sample = { time: now, presentations: stats.presentations, bytes: stats.bytesReceived, workload: stats.workloadBytes };\n emitStats();\n }, 1000);\n blinkTimer = setInterval(() => {\n const blinkOn = Math.floor(performance.now() / 600) % 2 === 0;\n if (hasBlink && blinkOn !== lastBlink) scheduleRender();\n }, 100);\n}\n\nself.addEventListener(\"message\", event => {\n const message = event.data;\n if (message.type === \"init\") {\n initialize(message).catch(fail);\n } else if (message.type === \"stop\") {\n stopped = true;\n clearInterval(metricsTimer);\n clearInterval(blinkTimer);\n socket?.close(1000, \"View detached\");\n renderer?.dispose();\n self.close();\n } else if (message.type === \"viewport\" && !failed && !stopped) {\n if (!Number.isFinite(message.width) || !Number.isFinite(message.height) || message.width < 0 || message.height < 0) {\n fail(new Error(\"Invalid mounted viewport dimensions\"));\n return;\n }\n if (viewport?.width === message.width && viewport?.height === message.height) return;\n viewport = { width: message.width, height: message.height };\n scheduleRender();\n } else if (message.type === \"command\" && !failed && !stopped) {\n send(message.command);\n }\n});\n"]}
|
|
1
|
+
{"version":3,"file":"terminal-worker.js","sourceRoot":"","sources":["../src/terminal-worker.ts"],"names":[],"mappings":"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","sourcesContent":["import { decodeFrame, screenText } from \"./protocol.js\";\nimport { TerminalRenderer } from \"./renderer.js\";\nimport type { TerminalSize, TerminalStatusLevel } from \"./types.js\";\nimport type { FrameMetadata, TerminalCell, TerminalCommand, WorkerInputMessage, WorkerOutputMessage, WorkerStats } from \"./wire-types.js\";\nimport { errorMessage } from \"./validation.js\";\n\n// This module is only executed as a dedicated worker. Keeping its global local to\n// this module avoids leaking worker/WebGPU ambient dependencies to public declarations.\ndeclare const self: {\n postMessage(message: WorkerOutputMessage): void;\n requestAnimationFrame(callback: FrameRequestCallback): number;\n close(): void;\n addEventListener(type: \"error\", callback: (event: ErrorEvent) => void): void;\n addEventListener(type: \"unhandledrejection\", callback: (event: PromiseRejectionEvent) => void): void;\n addEventListener(type: \"message\", callback: (event: MessageEvent<WorkerInputMessage>) => void): void;\n};\n\nlet renderer: TerminalRenderer | undefined;\nlet socket: WebSocket | undefined;\nlet failed = false;\nlet stopped = false;\nlet processing = false;\nlet drawing = false;\nlet frameInFlight = false;\nlet scheduled = false;\nlet needsRender = false;\nlet hasBlink = false;\nlet lastBlink = true;\nlet metadata: FrameMetadata | undefined;\nlet cells: (TerminalCell | undefined)[] = [];\nlet localRevision = 0;\nlet pendingFrame: { revision: number; full: boolean; changedCells: number } | undefined;\nlet renderPromise = Promise.resolve();\nlet metricsTimer: ReturnType<typeof setInterval> | undefined;\nlet blinkTimer: ReturnType<typeof setInterval> | undefined;\nlet viewport: TerminalSize | undefined;\nconst stats: WorkerStats = {\n revision: 0, fullFrames: 0, frames: 0, presentations: 0,\n changedCells: 0, lastChangedCells: 0, discardedFrames: 0,\n imageCount: 0, textureBytes: 0, atlasGlyphs: 0, atlasBytes: 0,\n bytesReceived: 0, imageUploadBytes: 0, imagePayloadBytes: 0,\n gpu: \"initializing\", connected: false, warnings: [],\n fps: 0, receivedKBps: 0, workloadMBps: 0,\n captureMs: 0, rendererCpuMs: 0, preparationCpuMs: 0,\n workloadBytes: 0, outputBatches: 0, serverElapsedMs: 0,\n};\nlet sample = { time: performance.now(), presentations: 0, bytes: 0, workload: 0 };\n\nfunction postStatus(message: string, level: TerminalStatusLevel = \"info\"): void {\n self.postMessage({ type: \"status\", message, level });\n}\n\nfunction send(message: TerminalCommand): void {\n if (socket?.readyState === WebSocket.OPEN) socket.send(JSON.stringify(message));\n}\n\nfunction emitStats(text?: string): void {\n if (renderer && !renderer.disposed) Object.assign(stats, renderer.metrics());\n self.postMessage({ type: \"stats\", stats: { ...stats }, ...(text === undefined ? {} : { text }) });\n}\n\nfunction fail(error: unknown): void {\n if (failed || stopped) return;\n failed = true;\n const message = errorMessage(error);\n stats.gpu = \"error\";\n stats.connected = false;\n clearInterval(metricsTimer);\n clearInterval(blinkTimer);\n socket?.close();\n emitStats();\n postStatus(message, \"error\");\n renderer?.dispose();\n}\n\nself.addEventListener(\"error\", event => {\n event.preventDefault();\n fail(event.error || new Error(event.message));\n});\nself.addEventListener(\"unhandledrejection\", event => {\n event.preventDefault();\n fail(event.reason);\n});\n\n/** At most one state frame, one decode, and one GPU submission are outstanding. */\nfunction scheduleRender() {\n needsRender = true;\n if (scheduled || drawing || processing || failed || stopped || !metadata) return;\n scheduled = true;\n self.requestAnimationFrame(() => {\n scheduled = false;\n if (processing || drawing || failed || stopped) return;\n renderPromise = drawFrame();\n });\n}\n\nasync function drawFrame() {\n if (!needsRender || !metadata || !renderer) return;\n needsRender = false;\n drawing = true;\n const frame = pendingFrame;\n try {\n renderer.resize(metadata.columns, metadata.rows, viewport);\n const blink = Math.floor(performance.now() / 600) % 2 === 0;\n const result = renderer.render(cells, metadata, blink);\n // This is bounded completion/backpressure, not GPU readback or a GPU timing measurement.\n await renderer.idle();\n if (failed || stopped) return;\n lastBlink = blink;\n stats.presentations++;\n stats.rendererCpuMs = result.cpuMs;\n stats.quads = result.quads;\n stats.drawCalls = result.drawCalls;\n stats.warnings = renderer.canvasLimited\n ? [...metadata.warnings, `Canvas resolution capped by the GPU; terminal grid remains ${metadata.columns}x${metadata.rows}`]\n : metadata.warnings;\n if (frame) {\n pendingFrame = undefined;\n frameInFlight = false;\n stats.frames++;\n if (frame.full) stats.fullFrames++;\n stats.revision = frame.revision;\n stats.changedCells += frame.changedCells;\n stats.lastChangedCells = frame.changedCells;\n stats.captureMs = metadata.stats.captureMs;\n stats.workloadBytes = metadata.stats.workloadBytes;\n stats.outputBatches = metadata.stats.outputBatches;\n stats.serverElapsedMs = metadata.stats.elapsedMs;\n stats.columns = metadata.columns;\n stats.rows = metadata.rows;\n stats.mouseTracking = metadata.mouseTracking;\n stats.peer = metadata.peer;\n stats.history = metadata.history;\n const text = screenText(cells, metadata.columns, metadata.rows);\n self.postMessage({\n type: \"geometry\", columns: metadata.columns, rows: metadata.rows,\n cellWidth: metadata.cellWidth, cellHeight: metadata.cellHeight,\n mouseTracking: metadata.mouseTracking, peer: metadata.peer,\n history: metadata.history, revision: frame.revision, title: metadata.title,\n progress: metadata.progress, shellIntegration: metadata.shellIntegration,\n text, hyperlinks: metadata.hyperlinks\n });\n send({ type: \"ack\", revision: frame.revision });\n emitStats(text);\n }\n } catch (error) {\n fail(error);\n } finally {\n drawing = false;\n if (needsRender && !processing) scheduleRender();\n }\n}\n\nasync function receiveFrame(buffer: ArrayBuffer): Promise<void> {\n if (failed || stopped || !renderer) return;\n if (frameInFlight) throw new Error(\"Server sent a second state frame before acknowledgement\");\n frameInFlight = true;\n processing = true;\n stats.bytesReceived += buffer.byteLength || 0;\n try {\n const frame = decodeFrame(buffer);\n const next = frame.metadata;\n if (!next.full && (next.baseRevision !== localRevision || next.revision <= localRevision ||\n !metadata || next.columns !== metadata.columns || next.rows !== metadata.rows)) {\n stats.discardedFrames++;\n frameInFlight = false;\n // A discarded frame must release the server's one-in-flight gate before resync.\n send({ type: \"ack\", revision: next.revision });\n send({ type: \"resync\" });\n postStatus(`Revision mismatch (local ${localRevision}, base ${next.baseRevision}); requesting a full frame`);\n return;\n }\n await renderPromise;\n if (failed || stopped) return;\n // No blink presentation may reference textures while this resource transaction is in progress.\n await renderer.idle();\n await renderer.updateImages(frame.images, next.retainedImages);\n if (failed || stopped) return;\n const preparationStart = performance.now();\n const nextCells: (TerminalCell | undefined)[] = next.full\n ? new Array<TerminalCell | undefined>(next.columns * next.rows) : cells.slice();\n for (const cell of frame.cells) nextCells[cell.index] = cell;\n renderer.prepareGlyphs(nextCells);\n cells = nextCells;\n metadata = next;\n localRevision = next.revision;\n pendingFrame = { revision: next.revision, full: next.full, changedCells: frame.cells.length };\n hasBlink = cells.some(cell => cell && (cell.attributes & 16) && !(cell.attributes & 64)) ||\n (next.cursor.visible && (next.cursor.shape === 0 || next.cursor.shape % 2 === 1));\n stats.preparationCpuMs = performance.now() - preparationStart;\n needsRender = true;\n } finally {\n processing = false;\n if (needsRender) scheduleRender();\n }\n}\n\nasync function initialize(message: Extract<WorkerInputMessage, { type: \"init\" }>): Promise<void> {\n if (renderer || socket) throw new Error(\"Worker is already initialized\");\n if (typeof self.requestAnimationFrame !== \"function\") {\n throw new Error(\"This browser does not support requestAnimationFrame in a dedicated OffscreenCanvas worker\");\n }\n postStatus(\"Loading terminal font and initializing renderer...\");\n renderer = await TerminalRenderer.create(message.canvas, message.scale, fail, message.font, message.renderer);\n if (failed || stopped) {\n renderer?.dispose();\n return;\n }\n stats.gpu = \"ready\";\n stats.backingScale = message.scale;\n emitStats();\n const rendererName = renderer.backend.kind === \"webgpu\" ? \"WebGPU\" : \"WebGL2\";\n if (renderer.fallbackReason) postStatus(`Using WebGL2: ${renderer.fallbackReason}`);\n postStatus(`${rendererName} ready. Attaching terminal view...`);\n const url = new URL(message.url);\n if (![\"ws:\", \"wss:\"].includes(url.protocol)) {\n throw new Error(\"The terminal WebSocket URL must use ws: or wss:\");\n }\n socket = new WebSocket(url);\n socket.binaryType = \"arraybuffer\";\n socket.addEventListener(\"open\", () => {\n if (failed || stopped) return;\n stats.connected = true;\n self.postMessage({ type: \"connected\" });\n postStatus(`Connected · ${rendererName} worker · server-authoritative cells and graphics`, \"ready\");\n emitStats();\n });\n socket.addEventListener(\"message\", event => {\n if (!(event.data instanceof ArrayBuffer)) {\n fail(new Error(`Expected binary HWT1 frame, received ${String(event.data).slice(0, 200)}`));\n return;\n }\n receiveFrame(event.data).catch(fail);\n });\n // WebSocket errors are followed by close, which carries the browser's actual status.\n // Rejecting mount on error would terminate this worker before that status can be delivered.\n socket.addEventListener(\"close\", event => {\n stats.connected = false;\n if (!failed && !stopped) {\n stats.gpu = \"stopped\";\n stats.fps = 0;\n stopped = true;\n clearInterval(metricsTimer);\n clearInterval(blinkTimer);\n renderer?.dispose();\n self.postMessage({ type: \"closed\", details: {\n code: event.code, reason: event.reason, wasClean: event.wasClean\n } });\n postStatus(`View disconnected (${event.code}${event.reason ? `: ${event.reason}` : \"\"}). Attach another view to reconnect.`, \"error\");\n emitStats();\n }\n });\n metricsTimer = setInterval(() => {\n const now = performance.now();\n const seconds = (now - sample.time) / 1000;\n stats.fps = (stats.presentations - sample.presentations) / seconds;\n stats.receivedKBps = (stats.bytesReceived - sample.bytes) / seconds / 1000;\n stats.workloadMBps = Math.max(0, stats.workloadBytes - sample.workload) / seconds / 1000000;\n sample = { time: now, presentations: stats.presentations, bytes: stats.bytesReceived, workload: stats.workloadBytes };\n emitStats();\n }, 1000);\n blinkTimer = setInterval(() => {\n const blinkOn = Math.floor(performance.now() / 600) % 2 === 0;\n if (hasBlink && blinkOn !== lastBlink) scheduleRender();\n }, 100);\n}\n\nself.addEventListener(\"message\", event => {\n const message = event.data;\n if (message.type === \"init\") {\n initialize(message).catch(fail);\n } else if (message.type === \"stop\") {\n stopped = true;\n clearInterval(metricsTimer);\n clearInterval(blinkTimer);\n socket?.close(1000, \"View detached\");\n renderer?.dispose();\n self.close();\n } else if (message.type === \"viewport\" && !failed && !stopped) {\n if (!Number.isFinite(message.width) || !Number.isFinite(message.height) || message.width < 0 || message.height < 0) {\n fail(new Error(\"Invalid mounted viewport dimensions\"));\n return;\n }\n if (viewport?.width === message.width && viewport?.height === message.height) return;\n viewport = { width: message.width, height: message.height };\n scheduleRender();\n } else if (message.type === \"command\" && !failed && !stopped) {\n send(message.command);\n }\n});\n"]}
|
package/dist/types.d.ts
CHANGED
|
@@ -115,8 +115,24 @@ export type TerminalSelection = ({
|
|
|
115
115
|
copyError: string;
|
|
116
116
|
};
|
|
117
117
|
export type TerminalStatusLevel = "info" | "ready" | "error";
|
|
118
|
+
/** Native WebSocket close details, not an assertion that the terminal workload completed. */
|
|
119
|
+
export interface TerminalCloseDetails {
|
|
120
|
+
/** RFC 6455 status reported by the browser, including 1006 for abnormal loss without a close frame. */
|
|
121
|
+
readonly code: number;
|
|
122
|
+
/** Peer-provided close reason, or "". Treat as untrusted text. */
|
|
123
|
+
readonly reason: string;
|
|
124
|
+
/** Whether the browser observed a clean WebSocket closing handshake, not workload success. */
|
|
125
|
+
readonly wasClean: boolean;
|
|
126
|
+
}
|
|
127
|
+
export type TerminalRendererKind = "webgpu" | "webgl2";
|
|
128
|
+
/** Auto prefers WebGPU and falls back to WebGL2 for capability/device acquisition failures. */
|
|
129
|
+
export type TerminalRendererPreference = "auto" | TerminalRendererKind;
|
|
118
130
|
/** Metrics are initially empty; individual fields appear as initialization and presentation proceed. */
|
|
119
131
|
export interface TerminalStats {
|
|
132
|
+
/** Active backend; absent until renderer initialization completes. */
|
|
133
|
+
renderer?: TerminalRendererKind;
|
|
134
|
+
/** Why auto selected WebGL2 instead of WebGPU; absent for explicit selection or WebGPU. */
|
|
135
|
+
rendererFallbackReason?: string;
|
|
120
136
|
revision?: number;
|
|
121
137
|
fullFrames?: number;
|
|
122
138
|
frames?: number;
|
|
@@ -260,20 +276,66 @@ export interface SelectionUIDetail extends SelectionUIState {
|
|
|
260
276
|
readonly rects: readonly Readonly<SelectionRectangle>[];
|
|
261
277
|
}
|
|
262
278
|
export type SelectionUIEvent = CustomEvent<SelectionUIDetail>;
|
|
279
|
+
/** Application-reported OSC 9;4 indicator, independent of shell execution. */
|
|
280
|
+
export type TerminalProgressState = "none" | "normal" | "error" | "indeterminate" | "warning";
|
|
281
|
+
/** Immutable current progress; a hidden or indeterminate indicator has no percentage. */
|
|
282
|
+
export interface TerminalProgress {
|
|
283
|
+
readonly state: TerminalProgressState;
|
|
284
|
+
readonly percentage: number | null;
|
|
285
|
+
}
|
|
286
|
+
/** Last reported OSC 133 phase. Unknown does not mean idle; commandLine is not execution. */
|
|
287
|
+
export type TerminalShellIntegrationPhase = "unknown" | "prompt" | "commandLine" | "executing" | "finished";
|
|
288
|
+
/** Current shell phase and latest reported completion status, not command history. */
|
|
289
|
+
export interface TerminalShellIntegration {
|
|
290
|
+
readonly phase: TerminalShellIntegrationPhase;
|
|
291
|
+
/** Null means no reported status, not success. Preserved across the next prompt/command. */
|
|
292
|
+
readonly lastExitCode: number | null;
|
|
293
|
+
}
|
|
263
294
|
export interface WebTerminalOptions extends InputPolicyOptions {
|
|
264
295
|
url: string | URL;
|
|
265
296
|
/** Optional module-worker entry, resolved against the page URL. Defaults to the bundled worker. */
|
|
266
297
|
workerUrl?: string | URL;
|
|
267
298
|
signal?: AbortSignal;
|
|
268
299
|
scale?: number | "auto";
|
|
300
|
+
/** Mount-time backend selection. Defaults to auto; explicit modes never fall back. */
|
|
301
|
+
renderer?: TerminalRendererPreference;
|
|
269
302
|
font?: TerminalFont;
|
|
270
303
|
sizing?: TerminalSizing;
|
|
271
304
|
label?: string;
|
|
305
|
+
/** Initial per-view input policy. Change it later with setReadOnly; not a server authorization boundary. */
|
|
272
306
|
readOnly?: boolean;
|
|
273
307
|
onStatus?: (message: string, level: TerminalStatusLevel) => void;
|
|
308
|
+
/**
|
|
309
|
+
* Receives the native WebSocket close details once, including connection failures and closes
|
|
310
|
+
* before the first frame. The view is disconnected before this callback; a pending mount
|
|
311
|
+
* rejects after notification. No callback is synthesized for abort, disposal, initialization
|
|
312
|
+
* failure, or mount timeout, and none runs after disposal. This client never reconnects
|
|
313
|
+
* automatically. Interpret application close codes in the host; even 1000 is not proof of
|
|
314
|
+
* workload completion. Callback exceptions reach the host and are not retried.
|
|
315
|
+
*/
|
|
316
|
+
onClose?: (details: TerminalCloseDetails) => void;
|
|
274
317
|
onGeometry?: (geometry: TerminalGeometry) => void;
|
|
275
318
|
onSizingChange?: (sizing: TerminalSizingState) => void;
|
|
276
319
|
onRoleChange?: (peer: TerminalPeer) => void;
|
|
320
|
+
/**
|
|
321
|
+
* Receives the first authoritative presented title (including "") before mount resolves,
|
|
322
|
+
* then distinct presented changes. The title getter is updated first. Titles are untrusted
|
|
323
|
+
* text; render with textContent, not HTML. No notifications after disposal.
|
|
324
|
+
*/
|
|
325
|
+
onTitleChange?: (title: string) => void;
|
|
326
|
+
/**
|
|
327
|
+
* Receives the first authoritative presented progress before mount resolves, then distinct
|
|
328
|
+
* presented changes. Both activity getters update before either callback. Intermediate
|
|
329
|
+
* states may coalesce; this is not a callback for every OSC sequence. None hides the indicator.
|
|
330
|
+
* No notifications after disposal; connection loss does not manufacture a progress clear.
|
|
331
|
+
*/
|
|
332
|
+
onProgressChange?: (progress: TerminalProgress) => void;
|
|
333
|
+
/**
|
|
334
|
+
* Receives the first authoritative presented shell state before mount resolves, then distinct
|
|
335
|
+
* presented changes. This is not a lossless command-start/finish stream: entire commands may
|
|
336
|
+
* occur between frames. Replays provide current state, never synthetic command executions.
|
|
337
|
+
*/
|
|
338
|
+
onShellIntegrationChange?: (shellIntegration: TerminalShellIntegration) => void;
|
|
277
339
|
onStats?: (stats: TerminalStats, text: string | undefined) => void;
|
|
278
340
|
onViewportChange?: (viewport: TerminalViewport) => void;
|
|
279
341
|
onSelectionChange?: (selection: TerminalSelection) => void;
|
|
@@ -287,6 +349,14 @@ export interface WebTerminalHandle {
|
|
|
287
349
|
readonly geometry: TerminalGeometry;
|
|
288
350
|
readonly peer: TerminalPeer;
|
|
289
351
|
readonly connected: boolean;
|
|
352
|
+
/** Whether this view blocks application input, resize, and primary takeover. */
|
|
353
|
+
readonly readOnly: boolean;
|
|
354
|
+
/** Current presented workload title, or "" when unset/cleared. Retained on disconnect/dispose. */
|
|
355
|
+
readonly title: string;
|
|
356
|
+
/** Current presented progress, initially none. Retained on disconnect/dispose; check connected. */
|
|
357
|
+
readonly progress: TerminalProgress;
|
|
358
|
+
/** Current presented shell state, initially unknown. Retained on disconnect/dispose. */
|
|
359
|
+
readonly shellIntegration: TerminalShellIntegration;
|
|
290
360
|
readonly stats: TerminalStats;
|
|
291
361
|
readonly screenText: string;
|
|
292
362
|
readonly sizing: TerminalSizingState;
|
|
@@ -302,6 +372,13 @@ export interface WebTerminalHandle {
|
|
|
302
372
|
copySelection(options?: CopySelectionOptions): Promise<string>;
|
|
303
373
|
paste(text: string): void;
|
|
304
374
|
pasteClipboard(): Promise<string>;
|
|
375
|
+
/**
|
|
376
|
+
* Changes this view's input policy without remounting or changing peer roles.
|
|
377
|
+
* Output, history, selection and copying remain available. Cancels active gestures,
|
|
378
|
+
* pending composition and clipboard paste; already dispatched commands cannot be recalled.
|
|
379
|
+
* Hosts must separately enforce permissions on their per-view Hwt1PresentationAdapter.
|
|
380
|
+
*/
|
|
381
|
+
setReadOnly(readOnly: boolean): void;
|
|
305
382
|
focus(): void;
|
|
306
383
|
requestPrimary(): void;
|
|
307
384
|
resize(columns: number, rows: number): void;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["/** Logical terminal dimensions, confirmed by the producer rather than reflowed locally. */\nexport interface TerminalGrid { columns: number; rows: number }\nexport interface TerminalSize { width: number; height: number }\nexport interface TerminalPoint { x: number; y: number }\nexport type MouseTrackingMode = 0 | 9 | 1000 | 1002 | 1003;\nexport interface TerminalGeometry extends TerminalGrid {\n cellWidth: number;\n cellHeight: number;\n mouseTracking: MouseTrackingMode;\n}\nexport interface TerminalPeer {\n id: string | null;\n primaryId: string | null;\n isPrimary: boolean;\n}\n/** Font size is an integer from 8 to 32; fixed grids allow 20–300 columns and 10–100 rows. */\nexport type TerminalSizing =\n | { mode: \"auto\"; fontSize?: number }\n | { mode: \"fixed\"; fontSize?: number; columns: number; rows: number };\nexport type TerminalSizingState =\n | { mode: \"auto\"; fontSize: number }\n | { mode: \"fixed\"; fontSize: number; columns: number; rows: number };\nexport interface TerminalFontFace { url: string; weight?: string; style?: string }\n/** Without faces, a non-generic family must be installed locally in the worker's environment. */\nexport interface TerminalFont { family: string; faces?: readonly TerminalFontFace[] }\nexport type TerminalBuffer = \"main\" | \"alternate\";\nexport type SelectionMode = \"character\" | \"word\" | \"line\" | \"rectangle\";\nexport interface SelectionRange { row: number; startColumn: number; endColumn: number }\nexport type TerminalViewport = (\n | { available: true; generation: string; buffer: TerminalBuffer; totalRows: number;\n liveTop: number; top: number; requestId: number; rowIds: readonly string[]; revision: number }\n | { available: false; generation?: undefined; buffer?: undefined; totalRows?: undefined;\n liveTop?: undefined; top?: undefined; requestId?: undefined; rowIds?: readonly string[]; revision?: undefined }\n) & { following: boolean; pending: boolean; followTail: boolean; offset: number };\nexport type TerminalSelection = (\n | { status: \"valid\"; text: string; requestId: number; revision: number }\n | { status: \"none\" | \"invalidated\"; text: null; requestId: number; revision: number }\n | { status: \"pending\"; text: null; requestId: number; revision?: undefined }\n | { status: \"unavailable\"; text: null; requestId?: undefined; revision?: undefined }\n) & {\n mode: SelectionMode;\n ranges: readonly Readonly<SelectionRange>[];\n canExtend?: boolean;\n message: string;\n active: boolean;\n pending: boolean;\n copying: boolean;\n copyError: string;\n};\nexport type TerminalStatusLevel = \"info\" | \"ready\" | \"error\";\n/** Metrics are initially empty; individual fields appear as initialization and presentation proceed. */\nexport interface TerminalStats {\n revision?: number; fullFrames?: number; frames?: number; presentations?: number;\n changedCells?: number; lastChangedCells?: number; discardedFrames?: number;\n imageCount?: number; textureBytes?: number; atlasGlyphs?: number; atlasBytes?: number;\n bytesReceived?: number; imageUploadBytes?: number; imagePayloadBytes?: number;\n gpu?: \"initializing\" | \"ready\" | \"error\" | \"stopped\"; connected?: boolean; warnings?: readonly string[];\n fps?: number; receivedKBps?: number; workloadMBps?: number;\n captureMs?: number; rendererCpuMs?: number; preparationCpuMs?: number;\n workloadBytes?: number; outputBatches?: number; serverElapsedMs?: number;\n quads?: number; drawCalls?: number; columns?: number; rows?: number; mouseTracking?: MouseTrackingMode;\n peer?: TerminalPeer; fontFamily?: string; rasterScale?: number; backingScale?: number;\n backingWidth?: number; backingHeight?: number; atlasRebuilds?: number;\n glyphUploadBytes?: number; instanceBufferBytes?: number;\n}\nexport interface InputModifiers { ctrl: boolean; alt: boolean; shift: boolean; meta: boolean }\nexport type PointerButton = \"left\" | \"middle\" | \"right\";\n/** Input intents contain no browser event. Returning a route controls browser cancellation. */\nexport type TerminalInput =\n | ({ type: \"key\"; key: string; code: string; repeat: boolean } & InputModifiers)\n | ({ type: \"pointer\"; button: PointerButton; point: Readonly<TerminalPoint> } & InputModifiers)\n | ({ type: \"wheel\"; deltaX: number; deltaY: number; deltaMode: number;\n point: Readonly<TerminalPoint> | null } & InputModifiers)\n | { type: \"paste\" | \"text\"; text: string };\nexport type InputRouteValue = \"continue\" | \"consume\" | \"application\" | \"browser\";\nexport type TerminalActionName = \"copySelection\" | \"pasteClipboard\" | \"copyOrPaste\"\n | \"clearSelection\" | \"scrollToLive\" | \"scrollLines\";\nexport interface CopySelectionOptions { clear?: boolean }\nexport interface TerminalInputContext {\n readonly terminal: WebTerminalHandle;\n readonly selection: TerminalSelection;\n readonly viewport: TerminalViewport;\n readonly buffer: TerminalBuffer | null;\n readonly mouseCaptured: boolean;\n readonly historical: boolean;\n readonly readOnly: boolean;\n readonly connected: boolean;\n readonly peer: TerminalPeer;\n}\n/** Custom actions validate their own arguments and may complete asynchronously. */\nexport type InputActionHandler =\n (context: TerminalInputContext, args: unknown, input: Readonly<TerminalInput> | undefined) => unknown;\nexport type InputDecision =\n | { route: InputRouteValue; action?: never; args?: never }\n | { action: string | InputActionHandler; args?: unknown; route?: never };\nexport type InputInterceptor =\n (input: Readonly<TerminalInput>, context: TerminalInputContext) => InputRouteValue | InputDecision | undefined;\nexport type InputBinding = {\n id: string;\n match: (input: Readonly<TerminalInput>, context: TerminalInputContext) => boolean;\n when?: (context: TerminalInputContext, input: Readonly<TerminalInput>) => boolean;\n remove?: false;\n} & InputDecision;\nexport type InputBindingOverride = InputBinding | { id: string; remove: true };\nexport interface InputPolicyOptions {\n inputBindings?: readonly InputBindingOverride[];\n onInput?: InputInterceptor;\n actions?: Readonly<Record<string, InputActionHandler>>;\n}\n/** Built-ins have typed arguments/results; custom names and callbacks own their argument validation. */\nexport interface RunTerminalAction {\n (action: \"copySelection\", args?: CopySelectionOptions, input?: TerminalInput): Promise<string>;\n (action: \"pasteClipboard\", args?: undefined, input?: TerminalInput): Promise<string>;\n (action: \"copyOrPaste\", args?: undefined, input?: TerminalInput): Promise<string | undefined>;\n (action: \"clearSelection\" | \"scrollToLive\", args?: undefined, input?: TerminalInput): Promise<void>;\n (action: \"scrollLines\", args: number, input?: TerminalInput): Promise<void>;\n <Name extends string>(action: Name extends TerminalActionName ? never : Name,\n args?: unknown, input?: TerminalInput): Promise<unknown>;\n (action: InputActionHandler, args?: unknown, input?: TerminalInput): Promise<unknown>;\n}\nexport interface SelectionRectangle { left: number; top: number; width: number; height: number }\nexport interface SelectionUIState {\n readonly selection: Readonly<TerminalSelection>;\n readonly viewport: Readonly<TerminalViewport>;\n readonly geometry: Readonly<TerminalGeometry>;\n readonly canvasSize: Readonly<TerminalSize>;\n readonly connected: boolean;\n readonly readOnly: boolean;\n}\n/** A frozen snapshot; preventDefault() synchronously to replace the built-in Copy button. */\nexport interface SelectionUIDetail extends SelectionUIState {\n readonly overlay: HTMLDivElement;\n readonly signal: AbortSignal;\n readonly runAction: RunTerminalAction;\n readonly rects: readonly Readonly<SelectionRectangle>[];\n}\nexport type SelectionUIEvent = CustomEvent<SelectionUIDetail>;\nexport interface WebTerminalOptions extends InputPolicyOptions {\n url: string | URL;\n /** Optional module-worker entry, resolved against the page URL. Defaults to the bundled worker. */\n workerUrl?: string | URL;\n signal?: AbortSignal;\n scale?: number | \"auto\";\n font?: TerminalFont;\n sizing?: TerminalSizing;\n label?: string;\n readOnly?: boolean;\n onStatus?: (message: string, level: TerminalStatusLevel) => void;\n onGeometry?: (geometry: TerminalGeometry) => void;\n onSizingChange?: (sizing: TerminalSizingState) => void;\n onRoleChange?: (peer: TerminalPeer) => void;\n onStats?: (stats: TerminalStats, text: string | undefined) => void;\n onViewportChange?: (viewport: TerminalViewport) => void;\n onSelectionChange?: (selection: TerminalSelection) => void;\n onInputError?: (error: Error) => void;\n /** Must return undefined synchronously; async handlers cannot claim default UI ownership. */\n onSelectionUI?: (event: SelectionUIEvent) => undefined;\n}\n/** Owns only the appended element and browser connection, not the server terminal. */\nexport interface WebTerminalHandle {\n readonly element: HTMLDivElement;\n readonly geometry: TerminalGeometry;\n readonly peer: TerminalPeer;\n readonly connected: boolean;\n readonly stats: TerminalStats;\n readonly screenText: string;\n readonly sizing: TerminalSizingState;\n readonly inputBindings: InputBinding[];\n readonly inputContext: TerminalInputContext;\n readonly viewport: TerminalViewport;\n readonly selection: TerminalSelection;\n runAction: RunTerminalAction;\n scrollLines(delta: number): void;\n scrollToLive(): void;\n clearSelection(): void;\n refreshSelectionUI(): void;\n copySelection(options?: CopySelectionOptions): Promise<string>;\n paste(text: string): void;\n pasteClipboard(): Promise<string>;\n focus(): void;\n requestPrimary(): void;\n resize(columns: number, rows: number): void;\n setSizing(sizing: TerminalSizing): void;\n resync(): void;\n dispose(): void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["/** Logical terminal dimensions, confirmed by the producer rather than reflowed locally. */\nexport interface TerminalGrid { columns: number; rows: number }\nexport interface TerminalSize { width: number; height: number }\nexport interface TerminalPoint { x: number; y: number }\nexport type MouseTrackingMode = 0 | 9 | 1000 | 1002 | 1003;\nexport interface TerminalGeometry extends TerminalGrid {\n cellWidth: number;\n cellHeight: number;\n mouseTracking: MouseTrackingMode;\n}\nexport interface TerminalPeer {\n id: string | null;\n primaryId: string | null;\n isPrimary: boolean;\n}\n/** Font size is an integer from 8 to 32; fixed grids allow 20–300 columns and 10–100 rows. */\nexport type TerminalSizing =\n | { mode: \"auto\"; fontSize?: number }\n | { mode: \"fixed\"; fontSize?: number; columns: number; rows: number };\nexport type TerminalSizingState =\n | { mode: \"auto\"; fontSize: number }\n | { mode: \"fixed\"; fontSize: number; columns: number; rows: number };\nexport interface TerminalFontFace { url: string; weight?: string; style?: string }\n/** Without faces, a non-generic family must be installed locally in the worker's environment. */\nexport interface TerminalFont { family: string; faces?: readonly TerminalFontFace[] }\nexport type TerminalBuffer = \"main\" | \"alternate\";\nexport type SelectionMode = \"character\" | \"word\" | \"line\" | \"rectangle\";\nexport interface SelectionRange { row: number; startColumn: number; endColumn: number }\nexport type TerminalViewport = (\n | { available: true; generation: string; buffer: TerminalBuffer; totalRows: number;\n liveTop: number; top: number; requestId: number; rowIds: readonly string[]; revision: number }\n | { available: false; generation?: undefined; buffer?: undefined; totalRows?: undefined;\n liveTop?: undefined; top?: undefined; requestId?: undefined; rowIds?: readonly string[]; revision?: undefined }\n) & { following: boolean; pending: boolean; followTail: boolean; offset: number };\nexport type TerminalSelection = (\n | { status: \"valid\"; text: string; requestId: number; revision: number }\n | { status: \"none\" | \"invalidated\"; text: null; requestId: number; revision: number }\n | { status: \"pending\"; text: null; requestId: number; revision?: undefined }\n | { status: \"unavailable\"; text: null; requestId?: undefined; revision?: undefined }\n) & {\n mode: SelectionMode;\n ranges: readonly Readonly<SelectionRange>[];\n canExtend?: boolean;\n message: string;\n active: boolean;\n pending: boolean;\n copying: boolean;\n copyError: string;\n};\nexport type TerminalStatusLevel = \"info\" | \"ready\" | \"error\";\n/** Native WebSocket close details, not an assertion that the terminal workload completed. */\nexport interface TerminalCloseDetails {\n /** RFC 6455 status reported by the browser, including 1006 for abnormal loss without a close frame. */\n readonly code: number;\n /** Peer-provided close reason, or \"\". Treat as untrusted text. */\n readonly reason: string;\n /** Whether the browser observed a clean WebSocket closing handshake, not workload success. */\n readonly wasClean: boolean;\n}\nexport type TerminalRendererKind = \"webgpu\" | \"webgl2\";\n/** Auto prefers WebGPU and falls back to WebGL2 for capability/device acquisition failures. */\nexport type TerminalRendererPreference = \"auto\" | TerminalRendererKind;\n/** Metrics are initially empty; individual fields appear as initialization and presentation proceed. */\nexport interface TerminalStats {\n /** Active backend; absent until renderer initialization completes. */\n renderer?: TerminalRendererKind;\n /** Why auto selected WebGL2 instead of WebGPU; absent for explicit selection or WebGPU. */\n rendererFallbackReason?: string;\n revision?: number; fullFrames?: number; frames?: number; presentations?: number;\n changedCells?: number; lastChangedCells?: number; discardedFrames?: number;\n imageCount?: number; textureBytes?: number; atlasGlyphs?: number; atlasBytes?: number;\n bytesReceived?: number; imageUploadBytes?: number; imagePayloadBytes?: number;\n gpu?: \"initializing\" | \"ready\" | \"error\" | \"stopped\"; connected?: boolean; warnings?: readonly string[];\n fps?: number; receivedKBps?: number; workloadMBps?: number;\n captureMs?: number; rendererCpuMs?: number; preparationCpuMs?: number;\n workloadBytes?: number; outputBatches?: number; serverElapsedMs?: number;\n quads?: number; drawCalls?: number; columns?: number; rows?: number; mouseTracking?: MouseTrackingMode;\n peer?: TerminalPeer; fontFamily?: string; rasterScale?: number; backingScale?: number;\n backingWidth?: number; backingHeight?: number; atlasRebuilds?: number;\n glyphUploadBytes?: number; instanceBufferBytes?: number;\n}\nexport interface InputModifiers { ctrl: boolean; alt: boolean; shift: boolean; meta: boolean }\nexport type PointerButton = \"left\" | \"middle\" | \"right\";\n/** Input intents contain no browser event. Returning a route controls browser cancellation. */\nexport type TerminalInput =\n | ({ type: \"key\"; key: string; code: string; repeat: boolean } & InputModifiers)\n | ({ type: \"pointer\"; button: PointerButton; point: Readonly<TerminalPoint> } & InputModifiers)\n | ({ type: \"wheel\"; deltaX: number; deltaY: number; deltaMode: number;\n point: Readonly<TerminalPoint> | null } & InputModifiers)\n | { type: \"paste\" | \"text\"; text: string };\nexport type InputRouteValue = \"continue\" | \"consume\" | \"application\" | \"browser\";\nexport type TerminalActionName = \"copySelection\" | \"pasteClipboard\" | \"copyOrPaste\"\n | \"clearSelection\" | \"scrollToLive\" | \"scrollLines\";\nexport interface CopySelectionOptions { clear?: boolean }\nexport interface TerminalInputContext {\n readonly terminal: WebTerminalHandle;\n readonly selection: TerminalSelection;\n readonly viewport: TerminalViewport;\n readonly buffer: TerminalBuffer | null;\n readonly mouseCaptured: boolean;\n readonly historical: boolean;\n readonly readOnly: boolean;\n readonly connected: boolean;\n readonly peer: TerminalPeer;\n}\n/** Custom actions validate their own arguments and may complete asynchronously. */\nexport type InputActionHandler =\n (context: TerminalInputContext, args: unknown, input: Readonly<TerminalInput> | undefined) => unknown;\nexport type InputDecision =\n | { route: InputRouteValue; action?: never; args?: never }\n | { action: string | InputActionHandler; args?: unknown; route?: never };\nexport type InputInterceptor =\n (input: Readonly<TerminalInput>, context: TerminalInputContext) => InputRouteValue | InputDecision | undefined;\nexport type InputBinding = {\n id: string;\n match: (input: Readonly<TerminalInput>, context: TerminalInputContext) => boolean;\n when?: (context: TerminalInputContext, input: Readonly<TerminalInput>) => boolean;\n remove?: false;\n} & InputDecision;\nexport type InputBindingOverride = InputBinding | { id: string; remove: true };\nexport interface InputPolicyOptions {\n inputBindings?: readonly InputBindingOverride[];\n onInput?: InputInterceptor;\n actions?: Readonly<Record<string, InputActionHandler>>;\n}\n/** Built-ins have typed arguments/results; custom names and callbacks own their argument validation. */\nexport interface RunTerminalAction {\n (action: \"copySelection\", args?: CopySelectionOptions, input?: TerminalInput): Promise<string>;\n (action: \"pasteClipboard\", args?: undefined, input?: TerminalInput): Promise<string>;\n (action: \"copyOrPaste\", args?: undefined, input?: TerminalInput): Promise<string | undefined>;\n (action: \"clearSelection\" | \"scrollToLive\", args?: undefined, input?: TerminalInput): Promise<void>;\n (action: \"scrollLines\", args: number, input?: TerminalInput): Promise<void>;\n <Name extends string>(action: Name extends TerminalActionName ? never : Name,\n args?: unknown, input?: TerminalInput): Promise<unknown>;\n (action: InputActionHandler, args?: unknown, input?: TerminalInput): Promise<unknown>;\n}\nexport interface SelectionRectangle { left: number; top: number; width: number; height: number }\nexport interface SelectionUIState {\n readonly selection: Readonly<TerminalSelection>;\n readonly viewport: Readonly<TerminalViewport>;\n readonly geometry: Readonly<TerminalGeometry>;\n readonly canvasSize: Readonly<TerminalSize>;\n readonly connected: boolean;\n readonly readOnly: boolean;\n}\n/** A frozen snapshot; preventDefault() synchronously to replace the built-in Copy button. */\nexport interface SelectionUIDetail extends SelectionUIState {\n readonly overlay: HTMLDivElement;\n readonly signal: AbortSignal;\n readonly runAction: RunTerminalAction;\n readonly rects: readonly Readonly<SelectionRectangle>[];\n}\nexport type SelectionUIEvent = CustomEvent<SelectionUIDetail>;\n/** Application-reported OSC 9;4 indicator, independent of shell execution. */\nexport type TerminalProgressState = \"none\" | \"normal\" | \"error\" | \"indeterminate\" | \"warning\";\n/** Immutable current progress; a hidden or indeterminate indicator has no percentage. */\nexport interface TerminalProgress {\n readonly state: TerminalProgressState;\n readonly percentage: number | null;\n}\n/** Last reported OSC 133 phase. Unknown does not mean idle; commandLine is not execution. */\nexport type TerminalShellIntegrationPhase = \"unknown\" | \"prompt\" | \"commandLine\" | \"executing\" | \"finished\";\n/** Current shell phase and latest reported completion status, not command history. */\nexport interface TerminalShellIntegration {\n readonly phase: TerminalShellIntegrationPhase;\n /** Null means no reported status, not success. Preserved across the next prompt/command. */\n readonly lastExitCode: number | null;\n}\nexport interface WebTerminalOptions extends InputPolicyOptions {\n url: string | URL;\n /** Optional module-worker entry, resolved against the page URL. Defaults to the bundled worker. */\n workerUrl?: string | URL;\n signal?: AbortSignal;\n scale?: number | \"auto\";\n /** Mount-time backend selection. Defaults to auto; explicit modes never fall back. */\n renderer?: TerminalRendererPreference;\n font?: TerminalFont;\n sizing?: TerminalSizing;\n label?: string;\n /** Initial per-view input policy. Change it later with setReadOnly; not a server authorization boundary. */\n readOnly?: boolean;\n onStatus?: (message: string, level: TerminalStatusLevel) => void;\n /**\n * Receives the native WebSocket close details once, including connection failures and closes\n * before the first frame. The view is disconnected before this callback; a pending mount\n * rejects after notification. No callback is synthesized for abort, disposal, initialization\n * failure, or mount timeout, and none runs after disposal. This client never reconnects\n * automatically. Interpret application close codes in the host; even 1000 is not proof of\n * workload completion. Callback exceptions reach the host and are not retried.\n */\n onClose?: (details: TerminalCloseDetails) => void;\n onGeometry?: (geometry: TerminalGeometry) => void;\n onSizingChange?: (sizing: TerminalSizingState) => void;\n onRoleChange?: (peer: TerminalPeer) => void;\n /**\n * Receives the first authoritative presented title (including \"\") before mount resolves,\n * then distinct presented changes. The title getter is updated first. Titles are untrusted\n * text; render with textContent, not HTML. No notifications after disposal.\n */\n onTitleChange?: (title: string) => void;\n /**\n * Receives the first authoritative presented progress before mount resolves, then distinct\n * presented changes. Both activity getters update before either callback. Intermediate\n * states may coalesce; this is not a callback for every OSC sequence. None hides the indicator.\n * No notifications after disposal; connection loss does not manufacture a progress clear.\n */\n onProgressChange?: (progress: TerminalProgress) => void;\n /**\n * Receives the first authoritative presented shell state before mount resolves, then distinct\n * presented changes. This is not a lossless command-start/finish stream: entire commands may\n * occur between frames. Replays provide current state, never synthetic command executions.\n */\n onShellIntegrationChange?: (shellIntegration: TerminalShellIntegration) => void;\n onStats?: (stats: TerminalStats, text: string | undefined) => void;\n onViewportChange?: (viewport: TerminalViewport) => void;\n onSelectionChange?: (selection: TerminalSelection) => void;\n onInputError?: (error: Error) => void;\n /** Must return undefined synchronously; async handlers cannot claim default UI ownership. */\n onSelectionUI?: (event: SelectionUIEvent) => undefined;\n}\n/** Owns only the appended element and browser connection, not the server terminal. */\nexport interface WebTerminalHandle {\n readonly element: HTMLDivElement;\n readonly geometry: TerminalGeometry;\n readonly peer: TerminalPeer;\n readonly connected: boolean;\n /** Whether this view blocks application input, resize, and primary takeover. */\n readonly readOnly: boolean;\n /** Current presented workload title, or \"\" when unset/cleared. Retained on disconnect/dispose. */\n readonly title: string;\n /** Current presented progress, initially none. Retained on disconnect/dispose; check connected. */\n readonly progress: TerminalProgress;\n /** Current presented shell state, initially unknown. Retained on disconnect/dispose. */\n readonly shellIntegration: TerminalShellIntegration;\n readonly stats: TerminalStats;\n readonly screenText: string;\n readonly sizing: TerminalSizingState;\n readonly inputBindings: InputBinding[];\n readonly inputContext: TerminalInputContext;\n readonly viewport: TerminalViewport;\n readonly selection: TerminalSelection;\n runAction: RunTerminalAction;\n scrollLines(delta: number): void;\n scrollToLive(): void;\n clearSelection(): void;\n refreshSelectionUI(): void;\n copySelection(options?: CopySelectionOptions): Promise<string>;\n paste(text: string): void;\n pasteClipboard(): Promise<string>;\n /**\n * Changes this view's input policy without remounting or changing peer roles.\n * Output, history, selection and copying remain available. Cancels active gestures,\n * pending composition and clipboard paste; already dispatched commands cannot be recalled.\n * Hosts must separately enforce permissions on their per-view Hwt1PresentationAdapter.\n */\n setReadOnly(readOnly: boolean): void;\n focus(): void;\n requestPrimary(): void;\n resize(columns: number, rows: number): void;\n setSizing(sizing: TerminalSizing): void;\n resync(): void;\n dispose(): void;\n}\n"]}
|
package/dist/web-terminal.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CopySelectionOptions, InputActionHandler, InputBinding, TerminalActionName, TerminalGeometry, TerminalInput, TerminalInputContext, TerminalPeer, TerminalSelection, TerminalSizing, TerminalSizingState, TerminalStats, TerminalViewport, WebTerminalHandle, WebTerminalOptions } from "./types.js";
|
|
1
|
+
import type { CopySelectionOptions, InputActionHandler, InputBinding, TerminalActionName, TerminalGeometry, TerminalInput, TerminalInputContext, TerminalPeer, TerminalSelection, TerminalSizing, TerminalSizingState, TerminalStats, TerminalViewport, TerminalProgress, TerminalShellIntegration, WebTerminalHandle, WebTerminalOptions } from "./types.js";
|
|
2
2
|
export { InputRoute, TerminalAction, defaultInputBindings } from "./input-policy.js";
|
|
3
3
|
/**
|
|
4
4
|
* First-party HWT1 client. Owns only the element it appends, not the caller's
|
|
@@ -13,6 +13,11 @@ export declare class WebTerminal implements WebTerminalHandle {
|
|
|
13
13
|
get geometry(): TerminalGeometry;
|
|
14
14
|
get peer(): TerminalPeer;
|
|
15
15
|
get connected(): boolean;
|
|
16
|
+
get readOnly(): boolean;
|
|
17
|
+
/** Current presented workload title; retained on disconnect/dispose. Treat as untrusted text. */
|
|
18
|
+
get title(): string;
|
|
19
|
+
get progress(): TerminalProgress;
|
|
20
|
+
get shellIntegration(): TerminalShellIntegration;
|
|
16
21
|
get stats(): TerminalStats;
|
|
17
22
|
get screenText(): string;
|
|
18
23
|
get sizing(): TerminalSizingState;
|
|
@@ -37,6 +42,8 @@ export declare class WebTerminal implements WebTerminalHandle {
|
|
|
37
42
|
/** Sends an explicit paste through the producer's mode-aware input encoder. */
|
|
38
43
|
paste(text: string): void;
|
|
39
44
|
pasteClipboard(): Promise<string>;
|
|
45
|
+
/** Changes per-view input policy without reconnecting; server authorization remains host-owned. */
|
|
46
|
+
setReadOnly(readOnly: boolean): void;
|
|
40
47
|
focus(): void;
|
|
41
48
|
/** Request HMP1 primary explicitly; peer notifications confirm the result. */
|
|
42
49
|
requestPrimary(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-terminal.d.ts","sourceRoot":"","sources":["../src/web-terminal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web-terminal.d.ts","sourceRoot":"","sources":["../src/web-terminal.ts"],"names":[],"mappings":"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"}
|