@assemblyline-agents/openui 3.0.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.
Files changed (44) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +72 -0
  3. package/dist/CORMORANT-GARAMOND-OFL.txt +93 -0
  4. package/dist/OUTFIT-OFL.txt +93 -0
  5. package/dist/artifact.d.ts +31 -0
  6. package/dist/artifact.d.ts.map +1 -0
  7. package/dist/artifact.js +79 -0
  8. package/dist/artifact.js.map +1 -0
  9. package/dist/config.d.ts +60 -0
  10. package/dist/config.d.ts.map +1 -0
  11. package/dist/config.js +203 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/index.d.ts +10 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +10 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/library.d.ts +9 -0
  18. package/dist/library.d.ts.map +1 -0
  19. package/dist/library.js +109 -0
  20. package/dist/library.js.map +1 -0
  21. package/dist/openui-browser.js +629 -0
  22. package/dist/openui-styles.css +1 -0
  23. package/dist/render.d.ts +3 -0
  24. package/dist/render.d.ts.map +1 -0
  25. package/dist/render.js +229 -0
  26. package/dist/render.js.map +1 -0
  27. package/dist/report-library.d.ts +2 -0
  28. package/dist/report-library.d.ts.map +1 -0
  29. package/dist/report-library.js +224 -0
  30. package/dist/report-library.js.map +1 -0
  31. package/dist/responsive-stack.d.ts +35 -0
  32. package/dist/responsive-stack.d.ts.map +1 -0
  33. package/dist/responsive-stack.js +58 -0
  34. package/dist/responsive-stack.js.map +1 -0
  35. package/dist/standard-pack.d.ts +4 -0
  36. package/dist/standard-pack.d.ts.map +1 -0
  37. package/dist/standard-pack.js +10 -0
  38. package/dist/standard-pack.js.map +1 -0
  39. package/dist/tools.d.ts +33 -0
  40. package/dist/tools.d.ts.map +1 -0
  41. package/dist/tools.js +350 -0
  42. package/dist/tools.js.map +1 -0
  43. package/package.json +60 -0
  44. package/skills/openui-artifacts/SKILL.md +40 -0
