@floegence/floeterm-terminal-web 0.13.6 → 0.14.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 +3 -3
- package/dist/checkpoint/GhosttyCheckpoint.worker.d.ts +2 -0
- package/dist/checkpoint/GhosttyCheckpoint.worker.d.ts.map +1 -0
- package/dist/checkpoint/GhosttyCheckpoint.worker.js +9 -0
- package/dist/checkpoint/GhosttyCheckpoint.worker.js.map +1 -0
- package/dist/checkpoint/GhosttyCheckpointActor.d.ts +44 -0
- package/dist/checkpoint/GhosttyCheckpointActor.d.ts.map +1 -0
- package/dist/checkpoint/GhosttyCheckpointActor.js +284 -0
- package/dist/checkpoint/GhosttyCheckpointActor.js.map +1 -0
- package/dist/checkpoint/GhosttyCheckpointEngine.d.ts +62 -0
- package/dist/checkpoint/GhosttyCheckpointEngine.d.ts.map +1 -0
- package/dist/checkpoint/GhosttyCheckpointEngine.js +175 -0
- package/dist/checkpoint/GhosttyCheckpointEngine.js.map +1 -0
- package/dist/checkpoint/GhosttyCheckpointWorkerRuntime.d.ts +31 -0
- package/dist/checkpoint/GhosttyCheckpointWorkerRuntime.d.ts.map +1 -0
- package/dist/checkpoint/GhosttyCheckpointWorkerRuntime.js +112 -0
- package/dist/checkpoint/GhosttyCheckpointWorkerRuntime.js.map +1 -0
- package/dist/core/PagedTerminalOutputCoordinator.d.ts +5 -1
- package/dist/core/PagedTerminalOutputCoordinator.d.ts.map +1 -1
- package/dist/core/PagedTerminalOutputCoordinator.js +66 -4
- package/dist/core/PagedTerminalOutputCoordinator.js.map +1 -1
- package/dist/core/TerminalCore.d.ts +7 -0
- package/dist/core/TerminalCore.d.ts.map +1 -1
- package/dist/core/TerminalCore.js +93 -13
- package/dist/core/TerminalCore.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/GhosttyCompatibilityVersion.d.ts +1 -1
- package/dist/internal/GhosttyCompatibilityVersion.d.ts.map +1 -1
- package/dist/internal/GhosttyCompatibilityVersion.js +1 -1
- package/dist/internal/GhosttyCompatibilityVersion.js.map +1 -1
- package/dist/internal/TerminalResourceLoader.d.ts +14 -14
- package/dist/internal/TerminalResourceLoader.d.ts.map +1 -1
- package/dist/internal/TerminalResourceLoader.js +11 -11
- package/dist/internal/TerminalResourceLoader.js.map +1 -1
- package/dist/live/transport.d.ts +2 -1
- package/dist/live/transport.d.ts.map +1 -1
- package/dist/live/transport.js +1 -0
- package/dist/live/transport.js.map +1 -1
- package/dist/manager/TerminalInstanceController.d.ts +8 -0
- package/dist/manager/TerminalInstanceController.d.ts.map +1 -1
- package/dist/manager/TerminalInstanceController.js +158 -1
- package/dist/manager/TerminalInstanceController.js.map +1 -1
- package/dist/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalCore.d.ts","sourceRoot":"","sources":["../../src/core/TerminalCore.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,aAAa,EACb,KAAK,MAAM,EAEX,KAAK,cAAc,EACnB,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,kBAAkB,EACvB,KAAK,8BAA8B,EACnC,KAAK,qBAAqB,EAE1B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAEzB,KAAK,wBAAwB,EAE7B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,iCAAiC,EACtC,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAClC,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EAElC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"TerminalCore.d.ts","sourceRoot":"","sources":["../../src/core/TerminalCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,13 @@ const DEFAULT_TERMINAL_SNAPSHOT_MAX_BYTES = 2 * 1024 * 1024;
|
|
|
18
18
|
const ESTIMATED_RENDERER_BYTES = 4 * 1024 * 1024;
|
|
19
19
|
const SNAPSHOT_RESET_PREFIX = '\x1bc\x1b[2J\x1b[H';
|
|
20
20
|
const encodedByteLength = (value) => new TextEncoder().encode(value).byteLength;
|
|
21
|
+
const sha256Hex = async (bytes) => {
|
|
22
|
+
if (typeof crypto === 'undefined' || !crypto.subtle) {
|
|
23
|
+
throw new Error('Web Crypto SHA-256 is unavailable for checkpoint validation');
|
|
24
|
+
}
|
|
25
|
+
const digest = await crypto.subtle.digest('SHA-256', bytes.slice());
|
|
26
|
+
return Array.from(new Uint8Array(digest), byte => byte.toString(16).padStart(2, '0')).join('');
|
|
27
|
+
};
|
|
21
28
|
const TERMINAL_SEARCH_MAX_RESULTS = 5000;
|
|
22
29
|
const PRESENTATION_SCALE_EPSILON = 0.0001;
|
|
23
30
|
const GHOSTTY_DEFAULT_SCROLLBAR_RESERVE_PX = 15;
|
|
@@ -303,7 +310,7 @@ function normalizeHoverRange(value) {
|
|
|
303
310
|
function normalizeFabricIdentifier(value) {
|
|
304
311
|
return value.trim().replace(/[^a-zA-Z0-9_-]+/g, '-').replace(/^-+|-+$/g, '') || 'terminal';
|
|
305
312
|
}
|
|
306
|
-
// TerminalCore provides a focused wrapper around ghostty-web (xterm.js API-compatible) and its fit addon.
|
|
313
|
+
// TerminalCore provides a focused wrapper around @floegence/ghostty-web (xterm.js API-compatible) and its fit addon.
|
|
307
314
|
export class TerminalCore {
|
|
308
315
|
constructor(container, config = {}, eventHandlers = {}, logger = createConsoleLogger()) {
|
|
309
316
|
this.container = container;
|
|
@@ -410,7 +417,7 @@ export class TerminalCore {
|
|
|
410
417
|
this.fabricViewId = `floeterm-view-${this.renderTask.id}`;
|
|
411
418
|
TerminalCore.nextRenderTaskId += 1;
|
|
412
419
|
}
|
|
413
|
-
// initialize creates the ghostty-web terminal instance and binds addons.
|
|
420
|
+
// initialize creates the @floegence/ghostty-web terminal instance and binds addons.
|
|
414
421
|
async initialize(options = {}) {
|
|
415
422
|
if (this.isDisposed) {
|
|
416
423
|
throw new Error('Cannot initialize a disposed TerminalCore');
|
|
@@ -558,10 +565,10 @@ export class TerminalCore {
|
|
|
558
565
|
async createTerminalInstance(signal) {
|
|
559
566
|
const TerminalCtor = getGhosttyTerminalConstructor();
|
|
560
567
|
if (!TerminalCtor) {
|
|
561
|
-
throw new Error('ghostty-web module not loaded');
|
|
568
|
+
throw new Error('@floegence/ghostty-web module not loaded');
|
|
562
569
|
}
|
|
563
570
|
if (!this.ownedRuntime) {
|
|
564
|
-
throw new Error('ghostty-web runtime not acquired');
|
|
571
|
+
throw new Error('@floegence/ghostty-web runtime not acquired');
|
|
565
572
|
}
|
|
566
573
|
const defaultConfig = {
|
|
567
574
|
cols: 80,
|
|
@@ -613,7 +620,7 @@ export class TerminalCore {
|
|
|
613
620
|
}
|
|
614
621
|
const FitAddonCtor = getGhosttyFitAddonConstructor();
|
|
615
622
|
if (!FitAddonCtor) {
|
|
616
|
-
throw new Error('Required ghostty-web addons not loaded');
|
|
623
|
+
throw new Error('Required @floegence/ghostty-web addons not loaded');
|
|
617
624
|
}
|
|
618
625
|
this.fitAddon = new FitAddonCtor();
|
|
619
626
|
this.terminal.loadAddon(this.fitAddon);
|
|
@@ -654,7 +661,7 @@ export class TerminalCore {
|
|
|
654
661
|
mountInputElement(renderHost) {
|
|
655
662
|
const input = resolveTerminalInputElement(renderHost);
|
|
656
663
|
if (!input) {
|
|
657
|
-
throw new Error('ghostty-web terminal input element was not created');
|
|
664
|
+
throw new Error('@floegence/ghostty-web terminal input element was not created');
|
|
658
665
|
}
|
|
659
666
|
const body = this.container.ownerDocument.body;
|
|
660
667
|
if (!body) {
|
|
@@ -964,7 +971,7 @@ export class TerminalCore {
|
|
|
964
971
|
return;
|
|
965
972
|
}
|
|
966
973
|
terminalAny.__floetermDemandRenderLoopPatched = true;
|
|
967
|
-
// ghostty-web currently starts a perpetual RAF loop from open(). TerminalCore
|
|
974
|
+
// @floegence/ghostty-web currently starts a perpetual RAF loop from open(). TerminalCore
|
|
968
975
|
// already knows every meaningful invalidation point, so keep rendering
|
|
969
976
|
// demand-driven while preserving the upstream terminal surface.
|
|
970
977
|
terminalAny.startRenderLoop = () => {
|
|
@@ -1629,6 +1636,12 @@ export class TerminalCore {
|
|
|
1629
1636
|
this.hasFocus = true;
|
|
1630
1637
|
this.scheduleFocusResize();
|
|
1631
1638
|
};
|
|
1639
|
+
const onDocumentFocusIn = () => {
|
|
1640
|
+
this.hasFocus = this.isContainerFocused();
|
|
1641
|
+
if (this.hasFocus) {
|
|
1642
|
+
this.scheduleFocusResize();
|
|
1643
|
+
}
|
|
1644
|
+
};
|
|
1632
1645
|
const onFocusOut = () => {
|
|
1633
1646
|
// focusout fires even when moving focus within the subtree; re-check on next frame.
|
|
1634
1647
|
requestAnimationFrame(() => {
|
|
@@ -1646,11 +1659,15 @@ export class TerminalCore {
|
|
|
1646
1659
|
this.container.addEventListener('focusin', onFocusIn);
|
|
1647
1660
|
this.container.addEventListener('focusout', onFocusOut);
|
|
1648
1661
|
this.container.addEventListener('pointerdown', onPointerDown);
|
|
1662
|
+
this.container.ownerDocument.addEventListener('focusin', onDocumentFocusIn);
|
|
1663
|
+
this.container.ownerDocument.addEventListener('focusout', onFocusOut);
|
|
1649
1664
|
this.hasFocus = this.isContainerFocused();
|
|
1650
1665
|
this.unbindResponsiveListeners = () => {
|
|
1651
1666
|
this.container.removeEventListener('focusin', onFocusIn);
|
|
1652
1667
|
this.container.removeEventListener('focusout', onFocusOut);
|
|
1653
1668
|
this.container.removeEventListener('pointerdown', onPointerDown);
|
|
1669
|
+
this.container.ownerDocument.removeEventListener('focusin', onDocumentFocusIn);
|
|
1670
|
+
this.container.ownerDocument.removeEventListener('focusout', onFocusOut);
|
|
1654
1671
|
};
|
|
1655
1672
|
}
|
|
1656
1673
|
startSizeWatching() {
|
|
@@ -1727,7 +1744,7 @@ export class TerminalCore {
|
|
|
1727
1744
|
catch (error) {
|
|
1728
1745
|
this.logger.debug('[TerminalCore] Resize failed', { error });
|
|
1729
1746
|
}
|
|
1730
|
-
// Some ghostty-web builds may not always emit onResize for programmatic fit().
|
|
1747
|
+
// Some @floegence/ghostty-web builds may not always emit onResize for programmatic fit().
|
|
1731
1748
|
// Emit a deduped notification based on the actual terminal dimensions.
|
|
1732
1749
|
if (this.resizeNotifySeq !== startSeq) {
|
|
1733
1750
|
return;
|
|
@@ -1776,7 +1793,7 @@ export class TerminalCore {
|
|
|
1776
1793
|
this.emitResize(hostDimensions, { source: 'core', force });
|
|
1777
1794
|
return;
|
|
1778
1795
|
}
|
|
1779
|
-
// Some ghostty-web builds may not emit onResize for programmatic resize().
|
|
1796
|
+
// Some @floegence/ghostty-web builds may not emit onResize for programmatic resize().
|
|
1780
1797
|
if (this.resizeNotifySeq !== startSeq) {
|
|
1781
1798
|
return;
|
|
1782
1799
|
}
|
|
@@ -1833,7 +1850,7 @@ export class TerminalCore {
|
|
|
1833
1850
|
if (!el) {
|
|
1834
1851
|
return false;
|
|
1835
1852
|
}
|
|
1836
|
-
return this.container.contains(el);
|
|
1853
|
+
return this.container.contains(el) || this.inputBridge?.containsTarget(el) === true;
|
|
1837
1854
|
}
|
|
1838
1855
|
setState(newState) {
|
|
1839
1856
|
if (this.state !== newState) {
|
|
@@ -1995,6 +2012,69 @@ export class TerminalCore {
|
|
|
1995
2012
|
});
|
|
1996
2013
|
});
|
|
1997
2014
|
}
|
|
2015
|
+
/**
|
|
2016
|
+
* Restores a validated checkpoint produced by the published Ghostty engine.
|
|
2017
|
+
* The terminal must already be at the checkpoint geometry; geometry changes
|
|
2018
|
+
* remain owned by the history boundary before restore is attempted.
|
|
2019
|
+
*/
|
|
2020
|
+
async restoreAuthoritativeCheckpoint(checkpoint) {
|
|
2021
|
+
if (!this.terminal || !this.isReady()) {
|
|
2022
|
+
throw new Error('Cannot restore a checkpoint before initialization completes');
|
|
2023
|
+
}
|
|
2024
|
+
if (checkpoint.formatVersion !== 1
|
|
2025
|
+
|| checkpoint.engineId !== 'floegence-ghostty-web'
|
|
2026
|
+
|| !Number.isSafeInteger(checkpoint.coveredThroughSequence)
|
|
2027
|
+
|| checkpoint.coveredThroughSequence <= 0
|
|
2028
|
+
|| !Number.isSafeInteger(checkpoint.geometryGeneration)
|
|
2029
|
+
|| checkpoint.geometryGeneration <= 0
|
|
2030
|
+
|| !Number.isSafeInteger(checkpoint.parserEpoch)
|
|
2031
|
+
|| checkpoint.parserEpoch <= 0
|
|
2032
|
+
|| !Number.isSafeInteger(checkpoint.cols)
|
|
2033
|
+
|| checkpoint.cols <= 0
|
|
2034
|
+
|| !Number.isSafeInteger(checkpoint.rows)
|
|
2035
|
+
|| checkpoint.rows <= 0
|
|
2036
|
+
|| !(checkpoint.bytes instanceof Uint8Array)
|
|
2037
|
+
|| checkpoint.bytes.byteLength === 0
|
|
2038
|
+
|| !/^[0-9a-f]{64}$/.test(checkpoint.stateDigestSha256)) {
|
|
2039
|
+
throw new Error('Invalid authoritative terminal checkpoint metadata');
|
|
2040
|
+
}
|
|
2041
|
+
const terminalAny = this.terminal;
|
|
2042
|
+
const wasmTerm = terminalAny.wasmTerm;
|
|
2043
|
+
if (!wasmTerm
|
|
2044
|
+
|| typeof wasmTerm.validateCheckpoint !== 'function'
|
|
2045
|
+
|| typeof wasmTerm.restoreCheckpoint !== 'function'
|
|
2046
|
+
|| typeof wasmTerm.getStateDigest !== 'function') {
|
|
2047
|
+
throw new Error('Published Ghostty terminal checkpoint API is unavailable');
|
|
2048
|
+
}
|
|
2049
|
+
if (terminalAny.cols !== checkpoint.cols || terminalAny.rows !== checkpoint.rows) {
|
|
2050
|
+
throw new Error('Terminal geometry does not match authoritative checkpoint');
|
|
2051
|
+
}
|
|
2052
|
+
const bytes = checkpoint.bytes.slice();
|
|
2053
|
+
if (await sha256Hex(bytes) !== checkpoint.checksumSha256) {
|
|
2054
|
+
throw new Error('Authoritative terminal checkpoint checksum mismatch');
|
|
2055
|
+
}
|
|
2056
|
+
const coordinates = {
|
|
2057
|
+
historySequence: BigInt(checkpoint.coveredThroughSequence),
|
|
2058
|
+
geometryGeneration: BigInt(checkpoint.geometryGeneration),
|
|
2059
|
+
parserEpoch: BigInt(checkpoint.parserEpoch),
|
|
2060
|
+
};
|
|
2061
|
+
const metadata = wasmTerm.validateCheckpoint(bytes);
|
|
2062
|
+
if (metadata.formatVersion !== checkpoint.formatVersion
|
|
2063
|
+
|| metadata.cols !== checkpoint.cols
|
|
2064
|
+
|| metadata.rows !== checkpoint.rows
|
|
2065
|
+
|| metadata.historySequence !== coordinates.historySequence
|
|
2066
|
+
|| metadata.geometryGeneration !== coordinates.geometryGeneration
|
|
2067
|
+
|| metadata.parserEpoch !== coordinates.parserEpoch) {
|
|
2068
|
+
throw new Error('Authoritative terminal checkpoint coordinates do not match');
|
|
2069
|
+
}
|
|
2070
|
+
wasmTerm.restoreCheckpoint(bytes, coordinates);
|
|
2071
|
+
if (wasmTerm.getStateDigest() !== checkpoint.stateDigestSha256) {
|
|
2072
|
+
throw new Error('Authoritative terminal checkpoint state digest mismatch');
|
|
2073
|
+
}
|
|
2074
|
+
this.needsFullRenderOnNextWrite = true;
|
|
2075
|
+
this.forceFullRender();
|
|
2076
|
+
await this.forceResizeAndWaitForCommittedFrame();
|
|
2077
|
+
}
|
|
1998
2078
|
getResourceEstimate() {
|
|
1999
2079
|
const wasmMemoryBytes = this.ownedRuntimeMemory?.buffer.byteLength ?? 0;
|
|
2000
2080
|
if (wasmMemoryBytes <= 0) {
|
|
@@ -2462,7 +2542,7 @@ export class TerminalCore {
|
|
|
2462
2542
|
sm.selectionEnd = { col: endCol, absoluteRow: match.row };
|
|
2463
2543
|
sm.markCurrentSelectionDirty?.();
|
|
2464
2544
|
sm.selectionChangedEmitter?.fire?.();
|
|
2465
|
-
// ghostty-web 不会因为 selection change 自动触发 render;主动刷新以保证 UI(按钮/快捷键)操作立即可见。
|
|
2545
|
+
// @floegence/ghostty-web 不会因为 selection change 自动触发 render;主动刷新以保证 UI(按钮/快捷键)操作立即可见。
|
|
2466
2546
|
this.forceFullRender();
|
|
2467
2547
|
return;
|
|
2468
2548
|
}
|
|
@@ -2487,7 +2567,7 @@ export class TerminalCore {
|
|
|
2487
2567
|
catch {
|
|
2488
2568
|
}
|
|
2489
2569
|
}
|
|
2490
|
-
// ghostty-web 不会因为 clearSelection 自动触发 render;主动刷新以清除残留高亮。
|
|
2570
|
+
// @floegence/ghostty-web 不会因为 clearSelection 自动触发 render;主动刷新以清除残留高亮。
|
|
2491
2571
|
this.forceFullRender();
|
|
2492
2572
|
}
|
|
2493
2573
|
patchSearchSelectionManager(sm) {
|
|
@@ -2537,7 +2617,7 @@ export class TerminalCore {
|
|
|
2537
2617
|
};
|
|
2538
2618
|
}
|
|
2539
2619
|
applyRendererTheme(terminalAny, theme) {
|
|
2540
|
-
// ghostty-web emits a warning when mutating options.theme after open().
|
|
2620
|
+
// @floegence/ghostty-web emits a warning when mutating options.theme after open().
|
|
2541
2621
|
// Apply theme directly to the renderer to avoid noisy console output.
|
|
2542
2622
|
if (!terminalAny.isOpen && this.terminal) {
|
|
2543
2623
|
this.terminal.options.theme = theme;
|