@maravilla-labs/functions 0.10.0 → 0.10.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/dist/mcp/build.d.ts +11 -1
- package/dist/mcp/build.d.ts.map +1 -1
- package/dist/mcp/build.js +53 -25
- package/dist/mcp/build.js.map +1 -1
- package/package.json +1 -1
package/dist/mcp/build.d.ts
CHANGED
|
@@ -10,6 +10,16 @@ import type { BuildMcpOptions, McpManifest } from './types.js';
|
|
|
10
10
|
export declare function buildMcp(options?: BuildMcpOptions): Promise<McpManifest | null>;
|
|
11
11
|
/** Merge the MCP manifest into an existing `manifest.json`. The embedded
|
|
12
12
|
* shape mirrors the standalone `mcp.json` so the Rust
|
|
13
|
-
* `platform::mcp::McpManifest` deserializer accepts both.
|
|
13
|
+
* `platform::mcp::McpManifest` deserializer accepts both.
|
|
14
|
+
*
|
|
15
|
+
* Also registers each UI template's single-file widget into the manifest's
|
|
16
|
+
* `routing.assets` list. The widgets live under the app's static dir (e.g.
|
|
17
|
+
* `static/mcp-ui/<name>.html`), but `generateManifest`'s `filterStaticAssets`
|
|
18
|
+
* drops `.html` files (they're treated as prerendered pages), so an MCP widget —
|
|
19
|
+
* which IS `.html` — never makes it into `routing.assets` and the deploy never
|
|
20
|
+
* ships it. We run AFTER that filter (and after the manifest is written), so we
|
|
21
|
+
* add the widgets explicitly here. Adapter-agnostic: every adapter reaches this
|
|
22
|
+
* via adapter-core's `buildAndIntegrateMcp`, and the static-dir name + routing
|
|
23
|
+
* shape are read from the manifest itself. */
|
|
14
24
|
export declare function integrateMcpWithManifest(manifestPath: string, mcpManifest: McpManifest | null): Promise<void>;
|
|
15
25
|
//# sourceMappingURL=build.d.ts.map
|
package/dist/mcp/build.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/mcp/build.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EAKZ,MAAM,YAAY,CAAC;AAyCpB;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/mcp/build.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EAKZ,MAAM,YAAY,CAAC;AAyCpB;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAsFzF;AA2FD;;;;;;;;;;;;+CAY+C;AAC/C,wBAAsB,wBAAwB,CAC5C,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,GAAG,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
|
package/dist/mcp/build.js
CHANGED
|
@@ -4,33 +4,34 @@ import { pathToFileURL } from 'node:url';
|
|
|
4
4
|
import * as esbuild from 'esbuild';
|
|
5
5
|
import { discoverMcpSources } from './discover.js';
|
|
6
6
|
import { generateMcpEntry } from './generator.js';
|
|
7
|
-
/** Sub-directory under the build output where single-file widgets are copied,
|
|
8
|
-
* served by the runtime as the `ui://` resource body. Deploy-relative; resolved
|
|
9
|
-
* by the same `FileResolver` that loads `mcp.js`. */
|
|
10
|
-
const UI_ASSET_DIR = 'mcp-ui';
|
|
11
7
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
8
|
+
* Resolve each template's `htmlPath` to a deploy-relative `htmlAsset`.
|
|
9
|
+
*
|
|
10
|
+
* `htmlPath` must point at the tenant's built single-file widget **inside its
|
|
11
|
+
* static assets** (e.g. `static/mcp-ui/reader.html`) — output your
|
|
12
|
+
* `vite-plugin-singlefile` build there so the framework deploys it as a normal
|
|
13
|
+
* static asset (listed in `routing.assets`, uploaded, and served). The runtime
|
|
14
|
+
* reads those bytes via the same `FileResolver` that loads `mcp.js` and serves
|
|
15
|
+
* them inline as the `ui://` resource. We do NOT copy the file: a build-root copy
|
|
16
|
+
* would be neither a `routing.assets` entry nor a registered bundle, so the deploy
|
|
17
|
+
* would never ship it. We only normalize the path and warn (not throw — a throw
|
|
18
|
+
* would disable the whole MCP build) if the asset isn't present in the output.
|
|
15
19
|
*/
|
|
16
|
-
async function
|
|
17
|
-
if (raw.length === 0)
|
|
18
|
-
return [];
|
|
19
|
-
await fs.mkdir(join(outDir, UI_ASSET_DIR), { recursive: true });
|
|
20
|
+
async function resolveUiTemplates(raw, outDir) {
|
|
20
21
|
return Promise.all(raw.map(async (t) => {
|
|
21
22
|
if (!t.htmlPath) {
|
|
22
|
-
|
|
23
|
+
console.warn(`⚠️ MCP uiTemplate "${t.name}" is missing "htmlPath" — it will render no widget.`);
|
|
24
|
+
return { name: t.name, htmlAsset: '', csp: t.csp };
|
|
23
25
|
}
|
|
24
|
-
|
|
25
|
-
const htmlAsset =
|
|
26
|
+
// Deploy-relative path (strip a leading ./ or /), as the FileResolver sees it.
|
|
27
|
+
const htmlAsset = t.htmlPath.replace(/^\.?\/+/, '');
|
|
26
28
|
try {
|
|
27
|
-
|
|
28
|
-
await fs.writeFile(join(outDir, htmlAsset), html);
|
|
29
|
+
await fs.access(join(outDir, htmlAsset));
|
|
29
30
|
}
|
|
30
|
-
catch
|
|
31
|
-
|
|
32
|
-
`
|
|
33
|
-
`
|
|
31
|
+
catch {
|
|
32
|
+
console.warn(`⚠️ MCP uiTemplate "${t.name}": widget not found at "${htmlAsset}" in the build output. ` +
|
|
33
|
+
`Output your single-file widget into your app's static/ directory ` +
|
|
34
|
+
`(e.g. static/mcp-ui/${t.name}.html, built BEFORE the app build) and set htmlPath to that path.`);
|
|
34
35
|
}
|
|
35
36
|
return { name: t.name, htmlAsset, csp: t.csp };
|
|
36
37
|
}));
|
|
@@ -89,10 +90,9 @@ export async function buildMcp(options = {}) {
|
|
|
89
90
|
});
|
|
90
91
|
const { server, tools, uiTemplates: rawUiTemplates, serverPublic } = await introspect(esmIntrospectPath);
|
|
91
92
|
await fs.rm(tempDir, { recursive: true, force: true });
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
|
|
95
|
-
const uiTemplates = await materializeUiTemplates(rawUiTemplates, resolvedProject, resolvedOut);
|
|
93
|
+
// Resolve each template's static-asset widget path; the runtime reads these
|
|
94
|
+
// bytes at bootstrap (same FileResolver as mcp.js) and serves them inline.
|
|
95
|
+
const uiTemplates = await resolveUiTemplates(rawUiTemplates, resolvedOut);
|
|
96
96
|
const manifest = {
|
|
97
97
|
version: 1,
|
|
98
98
|
bundle: 'mcp.js',
|
|
@@ -157,13 +157,41 @@ async function introspect(bundlePath) {
|
|
|
157
157
|
}
|
|
158
158
|
/** Merge the MCP manifest into an existing `manifest.json`. The embedded
|
|
159
159
|
* shape mirrors the standalone `mcp.json` so the Rust
|
|
160
|
-
* `platform::mcp::McpManifest` deserializer accepts both.
|
|
160
|
+
* `platform::mcp::McpManifest` deserializer accepts both.
|
|
161
|
+
*
|
|
162
|
+
* Also registers each UI template's single-file widget into the manifest's
|
|
163
|
+
* `routing.assets` list. The widgets live under the app's static dir (e.g.
|
|
164
|
+
* `static/mcp-ui/<name>.html`), but `generateManifest`'s `filterStaticAssets`
|
|
165
|
+
* drops `.html` files (they're treated as prerendered pages), so an MCP widget —
|
|
166
|
+
* which IS `.html` — never makes it into `routing.assets` and the deploy never
|
|
167
|
+
* ships it. We run AFTER that filter (and after the manifest is written), so we
|
|
168
|
+
* add the widgets explicitly here. Adapter-agnostic: every adapter reaches this
|
|
169
|
+
* via adapter-core's `buildAndIntegrateMcp`, and the static-dir name + routing
|
|
170
|
+
* shape are read from the manifest itself. */
|
|
161
171
|
export async function integrateMcpWithManifest(manifestPath, mcpManifest) {
|
|
162
172
|
if (!mcpManifest)
|
|
163
173
|
return;
|
|
164
174
|
const raw = await fs.readFile(manifestPath, 'utf-8');
|
|
165
175
|
const manifest = JSON.parse(raw);
|
|
166
176
|
manifest.mcp = mcpManifest;
|
|
177
|
+
// Register each widget as a static asset so the deploy uploads it and the
|
|
178
|
+
// runtime can resolve it. `htmlAsset` is deploy-relative (e.g.
|
|
179
|
+
// `static/mcp-ui/reader.html`); the asset URL strips the static-dir prefix
|
|
180
|
+
// (e.g. `/mcp-ui/reader.html`). Both reference the same shipped file.
|
|
181
|
+
const assets = manifest?.routing?.assets;
|
|
182
|
+
if (Array.isArray(assets) && Array.isArray(mcpManifest.uiTemplates)) {
|
|
183
|
+
const staticDir = String(manifest.static || 'static').replace(/^\/+|\/+$/g, '');
|
|
184
|
+
const prefix = `${staticDir}/`;
|
|
185
|
+
for (const t of mcpManifest.uiTemplates) {
|
|
186
|
+
const htmlAsset = t.htmlAsset;
|
|
187
|
+
if (!htmlAsset)
|
|
188
|
+
continue;
|
|
189
|
+
const rel = htmlAsset.replace(/^\.?\/+/, '');
|
|
190
|
+
const url = '/' + (rel.startsWith(prefix) ? rel.slice(prefix.length) : rel);
|
|
191
|
+
if (!assets.includes(url))
|
|
192
|
+
assets.push(url);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
167
195
|
await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2));
|
|
168
196
|
console.log('📝 Updated manifest.json with MCP configuration');
|
|
169
197
|
}
|
package/dist/mcp/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/mcp/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAUlD
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/mcp/build.ts"],"names":[],"mappings":"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"}
|