@frontmcp/uipack 0.6.2 → 0.7.1
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/CLAUDE.md +0 -14
- package/adapters/index.js +50 -47
- package/adapters/platform-meta.d.ts.map +1 -1
- package/adapters/response-builder.d.ts +16 -3
- package/adapters/response-builder.d.ts.map +1 -1
- package/bridge-runtime/iife-generator.d.ts.map +1 -1
- package/bridge-runtime/index.js +4 -0
- package/build/builders/base-builder.d.ts +2 -0
- package/build/builders/base-builder.d.ts.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +81 -75
- package/bundler/file-cache/component-builder.d.ts.map +1 -1
- package/bundler/index.js +40 -36
- package/dependency/import-map.d.ts.map +1 -1
- package/dependency/index.js +22 -29
- package/esm/adapters/index.mjs +52 -42
- package/esm/bridge-runtime/index.mjs +4 -0
- package/esm/build/index.mjs +50 -38
- package/esm/bundler/index.mjs +25 -14
- package/esm/dependency/index.mjs +18 -18
- package/esm/handlebars/index.mjs +9 -8
- package/esm/index.mjs +136 -136
- package/esm/package.json +16 -17
- package/esm/registry/index.mjs +57 -50
- package/esm/renderers/index.mjs +19 -22
- package/esm/runtime/index.mjs +16 -15
- package/esm/theme/index.mjs +8 -0
- package/esm/tool-template/index.mjs +23 -15
- package/esm/typings/index.mjs +4 -0
- package/esm/utils/index.mjs +9 -56
- package/esm/validation/index.mjs +9 -8
- package/handlebars/index.js +4 -10
- package/index.js +215 -221
- package/package.json +3 -2
- package/preview/generic-preview.d.ts +4 -5
- package/preview/generic-preview.d.ts.map +1 -1
- package/preview/types.d.ts +15 -1
- package/preview/types.d.ts.map +1 -1
- package/registry/index.js +65 -64
- package/registry/render-template.d.ts.map +1 -1
- package/renderers/index.js +20 -29
- package/renderers/utils/detect.d.ts.map +1 -1
- package/renderers/utils/transpiler.d.ts.map +1 -1
- package/runtime/index.js +20 -25
- package/runtime/sanitizer.d.ts.map +1 -1
- package/theme/css-to-theme.d.ts +0 -27
- package/theme/css-to-theme.d.ts.map +1 -1
- package/theme/index.js +8 -0
- package/tool-template/index.js +30 -28
- package/typings/dts-parser.d.ts.map +1 -1
- package/typings/index.js +4 -0
- package/utils/index.d.ts +2 -3
- package/utils/index.d.ts.map +1 -1
- package/utils/index.js +7 -63
- package/validation/index.js +6 -12
- package/utils/escape-html.d.ts +0 -102
- package/utils/escape-html.d.ts.map +0 -1
- package/utils/safe-stringify.d.ts +0 -30
- package/utils/safe-stringify.d.ts.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontmcp/uipack",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "FrontMCP UIpack - Bundling, build tools, and platform adapters for MCP UI development (React-free core)",
|
|
5
5
|
"author": "AgentFront <info@agentfront.dev>",
|
|
6
6
|
"homepage": "https://docs.agentfront.dev",
|
|
@@ -55,8 +55,9 @@
|
|
|
55
55
|
"./esm": null
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
+
"@frontmcp/utils": "0.7.1",
|
|
58
59
|
"@swc/core": "^1.5.0",
|
|
59
|
-
"enclave-vm": "^
|
|
60
|
+
"enclave-vm": "^2.7.0",
|
|
60
61
|
"esbuild": "^0.27.1",
|
|
61
62
|
"handlebars": "^4.7.8",
|
|
62
63
|
"zod": "^4.0.0"
|
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
* Generic Preview Handler
|
|
3
3
|
*
|
|
4
4
|
* Generates metadata for generic MCP clients.
|
|
5
|
-
* Uses
|
|
6
|
-
*
|
|
7
|
-
* Behaves like OpenAI but with different metadata namespaces.
|
|
5
|
+
* Uses ui/* namespace for maximum compatibility with MCP clients
|
|
6
|
+
* (Claude, Cursor, etc.).
|
|
8
7
|
*
|
|
9
8
|
* @packageDocumentation
|
|
10
9
|
*/
|
|
@@ -12,8 +11,8 @@ import type { PreviewHandler, DiscoveryPreviewOptions, ExecutionPreviewOptions,
|
|
|
12
11
|
/**
|
|
13
12
|
* Preview handler for generic MCP clients.
|
|
14
13
|
*
|
|
15
|
-
* Uses the
|
|
16
|
-
*
|
|
14
|
+
* Uses the ui/* namespace for maximum compatibility with
|
|
15
|
+
* MCP clients (Claude, Cursor, etc.).
|
|
17
16
|
*
|
|
18
17
|
* @example
|
|
19
18
|
* ```typescript
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generic-preview.d.ts","sourceRoot":"","sources":["../../src/preview/generic-preview.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"generic-preview.d.ts","sourceRoot":"","sources":["../../src/preview/generic-preview.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,uBAAuB,EACvB,uBAAuB,EACvB,aAAa,EACb,aAAa,EAGd,MAAM,SAAS,CAAC;AAsBjB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,cAAe,YAAW,cAAc;IACnD,QAAQ,CAAC,QAAQ,EAAG,SAAS,CAAU;IAEvC;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa;IAkB7D;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa;IAsB7D,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,kBAAkB;IAuB1B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAuCzB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;CA6BhC"}
|
package/preview/types.d.ts
CHANGED
|
@@ -165,7 +165,15 @@ export interface ClaudeMetaFields {
|
|
|
165
165
|
'claude/prefersBorder'?: boolean;
|
|
166
166
|
}
|
|
167
167
|
/**
|
|
168
|
-
*
|
|
168
|
+
* Generic MCP metadata fields.
|
|
169
|
+
* Uses ui/* namespace for maximum compatibility with MCP clients.
|
|
170
|
+
*
|
|
171
|
+
* Note: This type includes both legacy frontmcp/* and new ui/* keys
|
|
172
|
+
* for type compatibility during the migration period. New code should
|
|
173
|
+
* only emit ui/* keys. The frontmcp/* keys will be removed in a future
|
|
174
|
+
* major version.
|
|
175
|
+
*
|
|
176
|
+
* @deprecated frontmcp/* keys are deprecated - use ui/* keys instead
|
|
169
177
|
*/
|
|
170
178
|
export interface FrontMCPMetaFields {
|
|
171
179
|
'frontmcp/html'?: string;
|
|
@@ -177,6 +185,12 @@ export interface FrontMCPMetaFields {
|
|
|
177
185
|
};
|
|
178
186
|
'ui/html'?: string;
|
|
179
187
|
'ui/mimeType'?: string;
|
|
188
|
+
'ui/resourceUri'?: string;
|
|
189
|
+
'ui/component'?: string;
|
|
190
|
+
'ui/widgetCSP'?: {
|
|
191
|
+
connectDomains?: string[];
|
|
192
|
+
resourceDomains?: string[];
|
|
193
|
+
};
|
|
180
194
|
}
|
|
181
195
|
/**
|
|
182
196
|
* Combined metadata fields for all platforms.
|
package/preview/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/preview/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAMhE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAMvD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,WAAW,EAAE,aAAa,CAAC;IAE3B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,WAAW,EAAE,aAAa,CAAC;IAE3B;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAEzB;;OAEG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAErC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAE5B;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa,CAAC;IAE9D;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa,CAAC;CAC/D;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE;QACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,oBAAoB,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC9C,+BAA+B,CAAC,EAAE,OAAO,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/preview/types.ts"],"names":[],"mappings":"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"}
|
package/registry/index.js
CHANGED
|
@@ -570,31 +570,12 @@ var init_theme2 = __esm({
|
|
|
570
570
|
}
|
|
571
571
|
});
|
|
572
572
|
|
|
573
|
-
// libs/uipack/src/utils/escape-html.ts
|
|
574
|
-
function escapeHtml(str) {
|
|
575
|
-
if (str === null || str === void 0) {
|
|
576
|
-
return "";
|
|
577
|
-
}
|
|
578
|
-
const s = String(str);
|
|
579
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
580
|
-
}
|
|
581
|
-
function escapeJsString(str) {
|
|
582
|
-
return str.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/"/g, '\\"').replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
583
|
-
}
|
|
584
|
-
function escapeScriptClose(jsonString) {
|
|
585
|
-
return jsonString.replace(/<\//g, "<\\/");
|
|
586
|
-
}
|
|
587
|
-
var init_escape_html = __esm({
|
|
588
|
-
"libs/uipack/src/utils/escape-html.ts"() {
|
|
589
|
-
"use strict";
|
|
590
|
-
}
|
|
591
|
-
});
|
|
592
|
-
|
|
593
573
|
// libs/uipack/src/utils/index.ts
|
|
574
|
+
var import_utils;
|
|
594
575
|
var init_utils = __esm({
|
|
595
576
|
"libs/uipack/src/utils/index.ts"() {
|
|
596
577
|
"use strict";
|
|
597
|
-
|
|
578
|
+
import_utils = require("@frontmcp/utils");
|
|
598
579
|
}
|
|
599
580
|
});
|
|
600
581
|
|
|
@@ -848,6 +829,9 @@ function isTemplateBuilderFunction(fn) {
|
|
|
848
829
|
return true;
|
|
849
830
|
}
|
|
850
831
|
function containsJsx(source) {
|
|
832
|
+
if (source.length > MAX_TEMPLATE_LENGTH) {
|
|
833
|
+
return false;
|
|
834
|
+
}
|
|
851
835
|
if (/<[A-Z][a-zA-Z0-9]*(\s|>|\/)/.test(source)) {
|
|
852
836
|
return true;
|
|
853
837
|
}
|
|
@@ -872,6 +856,9 @@ function containsJsx(source) {
|
|
|
872
856
|
return false;
|
|
873
857
|
}
|
|
874
858
|
function containsMdxSyntax(source) {
|
|
859
|
+
if (source.length > MAX_TEMPLATE_LENGTH) {
|
|
860
|
+
return false;
|
|
861
|
+
}
|
|
875
862
|
if (/<[A-Z][a-zA-Z0-9]*/.test(source)) {
|
|
876
863
|
return true;
|
|
877
864
|
}
|
|
@@ -945,9 +932,11 @@ function detectTemplateType(template) {
|
|
|
945
932
|
reason: "Unknown template type, defaulting to HTML"
|
|
946
933
|
};
|
|
947
934
|
}
|
|
935
|
+
var MAX_TEMPLATE_LENGTH;
|
|
948
936
|
var init_detect = __esm({
|
|
949
937
|
"libs/uipack/src/renderers/utils/detect.ts"() {
|
|
950
938
|
"use strict";
|
|
939
|
+
MAX_TEMPLATE_LENGTH = 5e4;
|
|
951
940
|
}
|
|
952
941
|
});
|
|
953
942
|
|
|
@@ -1137,7 +1126,7 @@ var init_helpers = __esm({
|
|
|
1137
1126
|
idCounter = 0;
|
|
1138
1127
|
builtinHelpers = {
|
|
1139
1128
|
// Escaping
|
|
1140
|
-
escapeHtml,
|
|
1129
|
+
escapeHtml: import_utils.escapeHtml,
|
|
1141
1130
|
// Formatting
|
|
1142
1131
|
formatDate,
|
|
1143
1132
|
formatCurrency,
|
|
@@ -1308,7 +1297,7 @@ __export(handlebars_exports, {
|
|
|
1308
1297
|
createHandlebarsRenderer: () => createHandlebarsRenderer,
|
|
1309
1298
|
defaultValue: () => defaultValue,
|
|
1310
1299
|
eq: () => eq,
|
|
1311
|
-
escapeHtml: () => escapeHtml,
|
|
1300
|
+
escapeHtml: () => import_utils.escapeHtml,
|
|
1312
1301
|
extractAll: () => extractAll,
|
|
1313
1302
|
extractExpressions: () => extractExpressions,
|
|
1314
1303
|
extractInputPaths: () => extractInputPaths,
|
|
@@ -1954,12 +1943,12 @@ var init_mdx_client_renderer = __esm({
|
|
|
1954
1943
|
...outputProps,
|
|
1955
1944
|
...props
|
|
1956
1945
|
};
|
|
1957
|
-
const escapedMdx = escapeScriptClose(JSON.stringify(template));
|
|
1958
|
-
const escapedProps = escapeScriptClose(JSON.stringify(spreadProps));
|
|
1959
|
-
const safeContainerId = escapeJsString(containerId);
|
|
1960
|
-
const loadingHtml = showLoading ? `<div class="mdx-loading">${escapeHtml(loadingMessage)}</div>` : "";
|
|
1946
|
+
const escapedMdx = (0, import_utils.escapeScriptClose)(JSON.stringify(template));
|
|
1947
|
+
const escapedProps = (0, import_utils.escapeScriptClose)(JSON.stringify(spreadProps));
|
|
1948
|
+
const safeContainerId = (0, import_utils.escapeJsString)(containerId);
|
|
1949
|
+
const loadingHtml = showLoading ? `<div class="mdx-loading">${(0, import_utils.escapeHtml)(loadingMessage)}</div>` : "";
|
|
1961
1950
|
return `
|
|
1962
|
-
<div id="${escapeHtml(containerId)}">${loadingHtml}</div>
|
|
1951
|
+
<div id="${(0, import_utils.escapeHtml)(containerId)}">${loadingHtml}</div>
|
|
1963
1952
|
<script type="module">
|
|
1964
1953
|
(async function() {
|
|
1965
1954
|
try {
|
|
@@ -2031,7 +2020,10 @@ async function loadSwcTransform() {
|
|
|
2031
2020
|
return swcTransform;
|
|
2032
2021
|
}
|
|
2033
2022
|
try {
|
|
2034
|
-
const swc = await import(
|
|
2023
|
+
const swc = await import(
|
|
2024
|
+
/* webpackIgnore: true */
|
|
2025
|
+
"@swc/core"
|
|
2026
|
+
);
|
|
2035
2027
|
swcTransform = swc.transform;
|
|
2036
2028
|
return swcTransform;
|
|
2037
2029
|
} catch {
|
|
@@ -2164,11 +2156,12 @@ var init_renderers = __esm({
|
|
|
2164
2156
|
function sha256(content) {
|
|
2165
2157
|
return (0, import_crypto.createHash)("sha256").update(content, "utf8").digest("hex");
|
|
2166
2158
|
}
|
|
2167
|
-
var import_crypto;
|
|
2159
|
+
var import_crypto, import_utils6;
|
|
2168
2160
|
var init_hash_calculator = __esm({
|
|
2169
2161
|
"libs/uipack/src/bundler/file-cache/hash-calculator.ts"() {
|
|
2170
2162
|
"use strict";
|
|
2171
2163
|
import_crypto = require("crypto");
|
|
2164
|
+
import_utils6 = require("@frontmcp/utils");
|
|
2172
2165
|
}
|
|
2173
2166
|
});
|
|
2174
2167
|
|
|
@@ -3019,7 +3012,11 @@ FrontMcpBridge.prototype._setupDataToolCallHandler = function() {
|
|
|
3019
3012
|
};
|
|
3020
3013
|
`.trim();
|
|
3021
3014
|
}
|
|
3015
|
+
var MAX_MINIFY_CODE_LENGTH = 5e5;
|
|
3022
3016
|
function minifyJS(code) {
|
|
3017
|
+
if (code.length > MAX_MINIFY_CODE_LENGTH) {
|
|
3018
|
+
return code;
|
|
3019
|
+
}
|
|
3023
3020
|
return code.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\/\/.*$/gm, "").replace(/\s+/g, " ").replace(/\s*([{};,:()[\]])\s*/g, "$1").replace(/;\}/g, "}").trim();
|
|
3024
3021
|
}
|
|
3025
3022
|
function generatePlatformBundle(platform, options = {}) {
|
|
@@ -3126,7 +3123,7 @@ function createTemplateHelpers() {
|
|
|
3126
3123
|
/**
|
|
3127
3124
|
* Escape HTML special characters to prevent XSS
|
|
3128
3125
|
*/
|
|
3129
|
-
escapeHtml,
|
|
3126
|
+
escapeHtml: import_utils.escapeHtml,
|
|
3130
3127
|
/**
|
|
3131
3128
|
* Format a date for display
|
|
3132
3129
|
*/
|
|
@@ -3243,7 +3240,7 @@ function wrapToolUIUniversal(options) {
|
|
|
3243
3240
|
resourceMode
|
|
3244
3241
|
});
|
|
3245
3242
|
const bridgeScript = includeBridge ? BRIDGE_SCRIPT_TAGS.universal : "";
|
|
3246
|
-
const pageTitle = title || `${escapeHtml(toolName)} - Tool Result`;
|
|
3243
|
+
const pageTitle = title || `${(0, import_utils.escapeHtml)(toolName)} - Tool Result`;
|
|
3247
3244
|
return `<!DOCTYPE html>
|
|
3248
3245
|
<html lang="en">
|
|
3249
3246
|
<head>
|
|
@@ -3468,7 +3465,7 @@ function wrapLeanWidgetShell(options) {
|
|
|
3468
3465
|
<head>
|
|
3469
3466
|
<meta charset="UTF-8">
|
|
3470
3467
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3471
|
-
<title>${escapeHtml(title || toolName)}</title>
|
|
3468
|
+
<title>${(0, import_utils.escapeHtml)(title || toolName)}</title>
|
|
3472
3469
|
${fontPreconnect}
|
|
3473
3470
|
${fontStylesheets}
|
|
3474
3471
|
${tailwindScript}
|
|
@@ -3869,7 +3866,7 @@ function wrapHybridWidgetShell(options) {
|
|
|
3869
3866
|
<head>
|
|
3870
3867
|
<meta charset="UTF-8">
|
|
3871
3868
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3872
|
-
<title>${escapeHtml(title || toolName)}</title>
|
|
3869
|
+
<title>${(0, import_utils.escapeHtml)(title || toolName)}</title>
|
|
3873
3870
|
${fontPreconnect}
|
|
3874
3871
|
${fontStylesheets}
|
|
3875
3872
|
${tailwindScript}
|
|
@@ -4411,7 +4408,7 @@ function wrapStaticWidgetUniversal(options) {
|
|
|
4411
4408
|
}, 100);
|
|
4412
4409
|
}
|
|
4413
4410
|
</script>` : "";
|
|
4414
|
-
const pageTitle = title || `${escapeHtml(toolName)} - Tool Widget`;
|
|
4411
|
+
const pageTitle = title || `${(0, import_utils.escapeHtml)(toolName)} - Tool Widget`;
|
|
4415
4412
|
const loaderHtml = isReactBased && componentCode && !hasEmbeddedData ? `
|
|
4416
4413
|
<!-- Loading State -->
|
|
4417
4414
|
<div id="frontmcp-loader" style="display: flex; align-items: center; justify-content: center; padding: 2rem; gap: 0.5rem;">
|
|
@@ -4461,7 +4458,11 @@ function wrapStaticWidgetUniversal(options) {
|
|
|
4461
4458
|
}
|
|
4462
4459
|
|
|
4463
4460
|
// libs/uipack/src/registry/render-template.ts
|
|
4461
|
+
var MAX_MDX_SOURCE_LENGTH = 1e5;
|
|
4464
4462
|
function containsMdxSyntax2(source) {
|
|
4463
|
+
if (source.length > MAX_MDX_SOURCE_LENGTH) {
|
|
4464
|
+
return false;
|
|
4465
|
+
}
|
|
4465
4466
|
if (/<[A-Z][a-zA-Z0-9]*/.test(source)) {
|
|
4466
4467
|
return true;
|
|
4467
4468
|
}
|
|
@@ -4629,16 +4630,13 @@ function buildUIMeta(options) {
|
|
|
4629
4630
|
case "generic-mcp":
|
|
4630
4631
|
case "gemini":
|
|
4631
4632
|
default:
|
|
4632
|
-
meta["frontmcp/html"] = html;
|
|
4633
|
-
meta["frontmcp/mimeType"] = "text/html+mcp";
|
|
4634
|
-
if (rendererType) meta["frontmcp/type"] = rendererType;
|
|
4635
|
-
if (contentHash) meta["frontmcp/contentHash"] = contentHash;
|
|
4636
|
-
if (manifestUri) meta["frontmcp/manifestUri"] = manifestUri;
|
|
4637
|
-
if (token) meta["frontmcp/widgetToken"] = token;
|
|
4638
|
-
if (directUrl) meta["frontmcp/directUrl"] = directUrl;
|
|
4639
4633
|
meta["ui/html"] = html;
|
|
4640
4634
|
meta["ui/mimeType"] = "text/html+mcp";
|
|
4641
4635
|
if (rendererType) meta["ui/type"] = rendererType;
|
|
4636
|
+
if (contentHash) meta["ui/contentHash"] = contentHash;
|
|
4637
|
+
if (manifestUri) meta["ui/manifestUri"] = manifestUri;
|
|
4638
|
+
if (token) meta["ui/widgetToken"] = token;
|
|
4639
|
+
if (directUrl) meta["ui/directUrl"] = directUrl;
|
|
4642
4640
|
if (platformType === "claude") {
|
|
4643
4641
|
return buildClaudeMeta(meta, uiConfig);
|
|
4644
4642
|
} else if (platformType === "gemini") {
|
|
@@ -4687,34 +4685,37 @@ function buildIDEMeta(meta, uiConfig) {
|
|
|
4687
4685
|
}
|
|
4688
4686
|
return meta;
|
|
4689
4687
|
}
|
|
4690
|
-
function buildFrontMCPCSP(csp) {
|
|
4691
|
-
const result = {};
|
|
4692
|
-
if (csp.connectDomains?.length) {
|
|
4693
|
-
result.connectDomains = csp.connectDomains;
|
|
4694
|
-
}
|
|
4695
|
-
if (csp.resourceDomains?.length) {
|
|
4696
|
-
result.resourceDomains = csp.resourceDomains;
|
|
4697
|
-
}
|
|
4698
|
-
return result;
|
|
4699
|
-
}
|
|
4700
4688
|
function buildGenericMeta(meta, uiConfig) {
|
|
4701
|
-
if (uiConfig.widgetAccessible) {
|
|
4702
|
-
meta["frontmcp/widgetAccessible"] = true;
|
|
4703
|
-
}
|
|
4704
4689
|
if (uiConfig.csp) {
|
|
4705
|
-
|
|
4690
|
+
const csp = {};
|
|
4691
|
+
if (uiConfig.csp.connectDomains?.length) {
|
|
4692
|
+
csp.connectDomains = uiConfig.csp.connectDomains;
|
|
4693
|
+
}
|
|
4694
|
+
if (uiConfig.csp.resourceDomains?.length) {
|
|
4695
|
+
csp.resourceDomains = uiConfig.csp.resourceDomains;
|
|
4696
|
+
}
|
|
4697
|
+
if (Object.keys(csp).length > 0) {
|
|
4698
|
+
meta["ui/csp"] = csp;
|
|
4699
|
+
}
|
|
4706
4700
|
}
|
|
4707
4701
|
if (uiConfig.displayMode) {
|
|
4708
|
-
|
|
4709
|
-
|
|
4710
|
-
|
|
4711
|
-
|
|
4702
|
+
const displayModeMap = {
|
|
4703
|
+
inline: "inline",
|
|
4704
|
+
fullscreen: "fullscreen",
|
|
4705
|
+
pip: "pip",
|
|
4706
|
+
widget: "inline",
|
|
4707
|
+
panel: "fullscreen"
|
|
4708
|
+
};
|
|
4709
|
+
const mappedMode = displayModeMap[uiConfig.displayMode];
|
|
4710
|
+
if (mappedMode) {
|
|
4711
|
+
meta["ui/displayMode"] = mappedMode;
|
|
4712
|
+
}
|
|
4712
4713
|
}
|
|
4713
4714
|
if (uiConfig.prefersBorder !== void 0) {
|
|
4714
|
-
meta["
|
|
4715
|
+
meta["ui/prefersBorder"] = uiConfig.prefersBorder;
|
|
4715
4716
|
}
|
|
4716
4717
|
if (uiConfig.sandboxDomain) {
|
|
4717
|
-
meta["
|
|
4718
|
+
meta["ui/domain"] = uiConfig.sandboxDomain;
|
|
4718
4719
|
}
|
|
4719
4720
|
return meta;
|
|
4720
4721
|
}
|
|
@@ -4988,7 +4989,7 @@ function getSchemaPathStrings(schema, prefix = "output") {
|
|
|
4988
4989
|
}
|
|
4989
4990
|
|
|
4990
4991
|
// libs/uipack/src/validation/template-validator.ts
|
|
4991
|
-
|
|
4992
|
+
init_handlebars();
|
|
4992
4993
|
function validateTemplate(template, outputSchema, options = {}) {
|
|
4993
4994
|
const { inputSchema, warnOnOptional = true, suggestSimilar = true, maxSuggestionDistance = 3 } = options;
|
|
4994
4995
|
const errors = [];
|
|
@@ -5338,7 +5339,7 @@ function safeInputToRecord(input) {
|
|
|
5338
5339
|
return {};
|
|
5339
5340
|
}
|
|
5340
5341
|
var defaultHelpers = {
|
|
5341
|
-
escapeHtml,
|
|
5342
|
+
escapeHtml: import_utils.escapeHtml,
|
|
5342
5343
|
formatDate: (date, format) => {
|
|
5343
5344
|
const d = date instanceof Date ? date : new Date(date);
|
|
5344
5345
|
if (format === "iso") return d.toISOString();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-template.d.ts","sourceRoot":"","sources":["../../src/registry/render-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAmB,iBAAiB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"render-template.d.ts","sourceRoot":"","sources":["../../src/registry/render-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAmB,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAYrF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CA2CzD;AAkCD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAyB3D;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAE/C,QAAQ,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IAC/E,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,4CAA4C;IAC5C,MAAM,EAAE,OAAO,CAAC;IAChB,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,oDAAoD;IAEpD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAuBzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,QAAQ,IAAI;IAAE,EAAE,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;CAAE,CAG9G;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmGpG"}
|
package/renderers/index.js
CHANGED
|
@@ -30,31 +30,12 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
30
30
|
));
|
|
31
31
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
32
32
|
|
|
33
|
-
// libs/uipack/src/utils/escape-html.ts
|
|
34
|
-
function escapeHtml(str) {
|
|
35
|
-
if (str === null || str === void 0) {
|
|
36
|
-
return "";
|
|
37
|
-
}
|
|
38
|
-
const s = String(str);
|
|
39
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
40
|
-
}
|
|
41
|
-
function escapeJsString(str) {
|
|
42
|
-
return str.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/"/g, '\\"').replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
43
|
-
}
|
|
44
|
-
function escapeScriptClose(jsonString) {
|
|
45
|
-
return jsonString.replace(/<\//g, "<\\/");
|
|
46
|
-
}
|
|
47
|
-
var init_escape_html = __esm({
|
|
48
|
-
"libs/uipack/src/utils/escape-html.ts"() {
|
|
49
|
-
"use strict";
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
|
|
53
33
|
// libs/uipack/src/utils/index.ts
|
|
34
|
+
var import_utils;
|
|
54
35
|
var init_utils = __esm({
|
|
55
36
|
"libs/uipack/src/utils/index.ts"() {
|
|
56
37
|
"use strict";
|
|
57
|
-
|
|
38
|
+
import_utils = require("@frontmcp/utils");
|
|
58
39
|
}
|
|
59
40
|
});
|
|
60
41
|
|
|
@@ -244,7 +225,7 @@ var init_helpers = __esm({
|
|
|
244
225
|
idCounter = 0;
|
|
245
226
|
builtinHelpers = {
|
|
246
227
|
// Escaping
|
|
247
|
-
escapeHtml,
|
|
228
|
+
escapeHtml: import_utils.escapeHtml,
|
|
248
229
|
// Formatting
|
|
249
230
|
formatDate,
|
|
250
231
|
formatCurrency,
|
|
@@ -415,7 +396,7 @@ __export(handlebars_exports, {
|
|
|
415
396
|
createHandlebarsRenderer: () => createHandlebarsRenderer,
|
|
416
397
|
defaultValue: () => defaultValue,
|
|
417
398
|
eq: () => eq,
|
|
418
|
-
escapeHtml: () => escapeHtml,
|
|
399
|
+
escapeHtml: () => import_utils.escapeHtml,
|
|
419
400
|
extractAll: () => extractAll,
|
|
420
401
|
extractExpressions: () => extractExpressions,
|
|
421
402
|
extractInputPaths: () => extractInputPaths,
|
|
@@ -932,6 +913,7 @@ var CLAUDE_PLATFORM = {
|
|
|
932
913
|
};
|
|
933
914
|
|
|
934
915
|
// libs/uipack/src/renderers/utils/detect.ts
|
|
916
|
+
var MAX_TEMPLATE_LENGTH = 5e4;
|
|
935
917
|
function isReactComponent(value) {
|
|
936
918
|
if (typeof value !== "function") {
|
|
937
919
|
return false;
|
|
@@ -960,6 +942,9 @@ function isTemplateBuilderFunction(fn) {
|
|
|
960
942
|
return true;
|
|
961
943
|
}
|
|
962
944
|
function containsJsx(source) {
|
|
945
|
+
if (source.length > MAX_TEMPLATE_LENGTH) {
|
|
946
|
+
return false;
|
|
947
|
+
}
|
|
963
948
|
if (/<[A-Z][a-zA-Z0-9]*(\s|>|\/)/.test(source)) {
|
|
964
949
|
return true;
|
|
965
950
|
}
|
|
@@ -984,6 +969,9 @@ function containsJsx(source) {
|
|
|
984
969
|
return false;
|
|
985
970
|
}
|
|
986
971
|
function containsMdxSyntax(source) {
|
|
972
|
+
if (source.length > MAX_TEMPLATE_LENGTH) {
|
|
973
|
+
return false;
|
|
974
|
+
}
|
|
987
975
|
if (/<[A-Z][a-zA-Z0-9]*/.test(source)) {
|
|
988
976
|
return true;
|
|
989
977
|
}
|
|
@@ -1437,12 +1425,12 @@ var MdxClientRenderer = class {
|
|
|
1437
1425
|
...outputProps,
|
|
1438
1426
|
...props
|
|
1439
1427
|
};
|
|
1440
|
-
const escapedMdx = escapeScriptClose(JSON.stringify(template));
|
|
1441
|
-
const escapedProps = escapeScriptClose(JSON.stringify(spreadProps));
|
|
1442
|
-
const safeContainerId = escapeJsString(containerId);
|
|
1443
|
-
const loadingHtml = showLoading ? `<div class="mdx-loading">${escapeHtml(loadingMessage)}</div>` : "";
|
|
1428
|
+
const escapedMdx = (0, import_utils.escapeScriptClose)(JSON.stringify(template));
|
|
1429
|
+
const escapedProps = (0, import_utils.escapeScriptClose)(JSON.stringify(spreadProps));
|
|
1430
|
+
const safeContainerId = (0, import_utils.escapeJsString)(containerId);
|
|
1431
|
+
const loadingHtml = showLoading ? `<div class="mdx-loading">${(0, import_utils.escapeHtml)(loadingMessage)}</div>` : "";
|
|
1444
1432
|
return `
|
|
1445
|
-
<div id="${escapeHtml(containerId)}">${loadingHtml}</div>
|
|
1433
|
+
<div id="${(0, import_utils.escapeHtml)(containerId)}">${loadingHtml}</div>
|
|
1446
1434
|
<script type="module">
|
|
1447
1435
|
(async function() {
|
|
1448
1436
|
try {
|
|
@@ -1519,7 +1507,10 @@ async function loadSwcTransform() {
|
|
|
1519
1507
|
return swcTransform;
|
|
1520
1508
|
}
|
|
1521
1509
|
try {
|
|
1522
|
-
const swc = await import(
|
|
1510
|
+
const swc = await import(
|
|
1511
|
+
/* webpackIgnore: true */
|
|
1512
|
+
"@swc/core"
|
|
1513
|
+
);
|
|
1523
1514
|
swcTransform = swc.transform;
|
|
1524
1515
|
return swcTransform;
|
|
1525
1516
|
} catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../src/renderers/utils/detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../src/renderers/utils/detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAuCxD;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAa/D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CA0CnD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAuCzD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG;IACrD,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,YAAY,GAAG,eAAe,GAAG,aAAa,CAAC;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CA8DA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transpiler.d.ts","sourceRoot":"","sources":["../../../src/renderers/utils/transpiler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD;;GAEG;AACH,UAAU,mBAAmB;IAC3B,+BAA+B;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wBAAwB;IACxB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,wEAAwE;IACxE,UAAU,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,sDAAsD;IACtD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"transpiler.d.ts","sourceRoot":"","sources":["../../../src/renderers/utils/transpiler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD;;GAEG;AACH,UAAU,mBAAmB;IAC3B,+BAA+B;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wBAAwB;IACxB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,wEAAwE;IACxE,UAAU,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,sDAAsD;IACtD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA2CD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,eAAe,CAAC,CAwD9G;AAED;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAGvD;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAKjH;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAKjH"}
|
package/runtime/index.js
CHANGED
|
@@ -30,25 +30,12 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
30
30
|
));
|
|
31
31
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
32
32
|
|
|
33
|
-
// libs/uipack/src/utils/escape-html.ts
|
|
34
|
-
function escapeHtml(str) {
|
|
35
|
-
if (str === null || str === void 0) {
|
|
36
|
-
return "";
|
|
37
|
-
}
|
|
38
|
-
const s = String(str);
|
|
39
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
40
|
-
}
|
|
41
|
-
var init_escape_html = __esm({
|
|
42
|
-
"libs/uipack/src/utils/escape-html.ts"() {
|
|
43
|
-
"use strict";
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
|
|
47
33
|
// libs/uipack/src/utils/index.ts
|
|
34
|
+
var import_utils;
|
|
48
35
|
var init_utils = __esm({
|
|
49
36
|
"libs/uipack/src/utils/index.ts"() {
|
|
50
37
|
"use strict";
|
|
51
|
-
|
|
38
|
+
import_utils = require("@frontmcp/utils");
|
|
52
39
|
}
|
|
53
40
|
});
|
|
54
41
|
|
|
@@ -238,7 +225,7 @@ var init_helpers = __esm({
|
|
|
238
225
|
idCounter = 0;
|
|
239
226
|
builtinHelpers = {
|
|
240
227
|
// Escaping
|
|
241
|
-
escapeHtml,
|
|
228
|
+
escapeHtml: import_utils.escapeHtml,
|
|
242
229
|
// Formatting
|
|
243
230
|
formatDate,
|
|
244
231
|
formatCurrency,
|
|
@@ -409,7 +396,7 @@ __export(handlebars_exports, {
|
|
|
409
396
|
createHandlebarsRenderer: () => createHandlebarsRenderer,
|
|
410
397
|
defaultValue: () => defaultValue,
|
|
411
398
|
eq: () => eq,
|
|
412
|
-
escapeHtml: () => escapeHtml,
|
|
399
|
+
escapeHtml: () => import_utils.escapeHtml,
|
|
413
400
|
extractAll: () => extractAll,
|
|
414
401
|
extractExpressions: () => extractExpressions,
|
|
415
402
|
extractInputPaths: () => extractInputPaths,
|
|
@@ -1831,7 +1818,11 @@ FrontMcpBridge.prototype._setupDataToolCallHandler = function() {
|
|
|
1831
1818
|
};
|
|
1832
1819
|
`.trim();
|
|
1833
1820
|
}
|
|
1821
|
+
var MAX_MINIFY_CODE_LENGTH = 5e5;
|
|
1834
1822
|
function minifyJS(code) {
|
|
1823
|
+
if (code.length > MAX_MINIFY_CODE_LENGTH) {
|
|
1824
|
+
return code;
|
|
1825
|
+
}
|
|
1835
1826
|
return code.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\/\/.*$/gm, "").replace(/\s+/g, " ").replace(/\s*([{};,:()[\]])\s*/g, "$1").replace(/;\}/g, "}").trim();
|
|
1836
1827
|
}
|
|
1837
1828
|
function generatePlatformBundle(platform, options = {}) {
|
|
@@ -2985,7 +2976,11 @@ function detectPIIType(value) {
|
|
|
2985
2976
|
if (isIPv4(value)) return "IP";
|
|
2986
2977
|
return null;
|
|
2987
2978
|
}
|
|
2979
|
+
var MAX_PII_TEXT_LENGTH = 1e5;
|
|
2988
2980
|
function redactPIIFromText(text) {
|
|
2981
|
+
if (text.length > MAX_PII_TEXT_LENGTH) {
|
|
2982
|
+
return text;
|
|
2983
|
+
}
|
|
2989
2984
|
let result = text;
|
|
2990
2985
|
result = result.replace(PII_PATTERNS.creditCardInText, REDACTION_TOKENS.CARD);
|
|
2991
2986
|
result = result.replace(PII_PATTERNS.ssnInText, REDACTION_TOKENS.ID);
|
|
@@ -3104,7 +3099,7 @@ function createTemplateHelpers() {
|
|
|
3104
3099
|
/**
|
|
3105
3100
|
* Escape HTML special characters to prevent XSS
|
|
3106
3101
|
*/
|
|
3107
|
-
escapeHtml,
|
|
3102
|
+
escapeHtml: import_utils.escapeHtml,
|
|
3108
3103
|
/**
|
|
3109
3104
|
* Format a date for display
|
|
3110
3105
|
*/
|
|
@@ -3208,7 +3203,7 @@ function wrapToolUI(options) {
|
|
|
3208
3203
|
widgetAccessible,
|
|
3209
3204
|
hostContext
|
|
3210
3205
|
});
|
|
3211
|
-
const pageTitle = title || `${escapeHtml(toolName)} - Tool Result`;
|
|
3206
|
+
const pageTitle = title || `${(0, import_utils.escapeHtml)(toolName)} - Tool Result`;
|
|
3212
3207
|
return `<!DOCTYPE html>
|
|
3213
3208
|
<html lang="en">
|
|
3214
3209
|
<head>
|
|
@@ -3361,7 +3356,7 @@ function wrapToolUIUniversal(options) {
|
|
|
3361
3356
|
resourceMode
|
|
3362
3357
|
});
|
|
3363
3358
|
const bridgeScript = includeBridge ? BRIDGE_SCRIPT_TAGS.universal : "";
|
|
3364
|
-
const pageTitle = title || `${escapeHtml(toolName)} - Tool Result`;
|
|
3359
|
+
const pageTitle = title || `${(0, import_utils.escapeHtml)(toolName)} - Tool Result`;
|
|
3365
3360
|
return `<!DOCTYPE html>
|
|
3366
3361
|
<html lang="en">
|
|
3367
3362
|
<head>
|
|
@@ -3475,7 +3470,7 @@ function wrapToolUIMinimal(options) {
|
|
|
3475
3470
|
window.__mcpWidgetAccessible = ${helpers.jsonEmbed(widgetAccessible)};
|
|
3476
3471
|
window.__mcpHostContext = ${helpers.jsonEmbed(contextData)};
|
|
3477
3472
|
</script>`;
|
|
3478
|
-
const pageTitle = title || `${escapeHtml(toolName)} - Tool Result`;
|
|
3473
|
+
const pageTitle = title || `${(0, import_utils.escapeHtml)(toolName)} - Tool Result`;
|
|
3479
3474
|
return `<!DOCTYPE html>
|
|
3480
3475
|
<html lang="en">
|
|
3481
3476
|
<head>
|
|
@@ -3625,7 +3620,7 @@ function wrapLeanWidgetShell(options) {
|
|
|
3625
3620
|
<head>
|
|
3626
3621
|
<meta charset="UTF-8">
|
|
3627
3622
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3628
|
-
<title>${escapeHtml(title || toolName)}</title>
|
|
3623
|
+
<title>${(0, import_utils.escapeHtml)(title || toolName)}</title>
|
|
3629
3624
|
${fontPreconnect}
|
|
3630
3625
|
${fontStylesheets}
|
|
3631
3626
|
${tailwindScript}
|
|
@@ -4026,7 +4021,7 @@ function wrapHybridWidgetShell(options) {
|
|
|
4026
4021
|
<head>
|
|
4027
4022
|
<meta charset="UTF-8">
|
|
4028
4023
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
4029
|
-
<title>${escapeHtml(title || toolName)}</title>
|
|
4024
|
+
<title>${(0, import_utils.escapeHtml)(title || toolName)}</title>
|
|
4030
4025
|
${fontPreconnect}
|
|
4031
4026
|
${fontStylesheets}
|
|
4032
4027
|
${tailwindScript}
|
|
@@ -4568,7 +4563,7 @@ function wrapStaticWidgetUniversal(options) {
|
|
|
4568
4563
|
}, 100);
|
|
4569
4564
|
}
|
|
4570
4565
|
</script>` : "";
|
|
4571
|
-
const pageTitle = title || `${escapeHtml(toolName)} - Tool Widget`;
|
|
4566
|
+
const pageTitle = title || `${(0, import_utils.escapeHtml)(toolName)} - Tool Widget`;
|
|
4572
4567
|
const loaderHtml = isReactBased && componentCode && !hasEmbeddedData ? `
|
|
4573
4568
|
<!-- Loading State -->
|
|
4574
4569
|
<div id="frontmcp-loader" style="display: flex; align-items: center; justify-content: center; padding: 2rem; gap: 0.5rem;">
|
|
@@ -4667,7 +4662,7 @@ function wrapToolUIForClaude(options) {
|
|
|
4667
4662
|
window.__mcpToolInput = ${helpers.jsonEmbed(input)};
|
|
4668
4663
|
window.__mcpToolOutput = ${helpers.jsonEmbed(output)};
|
|
4669
4664
|
</script>`;
|
|
4670
|
-
const pageTitle = title || `${escapeHtml(toolName)} - Tool Result`;
|
|
4665
|
+
const pageTitle = title || `${(0, import_utils.escapeHtml)(toolName)} - Tool Result`;
|
|
4671
4666
|
return `<!DOCTYPE html>
|
|
4672
4667
|
<html lang="en">
|
|
4673
4668
|
<head>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../src/runtime/sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;CAOnB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;CA8BxB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,WAAW,CAAC;IAEpC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAInD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,OAAO,gBAAgB,GAAG,IAAI,CAOjF;
|
|
1
|
+
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../src/runtime/sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;CAOnB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;CA8BxB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,WAAW,CAAC;IAEpC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAInD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,OAAO,gBAAgB,GAAG,IAAI,CAOjF;AAQD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBtD;AA0FD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,IAAI,GAAE,IAAI,GAAG,MAAM,EAAE,GAAG,WAAkB,GACzC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,IAAI,GAAE,IAAI,GAAG,MAAM,EAAE,GAAG,WAAkB,GACzC,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CA0CA"}
|