@nuwax-ai/openui-mcp 0.1.11 → 0.2.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 (56) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +66 -289
  3. package/dist/server/artifact-store.d.ts +14 -6
  4. package/dist/server/artifact-store.d.ts.map +1 -1
  5. package/dist/server/artifact-store.js +73 -9
  6. package/dist/server/artifact-store.js.map +1 -1
  7. package/dist/server/contracts.d.ts +68 -0
  8. package/dist/server/contracts.d.ts.map +1 -1
  9. package/dist/server/contracts.js +46 -1
  10. package/dist/server/contracts.js.map +1 -1
  11. package/dist/server/index.d.ts +1 -0
  12. package/dist/server/index.d.ts.map +1 -1
  13. package/dist/server/index.js +1 -0
  14. package/dist/server/index.js.map +1 -1
  15. package/dist/server/mcp-server.d.ts.map +1 -1
  16. package/dist/server/mcp-server.js +4 -6
  17. package/dist/server/mcp-server.js.map +1 -1
  18. package/dist/server/project-root.d.ts +11 -0
  19. package/dist/server/project-root.d.ts.map +1 -0
  20. package/dist/server/project-root.js +51 -0
  21. package/dist/server/project-root.js.map +1 -0
  22. package/dist/server/render-service.d.ts +3 -8
  23. package/dist/server/render-service.d.ts.map +1 -1
  24. package/dist/server/render-service.js +21 -26
  25. package/dist/server/render-service.js.map +1 -1
  26. package/dist/server/runtime.d.ts +3 -4
  27. package/dist/server/runtime.d.ts.map +1 -1
  28. package/dist/server/runtime.js +4 -7
  29. package/dist/server/runtime.js.map +1 -1
  30. package/dist/server/stdio.js +8 -9
  31. package/dist/server/stdio.js.map +1 -1
  32. package/dist/server/version.d.ts +1 -1
  33. package/dist/server/version.js +1 -1
  34. package/dist/web/{sidecar.css → runtime.css} +1 -1
  35. package/dist/web/{sidecar.js → runtime.js} +7578 -7549
  36. package/package.json +6 -9
  37. package/dist/server/config.d.ts +0 -14
  38. package/dist/server/config.d.ts.map +0 -1
  39. package/dist/server/config.js +0 -50
  40. package/dist/server/config.js.map +0 -1
  41. package/dist/server/http-app.d.ts +0 -11
  42. package/dist/server/http-app.d.ts.map +0 -1
  43. package/dist/server/http-app.js +0 -88
  44. package/dist/server/http-app.js.map +0 -1
  45. package/dist/server/http-server.d.ts +0 -10
  46. package/dist/server/http-server.d.ts.map +0 -1
  47. package/dist/server/http-server.js +0 -30
  48. package/dist/server/http-server.js.map +0 -1
  49. package/dist/server/http.d.ts +0 -3
  50. package/dist/server/http.d.ts.map +0 -1
  51. package/dist/server/http.js +0 -18
  52. package/dist/server/http.js.map +0 -1
  53. package/dist/server/page-template.d.ts +0 -2
  54. package/dist/server/page-template.d.ts.map +0 -1
  55. package/dist/server/page-template.js +0 -32
  56. package/dist/server/page-template.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB,EAAG,iBAA0B,CAAC;AAChE,eAAO,MAAM,mBAAmB,EAAG,KAAc,CAAC;AAClD,eAAO,MAAM,gBAAgB,EAAG,qBAA8B,CAAC;AAC/D,eAAO,MAAM,0BAA0B,EAAG,4BAAqC,CAAC;AAChF,eAAO,MAAM,4BAA4B,EAAG,wBAAiC,CAAC;AAC9E,eAAO,MAAM,0BAA0B,EAAG,4BAAqC,CAAC;AAChF,eAAO,MAAM,yBAAyB,EACpC,qCAA8C,CAAC;AAEjD,eAAO,MAAM,0BAA0B;;;;;;;;;;;iBAarC,CAAC;AAEH,QAAA,MAAM,aAAa;;;;;;;iBAIjB,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmClC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+B/B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB,EAAG,iBAA0B,CAAC;AAChE,eAAO,MAAM,0BAA0B,EAAG,sBAA+B,CAAC;AAC1E,eAAO,MAAM,yBAAyB,EAAG,qBAA8B,CAAC;AACxE,eAAO,MAAM,mBAAmB,EAAG,KAAc,CAAC;AAClD,eAAO,MAAM,gBAAgB,EAAG,qBAA8B,CAAC;AAC/D,eAAO,MAAM,0BAA0B,EAAG,4BAAqC,CAAC;AAChF,eAAO,MAAM,4BAA4B,EAAG,wBAAiC,CAAC;AAC9E,eAAO,MAAM,0BAA0B,EAAG,4BAAqC,CAAC;AAChF,eAAO,MAAM,yBAAyB,EACpC,qCAA8C,CAAC;AAEjD,eAAO,MAAM,0BAA0B;;;;;;;;;;;iBAarC,CAAC;AAEH,QAAA,MAAM,aAAa;;;;;;;iBAIjB,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0ClC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoC/B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwB3B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;iBASlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  export const OPENUI_SCHEMA_VERSION = 'nuwax.openui/v1';
