@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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@floegence/floeterm-terminal-web",
3
- "version": "0.14.0",
4
- "description": "Framework-neutral ghostty-web (xterm.js API-compatible) integration with terminal core, session, and data flow utilities.",
3
+ "version": "0.15.0",
4
+ "description": "Framework-neutral semantic terminal renderer, input bridge, live transport, and session metadata utilities.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -27,17 +27,13 @@
27
27
  "types": "./dist/entries/sessions.d.ts",
28
28
  "import": "./dist/entries/sessions.js"
29
29
  },
30
- "./history": {
31
- "types": "./dist/entries/history.d.ts",
32
- "import": "./dist/entries/history.js"
33
- },
34
- "./preload": {
35
- "types": "./dist/entries/preload.d.ts",
36
- "import": "./dist/entries/preload.js"
37
- },
38
30
  "./live": {
39
31
  "types": "./dist/entries/live.d.ts",
40
32
  "import": "./dist/entries/live.js"
33
+ },
34
+ "./semantic": {
35
+ "types": "./dist/entries/semantic.d.ts",
36
+ "import": "./dist/entries/semantic.js"
41
37
  }
42
38
  },
43
39
  "files": [
@@ -54,9 +50,9 @@
54
50
  ],
55
51
  "scripts": {
56
52
  "build": "node -e \"const fs=require('fs'); fs.rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json && node -e \"const fs=require('fs'); if (fs.existsSync('src/styles')) fs.cpSync('src/styles', 'dist/styles', { recursive: true })\"",
57
- "check:ghostty-compat": "node scripts/check-ghostty-scrollback-compat.mjs",
58
- "check:package-artifact": "npm run check:ghostty-compat && node scripts/check-package-artifact.mjs",
59
- "test": "npm run check:ghostty-compat && vitest run",
53
+ "check:semantic-only": "node --test ../scripts/semantic_only_boundary.test.mjs",
54
+ "check:package-artifact": "node scripts/check-package-artifact.mjs",
55
+ "test": "npm run check:semantic-only && vitest run",
60
56
  "test:browser": "node scripts/runVitestBrowser.mjs",
61
57
  "lint": "tsc --noEmit",
62
58
  "prepublishOnly": "npm run lint && npm test && npm run test:browser && npm run build && npm run check:package-artifact"
@@ -64,15 +60,12 @@
64
60
  "keywords": [
65
61
  "terminal",
66
62
  "ghostty",
67
- "ghostty-web",
63
+ "semantic-terminal",
68
64
  "pty",
69
65
  "websocket",
70
66
  "shell"
71
67
  ],
72
- "dependencies": {
73
- "@floegence/beamterm-renderer": "1.0.2",
74
- "@floegence/ghostty-web": "0.5.0-rc.0"
75
- },
68
+ "dependencies": {},
76
69
  "overrides": {
77
70
  "ws": "^8.21.0"
78
71
  },
@@ -83,7 +76,6 @@
83
76
  "playwright": "^1.57.0",
84
77
  "typescript": "^5.4.0",
85
78
  "vite": "^8.0.16",
86
- "vite-plugin-wasm": "^3.6.0",
87
79
  "vitest": "4.1.10"
88
80
  }