@@ -0,0 +1,10 @@
1
+ import { assemblyLineOpenUiLibrary } from "./report-library.js";
2
+ import { renderOpenUiArtifact } from "./render.js";
3
+ export const OPENUI_COMPONENT_NAMES = Object.freeze(Object.keys(assemblyLineOpenUiLibrary.components));
4
+ export const openUiStandardComponentPack = Object.freeze({
5
+ id: "@openuidev/react-ui",
6
+ version: "0.13.6",
7
+ library: assemblyLineOpenUiLibrary,
8
+ render: renderOpenUiArtifact
9
+ });
10
+ //# sourceMappingURL=standard-pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard-pack.js","sourceRoot":"","sources":["../src/standard-pack.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,CAAC;AAEvG,MAAM,CAAC,MAAM,2BAA2B,GAAwB,MAAM,CAAC,MAAM,CAAC;IAC5E,EAAE,EAAE,qBAAqB;IACzB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,yBAAyB;IAClC,MAAM,EAAE,oBAAoB;CAC7B,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { type ToolDefinition } from "@assemblyline-agents/core";
2
+ import { type OpenUiConfig, type OpenUiConfigInput } from "./config.js";
3
+ interface CreateInput {
4
+ title: string;
5
+ document: string;
6
+ }
7
+ interface UpdateInput extends CreateInput {
8
+ artifactId: string;
9
+ revision: string;
10
+ }
11
+ interface PublishInput {
12
+ artifactId: string;
13
+ revision: string;
14
+ }
15
+ interface RevisionOutput {
16
+ artifactId: string;
17
+ revision: string;
18
+ parentRevision?: string;
19
+ title: string;
20
+ status: "draft";
21
+ }
22
+ interface PublishOutput {
23
+ artifactId: string;
24
+ revision: string;
25
+ title: string;
26
+ url: string;
27
+ visibility: "unlisted";
28
+ }
29
+ export declare function defineOpenUiCreateTool(configInput?: OpenUiConfigInput | OpenUiConfig): ToolDefinition<CreateInput, RevisionOutput>;
30
+ export declare function defineOpenUiUpdateTool(configInput?: OpenUiConfigInput | OpenUiConfig): ToolDefinition<UpdateInput, RevisionOutput>;
31
+ export declare function defineOpenUiPublishTool(configInput?: OpenUiConfigInput | OpenUiConfig): ToolDefinition<PublishInput, PublishOutput>;
32
+ export {};
33
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,cAAc,EAEpB,MAAM,2BAA2B,CAAC;AAUnC,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAGrB,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,WAAY,SAAQ,WAAW;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,aAAa;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,UAAU,CAAC;CACxB;AAoCD,wBAAgB,sBAAsB,CACpC,WAAW,GAAE,iBAAiB,GAAG,YAAiB,GACjD,cAAc,CAAC,WAAW,EAAE,cAAc,CAAC,CA6B7C;AAED,wBAAgB,sBAAsB,CACpC,WAAW,GAAE,iBAAiB,GAAG,YAAiB,GACjD,cAAc,CAAC,WAAW,EAAE,cAAc,CAAC,CAmC7C;AAED,wBAAgB,uBAAuB,CACrC,WAAW,GAAE,iBAAiB,GAAG,YAAiB,GACjD,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC,CAqE7C"}
package/dist/tools.js ADDED
@@ -0,0 +1,350 @@
1
+ import { createHash } from "node:crypto";
2
+ import { isRecoverableToolError, RecoverableToolError } from "@assemblyline-agents/core";
3
+ import { artifactPublicationKey, artifactRevisionKey, createArtifactRevision, parseArtifactRevision, validArtifactId, validRevision } from "./artifact.js";
4
+ import { defineOpenUiConfig, hydrateOpenUiConfig, snapshotOpenUiConfig } from "./config.js";
5
+ import { openUiGenerationPrompt, parseOpenUiDocument } from "./library.js";
6
+ const PUBLISH_INPUT_SCHEMA = {
7
+ type: "object",
8
+ properties: {
9
+ artifactId: { type: "string", pattern: "^oui_[a-f0-9]{24}$" },
10
+ revision: { type: "string", pattern: "^[a-f0-9]{64}$" }
11
+ },
12
+ required: ["artifactId", "revision"],
13
+ additionalProperties: false
14
+ };
15
+ const REVISION_OUTPUT_SCHEMA = {
16
+ type: "object",
17
+ properties: {
18
+ artifactId: { type: "string" },
19
+ revision: { type: "string" },
20
+ parentRevision: { type: "string" },
21
+ title: { type: "string" },
22
+ status: { type: "string", enum: ["draft"] }
23
+ },
24
+ required: ["artifactId", "revision", "title", "status"]
25
+ };
26
+ const PUBLISH_OUTPUT_SCHEMA = {
27
+ type: "object",
28
+ properties: {
29
+ artifactId: { type: "string" },
30
+ revision: { type: "string" },
31
+ title: { type: "string" },
32
+ url: { type: "string", format: "uri" },
33
+ visibility: { type: "string", enum: ["unlisted"] }
34
+ },
35
+ required: ["artifactId", "revision", "title", "url", "visibility"]
36
+ };
37
+ export function defineOpenUiCreateTool(configInput = {}) {
38
+ const config = defineOpenUiConfig(configInput);
39
+ return {
40
+ description: "Create an immutable branded artifact revision from configured OpenUI component packs. Raw HTML is not accepted.",
41
+ inputSchema: createInputSchema(config),
42
+ outputSchema: REVISION_OUTPUT_SCHEMA,
43
+ needsApproval: false,
44
+ sideEffect: "idempotent",
45
+ capability: {
46
+ visibility: "always",
47
+ execution: "direct",
48
+ namespace: "openui",
49
+ tags: ["artifacts", "ui"]
50
+ },
51
+ async execute(input, ctx) {
52
+ const title = requiredTitle(input);
53
+ const document = parseToolInputDocument(input, config);
54
+ const record = createArtifactRevision({
55
+ document,
56
+ title,
57
+ config: snapshotOpenUiConfig(config),
58
+ runId: ctx.runId,
59
+ agentRevision: ctx.agentRevision
60
+ });
61
+ await storeRevision(ctx, record);
62
+ await ctx.emit("openui.artifact_created", revisionEvent(record));
63
+ return revisionOutput(record);
64
+ }
65
+ };
66
+ }
67
+ export function defineOpenUiUpdateTool(configInput = {}) {
68
+ const config = defineOpenUiConfig(configInput);
69
+ return {
70
+ description: "Create a new immutable revision of an existing OpenUI artifact. Raw HTML is not accepted.",
71
+ inputSchema: updateInputSchema(config),
72
+ outputSchema: REVISION_OUTPUT_SCHEMA,
73
+ needsApproval: false,
74
+ sideEffect: "idempotent",
75
+ capability: {
76
+ visibility: "always",
77
+ execution: "direct",
78
+ namespace: "openui",
79
+ tags: ["artifacts", "ui"]
80
+ },
81
+ async execute(input, ctx) {
82
+ const artifactId = requiredArtifactId(input.artifactId);
83
+ const parentRevision = requiredRevision(input.revision);
84
+ const parent = await loadRevision(requiredBlob(ctx), artifactId, parentRevision);
85
+ validateStoredRevision(parent, config);
86
+ const title = requiredTitle(input);
87
+ const document = parseToolInputDocument(input, config);
88
+ const record = createArtifactRevision({
89
+ document,
90
+ title,
91
+ config: snapshotOpenUiConfig(config),
92
+ runId: ctx.runId,
93
+ agentRevision: ctx.agentRevision,
94
+ artifactId,
95
+ parentRevision
96
+ });
97
+ await storeRevision(ctx, record);
98
+ await ctx.emit("openui.artifact_updated", revisionEvent(record));
99
+ return revisionOutput(record);
100
+ }
101
+ };
102
+ }
103
+ export function defineOpenUiPublishTool(configInput = {}) {
104
+ const currentConfig = defineOpenUiConfig(configInput);
105
+ return {
106
+ description: "Publish one OpenUI artifact revision to an unlisted, storage-issued HTTPS link.",
107
+ inputSchema: PUBLISH_INPUT_SCHEMA,
108
+ outputSchema: PUBLISH_OUTPUT_SCHEMA,
109
+ needsApproval: false,
110
+ sideEffect: "external",
111
+ capability: {
112
+ visibility: "always",
113
+ execution: "direct",
114
+ namespace: "openui",
115
+ tags: ["artifacts", "ui", "publish"]
116
+ },
117
+ toModelOutput(output) {
118
+ return {
119
+ artifactId: output.artifactId,
120
+ revision: output.revision,
121
+ title: output.title,
122
+ visibility: output.visibility,
123
+ selectedForDelivery: true
124
+ };
125
+ },
126
+ async execute(input, ctx) {
127
+ const artifactId = requiredArtifactId(input.artifactId);
128
+ const revision = requiredRevision(input.revision);
129
+ const blob = requiredBlob(ctx);
130
+ const record = await loadRevision(blob, artifactId, revision);
131
+ const validated = validateStoredRevision(record, currentConfig);
132
+ const html = validated.config.componentPack.render({
133
+ source: validated.document.source,
134
+ title: record.title,
135
+ config: record.config
136
+ });
137
+ if (typeof html !== "string" || html.length === 0 || Buffer.byteLength(html) > 10_000_000) {
138
+ throw new Error("OpenUI component pack renderer returned an invalid or oversized publication.");
139
+ }
140
+ const published = await blob.put(artifactPublicationKey(record), html, { contentType: "text/html; charset=utf-8", visibility: "public" });
141
+ const url = publicHttpsUrl(published.uri);
142
+ await verifyPublishedUrl(url, published.sha256, ctx);
143
+ const output = {
144
+ artifactId,
145
+ revision,
146
+ title: record.title,
147
+ url,
148
+ visibility: "unlisted"
149
+ };
150
+ await ctx.emit("openui.artifact_published", {
151
+ ...output,
152
+ componentPack: { ...record.config.componentPack },
153
+ contentType: "text/html; charset=utf-8",
154
+ sha256: published.sha256,
155
+ sizeBytes: published.size
156
+ });
157
+ await ctx.emit("artifact.link_delivery_selected", {
158
+ kind: "openui",
159
+ artifactId,
160
+ revision,
161
+ title: record.title,
162
+ url,
163
+ visibility: "unlisted"
164
+ });
165
+ return output;
166
+ }
167
+ };
168
+ }
169
+ function createInputSchema(config) {
170
+ return {
171
+ type: "object",
172
+ properties: {
173
+ title: {
174
+ type: "string",
175
+ minLength: 1,
176
+ maxLength: 240,
177
+ description: "The artifact title. Lifecycle metadata is separate from the component library root."
178
+ },
179
+ document: {
180
+ type: "string",
181
+ description: openUiGenerationPrompt(config)
182
+ }
183
+ },
184
+ required: ["title", "document"],
185
+ additionalProperties: false
186
+ };
187
+ }
188
+ function updateInputSchema(config) {
189
+ const create = createInputSchema(config);
190
+ return {
191
+ type: "object",
192
+ properties: {
193
+ artifactId: { type: "string", pattern: "^oui_[a-f0-9]{24}$" },
194
+ revision: {
195
+ type: "string",
196
+ pattern: "^[a-f0-9]{64}$",
197
+ description: "The immutable parent revision to update."
198
+ },
199
+ ...create.properties
200
+ },
201
+ required: ["artifactId", "revision", "title", "document"],
202
+ additionalProperties: false
203
+ };
204
+ }
205
+ function parseToolInputDocument(input, config) {
206
+ try {
207
+ return parseOpenUiDocument(requiredDocument(input), config);
208
+ }
209
+ catch (error) {
210
+ if (isRecoverableToolError(error))
211
+ throw error;
212
+ throw new RecoverableToolError(error instanceof Error ? error.message : String(error));
213
+ }
214
+ }
215
+ async function storeRevision(ctx, record) {
216
+ const blob = requiredBlob(ctx);
217
+ await blob.put(artifactRevisionKey(record.artifactId, record.revision), JSON.stringify(record), { contentType: "application/vnd.assembly-line.openui+json", visibility: "private" });
218
+ }
219
+ async function loadRevision(blob, artifactId, revision) {
220
+ const bytes = await blob.get(artifactRevisionKey(artifactId, revision));
221
+ if (!bytes)
222
+ throw new Error("OpenUI artifact revision " + artifactId + "@" + revision + " was not found.");
223
+ const record = parseArtifactRevision(bytes);
224
+ if (record.artifactId !== artifactId || record.revision !== revision) {
225
+ throw new Error("Stored OpenUI revision identifiers do not match its blob key.");
226
+ }
227
+ return record;
228
+ }
229
+ function validateStoredRevision(record, currentConfig) {
230
+ const config = hydrateOpenUiConfig(record.config, currentConfig.componentPack);
231
+ const forbidden = record.config.allowedComponents.filter((component) => !currentConfig.allowedComponents.includes(component));
232
+ if (forbidden.length > 0) {
233
+ throw new Error("Stored OpenUI artifact uses components disabled by current developer policy: "
234
+ + forbidden.join(", ")
235
+ + ".");
236
+ }
237
+ if (record.config.allowLocalInteractivity && !currentConfig.allowLocalInteractivity) {
238
+ throw new Error("Stored OpenUI artifact uses local interactivity disabled by current developer policy.");
239
+ }
240
+ if (record.source.length > currentConfig.maxDocumentChars) {
241
+ throw new Error("Stored OpenUI artifact exceeds the current document size policy.");
242
+ }
243
+ const document = parseOpenUiDocument(record.source, config);
244
+ const expected = createArtifactRevision({
245
+ document,
246
+ title: record.title,
247
+ config: record.config,
248
+ runId: record.provenance.runId,
249
+ agentRevision: record.provenance.agentRevision,
250
+ artifactId: record.artifactId,
251
+ ...(record.parentRevision ? { parentRevision: record.parentRevision } : {})
252
+ });
253
+ if (expected.revision !== record.revision) {
254
+ throw new Error("Stored OpenUI artifact revision failed its integrity check.");
255
+ }
256
+ return { config, document };
257
+ }
258
+ function requiredBlob(ctx) {
259
+ if (!ctx.blob)
260
+ throw new Error("OpenUI artifact tools require a configured blob adapter.");
261
+ return ctx.blob;
262
+ }
263
+ function requiredTitle(input) {
264
+ if (!input || typeof input.title !== "string")
265
+ throw new Error("OpenUI title must be a string.");
266
+ const title = input.title.trim();
267
+ if (!title)
268
+ throw new Error("OpenUI title cannot be empty.");
269
+ if (title.length > 240)
270
+ throw new Error("OpenUI title exceeds 240 characters.");
271
+ return title;
272
+ }
273
+ function requiredDocument(input) {
274
+ if (!input || typeof input.document !== "string")
275
+ throw new Error("OpenUI document must be a string.");
276
+ return input.document;
277
+ }
278
+ function requiredArtifactId(value) {
279
+ if (!validArtifactId(value))
280
+ throw new Error("OpenUI artifactId is invalid.");
281
+ return value;
282
+ }
283
+ function requiredRevision(value) {
284
+ if (!validRevision(value))
285
+ throw new Error("OpenUI revision is invalid.");
286
+ return value;
287
+ }
288
+ async function verifyPublishedUrl(url, expectedSha256, ctx) {
289
+ const fetchImpl = ctx.channel?.fetch ?? globalThis.fetch;
290
+ let lastError;
291
+ for (let attempt = 0; attempt < 3; attempt += 1) {
292
+ try {
293
+ const response = await fetchImpl(url, {
294
+ method: "GET",
295
+ redirect: "error",
296
+ headers: { "cache-control": "no-cache" },
297
+ signal: AbortSignal.timeout(10_000)
298
+ });
299
+ if (!response.ok)
300
+ throw new Error("HTTP " + response.status);
301
+ const bytes = Buffer.from(await response.arrayBuffer());
302
+ const actualSha256 = createHash("sha256").update(bytes).digest("hex");
303
+ if (actualSha256 !== expectedSha256) {
304
+ throw new Error("served bytes do not match the stored publication");
305
+ }
306
+ return;
307
+ }
308
+ catch (error) {
309
+ lastError = error;
310
+ if (attempt < 2) {
311
+ await new Promise((resolve) => setTimeout(resolve, 250 * (attempt + 1)));
312
+ }
313
+ }
314
+ }
315
+ const detail = lastError instanceof Error ? lastError.message : String(lastError);
316
+ throw new Error("OpenUI publication URL could not be verified: " + detail);
317
+ }
318
+ function publicHttpsUrl(uri) {
319
+ let url;
320
+ try {
321
+ url = new URL(uri);
322
+ }
323
+ catch {
324
+ throw new Error("The blob adapter did not return a valid publication URL.");
325
+ }
326
+ if (url.protocol !== "https:") {
327
+ throw new Error("OpenUI publish requires a blob adapter with an HTTPS public base URL. Configure R2_PUBLIC_BASE_URL or S3_PUBLIC_BASE_URL.");
328
+ }
329
+ return url.toString();
330
+ }
331
+ function revisionOutput(record) {
332
+ return {
333
+ artifactId: record.artifactId,
334
+ revision: record.revision,
335
+ ...(record.parentRevision ? { parentRevision: record.parentRevision } : {}),
336
+ title: record.title,
337
+ status: "draft"
338
+ };
339
+ }
340
+ function revisionEvent(record) {
341
+ return {
342
+ artifactId: record.artifactId,
343
+ revision: record.revision,
344
+ ...(record.parentRevision ? { parentRevision: record.parentRevision } : {}),
345
+ title: record.title,
346
+ brand: record.config.brand.name,
347
+ componentPack: { ...record.config.componentPack }
348
+ };
349
+ }
350
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@assemblyline-agents/openui",
3
+ "version": "3.0.0",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": {
7
+ "types": "./dist/index.d.ts",
8
+ "default": "./dist/index.js"
9
+ }
10
+ },
11
+ "dependencies": {
12
+ "@openuidev/lang-core": "0.2.11",
13
+ "@openuidev/react-lang": "0.2.11",
14
+ "@openuidev/react-ui": "0.13.6",
15
+ "react": "19.2.3",
16
+ "react-dom": "19.2.3",
17
+ "zod": "^4.0.0",
18
+ "@assemblyline-agents/core": "3.0.0"
19
+ },
20
+ "description": "Full OpenUI component runtime and branded artifact lifecycle tools for Assembly Line agents.",
21
+ "files": [
22
+ "dist",
23
+ "skills"
24
+ ],
25
+ "engines": {
26
+ "node": ">=22.19.0"
27
+ },
28
+ "license": "MIT",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/jasonbadeaux/assembly-line.git",
32
+ "directory": "packages/openui"
33
+ },
34
+ "bugs": {
35
+ "url": "https://github.com/jasonbadeaux/assembly-line/issues"
36
+ },
37
+ "homepage": "https://github.com/jasonbadeaux/assembly-line#readme",
38
+ "author": "Assembly Line contributors",
39
+ "keywords": [
40
+ "assembly-line",
41
+ "ai",
42
+ "agents",
43
+ "openui",
44
+ "artifacts",
45
+ "generative-ui",
46
+ "plugin"
47
+ ],
48
+ "publishConfig": {
49
+ "access": "public"
50
+ },
51
+ "devDependencies": {
52
+ "@types/react": "19.2.14",
53
+ "@types/react-dom": "19.2.3",
54
+ "esbuild": "0.25.12"
55
+ },
56
+ "scripts": {
57
+ "build": "tsc -p tsconfig.json && node scripts/build-browser.mjs",
58
+ "check": "tsc -p tsconfig.json --noEmit"
59
+ }
60
+ }
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: openui-artifacts
3
+ description: Build, revise, and publish branded web pages, lightweight local apps, reports, dashboards, forms, calculators, data explorers, and visual analyses with developer-approved OpenUI component packs. Use when a user asks for a web-native or shareable browser artifact.
4
+ allowed-tools: [openui_create, openui_update, openui_publish]
5
+ ---
6
+
7
+ # Build OpenUI Artifacts
8
+
9
+ Use OpenUI for a web page, report, dashboard, form, calculator, visualization, or lightweight interactive app. Use `deliver_artifact` for ordinary files.
10
+
11
+ ## Workflow
12
+
13
+ 1. Read the `openui_create.document` schema. It defines the current root, component signatures, allowlist, bindings, actions, and interactivity policy.
14
+ 2. Set the information hierarchy and interaction model.
15
+ 3. Build one complete OpenUI Lang document from approved components.
16
+ 4. Call `openui_create` with a separate `title` and `document`. Keep the exact `artifactId` and `revision`.
17
+ 5. Call `openui_update` for each change. Pass both identifiers, the title, and the complete replacement document.
18
+ 6. Check component reachability, data shape, labels, units, states, and sources.
19
+ 7. Call `openui_publish` for the chosen revision. Publishing verifies the hosted bytes and selects the canonical link for delivery.
20
+ 8. State that the artifact is ready. Do not type, copy, shorten, rewrite, or guess a URL. The runtime delivers the tool-issued link.
21
+
22
+ Gather external data before composing. Published artifacts cannot use `Query`, `Mutation`, scripts, or browser network access. Use local `State`, bindings, and `Action` only when the live tool schema permits them.
23
+
24
+ ## Compose freely within the pack
25
+
26
+ Use primitives and higher-level components in combinations that fit the task. The component pack controls fonts, spacing, colors, radii, and responsive behavior. Do not simulate styling in content strings or force every artifact into one layout.
27
+
28
+ The official pack uses `Stack` as its root. This small example is illustrative only:
29
+
30
+ ```text
31
+ root = Stack([headline, metric, chart], "column", "l")
32
+ headline = TextContent("Revenue grew 18% with margin expansion.", "large-heavy")
33
+ metric = Card([label, value], "card")
34
+ label = TextContent("Revenue", "small")
35
+ value = TextContent("$42.0M", "large-heavy")
36
+ chart = BarChart(["2025", "2026"], [series], "grouped", "Year", "Revenue ($M)")
37
+ series = Series("Revenue", [35, 42])
38
+ ```
39
+
40
+ Do not assume these components are allowed or that a custom pack uses `Stack`. Never send HTML, CSS, JavaScript, or Markdown fences as the tool document.