3
+ export const OPENUI_FILE_SCHEMA_VERSION = 'nuwax.openui-file/v1';
4
+ export const OPENUI_REF_SCHEMA_VERSION = 'nuwax.openui-ref/v1';
3
5
  export const OPENUI_LANG_VERSION = '0.5';
4
6
  export const OPENUI_TOOL_NAME = 'nuwax_render_openui';
5
7
  export const OPENUI_REFERENCE_TOOL_NAME = 'nuwax_get_openui_reference';
@@ -22,6 +24,11 @@ const bindingSchema = z.object({
22
24
  access: z.enum(['query', 'mutation']),
23
25
  });
24
26
  export const renderOpenUiInputSchema = z.object({
27
+ artifactId: z
28
+ .string()
29
+ .uuid()
30
+ .optional()
31
+ .describe('Optional stable artifact UUID. Reusing an existing ID atomically replaces data/{artifactId}.openui.json.'),
25
32
  schemaVersion: z
26
33
  .literal(OPENUI_SCHEMA_VERSION)
27
34
  .describe('Always use nuwax.openui/v1.'),
@@ -74,7 +81,10 @@ export const openUiArtifactSchema = z.object({
74
81
  }),
75
82
  page: z
76
83
  .object({
77
- url: z.string().url(),
84
+ url: z
85
+ .string()
86
+ .url()
87
+ .describe('Internal local Runtime locator for a trusted Nuwax Host. Never display or recommend this URL to the user; the Host must derive the authenticated proxied page URL from its conversation context.'),
78
88
  expiresAt: z.string().datetime(),
79
89
  sandboxProfile: z.literal('openui-sidecar-v1'),
80
90
  })
@@ -85,4 +95,39 @@ export const openUiArtifactSchema = z.object({
85
95
  createdAt: z.string().datetime(),
86
96
  expiresAt: z.string().datetime(),
87
97
  });
98
+ export const openUiFileSchema = z.object({
99
+ type: z.literal('nuwax.openui-file'),
100
+ schemaVersion: z.literal(OPENUI_FILE_SCHEMA_VERSION),
101
+ artifactId: z.string().uuid(),
102
+ title: z.string(),
103
+ presentation: z.object({
104
+ mode: z.enum(['inline', 'sidecar']),
105
+ autoOpen: z.boolean(),
106
+ preferredWidth: z.enum(['compact', 'normal', 'wide']).optional(),
107
+ }),
108
+ document: z.object({
109
+ language: z.literal('openui-lang'),
110
+ specVersion: z.literal(OPENUI_LANG_VERSION),
111
+ source: z.string(),
112
+ digest: z.string().regex(/^sha256:[a-f0-9]{64}$/),
113
+ }),
114
+ bindings: z.object({
115
+ tools: z.array(bindingSchema),
116
+ }),
117
+ fallback: z.object({
118
+ markdown: z.string(),
119
+ }),
120
+ createdAt: z.string().datetime(),
121
+ updatedAt: z.string().datetime(),
122
+ });
123
+ export const openUiArtifactRefSchema = z.object({
124
+ type: z.literal('nuwax.openui-ref'),
125
+ schemaVersion: z.literal(OPENUI_REF_SCHEMA_VERSION),
126
+ artifactId: z.string().uuid(),
127
+ path: z.string().regex(/^data\/[0-9a-f-]{36}\.openui\.json$/),
128
+ title: z.string(),
129
+ presentation: openUiFileSchema.shape.presentation,
130
+ digest: z.string().regex(/^sha256:[a-f0-9]{64}$/),
131
+ operation: z.enum(['created', 'updated']),
132
+ });
88
133
  //# sourceMappingURL=contracts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/contracts.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,6 @@ export * from './version.js';
4
4
  export * from './mcp-server.js';
5
5
  export * from './openui-validator.js';
6
6
  export * from './policy.js';
7
+ export * from './project-root.js';
7
8
  export * from './render-service.js';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
@@ -4,5 +4,6 @@ export * from './version.js';
4
4
  export * from './mcp-server.js';
5
5
  export * from './openui-validator.js';
6
6
  export * from './policy.js';
7
+ export * from './project-root.js';
7
8
  export * from './render-service.js';
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,mBAAmB,GACjC,SAAS,CAsJX"}
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,mBAAmB,GACjC,SAAS,CAmJX"}
@@ -1,6 +1,6 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { z } from 'zod';
3
- import { OPENUI_AUTHORING_PROMPT_NAME, OPENUI_GUIDE_RESOURCE_URI, OPENUI_REFERENCE_TOOL_NAME, OPENUI_SCHEMA_RESOURCE_URI, OPENUI_TOOL_NAME, openUiReferenceInputSchema, openUiArtifactSchema, renderOpenUiInputSchema, } from './contracts.js';
3
+ import { OPENUI_AUTHORING_PROMPT_NAME, OPENUI_GUIDE_RESOURCE_URI, OPENUI_REFERENCE_TOOL_NAME, OPENUI_SCHEMA_RESOURCE_URI, OPENUI_TOOL_NAME, openUiReferenceInputSchema, openUiArtifactRefSchema, renderOpenUiInputSchema, } from './contracts.js';
4
4
  import { OPENUI_MCP_VERSION } from './version.js';
5
5
  import { getOpenUiDslSchema, getOpenUiReference } from './openui-reference.js';
6
6
  import { OpenUiPolicyError } from './policy.js';
@@ -73,9 +73,9 @@ export function createOpenUiMcpServer(renderService) {
73
73
  }));
