@happyvertical/smrt-types 0.51.32 → 0.51.34

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.
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Shared AI usage tracking types for SMRT.
3
+ *
4
+ * These types are intentionally provider-agnostic so SMRT can normalize
5
+ * telemetry emitted by the underlying AI SDK into a stable internal shape.
6
+ */
7
+ /**
8
+ * Normalized token usage information for an AI call.
9
+ */
10
+ export interface AiTokenUsage {
11
+ /** Number of input tokens consumed by the request */
12
+ promptTokens?: number;
13
+ /** Number of output tokens produced by the response */
14
+ completionTokens?: number;
15
+ /** Total tokens consumed across the call */
16
+ totalTokens?: number;
17
+ }
18
+ /**
19
+ * Stable usage event shape emitted inside SMRT after every AI call.
20
+ */
21
+ export interface SmrtAiUsageEvent {
22
+ /** AI provider identifier (e.g. "openai", "anthropic") */
23
+ provider: string;
24
+ /** Model identifier used for the call */
25
+ model: string;
26
+ /** High-level operation name (e.g. "chat", "embed", "stream") */
27
+ operation: string;
28
+ /** Token usage reported by the provider, when available */
29
+ usage?: AiTokenUsage;
30
+ /** Wall-clock duration in milliseconds */
31
+ duration: number;
32
+ /** Event timestamp */
33
+ timestamp: Date;
34
+ /** Optional provider- or application-specific tags */
35
+ tags?: Record<string, string>;
36
+ /** SMRT class responsible for the call */
37
+ className?: string;
38
+ /** Tenant identifier when available */
39
+ tenantId?: string | null;
40
+ /** Best-effort estimated cost in USD */
41
+ estimatedCost?: number;
42
+ }
43
+ /**
44
+ * Persisted AI usage record returned from query helpers.
45
+ */
46
+ export interface SmrtAiUsageRecord extends SmrtAiUsageEvent {
47
+ /** Persistent record identifier */
48
+ id: string;
49
+ }
50
+ /**
51
+ * Aggregated statistics bucket for AI usage reporting.
52
+ */
53
+ export interface AiUsageStats {
54
+ /** Number of calls represented in the bucket */
55
+ callCount: number;
56
+ /** Sum of prompt/input tokens */
57
+ promptTokens: number;
58
+ /** Sum of completion/output tokens */
59
+ completionTokens: number;
60
+ /** Sum of total tokens */
61
+ totalTokens: number;
62
+ /** Sum of durations in milliseconds */
63
+ totalDuration: number;
64
+ /** Sum of estimated costs in USD */
65
+ estimatedCost: number;
66
+ /** Timestamp of the most recent event in epoch milliseconds */
67
+ lastUsed: number;
68
+ }
69
+ /**
70
+ * In-memory snapshot returned by the collector.
71
+ */
72
+ export interface AiUsageSnapshot {
73
+ /** Usage aggregated by "provider:model" */
74
+ byModel: Record<string, AiUsageStats>;
75
+ /** Usage aggregated by "className:operation" */
76
+ byClass: Record<string, AiUsageStats>;
77
+ /** Total number of calls observed by the collector */
78
+ totalCalls: number;
79
+ /** Collector start time in epoch milliseconds */
80
+ startTime: number;
81
+ }
82
+ /**
83
+ * Callback interface for handling normalized AI usage events.
84
+ */
85
+ export interface AiUsageHandler {
86
+ /**
87
+ * Handle a normalized AI usage event.
88
+ */
89
+ handle(event: SmrtAiUsageEvent): Promise<void>;
90
+ }
91
+ /**
92
+ * Grouping dimensions supported by summary helpers.
93
+ */
94
+ export type AiUsageGroupBy = 'provider' | 'model' | 'class' | 'tenant' | 'operation' | 'day';
95
+ /**
96
+ * Options for listing raw AI usage records from persistence.
97
+ */
98
+ export interface AiUsageListOptions {
99
+ /** Only include records on or after this timestamp */
100
+ since?: Date;
101
+ /** Only include records before or at this timestamp */
102
+ until?: Date;
103
+ /** Filter by provider */
104
+ provider?: string;
105
+ /** Filter by model */
106
+ model?: string;
107
+ /** Filter by operation */
108
+ operation?: string;
109
+ /** Filter by SMRT class name */
110
+ className?: string;
111
+ /** Filter by tenant ID */
112
+ tenantId?: string | null;
113
+ /** Maximum number of rows to return */
114
+ limit?: number;
115
+ /** Number of rows to skip */
116
+ offset?: number;
117
+ /** Sort order */
118
+ orderBy?: 'timestamp DESC' | 'timestamp ASC';
119
+ }
120
+ /**
121
+ * Options for summarized AI usage queries.
122
+ */
123
+ export interface AiUsageSummaryOptions extends Omit<AiUsageListOptions, 'limit' | 'offset' | 'orderBy'> {
124
+ /** Dimension to group summary buckets by */
125
+ groupBy?: AiUsageGroupBy;
126
+ }
127
+ //# sourceMappingURL=ai-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-usage.d.ts","sourceRoot":"","sources":["../src/ai-usage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * One capability classification contract shared by every WebMCP declaration
3
+ * site (#2587). This module intentionally has no runtime code.
4
+ *
5
+ * Core classifies every canonical model tool at build time
6
+ * (`packages/core/src/generators/tool-schema.ts`) and emits the resolved
7
+ * `effect` / `idempotent` / `openWorld` on each `webMcpToolDefinitions` entry.
8
+ * smrt-web's browser registrar trusts that emitted metadata for canonical
9
+ * definitions instead of recomputing it, and keeps its own CRUD switch only
10
+ * as the fail-closed fallback for legacy definitions that carry no metadata.
11
+ * View intents (#2588) classify by this same contract where they are
12
+ * declared; playbook steps (#2589) inherit classification from the model
13
+ * operation they reference and never classify anything themselves.
14
+ *
15
+ * `smrt-web` cannot import this package — its dependency-DAG guardrails keep
16
+ * it free of every `@happyvertical/*` dependency (see its AGENTS.md) — so its
17
+ * `WebMcpToolEffect` mirrors {@link CapabilityEffect} structurally rather than
18
+ * importing it, the same way `data-query.ts` mirrors this package's bounded
19
+ * query envelope there. `smrt-core`'s `ToolEffect` (`src/registry/types.ts`)
20
+ * DOES alias {@link CapabilityEffect} directly, since core already depends on
21
+ * this package.
22
+ */
23
+ /**
24
+ * Browser/agent-visible effect classification for a generated capability.
25
+ * `'read'` never mutates; `'write'` mutates within the application;
26
+ * `'destructive'` may remove or irreversibly change data.
27
+ */
28
+ export type CapabilityEffect = 'read' | 'write' | 'destructive';
29
+ /**
30
+ * Fully resolved capability classification for one declared action.
31
+ *
32
+ * **Fail-closed rule**: an undeclared capability resolves to
33
+ * `{ effect: 'destructive', idempotent: false, openWorld: true }` — the most
34
+ * restrictive exposure a policy can select. Every classifier in the mirror
35
+ * (core's generator, smrt-web's legacy fallback, and any future declaration
36
+ * site) MUST apply this exact default rather than inventing its own.
37
+ *
38
+ * **CRUD is fixed** and never overridden by a declaration:
39
+ * - `list` / `get` → `{ effect: 'read', idempotent: true, openWorld: false }`
40
+ * - `create` → `{ effect: 'write', idempotent: false, openWorld: false }`
41
+ * - `update` → `{ effect: 'write', idempotent: true, openWorld: false }`
42
+ * - `delete` → `{ effect: 'destructive', idempotent: true, openWorld: false }`
43
+ *
44
+ * Anything else (a custom action, a view intent, a playbook step) resolves
45
+ * through an explicit {@link CapabilityDeclaration}, defaulted per-field by
46
+ * the fail-closed rule above.
47
+ */
48
+ export interface CapabilityClassification {
49
+ effect: CapabilityEffect;
50
+ /** Whether repeating the action with the same arguments is safe. */
51
+ idempotent: boolean;
52
+ /** Whether the action may interact outside the SMRT application. */
53
+ openWorld: boolean;
54
+ }
55
+ /**
56
+ * An author-supplied, partial classification. Any field a declaration omits
57
+ * resolves through the fail-closed rule documented on
58
+ * {@link CapabilityClassification}, never through a CRUD- or name-based guess.
59
+ */
60
+ export type CapabilityDeclaration = Partial<CapabilityClassification>;
61
+ //# sourceMappingURL=capability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../src/capability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,CAAC;AAEhE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,gBAAgB,CAAC;IACzB,oEAAoE;IACpE,UAAU,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Transport-neutral, bounded data-query contract (#2444).
3
+ *
4
+ * This module intentionally has no runtime code. The core package owns
5
+ * normalization, policy enforcement, canonical fingerprints, and result
6
+ * validation; browser, REST, MCP, WebMCP, ContentList, and report adapters
7
+ * share these serializable shapes without importing a server runtime.
8
+ *
9
+ * Authority is deliberately absent. A query can name only adapter-declared
10
+ * field ids and operators; tenant, principal, SQL, relationship paths, and
11
+ * execution details belong to the authenticated adapter, never this envelope.
12
+ */
13
+ /** JSON scalar values accepted in predicates, facets, and normalized rows. */
14
+ export type DataQueryScalar = string | number | boolean | null;
15
+ /** A stable, adapter-defined field identifier. It is never a property path. */
16
+ export type DataQueryFieldId = string;
17
+ /** Operators map to an adapter's allowlisted, typed predicate implementation. */
18
+ export type DataQueryFilterOperator = 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'notIn' | 'like';
19
+ /** One typed predicate. `in` and `notIn` require a non-empty value array. */
20
+ export interface DataQueryCondition {
21
+ kind: 'condition';
22
+ field: DataQueryFieldId;
23
+ operator: DataQueryFilterOperator;
24
+ value: DataQueryScalar | DataQueryScalar[];
25
+ }
26
+ /** Bounded, recursive filter expression with explicit boolean semantics. */
27
+ export type DataQueryFilter = DataQueryCondition | {
28
+ kind: 'all' | 'any';
29
+ filters: DataQueryFilter[];
30
+ } | {
31
+ kind: 'not';
32
+ filter: DataQueryFilter;
33
+ };
34
+ export type DataQuerySortDirection = 'asc' | 'desc';
35
+ /** Deterministic sort precedence; earlier terms take precedence. */
36
+ export interface DataQuerySort {
37
+ field: DataQueryFieldId;
38
+ direction: DataQuerySortDirection;
39
+ }
40
+ /** Offset pagination is explicit so callers cannot smuggle arbitrary bounds. */
41
+ export interface DataQueryOffsetPage {
42
+ kind: 'offset';
43
+ offset: number;
44
+ limit: number;
45
+ }
46
+ /** Cursor values are opaque to callers and bound to a normalized query. */
47
+ export interface DataQueryCursorPage {
48
+ kind: 'cursor';
49
+ after?: string;
50
+ limit: number;
51
+ }
52
+ export type DataQueryPage = DataQueryOffsetPage | DataQueryCursorPage;
53
+ /** Read consistency requested by a caller; adapters decide whether they support it. */
54
+ export type DataQueryConsistencyMode = 'eventual' | 'snapshot';
55
+ export interface DataQueryConsistency {
56
+ /** Prefer the adapter's most recently available data. */
57
+ mode: DataQueryConsistencyMode;
58
+ /** Optional RFC 3339 instant requested by a time-travel capable adapter. */
59
+ asOf?: string;
60
+ }
61
+ /** A bounded request for one declared facet. */
62
+ export interface DataQueryFacetRequest {
63
+ field: DataQueryFieldId;
64
+ limit: number;
65
+ }
66
+ /**
67
+ * Canonical data-query request.
68
+ *
69
+ * A request id correlates transport logs and results only; it is intentionally
70
+ * excluded from the semantic query fingerprint. The query does not contain
71
+ * authority, raw database expressions, property paths, functions, or a
72
+ * transport-specific filter object.
73
+ */
74
+ export interface DataQueryRequest {
75
+ version: 1;
76
+ requestId: string;
77
+ mode: 'rows' | 'count' | 'facets';
78
+ projection?: DataQueryFieldId[];
79
+ filter?: DataQueryFilter;
80
+ sort?: DataQuerySort[];
81
+ page?: DataQueryPage;
82
+ consistency?: DataQueryConsistency;
83
+ facets?: DataQueryFacetRequest[];
84
+ }
85
+ /** An explicitly declared query field and its capability allowlist. */
86
+ export interface DataQueryFieldDescriptor {
87
+ id: DataQueryFieldId;
88
+ type: 'string' | 'number' | 'boolean' | 'datetime' | 'json';
89
+ projectable?: boolean;
90
+ sortable?: boolean;
91
+ facetable?: boolean;
92
+ filterOperators?: DataQueryFilterOperator[];
93
+ }
94
+ /**
95
+ * Per-adapter execution policy. It is trusted adapter configuration, never
96
+ * client input, and therefore carries the field allowlists the normalizer
97
+ * applies to requests and returned rows.
98
+ */
99
+ export interface DataQuerySchema {
100
+ version: 1;
101
+ identityField: DataQueryFieldId;
102
+ fields: DataQueryFieldDescriptor[];
103
+ defaultPageLimit?: number;
104
+ maxPageLimit?: number;
105
+ maxResultBytes?: number;
106
+ defaultSort?: DataQuerySort[];
107
+ supports?: {
108
+ cursorPagination?: boolean;
109
+ consistency?: boolean;
110
+ facets?: boolean;
111
+ };
112
+ }
113
+ /** How a returned total was obtained, including the absence of a total. */
114
+ export type DataQueryTotal = {
115
+ kind: 'exact';
116
+ value: number;
117
+ asOf?: string;
118
+ } | {
119
+ kind: 'estimated';
120
+ value: number;
121
+ asOf?: string;
122
+ } | {
123
+ kind: 'unavailable';
124
+ reason?: string;
125
+ };
126
+ /** Freshness metadata is declarative; it does not grant access to a snapshot. */
127
+ export interface DataQueryFreshness {
128
+ state: 'fresh' | 'stale' | 'unknown';
129
+ asOf?: string;
130
+ }
131
+ /** A bounded facet value/count pair. */
132
+ export interface DataQueryFacetValue {
133
+ value: DataQueryScalar;
134
+ count: number;
135
+ }
136
+ export interface DataQueryFacetResult {
137
+ field: DataQueryFieldId;
138
+ values: DataQueryFacetValue[];
139
+ truncated: boolean;
140
+ }
141
+ /** Rows use JSON-safe values; adapters must project only declared fields. */
142
+ export type DataQueryRow = Record<string, unknown>;
143
+ /**
144
+ * Normalized adapter result. `queryFingerprint` identifies the semantic query
145
+ * (not the request id or page cursor), while pagination state stays explicit.
146
+ */
147
+ export interface DataQueryResult {
148
+ version: 1;
149
+ requestId: string;
150
+ queryFingerprint: string;
151
+ identityField: DataQueryFieldId;
152
+ rows: DataQueryRow[];
153
+ page?: {
154
+ kind: 'offset';
155
+ limit: number;
156
+ offset: number;
157
+ hasMore: boolean;
158
+ } | {
159
+ kind: 'cursor';
160
+ limit: number;
161
+ nextCursor?: string;
162
+ hasMore: boolean;
163
+ };
164
+ total: DataQueryTotal;
165
+ facets?: DataQueryFacetResult[];
166
+ freshness: DataQueryFreshness;
167
+ warnings: string[];
168
+ truncated: boolean;
169
+ }
170
+ //# sourceMappingURL=data-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-query.d.ts","sourceRoot":"","sources":["../src/data-query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Transport-neutral data-surface contracts.
3
+ *
4
+ * These declarations describe bounded browser/server action envelopes and
5
+ * mounted-surface metadata. They carry neither authority nor execution:
6
+ * authenticated adapters own both.
7
+ */
8
+ export type DataSurfaceJsonPrimitive = string | number | boolean | null;
9
+ export type DataSurfaceJsonValue = DataSurfaceJsonPrimitive | DataSurfaceJsonValue[] | {
10
+ [key: string]: DataSurfaceJsonValue;
11
+ };
12
+ export type DataSurfaceJsonObject = {
13
+ [key: string]: DataSurfaceJsonValue;
14
+ };
15
+ export type DataSurfaceRowId = string | number;
16
+ export type DataSurfaceKind = 'table' | 'list' | 'report' | 'custom';
17
+ export type DataSurfaceSensitivity = 'public' | 'personal' | 'sensitive' | 'secret';
18
+ export interface DataSurfaceSubject {
19
+ type: string;
20
+ id: string;
21
+ label?: string;
22
+ }
23
+ /** Stable address for one mounted instance, never an authority boundary. */
24
+ export interface DataSurfaceIdentity {
25
+ surfaceId: string;
26
+ kind: DataSurfaceKind;
27
+ subject?: DataSurfaceSubject;
28
+ }
29
+ export type DataSurfaceColumnCapability = 'read' | 'search' | 'filter' | 'sort' | 'project';
30
+ /** Presentation tier emitted by policy-aware domain adapters. */
31
+ export type DataSurfaceColumnVisibility = 'basic' | 'advanced' | 'hidden';
32
+ /** A domain-neutral column role. Adapters use roles to protect structural columns. */
33
+ export type DataSurfaceColumnRole = 'data' | 'status' | 'computed' | 'row-key' | 'selection' | 'action';
34
+ /** Operator allowlists are intentionally strings: #2444 owns query semantics. */
35
+ export interface DataSurfaceColumnOperators {
36
+ search?: string[];
37
+ filter?: string[];
38
+ sort?: string[];
39
+ }
40
+ export interface DataSurfaceColumnDescriptor {
41
+ id: string;
42
+ label: string;
43
+ description?: string;
44
+ sensitivity?: DataSurfaceSensitivity;
45
+ capabilities: DataSurfaceColumnCapability[];
46
+ /** Domain field identity; never accepted as a request path. */
47
+ fieldName?: string;
48
+ /** Effective policy visibility, when a domain adapter supplies one. */
49
+ visibility?: DataSurfaceColumnVisibility;
50
+ /** Stable policy order; domain column ids remain unchanged. */
51
+ order?: number;
52
+ /** Structural columns are preserved even when field policy narrows data columns. */
53
+ role?: DataSurfaceColumnRole;
54
+ /** Responsive adapters consume this without importing DataTable types. */
55
+ responsivePriority?: number;
56
+ /** Per-operation operator allowlists, narrowed by policy adapters. */
57
+ operators?: DataSurfaceColumnOperators;
58
+ /** Explicit aliases for adapters that mirror the canonical query schema. */
59
+ searchOperators?: string[];
60
+ filterOperators?: string[];
61
+ sortOperators?: string[];
62
+ /** Explicit readability is useful when read capability is policy-gated. */
63
+ readable?: boolean;
64
+ }
65
+ /** #2444 owns the canonical query language; this declares only its bounds. */
66
+ export type DataSurfaceQueryMode = 'rows' | 'count' | 'facets';
67
+ export interface DataSurfaceQueryCapabilities {
68
+ modes: DataSurfaceQueryMode[];
69
+ /** Explicit allowlist; field paths are not accepted in requests. */
70
+ projectableColumnIds: string[];
71
+ /** Explicit allowlists for non-projection query operations. */
72
+ searchableColumnIds?: string[];
73
+ filterableColumnIds?: string[];
74
+ sortableColumnIds?: string[];
75
+ }
76
+ export interface DataSurfaceVisibleControl {
77
+ /** Stable command name accepted by the mounted surface. */
78
+ id: string;
79
+ label: string;
80
+ description?: string;
81
+ }
82
+ export type DataSurfaceSelectionScope = 'current-page' | 'explicit-ids' | 'all-matching';
83
+ export interface DataSurfaceActionDescriptor {
84
+ id: string;
85
+ label: string;
86
+ description?: string;
87
+ sensitivity?: DataSurfaceSensitivity;
88
+ selectionScopes: DataSurfaceSelectionScope[];
89
+ requiresConfirmation?: boolean;
90
+ /** Optional column dependencies used by field-policy adapters. */
91
+ columnIds?: string[];
92
+ }
93
+ /** Per-surface limits; generic envelopes use DATA_SURFACE_MAX_REQUEST_BYTES. */
94
+ export interface DataSurfaceLimits {
95
+ maxQueryRows: number;
96
+ maxQueryBytes: number;
97
+ maxSelectionSize: number;
98
+ }
99
+ /** Public, serializable discovery metadata for a mounted data surface. */
100
+ export interface DataSurfaceDescriptor {
101
+ version: 1;
102
+ identity: DataSurfaceIdentity;
103
+ /** Version of the domain adapter's descriptor and view-state schema. */
104
+ schemaVersion: number;
105
+ label: string;
106
+ description?: string;
107
+ /** Stable row-identity column, including when it is not visibly rendered. */
108
+ rowKey: string;
109
+ columns: DataSurfaceColumnDescriptor[];
110
+ query: DataSurfaceQueryCapabilities;
111
+ controls: DataSurfaceVisibleControl[];
112
+ actions: DataSurfaceActionDescriptor[];
113
+ limits: DataSurfaceLimits;
114
+ }
115
+ export type DataSurfaceSelectionReference = {
116
+ scope: 'current-page';
117
+ } | {
118
+ scope: 'explicit-ids';
119
+ rowIds: DataSurfaceRowId[];
120
+ } | {
121
+ scope: 'all-matching';
122
+ queryFingerprint: string;
123
+ };
124
+ /** Input supplied by a mounted renderer/controller, before registry wrapping. */
125
+ export interface DataSurfaceSnapshotState {
126
+ revision: number;
127
+ state: DataSurfaceJsonObject;
128
+ selection?: DataSurfaceSelectionReference | null;
129
+ }
130
+ /** Deterministic inspect/result envelope. It intentionally has no timestamp. */
131
+ export interface DataSurfaceSnapshot {
132
+ version: 1;
133
+ descriptor: DataSurfaceDescriptor;
134
+ revision: number;
135
+ state: DataSurfaceJsonObject;
136
+ selection: DataSurfaceSelectionReference | null;
137
+ }
138
+ /** A browser-visible state transition, not a server-side query or mutation. */
139
+ export interface DataSurfaceVisibleCommand {
140
+ version: 1;
141
+ commandId: string;
142
+ identity: DataSurfaceIdentity;
143
+ expectedRevision: number;
144
+ controlId: string;
145
+ payload?: DataSurfaceJsonValue;
146
+ }
147
+ export type DataSurfaceCommandFailureReason = 'not_found' | 'unsupported' | 'stale_revision' | 'idempotency_conflict' | 'denied' | 'execution_failed' | 'non_monotonic_revision';
148
+ export interface DataSurfaceCommandResult {
149
+ ok: boolean;
150
+ commandId: string;
151
+ identity: DataSurfaceIdentity;
152
+ revision?: number;
153
+ snapshot?: DataSurfaceSnapshot;
154
+ reason?: DataSurfaceCommandFailureReason;
155
+ }
156
+ /**
157
+ * This intentionally contains only bounded read shape. #2444 adds the
158
+ * canonical filters, ordering, cursors, totals, and normalized result details.
159
+ */
160
+ export type DataSurfaceQueryRequest = {
161
+ version: 1;
162
+ requestId: string;
163
+ identity: DataSurfaceIdentity;
164
+ kind: 'rows';
165
+ limit: number;
166
+ cursor?: string;
167
+ projection?: string[];
168
+ } | {
169
+ version: 1;
170
+ requestId: string;
171
+ identity: DataSurfaceIdentity;
172
+ kind: 'count';
173
+ } | {
174
+ version: 1;
175
+ requestId: string;
176
+ identity: DataSurfaceIdentity;
177
+ kind: 'facets';
178
+ columnId: string;
179
+ limit: number;
180
+ };
181
+ interface DataSurfaceQueryResultBase {
182
+ version: 1;
183
+ requestId: string;
184
+ identity: DataSurfaceIdentity;
185
+ revision: number;
186
+ }
187
+ /** Bounded read result shapes; #2444 owns their canonical query semantics. */
188
+ export type DataSurfaceQueryResult = (DataSurfaceQueryResultBase & {
189
+ kind: 'rows';
190
+ rowKey: string;
191
+ rows: DataSurfaceJsonObject[];
192
+ hasMore: boolean;
193
+ truncated: boolean;
194
+ nextCursor?: string;
195
+ }) | (DataSurfaceQueryResultBase & {
196
+ kind: 'count';
197
+ count: number;
198
+ }) | (DataSurfaceQueryResultBase & {
199
+ kind: 'facets';
200
+ columnId: string;
201
+ facets: Array<{
202
+ value: DataSurfaceJsonPrimitive;
203
+ count: number;
204
+ }>;
205
+ truncated: boolean;
206
+ });
207
+ /** Preview/apply is a contract only here; server-side adapters execute it. */
208
+ export interface DataSurfaceActionRequest {
209
+ version: 1;
210
+ requestId: string;
211
+ identity: DataSurfaceIdentity;
212
+ actionId: string;
213
+ phase: 'preview' | 'apply';
214
+ selection: DataSurfaceSelectionReference;
215
+ payload?: DataSurfaceJsonValue;
216
+ /** Opaque confirmation produced by a prior preview, never an authority. */
217
+ confirmationToken?: string;
218
+ }
219
+ /**
220
+ * Canonical wire request for principal-bound server adapters. A preview can
221
+ * omit the idempotency key; apply requires it at the server boundary.
222
+ */
223
+ export interface DataSurfaceActionWireRequest extends DataSurfaceActionRequest {
224
+ expectedRevision: number;
225
+ idempotencyKey?: string;
226
+ }
227
+ export interface DataSurfaceActionResult {
228
+ version: 1;
229
+ requestId: string;
230
+ identity: DataSurfaceIdentity;
231
+ actionId: string;
232
+ phase: 'preview' | 'apply';
233
+ ok: boolean;
234
+ reason?: string;
235
+ confirmationToken?: string;
236
+ details?: DataSurfaceJsonObject;
237
+ }
238
+ /** Serializable outcome for one server-resolved row in an action. */
239
+ export interface DataSurfaceActionRowOutcome {
240
+ rowId: DataSurfaceRowId;
241
+ status: 'accepted' | 'skipped' | 'failed';
242
+ reason?: string;
243
+ metadata?: DataSurfaceJsonObject;
244
+ }
245
+ export type DataSurfaceValidationReason = 'not_found' | 'unsupported' | 'invalid_request' | 'limit_exceeded' | 'projection_not_allowed' | 'selection_not_supported' | 'confirmation_required';
246
+ export interface DataSurfaceValidationResult {
247
+ ok: boolean;
248
+ reason?: DataSurfaceValidationReason;
249
+ }
250
+ export type DataSurfaceCommandExecution = {
251
+ ok: false;
252
+ } | undefined;
253
+ /** Runtime-only handle supplied by a mounted renderer or controller. */
254
+ export interface DataSurfaceRegistration {
255
+ descriptor: DataSurfaceDescriptor;
256
+ getSnapshot: () => DataSurfaceSnapshotState;
257
+ execute?: (command: DataSurfaceVisibleCommand) => DataSurfaceCommandExecution | Promise<DataSurfaceCommandExecution>;
258
+ /**
259
+ * A host-owned redaction boundary. It cannot change identity or revision and
260
+ * the registry validates its output before exposing it.
261
+ */
262
+ redact?: (snapshot: DataSurfaceSnapshot) => DataSurfaceSnapshot;
263
+ }
264
+ export interface DataSurfaceRegistryEvent {
265
+ type: 'registered' | 'unregistered' | 'command';
266
+ sequence: number;
267
+ identity: DataSurfaceIdentity;
268
+ revision: number;
269
+ command?: DataSurfaceVisibleCommand;
270
+ result?: DataSurfaceCommandResult;
271
+ }
272
+ export interface DataSurfaceRegistry {
273
+ register(registration: DataSurfaceRegistration): () => void;
274
+ unregister(identity: DataSurfaceIdentity): void;
275
+ list(): DataSurfaceDescriptor[];
276
+ inspect(identity: DataSurfaceIdentity): DataSurfaceSnapshot | undefined;
277
+ execute(command: DataSurfaceVisibleCommand): Promise<DataSurfaceCommandResult>;
278
+ validateQuery(request: DataSurfaceQueryRequest): DataSurfaceValidationResult;
279
+ validateAction(request: DataSurfaceActionRequest): DataSurfaceValidationResult;
280
+ subscribe(listener: (event: DataSurfaceRegistryEvent) => void): () => void;
281
+ }
282
+ export {};
283
+ //# sourceMappingURL=data-surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-surface.d.ts","sourceRoot":"","sources":["../src/data-surface.ts"],"names":[],"mappings":"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"}