@golemui/gui-mcp 1.5.0-rc.0 → 1.5.0-rc.2

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/CHANGELOG.md CHANGED
@@ -1,3 +1,29 @@
1
+ ## 1.5.0-rc.1 (2026-09-07)
2
+
3
+ ### 🚀 Features
4
+
5
+ - **gui-components:** surface upload errors via validation injection and icon retry button ([#357](https://github.com/golemui/golemui/pull/357))
6
+
7
+ ### 🩹 Fixes
8
+
9
+ - **gui-components:** add interrupted message and reconcile file upload queue ([#359](https://github.com/golemui/golemui/pull/359))
10
+
11
+ ### ❤️ Thank You
12
+
13
+ - Raúl Jiménez @Elecash
14
+
15
+ ## 1.5.0-rc.0 (2026-09-04)
16
+
17
+ ### 🚀 Features
18
+
19
+ - **lit:** shim querySelector and export safeDefine for SSR ([#351](https://github.com/golemui/golemui/pull/351))
20
+ - **vue:** nuxt support ([#335](https://github.com/golemui/golemui/pull/335))
21
+ - **gui-components:** add file upload widgets ([#332](https://github.com/golemui/golemui/pull/332))
22
+
23
+ ### ❤️ Thank You
24
+
25
+ - Raúl Jiménez @Elecash
26
+
1
27
  ## 1.4.0 (2026-08-26)
2
28
 
3
29
  ### 🚀 Features
package/cli.js CHANGED
@@ -5,8 +5,8 @@ import { fileURLToPath } from "node:url";
5
5
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
6
6
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
7
7
  import { ListToolsRequestSchema, CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js";
8
- import { d as checkDxCode, r as resolveDxFramework, f as listDxFactoriesCatalog, b as DX_LIST_FACTORIES_TOOL, g as getDxSpec, a as DX_GET_SPEC_TOOL, D as DX_CHECK_CODE_TOOL } from "./list-dx-factories-q0Z0pNnF.js";
9
- import { v as validateFormDefinition, c as JSON_VALIDATE_FORM_DEFINITION_TOOL, g as generateFromJsonSchema, a as JSON_GENERATE_FROM_SCHEMA_TOOL, d as generateFromOpenapi, J as JSON_GENERATE_FROM_OPENAPI_TOOL, f as getWidgetSpec, b as JSON_GET_WIDGET_SPEC_TOOL, e as getConcept, G as GET_CONCEPT_TOOL } from "./get-concept-BWtZV7zN.js";
8
+ import { d as checkDxCode, r as resolveDxFramework, f as listDxFactoriesCatalog, b as DX_LIST_FACTORIES_TOOL, g as getDxSpec, a as DX_GET_SPEC_TOOL, D as DX_CHECK_CODE_TOOL } from "./list-dx-factories-hQNWmAmY.js";
9
+ import { v as validateFormDefinition, c as JSON_VALIDATE_FORM_DEFINITION_TOOL, g as generateFromJsonSchema, a as JSON_GENERATE_FROM_SCHEMA_TOOL, d as generateFromOpenapi, J as JSON_GENERATE_FROM_OPENAPI_TOOL, f as getWidgetSpec, b as JSON_GET_WIDGET_SPEC_TOOL, e as getConcept, G as GET_CONCEPT_TOOL } from "./get-concept-CsLx7Y5b.js";
10
10
  const USAGE = `Usage: golemui-mcp [command]
11
11
 
12
12
  Validate GolemUI forms from the command line (no MCP client needed).
@@ -502,9 +502,9 @@ const $schema$w = "https://json-schema.org/draft/2020-12/schema";
502
502
  const $id$w = "https://golemui.com/schemas/gui/components/fileupload.schema.json";
503
503
  const title$w = "File Upload Widget";
504
504
  const type$w = "object";
505
- const $defs$w = { "disabledDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "readonlyDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "labelDef": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "fileItem": { "type": "object", "description": 'One uploaded file as stored in the form value. `data` is whatever the host\'s `uploadService.upload` resolved with, verbatim. Preloaded values should carry `status: "uploaded"`.', "properties": { "id": { "type": "string", "description": "Synthetic id, stable for the life of the item" }, "name": { "type": "string" }, "size": { "type": "number", "description": "Size in bytes" }, "type": { "type": "string", "description": "MIME type" }, "status": { "enum": ["uploading", "uploaded", "error"] }, "error": { "type": "string", "description": "Human-readable reason when `status` is `error`" }, "data": { "description": "The server response, verbatim" } }, "required": ["id", "name", "size", "type", "status"], "additionalProperties": false }, "hintProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "iconProp": { "type": "string" }, "acceptProp": { "type": "array", "description": 'Accepted file types, e.g. `["image/*", ".pdf"]`. Files that do not match are refused before uploading.', "items": { "type": "string" } }, "maxSizeProp": { "type": "number", "description": "Maximum size per file, in bytes. Larger files are refused before uploading." }, "buttonLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removeAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "cancelAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "retryLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removeIconProp": { "type": "string" }, "maxSizeMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "acceptMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "missingServiceMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "uploadedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "failedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" } };
505
+ const $defs$w = { "disabledDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "readonlyDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "labelDef": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "fileItem": { "type": "object", "description": 'One uploaded file as stored in the form value. `data` is whatever the host\'s `uploadService.upload` resolved with, verbatim. Preloaded values should carry `status: "uploaded"`.', "properties": { "id": { "type": "string", "description": "Synthetic id, stable for the life of the item" }, "name": { "type": "string" }, "size": { "type": "number", "description": "Size in bytes" }, "type": { "type": "string", "description": "MIME type" }, "status": { "enum": ["uploading", "uploaded", "error"] }, "error": { "type": "string", "description": "Human-readable reason when `status` is `error`" }, "data": { "description": "The server response, verbatim" } }, "required": ["id", "name", "size", "type", "status"], "additionalProperties": false }, "hintProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "iconProp": { "type": "string" }, "acceptProp": { "type": "array", "description": 'Accepted file types, e.g. `["image/*", ".pdf"]`. Files that do not match are refused before uploading.', "items": { "type": "string" } }, "maxSizeProp": { "type": "number", "description": "Maximum size per file, in bytes. Larger files are refused before uploading." }, "buttonLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removeAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "cancelAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "retryAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removeIconProp": { "type": "string" }, "retryIconProp": { "type": "string" }, "maxSizeMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "acceptMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "interruptedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "missingServiceMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "uploadedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "failedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" } };
506
506
  const allOf$w = [{ "$ref": "../core/common.schema.json#/$defs/baseWidget" }];
507
- const properties$v = { "kind": { "const": "input" }, "type": { "const": "fileUpload" }, "path": { "$ref": "../core/common.schema.json#/$defs/dotPath" }, "label": { "$ref": "#/$defs/labelDef" }, "disabled": { "$ref": "#/$defs/disabledDef" }, "readonly": { "$ref": "#/$defs/readonlyDef" }, "on": { "$ref": "../core/common.schema.json#/$defs/on" }, "validator": { "$ref": "../validators.schema.json#/$defs/validator" }, "defaultValue": { "oneOf": [{ "$ref": "#/$defs/fileItem" }, { "type": "null" }] }, "props": { "type": "object", "properties": { "hint": { "$ref": "#/$defs/hintProp" }, "icon": { "$ref": "#/$defs/iconProp" }, "accept": { "$ref": "#/$defs/acceptProp" }, "maxSize": { "$ref": "#/$defs/maxSizeProp" }, "buttonLabel": { "$ref": "#/$defs/buttonLabelProp" }, "removeAriaLabel": { "$ref": "#/$defs/removeAriaLabelProp" }, "cancelAriaLabel": { "$ref": "#/$defs/cancelAriaLabelProp" }, "retryLabel": { "$ref": "#/$defs/retryLabelProp" }, "removeIcon": { "$ref": "#/$defs/removeIconProp" }, "maxSizeMessage": { "$ref": "#/$defs/maxSizeMessageProp" }, "acceptMessage": { "$ref": "#/$defs/acceptMessageProp" }, "missingServiceMessage": { "$ref": "#/$defs/missingServiceMessageProp" }, "uploadedMessage": { "$ref": "#/$defs/uploadedMessageProp" }, "removedMessage": { "$ref": "#/$defs/removedMessageProp" }, "failedMessage": { "$ref": "#/$defs/failedMessageProp" } }, "patternProperties": { "^hint\\.[^.]+$": { "$ref": "#/$defs/hintProp" }, "^icon\\.[^.]+$": { "$ref": "#/$defs/iconProp" }, "^accept\\.[^.]+$": { "$ref": "#/$defs/acceptProp" }, "^maxSize\\.[^.]+$": { "$ref": "#/$defs/maxSizeProp" }, "^buttonLabel\\.[^.]+$": { "$ref": "#/$defs/buttonLabelProp" }, "^removeAriaLabel\\.[^.]+$": { "$ref": "#/$defs/removeAriaLabelProp" }, "^cancelAriaLabel\\.[^.]+$": { "$ref": "#/$defs/cancelAriaLabelProp" }, "^retryLabel\\.[^.]+$": { "$ref": "#/$defs/retryLabelProp" }, "^removeIcon\\.[^.]+$": { "$ref": "#/$defs/removeIconProp" }, "^maxSizeMessage\\.[^.]+$": { "$ref": "#/$defs/maxSizeMessageProp" }, "^acceptMessage\\.[^.]+$": { "$ref": "#/$defs/acceptMessageProp" }, "^missingServiceMessage\\.[^.]+$": { "$ref": "#/$defs/missingServiceMessageProp" }, "^uploadedMessage\\.[^.]+$": { "$ref": "#/$defs/uploadedMessageProp" }, "^removedMessage\\.[^.]+$": { "$ref": "#/$defs/removedMessageProp" }, "^failedMessage\\.[^.]+$": { "$ref": "#/$defs/failedMessageProp" } }, "additionalProperties": false } };
507
+ const properties$v = { "kind": { "const": "input" }, "type": { "const": "fileUpload" }, "path": { "$ref": "../core/common.schema.json#/$defs/dotPath" }, "label": { "$ref": "#/$defs/labelDef" }, "disabled": { "$ref": "#/$defs/disabledDef" }, "readonly": { "$ref": "#/$defs/readonlyDef" }, "on": { "$ref": "../core/common.schema.json#/$defs/on" }, "validator": { "$ref": "../validators.schema.json#/$defs/validator" }, "defaultValue": { "oneOf": [{ "$ref": "#/$defs/fileItem" }, { "type": "null" }] }, "props": { "type": "object", "properties": { "hint": { "$ref": "#/$defs/hintProp" }, "icon": { "$ref": "#/$defs/iconProp" }, "accept": { "$ref": "#/$defs/acceptProp" }, "maxSize": { "$ref": "#/$defs/maxSizeProp" }, "buttonLabel": { "$ref": "#/$defs/buttonLabelProp" }, "removeAriaLabel": { "$ref": "#/$defs/removeAriaLabelProp" }, "cancelAriaLabel": { "$ref": "#/$defs/cancelAriaLabelProp" }, "retryAriaLabel": { "$ref": "#/$defs/retryAriaLabelProp" }, "removeIcon": { "$ref": "#/$defs/removeIconProp" }, "retryIcon": { "$ref": "#/$defs/retryIconProp" }, "maxSizeMessage": { "$ref": "#/$defs/maxSizeMessageProp" }, "acceptMessage": { "$ref": "#/$defs/acceptMessageProp" }, "interruptedMessage": { "$ref": "#/$defs/interruptedMessageProp" }, "missingServiceMessage": { "$ref": "#/$defs/missingServiceMessageProp" }, "uploadedMessage": { "$ref": "#/$defs/uploadedMessageProp" }, "removedMessage": { "$ref": "#/$defs/removedMessageProp" }, "failedMessage": { "$ref": "#/$defs/failedMessageProp" } }, "patternProperties": { "^hint\\.[^.]+$": { "$ref": "#/$defs/hintProp" }, "^icon\\.[^.]+$": { "$ref": "#/$defs/iconProp" }, "^accept\\.[^.]+$": { "$ref": "#/$defs/acceptProp" }, "^maxSize\\.[^.]+$": { "$ref": "#/$defs/maxSizeProp" }, "^buttonLabel\\.[^.]+$": { "$ref": "#/$defs/buttonLabelProp" }, "^removeAriaLabel\\.[^.]+$": { "$ref": "#/$defs/removeAriaLabelProp" }, "^cancelAriaLabel\\.[^.]+$": { "$ref": "#/$defs/cancelAriaLabelProp" }, "^retryAriaLabel\\.[^.]+$": { "$ref": "#/$defs/retryAriaLabelProp" }, "^removeIcon\\.[^.]+$": { "$ref": "#/$defs/removeIconProp" }, "^retryIcon\\.[^.]+$": { "$ref": "#/$defs/retryIconProp" }, "^maxSizeMessage\\.[^.]+$": { "$ref": "#/$defs/maxSizeMessageProp" }, "^acceptMessage\\.[^.]+$": { "$ref": "#/$defs/acceptMessageProp" }, "^interruptedMessage\\.[^.]+$": { "$ref": "#/$defs/interruptedMessageProp" }, "^missingServiceMessage\\.[^.]+$": { "$ref": "#/$defs/missingServiceMessageProp" }, "^uploadedMessage\\.[^.]+$": { "$ref": "#/$defs/uploadedMessageProp" }, "^removedMessage\\.[^.]+$": { "$ref": "#/$defs/removedMessageProp" }, "^failedMessage\\.[^.]+$": { "$ref": "#/$defs/failedMessageProp" } }, "additionalProperties": false } };
508
508
  const patternProperties$p = { "^disabled\\.[^.]+$": { "$ref": "#/$defs/disabledDef" }, "^readonly\\.[^.]+$": { "$ref": "#/$defs/readonlyDef" }, "^label\\.[^.]+$": { "$ref": "#/$defs/labelDef" }, "^validator\\.[^.]+$": { "$ref": "../validators.schema.json#/$defs/validator" } };
509
509
  const required$v = ["kind", "type", "path"];
510
510
  const unevaluatedProperties$w = false;
@@ -590,9 +590,9 @@ const $schema$s = "https://json-schema.org/draft/2020-12/schema";
590
590
  const $id$s = "https://golemui.com/schemas/gui/components/multifileupload.schema.json";
591
591
  const title$s = "Multi File Upload Widget";
592
592
  const type$s = "object";
593
- const $defs$s = { "disabledDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "readonlyDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "labelDef": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "fileItem": { "type": "object", "description": 'One uploaded file as stored in the form value. `data` is whatever the host\'s `uploadService.upload` resolved with, verbatim. Preloaded values should carry `status: "uploaded"`.', "properties": { "id": { "type": "string", "description": "Synthetic id, stable for the life of the item" }, "name": { "type": "string" }, "size": { "type": "number", "description": "Size in bytes" }, "type": { "type": "string", "description": "MIME type" }, "status": { "enum": ["uploading", "uploaded", "error"] }, "error": { "type": "string", "description": "Human-readable reason when `status` is `error`" }, "data": { "description": "The server response, verbatim" } }, "required": ["id", "name", "size", "type", "status"], "additionalProperties": false }, "hintProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "iconProp": { "type": "string" }, "acceptProp": { "type": "array", "description": 'Accepted file types, e.g. `["image/*", ".pdf"]`. Files that do not match are refused before uploading.', "items": { "type": "string" } }, "maxSizeProp": { "type": "number", "description": "Maximum size per file, in bytes. Larger files are refused before uploading." }, "buttonLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removeAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "cancelAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "retryLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removeIconProp": { "type": "string" }, "maxSizeMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "acceptMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "missingServiceMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "uploadedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "failedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" } };
593
+ const $defs$s = { "disabledDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "readonlyDef": { "$ref": "../core/common.schema.json#/$defs/boolOrWhen" }, "labelDef": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "fileItem": { "type": "object", "description": 'One uploaded file as stored in the form value. `data` is whatever the host\'s `uploadService.upload` resolved with, verbatim. Preloaded values should carry `status: "uploaded"`.', "properties": { "id": { "type": "string", "description": "Synthetic id, stable for the life of the item" }, "name": { "type": "string" }, "size": { "type": "number", "description": "Size in bytes" }, "type": { "type": "string", "description": "MIME type" }, "status": { "enum": ["uploading", "uploaded", "error"] }, "error": { "type": "string", "description": "Human-readable reason when `status` is `error`" }, "data": { "description": "The server response, verbatim" } }, "required": ["id", "name", "size", "type", "status"], "additionalProperties": false }, "hintProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "iconProp": { "type": "string" }, "acceptProp": { "type": "array", "description": 'Accepted file types, e.g. `["image/*", ".pdf"]`. Files that do not match are refused before uploading.', "items": { "type": "string" } }, "maxSizeProp": { "type": "number", "description": "Maximum size per file, in bytes. Larger files are refused before uploading." }, "buttonLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removeAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "cancelAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "retryAriaLabelProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removeIconProp": { "type": "string" }, "retryIconProp": { "type": "string" }, "maxSizeMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "acceptMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "interruptedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "missingServiceMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "uploadedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "removedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" }, "failedMessageProp": { "$ref": "../core/common.schema.json#/$defs/localizable" } };
594
594
  const allOf$s = [{ "$ref": "../core/common.schema.json#/$defs/baseWidget" }];
595
- const properties$r = { "kind": { "const": "input" }, "type": { "const": "multiFileUpload" }, "path": { "$ref": "../core/common.schema.json#/$defs/dotPath" }, "label": { "$ref": "#/$defs/labelDef" }, "disabled": { "$ref": "#/$defs/disabledDef" }, "readonly": { "$ref": "#/$defs/readonlyDef" }, "on": { "$ref": "../core/common.schema.json#/$defs/on" }, "validator": { "$ref": "../validators.schema.json#/$defs/validator" }, "defaultValue": { "type": "array", "items": { "$ref": "#/$defs/fileItem" } }, "props": { "type": "object", "properties": { "hint": { "$ref": "#/$defs/hintProp" }, "icon": { "$ref": "#/$defs/iconProp" }, "accept": { "$ref": "#/$defs/acceptProp" }, "maxSize": { "$ref": "#/$defs/maxSizeProp" }, "buttonLabel": { "$ref": "#/$defs/buttonLabelProp" }, "removeAriaLabel": { "$ref": "#/$defs/removeAriaLabelProp" }, "cancelAriaLabel": { "$ref": "#/$defs/cancelAriaLabelProp" }, "retryLabel": { "$ref": "#/$defs/retryLabelProp" }, "removeIcon": { "$ref": "#/$defs/removeIconProp" }, "maxSizeMessage": { "$ref": "#/$defs/maxSizeMessageProp" }, "acceptMessage": { "$ref": "#/$defs/acceptMessageProp" }, "missingServiceMessage": { "$ref": "#/$defs/missingServiceMessageProp" }, "uploadedMessage": { "$ref": "#/$defs/uploadedMessageProp" }, "removedMessage": { "$ref": "#/$defs/removedMessageProp" }, "failedMessage": { "$ref": "#/$defs/failedMessageProp" } }, "patternProperties": { "^hint\\.[^.]+$": { "$ref": "#/$defs/hintProp" }, "^icon\\.[^.]+$": { "$ref": "#/$defs/iconProp" }, "^accept\\.[^.]+$": { "$ref": "#/$defs/acceptProp" }, "^maxSize\\.[^.]+$": { "$ref": "#/$defs/maxSizeProp" }, "^buttonLabel\\.[^.]+$": { "$ref": "#/$defs/buttonLabelProp" }, "^removeAriaLabel\\.[^.]+$": { "$ref": "#/$defs/removeAriaLabelProp" }, "^cancelAriaLabel\\.[^.]+$": { "$ref": "#/$defs/cancelAriaLabelProp" }, "^retryLabel\\.[^.]+$": { "$ref": "#/$defs/retryLabelProp" }, "^removeIcon\\.[^.]+$": { "$ref": "#/$defs/removeIconProp" }, "^maxSizeMessage\\.[^.]+$": { "$ref": "#/$defs/maxSizeMessageProp" }, "^acceptMessage\\.[^.]+$": { "$ref": "#/$defs/acceptMessageProp" }, "^missingServiceMessage\\.[^.]+$": { "$ref": "#/$defs/missingServiceMessageProp" }, "^uploadedMessage\\.[^.]+$": { "$ref": "#/$defs/uploadedMessageProp" }, "^removedMessage\\.[^.]+$": { "$ref": "#/$defs/removedMessageProp" }, "^failedMessage\\.[^.]+$": { "$ref": "#/$defs/failedMessageProp" } }, "additionalProperties": false } };
595
+ const properties$r = { "kind": { "const": "input" }, "type": { "const": "multiFileUpload" }, "path": { "$ref": "../core/common.schema.json#/$defs/dotPath" }, "label": { "$ref": "#/$defs/labelDef" }, "disabled": { "$ref": "#/$defs/disabledDef" }, "readonly": { "$ref": "#/$defs/readonlyDef" }, "on": { "$ref": "../core/common.schema.json#/$defs/on" }, "validator": { "$ref": "../validators.schema.json#/$defs/validator" }, "defaultValue": { "type": "array", "items": { "$ref": "#/$defs/fileItem" } }, "props": { "type": "object", "properties": { "hint": { "$ref": "#/$defs/hintProp" }, "icon": { "$ref": "#/$defs/iconProp" }, "accept": { "$ref": "#/$defs/acceptProp" }, "maxSize": { "$ref": "#/$defs/maxSizeProp" }, "buttonLabel": { "$ref": "#/$defs/buttonLabelProp" }, "removeAriaLabel": { "$ref": "#/$defs/removeAriaLabelProp" }, "cancelAriaLabel": { "$ref": "#/$defs/cancelAriaLabelProp" }, "retryAriaLabel": { "$ref": "#/$defs/retryAriaLabelProp" }, "removeIcon": { "$ref": "#/$defs/removeIconProp" }, "retryIcon": { "$ref": "#/$defs/retryIconProp" }, "maxSizeMessage": { "$ref": "#/$defs/maxSizeMessageProp" }, "acceptMessage": { "$ref": "#/$defs/acceptMessageProp" }, "interruptedMessage": { "$ref": "#/$defs/interruptedMessageProp" }, "missingServiceMessage": { "$ref": "#/$defs/missingServiceMessageProp" }, "uploadedMessage": { "$ref": "#/$defs/uploadedMessageProp" }, "removedMessage": { "$ref": "#/$defs/removedMessageProp" }, "failedMessage": { "$ref": "#/$defs/failedMessageProp" } }, "patternProperties": { "^hint\\.[^.]+$": { "$ref": "#/$defs/hintProp" }, "^icon\\.[^.]+$": { "$ref": "#/$defs/iconProp" }, "^accept\\.[^.]+$": { "$ref": "#/$defs/acceptProp" }, "^maxSize\\.[^.]+$": { "$ref": "#/$defs/maxSizeProp" }, "^buttonLabel\\.[^.]+$": { "$ref": "#/$defs/buttonLabelProp" }, "^removeAriaLabel\\.[^.]+$": { "$ref": "#/$defs/removeAriaLabelProp" }, "^cancelAriaLabel\\.[^.]+$": { "$ref": "#/$defs/cancelAriaLabelProp" }, "^retryAriaLabel\\.[^.]+$": { "$ref": "#/$defs/retryAriaLabelProp" }, "^removeIcon\\.[^.]+$": { "$ref": "#/$defs/removeIconProp" }, "^retryIcon\\.[^.]+$": { "$ref": "#/$defs/retryIconProp" }, "^maxSizeMessage\\.[^.]+$": { "$ref": "#/$defs/maxSizeMessageProp" }, "^acceptMessage\\.[^.]+$": { "$ref": "#/$defs/acceptMessageProp" }, "^interruptedMessage\\.[^.]+$": { "$ref": "#/$defs/interruptedMessageProp" }, "^missingServiceMessage\\.[^.]+$": { "$ref": "#/$defs/missingServiceMessageProp" }, "^uploadedMessage\\.[^.]+$": { "$ref": "#/$defs/uploadedMessageProp" }, "^removedMessage\\.[^.]+$": { "$ref": "#/$defs/removedMessageProp" }, "^failedMessage\\.[^.]+$": { "$ref": "#/$defs/failedMessageProp" } }, "additionalProperties": false } };
596
596
  const patternProperties$l = { "^disabled\\.[^.]+$": { "$ref": "#/$defs/disabledDef" }, "^readonly\\.[^.]+$": { "$ref": "#/$defs/readonlyDef" }, "^label\\.[^.]+$": { "$ref": "#/$defs/labelDef" }, "^validator\\.[^.]+$": { "$ref": "../validators.schema.json#/$defs/validator" } };
597
597
  const required$r = ["kind", "type", "path"];
598
598
  const unevaluatedProperties$s = false;
@@ -2888,9 +2888,9 @@ const NOTES = {
2888
2888
  fileUpload: [
2889
2889
  "Single-file upload rendered as a one-line input: the box is the drop target and holds the upload button; while the file uploads the box itself becomes the progress bar; once done it shows the file name with a remove button.",
2890
2890
  'REQUIRES a host transport in the form init config: `dependencies: { uploadService: { upload(file, { id, path, onProgress, signal }) => Promise<unknown>, remove?(item) => Promise<void> } }` (a sibling of `dependencies.markdown`). Keep the object reference stable — a new config identity re-initializes the form. Without it the widget renders disabled with an inline error. Call `get_concept({ concept: "host-services" })`.',
2891
- 'The value is a plain envelope, never the `File`: `{ id, name, size, type, status: "uploading" | "uploaded" | "error", error?, data? }` where `data` is exactly what `upload` resolved with. Preload from the server with `status: "uploaded"`. Removing awaits `uploadService.remove(item)` (when provided) before clearing.',
2891
+ 'The value is a plain envelope, never the `File`: `{ id, name, size, type, status: "uploading" | "uploaded" | "error", error?, data? }` where `data` is exactly what `upload` resolved with. Preload from the server with `status: "uploaded"`. Removing awaits `uploadService.remove(item)` (when provided) before clearing. An item restored with `status: "uploading"` cannot resume — the `File` only existed in the session that picked it — so the widget commits it back as `"error"` with `props.interruptedMessage` (default: `{name} was not uploaded. Remove it and pick the file again.`).',
2892
2892
  'Validate with a `fileValidator`: `{ type: "file", required, blockPendingUploads }`. `blockPendingUploads` defaults to true and fails while the file is uploading or failed, so an unfinished upload cannot be submitted. Message keys: `invalid`, `required`, `pendingUploads`.',
2893
- '`props.accept` (`[".pdf", "image/*"]`) and `props.maxSize` (bytes) are checked BEFORE uploading; a refused or failed file stays in the box with the reason plus retry/remove buttons — never dropped silently. Text props: `buttonLabel`, `acceptMessage`, `maxSizeMessage`, `missingServiceMessage`, `removeAriaLabel`, `cancelAriaLabel`, `retryLabel`, `uploadedMessage`, `removedMessage`, `failedMessage` (`{name}` token).'
2893
+ '`props.accept` (`[".pdf", "image/*"]`) and `props.maxSize` (bytes) are checked BEFORE uploading; a refused or failed file stays in the box with retry/remove icon buttons — never dropped silently. The reason (server `reject(new Error(...))` message, or the default) surfaces in the standard error area below the input, like a date widget\'s invalid-date error. Text props: `buttonLabel`, `acceptMessage`, `maxSizeMessage`, `missingServiceMessage`, `removeAriaLabel`, `cancelAriaLabel`, `retryAriaLabel`, `uploadedMessage`, `removedMessage`, `failedMessage` (`{name}` token); icon overrides: `removeIcon`, `retryIcon`.'
2894
2894
  ],
2895
2895
  multiFileUpload: [
2896
2896
  "The array variant of `fileUpload`: same box, button, progress bar and `uploadService`. Files upload ONE AT A TIME; every finished file becomes a pill inside the box and the value is an array of envelopes.",
package/json.js CHANGED
@@ -1,4 +1,4 @@
1
- import { G, J, a, b, c, g, d, e, f, v } from "./get-concept-BWtZV7zN.js";
1
+ import { G, J, a, b, c, g, d, e, f, v } from "./get-concept-CsLx7Y5b.js";
2
2
  export {
3
3
  G as GET_CONCEPT_TOOL,
4
4
  J as JSON_GENERATE_FROM_OPENAPI_TOOL,
package/lib.js CHANGED
@@ -1,5 +1,5 @@
1
- import { G, J, a, b, c, g, d, e, f, v } from "./get-concept-BWtZV7zN.js";
2
- import { D, a as a2, b as b2, c as c2, d as d2, e as e2, g as g2, l, f as f2, t } from "./list-dx-factories-q0Z0pNnF.js";
1
+ import { G, J, a, b, c, g, d, e, f, v } from "./get-concept-CsLx7Y5b.js";
2
+ import { D, a as a2, b as b2, c as c2, d as d2, e as e2, g as g2, l, f as f2, t } from "./list-dx-factories-hQNWmAmY.js";
3
3
  export {
4
4
  D as DX_CHECK_CODE_TOOL,
5
5
  a2 as DX_GET_SPEC_TOOL,
@@ -1,4 +1,4 @@
1
- import { h as checkReactiveExpression, i as checkBooleanValidatorRules } from "./get-concept-BWtZV7zN.js";
1
+ import { h as checkReactiveExpression, i as checkBooleanValidatorRules } from "./get-concept-CsLx7Y5b.js";
2
2
  import { existsSync } from "node:fs";
3
3
  import { createRequire } from "node:module";
4
4
  import { resolve, join, dirname } from "node:path";
@@ -478,10 +478,10 @@ function resolveDxFramework() {
478
478
  return DX_FRAMEWORKS.includes(raw ?? "") ? raw : "react";
479
479
  }
480
480
  const FRAMEWORK_SETUP = {
481
- react: "RENDER (React) — `import { gui } from '@golemui/gui-shared'; import { GuiForm } from '@golemui/gui-react'; import type { FormSubmitEvent } from '@golemui/core';`, then render `<GuiForm config={{ formDef: form }} formSubmit={(e: FormSubmitEvent) => { /* e.data is the form data */ }} />`. A `gui.displays.display(() => <h2>…</h2>)` returns React JSX. For SSR (Next.js App Router) await `preloadFormWidgets({ widgetLoaders })` from `@golemui/core` before the first render on both server and client (a `'use client'` provider that `use()`s a module-scope promise); `widgetLoaders` comes from `@golemui/gui-react`. Set `formName`.",
481
+ react: "RENDER (React) — `import { gui } from '@golemui/gui-shared'; import { GuiForm } from '@golemui/gui-react'; import type { FormSubmitEvent } from '@golemui/core';`, then render `<GuiForm config={{ formDef: form }} formSubmit={(e: FormSubmitEvent) => { /* e.data is the form data */ }} />`. A `gui.displays.display(() => <h2>…</h2>)` returns React JSX. For SSR (Next.js App Router) await `preloadFormWidgets({ widgetLoaders })` from `@golemui/core` before the first render on both server and client (a `'use client'` provider that `use()`s a module-scope promise); `widgetLoaders` comes from `@golemui/gui-react`. Set an explicit `formName`. Handlers run in the browser only.",
482
482
  angular: "RENDER (Angular) — `import { gui } from '@golemui/gui-shared'; import { FormComponent } from '@golemui/gui-angular';`, add `FormComponent` to the standalone component's `imports`, then in the template `<gui-form [config]=\"{ formDef: form }\" (formSubmit)=\"onSubmit($event)\"></gui-form>` — `$event` is a `FormSubmitEvent` (type from `@golemui/core`), `$event.data` is the form data. For SSR (`@angular/platform-server`) await `preloadFormWidgets({ widgetLoaders })` from `@golemui/core` before bootstrap on both server and client; `widgetLoaders` comes from `@golemui/gui-angular`. An explicit `formName` is required and handlers run in the browser only.",
483
483
  vue: "RENDER (Vue) — `import { gui } from '@golemui/gui-shared'; import { GuiForm } from '@golemui/gui-vue';`, then `<GuiForm :config=\"{ formDef: form }\" @form-submit=\"onSubmit\" />` — the handler receives a `FormSubmitEvent` (`.data` is the form data). The event is `form-submit` (kebab-case), not `formSubmit`. For SSR (Nuxt) await `preloadFormWidgets({ widgetLoaders })` from `@golemui/core` before the first render on both server and client (a Nuxt plugin); `widgetLoaders` comes from `@golemui/gui-vue`.",
484
- lit: "RENDER (Lit) — `import { gui } from '@golemui/gui-shared'; import '@golemui/gui-lit';` (registers the `<gui-form>` custom element), then `<gui-form .config=${{ formDef: form }} @" + formEventNames.submit + "=${(e: CustomEvent) => { /* e.detail is the FormSubmitEvent; e.detail.data */ }}></gui-form>`. The event name is `" + formEventNames.submit + "` (camelCase) — Lit dispatches a raw CustomEvent, so there is no kebab-case alias. For SSR (Astro, plain Node) the server renders the whole form with `renderGuiHtml` from `@golemui/lit/ssr` (needs `@lit-labs/ssr`) after `preloadFormWidgets({ widgetLoaders })`; the client preloads again and calls `resumeServerRenderedForm` from `@golemui/lit`. `formName` is mandatory; custom widgets register with `safeDefine` from `@golemui/lit`, not `@customElement`.",
484
+ lit: "RENDER (Lit) — `import { gui } from '@golemui/gui-shared'; import '@golemui/gui-lit';` (registers the `<gui-form>` custom element), then `<gui-form .config=${{ formDef: form }} @" + formEventNames.submit + "=${(e: CustomEvent) => { /* e.detail is the FormSubmitEvent; e.detail.data */ }}></gui-form>`. The event name is `" + formEventNames.submit + "` (camelCase) — Lit dispatches a raw CustomEvent, so there is no kebab-case alias. For SSR (Astro, plain Node) the server renders the whole form with `renderGuiHtml` from `@golemui/lit/ssr` (needs `@lit-labs/ssr` >= 4.1.0) after `preloadFormWidgets({ widgetLoaders })`; the client preloads again and calls `resumeServerRenderedForm` from `@golemui/lit`. `formName` is mandatory; custom widgets register with `safeDefine` from `@golemui/lit`, not `@customElement`.",
485
485
  vanilla: "RENDER (vanilla JS) — `import { gui } from '@golemui/gui-shared'; import '@golemui/gui-lit';` (registers `<gui-form>`), then `const el = document.querySelector('gui-form'); el.config = { formDef: form }; el.addEventListener('" + formEventNames.submit + "', (e) => { /* e.detail.data */ });`. In TypeScript, type the element — `import type { FormElement } from '@golemui/gui-lit'; const el = document.querySelector<FormElement>('gui-form');` — the published types do not register `gui-form` in `HTMLElementTagNameMap`, so an untyped `querySelector` yields `Element` and `el.config` fails to compile."
486
486
  };
487
487
  function commonNote(fw = "react") {
@@ -795,9 +795,9 @@ const INPUTS = [
795
795
  notes: [
796
796
  "Single-file upload rendered as a one-line input: the box is the drop target and holds the upload button; while the file uploads the box itself becomes the progress bar, and once done it shows the file name with a remove button.",
797
797
  "REQUIRES a host transport: pass `dependencies: { uploadService: { upload(file, { id, path, onProgress, signal }) => Promise<unknown>, remove?(item) => Promise<void> } }` in the init config (next to `markdown`). Keep the object reference stable (module level) — a new `config` identity re-initializes the form. Without it the widget renders disabled with an inline error.",
798
- 'The value is a plain envelope, never the `File`: `{ id, name, size, type, status: "uploading" | "uploaded" | "error", error?, data? }` where `data` is exactly what `upload` resolved with. Preload a value from the server with `status: "uploaded"`. Removing awaits `uploadService.remove(item)` (when provided) before clearing.',
798
+ 'The value is a plain envelope, never the `File`: `{ id, name, size, type, status: "uploading" | "uploaded" | "error", error?, data? }` where `data` is exactly what `upload` resolved with. Preload a value from the server with `status: "uploaded"`. Removing awaits `uploadService.remove(item)` (when provided) before clearing. An item restored with `status: "uploading"` cannot resume — the `File` only existed in the session that picked it — so the widget commits it back as `"error"` with `interruptedMessage` (default: `{name} was not uploaded. Remove it and pick the file again.`).',
799
799
  "The validator auto-supplies `type: 'file'`. `blockPendingUploads` (default true) fails while the file is still uploading or failed, so a half-finished upload can never be submitted; message keys: `invalid`, `required`, `pendingUploads`.",
800
- '`accept` (`[".pdf", "image/*", "application/pdf"]`) and `maxSize` (bytes) are checked BEFORE uploading; a refused or failed file stays in the box with the reason, a retry and a remove button — it is never dropped silently. Messages: `acceptMessage`, `maxSizeMessage`; accessible names: `removeAriaLabel`, `cancelAriaLabel`, `retryLabel` (`{name}` token).'
800
+ '`accept` (`[".pdf", "image/*", "application/pdf"]`) and `maxSize` (bytes) are checked BEFORE uploading; a refused or failed file stays in the box with retry/remove icon buttons — it is never dropped silently. The reason (server `reject(new Error(...))` message, or the default) surfaces in the standard error area below the input, like a date widget\'s invalid-date error. Messages: `acceptMessage`, `maxSizeMessage`; accessible names: `removeAriaLabel`, `cancelAriaLabel`, `retryAriaLabel` (`{name}` token); icon overrides: `removeIcon`, `retryIcon`.'
801
801
  ]
802
802
  },
803
803
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@golemui/gui-mcp",
3
- "version": "1.5.0-rc.0",
3
+ "version": "1.5.0-rc.2",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -43,10 +43,10 @@
43
43
  "ajv": "^8.17.1",
44
44
  "ajv-formats": "^3.0.1",
45
45
  "typescript": "^5.9.2",
46
- "@golemui/gui-schemas": "1.5.0-rc.0",
47
- "@golemui/gui-shared": "1.5.0-rc.0",
48
- "@golemui/gui-validators": "1.5.0-rc.0",
49
- "@golemui/core": "1.5.0-rc.0",
46
+ "@golemui/gui-schemas": "1.5.0-rc.2",
47
+ "@golemui/gui-shared": "1.5.0-rc.2",
48
+ "@golemui/gui-validators": "1.5.0-rc.2",
49
+ "@golemui/core": "1.5.0-rc.2",
50
50
  "@modelcontextprotocol/sdk": "^1.0.0",
51
51
  "zod": "^4.0.0",
52
52
  "@standard-schema/spec": "^1.0.0"