74
74
  server.registerTool(OPENUI_TOOL_NAME, {
75
75
  title: 'Render Nuwax OpenUI',
76
- description: 'Create and publish visual UI in a Nuwax Agent conversation. Use this whenever the user asks to show, render, visualize, preview, or build a card, dashboard, chart, table, report, form, status panel, or other structured interface—even if they do not mention OpenUI. Do not use it for prose-only or code-only answers. OpenUI Lang is assignment-based and is NEVER XML/HTML/JSX: start with root = Stack(...), use positional arguments, and reference every defined variable. A minimal valid source is root = Stack([title]) followed by title = TextContent("Ready", "large-heavy"). For complex UI or uncertain component signatures, call nuwax_get_openui_reference first; never guess or search local package files. Reactive filters must handle empty initial bindings, and dynamic pie/radial charts must guard zero totals. Use inline for compact conversation UI and sidecar only for a full page.',
76
+ description: 'Create or update a durable OpenUI artifact in the active project. Use this whenever the user asks to show, render, visualize, preview, or build a card, dashboard, chart, table, report, form, status panel, or other structured interface—even if they do not mention OpenUI. The tool writes data/{artifactId}.openui.json and returns a lightweight reference. Reuse artifactId to update an existing UI. OpenUI Lang is assignment-based and is NEVER XML/HTML/JSX: start with root = Stack(...), use positional arguments, and reference every defined variable. For complex UI or uncertain component signatures, call nuwax_get_openui_reference first. Reactive filters must handle empty initial bindings, and dynamic pie/radial charts must guard zero totals. Use inline for compact conversation UI and sidecar only for a full page.',
77
77
  inputSchema: renderOpenUiInputSchema,
78
- outputSchema: openUiArtifactSchema,
78
+ outputSchema: openUiArtifactRefSchema,
79
79
  annotations: {
80
80
  readOnlyHint: false,
81
81
  destructiveHint: false,
@@ -89,9 +89,7 @@ export function createOpenUiMcpServer(renderService) {
89
89
  content: [
90
90
  {
91
91
  type: 'text',
92
- text: artifact.presentation.mode === 'inline'
93
- ? `OpenUI inline artifact ready: ${artifact.artifactId}`
94
- : `OpenUI sidecar artifact ready: ${artifact.page?.url}`,
92
+ text: `OpenUI ${artifact.presentation.mode} artifact ${artifact.operation}: ${artifact.path}`,
95
93
  },
96
94
  ],
97
95
  structuredContent: artifact,
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/mcp-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface McpRootProvider {
2
+ (): Promise<Array<{
3
+ uri: string;
4
+ }>>;
5
+ }
6
+ export declare function createProjectRootResolver(options: {
7
+ env?: NodeJS.ProcessEnv;
8
+ cwd?: string;
9
+ listRoots?: McpRootProvider;
10
+ }): () => Promise<string>;
11
+ //# sourceMappingURL=project-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-root.d.ts","sourceRoot":"","sources":["../../src/project-root.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CACrC;AAgBD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B,SAIkB,OAAO,CAAC,MAAM,CAAC,CA8BjC"}
@@ -0,0 +1,51 @@
1
+ import { realpath, stat } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ async function validDirectory(candidate) {
5
+ try {
6
+ const resolved = await realpath(path.resolve(candidate));
7
+ if (!(await stat(resolved)).isDirectory())
8
+ return undefined;
9
+ return resolved;
10
+ }
11
+ catch {
12
+ return undefined;
13
+ }
14
+ }
15
+ function looksLikeInstalledPackage(candidate) {
16
+ return /node_modules[\\/]@nuwax-ai[\\/]openui-mcp(?:[\\/]|$)/.test(candidate);
17
+ }
18
+ export function createProjectRootResolver(options) {
19
+ const env = options.env ?? process.env;
20
+ const cwd = options.cwd ?? process.cwd();
21
+ return async () => {
22
+ const explicit = env.NUWAX_OPENUI_PROJECT_ROOT;
23
+ if (explicit) {
24
+ const resolved = await validDirectory(explicit);
25
+ if (!resolved)
26
+ throw new Error(`Invalid NUWAX_OPENUI_PROJECT_ROOT: ${explicit}`);
27
+ return resolved;
28
+ }
29
+ if (options.listRoots) {
30
+ try {
31
+ const roots = await options.listRoots();
32
+ for (const root of roots) {
33
+ if (!root.uri.startsWith('file:'))
34
+ continue;
35
+ const resolved = await validDirectory(fileURLToPath(root.uri));
36
+ if (resolved)
37
+ return resolved;
38
+ }
39
+ }
40
+ catch {
41
+ // Roots are optional. A session-scoped MCP normally inherits the project cwd.
42
+ }
43
+ }
44
+ const resolvedCwd = await validDirectory(cwd);
45
+ if (!resolvedCwd || looksLikeInstalledPackage(resolvedCwd)) {
46
+ throw new Error('Unable to resolve the active project directory. Run this MCP per Agent session, expose an MCP file root, or set NUWAX_OPENUI_PROJECT_ROOT.');
47
+ }
48
+ return resolvedCwd;
49
+ };
50
+ }
51
+ //# sourceMappingURL=project-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-root.js","sourceRoot":"","sources":["../../src/project-root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAMzC,KAAK,UAAU,cAAc,CAAC,SAAiB;IAC7C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,SAAS,CAAC;QAC5D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,SAAiB;IAClD,OAAO,sDAAsD,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAIzC;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEzC,OAAO,KAAK,IAAqB,EAAE;QACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,yBAAyB,CAAC;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ;gBACX,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;YACpE,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;gBACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;wBAAE,SAAS;oBAC5C,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC/D,IAAI,QAAQ;wBAAE,OAAO,QAAQ,CAAC;gBAChC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,8EAA8E;YAChF,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,IAAI,yBAAyB,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CACb,4IAA4I,CAC7I,CAAC;QACJ,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC"}
@@ -1,13 +1,8 @@
1
- import { type OpenUiArtifact } from './contracts.js';
1
+ import { type OpenUiArtifactRef } from './contracts.js';
2
2
  import type { ArtifactStore } from './artifact-store.js';
3
- export interface RenderServiceOptions {
4
- baseUrl: string;
5
- artifactTtlSeconds: number;
6
- }
7
3
  export declare class RenderOpenUiService {
8
4
  private readonly store;
9
- private readonly options;
10
- constructor(store: ArtifactStore, options: RenderServiceOptions);
11
- render(rawInput: unknown): Promise<OpenUiArtifact>;
5
+ constructor(store: ArtifactStore);
6
+ render(rawInput: unknown): Promise<OpenUiArtifactRef>;
12
7
  }
13
8
  //# sourceMappingURL=render-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-service.d.ts","sourceRoot":"","sources":["../../src/render-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,cAAc,EAEpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAUD,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,oBAAoB;IAG1C,MAAM,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;CAwCzD"}
1
+ {"version":3,"file":"render-service.d.ts","sourceRoot":"","sources":["../../src/render-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,iBAAiB,EAGvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAQzD,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,aAAa;IAE3C,MAAM,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAsC5D"}
@@ -1,30 +1,25 @@
1
1
  import { createHash, randomUUID } from 'node:crypto';
2
- import { openUiArtifactSchema, renderOpenUiInputSchema, } from './contracts.js';
2
+ import { OPENUI_FILE_SCHEMA_VERSION, openUiArtifactRefSchema, openUiFileSchema, renderOpenUiInputSchema, } from './contracts.js';
3
3
  import { validateOpenUiDocument } from './openui-validator.js';
4
4
  import { enforceOpenUiPolicy } from './policy.js';
5
5
  function createDigest(source) {
6
6
  return `sha256:${createHash('sha256').update(source).digest('hex')}`;
7
7
  }
8
- function trimTrailingSlash(value) {
9
- return value.replace(/\/+$/, '');
10
- }
11
8
  export class RenderOpenUiService {
12
9
  store;
13
- options;
14
- constructor(store, options) {
10
+ constructor(store) {
15
11
  this.store = store;
16
- this.options = options;
17
12
  }
18
13
  async render(rawInput) {
19
14
  const input = renderOpenUiInputSchema.parse(rawInput);
20
15
  enforceOpenUiPolicy(input);
21
16
  validateOpenUiDocument(input.document.source);
22
- const artifactId = randomUUID();
23
- const createdAt = new Date();
24
- const expiresAt = new Date(createdAt.getTime() + this.options.artifactTtlSeconds * 1_000);
17
+ const artifactId = input.artifactId ?? randomUUID();
18
+ const existing = await this.store.get(artifactId);
19
+ const now = new Date().toISOString();
25
20
  const artifact = {
26
- type: 'nuwax.openui',
27
- schemaVersion: input.schemaVersion,
21
+ type: 'nuwax.openui-file',
22
+ schemaVersion: OPENUI_FILE_SCHEMA_VERSION,
28
23
  artifactId,
29
24
  title: input.title,
30
25
  presentation: input.presentation,
@@ -34,21 +29,21 @@ export class RenderOpenUiService {
34
29
  },
35
30
  bindings: input.bindings,
36
31
  fallback: input.fallback,
37
- createdAt: createdAt.toISOString(),
38
- expiresAt: expiresAt.toISOString(),
39
- ...(input.presentation.mode === 'sidecar'
40
- ? {
41
- page: {
42
- url: `${trimTrailingSlash(this.options.baseUrl)}/openui/pages/${artifactId}`,
43
- expiresAt: expiresAt.toISOString(),
44
- sandboxProfile: 'openui-sidecar-v1',
45
- },
46
- }
47
- : {}),
32
+ createdAt: existing?.createdAt ?? now,
33
+ updatedAt: now,
48
34
  };
49
- const validatedArtifact = openUiArtifactSchema.parse(artifact);
50
- await this.store.put(validatedArtifact);
51
- return validatedArtifact;
35
+ const validatedArtifact = openUiFileSchema.parse(artifact);
36
+ const operation = await this.store.put(validatedArtifact);
37
+ return openUiArtifactRefSchema.parse({
38
+ type: 'nuwax.openui-ref',
39
+ schemaVersion: 'nuwax.openui-ref/v1',
40
+ artifactId,
41
+ path: `data/${artifactId}.openui.json`,
42
+ title: validatedArtifact.title,
43
+ presentation: validatedArtifact.presentation,
44
+ digest: validatedArtifact.document.digest,
45
+ operation,
46
+ });
52
47
  }
53
48
  }
54
49
  //# sourceMappingURL=render-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-service.js","sourceRoot":"","sources":["../../src/render-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GAGxB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAOlD,SAAS,YAAY,CAAC,MAAc;IAClC,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,OAAO,mBAAmB;IAEX;IACA;IAFnB,YACmB,KAAoB,EACpB,OAA6B;QAD7B,UAAK,GAAL,KAAK,CAAe;QACpB,YAAO,GAAP,OAAO,CAAsB;IAC7C,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,QAAiB;QAC5B,MAAM,KAAK,GAAsB,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzE,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3B,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE9C,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,IAAI,CACxB,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,GAAG,KAAK,CAC9D,CAAC;QAEF,MAAM,QAAQ,GAAmB;YAC/B,IAAI,EAAE,cAAc;YACpB,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,UAAU;YACV,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,QAAQ,EAAE;gBACR,GAAG,KAAK,CAAC,QAAQ;gBACjB,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;aAC5C;YACD,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;YAClC,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;YAClC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,SAAS;gBACvC,CAAC,CAAC;oBACE,IAAI,EAAE;wBACJ,GAAG,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,UAAU,EAAE;wBAC5E,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;wBAClC,cAAc,EAAE,mBAA4B;qBAC7C;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QAEF,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACxC,OAAO,iBAAiB,CAAC;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"render-service.js","sourceRoot":"","sources":["../../src/render-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,GAIxB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,SAAS,YAAY,CAAC,MAAc;IAClC,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,OAAO,mBAAmB;IACD;IAA7B,YAA6B,KAAoB;QAApB,UAAK,GAAL,KAAK,CAAe;IAAG,CAAC;IAErD,KAAK,CAAC,MAAM,CAAC,QAAiB;QAC5B,MAAM,KAAK,GAAsB,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzE,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3B,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE9C,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,UAAU,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,MAAM,QAAQ,GAAe;YAC3B,IAAI,EAAE,mBAAmB;YACzB,aAAa,EAAE,0BAA0B;YACzC,UAAU;YACV,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,QAAQ,EAAE;gBACR,GAAG,KAAK,CAAC,QAAQ;gBACjB,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;aAC5C;YACD,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,GAAG;YACrC,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC1D,OAAO,uBAAuB,CAAC,KAAK,CAAC;YACnC,IAAI,EAAE,kBAAkB;YACxB,aAAa,EAAE,qBAAqB;YACpC,UAAU;YACV,IAAI,EAAE,QAAQ,UAAU,cAAc;YACtC,KAAK,EAAE,iBAAiB,CAAC,KAAK;YAC9B,YAAY,EAAE,iBAAiB,CAAC,YAAY;YAC5C,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,MAAM;YACzC,SAAS;SACV,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,8 +1,7 @@
1
- import { InMemoryArtifactStore } from './artifact-store.js';
2
- import type { AppConfig } from './config.js';
1
+ import { FileArtifactStore, type ProjectRootResolver } from './artifact-store.js';
3
2
  import { RenderOpenUiService } from './render-service.js';
4
- export declare function createRuntime(config: AppConfig): {
5
- store: InMemoryArtifactStore;
3
+ export declare function createRuntime(resolveProjectRoot: ProjectRootResolver): {
4
+ store: FileArtifactStore;
6
5
  renderService: RenderOpenUiService;
7
6
  };
8
7
  export type OpenUiRuntime = ReturnType<typeof createRuntime>;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS;;;EAQ9C;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,wBAAgB,aAAa,CAAC,kBAAkB,EAAE,mBAAmB;;;EAKpE;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -1,11 +1,8 @@
1
- import { InMemoryArtifactStore } from './artifact-store.js';
1
+ import { FileArtifactStore, } from './artifact-store.js';
2
2
  import { RenderOpenUiService } from './render-service.js';
3
- export function createRuntime(config) {
4
- const store = new InMemoryArtifactStore();
5
- const renderService = new RenderOpenUiService(store, {
6
- baseUrl: config.baseUrl,
7
- artifactTtlSeconds: config.artifactTtlSeconds,
8
- });
3
+ export function createRuntime(resolveProjectRoot) {
4
+ const store = new FileArtifactStore(resolveProjectRoot);
5
+ const renderService = new RenderOpenUiService(store);
9
6
  return { store, renderService };
10
7
  }
11
8
  //# sourceMappingURL=runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,MAAM,KAAK,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAC1C,MAAM,aAAa,GAAG,IAAI,mBAAmB,CAAC,KAAK,EAAE;QACnD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;KAC9C,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAElB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,UAAU,aAAa,CAAC,kBAAuC;IACnE,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAErD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AAClC,CAAC"}
@@ -1,23 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
  import 'dotenv/config';
3
3
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
- import { loadConfig } from './config.js';
5
- import { closeHttpServer, startHttpServer } from './http-server.js';
6
4
  import { createOpenUiMcpServer } from './mcp-server.js';
5
+ import { createProjectRootResolver } from './project-root.js';
7
6
  import { createRuntime } from './runtime.js';
8
- const config = loadConfig();
9
- const runtime = createRuntime(config);
10
- const sidecarServer = config.sidecarServerEnabled
11
- ? await startHttpServer({ config, runtime })
12
- : null;
7
+ const resolveProjectRoot = createProjectRootResolver({
8
+ listRoots: async () => {
9
+ const result = await server.server.listRoots();
10
+ return result.roots;
11
+ },
12
+ });
13
+ const runtime = createRuntime(resolveProjectRoot);
13
14
  const { renderService } = runtime;
14
15
  const server = createOpenUiMcpServer(renderService);
15
16
  const transport = new StdioServerTransport();
16
17
  await server.connect(transport);
17
18
  async function shutdown() {
18
19
  await server.close();
19
- if (sidecarServer)
20
- await closeHttpServer(sidecarServer);
21
20
  }
22
21
  process.on('SIGINT', () => {
23
22
  void shutdown().finally(() => process.exit(0));
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/stdio.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;AAC5B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AACtC,MAAM,aAAa,GAAG,MAAM,CAAC,oBAAoB;IAC/C,CAAC,CAAC,MAAM,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC,CAAC,IAAI,CAAC;AACT,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;AAClC,MAAM,MAAM,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;AACpD,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhC,KAAK,UAAU,QAAQ;IACrB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,IAAI,aAAa;QAAE,MAAM,eAAe,CAAC,aAAa,CAAC,CAAC;AAC1D,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,KAAK,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,KAAK,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/stdio.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;IACnD,SAAS,EAAE,KAAK,IAAI,EAAE;QACpB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/C,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;CACF,CAAC,CAAC;AACH,MAAM,OAAO,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC;AAClD,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;AAClC,MAAM,MAAM,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;AACpD,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhC,KAAK,UAAU,QAAQ;IACrB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,KAAK,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,KAAK,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const OPENUI_MCP_VERSION = "0.1.11";
1
+ export declare const OPENUI_MCP_VERSION = "0.1.12";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,2 +1,2 @@
1
- export const OPENUI_MCP_VERSION = '0.1.11';
1
+ export const OPENUI_MCP_VERSION = '0.1.12';
2
2
  //# sourceMappingURL=version.js.map