89
81
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=GhosttyCheckpoint.worker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GhosttyCheckpoint.worker.d.ts","sourceRoot":"","sources":["../../src/checkpoint/GhosttyCheckpoint.worker.ts"],"names":[],"mappings":""}
@@ -1,9 +0,0 @@
1
- import { GhosttyCheckpointWorkerRuntime } from './GhosttyCheckpointWorkerRuntime';
2
- const workerScope = globalThis;
3
- const runtime = new GhosttyCheckpointWorkerRuntime({
4
- postMessage: (message, transfer) => workerScope.postMessage(message, transfer),
5
- });
6
- workerScope.addEventListener('message', event => {
7
- void runtime.handle(event.data);
8
- });
9
- //# sourceMappingURL=GhosttyCheckpoint.worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GhosttyCheckpoint.worker.js","sourceRoot":"","sources":["../../src/checkpoint/GhosttyCheckpoint.worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAElF,MAAM,WAAW,GAAG,UAGnB,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,8BAA8B,CAAC;IACjD,WAAW,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC;CAC/E,CAAC,CAAC;AAEH,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;IAC9C,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC"}
@@ -1,44 +0,0 @@
1
- import type { TerminalHistoryCheckpoint } from '../types.js';
2
- export type GhosttyCheckpointActorState = 'idle' | 'starting' | 'ready' | 'failed' | 'disposed';
3
- export interface GhosttyCheckpointChunk {
4
- sequence: number;
5
- data: Uint8Array;
6
- geometryGeneration: number;
7
- cols: number;
8
- rows: number;
9
- }
10
- export type GhosttyAuthoritativeCheckpoint = TerminalHistoryCheckpoint;
11
- export interface GhosttyCheckpointWorkerLike {
12
- postMessage(message: unknown, transfer?: Transferable[]): void;
13
- addEventListener(type: 'message' | 'error', listener: EventListener): void;
14
- removeEventListener(type: 'message' | 'error', listener: EventListener): void;
15
- terminate(): void;
16
- }
17
- export interface GhosttyCheckpointActorOptions {
18
- createWorker?: () => GhosttyCheckpointWorkerLike;
19
- maxQueuedBytes?: number;
20
- }
21
- export interface GhosttyCheckpointActorStartOptions {
22
- cols: number;
23
- rows: number;
24
- parserEpoch: number;
25
- initialSequence?: number;
26
- checkpoint?: GhosttyAuthoritativeCheckpoint;
27
- }
28
- export interface GhosttyCheckpointActorSnapshot {
29
- state: GhosttyCheckpointActorState;
30
- queuedThroughSequence: number;
31
- appliedThroughSequence: number;
32
- queuedBytes: number;
33
- parserEpoch: number;
34
- failure: Error | null;
35
- }
36
- export interface GhosttyCheckpointActor {
37
- start(options: GhosttyCheckpointActorStartOptions): Promise<void>;
38
- append(chunks: readonly GhosttyCheckpointChunk[]): void;
39
- capture(targetSequence: number): Promise<GhosttyAuthoritativeCheckpoint>;
40
- getSnapshot(): GhosttyCheckpointActorSnapshot;
41
- dispose(): void;
42
- }
43
- export declare const createGhosttyCheckpointActor: (options?: GhosttyCheckpointActorOptions) => GhosttyCheckpointActor;
44
- //# sourceMappingURL=GhosttyCheckpointActor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GhosttyCheckpointActor.d.ts","sourceRoot":"","sources":["../../src/checkpoint/GhosttyCheckpointActor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,MAAM,2BAA2B,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEhG,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,8BAA8B,GAAG,yBAAyB,CAAC;AAEvE,MAAM,WAAW,2BAA2B;IAC1C,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC/D,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3E,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9E,SAAS,IAAI,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,6BAA6B;IAC5C,YAAY,CAAC,EAAE,MAAM,2BAA2B,CAAC;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kCAAkC;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,8BAA8B,CAAC;CAC7C;AAED,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,2BAA2B,CAAC;IACnC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,OAAO,EAAE,kCAAkC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,CAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,GAAG,IAAI,CAAC;IACxD,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACzE,WAAW,IAAI,8BAA8B,CAAC;IAC9C,OAAO,IAAI,IAAI,CAAC;CACjB;AAgTD,eAAO,MAAM,4BAA4B,GACvC,UAAS,6BAAkC,KAC1C,sBAAiE,CAAC"}
@@ -1,284 +0,0 @@
1
- const DEFAULT_MAX_QUEUED_BYTES = 16 * 1024 * 1024;
2
- const SHA256_HEX = /^[0-9a-f]{64}$/;
3
- const assertPositiveSafeInteger = (value, field) => {
4
- if (!Number.isSafeInteger(value) || value <= 0) {
5
- throw new Error(`${field} must be a positive safe integer`);
6
- }
7
- };
8
- const assertNonNegativeSafeInteger = (value, field) => {
9
- if (!Number.isSafeInteger(value) || value < 0) {
10
- throw new Error(`${field} must be a non-negative safe integer`);
11
- }
12
- };
13
- const toError = (value, fallback) => {
14
- if (value instanceof Error)
15
- return value;
16
- if (typeof value === 'string' && value.trim() !== '')
17
- return new Error(value);
18
- return new Error(fallback);
19
- };
20
- const defaultCreateWorker = () => new Worker(new URL('./GhosttyCheckpoint.worker.js', import.meta.url), { type: 'module', name: 'floeterm-ghostty-checkpoint' });
21
- class GhosttyCheckpointActorImpl {
22
- constructor(options) {
23
- this.state = 'idle';
24
- this.parserEpoch = 0;
25
- this.queuedThroughSequence = 0;
26
- this.appliedThroughSequence = 0;
27
- this.queuedBytes = 0;
28
- this.geometryGeneration = 0;
29
- this.cols = 0;
30
- this.rows = 0;
31
- this.nextRequestId = 1;
32
- this.failure = null;
33
- this.startResolve = null;
34
- this.startReject = null;
35
- this.captures = new Map();
36
- this.onMessage = (event) => {
37
- const data = event.data;
38
- try {
39
- this.handleMessage(data);
40
- }
41
- catch (error) {
42
- this.fail(toError(error, 'invalid Ghostty checkpoint worker response'));
43
- }
44
- };
45
- this.onError = (event) => {
46
- const message = event.message;
47
- this.fail(new Error(message || 'Ghostty checkpoint worker crashed'));
48
- };
49
- const maxQueuedBytes = options.maxQueuedBytes ?? DEFAULT_MAX_QUEUED_BYTES;
50
- assertPositiveSafeInteger(maxQueuedBytes, 'maxQueuedBytes');
51
- this.maxQueuedBytes = maxQueuedBytes;
52
- this.worker = (options.createWorker ?? defaultCreateWorker)();
53
- this.worker.addEventListener('message', this.onMessage);
54
- this.worker.addEventListener('error', this.onError);
55
- }
56
- start(options) {
57
- if (this.state !== 'idle')
58
- return Promise.reject(new Error('Ghostty checkpoint actor has already started'));
59
- assertPositiveSafeInteger(options.cols, 'cols');
60
- assertPositiveSafeInteger(options.rows, 'rows');
61
- assertPositiveSafeInteger(options.parserEpoch, 'parserEpoch');
62
- assertNonNegativeSafeInteger(options.initialSequence ?? 0, 'initialSequence');
63
- if (options.checkpoint && options.initialSequence !== undefined) {
64
- return Promise.reject(new Error('checkpoint and initialSequence are mutually exclusive'));
65
- }
66
- if (options.checkpoint && options.checkpoint.parserEpoch !== options.parserEpoch) {
67
- return Promise.reject(new Error('checkpoint parser epoch does not match actor parser epoch'));
68
- }
69
- this.state = 'starting';
70
- this.parserEpoch = options.parserEpoch;
71
- this.cols = options.checkpoint?.cols ?? options.cols;
72
- this.rows = options.checkpoint?.rows ?? options.rows;
73
- this.geometryGeneration = options.checkpoint?.geometryGeneration ?? 0;
74
- this.queuedThroughSequence = options.checkpoint?.coveredThroughSequence ?? options.initialSequence ?? 0;
75
- this.appliedThroughSequence = this.queuedThroughSequence;
76
- const checkpointBytes = options.checkpoint?.bytes.slice();
77
- const transfer = checkpointBytes ? [checkpointBytes.buffer] : [];
78
- const started = new Promise((resolve, reject) => {
79
- this.startResolve = resolve;
80
- this.startReject = reject;
81
- });
82
- this.worker.postMessage({
83
- type: 'initialize',
84
- cols: this.cols,
85
- rows: this.rows,
86
- parserEpoch: this.parserEpoch,
87
- initialSequence: options.initialSequence,
88
- checkpoint: options.checkpoint ? {
89
- ...options.checkpoint,
90
- bytes: checkpointBytes,
91
- } : undefined,
92
- }, transfer);
93
- return started;
94
- }
95
- append(chunks) {
96
- this.assertReady();
97
- if (chunks.length === 0)
98
- return;
99
- let sequence = this.queuedThroughSequence;
100
- let geometryGeneration = this.geometryGeneration;
101
- let cols = this.cols;
102
- let rows = this.rows;
103
- let addedBytes = 0;
104
- const ownedChunks = chunks.map(chunk => {
105
- assertPositiveSafeInteger(chunk.sequence, 'chunk.sequence');
106
- assertPositiveSafeInteger(chunk.geometryGeneration, 'chunk.geometryGeneration');
107
- assertPositiveSafeInteger(chunk.cols, 'chunk.cols');
108
- assertPositiveSafeInteger(chunk.rows, 'chunk.rows');
109
- if (chunk.sequence !== sequence + 1) {
110
- throw new Error(`Ghostty checkpoint actor sequence gap: got ${chunk.sequence}, want ${sequence + 1}`);
111
- }
112
- if (!(chunk.data instanceof Uint8Array) || chunk.data.byteLength === 0) {
113
- throw new Error('Ghostty checkpoint actor chunk data must be non-empty bytes');
114
- }
115
- if (chunk.geometryGeneration < geometryGeneration) {
116
- throw new Error('Ghostty checkpoint actor geometry generation moved backwards');
117
- }
118
- if (chunk.geometryGeneration === geometryGeneration && geometryGeneration > 0 && (chunk.cols !== cols || chunk.rows !== rows)) {
119
- throw new Error('Ghostty checkpoint actor geometry generation has conflicting dimensions');
120
- }
121
- sequence = chunk.sequence;
122
- if (chunk.geometryGeneration > geometryGeneration) {
123
- geometryGeneration = chunk.geometryGeneration;
124
- cols = chunk.cols;
125
- rows = chunk.rows;
126
- }
127
- addedBytes += chunk.data.byteLength;
128
- return { ...chunk, data: chunk.data.slice() };
129
- });
130
- if (this.queuedBytes + addedBytes > this.maxQueuedBytes) {
131
- throw new Error(`Ghostty checkpoint actor queue exceeds ${this.maxQueuedBytes} bytes`);
132
- }
133
- this.queuedThroughSequence = sequence;
134
- this.geometryGeneration = geometryGeneration;
135
- this.cols = cols;
136
- this.rows = rows;
137
- this.queuedBytes += addedBytes;
138
- this.worker.postMessage({ type: 'append', chunks: ownedChunks }, ownedChunks.map(chunk => chunk.data.buffer));
139
- }
140
- capture(targetSequence) {
141
- this.assertReady();
142
- assertPositiveSafeInteger(targetSequence, 'targetSequence');
143
- if (targetSequence !== this.queuedThroughSequence) {
144
- return Promise.reject(new Error(`checkpoint target must equal queued sequence ${this.queuedThroughSequence}`));
145
- }
146
- const requestId = this.nextRequestId;
147
- this.nextRequestId += 1;
148
- const result = new Promise((resolve, reject) => {
149
- this.captures.set(requestId, {
150
- targetSequence,
151
- geometryGeneration: this.geometryGeneration,
152
- cols: this.cols,
153
- rows: this.rows,
154
- resolve,
155
- reject,
156
- });
157
- });
158
- this.worker.postMessage({ type: 'capture', requestId, targetSequence });
159
- return result;
160
- }
161
- getSnapshot() {
162
- return {
163
- state: this.state,
164
- queuedThroughSequence: this.queuedThroughSequence,
165
- appliedThroughSequence: this.appliedThroughSequence,
166
- queuedBytes: this.queuedBytes,
167
- parserEpoch: this.parserEpoch,
168
- failure: this.failure,
169
- };
170
- }
171
- dispose() {
172
- if (this.state === 'disposed')
173
- return;
174
- const error = new Error('Ghostty checkpoint actor is disposed');
175
- this.startReject?.(error);
176
- this.startResolve = null;
177
- this.startReject = null;
178
- for (const pending of this.captures.values())
179
- pending.reject(error);
180
- this.captures.clear();
181
- this.worker.removeEventListener('message', this.onMessage);
182
- this.worker.removeEventListener('error', this.onError);
183
- this.worker.terminate();
184
- this.state = 'disposed';
185
- }
186
- handleMessage(value) {
187
- if (!value || typeof value !== 'object')
188
- throw new Error('checkpoint worker message must be an object');
189
- const message = value;
190
- if (message.type === 'ready') {
191
- if (this.state !== 'starting')
192
- throw new Error('unexpected checkpoint worker ready message');
193
- if (message.parserEpoch !== this.parserEpoch || message.historySequence !== this.queuedThroughSequence) {
194
- throw new Error('checkpoint worker initialized at stale coordinates');
195
- }
196
- this.state = 'ready';
197
- this.startResolve?.();
198
- this.startResolve = null;
199
- this.startReject = null;
200
- return;
201
- }
202
- if (message.type === 'applied') {
203
- this.assertReady();
204
- const throughSequence = message.throughSequence;
205
- const releasedBytes = message.releasedBytes;
206
- assertNonNegativeSafeInteger(throughSequence, 'applied.throughSequence');
207
- assertNonNegativeSafeInteger(releasedBytes, 'applied.releasedBytes');
208
- if (throughSequence < this.appliedThroughSequence || throughSequence > this.queuedThroughSequence) {
209
- throw new Error('checkpoint worker applied sequence is stale or beyond queued output');
210
- }
211
- if (releasedBytes > this.queuedBytes) {
212
- throw new Error('checkpoint worker released more bytes than queued');
213
- }
214
- this.appliedThroughSequence = throughSequence;
215
- this.queuedBytes -= releasedBytes;
216
- return;
217
- }
218
- if (message.type === 'checkpoint') {
219
- const requestId = message.requestId;
220
- assertPositiveSafeInteger(requestId, 'checkpoint.requestId');
221
- const pending = this.captures.get(requestId);
222
- if (!pending)
223
- throw new Error('checkpoint worker returned an unknown request');
224
- const historySequence = message.historySequence;
225
- if (historySequence !== pending.targetSequence) {
226
- throw new Error(`stale checkpoint sequence: got ${historySequence}, want ${pending.targetSequence}`);
227
- }
228
- if (message.parserEpoch !== this.parserEpoch
229
- || message.geometryGeneration !== pending.geometryGeneration
230
- || message.cols !== pending.cols
231
- || message.rows !== pending.rows) {
232
- throw new Error('stale checkpoint geometry or parser epoch');
233
- }
234
- if (message.formatVersion !== 1)
235
- throw new Error('unsupported checkpoint format version');
236
- if (typeof message.checksumSha256 !== 'string' || !SHA256_HEX.test(message.checksumSha256)) {
237
- throw new Error('checkpoint checksum must be lowercase SHA-256');
238
- }
239
- if (typeof message.stateDigestSha256 !== 'string' || !SHA256_HEX.test(message.stateDigestSha256)) {
240
- throw new Error('checkpoint state digest must be lowercase SHA-256');
241
- }
242
- if (!(message.bytes instanceof Uint8Array) || message.bytes.byteLength === 0) {
243
- throw new Error('checkpoint worker returned empty checkpoint bytes');
244
- }
245
- this.captures.delete(requestId);
246
- pending.resolve({
247
- formatVersion: 1,
248
- engineId: 'floegence-ghostty-web',
249
- coveredThroughSequence: historySequence,
250
- geometryGeneration: pending.geometryGeneration,
251
- parserEpoch: this.parserEpoch,
252
- cols: pending.cols,
253
- rows: pending.rows,
254
- checksumSha256: message.checksumSha256,
255
- stateDigestSha256: message.stateDigestSha256,
256
- bytes: message.bytes.slice(),
257
- });
258
- return;
259
- }
260
- if (message.type === 'error') {
261
- throw new Error(typeof message.message === 'string' ? message.message : 'Ghostty checkpoint worker failed');
262
- }
263
- throw new Error('unknown Ghostty checkpoint worker message');
264
- }
265
- assertReady() {
266
- if (this.state !== 'ready') {
267
- throw this.failure ?? new Error(`Ghostty checkpoint actor is not ready (${this.state})`);
268
- }
269
- }
270
- fail(error) {
271
- if (this.state === 'disposed' || this.state === 'failed')
272
- return;
273
- this.failure = error;
274
- this.state = 'failed';
275
- this.startReject?.(error);
276
- this.startResolve = null;
277
- this.startReject = null;
278
- for (const pending of this.captures.values())
279
- pending.reject(error);
280
- this.captures.clear();
281
- }
282
- }
283
- export const createGhosttyCheckpointActor = (options = {}) => new GhosttyCheckpointActorImpl(options);
284
- //# sourceMappingURL=GhosttyCheckpointActor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GhosttyCheckpointActor.js","sourceRoot":"","sources":["../../src/checkpoint/GhosttyCheckpointActor.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- import type { GhosttyAuthoritativeCheckpoint, GhosttyCheckpointChunk } from './GhosttyCheckpointActor';
2
- interface GhosttyCheckpointMetadata {
3
- formatVersion: number;
4
- cols: number;
5
- rows: number;
6
- historySequence: bigint;
7
- geometryGeneration: bigint;
8
- parserEpoch: bigint;
9
- }
10
- interface GhosttyCheckpointTerminal {
11
- readonly cols: number;
12
- readonly rows: number;
13
- write(data: Uint8Array): void;
14
- resize(cols: number, rows: number): void;
15
- captureCheckpoint(coordinates?: {
16
- historySequence: bigint;
17
- geometryGeneration: bigint;
18
- parserEpoch: bigint;
19
- }): {
20
- bytes: Uint8Array;
21
- metadata: GhosttyCheckpointMetadata;
22
- };
23
- validateCheckpoint(bytes: Uint8Array): GhosttyCheckpointMetadata;
24
- restoreCheckpoint(bytes: Uint8Array, expectedCoordinates?: {
25
- historySequence: bigint;
26
- geometryGeneration: bigint;
27
- parserEpoch: bigint;
28
- }): void;
29
- getStateDigest(): string;
30
- free(): void;
31
- }
32
- export interface GhosttyCheckpointRuntimeLike {
33
- createTerminal(cols: number, rows: number): GhosttyCheckpointTerminal;
34
- }
35
- export interface GhosttyCheckpointEngineOptions {
36
- cols: number;
37
- rows: number;
38
- parserEpoch: number;
39
- initialSequence?: number;
40
- checkpoint?: GhosttyAuthoritativeCheckpoint;
41
- }
42
- export interface GhosttyCheckpointEngineAppendResult {
43
- throughSequence: number;
44
- releasedBytes: number;
45
- }
46
- export declare class GhosttyCheckpointEngine {
47
- private readonly runtime;
48
- private readonly parserEpoch;
49
- private terminal;
50
- private queuedThroughSequence;
51
- private geometryGeneration;
52
- private cols;
53
- private rows;
54
- private disposed;
55
- constructor(runtime: GhosttyCheckpointRuntimeLike, options: GhosttyCheckpointEngineOptions);
56
- append(chunks: readonly GhosttyCheckpointChunk[]): GhosttyCheckpointEngineAppendResult;
57
- capture(targetSequence: number): Promise<GhosttyAuthoritativeCheckpoint>;
58
- dispose(): void;
59
- private assertLive;
60
- }
61
- export {};
62
- //# sourceMappingURL=GhosttyCheckpointEngine.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GhosttyCheckpointEngine.d.ts","sourceRoot":"","sources":["../../src/checkpoint/GhosttyCheckpointEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,8BAA8B,EAC9B,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAElC,UAAU,yBAAyB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,yBAAyB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,iBAAiB,CAAC,WAAW,CAAC,EAAE;QAC9B,eAAe,EAAE,MAAM,CAAC;QACxB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,yBAAyB,CAAA;KAAE,CAAC;IAC/D,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,yBAAyB,CAAC;IACjE,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,mBAAmB,CAAC,EAAE;QACzD,eAAe,EAAE,MAAM,CAAC;QACxB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,IAAI,CAAC;IACT,cAAc,IAAI,MAAM,CAAC;IACzB,IAAI,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,4BAA4B;IAC3C,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,yBAAyB,CAAC;CACvE;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,8BAA8B,CAAC;CAC7C;AAED,MAAM,WAAW,mCAAmC;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAgCD,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,4BAA4B,EAAE,OAAO,EAAE,8BAA8B;IAoC1F,MAAM,CAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,GAAG,mCAAmC;IAyChF,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC;IA8D9E,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,UAAU;CAGnB"}