@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.
Files changed (156) hide show
  1. package/README.md +78 -445
  2. package/dist/core/TerminalInputBridge.d.ts +7 -3
  3. package/dist/core/TerminalInputBridge.d.ts.map +1 -1
  4. package/dist/core/TerminalInputBridge.js +63 -4
  5. package/dist/core/TerminalInputBridge.js.map +1 -1
  6. package/dist/entries/live.d.ts +4 -4
  7. package/dist/entries/live.d.ts.map +1 -1
  8. package/dist/entries/live.js +2 -2
  9. package/dist/entries/live.js.map +1 -1
  10. package/dist/entries/semantic.d.ts +9 -0
  11. package/dist/entries/semantic.d.ts.map +1 -0
  12. package/dist/entries/semantic.js +5 -0
  13. package/dist/entries/semantic.js.map +1 -0
  14. package/dist/entries/sessions.d.ts +1 -1
  15. package/dist/entries/sessions.d.ts.map +1 -1
  16. package/dist/index.d.ts +4 -26
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +3 -16
  19. package/dist/index.js.map +1 -1
  20. package/dist/live/client.d.ts +4 -6
  21. package/dist/live/client.d.ts.map +1 -1
  22. package/dist/live/client.js +19 -72
  23. package/dist/live/client.js.map +1 -1
  24. package/dist/live/codec.d.ts +8 -21
  25. package/dist/live/codec.d.ts.map +1 -1
  26. package/dist/live/codec.js +79 -111
  27. package/dist/live/codec.js.map +1 -1
  28. package/dist/live/transport.d.ts +38 -18
  29. package/dist/live/transport.d.ts.map +1 -1
  30. package/dist/live/transport.js +59 -133
  31. package/dist/live/transport.js.map +1 -1
  32. package/dist/semantic/RendererSurface.d.ts +65 -0
  33. package/dist/semantic/RendererSurface.d.ts.map +1 -0
  34. package/dist/semantic/RendererSurface.js +566 -0
  35. package/dist/semantic/RendererSurface.js.map +1 -0
  36. package/dist/semantic/presentation.d.ts +97 -0
  37. package/dist/semantic/presentation.d.ts.map +1 -0
  38. package/dist/semantic/presentation.js +102 -0
  39. package/dist/semantic/presentation.js.map +1 -0
  40. package/dist/types.d.ts +13 -494
  41. package/dist/types.d.ts.map +1 -1
  42. package/dist/types.js +1 -37
  43. package/dist/types.js.map +1 -1
  44. package/package.json +11 -19
  45. package/dist/checkpoint/GhosttyCheckpoint.worker.d.ts +0 -2
  46. package/dist/checkpoint/GhosttyCheckpoint.worker.d.ts.map +0 -1
  47. package/dist/checkpoint/GhosttyCheckpoint.worker.js +0 -9
  48. package/dist/checkpoint/GhosttyCheckpoint.worker.js.map +0 -1
  49. package/dist/checkpoint/GhosttyCheckpointActor.d.ts +0 -44
  50. package/dist/checkpoint/GhosttyCheckpointActor.d.ts.map +0 -1
  51. package/dist/checkpoint/GhosttyCheckpointActor.js +0 -284
  52. package/dist/checkpoint/GhosttyCheckpointActor.js.map +0 -1
  53. package/dist/checkpoint/GhosttyCheckpointEngine.d.ts +0 -62
  54. package/dist/checkpoint/GhosttyCheckpointEngine.d.ts.map +0 -1
  55. package/dist/checkpoint/GhosttyCheckpointEngine.js +0 -175
  56. package/dist/checkpoint/GhosttyCheckpointEngine.js.map +0 -1
  57. package/dist/checkpoint/GhosttyCheckpointWorkerRuntime.d.ts +0 -31
  58. package/dist/checkpoint/GhosttyCheckpointWorkerRuntime.d.ts.map +0 -1
  59. package/dist/checkpoint/GhosttyCheckpointWorkerRuntime.js +0 -112
  60. package/dist/checkpoint/GhosttyCheckpointWorkerRuntime.js.map +0 -1
  61. package/dist/core/PagedTerminalOutputCoordinator.d.ts +0 -130
  62. package/dist/core/PagedTerminalOutputCoordinator.d.ts.map +0 -1
  63. package/dist/core/PagedTerminalOutputCoordinator.js +0 -1197
  64. package/dist/core/PagedTerminalOutputCoordinator.js.map +0 -1
  65. package/dist/core/TerminalCore.d.ts +0 -286
  66. package/dist/core/TerminalCore.d.ts.map +0 -1
  67. package/dist/core/TerminalCore.js +0 -3566
  68. package/dist/core/TerminalCore.js.map +0 -1
  69. package/dist/core/TerminalOutputPipeline.d.ts +0 -86
  70. package/dist/core/TerminalOutputPipeline.d.ts.map +0 -1
  71. package/dist/core/TerminalOutputPipeline.js +0 -511
  72. package/dist/core/TerminalOutputPipeline.js.map +0 -1
  73. package/dist/core/TerminalRenderScheduler.d.ts +0 -45
  74. package/dist/core/TerminalRenderScheduler.d.ts.map +0 -1
  75. package/dist/core/TerminalRenderScheduler.js +0 -145
  76. package/dist/core/TerminalRenderScheduler.js.map +0 -1
  77. package/dist/core/TerminalScrollbarOverlay.d.ts +0 -63
  78. package/dist/core/TerminalScrollbarOverlay.d.ts.map +0 -1
  79. package/dist/core/TerminalScrollbarOverlay.js +0 -493
  80. package/dist/core/TerminalScrollbarOverlay.js.map +0 -1
  81. package/dist/entries/history.d.ts +0 -4
  82. package/dist/entries/history.d.ts.map +0 -1
  83. package/dist/entries/history.js +0 -2
  84. package/dist/entries/history.js.map +0 -1
  85. package/dist/entries/preload.d.ts +0 -3
  86. package/dist/entries/preload.d.ts.map +0 -1
  87. package/dist/entries/preload.js +0 -2
  88. package/dist/entries/preload.js.map +0 -1
  89. package/dist/fabric/BeamtermFabricRenderer.d.ts +0 -67
  90. package/dist/fabric/BeamtermFabricRenderer.d.ts.map +0 -1
  91. package/dist/fabric/BeamtermFabricRenderer.js +0 -659
  92. package/dist/fabric/BeamtermFabricRenderer.js.map +0 -1
  93. package/dist/fabric/TerminalFabricCoordinator.d.ts +0 -40
  94. package/dist/fabric/TerminalFabricCoordinator.d.ts.map +0 -1
  95. package/dist/fabric/TerminalFabricCoordinator.js +0 -141
  96. package/dist/fabric/TerminalFabricCoordinator.js.map +0 -1
  97. package/dist/fabric/TerminalLiveFabric.d.ts +0 -44
  98. package/dist/fabric/TerminalLiveFabric.d.ts.map +0 -1
  99. package/dist/fabric/TerminalLiveFabric.js +0 -117
  100. package/dist/fabric/TerminalLiveFabric.js.map +0 -1
  101. package/dist/fabric/types.d.ts +0 -152
  102. package/dist/fabric/types.d.ts.map +0 -1
  103. package/dist/fabric/types.js +0 -2
  104. package/dist/fabric/types.js.map +0 -1
  105. package/dist/internal/BeamtermResourceLoader.d.ts +0 -3
  106. package/dist/internal/BeamtermResourceLoader.d.ts.map +0 -1
  107. package/dist/internal/BeamtermResourceLoader.js +0 -14
  108. package/dist/internal/BeamtermResourceLoader.js.map +0 -1
  109. package/dist/internal/GhosttyCompatibilityVersion.d.ts +0 -2
  110. package/dist/internal/GhosttyCompatibilityVersion.d.ts.map +0 -1
  111. package/dist/internal/GhosttyCompatibilityVersion.js +0 -2
  112. package/dist/internal/GhosttyCompatibilityVersion.js.map +0 -1
  113. package/dist/internal/GhosttyScrollbackCompat.d.ts +0 -16
  114. package/dist/internal/GhosttyScrollbackCompat.d.ts.map +0 -1
  115. package/dist/internal/GhosttyScrollbackCompat.js +0 -43
  116. package/dist/internal/GhosttyScrollbackCompat.js.map +0 -1
  117. package/dist/internal/GhosttyScrollbarCompat.d.ts +0 -12
  118. package/dist/internal/GhosttyScrollbarCompat.d.ts.map +0 -1
  119. package/dist/internal/GhosttyScrollbarCompat.js +0 -160
  120. package/dist/internal/GhosttyScrollbarCompat.js.map +0 -1
  121. package/dist/internal/SequenceBuffer.d.ts +0 -19
  122. package/dist/internal/SequenceBuffer.d.ts.map +0 -1
  123. package/dist/internal/SequenceBuffer.js +0 -83
  124. package/dist/internal/SequenceBuffer.js.map +0 -1
  125. package/dist/internal/TerminalInitializationScheduler.d.ts +0 -38
  126. package/dist/internal/TerminalInitializationScheduler.d.ts.map +0 -1
  127. package/dist/internal/TerminalInitializationScheduler.js +0 -112
  128. package/dist/internal/TerminalInitializationScheduler.js.map +0 -1
  129. package/dist/internal/TerminalResourceLoader.d.ts +0 -40
  130. package/dist/internal/TerminalResourceLoader.d.ts.map +0 -1
  131. package/dist/internal/TerminalResourceLoader.js +0 -165
  132. package/dist/internal/TerminalResourceLoader.js.map +0 -1
  133. package/dist/internal/UnicodeSafeUrlProvider.d.ts +0 -17
  134. package/dist/internal/UnicodeSafeUrlProvider.d.ts.map +0 -1
  135. package/dist/internal/UnicodeSafeUrlProvider.js +0 -32
  136. package/dist/internal/UnicodeSafeUrlProvider.js.map +0 -1
  137. package/dist/internal/scheduleUiTurn.d.ts +0 -5
  138. package/dist/internal/scheduleUiTurn.d.ts.map +0 -1
  139. package/dist/internal/scheduleUiTurn.js +0 -37
  140. package/dist/internal/scheduleUiTurn.js.map +0 -1
  141. package/dist/manager/TerminalInstanceController.d.ts +0 -88
  142. package/dist/manager/TerminalInstanceController.d.ts.map +0 -1
  143. package/dist/manager/TerminalInstanceController.js +0 -1076
  144. package/dist/manager/TerminalInstanceController.js.map +0 -1
  145. package/dist/utils/errors.d.ts +0 -3
  146. package/dist/utils/errors.d.ts.map +0 -1
  147. package/dist/utils/errors.js +0 -11
  148. package/dist/utils/errors.js.map +0 -1
  149. package/dist/utils/history.d.ts +0 -2
  150. package/dist/utils/history.d.ts.map +0 -1
  151. package/dist/utils/history.js +0 -12
  152. package/dist/utils/history.js.map +0 -1
  153. package/dist/utils/xtermAutoResponseFilter.d.ts +0 -2
  154. package/dist/utils/xtermAutoResponseFilter.d.ts.map +0 -1
  155. package/dist/utils/xtermAutoResponseFilter.js +0 -109
  156. 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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"}