@mcp-native/a2ui 0.1.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 +100 -13
- package/dist/binding.d.ts +33 -0
- package/dist/binding.d.ts.map +1 -0
- package/dist/binding.js +83 -0
- package/dist/binding.js.map +1 -0
- package/dist/errors.d.ts +7 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +9 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -13
- package/dist/index.js.map +1 -1
- package/dist/mime.d.ts +6 -0
- package/dist/mime.d.ts.map +1 -0
- package/dist/mime.js +2 -0
- package/dist/mime.js.map +1 -0
- package/dist/schema-revision.d.ts +3 -0
- package/dist/schema-revision.d.ts.map +1 -0
- package/dist/schema-revision.js +3 -0
- package/dist/schema-revision.js.map +1 -0
- package/dist/v1/action.d.ts +7 -0
- package/dist/v1/action.d.ts.map +1 -0
- package/dist/v1/action.js +86 -0
- package/dist/v1/action.js.map +1 -0
- package/dist/v1/capabilities.d.ts +13 -0
- package/dist/v1/capabilities.d.ts.map +1 -0
- package/dist/v1/capabilities.js +134 -0
- package/dist/v1/capabilities.js.map +1 -0
- package/dist/v1/format-string.d.ts +21 -0
- package/dist/v1/format-string.d.ts.map +1 -0
- package/dist/v1/format-string.js +487 -0
- package/dist/v1/format-string.js.map +1 -0
- package/dist/v1/index.d.ts +13 -0
- package/dist/v1/index.d.ts.map +1 -0
- package/dist/v1/index.js +9 -0
- package/dist/v1/index.js.map +1 -0
- package/dist/v1/parse.d.ts +12 -0
- package/dist/v1/parse.d.ts.map +1 -0
- package/dist/v1/parse.js +96 -0
- package/dist/v1/parse.js.map +1 -0
- package/dist/v1/resolve.d.ts +19 -0
- package/dist/v1/resolve.d.ts.map +1 -0
- package/dist/v1/resolve.js +112 -0
- package/dist/v1/resolve.js.map +1 -0
- package/dist/v1/schemas.d.ts +16 -0
- package/dist/v1/schemas.d.ts.map +1 -0
- package/dist/v1/schemas.js +133 -0
- package/dist/v1/schemas.js.map +1 -0
- package/dist/v1/store.d.ts +21 -0
- package/dist/v1/store.d.ts.map +1 -0
- package/dist/v1/store.js +305 -0
- package/dist/v1/store.js.map +1 -0
- package/dist/v1/types.d.ts +109 -0
- package/dist/v1/types.d.ts.map +1 -0
- package/dist/v1/types.js +10 -0
- package/dist/v1/types.js.map +1 -0
- package/dist/v1/validate.d.ts +26 -0
- package/dist/v1/validate.d.ts.map +1 -0
- package/dist/v1/validate.js +449 -0
- package/dist/v1/validate.js.map +1 -0
- package/dist/v1/vendor/agent_capabilities.json +26 -0
- package/dist/v1/vendor/agent_to_renderer.json +216 -0
- package/dist/v1/vendor/catalog.json +1346 -0
- package/dist/v1/vendor/common_types.json +395 -0
- package/dist/v1/vendor/renderer_capabilities.json +29 -0
- package/dist/v1/vendor/renderer_to_agent.json +161 -0
- package/package.json +5 -2
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/CHECKSUMS.sha256 +13 -0
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/PROVENANCE.md +12 -0
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/catalogs/basic/catalog.json +1346 -0
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/agent_capabilities.json +26 -0
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/agent_to_renderer.json +216 -0
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/agent_to_renderer_list.json +10 -0
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/agent_to_renderer_list_wrapper.json +14 -0
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/catalog_definition.json +267 -0
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/common_types.json +395 -0
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_capabilities.json +29 -0
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_data_model.json +22 -0
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_to_agent.json +161 -0
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_to_agent_list.json +10 -0
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_to_agent_list_wrapper.json +14 -0
- package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/sample.json +22 -0
package/dist/v1/store.js
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { parseJsonObject, parseJsonValue } from "@mcp-native/core";
|
|
2
|
+
import { A2uiParseError } from "../errors.js";
|
|
3
|
+
import { parseA2uiV1Envelope } from "./parse.js";
|
|
4
|
+
import { A2UI_V1_MAX_COMPONENTS, A2UI_V1_MAX_SURFACES } from "./types.js";
|
|
5
|
+
import { validateA2uiV1SurfaceState } from "./validate.js";
|
|
6
|
+
/**
|
|
7
|
+
* Ordered in-memory store for official A2UI v1.0 lifecycle envelopes.
|
|
8
|
+
* Batches applied through {@link A2uiSurfaceStore.applyAll} are atomic.
|
|
9
|
+
*/
|
|
10
|
+
export class A2uiSurfaceStore {
|
|
11
|
+
#surfaces = new Map();
|
|
12
|
+
get size() {
|
|
13
|
+
return this.#surfaces.size;
|
|
14
|
+
}
|
|
15
|
+
has(surfaceId) {
|
|
16
|
+
return this.#surfaces.has(surfaceId);
|
|
17
|
+
}
|
|
18
|
+
get(surfaceId) {
|
|
19
|
+
const surface = this.#surfaces.get(surfaceId);
|
|
20
|
+
return surface === undefined ? undefined : freezeSurface(surface);
|
|
21
|
+
}
|
|
22
|
+
/** Returns a complete renderer-ready snapshot or fails closed. */
|
|
23
|
+
getValidated(surfaceId, policy) {
|
|
24
|
+
const surface = this.get(surfaceId);
|
|
25
|
+
return surface === undefined ? undefined : validateA2uiV1SurfaceState(surface, policy);
|
|
26
|
+
}
|
|
27
|
+
list() {
|
|
28
|
+
return [...this.#surfaces.values()].map(freezeSurface);
|
|
29
|
+
}
|
|
30
|
+
apply(envelope) {
|
|
31
|
+
this.#applyValidated(parseA2uiV1Envelope(envelope));
|
|
32
|
+
}
|
|
33
|
+
#applyValidated(envelope) {
|
|
34
|
+
if ("createSurface" in envelope) {
|
|
35
|
+
this.#createSurface(envelope.createSurface);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if ("updateComponents" in envelope) {
|
|
39
|
+
this.#updateComponents(envelope.updateComponents);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if ("updateDataModel" in envelope) {
|
|
43
|
+
this.#updateDataModel(envelope.updateDataModel);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if ("deleteSurface" in envelope) {
|
|
47
|
+
this.#deleteSurface(envelope.deleteSurface.surfaceId);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
throw new A2uiParseError("Unsupported A2UI v1 envelope for the surface store");
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Applies every envelope in order. On failure the store is left unchanged.
|
|
54
|
+
*/
|
|
55
|
+
applyAll(envelopes) {
|
|
56
|
+
if (!Array.isArray(envelopes)) {
|
|
57
|
+
throw new A2uiParseError("Expected an array of A2UI v1 envelopes");
|
|
58
|
+
}
|
|
59
|
+
const validated = envelopes.map((envelope) => parseA2uiV1Envelope(envelope));
|
|
60
|
+
const snapshot = cloneSurfaces(this.#surfaces);
|
|
61
|
+
try {
|
|
62
|
+
for (const envelope of validated) {
|
|
63
|
+
this.#applyValidated(envelope);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
this.#surfaces.clear();
|
|
68
|
+
for (const [surfaceId, surface] of snapshot) {
|
|
69
|
+
this.#surfaces.set(surfaceId, surface);
|
|
70
|
+
}
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
#createSurface(message) {
|
|
75
|
+
if (this.#surfaces.has(message.surfaceId)) {
|
|
76
|
+
throw new A2uiParseError(`Cannot create A2UI surface ${JSON.stringify(message.surfaceId)}; it already exists`);
|
|
77
|
+
}
|
|
78
|
+
if (this.#surfaces.size >= A2UI_V1_MAX_SURFACES) {
|
|
79
|
+
throw new A2uiParseError(`A2UI store exceeds maximum of ${A2UI_V1_MAX_SURFACES} surfaces`);
|
|
80
|
+
}
|
|
81
|
+
const components = new Map();
|
|
82
|
+
if (message.components !== undefined) {
|
|
83
|
+
mergeComponents(components, message.components);
|
|
84
|
+
}
|
|
85
|
+
const dataModel = message.dataModel === undefined
|
|
86
|
+
? {}
|
|
87
|
+
: parseJsonObject(message.dataModel, "createSurface.dataModel");
|
|
88
|
+
const surface = {
|
|
89
|
+
surfaceId: message.surfaceId,
|
|
90
|
+
sendDataModel: message.sendDataModel === true,
|
|
91
|
+
dataModelRevision: 0,
|
|
92
|
+
components,
|
|
93
|
+
dataModel,
|
|
94
|
+
};
|
|
95
|
+
if (message.catalogId !== undefined) {
|
|
96
|
+
surface.catalogId = message.catalogId;
|
|
97
|
+
}
|
|
98
|
+
if (message.metadata !== undefined) {
|
|
99
|
+
surface.metadata = parseJsonObject(message.metadata, "createSurface.metadata");
|
|
100
|
+
}
|
|
101
|
+
this.#surfaces.set(message.surfaceId, surface);
|
|
102
|
+
}
|
|
103
|
+
#updateComponents(message) {
|
|
104
|
+
const surface = this.#requireSurface(message.surfaceId, "updateComponents");
|
|
105
|
+
const updatedComponents = cloneComponents(surface.components);
|
|
106
|
+
mergeComponents(updatedComponents, message.components);
|
|
107
|
+
surface.components = updatedComponents;
|
|
108
|
+
}
|
|
109
|
+
#updateDataModel(message) {
|
|
110
|
+
const surface = this.#requireSurface(message.surfaceId, "updateDataModel");
|
|
111
|
+
const updatedDataModel = setJsonPointer(surface.dataModel, message.path, parseJsonValue(message.value, "updateDataModel.value"));
|
|
112
|
+
try {
|
|
113
|
+
surface.dataModel = parseJsonObject(updatedDataModel, "updateDataModel.result");
|
|
114
|
+
surface.dataModelRevision += 1;
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
const errorMessage = error instanceof Error ? error.message : "Invalid merged data model";
|
|
118
|
+
throw new A2uiParseError(`Updated A2UI data model is invalid: ${errorMessage}`, {
|
|
119
|
+
cause: error,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
#deleteSurface(surfaceId) {
|
|
124
|
+
if (!this.#surfaces.delete(surfaceId)) {
|
|
125
|
+
throw new A2uiParseError(`Cannot delete A2UI surface ${JSON.stringify(surfaceId)}; it does not exist`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
#requireSurface(surfaceId, operation) {
|
|
129
|
+
const surface = this.#surfaces.get(surfaceId);
|
|
130
|
+
if (surface === undefined) {
|
|
131
|
+
throw new A2uiParseError(`Cannot ${operation} A2UI surface ${JSON.stringify(surfaceId)}; it does not exist`);
|
|
132
|
+
}
|
|
133
|
+
return surface;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function mergeComponents(target, components) {
|
|
137
|
+
const seen = new Set();
|
|
138
|
+
for (const [index, component] of components.entries()) {
|
|
139
|
+
const reconstructed = parseJsonObject(component, `components[${index}]`);
|
|
140
|
+
if (typeof reconstructed.id !== "string" || reconstructed.id.length === 0) {
|
|
141
|
+
throw new A2uiParseError("Expected a non-empty component id");
|
|
142
|
+
}
|
|
143
|
+
if (typeof reconstructed.component !== "string" || reconstructed.component.length === 0) {
|
|
144
|
+
throw new A2uiParseError("Expected a non-empty component name");
|
|
145
|
+
}
|
|
146
|
+
if (seen.has(reconstructed.id)) {
|
|
147
|
+
throw new A2uiParseError(`Duplicate A2UI component id ${JSON.stringify(reconstructed.id)} in one update`);
|
|
148
|
+
}
|
|
149
|
+
seen.add(reconstructed.id);
|
|
150
|
+
target.set(reconstructed.id, reconstructed);
|
|
151
|
+
if (target.size > A2UI_V1_MAX_COMPONENTS) {
|
|
152
|
+
throw new A2uiParseError(`A2UI surface exceeds maximum of ${A2UI_V1_MAX_COMPONENTS} components`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function freezeSurface(surface) {
|
|
157
|
+
return {
|
|
158
|
+
surfaceId: surface.surfaceId,
|
|
159
|
+
...(surface.catalogId === undefined ? {} : { catalogId: surface.catalogId }),
|
|
160
|
+
sendDataModel: surface.sendDataModel,
|
|
161
|
+
dataModelRevision: surface.dataModelRevision,
|
|
162
|
+
components: cloneComponents(surface.components),
|
|
163
|
+
dataModel: parseJsonObject(surface.dataModel, "surface.dataModel"),
|
|
164
|
+
...(surface.metadata === undefined
|
|
165
|
+
? {}
|
|
166
|
+
: { metadata: parseJsonObject(surface.metadata, "surface.metadata") }),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
function cloneSurfaces(surfaces) {
|
|
170
|
+
const clone = new Map();
|
|
171
|
+
for (const [surfaceId, surface] of surfaces) {
|
|
172
|
+
clone.set(surfaceId, {
|
|
173
|
+
surfaceId: surface.surfaceId,
|
|
174
|
+
...(surface.catalogId === undefined ? {} : { catalogId: surface.catalogId }),
|
|
175
|
+
sendDataModel: surface.sendDataModel,
|
|
176
|
+
dataModelRevision: surface.dataModelRevision,
|
|
177
|
+
components: cloneComponents(surface.components),
|
|
178
|
+
dataModel: parseJsonObject(surface.dataModel, "surface.dataModel"),
|
|
179
|
+
...(surface.metadata === undefined
|
|
180
|
+
? {}
|
|
181
|
+
: { metadata: parseJsonObject(surface.metadata, "surface.metadata") }),
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return clone;
|
|
185
|
+
}
|
|
186
|
+
function cloneComponents(components) {
|
|
187
|
+
const clone = new Map();
|
|
188
|
+
for (const [id, component] of components) {
|
|
189
|
+
clone.set(id, parseJsonObject(component, `components.${id}`));
|
|
190
|
+
}
|
|
191
|
+
return clone;
|
|
192
|
+
}
|
|
193
|
+
function setJsonPointer(document, path, value) {
|
|
194
|
+
if (path === undefined || path === "" || path === "/") {
|
|
195
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
196
|
+
throw new A2uiParseError("Root data model replacement must be a JSON object");
|
|
197
|
+
}
|
|
198
|
+
return parseJsonObject(value, "dataModel");
|
|
199
|
+
}
|
|
200
|
+
if (!path.startsWith("/")) {
|
|
201
|
+
throw new A2uiParseError(`Invalid JSON Pointer ${JSON.stringify(path)}`);
|
|
202
|
+
}
|
|
203
|
+
const tokens = path
|
|
204
|
+
.slice(1)
|
|
205
|
+
.split("/")
|
|
206
|
+
.map((token) => decodeJsonPointerToken(token, path));
|
|
207
|
+
const root = parseJsonObject(document, "dataModel");
|
|
208
|
+
let cursor = root;
|
|
209
|
+
for (let index = 0; index < tokens.length - 1; index += 1) {
|
|
210
|
+
const token = tokens[index];
|
|
211
|
+
if (Array.isArray(cursor)) {
|
|
212
|
+
const arrayIndex = parseArrayIndex(token, path);
|
|
213
|
+
if (arrayIndex > cursor.length) {
|
|
214
|
+
throw new A2uiParseError(`JSON Pointer path missing at ${JSON.stringify(path)}`);
|
|
215
|
+
}
|
|
216
|
+
if (arrayIndex === cursor.length) {
|
|
217
|
+
cursor.push({});
|
|
218
|
+
}
|
|
219
|
+
const next = cursor[arrayIndex];
|
|
220
|
+
if (next === null || typeof next !== "object") {
|
|
221
|
+
throw new A2uiParseError(`JSON Pointer path is not a container at ${JSON.stringify(path)}`);
|
|
222
|
+
}
|
|
223
|
+
cursor = next;
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
if (cursor === null || typeof cursor !== "object") {
|
|
227
|
+
throw new A2uiParseError(`JSON Pointer path missing at ${JSON.stringify(path)}`);
|
|
228
|
+
}
|
|
229
|
+
const object = cursor;
|
|
230
|
+
if (!Object.hasOwn(object, token)) {
|
|
231
|
+
defineJsonProperty(object, token, {});
|
|
232
|
+
}
|
|
233
|
+
const next = object[token];
|
|
234
|
+
if (next === null || typeof next !== "object") {
|
|
235
|
+
throw new A2uiParseError(`JSON Pointer path is not a container at ${JSON.stringify(path)}`);
|
|
236
|
+
}
|
|
237
|
+
cursor = next;
|
|
238
|
+
}
|
|
239
|
+
const last = tokens[tokens.length - 1];
|
|
240
|
+
if (Array.isArray(cursor)) {
|
|
241
|
+
const arrayIndex = parseArrayIndex(last, path);
|
|
242
|
+
if (value === null) {
|
|
243
|
+
if (arrayIndex >= cursor.length) {
|
|
244
|
+
throw new A2uiParseError(`JSON Pointer path missing at ${JSON.stringify(path)}`);
|
|
245
|
+
}
|
|
246
|
+
cursor.splice(arrayIndex, 1);
|
|
247
|
+
}
|
|
248
|
+
else if (arrayIndex === cursor.length) {
|
|
249
|
+
cursor.push(value);
|
|
250
|
+
}
|
|
251
|
+
else if (arrayIndex < cursor.length) {
|
|
252
|
+
cursor[arrayIndex] = value;
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
throw new A2uiParseError(`JSON Pointer path missing at ${JSON.stringify(path)}`);
|
|
256
|
+
}
|
|
257
|
+
return root;
|
|
258
|
+
}
|
|
259
|
+
if (cursor === null || typeof cursor !== "object") {
|
|
260
|
+
throw new A2uiParseError(`JSON Pointer path missing at ${JSON.stringify(path)}`);
|
|
261
|
+
}
|
|
262
|
+
const object = cursor;
|
|
263
|
+
if (value === null) {
|
|
264
|
+
if (!Object.hasOwn(object, last)) {
|
|
265
|
+
throw new A2uiParseError(`JSON Pointer path missing at ${JSON.stringify(path)}`);
|
|
266
|
+
}
|
|
267
|
+
delete object[last];
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
defineJsonProperty(object, last, value);
|
|
271
|
+
}
|
|
272
|
+
return root;
|
|
273
|
+
}
|
|
274
|
+
function parseArrayIndex(token, path) {
|
|
275
|
+
if (!/^(0|[1-9][0-9]*)$/.test(token)) {
|
|
276
|
+
throw new A2uiParseError(`Invalid JSON Pointer array index in ${JSON.stringify(path)}`);
|
|
277
|
+
}
|
|
278
|
+
const index = Number(token);
|
|
279
|
+
if (!Number.isSafeInteger(index)) {
|
|
280
|
+
throw new A2uiParseError(`Invalid JSON Pointer array index in ${JSON.stringify(path)}`);
|
|
281
|
+
}
|
|
282
|
+
return index;
|
|
283
|
+
}
|
|
284
|
+
function decodeJsonPointerToken(token, path) {
|
|
285
|
+
for (let index = 0; index < token.length; index += 1) {
|
|
286
|
+
if (token[index] !== "~") {
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
const escaped = token[index + 1];
|
|
290
|
+
if (escaped !== "0" && escaped !== "1") {
|
|
291
|
+
throw new A2uiParseError(`Invalid JSON Pointer escape in ${JSON.stringify(path)}`);
|
|
292
|
+
}
|
|
293
|
+
index += 1;
|
|
294
|
+
}
|
|
295
|
+
return token.replaceAll("~1", "/").replaceAll("~0", "~");
|
|
296
|
+
}
|
|
297
|
+
function defineJsonProperty(object, key, value) {
|
|
298
|
+
Object.defineProperty(object, key, {
|
|
299
|
+
configurable: true,
|
|
300
|
+
enumerable: true,
|
|
301
|
+
value,
|
|
302
|
+
writable: true,
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/v1/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { JsonObject, JsonValue } from "@mcp-native/core";
|
|
2
|
+
export declare const A2UI_V1_PROTOCOL_VERSION: "v1.0";
|
|
3
|
+
/** Maximum UTF-16 code units accepted in one JSONL resource body. */
|
|
4
|
+
export declare const A2UI_V1_MAX_SOURCE_LENGTH = 1048576;
|
|
5
|
+
/** Maximum number of non-empty JSONL envelopes in one resource batch. */
|
|
6
|
+
export declare const A2UI_V1_MAX_ENVELOPES = 1024;
|
|
7
|
+
/** Maximum surfaces retained by one in-memory store. */
|
|
8
|
+
export declare const A2UI_V1_MAX_SURFACES = 1024;
|
|
9
|
+
/** Maximum retained component definitions in one surface. */
|
|
10
|
+
export declare const A2UI_V1_MAX_COMPONENTS = 1024;
|
|
11
|
+
export type A2uiV1Component = JsonObject & {
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly component: string;
|
|
14
|
+
};
|
|
15
|
+
export type A2uiV1CreateSurfaceEnvelope = {
|
|
16
|
+
readonly version: typeof A2UI_V1_PROTOCOL_VERSION;
|
|
17
|
+
readonly createSurface: {
|
|
18
|
+
readonly surfaceId: string;
|
|
19
|
+
readonly catalogId?: string;
|
|
20
|
+
readonly sendDataModel?: boolean;
|
|
21
|
+
readonly components?: readonly A2uiV1Component[];
|
|
22
|
+
readonly dataModel?: JsonObject;
|
|
23
|
+
readonly metadata?: JsonObject;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export type A2uiV1UpdateComponentsEnvelope = {
|
|
27
|
+
readonly version: typeof A2UI_V1_PROTOCOL_VERSION;
|
|
28
|
+
readonly updateComponents: {
|
|
29
|
+
readonly surfaceId: string;
|
|
30
|
+
readonly components: readonly A2uiV1Component[];
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export type A2uiV1UpdateDataModelEnvelope = {
|
|
34
|
+
readonly version: typeof A2UI_V1_PROTOCOL_VERSION;
|
|
35
|
+
readonly updateDataModel: {
|
|
36
|
+
readonly surfaceId: string;
|
|
37
|
+
readonly path?: string;
|
|
38
|
+
readonly value: JsonValue;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
export type A2uiV1DeleteSurfaceEnvelope = {
|
|
42
|
+
readonly version: typeof A2UI_V1_PROTOCOL_VERSION;
|
|
43
|
+
readonly deleteSurface: {
|
|
44
|
+
readonly surfaceId: string;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
/** Lifecycle envelopes supported by the Milestone 3 surface store. */
|
|
48
|
+
export type A2uiV1Envelope = A2uiV1CreateSurfaceEnvelope | A2uiV1UpdateComponentsEnvelope | A2uiV1UpdateDataModelEnvelope | A2uiV1DeleteSurfaceEnvelope;
|
|
49
|
+
export type A2uiV1EnvelopeKind = "createSurface" | "updateComponents" | "updateDataModel" | "deleteSurface";
|
|
50
|
+
export interface A2uiV1SurfaceState {
|
|
51
|
+
readonly surfaceId: string;
|
|
52
|
+
readonly catalogId?: string;
|
|
53
|
+
readonly sendDataModel: boolean;
|
|
54
|
+
/** Host-owned revision incremented after each accepted agent data-model update. */
|
|
55
|
+
readonly dataModelRevision?: number;
|
|
56
|
+
readonly components: ReadonlyMap<string, A2uiV1Component>;
|
|
57
|
+
readonly dataModel: JsonObject;
|
|
58
|
+
readonly metadata?: JsonObject;
|
|
59
|
+
}
|
|
60
|
+
export interface A2uiV1Action {
|
|
61
|
+
readonly name: string;
|
|
62
|
+
readonly surfaceId: string;
|
|
63
|
+
readonly sourceComponentId: string;
|
|
64
|
+
readonly timestamp: string;
|
|
65
|
+
readonly context: JsonObject;
|
|
66
|
+
readonly userMessage?: string;
|
|
67
|
+
readonly metadata?: JsonObject;
|
|
68
|
+
}
|
|
69
|
+
export interface A2uiV1ActionEnvelope {
|
|
70
|
+
readonly version: typeof A2UI_V1_PROTOCOL_VERSION;
|
|
71
|
+
readonly action: A2uiV1Action;
|
|
72
|
+
}
|
|
73
|
+
export interface A2uiV1ActionEnvelopeInput {
|
|
74
|
+
readonly name: string;
|
|
75
|
+
readonly surfaceId: string;
|
|
76
|
+
readonly sourceComponentId: string;
|
|
77
|
+
readonly context: JsonObject;
|
|
78
|
+
readonly userMessage?: string;
|
|
79
|
+
readonly metadata?: JsonObject;
|
|
80
|
+
/** RFC 3339 timestamp. Defaults to the current time when omitted. */
|
|
81
|
+
readonly timestamp?: string;
|
|
82
|
+
}
|
|
83
|
+
export interface A2uiV1AgentCapabilities {
|
|
84
|
+
readonly "v1.0": {
|
|
85
|
+
readonly supportedCatalogIds: readonly string[];
|
|
86
|
+
readonly acceptsInlineCatalogs: boolean;
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export interface A2uiV1RendererCapabilities {
|
|
90
|
+
readonly "v1.0": {
|
|
91
|
+
readonly supportedCatalogIds: readonly string[];
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export interface A2uiV1RendererCapabilitiesOptions {
|
|
95
|
+
/** Catalogs fully implemented and registered by the host renderer. */
|
|
96
|
+
readonly supportedCatalogIds: readonly string[];
|
|
97
|
+
}
|
|
98
|
+
export type A2uiV1CapabilityNegotiation = {
|
|
99
|
+
readonly kind: "fallback";
|
|
100
|
+
readonly protocolVersion: typeof A2UI_V1_PROTOCOL_VERSION;
|
|
101
|
+
readonly reason: "no-shared-catalog";
|
|
102
|
+
} | {
|
|
103
|
+
readonly kind: "negotiated";
|
|
104
|
+
readonly protocolVersion: typeof A2UI_V1_PROTOCOL_VERSION;
|
|
105
|
+
readonly supportedCatalogIds: readonly string[];
|
|
106
|
+
/** This implementation never enables untrusted inline catalog definitions. */
|
|
107
|
+
readonly inlineCatalogsEnabled: false;
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/v1/types.ts"],"names":[],"mappings":"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"}
|
package/dist/v1/types.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const A2UI_V1_PROTOCOL_VERSION = "v1.0";
|
|
2
|
+
/** Maximum UTF-16 code units accepted in one JSONL resource body. */
|
|
3
|
+
export const A2UI_V1_MAX_SOURCE_LENGTH = 1_048_576;
|
|
4
|
+
/** Maximum number of non-empty JSONL envelopes in one resource batch. */
|
|
5
|
+
export const A2UI_V1_MAX_ENVELOPES = 1_024;
|
|
6
|
+
/** Maximum surfaces retained by one in-memory store. */
|
|
7
|
+
export const A2UI_V1_MAX_SURFACES = 1_024;
|
|
8
|
+
/** Maximum retained component definitions in one surface. */
|
|
9
|
+
export const A2UI_V1_MAX_COMPONENTS = 1_024;
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/v1/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAe,CAAC;AAExD,qEAAqE;AACrE,MAAM,CAAC,MAAM,yBAAyB,GAAG,SAAS,CAAC;AACnD,yEAAyE;AACzE,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAC3C,wDAAwD;AACxD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAC1C,6DAA6D;AAC7D,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { A2uiV1SurfaceState } from "./types.js";
|
|
2
|
+
export declare const A2UI_V1_BASIC_CATALOG_ID: "https://a2ui.org/specification/v1_0/catalogs/basic/catalog.json";
|
|
3
|
+
export declare const A2UI_V1_BASIC_COMPONENT_NAMES: readonly string[];
|
|
4
|
+
export declare const A2UI_V1_BASIC_FUNCTION_NAMES: readonly string[];
|
|
5
|
+
export declare const A2UI_V1_SYSTEM_FUNCTION_NAMES: readonly string[];
|
|
6
|
+
export interface A2uiV1SurfaceValidationPolicy {
|
|
7
|
+
/** Host-bundled basic-catalog components that this surface may instantiate. */
|
|
8
|
+
readonly allowedComponentNames: readonly string[];
|
|
9
|
+
/** Agent event names the host is prepared to route after renderer adaptation. */
|
|
10
|
+
readonly allowedEventNames?: readonly string[];
|
|
11
|
+
/** Locally registered basic-catalog function names. Empty means deny all functions. */
|
|
12
|
+
readonly allowedFunctionNames?: readonly string[];
|
|
13
|
+
}
|
|
14
|
+
export interface A2uiV1BasicCatalogPolicyOptions {
|
|
15
|
+
readonly allowedComponentNames: readonly string[];
|
|
16
|
+
readonly allowedEventNames?: readonly string[];
|
|
17
|
+
readonly allowedFunctionNames?: readonly string[];
|
|
18
|
+
}
|
|
19
|
+
/** Creates an explicit host policy for the pinned basic catalog. */
|
|
20
|
+
export declare function createA2uiV1BasicCatalogPolicy(options: A2uiV1BasicCatalogPolicyOptions): A2uiV1SurfaceValidationPolicy;
|
|
21
|
+
/**
|
|
22
|
+
* Validates a complete surface snapshot before it crosses into a renderer.
|
|
23
|
+
* Store snapshots may remain incomplete while ordered lifecycle messages arrive.
|
|
24
|
+
*/
|
|
25
|
+
export declare function validateA2uiV1SurfaceState(surface: A2uiV1SurfaceState, policy: A2uiV1SurfaceValidationPolicy): A2uiV1SurfaceState;
|
|
26
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/v1/validate.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAmB,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEtE,eAAO,MAAM,wBAAwB,EACnC,iEAA0E,CAAC;AAE7E,eAAO,MAAM,6BAA6B,EAErC,SAAS,MAAM,EAAE,CAAC;AAEvB,eAAO,MAAM,4BAA4B,EAEpC,SAAS,MAAM,EAAE,CAAC;AAEvB,eAAO,MAAM,6BAA6B,EAAgC,SAAS,MAAM,EAAE,CAAC;AAO5F,MAAM,WAAW,6BAA6B;IAC5C,+EAA+E;IAC/E,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,iFAAiF;IACjF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,uFAAuF;IACvF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnD;AAED,oEAAoE;AACpE,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,6BAA6B,CAS/B;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE,6BAA6B,GACpC,kBAAkB,CA2EpB"}
|