@floegence/floeterm-terminal-web 0.6.3 → 0.6.5
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 +22 -0
- package/dist/core/TerminalCore.d.ts +4 -0
- package/dist/core/TerminalCore.d.ts.map +1 -1
- package/dist/core/TerminalCore.js +35 -4
- package/dist/core/TerminalCore.js.map +1 -1
- package/dist/entries/sessions.d.ts +1 -1
- package/dist/entries/sessions.d.ts.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/live/transport.d.ts.map +1 -1
- package/dist/live/transport.js +3 -0
- package/dist/live/transport.js.map +1 -1
- package/dist/sessions/TerminalSessionsCoordinator.d.ts +2 -1
- package/dist/sessions/TerminalSessionsCoordinator.d.ts.map +1 -1
- package/dist/sessions/TerminalSessionsCoordinator.js +80 -5
- package/dist/sessions/TerminalSessionsCoordinator.js.map +1 -1
- package/dist/shell/TerminalShellIntegrationParser.d.ts +27 -0
- package/dist/shell/TerminalShellIntegrationParser.d.ts.map +1 -0
- package/dist/shell/TerminalShellIntegrationParser.js +172 -0
- package/dist/shell/TerminalShellIntegrationParser.js.map +1 -0
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -87,6 +87,28 @@ import { preparePagedTerminalHistory } from '@floegence/floeterm-terminal-web/hi
|
|
|
87
87
|
|
|
88
88
|
`TerminalSessionsCoordinator` treats `pollMs: 0` as a real periodic-poll disable. Subscribing still performs one best-effort initial reconcile, and explicit `refresh()` calls remain available to a host-owned lifecycle coordinator.
|
|
89
89
|
|
|
90
|
+
Session snapshots may include `foregroundCommand`. The coordinator normalizes
|
|
91
|
+
missing metadata to `unknown`, compares command-only updates, and applies a
|
|
92
|
+
command patch only when its command revision is newer. Working-directory and
|
|
93
|
+
name patches keep their independent ordering.
|
|
94
|
+
|
|
95
|
+
Hosts that own output projection can reuse the bounded shell parser instead of
|
|
96
|
+
maintaining a product-specific OSC implementation:
|
|
97
|
+
|
|
98
|
+
```ts
|
|
99
|
+
import { TerminalShellIntegrationParser } from '@floegence/floeterm-terminal-web';
|
|
100
|
+
|
|
101
|
+
const parser = new TerminalShellIntegrationParser();
|
|
102
|
+
const { displayData, events } = parser.parse(chunk);
|
|
103
|
+
core.write(displayData);
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The parser recognizes OSC 633 prompt/command/cwd markers and Floeterm's safe
|
|
107
|
+
program label. Recognized metadata is removed from display output, unknown OSC
|
|
108
|
+
sequences are preserved, fragmented input is bounded, and program labels are
|
|
109
|
+
limited to a 64-byte ASCII allowlist. The label never contains command
|
|
110
|
+
arguments or environment values.
|
|
111
|
+
|
|
90
112
|
## Notes
|
|
91
113
|
|
|
92
114
|
- You must provide a `TerminalTransport` and `TerminalEventSource` for the managed controller.
|
|
@@ -44,6 +44,7 @@ export declare class TerminalCore {
|
|
|
44
44
|
private terminalThemeSource;
|
|
45
45
|
private themeColorTranslator;
|
|
46
46
|
private fontMetricSeq;
|
|
47
|
+
private fontMetricRefreshPromise;
|
|
47
48
|
private pendingPresentationScale;
|
|
48
49
|
private suppressResizeNotifications;
|
|
49
50
|
private clearResizeSuppressionRaf;
|
|
@@ -118,6 +119,8 @@ export declare class TerminalCore {
|
|
|
118
119
|
private waitForDOMAndFonts;
|
|
119
120
|
private waitForTerminalFontReady;
|
|
120
121
|
private refreshFontMetricsAfterLoad;
|
|
122
|
+
private applyFontMetricsAfterLoad;
|
|
123
|
+
private waitForStableFontMetrics;
|
|
121
124
|
private ensureContainerReady;
|
|
122
125
|
private setupEventListeners;
|
|
123
126
|
private setupResponsiveListeners;
|
|
@@ -207,6 +210,7 @@ export declare class TerminalCore {
|
|
|
207
210
|
setConnected(isConnected: boolean): void;
|
|
208
211
|
forceResize(): void;
|
|
209
212
|
forceResizeAndWaitForPresentation(): Promise<void>;
|
|
213
|
+
private forceResizeAndWaitForCommittedFrame;
|
|
210
214
|
setFixedDimensions(dimensions: TerminalDimensions | null): void;
|
|
211
215
|
setAppearance(appearance: TerminalAppearance): void;
|
|
212
216
|
setTheme(theme: Record<string, unknown>): void;
|
|
@@ -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,qBAAqB,EAE1B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAGzB,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;AAoSrB,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAkSjF,qBAAa,YAAY;
|
|
1
|
+
{"version":3,"file":"TerminalCore.d.ts","sourceRoot":"","sources":["../../src/core/TerminalCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -374,6 +374,7 @@ export class TerminalCore {
|
|
|
374
374
|
this.terminalThemeSource = {};
|
|
375
375
|
this.themeColorTranslator = null;
|
|
376
376
|
this.fontMetricSeq = 0;
|
|
377
|
+
this.fontMetricRefreshPromise = null;
|
|
377
378
|
this.pendingPresentationScale = null;
|
|
378
379
|
this.suppressResizeNotifications = false;
|
|
379
380
|
this.clearResizeSuppressionRaf = null;
|
|
@@ -1424,20 +1425,25 @@ export class TerminalCore {
|
|
|
1424
1425
|
this.logger.warn('[TerminalCore] Terminal font loading failed, continuing', { error, reason, fontFamily });
|
|
1425
1426
|
}
|
|
1426
1427
|
}
|
|
1427
|
-
|
|
1428
|
+
refreshFontMetricsAfterLoad(reason) {
|
|
1428
1429
|
if (!this.terminal) {
|
|
1429
|
-
return;
|
|
1430
|
+
return Promise.resolve();
|
|
1430
1431
|
}
|
|
1431
1432
|
const terminalAny = this.terminal;
|
|
1432
1433
|
const fontFamily = terminalAny.options?.fontFamily ?? this.config.fontFamily;
|
|
1433
1434
|
const fontSize = Number(terminalAny.options?.fontSize ?? this.resolveEffectiveFontSize());
|
|
1434
1435
|
const seq = ++this.fontMetricSeq;
|
|
1435
|
-
|
|
1436
|
+
const refresh = this.applyFontMetricsAfterLoad(terminalAny, typeof fontFamily === 'string' ? fontFamily : undefined, fontSize, reason, seq);
|
|
1437
|
+
this.fontMetricRefreshPromise = refresh;
|
|
1438
|
+
return refresh;
|
|
1439
|
+
}
|
|
1440
|
+
async applyFontMetricsAfterLoad(terminal, fontFamily, fontSize, reason, seq) {
|
|
1441
|
+
await this.waitForTerminalFontReady(fontFamily, fontSize, reason);
|
|
1436
1442
|
if (this.isDisposed || seq !== this.fontMetricSeq || !this.terminal) {
|
|
1437
1443
|
return;
|
|
1438
1444
|
}
|
|
1439
1445
|
try {
|
|
1440
|
-
|
|
1446
|
+
terminal.renderer?.remeasureFont?.();
|
|
1441
1447
|
}
|
|
1442
1448
|
catch (error) {
|
|
1443
1449
|
this.logger.debug('[TerminalCore] Terminal font remeasure failed', { error, reason });
|
|
@@ -1446,6 +1452,21 @@ export class TerminalCore {
|
|
|
1446
1452
|
this.forceFullRender();
|
|
1447
1453
|
this.scheduleRenderSearchOverlay();
|
|
1448
1454
|
}
|
|
1455
|
+
async waitForStableFontMetrics() {
|
|
1456
|
+
while (true) {
|
|
1457
|
+
if (this.isDisposed) {
|
|
1458
|
+
throw new Error('TerminalCore was disposed before font metrics stabilized');
|
|
1459
|
+
}
|
|
1460
|
+
const seq = this.fontMetricSeq;
|
|
1461
|
+
const refresh = this.fontMetricRefreshPromise;
|
|
1462
|
+
if (refresh) {
|
|
1463
|
+
await refresh;
|
|
1464
|
+
}
|
|
1465
|
+
if (seq === this.fontMetricSeq && refresh === this.fontMetricRefreshPromise) {
|
|
1466
|
+
return seq;
|
|
1467
|
+
}
|
|
1468
|
+
}
|
|
1469
|
+
}
|
|
1449
1470
|
async ensureContainerReady() {
|
|
1450
1471
|
const maxRetries = 15;
|
|
1451
1472
|
const retryDelay = 50;
|
|
@@ -2656,6 +2677,16 @@ export class TerminalCore {
|
|
|
2656
2677
|
this.requestDemandRender(true);
|
|
2657
2678
|
}
|
|
2658
2679
|
async forceResizeAndWaitForPresentation() {
|
|
2680
|
+
while (true) {
|
|
2681
|
+
const fontMetricSeq = await this.waitForStableFontMetrics();
|
|
2682
|
+
await this.forceResizeAndWaitForCommittedFrame();
|
|
2683
|
+
await this.waitForStableFontMetrics();
|
|
2684
|
+
if (fontMetricSeq === this.fontMetricSeq) {
|
|
2685
|
+
return;
|
|
2686
|
+
}
|
|
2687
|
+
}
|
|
2688
|
+
}
|
|
2689
|
+
async forceResizeAndWaitForCommittedFrame() {
|
|
2659
2690
|
if (this.isDisposed) {
|
|
2660
2691
|
throw new Error('Cannot present a disposed TerminalCore');
|
|
2661
2692
|
}
|