@floegence/floeterm-terminal-web 0.15.7 → 0.16.1
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 +25 -2
- package/dist/entries/semantic.d.ts +6 -2
- package/dist/entries/semantic.d.ts.map +1 -1
- package/dist/entries/semantic.js +3 -1
- package/dist/entries/semantic.js.map +1 -1
- package/dist/live/codec.d.ts.map +1 -1
- package/dist/live/codec.js +3 -51
- package/dist/live/codec.js.map +1 -1
- package/dist/live/transport.d.ts +3 -3
- package/dist/live/transport.d.ts.map +1 -1
- package/dist/live/transport.js +79 -7
- package/dist/live/transport.js.map +1 -1
- package/dist/semantic/HistorySearchController.d.ts +36 -0
- package/dist/semantic/HistorySearchController.d.ts.map +1 -0
- package/dist/semantic/HistorySearchController.js +183 -0
- package/dist/semantic/HistorySearchController.js.map +1 -0
- package/dist/semantic/HistoryViewportController.d.ts +79 -0
- package/dist/semantic/HistoryViewportController.d.ts.map +1 -0
- package/dist/semantic/HistoryViewportController.js +487 -0
- package/dist/semantic/HistoryViewportController.js.map +1 -0
- package/dist/semantic/RendererSurface.d.ts.map +1 -1
- package/dist/semantic/RendererSurface.js +9 -3
- package/dist/semantic/RendererSurface.js.map +1 -1
- package/dist/semantic/frameCodec.d.ts +3 -0
- package/dist/semantic/frameCodec.d.ts.map +1 -0
- package/dist/semantic/frameCodec.js +72 -0
- package/dist/semantic/frameCodec.js.map +1 -0
- package/dist/semantic/historyRequestScheduler.d.ts +2 -0
- package/dist/semantic/historyRequestScheduler.d.ts.map +1 -0
- package/dist/semantic/historyRequestScheduler.js +20 -0
- package/dist/semantic/historyRequestScheduler.js.map +1 -0
- package/dist/semantic/presentation.d.ts +59 -3
- package/dist/semantic/presentation.d.ts.map +1 -1
- package/dist/semantic/presentation.js +206 -15
- package/dist/semantic/presentation.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { SemanticHistoryError, validateHistoryViewport } from './presentation.js';
|
|
2
|
+
import { runSemanticHistoryRequest } from './historyRequestScheduler.js';
|
|
3
|
+
// Owns the isolated server-side search frontier. Search never borrows or
|
|
4
|
+
// replaces the viewport controller's navigation frontier.
|
|
5
|
+
export class HistorySearchController {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.options = options;
|
|
8
|
+
this.latest = null;
|
|
9
|
+
this.frontier = null;
|
|
10
|
+
this.transportGeneration = null;
|
|
11
|
+
this.operation = Promise.resolve();
|
|
12
|
+
this.epoch = 0;
|
|
13
|
+
this.searchId = 0;
|
|
14
|
+
this.disposed = false;
|
|
15
|
+
}
|
|
16
|
+
apply(presentation) {
|
|
17
|
+
if (this.disposed)
|
|
18
|
+
return;
|
|
19
|
+
const invalidated = this.latest !== null && ((this.latest.state.contentEpoch ?? 0) !== (presentation.state.contentEpoch ?? 0)
|
|
20
|
+
|| this.latest.geometry.generation !== presentation.geometry.generation
|
|
21
|
+
|| this.latest.geometry.cols !== presentation.geometry.cols
|
|
22
|
+
|| this.latest.geometry.rows !== presentation.geometry.rows);
|
|
23
|
+
this.latest = presentation;
|
|
24
|
+
if (invalidated)
|
|
25
|
+
this.reset();
|
|
26
|
+
}
|
|
27
|
+
setTransportGeneration(generation) {
|
|
28
|
+
if (this.disposed)
|
|
29
|
+
return;
|
|
30
|
+
if (generation !== null && (!Number.isSafeInteger(generation) || generation <= 0)) {
|
|
31
|
+
throw new Error('terminal history transport generation is invalid');
|
|
32
|
+
}
|
|
33
|
+
if (this.transportGeneration === generation)
|
|
34
|
+
return;
|
|
35
|
+
this.transportGeneration = generation;
|
|
36
|
+
this.reset();
|
|
37
|
+
}
|
|
38
|
+
search(query) {
|
|
39
|
+
const normalized = query.trim();
|
|
40
|
+
const epoch = ++this.epoch;
|
|
41
|
+
const searchId = ++this.searchId;
|
|
42
|
+
const operation = this.operation.catch(() => undefined).then(async () => {
|
|
43
|
+
if (this.disposed || epoch !== this.epoch || normalized.length === 0) {
|
|
44
|
+
return Object.freeze({ query: normalized, matches: Object.freeze([]), truncated: false });
|
|
45
|
+
}
|
|
46
|
+
return await this.scan(normalized, epoch, searchId);
|
|
47
|
+
});
|
|
48
|
+
this.operation = operation;
|
|
49
|
+
return operation;
|
|
50
|
+
}
|
|
51
|
+
resolveMatch(match) {
|
|
52
|
+
const epoch = this.epoch;
|
|
53
|
+
const operation = this.operation.catch(() => undefined).then(async () => {
|
|
54
|
+
if (this.disposed || epoch !== this.epoch || match.searchId !== this.searchId) {
|
|
55
|
+
throw new SemanticHistoryError('snapshot_superseded', 'semantic history search result is stale');
|
|
56
|
+
}
|
|
57
|
+
if (match.live)
|
|
58
|
+
return null;
|
|
59
|
+
const current = this.frontier;
|
|
60
|
+
if (!current)
|
|
61
|
+
throw new SemanticHistoryError('snapshot_superseded', 'semantic history search frontier is unavailable');
|
|
62
|
+
if (current.offset === match.viewportOffset)
|
|
63
|
+
return current;
|
|
64
|
+
const direction = match.viewportOffset < current.offset ? 'backward' : 'forward';
|
|
65
|
+
const next = validateHistoryViewport(await runSemanticHistoryRequest(() => this.options.request({
|
|
66
|
+
lane: 'search',
|
|
67
|
+
direction,
|
|
68
|
+
anchor: current.anchor,
|
|
69
|
+
snapshotId: current.snapshotId,
|
|
70
|
+
offset: current.offset,
|
|
71
|
+
targetOffset: match.viewportOffset,
|
|
72
|
+
viewportRows: current.rows,
|
|
73
|
+
})));
|
|
74
|
+
this.assertViewport(next, current.anchor);
|
|
75
|
+
if (this.disposed || epoch !== this.epoch) {
|
|
76
|
+
throw new SemanticHistoryError('snapshot_superseded', 'semantic history search was superseded');
|
|
77
|
+
}
|
|
78
|
+
this.frontier = next;
|
|
79
|
+
return next;
|
|
80
|
+
});
|
|
81
|
+
this.operation = operation;
|
|
82
|
+
return operation;
|
|
83
|
+
}
|
|
84
|
+
reset() {
|
|
85
|
+
if (this.disposed)
|
|
86
|
+
return;
|
|
87
|
+
this.epoch += 1;
|
|
88
|
+
this.frontier = null;
|
|
89
|
+
}
|
|
90
|
+
dispose() {
|
|
91
|
+
if (this.disposed)
|
|
92
|
+
return;
|
|
93
|
+
this.disposed = true;
|
|
94
|
+
this.epoch += 1;
|
|
95
|
+
this.frontier = null;
|
|
96
|
+
}
|
|
97
|
+
async scan(query, epoch, searchId) {
|
|
98
|
+
const latest = this.latest;
|
|
99
|
+
if (!latest)
|
|
100
|
+
throw new Error('terminal history search requires a live Presentation');
|
|
101
|
+
const needle = query.toLocaleLowerCase();
|
|
102
|
+
const matches = [];
|
|
103
|
+
const seenRows = new Set();
|
|
104
|
+
const maxMatches = Math.max(1, Math.min(100000, Math.trunc(this.options.maxMatches ?? 10000)));
|
|
105
|
+
let truncated = false;
|
|
106
|
+
const collect = (frame, viewportOffset, live, upperBound) => {
|
|
107
|
+
for (let line = 0; line < frame.rows.length; line += 1) {
|
|
108
|
+
const absoluteRow = viewportOffset + line;
|
|
109
|
+
if (absoluteRow >= upperBound || seenRows.has(absoluteRow))
|
|
110
|
+
continue;
|
|
111
|
+
seenRows.add(absoluteRow);
|
|
112
|
+
if (!semanticHistoryRowText(frame, line).toLocaleLowerCase().includes(needle))
|
|
113
|
+
continue;
|
|
114
|
+
if (matches.length >= maxMatches) {
|
|
115
|
+
truncated = true;
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
matches.push(Object.freeze({ searchId, viewportOffset, line, live }));
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
let current = validateHistoryViewport(await runSemanticHistoryRequest(() => this.options.request({
|
|
122
|
+
lane: 'search',
|
|
123
|
+
direction: 'start',
|
|
124
|
+
viewportRows: latest.geometry.rows,
|
|
125
|
+
})));
|
|
126
|
+
this.assertViewport(current);
|
|
127
|
+
const anchor = current.anchor;
|
|
128
|
+
const scrollbackEnd = current.screenStartOffset;
|
|
129
|
+
collect(current.frame, current.offset, false, scrollbackEnd);
|
|
130
|
+
const finalStart = Math.max(0, scrollbackEnd - current.rows);
|
|
131
|
+
while (current.offset < finalStart) {
|
|
132
|
+
if (this.disposed || epoch !== this.epoch) {
|
|
133
|
+
throw new SemanticHistoryError('snapshot_superseded', 'semantic history search was superseded');
|
|
134
|
+
}
|
|
135
|
+
const targetOffset = Math.min(finalStart, current.offset + current.rows);
|
|
136
|
+
const next = validateHistoryViewport(await runSemanticHistoryRequest(() => this.options.request({
|
|
137
|
+
lane: 'search',
|
|
138
|
+
direction: 'forward',
|
|
139
|
+
anchor: current.anchor,
|
|
140
|
+
snapshotId: current.snapshotId,
|
|
141
|
+
offset: current.offset,
|
|
142
|
+
targetOffset,
|
|
143
|
+
viewportRows: current.rows,
|
|
144
|
+
})));
|
|
145
|
+
this.assertViewport(next, anchor);
|
|
146
|
+
if (next.offset <= current.offset) {
|
|
147
|
+
throw new SemanticHistoryError('malformed_snapshot', 'semantic history search did not advance');
|
|
148
|
+
}
|
|
149
|
+
current = next;
|
|
150
|
+
collect(current.frame, current.offset, false, scrollbackEnd);
|
|
151
|
+
}
|
|
152
|
+
if (this.disposed || epoch !== this.epoch) {
|
|
153
|
+
throw new SemanticHistoryError('snapshot_superseded', 'semantic history search was superseded');
|
|
154
|
+
}
|
|
155
|
+
this.frontier = current;
|
|
156
|
+
collect(latest.frame, latest.frame.history.screenStartOffset, true, Number.POSITIVE_INFINITY);
|
|
157
|
+
return Object.freeze({ query, matches: Object.freeze(matches), truncated });
|
|
158
|
+
}
|
|
159
|
+
assertViewport(viewport, anchor) {
|
|
160
|
+
const latest = this.latest;
|
|
161
|
+
if (!latest || viewport.lane !== 'search') {
|
|
162
|
+
throw new SemanticHistoryError('malformed_snapshot', 'semantic history search response belongs to another lane');
|
|
163
|
+
}
|
|
164
|
+
if (anchor !== undefined && viewport.anchor !== anchor) {
|
|
165
|
+
throw new SemanticHistoryError('snapshot_superseded', 'semantic history search frontier changed');
|
|
166
|
+
}
|
|
167
|
+
if (viewport.contentEpoch !== (latest.state.contentEpoch ?? 0)
|
|
168
|
+
|| viewport.geometryGeneration !== latest.geometry.generation
|
|
169
|
+
|| viewport.cols !== latest.geometry.cols
|
|
170
|
+
|| viewport.rows !== latest.geometry.rows) {
|
|
171
|
+
throw new SemanticHistoryError('snapshot_superseded', 'semantic history search geometry changed');
|
|
172
|
+
}
|
|
173
|
+
if (this.transportGeneration === null)
|
|
174
|
+
this.transportGeneration = viewport.transportGeneration;
|
|
175
|
+
else if (viewport.transportGeneration !== this.transportGeneration) {
|
|
176
|
+
throw new SemanticHistoryError('transport_stale', 'stale terminal search transport generation');
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function semanticHistoryRowText(frame, line) {
|
|
181
|
+
return frame.rows[line]?.cells.map(cell => cell.text).join('').trimEnd() ?? '';
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=HistorySearchController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HistorySearchController.js","sourceRoot":"","sources":["../../src/semantic/HistorySearchController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { RendererSurface } from './RendererSurface.js';
|
|
2
|
+
import type { SemanticHistoryRequest, SemanticHistoryViewport, SemanticPresentation } from './presentation.js';
|
|
3
|
+
export type HistoryViewportState = Readonly<{
|
|
4
|
+
browsing: boolean;
|
|
5
|
+
busy: boolean;
|
|
6
|
+
offset: number;
|
|
7
|
+
totalRows: number;
|
|
8
|
+
screenStartOffset: number;
|
|
9
|
+
error: Error | null;
|
|
10
|
+
}>;
|
|
11
|
+
export type HistoryViewportCacheMetrics = Readonly<{
|
|
12
|
+
entries: number;
|
|
13
|
+
bytes: number;
|
|
14
|
+
extraBytes: number;
|
|
15
|
+
extraCells: number;
|
|
16
|
+
}>;
|
|
17
|
+
export type HistoryViewportControllerOptions = Readonly<{
|
|
18
|
+
renderer: Pick<RendererSurface, 'apply' | 'project' | 'getCellMetrics'>;
|
|
19
|
+
request: (request: SemanticHistoryRequest) => Promise<SemanticHistoryViewport>;
|
|
20
|
+
onState?: (state: HistoryViewportState) => void;
|
|
21
|
+
requestAnimationFrame?: (callback: FrameRequestCallback) => number;
|
|
22
|
+
cancelAnimationFrame?: (handle: number) => void;
|
|
23
|
+
}>;
|
|
24
|
+
export declare class HistoryViewportController {
|
|
25
|
+
private readonly options;
|
|
26
|
+
private readonly cacheOwner;
|
|
27
|
+
private latest;
|
|
28
|
+
private visible;
|
|
29
|
+
private frontier;
|
|
30
|
+
private readonly cache;
|
|
31
|
+
private cacheBytes;
|
|
32
|
+
private historyAnchor;
|
|
33
|
+
private desiredOffset;
|
|
34
|
+
private prefetchOffset;
|
|
35
|
+
private lane;
|
|
36
|
+
private epoch;
|
|
37
|
+
private transportGeneration;
|
|
38
|
+
private touch;
|
|
39
|
+
private disposed;
|
|
40
|
+
private viewVisible;
|
|
41
|
+
private error;
|
|
42
|
+
private wheelResidualRows;
|
|
43
|
+
private wheelFrame;
|
|
44
|
+
private lastDirection;
|
|
45
|
+
private readonly requestFrame;
|
|
46
|
+
private readonly cancelFrame;
|
|
47
|
+
constructor(options: HistoryViewportControllerOptions);
|
|
48
|
+
apply(presentation: SemanticPresentation): void;
|
|
49
|
+
scrollByRows(deltaRows: number): void;
|
|
50
|
+
handleWheel(delta: number, deltaMode: number): void;
|
|
51
|
+
showStart(): void;
|
|
52
|
+
showLatest(): void;
|
|
53
|
+
showOffset(offset: number): void;
|
|
54
|
+
setVisible(visible: boolean): void;
|
|
55
|
+
reset(): void;
|
|
56
|
+
setTransportGeneration(generation: number | null): void;
|
|
57
|
+
getState(): HistoryViewportState;
|
|
58
|
+
getViewport(): SemanticHistoryViewport | null;
|
|
59
|
+
showViewport(viewport: SemanticHistoryViewport): void;
|
|
60
|
+
getCacheMetrics(): HistoryViewportCacheMetrics;
|
|
61
|
+
dispose(): void;
|
|
62
|
+
private startLane;
|
|
63
|
+
private runLane;
|
|
64
|
+
private fetchOffset;
|
|
65
|
+
private display;
|
|
66
|
+
private cacheViewport;
|
|
67
|
+
private evictCache;
|
|
68
|
+
private schedulePrefetch;
|
|
69
|
+
private isCompatible;
|
|
70
|
+
private assertTransportGeneration;
|
|
71
|
+
private resetHistory;
|
|
72
|
+
private findCachedViewport;
|
|
73
|
+
private putCache;
|
|
74
|
+
private clearCache;
|
|
75
|
+
private removeCacheEntry;
|
|
76
|
+
private acceptLineage;
|
|
77
|
+
private emitState;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=HistoryViewportController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HistoryViewportController.d.ts","sourceRoot":"","sources":["../../src/semantic/HistoryViewportController.ts"],"names":[],"mappings":"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"}
|