@floegence/floeterm-terminal-web 0.14.0 → 0.15.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 +78 -445
- package/dist/core/TerminalInputBridge.d.ts +7 -3
- package/dist/core/TerminalInputBridge.d.ts.map +1 -1
- package/dist/core/TerminalInputBridge.js +63 -4
- package/dist/core/TerminalInputBridge.js.map +1 -1
- package/dist/entries/live.d.ts +4 -4
- package/dist/entries/live.d.ts.map +1 -1
- package/dist/entries/live.js +2 -2
- package/dist/entries/live.js.map +1 -1
- package/dist/entries/semantic.d.ts +9 -0
- package/dist/entries/semantic.d.ts.map +1 -0
- package/dist/entries/semantic.js +5 -0
- package/dist/entries/semantic.js.map +1 -0
- package/dist/entries/sessions.d.ts +1 -1
- package/dist/entries/sessions.d.ts.map +1 -1
- package/dist/index.d.ts +4 -26
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -16
- package/dist/index.js.map +1 -1
- package/dist/live/client.d.ts +4 -6
- package/dist/live/client.d.ts.map +1 -1
- package/dist/live/client.js +19 -72
- package/dist/live/client.js.map +1 -1
- package/dist/live/codec.d.ts +8 -21
- package/dist/live/codec.d.ts.map +1 -1
- package/dist/live/codec.js +79 -111
- package/dist/live/codec.js.map +1 -1
- package/dist/live/transport.d.ts +38 -18
- package/dist/live/transport.d.ts.map +1 -1
- package/dist/live/transport.js +59 -133
- package/dist/live/transport.js.map +1 -1
- package/dist/semantic/RendererSurface.d.ts +65 -0
- package/dist/semantic/RendererSurface.d.ts.map +1 -0
- package/dist/semantic/RendererSurface.js +566 -0
- package/dist/semantic/RendererSurface.js.map +1 -0
- package/dist/semantic/presentation.d.ts +97 -0
- package/dist/semantic/presentation.d.ts.map +1 -0
- package/dist/semantic/presentation.js +102 -0
- package/dist/semantic/presentation.js.map +1 -0
- package/dist/types.d.ts +13 -494
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -37
- package/dist/types.js.map +1 -1
- package/package.json +11 -19
- package/dist/checkpoint/GhosttyCheckpoint.worker.d.ts +0 -2
- package/dist/checkpoint/GhosttyCheckpoint.worker.d.ts.map +0 -1
- package/dist/checkpoint/GhosttyCheckpoint.worker.js +0 -9
- package/dist/checkpoint/GhosttyCheckpoint.worker.js.map +0 -1
- package/dist/checkpoint/GhosttyCheckpointActor.d.ts +0 -44
- package/dist/checkpoint/GhosttyCheckpointActor.d.ts.map +0 -1
- package/dist/checkpoint/GhosttyCheckpointActor.js +0 -284
- package/dist/checkpoint/GhosttyCheckpointActor.js.map +0 -1
- package/dist/checkpoint/GhosttyCheckpointEngine.d.ts +0 -62
- package/dist/checkpoint/GhosttyCheckpointEngine.d.ts.map +0 -1
- package/dist/checkpoint/GhosttyCheckpointEngine.js +0 -175
- package/dist/checkpoint/GhosttyCheckpointEngine.js.map +0 -1
- package/dist/checkpoint/GhosttyCheckpointWorkerRuntime.d.ts +0 -31
- package/dist/checkpoint/GhosttyCheckpointWorkerRuntime.d.ts.map +0 -1
- package/dist/checkpoint/GhosttyCheckpointWorkerRuntime.js +0 -112
- package/dist/checkpoint/GhosttyCheckpointWorkerRuntime.js.map +0 -1
- package/dist/core/PagedTerminalOutputCoordinator.d.ts +0 -130
- package/dist/core/PagedTerminalOutputCoordinator.d.ts.map +0 -1
- package/dist/core/PagedTerminalOutputCoordinator.js +0 -1197
- package/dist/core/PagedTerminalOutputCoordinator.js.map +0 -1
- package/dist/core/TerminalCore.d.ts +0 -286
- package/dist/core/TerminalCore.d.ts.map +0 -1
- package/dist/core/TerminalCore.js +0 -3566
- package/dist/core/TerminalCore.js.map +0 -1
- package/dist/core/TerminalOutputPipeline.d.ts +0 -86
- package/dist/core/TerminalOutputPipeline.d.ts.map +0 -1
- package/dist/core/TerminalOutputPipeline.js +0 -511
- package/dist/core/TerminalOutputPipeline.js.map +0 -1
- package/dist/core/TerminalRenderScheduler.d.ts +0 -45
- package/dist/core/TerminalRenderScheduler.d.ts.map +0 -1
- package/dist/core/TerminalRenderScheduler.js +0 -145
- package/dist/core/TerminalRenderScheduler.js.map +0 -1
- package/dist/core/TerminalScrollbarOverlay.d.ts +0 -63
- package/dist/core/TerminalScrollbarOverlay.d.ts.map +0 -1
- package/dist/core/TerminalScrollbarOverlay.js +0 -493
- package/dist/core/TerminalScrollbarOverlay.js.map +0 -1
- package/dist/entries/history.d.ts +0 -4
- package/dist/entries/history.d.ts.map +0 -1
- package/dist/entries/history.js +0 -2
- package/dist/entries/history.js.map +0 -1
- package/dist/entries/preload.d.ts +0 -3
- package/dist/entries/preload.d.ts.map +0 -1
- package/dist/entries/preload.js +0 -2
- package/dist/entries/preload.js.map +0 -1
- package/dist/fabric/BeamtermFabricRenderer.d.ts +0 -67
- package/dist/fabric/BeamtermFabricRenderer.d.ts.map +0 -1
- package/dist/fabric/BeamtermFabricRenderer.js +0 -659
- package/dist/fabric/BeamtermFabricRenderer.js.map +0 -1
- package/dist/fabric/TerminalFabricCoordinator.d.ts +0 -40
- package/dist/fabric/TerminalFabricCoordinator.d.ts.map +0 -1
- package/dist/fabric/TerminalFabricCoordinator.js +0 -141
- package/dist/fabric/TerminalFabricCoordinator.js.map +0 -1
- package/dist/fabric/TerminalLiveFabric.d.ts +0 -44
- package/dist/fabric/TerminalLiveFabric.d.ts.map +0 -1
- package/dist/fabric/TerminalLiveFabric.js +0 -117
- package/dist/fabric/TerminalLiveFabric.js.map +0 -1
- package/dist/fabric/types.d.ts +0 -152
- package/dist/fabric/types.d.ts.map +0 -1
- package/dist/fabric/types.js +0 -2
- package/dist/fabric/types.js.map +0 -1
- package/dist/internal/BeamtermResourceLoader.d.ts +0 -3
- package/dist/internal/BeamtermResourceLoader.d.ts.map +0 -1
- package/dist/internal/BeamtermResourceLoader.js +0 -14
- package/dist/internal/BeamtermResourceLoader.js.map +0 -1
- package/dist/internal/GhosttyCompatibilityVersion.d.ts +0 -2
- package/dist/internal/GhosttyCompatibilityVersion.d.ts.map +0 -1
- package/dist/internal/GhosttyCompatibilityVersion.js +0 -2
- package/dist/internal/GhosttyCompatibilityVersion.js.map +0 -1
- package/dist/internal/GhosttyScrollbackCompat.d.ts +0 -16
- package/dist/internal/GhosttyScrollbackCompat.d.ts.map +0 -1
- package/dist/internal/GhosttyScrollbackCompat.js +0 -43
- package/dist/internal/GhosttyScrollbackCompat.js.map +0 -1
- package/dist/internal/GhosttyScrollbarCompat.d.ts +0 -12
- package/dist/internal/GhosttyScrollbarCompat.d.ts.map +0 -1
- package/dist/internal/GhosttyScrollbarCompat.js +0 -160
- package/dist/internal/GhosttyScrollbarCompat.js.map +0 -1
- package/dist/internal/SequenceBuffer.d.ts +0 -19
- package/dist/internal/SequenceBuffer.d.ts.map +0 -1
- package/dist/internal/SequenceBuffer.js +0 -83
- package/dist/internal/SequenceBuffer.js.map +0 -1
- package/dist/internal/TerminalInitializationScheduler.d.ts +0 -38
- package/dist/internal/TerminalInitializationScheduler.d.ts.map +0 -1
- package/dist/internal/TerminalInitializationScheduler.js +0 -112
- package/dist/internal/TerminalInitializationScheduler.js.map +0 -1
- package/dist/internal/TerminalResourceLoader.d.ts +0 -40
- package/dist/internal/TerminalResourceLoader.d.ts.map +0 -1
- package/dist/internal/TerminalResourceLoader.js +0 -165
- package/dist/internal/TerminalResourceLoader.js.map +0 -1
- package/dist/internal/UnicodeSafeUrlProvider.d.ts +0 -17
- package/dist/internal/UnicodeSafeUrlProvider.d.ts.map +0 -1
- package/dist/internal/UnicodeSafeUrlProvider.js +0 -32
- package/dist/internal/UnicodeSafeUrlProvider.js.map +0 -1
- package/dist/internal/scheduleUiTurn.d.ts +0 -5
- package/dist/internal/scheduleUiTurn.d.ts.map +0 -1
- package/dist/internal/scheduleUiTurn.js +0 -37
- package/dist/internal/scheduleUiTurn.js.map +0 -1
- package/dist/manager/TerminalInstanceController.d.ts +0 -88
- package/dist/manager/TerminalInstanceController.d.ts.map +0 -1
- package/dist/manager/TerminalInstanceController.js +0 -1076
- package/dist/manager/TerminalInstanceController.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -3
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -11
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/history.d.ts +0 -2
- package/dist/utils/history.d.ts.map +0 -1
- package/dist/utils/history.js +0 -12
- package/dist/utils/history.js.map +0 -1
- package/dist/utils/xtermAutoResponseFilter.d.ts +0 -2
- package/dist/utils/xtermAutoResponseFilter.d.ts.map +0 -1
- package/dist/utils/xtermAutoResponseFilter.js +0 -109
- package/dist/utils/xtermAutoResponseFilter.js.map +0 -1
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
const toBigInt = (value, field) => {
|
|
2
|
-
if (!Number.isSafeInteger(value) || value < 0)
|
|
3
|
-
throw new Error(`${field} must be a non-negative safe integer`);
|
|
4
|
-
return BigInt(value);
|
|
5
|
-
};
|
|
6
|
-
const assertDigest = (value, field) => {
|
|
7
|
-
if (!/^[0-9a-f]{64}$/.test(value))
|
|
8
|
-
throw new Error(`${field} must be lowercase SHA-256`);
|
|
9
|
-
};
|
|
10
|
-
const sha256Hex = async (bytes) => {
|
|
11
|
-
const digest = await crypto.subtle.digest('SHA-256', bytes.slice().buffer);
|
|
12
|
-
return Array.from(new Uint8Array(digest), byte => byte.toString(16).padStart(2, '0')).join('');
|
|
13
|
-
};
|
|
14
|
-
const assertMetadataMatches = (metadata, checkpoint) => {
|
|
15
|
-
if (metadata.formatVersion !== checkpoint.formatVersion
|
|
16
|
-
|| metadata.cols !== checkpoint.cols
|
|
17
|
-
|| metadata.rows !== checkpoint.rows
|
|
18
|
-
|| metadata.historySequence !== BigInt(checkpoint.coveredThroughSequence)
|
|
19
|
-
|| metadata.geometryGeneration !== BigInt(checkpoint.geometryGeneration)
|
|
20
|
-
|| metadata.parserEpoch !== BigInt(checkpoint.parserEpoch)) {
|
|
21
|
-
throw new Error('checkpoint metadata does not match its requested coordinates');
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
export class GhosttyCheckpointEngine {
|
|
25
|
-
constructor(runtime, options) {
|
|
26
|
-
this.disposed = false;
|
|
27
|
-
if (!Number.isSafeInteger(options.parserEpoch) || options.parserEpoch <= 0) {
|
|
28
|
-
throw new Error('checkpoint parser epoch must be positive');
|
|
29
|
-
}
|
|
30
|
-
if (!Number.isSafeInteger(options.cols) || options.cols <= 0 || !Number.isSafeInteger(options.rows) || options.rows <= 0) {
|
|
31
|
-
throw new Error('checkpoint engine dimensions must be positive safe integers');
|
|
32
|
-
}
|
|
33
|
-
if (!Number.isSafeInteger(options.initialSequence ?? 0) || (options.initialSequence ?? 0) < 0) {
|
|
34
|
-
throw new Error('checkpoint engine initial sequence must be a non-negative safe integer');
|
|
35
|
-
}
|
|
36
|
-
if (options.checkpoint && options.initialSequence !== undefined) {
|
|
37
|
-
throw new Error('checkpoint and initial sequence are mutually exclusive');
|
|
38
|
-
}
|
|
39
|
-
this.runtime = runtime;
|
|
40
|
-
this.parserEpoch = options.parserEpoch;
|
|
41
|
-
this.terminal = runtime.createTerminal(options.checkpoint?.cols ?? options.cols, options.checkpoint?.rows ?? options.rows);
|
|
42
|
-
this.queuedThroughSequence = options.checkpoint?.coveredThroughSequence ?? options.initialSequence ?? 0;
|
|
43
|
-
this.geometryGeneration = options.checkpoint?.geometryGeneration ?? 0;
|
|
44
|
-
this.cols = options.checkpoint?.cols ?? options.cols;
|
|
45
|
-
this.rows = options.checkpoint?.rows ?? options.rows;
|
|
46
|
-
if (options.checkpoint) {
|
|
47
|
-
assertDigest(options.checkpoint.stateDigestSha256, 'checkpoint state digest');
|
|
48
|
-
const coordinates = {
|
|
49
|
-
historySequence: toBigInt(options.checkpoint.coveredThroughSequence, 'checkpoint history sequence'),
|
|
50
|
-
geometryGeneration: toBigInt(options.checkpoint.geometryGeneration, 'checkpoint geometry generation'),
|
|
51
|
-
parserEpoch: toBigInt(options.checkpoint.parserEpoch, 'checkpoint parser epoch'),
|
|
52
|
-
};
|
|
53
|
-
const metadata = this.terminal.validateCheckpoint(options.checkpoint.bytes);
|
|
54
|
-
assertMetadataMatches(metadata, options.checkpoint);
|
|
55
|
-
this.terminal.restoreCheckpoint(options.checkpoint.bytes.slice(), coordinates);
|
|
56
|
-
if (this.terminal.getStateDigest() !== options.checkpoint.stateDigestSha256) {
|
|
57
|
-
throw new Error('checkpoint restore state digest mismatch');
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
append(chunks) {
|
|
62
|
-
this.assertLive();
|
|
63
|
-
let sequence = this.queuedThroughSequence;
|
|
64
|
-
let geometryGeneration = this.geometryGeneration;
|
|
65
|
-
let cols = this.cols;
|
|
66
|
-
let rows = this.rows;
|
|
67
|
-
let releasedBytes = 0;
|
|
68
|
-
for (const chunk of chunks) {
|
|
69
|
-
if (!Number.isSafeInteger(chunk.sequence) || chunk.sequence !== sequence + 1) {
|
|
70
|
-
throw new Error(`checkpoint engine sequence gap: got ${chunk.sequence}, want ${sequence + 1}`);
|
|
71
|
-
}
|
|
72
|
-
if (!Number.isSafeInteger(chunk.geometryGeneration) || chunk.geometryGeneration <= 0) {
|
|
73
|
-
throw new Error('checkpoint engine geometry generation is invalid');
|
|
74
|
-
}
|
|
75
|
-
if (chunk.geometryGeneration < geometryGeneration) {
|
|
76
|
-
throw new Error('checkpoint engine geometry generation moved backwards');
|
|
77
|
-
}
|
|
78
|
-
if (chunk.geometryGeneration === geometryGeneration && geometryGeneration > 0 && (chunk.cols !== cols || chunk.rows !== rows)) {
|
|
79
|
-
throw new Error('checkpoint engine geometry generation has conflicting dimensions');
|
|
80
|
-
}
|
|
81
|
-
if (chunk.geometryGeneration > geometryGeneration) {
|
|
82
|
-
if (!Number.isSafeInteger(chunk.cols) || chunk.cols <= 0 || !Number.isSafeInteger(chunk.rows) || chunk.rows <= 0) {
|
|
83
|
-
throw new Error('checkpoint engine geometry dimensions are invalid');
|
|
84
|
-
}
|
|
85
|
-
geometryGeneration = chunk.geometryGeneration;
|
|
86
|
-
cols = chunk.cols;
|
|
87
|
-
rows = chunk.rows;
|
|
88
|
-
this.terminal.resize(cols, rows);
|
|
89
|
-
}
|
|
90
|
-
if (chunk.data.byteLength === 0)
|
|
91
|
-
throw new Error('checkpoint engine output chunk is empty');
|
|
92
|
-
this.terminal.write(chunk.data.slice());
|
|
93
|
-
sequence = chunk.sequence;
|
|
94
|
-
releasedBytes += chunk.data.byteLength;
|
|
95
|
-
}
|
|
96
|
-
this.queuedThroughSequence = sequence;
|
|
97
|
-
this.geometryGeneration = geometryGeneration;
|
|
98
|
-
this.cols = cols;
|
|
99
|
-
this.rows = rows;
|
|
100
|
-
return { throughSequence: sequence, releasedBytes };
|
|
101
|
-
}
|
|
102
|
-
async capture(targetSequence) {
|
|
103
|
-
this.assertLive();
|
|
104
|
-
if (!Number.isSafeInteger(targetSequence) || targetSequence <= 0 || targetSequence !== this.queuedThroughSequence) {
|
|
105
|
-
throw new Error(`checkpoint engine target must equal queued sequence ${this.queuedThroughSequence}`);
|
|
106
|
-
}
|
|
107
|
-
const coordinates = {
|
|
108
|
-
historySequence: toBigInt(targetSequence, 'checkpoint history sequence'),
|
|
109
|
-
geometryGeneration: toBigInt(this.geometryGeneration, 'checkpoint geometry generation'),
|
|
110
|
-
parserEpoch: toBigInt(this.parserEpoch, 'checkpoint parser epoch'),
|
|
111
|
-
};
|
|
112
|
-
const captured = this.terminal.captureCheckpoint(coordinates);
|
|
113
|
-
assertMetadataMatches(captured.metadata, {
|
|
114
|
-
formatVersion: 1,
|
|
115
|
-
engineId: 'floegence-ghostty-web',
|
|
116
|
-
coveredThroughSequence: targetSequence,
|
|
117
|
-
geometryGeneration: this.geometryGeneration,
|
|
118
|
-
parserEpoch: this.parserEpoch,
|
|
119
|
-
cols: this.cols,
|
|
120
|
-
rows: this.rows,
|
|
121
|
-
checksumSha256: '0'.repeat(64),
|
|
122
|
-
stateDigestSha256: this.terminal.getStateDigest(),
|
|
123
|
-
bytes: captured.bytes,
|
|
124
|
-
});
|
|
125
|
-
const metadata = this.terminal.validateCheckpoint(captured.bytes);
|
|
126
|
-
assertMetadataMatches(metadata, {
|
|
127
|
-
formatVersion: 1,
|
|
128
|
-
engineId: 'floegence-ghostty-web',
|
|
129
|
-
coveredThroughSequence: targetSequence,
|
|
130
|
-
geometryGeneration: this.geometryGeneration,
|
|
131
|
-
parserEpoch: this.parserEpoch,
|
|
132
|
-
cols: this.cols,
|
|
133
|
-
rows: this.rows,
|
|
134
|
-
checksumSha256: '0'.repeat(64),
|
|
135
|
-
stateDigestSha256: this.terminal.getStateDigest(),
|
|
136
|
-
bytes: captured.bytes,
|
|
137
|
-
});
|
|
138
|
-
const liveDigest = this.terminal.getStateDigest();
|
|
139
|
-
assertDigest(liveDigest, 'live state digest');
|
|
140
|
-
const verifier = this.runtime.createTerminal(this.cols, this.rows);
|
|
141
|
-
try {
|
|
142
|
-
verifier.restoreCheckpoint(captured.bytes.slice(), coordinates);
|
|
143
|
-
if (verifier.getStateDigest() !== liveDigest) {
|
|
144
|
-
throw new Error('self-restore state digest mismatch');
|
|
145
|
-
}
|
|
146
|
-
const bytes = captured.bytes.slice();
|
|
147
|
-
return {
|
|
148
|
-
formatVersion: 1,
|
|
149
|
-
engineId: 'floegence-ghostty-web',
|
|
150
|
-
coveredThroughSequence: targetSequence,
|
|
151
|
-
geometryGeneration: this.geometryGeneration,
|
|
152
|
-
parserEpoch: this.parserEpoch,
|
|
153
|
-
cols: this.cols,
|
|
154
|
-
rows: this.rows,
|
|
155
|
-
checksumSha256: await sha256Hex(bytes),
|
|
156
|
-
stateDigestSha256: liveDigest,
|
|
157
|
-
bytes,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
finally {
|
|
161
|
-
verifier.free();
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
dispose() {
|
|
165
|
-
if (this.disposed)
|
|
166
|
-
return;
|
|
167
|
-
this.disposed = true;
|
|
168
|
-
this.terminal.free();
|
|
169
|
-
}
|
|
170
|
-
assertLive() {
|
|
171
|
-
if (this.disposed)
|
|
172
|
-
throw new Error('checkpoint engine is disposed');
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
//# sourceMappingURL=GhosttyCheckpointEngine.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GhosttyCheckpointEngine.js","sourceRoot":"","sources":["../../src/checkpoint/GhosttyCheckpointEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { GhosttyAuthoritativeCheckpoint, GhosttyCheckpointChunk } from './GhosttyCheckpointActor';
|
|
2
|
-
import { type GhosttyCheckpointEngineOptions, type GhosttyCheckpointRuntimeLike } from './GhosttyCheckpointEngine';
|
|
3
|
-
interface CheckpointEngineLike {
|
|
4
|
-
append(chunks: readonly GhosttyCheckpointChunk[]): {
|
|
5
|
-
throughSequence: number;
|
|
6
|
-
releasedBytes: number;
|
|
7
|
-
};
|
|
8
|
-
capture(targetSequence: number): Promise<GhosttyAuthoritativeCheckpoint>;
|
|
9
|
-
dispose(): void;
|
|
10
|
-
}
|
|
11
|
-
export interface GhosttyCheckpointWorkerRuntimeOptions {
|
|
12
|
-
loadRuntime?: () => Promise<GhosttyCheckpointRuntimeLike>;
|
|
13
|
-
createEngine?: (runtime: GhosttyCheckpointRuntimeLike, options: GhosttyCheckpointEngineOptions) => CheckpointEngineLike;
|
|
14
|
-
postMessage: (message: unknown, transfer?: Transferable[]) => void;
|
|
15
|
-
}
|
|
16
|
-
export declare class GhosttyCheckpointWorkerRuntime {
|
|
17
|
-
private readonly loadRuntime;
|
|
18
|
-
private readonly createEngine;
|
|
19
|
-
private readonly postMessage;
|
|
20
|
-
private engine;
|
|
21
|
-
private queue;
|
|
22
|
-
private failed;
|
|
23
|
-
private disposed;
|
|
24
|
-
constructor(options: GhosttyCheckpointWorkerRuntimeOptions);
|
|
25
|
-
handle(value: unknown): Promise<void>;
|
|
26
|
-
dispose(): void;
|
|
27
|
-
private dispatch;
|
|
28
|
-
private fail;
|
|
29
|
-
}
|
|
30
|
-
export {};
|
|
31
|
-
//# sourceMappingURL=GhosttyCheckpointWorkerRuntime.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GhosttyCheckpointWorkerRuntime.d.ts","sourceRoot":"","sources":["../../src/checkpoint/GhosttyCheckpointWorkerRuntime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,8BAA8B,EAC9B,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,EAClC,MAAM,2BAA2B,CAAC;AAEnC,UAAU,oBAAoB;IAC5B,MAAM,CAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,GAAG;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACtG,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACzE,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,qCAAqC;IACpD,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,4BAA4B,CAAC,CAAC;IAC1D,YAAY,CAAC,EAAE,CACb,OAAO,EAAE,4BAA4B,EACrC,OAAO,EAAE,8BAA8B,KACpC,oBAAoB,CAAC;IAC1B,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;CACpE;AAcD,qBAAa,8BAA8B;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8C;IAC1E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwD;IACrF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuD;IACnF,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,qCAAqC;IAM1D,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrC,OAAO,IAAI,IAAI;YAOD,QAAQ;IA0DtB,OAAO,CAAC,IAAI;CAOb"}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { Ghostty } from '@floegence/ghostty-web';
|
|
2
|
-
import { GhosttyCheckpointEngine, } from './GhosttyCheckpointEngine';
|
|
3
|
-
const sha256Hex = async (bytes) => {
|
|
4
|
-
const digest = await crypto.subtle.digest('SHA-256', bytes.slice().buffer);
|
|
5
|
-
return Array.from(new Uint8Array(digest), byte => byte.toString(16).padStart(2, '0')).join('');
|
|
6
|
-
};
|
|
7
|
-
const assertObject = (value) => {
|
|
8
|
-
if (!value || typeof value !== 'object')
|
|
9
|
-
throw new Error('checkpoint worker request must be an object');
|
|
10
|
-
return value;
|
|
11
|
-
};
|
|
12
|
-
const defaultLoadRuntime = async () => Ghostty.load();
|
|
13
|
-
export class GhosttyCheckpointWorkerRuntime {
|
|
14
|
-
constructor(options) {
|
|
15
|
-
this.engine = null;
|
|
16
|
-
this.queue = Promise.resolve();
|
|
17
|
-
this.failed = false;
|
|
18
|
-
this.disposed = false;
|
|
19
|
-
this.loadRuntime = options.loadRuntime ?? defaultLoadRuntime;
|
|
20
|
-
this.createEngine = options.createEngine ?? ((runtime, engineOptions) => new GhosttyCheckpointEngine(runtime, engineOptions));
|
|
21
|
-
this.postMessage = options.postMessage;
|
|
22
|
-
}
|
|
23
|
-
handle(value) {
|
|
24
|
-
const task = this.queue.then(async () => {
|
|
25
|
-
if (this.failed || this.disposed)
|
|
26
|
-
return;
|
|
27
|
-
await this.dispatch(value);
|
|
28
|
-
}).catch(error => {
|
|
29
|
-
this.fail(error instanceof Error ? error : new Error(String(error)));
|
|
30
|
-
});
|
|
31
|
-
this.queue = task;
|
|
32
|
-
return task;
|
|
33
|
-
}
|
|
34
|
-
dispose() {
|
|
35
|
-
if (this.disposed)
|
|
36
|
-
return;
|
|
37
|
-
this.disposed = true;
|
|
38
|
-
this.engine?.dispose();
|
|
39
|
-
this.engine = null;
|
|
40
|
-
}
|
|
41
|
-
async dispatch(value) {
|
|
42
|
-
const message = assertObject(value);
|
|
43
|
-
if (message.type === 'initialize') {
|
|
44
|
-
if (this.engine)
|
|
45
|
-
throw new Error('checkpoint worker is already initialized');
|
|
46
|
-
const cols = message.cols;
|
|
47
|
-
const rows = message.rows;
|
|
48
|
-
const parserEpoch = message.parserEpoch;
|
|
49
|
-
const initialSequence = message.initialSequence;
|
|
50
|
-
const checkpoint = message.checkpoint;
|
|
51
|
-
if (checkpoint) {
|
|
52
|
-
if (!(checkpoint.bytes instanceof Uint8Array) || checkpoint.bytes.byteLength === 0) {
|
|
53
|
-
throw new Error('checkpoint restore bytes are empty');
|
|
54
|
-
}
|
|
55
|
-
const checksum = await sha256Hex(checkpoint.bytes);
|
|
56
|
-
if (checksum !== checkpoint.checksumSha256) {
|
|
57
|
-
throw new Error('checkpoint restore checksum mismatch');
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
const runtime = await this.loadRuntime();
|
|
61
|
-
this.engine = this.createEngine?.(runtime, { cols, rows, parserEpoch, initialSequence, checkpoint }) ?? null;
|
|
62
|
-
if (!this.engine)
|
|
63
|
-
throw new Error('checkpoint worker engine creation failed');
|
|
64
|
-
this.postMessage({
|
|
65
|
-
type: 'ready',
|
|
66
|
-
parserEpoch,
|
|
67
|
-
historySequence: checkpoint?.coveredThroughSequence ?? initialSequence ?? 0,
|
|
68
|
-
}, undefined);
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
if (!this.engine)
|
|
72
|
-
throw new Error('checkpoint worker is not initialized');
|
|
73
|
-
if (message.type === 'append') {
|
|
74
|
-
if (!Array.isArray(message.chunks))
|
|
75
|
-
throw new Error('checkpoint worker append chunks are invalid');
|
|
76
|
-
const result = this.engine.append(message.chunks);
|
|
77
|
-
this.postMessage({ type: 'applied', ...result }, undefined);
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
if (message.type === 'capture') {
|
|
81
|
-
const requestId = message.requestId;
|
|
82
|
-
const targetSequence = message.targetSequence;
|
|
83
|
-
if (!Number.isSafeInteger(requestId) || requestId <= 0)
|
|
84
|
-
throw new Error('checkpoint request id is invalid');
|
|
85
|
-
const checkpoint = await this.engine.capture(targetSequence);
|
|
86
|
-
this.postMessage({
|
|
87
|
-
type: 'checkpoint',
|
|
88
|
-
requestId,
|
|
89
|
-
formatVersion: checkpoint.formatVersion,
|
|
90
|
-
historySequence: checkpoint.coveredThroughSequence,
|
|
91
|
-
geometryGeneration: checkpoint.geometryGeneration,
|
|
92
|
-
parserEpoch: checkpoint.parserEpoch,
|
|
93
|
-
cols: checkpoint.cols,
|
|
94
|
-
rows: checkpoint.rows,
|
|
95
|
-
checksumSha256: checkpoint.checksumSha256,
|
|
96
|
-
stateDigestSha256: checkpoint.stateDigestSha256,
|
|
97
|
-
bytes: checkpoint.bytes,
|
|
98
|
-
}, [checkpoint.bytes.buffer]);
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
throw new Error('unknown checkpoint worker request');
|
|
102
|
-
}
|
|
103
|
-
fail(error) {
|
|
104
|
-
if (this.failed || this.disposed)
|
|
105
|
-
return;
|
|
106
|
-
this.failed = true;
|
|
107
|
-
this.engine?.dispose();
|
|
108
|
-
this.engine = null;
|
|
109
|
-
this.postMessage({ type: 'error', message: error.message }, undefined);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=GhosttyCheckpointWorkerRuntime.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GhosttyCheckpointWorkerRuntime.js","sourceRoot":"","sources":["../../src/checkpoint/GhosttyCheckpointWorkerRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import type { TerminalOutputPipelineChunk, TerminalOutputPipelineScheduler } from './TerminalOutputPipeline.js';
|
|
2
|
-
import type { GhosttyAuthoritativeCheckpoint } from '../checkpoint/GhosttyCheckpointActor.js';
|
|
3
|
-
export type PagedTerminalOutputState = 'idle' | 'initial-replay' | 'live' | 'catching-up' | 'retry-wait' | 'failed' | 'disposed';
|
|
4
|
-
export interface PagedTerminalHistoryRequest {
|
|
5
|
-
startSequence: number;
|
|
6
|
-
endSequence?: number;
|
|
7
|
-
historyGeneration?: number;
|
|
8
|
-
cursor?: string | number;
|
|
9
|
-
maxBytes?: number;
|
|
10
|
-
signal: AbortSignal;
|
|
11
|
-
}
|
|
12
|
-
export interface PagedTerminalHistoryPage {
|
|
13
|
-
chunks: readonly TerminalOutputPipelineChunk[];
|
|
14
|
-
checkpoint?: GhosttyAuthoritativeCheckpoint;
|
|
15
|
-
deltaStartSequence?: number;
|
|
16
|
-
hasMore: boolean;
|
|
17
|
-
nextCursor?: string | number;
|
|
18
|
-
firstAvailableSequence?: number;
|
|
19
|
-
firstRetainedSequence?: number;
|
|
20
|
-
coveredThroughSequence: number;
|
|
21
|
-
snapshotEndSequence?: number;
|
|
22
|
-
historyGeneration?: number;
|
|
23
|
-
historyReset?: boolean;
|
|
24
|
-
historyTruncated?: boolean;
|
|
25
|
-
coveredBytes?: number;
|
|
26
|
-
totalBytes?: number;
|
|
27
|
-
}
|
|
28
|
-
export interface PreparePagedTerminalHistoryOptions {
|
|
29
|
-
fetchPage(request: PagedTerminalHistoryRequest): Promise<PagedTerminalHistoryPage>;
|
|
30
|
-
startSequence?: number;
|
|
31
|
-
maxBytes?: number;
|
|
32
|
-
signal?: AbortSignal;
|
|
33
|
-
yieldControl?: () => void | Promise<void>;
|
|
34
|
-
}
|
|
35
|
-
export interface PreparedPagedTerminalHistory {
|
|
36
|
-
readonly chunks: readonly Readonly<TerminalOutputPipelineChunk>[];
|
|
37
|
-
readonly requestedStartSequence: number;
|
|
38
|
-
readonly firstRetainedSequence: number;
|
|
39
|
-
readonly coveredThroughSequence: number;
|
|
40
|
-
readonly snapshotEndSequence: number;
|
|
41
|
-
readonly historyGeneration: number;
|
|
42
|
-
readonly byteLength: number;
|
|
43
|
-
readonly pageCount: number;
|
|
44
|
-
readonly complete: boolean;
|
|
45
|
-
}
|
|
46
|
-
export interface PagedTerminalCompleteAttachOptions {
|
|
47
|
-
preparedHistory?: PreparedPagedTerminalHistory;
|
|
48
|
-
}
|
|
49
|
-
export type PagedTerminalPreparedHistoryStatus = 'not-provided' | 'accepted' | 'rejected';
|
|
50
|
-
export interface PagedTerminalPreparedHistoryOutcome {
|
|
51
|
-
readonly status: PagedTerminalPreparedHistoryStatus;
|
|
52
|
-
readonly rebased: boolean;
|
|
53
|
-
}
|
|
54
|
-
export type PagedTerminalHistoryTruncationReason = 'history-evicted' | 'retained-live-overflow';
|
|
55
|
-
export type PagedTerminalOutputFailureCode = 'history_fetch_failed' | 'history_coverage_incomplete' | 'history_contract_missing' | 'history_contract_invalid' | 'history_checkpoint_missing' | 'history_checkpoint_invalid' | 'history_checkpoint_restore_failed' | 'retained_live_overflow' | 'history_evicted';
|
|
56
|
-
export interface PagedTerminalOutputFailure {
|
|
57
|
-
code: PagedTerminalOutputFailureCode;
|
|
58
|
-
phase: 'initial' | 'catch_up';
|
|
59
|
-
retryable: boolean;
|
|
60
|
-
attempt: number;
|
|
61
|
-
coveredSequence: number;
|
|
62
|
-
firstRetainedSequence?: number;
|
|
63
|
-
attachGeneration: number;
|
|
64
|
-
cause?: unknown;
|
|
65
|
-
}
|
|
66
|
-
export interface PagedTerminalOutputPolicy {
|
|
67
|
-
maxRetainedLiveChunks: number;
|
|
68
|
-
maxRetainedLiveBytes: number;
|
|
69
|
-
retryDelaysMs: readonly number[];
|
|
70
|
-
maxWriteBatchBytes: number;
|
|
71
|
-
}
|
|
72
|
-
export interface PagedTerminalOutputScheduler extends TerminalOutputPipelineScheduler {
|
|
73
|
-
setTimer(callback: () => void, delayMs: number): ReturnType<typeof setTimeout>;
|
|
74
|
-
clearTimer(handle: ReturnType<typeof setTimeout>): void;
|
|
75
|
-
}
|
|
76
|
-
export interface PagedTerminalOutputSnapshot {
|
|
77
|
-
state: PagedTerminalOutputState;
|
|
78
|
-
active: boolean;
|
|
79
|
-
baselineReady: boolean;
|
|
80
|
-
coveredThroughSequence: number;
|
|
81
|
-
retainedLiveChunks: number;
|
|
82
|
-
retainedLiveBytes: number;
|
|
83
|
-
retryAttempt: number;
|
|
84
|
-
retryScheduled: boolean;
|
|
85
|
-
failure: PagedTerminalOutputFailure | null;
|
|
86
|
-
/** @deprecated Use failure for stable recovery diagnostics. */
|
|
87
|
-
lastError: unknown;
|
|
88
|
-
attachGeneration: number;
|
|
89
|
-
disposed: boolean;
|
|
90
|
-
preparedHistoryOutcome?: PagedTerminalPreparedHistoryOutcome;
|
|
91
|
-
}
|
|
92
|
-
type PagedTerminalOutputWriter = (data: Uint8Array, chunks: readonly TerminalOutputPipelineChunk[]) => unknown | Promise<unknown>;
|
|
93
|
-
export interface PagedTerminalOutputCoordinatorOptions {
|
|
94
|
-
fetchPage(request: PagedTerminalHistoryRequest): Promise<PagedTerminalHistoryPage>;
|
|
95
|
-
write: PagedTerminalOutputWriter;
|
|
96
|
-
writeHistory?: PagedTerminalOutputWriter;
|
|
97
|
-
applyHistoryGeometry?: (geometry: Readonly<{
|
|
98
|
-
generation: number;
|
|
99
|
-
cols: number;
|
|
100
|
-
rows: number;
|
|
101
|
-
}>) => unknown | Promise<unknown>;
|
|
102
|
-
restoreCheckpoint?: (checkpoint: GhosttyAuthoritativeCheckpoint) => unknown | Promise<unknown>;
|
|
103
|
-
clear?: () => void;
|
|
104
|
-
transformChunk?: (chunk: TerminalOutputPipelineChunk) => Uint8Array | null;
|
|
105
|
-
isInteractive?: () => boolean;
|
|
106
|
-
onStateChange?: (snapshot: PagedTerminalOutputSnapshot) => void;
|
|
107
|
-
onHistoryTruncated?: (reason: PagedTerminalHistoryTruncationReason) => void;
|
|
108
|
-
policy?: Partial<PagedTerminalOutputPolicy>;
|
|
109
|
-
scheduler?: Partial<PagedTerminalOutputScheduler>;
|
|
110
|
-
}
|
|
111
|
-
export interface PagedTerminalOutputCoordinatorHandle {
|
|
112
|
-
attach(startSequence?: number): Promise<void>;
|
|
113
|
-
waitForBaseline(): Promise<PagedTerminalOutputSnapshot>;
|
|
114
|
-
pause(): Promise<PagedTerminalOutputSnapshot>;
|
|
115
|
-
pushLive(chunk: TerminalOutputPipelineChunk): void;
|
|
116
|
-
setActive(active: boolean): void;
|
|
117
|
-
clear(startSequence?: number): void;
|
|
118
|
-
retry(): void;
|
|
119
|
-
getSnapshot(): PagedTerminalOutputSnapshot;
|
|
120
|
-
dispose(): void;
|
|
121
|
-
}
|
|
122
|
-
export interface AtomicPagedTerminalOutputCoordinatorHandle extends PagedTerminalOutputCoordinatorHandle {
|
|
123
|
-
beginAttach(startSequence?: number): number;
|
|
124
|
-
completeAttach(attachGeneration: number, snapshotEndSequence?: number, options?: PagedTerminalCompleteAttachOptions): Promise<void>;
|
|
125
|
-
attach(startSequence?: number, snapshotEndSequence?: number, options?: PagedTerminalCompleteAttachOptions): Promise<void>;
|
|
126
|
-
}
|
|
127
|
-
export declare const preparePagedTerminalHistory: (options: PreparePagedTerminalHistoryOptions) => Promise<PreparedPagedTerminalHistory>;
|
|
128
|
-
export declare const createPagedTerminalOutputCoordinator: (options: PagedTerminalOutputCoordinatorOptions) => AtomicPagedTerminalOutputCoordinatorHandle;
|
|
129
|
-
export {};
|
|
130
|
-
//# sourceMappingURL=PagedTerminalOutputCoordinator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PagedTerminalOutputCoordinator.d.ts","sourceRoot":"","sources":["../../src/core/PagedTerminalOutputCoordinator.ts"],"names":[],"mappings":"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"}
|