@termwright/protocol 0.2.0 → 0.3.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 +213 -605
- package/dist/action-model-BP9Znu6L.d.ts +219 -0
- package/dist/action-model.d.ts +3 -0
- package/dist/action-model.js +15 -0
- package/dist/action-model.js.map +1 -0
- package/dist/capability-graph.d.ts +90 -0
- package/dist/capability-graph.js +43 -0
- package/dist/capability-graph.js.map +1 -0
- package/dist/chunk-B4VUTTUE.js +59 -0
- package/dist/chunk-B4VUTTUE.js.map +1 -0
- package/dist/chunk-CZK6NNP3.js +389 -0
- package/dist/chunk-CZK6NNP3.js.map +1 -0
- package/dist/chunk-ODOJRXL6.js +84 -0
- package/dist/chunk-ODOJRXL6.js.map +1 -0
- package/dist/chunk-PUXRCPGY.js +112 -0
- package/dist/chunk-PUXRCPGY.js.map +1 -0
- package/dist/chunk-VBLS6E6U.js +1109 -0
- package/dist/chunk-VBLS6E6U.js.map +1 -0
- package/dist/chunk-ZZIYHDJ4.js +202 -0
- package/dist/chunk-ZZIYHDJ4.js.map +1 -0
- package/dist/contract-CH9gmj2Y.d.ts +746 -0
- package/dist/contract.d.ts +2 -0
- package/dist/contract.js +21 -0
- package/dist/contract.js.map +1 -0
- package/dist/index.d.ts +82 -798
- package/dist/index.js +1087 -766
- package/dist/index.js.map +1 -1
- package/dist/run-events.d.ts +158 -0
- package/dist/run-events.js +27 -0
- package/dist/run-events.js.map +1 -0
- package/dist/run-journal.d.ts +55 -0
- package/dist/run-journal.js +10 -0
- package/dist/run-journal.js.map +1 -0
- package/dist/run-state.d.ts +38 -0
- package/dist/run-state.js +19 -0
- package/dist/run-state.js.map +1 -0
- package/dist/test-provider.d.ts +22 -0
- package/dist/test-provider.js +32 -0
- package/dist/test-provider.js.map +1 -0
- package/package.json +33 -5
|
@@ -0,0 +1,746 @@
|
|
|
1
|
+
import { SessionCapabilityId, ProbeCapability, EvidenceProviderCapability } from './capability-graph.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Semantic roles for the current protocol. ARIA-aligned; closed set. Unknown roles must be rejected
|
|
5
|
+
* during validation — they never silently acquire behavior.
|
|
6
|
+
*/
|
|
7
|
+
declare const SEMANTIC_ROLES: readonly ["application", "region", "dialog", "alert", "status", "list", "listitem", "menu", "menuitem", "button", "checkbox", "radio", "tab", "textbox", "heading", "text", "progressbar", "separator", "scrollbar", "table", "row", "cell", "generic"];
|
|
8
|
+
type SemanticRole = (typeof SEMANTIC_ROLES)[number];
|
|
9
|
+
/** Descriptive action capabilities. Diagnostic/strategy hints, never callback endpoints. */
|
|
10
|
+
declare const SEMANTIC_ACTIONS: readonly ["focus", "activate", "toggle", "setValue", "scroll", "select", "expand"];
|
|
11
|
+
type SemanticAction = (typeof SEMANTIC_ACTIONS)[number];
|
|
12
|
+
declare const PHYSICAL_INPUT_RECIPE_ACTIONS: readonly ["focus", "activate", "toggle", "setValue"];
|
|
13
|
+
type PhysicalInputRecipeAction = (typeof PHYSICAL_INPUT_RECIPE_ACTIONS)[number];
|
|
14
|
+
/** Data-only physical input recipe; integrations never receive an execution callback. */
|
|
15
|
+
type PhysicalInputRecipeStep = {
|
|
16
|
+
readonly kind: 'press';
|
|
17
|
+
readonly key: string;
|
|
18
|
+
} | {
|
|
19
|
+
readonly kind: 'insert-action-value';
|
|
20
|
+
};
|
|
21
|
+
interface PhysicalInputRecipe {
|
|
22
|
+
readonly action: PhysicalInputRecipeAction;
|
|
23
|
+
readonly requiresFocus: boolean;
|
|
24
|
+
readonly steps: readonly PhysicalInputRecipeStep[];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Why a fact is temporarily unsettled.
|
|
29
|
+
*
|
|
30
|
+
* Every value names a revision-domain retry boundary. Permanent inability to
|
|
31
|
+
* observe a fact is `unsupported`, never `unknown`.
|
|
32
|
+
*/
|
|
33
|
+
type ObservationUnknownReason = 'awaiting-revision-pair' | 'provider-refresh' | 'stale-revision';
|
|
34
|
+
type ObservationAbsentReason = 'detached' | 'not-displayed' | 'not-laid-out';
|
|
35
|
+
type ObservationUnsupportedReason = 'capability' | 'framework-unobservable' | 'not-negotiated';
|
|
36
|
+
type ObservationEvidence = EvidenceProvenance;
|
|
37
|
+
type AuthoritativeObservationEvidence = ObservationEvidence & {
|
|
38
|
+
readonly strength: 'authoritative';
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* A fact with its epistemic state preserved.
|
|
42
|
+
*
|
|
43
|
+
* Consumers must never coerce `unknown`/`unsupported` to false, nor absence to
|
|
44
|
+
* an empty value. That rule prevents assertions from passing because a probe
|
|
45
|
+
* simply could not observe the requested property.
|
|
46
|
+
*/
|
|
47
|
+
type Observation<T> = {
|
|
48
|
+
readonly status: 'known';
|
|
49
|
+
readonly value: T;
|
|
50
|
+
readonly evidence: ObservationEvidence;
|
|
51
|
+
} | {
|
|
52
|
+
readonly status: 'absent';
|
|
53
|
+
readonly reason: ObservationAbsentReason;
|
|
54
|
+
readonly evidence: AuthoritativeObservationEvidence;
|
|
55
|
+
} | {
|
|
56
|
+
readonly status: 'unknown';
|
|
57
|
+
readonly reason: ObservationUnknownReason;
|
|
58
|
+
} | {
|
|
59
|
+
readonly status: 'unsupported';
|
|
60
|
+
readonly capability: string;
|
|
61
|
+
readonly reason: ObservationUnsupportedReason;
|
|
62
|
+
};
|
|
63
|
+
type SemanticValueAbsentReason = ObservationAbsentReason | 'no-value';
|
|
64
|
+
type SemanticValueWithheldReason = 'sensitive' | 'artifact-policy' | 'provider-policy';
|
|
65
|
+
/** A semantic value never collapses absence, uncertainty, support or confidentiality. */
|
|
66
|
+
type SemanticValueObservation = {
|
|
67
|
+
readonly status: 'known';
|
|
68
|
+
readonly value: string;
|
|
69
|
+
readonly sensitivity: 'public' | 'sensitive';
|
|
70
|
+
readonly evidence: ObservationEvidence;
|
|
71
|
+
} | {
|
|
72
|
+
readonly status: 'absent';
|
|
73
|
+
readonly reason: SemanticValueAbsentReason;
|
|
74
|
+
readonly evidence: AuthoritativeObservationEvidence;
|
|
75
|
+
} | {
|
|
76
|
+
readonly status: 'unknown';
|
|
77
|
+
readonly reason: ObservationUnknownReason;
|
|
78
|
+
} | {
|
|
79
|
+
readonly status: 'unsupported';
|
|
80
|
+
readonly capability: 'semantic-value';
|
|
81
|
+
readonly reason: ObservationUnsupportedReason;
|
|
82
|
+
} | {
|
|
83
|
+
readonly status: 'withheld';
|
|
84
|
+
readonly reason: SemanticValueWithheldReason;
|
|
85
|
+
readonly sensitivity: 'public' | 'sensitive';
|
|
86
|
+
};
|
|
87
|
+
/** Atomic identity of the screen/tree pair used for an observation. */
|
|
88
|
+
interface ObservationStamp {
|
|
89
|
+
readonly sessionId: string;
|
|
90
|
+
readonly contractId: string;
|
|
91
|
+
readonly epoch: number;
|
|
92
|
+
/** Monotonic publication order across both screen and semantic revisions. */
|
|
93
|
+
readonly sequence: number;
|
|
94
|
+
readonly screenRevision: number;
|
|
95
|
+
readonly semanticRevision: number | null;
|
|
96
|
+
/** Screen revision paired to semanticRevision, or null when no pair exists. */
|
|
97
|
+
readonly pairedScreenRevision: number | null;
|
|
98
|
+
}
|
|
99
|
+
type CoordinateSpace = 'viewport-cells' | 'framework-local-cells';
|
|
100
|
+
interface LocatorGeometry {
|
|
101
|
+
readonly stamp: ObservationStamp;
|
|
102
|
+
readonly coordinateSpace: Observation<CoordinateSpace>;
|
|
103
|
+
readonly intendedRect: Observation<Rect>;
|
|
104
|
+
readonly visibleRect: Observation<Rect>;
|
|
105
|
+
}
|
|
106
|
+
interface ViewportIntersection {
|
|
107
|
+
/** Half-open intersection in viewport cell coordinates. */
|
|
108
|
+
readonly rect: Rect;
|
|
109
|
+
/** Intersection area / intended area. Zero-area intended rect has ratio 0. */
|
|
110
|
+
readonly ratio: number;
|
|
111
|
+
readonly fullyInside: boolean;
|
|
112
|
+
}
|
|
113
|
+
interface LocatorVisibility {
|
|
114
|
+
readonly stamp: ObservationStamp;
|
|
115
|
+
readonly attached: Observation<boolean>;
|
|
116
|
+
readonly displayed: Observation<boolean>;
|
|
117
|
+
readonly viewport: Observation<ViewportIntersection>;
|
|
118
|
+
readonly offscreen: Observation<boolean>;
|
|
119
|
+
}
|
|
120
|
+
interface CellPoint {
|
|
121
|
+
readonly row: number;
|
|
122
|
+
readonly column: number;
|
|
123
|
+
}
|
|
124
|
+
interface PointerHitTest {
|
|
125
|
+
readonly stamp: ObservationStamp;
|
|
126
|
+
readonly point: Observation<CellPoint>;
|
|
127
|
+
readonly receivesEvents: Observation<boolean>;
|
|
128
|
+
/** Ref of the actual recipient, when the producer can identify it. */
|
|
129
|
+
readonly recipient: Observation<string>;
|
|
130
|
+
}
|
|
131
|
+
type SpatialRelation = 'contains' | 'inside' | 'overlaps' | 'left-of' | 'right-of' | 'above' | 'below' | 'aligned-left' | 'aligned-right' | 'aligned-top' | 'aligned-bottom' | 'adjacent-horizontal' | 'adjacent-vertical';
|
|
132
|
+
/** Correct half-open rectangle intersection. Touching edges do not overlap. */
|
|
133
|
+
declare function intersectRects(a: Rect, b: Rect): Rect;
|
|
134
|
+
declare function rectArea(rect: Rect): number;
|
|
135
|
+
declare function viewportIntersection(rect: Rect, columns: number, rows: number): ViewportIntersection;
|
|
136
|
+
declare function spatialRelation(a: Rect, relation: SpatialRelation, b: Rect): boolean;
|
|
137
|
+
|
|
138
|
+
/** Zero-based viewport cell coordinates. */
|
|
139
|
+
interface Rect {
|
|
140
|
+
readonly row: number;
|
|
141
|
+
readonly column: number;
|
|
142
|
+
readonly width: number;
|
|
143
|
+
readonly height: number;
|
|
144
|
+
}
|
|
145
|
+
/** Closed state set. No arbitrary records. */
|
|
146
|
+
interface SemanticState {
|
|
147
|
+
readonly disabled?: boolean;
|
|
148
|
+
readonly focused?: boolean;
|
|
149
|
+
readonly selected?: boolean;
|
|
150
|
+
readonly checked?: boolean | 'mixed';
|
|
151
|
+
readonly expanded?: boolean;
|
|
152
|
+
readonly modal?: boolean;
|
|
153
|
+
readonly busy?: boolean;
|
|
154
|
+
readonly hidden?: boolean;
|
|
155
|
+
/**
|
|
156
|
+
* The node exists in the layout, but every one of its cells falls outside the
|
|
157
|
+
* visible area — it is scrolled out, and scrolling can bring it back.
|
|
158
|
+
*
|
|
159
|
+
* Named for the claim a test author makes ("this row is off screen"), not for
|
|
160
|
+
* the mechanism that produced it. Clipping is how it happens; being off
|
|
161
|
+
* screen is what it means.
|
|
162
|
+
*
|
|
163
|
+
* **Absent means "not claiming"**, not "on screen". A producer that cannot
|
|
164
|
+
* observe clipping simply omits it. Evidence-qualified geometry remains the
|
|
165
|
+
* authoritative source for viewport and visibility assertions.
|
|
166
|
+
*
|
|
167
|
+
* Implies {@link SemanticState.hidden}: if every cell is outside the visible
|
|
168
|
+
* area then the node is not visible, and validation refuses the pair
|
|
169
|
+
* `offscreen: true` without `hidden: true`.
|
|
170
|
+
*/
|
|
171
|
+
readonly offscreen?: boolean;
|
|
172
|
+
readonly readonly?: boolean;
|
|
173
|
+
readonly multiline?: boolean;
|
|
174
|
+
readonly required?: boolean;
|
|
175
|
+
readonly multiselectable?: boolean;
|
|
176
|
+
readonly orientation?: 'horizontal' | 'vertical';
|
|
177
|
+
readonly level?: number;
|
|
178
|
+
readonly positionInSet?: number;
|
|
179
|
+
readonly setSize?: number;
|
|
180
|
+
}
|
|
181
|
+
/** Authoritative application viewport state in production-defined logical units. */
|
|
182
|
+
interface SemanticScrollState {
|
|
183
|
+
readonly axis: 'vertical' | 'horizontal';
|
|
184
|
+
/** Logical distance from the start of the scrollable content. */
|
|
185
|
+
readonly offset: number;
|
|
186
|
+
/** Logical size of the visible application viewport. */
|
|
187
|
+
readonly viewport: number;
|
|
188
|
+
/** Logical size of the complete scrollable content. */
|
|
189
|
+
readonly extent: number;
|
|
190
|
+
}
|
|
191
|
+
/** Exact viewport cells painted by one semantic recipient for a committed frame. */
|
|
192
|
+
interface SemanticPaintedRegion {
|
|
193
|
+
/** Bounding box of the painted cells; this is not intended layout geometry. */
|
|
194
|
+
readonly regionBounds: Rect;
|
|
195
|
+
/** Canonical, non-overlapping half-open row runs. */
|
|
196
|
+
readonly spans: readonly {
|
|
197
|
+
readonly row: number;
|
|
198
|
+
readonly from: number;
|
|
199
|
+
readonly to: number;
|
|
200
|
+
}[];
|
|
201
|
+
}
|
|
202
|
+
/** Maps grapheme offsets of a node's text to cell coordinates (optional capability). */
|
|
203
|
+
interface SemanticTextRange {
|
|
204
|
+
readonly startOffset: number;
|
|
205
|
+
readonly endOffset: number;
|
|
206
|
+
readonly rect: Rect;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Deterministic JSON data owned by the application domain, not by the portable
|
|
210
|
+
* semantic vocabulary. Containers are allowed, but runtime objects/functions
|
|
211
|
+
* are not; validation applies the protocol's normal depth, byte and collection
|
|
212
|
+
* ceilings recursively.
|
|
213
|
+
*/
|
|
214
|
+
interface SemanticExtendedArray extends ReadonlyArray<SemanticExtendedValue> {
|
|
215
|
+
}
|
|
216
|
+
interface SemanticExtendedObject {
|
|
217
|
+
readonly [key: string]: SemanticExtendedValue;
|
|
218
|
+
}
|
|
219
|
+
type SemanticExtendedValue = null | boolean | number | string | SemanticExtendedArray | SemanticExtendedObject;
|
|
220
|
+
/** Application-defined state, deliberately separate from {@link SemanticState}. */
|
|
221
|
+
type SemanticExtendedState = SemanticExtendedObject;
|
|
222
|
+
interface SemanticNode {
|
|
223
|
+
readonly id: string;
|
|
224
|
+
readonly parentId?: string;
|
|
225
|
+
readonly role: SemanticRole;
|
|
226
|
+
readonly name: string;
|
|
227
|
+
readonly description?: string;
|
|
228
|
+
readonly value?: SemanticValueObservation;
|
|
229
|
+
readonly state?: SemanticState;
|
|
230
|
+
/** Application-specific, serializable state; never promoted to portable flags. */
|
|
231
|
+
readonly extended?: SemanticExtendedState;
|
|
232
|
+
readonly actions?: readonly SemanticAction[];
|
|
233
|
+
/** Authoritative recipe executed only through Termwright's real input devices. */
|
|
234
|
+
readonly inputRecipes?: readonly PhysicalInputRecipe[];
|
|
235
|
+
readonly labelledBy?: readonly string[];
|
|
236
|
+
readonly describedBy?: readonly string[];
|
|
237
|
+
readonly textRanges?: readonly SemanticTextRange[];
|
|
238
|
+
/** Author-supplied test id (getByTestId). */
|
|
239
|
+
readonly testId?: string;
|
|
240
|
+
/**
|
|
241
|
+
* The framework's own name for this widget — a class name, a constructor
|
|
242
|
+
* name, a widget type.
|
|
243
|
+
*
|
|
244
|
+
* **Required when `role` is `generic`.** An unrecognised widget must survive
|
|
245
|
+
* as a generic node keeping its geometry, text and children, instead of being
|
|
246
|
+
* dropped with its children reparented. `frameworkType` is what makes such a
|
|
247
|
+
* node identifiable: without it a generic node says only "something was
|
|
248
|
+
* here", which is barely better than the drop it replaced.
|
|
249
|
+
*/
|
|
250
|
+
readonly frameworkType?: string;
|
|
251
|
+
/** True when this node may own children the framework probe cannot enumerate. */
|
|
252
|
+
readonly opaqueChildren?: boolean;
|
|
253
|
+
/**
|
|
254
|
+
* Provenance: where this node's facts came from.
|
|
255
|
+
*
|
|
256
|
+
* One source for the whole node, because node facts overwhelmingly share
|
|
257
|
+
* one. Exceptions go in {@link SemanticNode.px}, so a mixed node pays only
|
|
258
|
+
* for the fields that actually differ. Descriptive per-property strings were
|
|
259
|
+
* ruled out by arithmetic — they cost about +91 % against a budget that is
|
|
260
|
+
* already tight.
|
|
261
|
+
*/
|
|
262
|
+
readonly p?: ProvenanceSource;
|
|
263
|
+
/** Per-field provenance, for fields whose source differs from `p`. */
|
|
264
|
+
readonly px?: Readonly<Record<string, ProvenanceSource>>;
|
|
265
|
+
/** Evidence-qualified layout facts for this committed observation. */
|
|
266
|
+
readonly geometry: NodeGeometryObservations;
|
|
267
|
+
/** Application scroll state; distinct from the terminal emulator's scrollback. */
|
|
268
|
+
readonly scroll?: Observation<SemanticScrollState>;
|
|
269
|
+
/** Authoritative paint provenance; distinct from layout, clipping and pointer routing. */
|
|
270
|
+
readonly paintedRegion?: Observation<SemanticPaintedRegion>;
|
|
271
|
+
}
|
|
272
|
+
/** Layout facts reported independently so absence never masquerades as false. */
|
|
273
|
+
interface NodeGeometryObservations {
|
|
274
|
+
readonly displayed: Observation<boolean>;
|
|
275
|
+
readonly intendedRect: Observation<Rect>;
|
|
276
|
+
readonly visibleRect: Observation<Rect>;
|
|
277
|
+
}
|
|
278
|
+
/** One half-open run of cells with an exact pointer recipient. */
|
|
279
|
+
interface PointerHitRegion {
|
|
280
|
+
/** Canonical non-empty row run: `height` is always 1. */
|
|
281
|
+
readonly rect: Rect;
|
|
282
|
+
readonly recipientId: string;
|
|
283
|
+
}
|
|
284
|
+
/** A complete point-ownership map for a committed frame. */
|
|
285
|
+
interface PointerHitGrid {
|
|
286
|
+
readonly regions: readonly PointerHitRegion[];
|
|
287
|
+
}
|
|
288
|
+
/** One provider-owned target region for a committed application revision. */
|
|
289
|
+
interface ProviderPointerRegion {
|
|
290
|
+
readonly recipientId: string;
|
|
291
|
+
/** Bounding box of the pointer-receiving cells; not layout geometry. */
|
|
292
|
+
readonly regionBounds: Rect;
|
|
293
|
+
/** Canonical non-overlapping visible cell runs owned by the target. */
|
|
294
|
+
readonly spans: readonly {
|
|
295
|
+
readonly row: number;
|
|
296
|
+
readonly from: number;
|
|
297
|
+
readonly to: number;
|
|
298
|
+
}[];
|
|
299
|
+
}
|
|
300
|
+
/** Revision-bound application strategy recipes for one semantic recipient. */
|
|
301
|
+
interface ProviderActionRecipes {
|
|
302
|
+
readonly recipientId: string;
|
|
303
|
+
readonly recipes: readonly PhysicalInputRecipe[];
|
|
304
|
+
}
|
|
305
|
+
/** Revision-bound application viewport state for one semantic recipient. */
|
|
306
|
+
interface ProviderScrollState extends SemanticScrollState {
|
|
307
|
+
readonly recipientId: string;
|
|
308
|
+
}
|
|
309
|
+
/** Revision-bound application paint provenance for one semantic recipient. */
|
|
310
|
+
interface ProviderPaintedRegion extends SemanticPaintedRegion {
|
|
311
|
+
readonly recipientId: string;
|
|
312
|
+
}
|
|
313
|
+
/** Production parser configuration hidden by the terminal transport. */
|
|
314
|
+
interface ProviderTerminalInputModes {
|
|
315
|
+
readonly mouseTracking: 'none' | 'x10' | 'vt200' | 'drag' | 'any';
|
|
316
|
+
readonly mouseEncoding: 'default' | 'sgr' | 'urxvt' | 'utf8';
|
|
317
|
+
readonly focusReporting: 'on' | 'off';
|
|
318
|
+
}
|
|
319
|
+
/** Exact production focus-manager result for one committed revision. */
|
|
320
|
+
type ProviderFocusState = {
|
|
321
|
+
readonly status: 'focused';
|
|
322
|
+
readonly recipientId: string;
|
|
323
|
+
} | {
|
|
324
|
+
readonly status: 'none';
|
|
325
|
+
};
|
|
326
|
+
/**
|
|
327
|
+
* Application evidence bound to the same revision as its containing snapshot.
|
|
328
|
+
* A provider announced in hello must contribute exactly one entry per frame.
|
|
329
|
+
*/
|
|
330
|
+
type ProviderRevisionEvidence = {
|
|
331
|
+
readonly providerId: string;
|
|
332
|
+
readonly sessionId: string;
|
|
333
|
+
readonly revision: number;
|
|
334
|
+
readonly status: 'available';
|
|
335
|
+
readonly evidence: EvidenceProvenance;
|
|
336
|
+
readonly pointerRegions: readonly ProviderPointerRegion[];
|
|
337
|
+
/** Exact production focus-manager result when `focus-state` was announced. */
|
|
338
|
+
readonly focusState?: ProviderFocusState;
|
|
339
|
+
/** Production keybinding recipes when `action-recipes` was announced. */
|
|
340
|
+
readonly actionRecipes?: readonly ProviderActionRecipes[];
|
|
341
|
+
/** Complete application viewport facts when `scroll-state` was announced. */
|
|
342
|
+
readonly scrollStates?: readonly ProviderScrollState[];
|
|
343
|
+
/** Complete paint attribution when `painted-regions` was announced. */
|
|
344
|
+
readonly paintedRegions?: readonly ProviderPaintedRegion[];
|
|
345
|
+
/** Production parser configuration when `terminal-input-modes` was announced. */
|
|
346
|
+
readonly inputModes?: ProviderTerminalInputModes;
|
|
347
|
+
/** Complete production-router ownership map when `hit-test` was announced. */
|
|
348
|
+
readonly hitGrid?: PointerHitGrid;
|
|
349
|
+
} | {
|
|
350
|
+
readonly providerId: string;
|
|
351
|
+
readonly sessionId: string;
|
|
352
|
+
readonly revision: number;
|
|
353
|
+
readonly status: 'lost';
|
|
354
|
+
readonly reason: string;
|
|
355
|
+
} | {
|
|
356
|
+
readonly providerId: string;
|
|
357
|
+
readonly sessionId: string;
|
|
358
|
+
readonly revision: number;
|
|
359
|
+
readonly status: 'violation';
|
|
360
|
+
readonly reason: string;
|
|
361
|
+
};
|
|
362
|
+
interface CursorInfo {
|
|
363
|
+
readonly row: number;
|
|
364
|
+
readonly column: number;
|
|
365
|
+
readonly visible: boolean;
|
|
366
|
+
readonly shape?: 'block' | 'underline' | 'bar';
|
|
367
|
+
}
|
|
368
|
+
interface SemanticSnapshot {
|
|
369
|
+
readonly v: 2;
|
|
370
|
+
readonly sessionId: string;
|
|
371
|
+
/** Positive, strictly increasing within a semantic session. */
|
|
372
|
+
readonly revision: number;
|
|
373
|
+
readonly columns: number;
|
|
374
|
+
readonly rows: number;
|
|
375
|
+
readonly cursor?: CursorInfo;
|
|
376
|
+
readonly rootIds: readonly string[];
|
|
377
|
+
readonly nodes: readonly SemanticNode[];
|
|
378
|
+
/** Coordinate system used by every physical observation in this snapshot. */
|
|
379
|
+
readonly coordinateSpace: Observation<CoordinateSpace>;
|
|
380
|
+
/**
|
|
381
|
+
* Required by v2. `known` means a complete map, not a sample or paint-order
|
|
382
|
+
* approximation. Cells absent from a known map have no semantic recipient.
|
|
383
|
+
*/
|
|
384
|
+
readonly hitGrid: Observation<PointerHitGrid>;
|
|
385
|
+
/** Present only when application evidence providers were negotiated in hello. */
|
|
386
|
+
readonly providerEvidence?: readonly ProviderRevisionEvidence[];
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/**
|
|
390
|
+
* Probe IR — what an instrumented process **observed**, not what it means.
|
|
391
|
+
*
|
|
392
|
+
* A probe reports facts; a recognizer turns them into the semantic tree. The
|
|
393
|
+
* split exists because the six frameworks disagree about what is even knowable,
|
|
394
|
+
* and collapsing that disagreement early is how a tree ends up asserting things
|
|
395
|
+
* no framework ever said.
|
|
396
|
+
*
|
|
397
|
+
* Three rules shape every type here, each forced by the Phase 0 audits:
|
|
398
|
+
*
|
|
399
|
+
* 1. **Never fabricate identity.** Immediate-mode frameworks have none, and a
|
|
400
|
+
* synthesised ordinal presented as a handle is worse than no handle: a test
|
|
401
|
+
* written against it fails later and looks flaky rather than wrong. Identity
|
|
402
|
+
* is therefore a typed capability with `frame-local` as a first-class value.
|
|
403
|
+
* 2. **Intent is not ownership.** The rectangle a widget was drawn *into* is not
|
|
404
|
+
* the cells it ended up owning; later writes win and no framework records
|
|
405
|
+
* who painted what. The two are separate fields, and only one framework
|
|
406
|
+
* computes the second.
|
|
407
|
+
* 3. **Absent and unobservable are different facts.** A state a framework does
|
|
408
|
+
* not expose is not a state that is off. The IR says which is which, rather
|
|
409
|
+
* than letting `undefined` mean both.
|
|
410
|
+
*
|
|
411
|
+
* Naming note: the words `region` and `area` are avoided throughout. Each
|
|
412
|
+
* carries at least three conflicting meanings across the audited frameworks,
|
|
413
|
+
* and an IR that reuses them inherits every one of those ambiguities.
|
|
414
|
+
*/
|
|
415
|
+
/**
|
|
416
|
+
* How an object's identity behaves across frames.
|
|
417
|
+
*
|
|
418
|
+
* `frame-local` is a legitimate answer, not a degraded one: in immediate mode
|
|
419
|
+
* the widget is consumed by the render and nothing upstream survives to be
|
|
420
|
+
* named again. A consumer must not correlate `frame-local` values between
|
|
421
|
+
* frames.
|
|
422
|
+
*/
|
|
423
|
+
type ProbeIdentityKind = 'stable' | 'frame-local';
|
|
424
|
+
/** An object's identity, tagged with what it is worth. */
|
|
425
|
+
interface ProbeIdentity {
|
|
426
|
+
readonly kind: ProbeIdentityKind;
|
|
427
|
+
/** Unique within its frame; unique across the session only when `stable`. */
|
|
428
|
+
readonly value: string;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* A rectangle in terminal cells.
|
|
432
|
+
*
|
|
433
|
+
* Deliberately not called a region or an area: `row`/`column` are absolute
|
|
434
|
+
* cell coordinates, and negative origins are legal because a widget may be
|
|
435
|
+
* partly scrolled off.
|
|
436
|
+
*/
|
|
437
|
+
interface ProbeRect {
|
|
438
|
+
readonly row: number;
|
|
439
|
+
readonly column: number;
|
|
440
|
+
readonly width: number;
|
|
441
|
+
readonly height: number;
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Where an object was drawn.
|
|
445
|
+
*
|
|
446
|
+
* `intendedRect` is where it *asked* to draw. It is a statement of intent, not
|
|
447
|
+
* a claim on cells: frameworks do not clip it, do not validate it against the
|
|
448
|
+
* viewport, and a later write silently wins. For overlapping UIs — popups,
|
|
449
|
+
* modals, shadows — it is not where the object ended up.
|
|
450
|
+
*
|
|
451
|
+
* `visibleRect` is the intersection with the clip imposed by ancestors, which
|
|
452
|
+
* is the closest any framework gets to "what the user can see". Only one of
|
|
453
|
+
* the six computes it; everywhere else it is absent, and inferring it from
|
|
454
|
+
* `intendedRect` would be inventing a fact.
|
|
455
|
+
*/
|
|
456
|
+
interface ProbeGeometry {
|
|
457
|
+
readonly intendedRect?: ProbeRect;
|
|
458
|
+
readonly visibleRect?: ProbeRect;
|
|
459
|
+
}
|
|
460
|
+
/** Scroll position, in cells, of a scrollable object's viewport. */
|
|
461
|
+
interface ProbeScroll {
|
|
462
|
+
readonly row: number;
|
|
463
|
+
readonly column: number;
|
|
464
|
+
}
|
|
465
|
+
/** Total scrollable extent, in cells. Absent where a framework cannot report it. */
|
|
466
|
+
interface ProbeExtent {
|
|
467
|
+
readonly rows: number;
|
|
468
|
+
readonly columns: number;
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* State a probe read directly from the framework.
|
|
472
|
+
*
|
|
473
|
+
* Every field is optional, and absence means "not reported by this probe".
|
|
474
|
+
* A field the framework is *known* not to expose belongs in
|
|
475
|
+
* {@link ProbeObject.unobservable} instead, so a consumer can tell "off" from
|
|
476
|
+
* "unknowable".
|
|
477
|
+
*
|
|
478
|
+
* The three selection facts have separate names on purpose. An accessibility
|
|
479
|
+
* `selected` flag, a highlighted collection index and a selected text range
|
|
480
|
+
* are not interchangeable, even though frameworks often call all three
|
|
481
|
+
* "selection".
|
|
482
|
+
*/
|
|
483
|
+
interface ProbeObservedState {
|
|
484
|
+
readonly focused?: boolean;
|
|
485
|
+
readonly disabled?: boolean;
|
|
486
|
+
readonly checked?: boolean | 'mixed';
|
|
487
|
+
readonly expanded?: boolean;
|
|
488
|
+
readonly readonly?: boolean;
|
|
489
|
+
readonly selected?: boolean;
|
|
490
|
+
readonly busy?: boolean;
|
|
491
|
+
readonly multiline?: boolean;
|
|
492
|
+
readonly required?: boolean;
|
|
493
|
+
readonly multiselectable?: boolean;
|
|
494
|
+
/**
|
|
495
|
+
* Whether the framework's own display flag is on. Distinct from being
|
|
496
|
+
* scrolled out of view, which shows up as an empty `visibleRect`.
|
|
497
|
+
*/
|
|
498
|
+
readonly displayed?: boolean;
|
|
499
|
+
/** Contents of a value-bearing widget. `''` means empty, not absent. */
|
|
500
|
+
readonly value?: string;
|
|
501
|
+
/** Explicit confidentiality classification. Omitted values default sensitive. */
|
|
502
|
+
readonly valueSensitivity?: 'public' | 'sensitive';
|
|
503
|
+
/** Highlighted item in a collection, by index. Not a text selection. */
|
|
504
|
+
readonly selectedIndex?: number;
|
|
505
|
+
/** Selected text range within this object. Not an item selection. */
|
|
506
|
+
readonly textSelection?: {
|
|
507
|
+
readonly start: number;
|
|
508
|
+
readonly end: number;
|
|
509
|
+
};
|
|
510
|
+
readonly scroll?: ProbeScroll;
|
|
511
|
+
readonly scrollExtent?: ProbeExtent;
|
|
512
|
+
}
|
|
513
|
+
/** Field names a probe can declare unobservable. */
|
|
514
|
+
declare const PROBE_UNOBSERVABLE_FIELDS: readonly ["focused", "disabled", "checked", "expanded", "readonly", "selected", "busy", "multiline", "required", "multiselectable", "displayed", "value", "selectedIndex", "textSelection", "scroll", "scrollExtent", "intendedRect", "visibleRect", "paintOrder", "text", "parent"];
|
|
515
|
+
type ProbeUnobservableField = (typeof PROBE_UNOBSERVABLE_FIELDS)[number];
|
|
516
|
+
/**
|
|
517
|
+
* Author-supplied annotations carried verbatim.
|
|
518
|
+
*
|
|
519
|
+
* The probe does not interpret these — a recognizer does, at the top of the
|
|
520
|
+
* merge precedence. `role` is deliberately a free string here: it is whatever
|
|
521
|
+
* the author wrote, and validating it against the closed role set is the
|
|
522
|
+
* recognizer's job, which can then report a bad annotation instead of silently
|
|
523
|
+
* dropping it.
|
|
524
|
+
*/
|
|
525
|
+
interface ProbeAccessibilityHints {
|
|
526
|
+
/** Framework-native accessibility role, in the framework's vocabulary. */
|
|
527
|
+
readonly role?: string;
|
|
528
|
+
readonly name?: string;
|
|
529
|
+
readonly description?: string;
|
|
530
|
+
}
|
|
531
|
+
interface ProbeAnnotations {
|
|
532
|
+
readonly role?: string;
|
|
533
|
+
readonly name?: string;
|
|
534
|
+
readonly testId?: string;
|
|
535
|
+
readonly description?: string;
|
|
536
|
+
/** Application-domain JSON state, kept outside the portable state flags. */
|
|
537
|
+
readonly extended?: SemanticExtendedState;
|
|
538
|
+
/** Descriptive action intent; never callbacks or a second input channel. */
|
|
539
|
+
readonly actions?: readonly SemanticAction[];
|
|
540
|
+
/** Production key bindings represented as data, never framework callbacks. */
|
|
541
|
+
readonly inputRecipes?: readonly PhysicalInputRecipe[];
|
|
542
|
+
/** Probe identity values of author-declared labelling relationships. */
|
|
543
|
+
readonly labelledBy?: readonly string[];
|
|
544
|
+
/** Probe identity values of author-declared description relationships. */
|
|
545
|
+
readonly describedBy?: readonly string[];
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* One object a probe observed in a frame.
|
|
549
|
+
*
|
|
550
|
+
* `frameworkType` is required. It is the framework's own name for the thing —
|
|
551
|
+
* a class name, a constructor name, a widget type — and it is what keeps an
|
|
552
|
+
* unrecognised widget alive as a `generic` node instead of being dropped. Its
|
|
553
|
+
* quality varies enormously (Textual gives a full class ancestry; Ink gives one
|
|
554
|
+
* of four host-element names), so a recognizer must treat it as a hint, not a
|
|
555
|
+
* classification.
|
|
556
|
+
*/
|
|
557
|
+
interface ProbeObject {
|
|
558
|
+
readonly identity: ProbeIdentity;
|
|
559
|
+
readonly frameworkType: string;
|
|
560
|
+
/** Parent's identity value; absent for a root. */
|
|
561
|
+
readonly parent?: string;
|
|
562
|
+
readonly geometry?: ProbeGeometry;
|
|
563
|
+
readonly state?: ProbeObservedState;
|
|
564
|
+
/** Text the object itself carries, not its descendants'. */
|
|
565
|
+
readonly text?: string;
|
|
566
|
+
/** Accessibility metadata retained by the framework itself, not author SDK data. */
|
|
567
|
+
readonly accessibility?: ProbeAccessibilityHints;
|
|
568
|
+
readonly annotations?: ProbeAnnotations;
|
|
569
|
+
/**
|
|
570
|
+
* Where this object sits in paint order: higher was painted later, and
|
|
571
|
+
* therefore on top.
|
|
572
|
+
*
|
|
573
|
+
* Available in three of the six frameworks (a compositor hit-test, a z-order
|
|
574
|
+
* child list, a paint-order key) and absent in the rest. It is the only fact
|
|
575
|
+
* that makes "is my target actually the thing at this cell" answerable
|
|
576
|
+
* without inventing cell ownership, which no framework records.
|
|
577
|
+
*/
|
|
578
|
+
readonly paintOrder?: number;
|
|
579
|
+
/**
|
|
580
|
+
* Facts this framework cannot report for this object. Distinct from a field
|
|
581
|
+
* simply being absent, which means the probe did not report it this time.
|
|
582
|
+
*/
|
|
583
|
+
readonly unobservable?: readonly ProbeUnobservableField[];
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* A render or layout call the probe intercepted.
|
|
587
|
+
*
|
|
588
|
+
* Only some frameworks expose a call stream, and in immediate mode it is the
|
|
589
|
+
* *only* structure that exists — there is no tree to walk, just an ordered list
|
|
590
|
+
* of "this type was drawn into this rectangle". `ordinal` is the position in
|
|
591
|
+
* that stream and is meaningful only within its frame.
|
|
592
|
+
*/
|
|
593
|
+
interface ProbeOperation {
|
|
594
|
+
readonly kind: 'render' | 'layout';
|
|
595
|
+
readonly ordinal: number;
|
|
596
|
+
/** Identity of the object this call concerned, when the probe can attribute it. */
|
|
597
|
+
readonly target?: ProbeIdentity;
|
|
598
|
+
readonly frameworkType?: string;
|
|
599
|
+
readonly intendedRect?: ProbeRect;
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* One observed frame.
|
|
603
|
+
*
|
|
604
|
+
* `objects` may be empty and `operations` may carry everything: that is what an
|
|
605
|
+
* immediate-mode frame looks like, and a flat op list is a legal degenerate
|
|
606
|
+
* tree rather than an error.
|
|
607
|
+
*/
|
|
608
|
+
interface ProbeFrame {
|
|
609
|
+
/** Monotonic within the session. Every framework has exactly one of these. */
|
|
610
|
+
readonly frame: number;
|
|
611
|
+
readonly objects: readonly ProbeObject[];
|
|
612
|
+
readonly operations?: readonly ProbeOperation[];
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
/** Injection tiers used by the semantic-probe attachment doctrine. */
|
|
616
|
+
declare const PROBE_INJECTION_TIERS: readonly ["T0", "T1", "T2", "T3"];
|
|
617
|
+
type ProbeInjectionTier = (typeof PROBE_INJECTION_TIERS)[number];
|
|
618
|
+
/** Semantic class A has geometry; class B deliberately publishes a tree without it. */
|
|
619
|
+
declare const PROBE_SEMANTIC_CLASSES: readonly ["A", "B"];
|
|
620
|
+
type ProbeSemanticClass = (typeof PROBE_SEMANTIC_CLASSES)[number];
|
|
621
|
+
/**
|
|
622
|
+
* Named reductions a probe can report even when the broader session
|
|
623
|
+
* capability remains useful. These are deliberately more precise than the
|
|
624
|
+
* capability graph: omitting inactive screens must not disable the live
|
|
625
|
+
* semantic tree, and an opaque custom container must not disable known
|
|
626
|
+
* framework children.
|
|
627
|
+
*/
|
|
628
|
+
declare const PROBE_DEGRADED_CAPABILITIES: readonly ["semantic-tree", "stable-identity", "intended-geometry", "clipped-geometry", "painted-region", "pointer-geometry", "pointer-hit-testing", "focus", "scroll", "render-order", "action-strategies", "keyboard-input", "pointer-input", "focus-input", "paired-revisions", "inactive-screen-tree", "custom-container-enumeration"];
|
|
629
|
+
type ProbeDegradedCapabilityId = SessionCapabilityId | 'inactive-screen-tree' | 'custom-container-enumeration';
|
|
630
|
+
/** Runtime record of the strongest attachment mechanism that actually engaged. */
|
|
631
|
+
interface ProbeInstrumentation {
|
|
632
|
+
readonly highestTier: ProbeInjectionTier;
|
|
633
|
+
readonly semanticClass: ProbeSemanticClass;
|
|
634
|
+
readonly degradedCapabilities: readonly ProbeDegradedCapabilityId[];
|
|
635
|
+
}
|
|
636
|
+
/**
|
|
637
|
+
* What a probe says about itself when it attaches.
|
|
638
|
+
*
|
|
639
|
+
* @remarks
|
|
640
|
+
* `frame-begin` is optional for a reason that is easy to get wrong. No audited
|
|
641
|
+
* framework offers a hook guaranteed to fire before every frame: one lets a
|
|
642
|
+
* pre-draw hook veto the frame entirely (so the post-draw hook never runs), one
|
|
643
|
+
* exposes only a post-frame hook, and one decouples submission from the flush
|
|
644
|
+
* with a ticker. A consumer must therefore never read "no frame-begin" as "no
|
|
645
|
+
* frame in progress" — doing so turns four of the six frameworks into a hang
|
|
646
|
+
* rather than an error.
|
|
647
|
+
*/
|
|
648
|
+
interface ProbeInfo {
|
|
649
|
+
/** Framework name, e.g. `ink`, `textual`, `ratatui`. */
|
|
650
|
+
readonly framework: string;
|
|
651
|
+
readonly frameworkVersion?: string;
|
|
652
|
+
/** Version of the probe itself, so a mismatch is diagnosable. */
|
|
653
|
+
readonly probeVersion: string;
|
|
654
|
+
/** The best identity this probe can offer for any object. */
|
|
655
|
+
readonly identityKind: ProbeIdentityKind;
|
|
656
|
+
readonly capabilities: readonly ProbeCapability[];
|
|
657
|
+
/**
|
|
658
|
+
* How this concrete run attached and what it could not observe.
|
|
659
|
+
* Optional on the wire so existing protocol-v2/custom adapters remain valid.
|
|
660
|
+
*/
|
|
661
|
+
readonly instrumentation?: ProbeInstrumentation;
|
|
662
|
+
}
|
|
663
|
+
/**
|
|
664
|
+
* Where a semantic fact came from.
|
|
665
|
+
*
|
|
666
|
+
* Ranked: an annotation is what the author said, a recognizer is what our rules
|
|
667
|
+
* concluded, `framework` is what the framework itself reported, `correlation`
|
|
668
|
+
* is what matching across sources implied, and `heuristic` is a guess that
|
|
669
|
+
* happened to be useful. The merge precedence follows this order, except that
|
|
670
|
+
* physical facts — bounds, focus, visibility, cells — are never casually
|
|
671
|
+
* overridden by an annotation: an author may name a thing, but may not declare
|
|
672
|
+
* where it is on screen.
|
|
673
|
+
*/
|
|
674
|
+
declare const PROVENANCE_SOURCES: readonly ["annotation", "recognizer", "framework", "application", "correlation", "heuristic"];
|
|
675
|
+
type ProvenanceSource = (typeof PROVENANCE_SOURCES)[number];
|
|
676
|
+
|
|
677
|
+
/**
|
|
678
|
+
* Stable application provider identity announced in the adapter hello.
|
|
679
|
+
*
|
|
680
|
+
* Providers are collected before hello is sent. The declaration is therefore
|
|
681
|
+
* part of the same immutable negotiation as framework and terminal evidence;
|
|
682
|
+
* there is no late-registration message and no mutable side channel.
|
|
683
|
+
*/
|
|
684
|
+
interface EvidenceProviderRegistration {
|
|
685
|
+
readonly id: string;
|
|
686
|
+
readonly version: string;
|
|
687
|
+
readonly capabilities: readonly EvidenceProviderCapability[];
|
|
688
|
+
/** How the application obtains its authoritative production-router facts. */
|
|
689
|
+
readonly method: 'native' | 'declared';
|
|
690
|
+
}
|
|
691
|
+
/** Where a fact originated, how it was obtained, and what consumers may infer. */
|
|
692
|
+
interface EvidenceProvenance {
|
|
693
|
+
readonly source: 'framework' | 'application' | 'terminal' | 'recognizer' | 'driver';
|
|
694
|
+
readonly method: 'native' | 'instrumented' | 'declared' | 'correlated' | 'measured' | 'derived' | 'heuristic';
|
|
695
|
+
readonly strength: 'authoritative' | 'diagnostic';
|
|
696
|
+
/** Stable identity of the producer, never a display label. */
|
|
697
|
+
readonly providerId: string;
|
|
698
|
+
}
|
|
699
|
+
declare function evidence(source: EvidenceProvenance['source'], method: EvidenceProvenance['method'], strength: EvidenceProvenance['strength'], providerId: string): EvidenceProvenance;
|
|
700
|
+
type SessionCapabilityAvailability = {
|
|
701
|
+
readonly status: 'supported';
|
|
702
|
+
readonly evidence: EvidenceProvenance;
|
|
703
|
+
} | {
|
|
704
|
+
readonly status: 'unsupported';
|
|
705
|
+
readonly reason: 'not-negotiated' | 'framework-unobservable' | 'terminal-unobservable' | 'provider-required';
|
|
706
|
+
};
|
|
707
|
+
type ContractProvider = {
|
|
708
|
+
readonly id: string;
|
|
709
|
+
readonly kind: 'framework' | 'terminal';
|
|
710
|
+
readonly version: string;
|
|
711
|
+
} | {
|
|
712
|
+
readonly id: string;
|
|
713
|
+
readonly kind: 'application';
|
|
714
|
+
readonly version: string;
|
|
715
|
+
readonly method: 'native' | 'declared';
|
|
716
|
+
readonly capabilities: readonly EvidenceProviderCapability[];
|
|
717
|
+
};
|
|
718
|
+
/**
|
|
719
|
+
* Immutable public contract negotiated once for one session epoch.
|
|
720
|
+
*
|
|
721
|
+
* Runtime state (disabled nodes, clipping, terminal modes currently off) is
|
|
722
|
+
* intentionally absent. Those are actionability observations, not capability.
|
|
723
|
+
*/
|
|
724
|
+
interface EffectiveSessionContract {
|
|
725
|
+
readonly contractId: string;
|
|
726
|
+
readonly sessionId: string;
|
|
727
|
+
readonly epoch: number;
|
|
728
|
+
readonly protocol: 'termwright/2';
|
|
729
|
+
readonly framework: {
|
|
730
|
+
readonly name: string;
|
|
731
|
+
readonly version: string;
|
|
732
|
+
readonly adapterVersion: string;
|
|
733
|
+
readonly certificationId: string;
|
|
734
|
+
/** Runtime attachment facts declared by a framework probe, when available. */
|
|
735
|
+
readonly instrumentation?: ProbeInstrumentation;
|
|
736
|
+
} | null;
|
|
737
|
+
readonly providers: readonly ContractProvider[];
|
|
738
|
+
readonly capabilities: Readonly<Record<SessionCapabilityId, SessionCapabilityAvailability>>;
|
|
739
|
+
readonly terminal: {
|
|
740
|
+
readonly profile: string;
|
|
741
|
+
readonly platform: string;
|
|
742
|
+
readonly mouseModesObservable: boolean;
|
|
743
|
+
};
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
export { type ProviderActionRecipes as $, type AuthoritativeObservationEvidence as A, type PointerHitRegion as B, type CellPoint as C, type PointerHitTest as D, type EvidenceProviderRegistration as E, type ProbeAccessibilityHints as F, type ProbeDegradedCapabilityId as G, type ProbeExtent as H, type ProbeGeometry as I, type ProbeIdentity as J, type ProbeIdentityKind as K, type LocatorGeometry as L, type ProbeInjectionTier as M, type NodeGeometryObservations as N, type Observation as O, type ProbeAnnotations as P, type ProbeInstrumentation as Q, type Rect as R, type SemanticNode as S, type ProbeObject as T, type ProbeObservedState as U, type ProbeOperation as V, type ProbeRect as W, type ProbeScroll as X, type ProbeSemanticClass as Y, type ProbeUnobservableField as Z, type ProvenanceSource as _, type SemanticState as a, type ProviderFocusState as a0, type ProviderPaintedRegion as a1, type ProviderPointerRegion as a2, type ProviderRevisionEvidence as a3, type ProviderScrollState as a4, type ProviderTerminalInputModes as a5, SEMANTIC_ACTIONS as a6, SEMANTIC_ROLES as a7, type SemanticAction as a8, type SemanticExtendedArray as a9, type SemanticExtendedObject as aa, type SemanticExtendedState as ab, type SemanticExtendedValue as ac, type SemanticPaintedRegion as ad, type SemanticScrollState as ae, type SemanticTextRange as af, type SemanticValueAbsentReason as ag, type SemanticValueObservation as ah, type SemanticValueWithheldReason as ai, type SessionCapabilityAvailability as aj, type SpatialRelation as ak, type ViewportIntersection as al, evidence as am, intersectRects as an, rectArea as ao, spatialRelation as ap, viewportIntersection as aq, type SemanticSnapshot as b, type SemanticRole as c, type ProbeFrame as d, type ProbeInfo as e, type ContractProvider as f, type CoordinateSpace as g, type CursorInfo as h, type EffectiveSessionContract as i, type EvidenceProvenance as j, type LocatorVisibility as k, type ObservationAbsentReason as l, type ObservationEvidence as m, type ObservationStamp as n, type ObservationUnknownReason as o, type ObservationUnsupportedReason as p, PHYSICAL_INPUT_RECIPE_ACTIONS as q, PROBE_DEGRADED_CAPABILITIES as r, PROBE_INJECTION_TIERS as s, PROBE_SEMANTIC_CLASSES as t, PROBE_UNOBSERVABLE_FIELDS as u, PROVENANCE_SOURCES as v, type PhysicalInputRecipe as w, type PhysicalInputRecipeAction as x, type PhysicalInputRecipeStep as y, type PointerHitGrid as z };
|