@agent-native/dispatch 0.8.16 → 0.8.17
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open_app.d.ts","sourceRoot":"","sources":["../../src/actions/open_app.ts"],"names":[],"mappings":";AA6HA,
|
|
1
|
+
{"version":3,"file":"open_app.d.ts","sourceRoot":"","sources":["../../src/actions/open_app.ts"],"names":[],"mappings":";AA6HA,wBAyBG"}
|
package/dist/actions/open_app.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open_app.js","sourceRoot":"","sources":["../../src/actions/open_app.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n defineAction,\n embedApp,\n MCP_APP_REQUEST_ORIGIN_CSP_SOURCE,\n type ActionMcpAppCsp,\n type ActionMcpAppCspBuilder,\n} from \"@agent-native/core\";\nimport { z } from \"zod\";\nimport {\n listGrantedDispatchMcpAppOrigins,\n openGrantedDispatchMcpApp,\n} from \"../server/lib/mcp-gateway.js\";\n\nconst deepLinkParam = z.union([z.string(), z.number(), z.boolean()]);\nconst openAppSchema = z\n .object({\n app: z\n .string()\n .describe(\n 'Granted app id, e.g. mail or calendar. Use \"dispatch\" for Dispatch-owned pages such as /extensions.',\n ),\n view: z.string().optional().describe(\"Target view in the app, e.g. inbox.\"),\n path: z\n .string()\n .optional()\n .describe(\n 'Optional route within the target app, e.g. /adhoc/q2 or /chart?panel=... . Dispatch extension routes such as /extensions/<id>/<slug> belong to app \"dispatch\".',\n ),\n params: z\n .record(z.string(), deepLinkParam)\n .optional()\n .describe(\"Optional record-focus or filter params.\"),\n embed: z\n .boolean()\n .optional()\n .describe(\n \"Render the app or focused route/component inline in MCP Apps when supported.\",\n ),\n chrome: z\n .enum([\"full\", \"minimal\"])\n .optional()\n .describe(\"Embed chrome preference for compatible app routes.\"),\n })\n .refine((input) => input.view?.trim() || input.path?.trim(), {\n message: \"open_app requires either view or path\",\n path: [\"view\"],\n });\n\ntype OpenAppArgs = z.infer<typeof openAppSchema>;\n\nfunction normalizeOpenAppArgs(args: OpenAppArgs): OpenAppArgs {\n if (!args.params) return args;\n\n const params = { ...args.params };\n const embedded = params.embed;\n const chrome = params.chrome;\n let changed = false;\n\n let normalizedEmbed = args.embed;\n if (normalizedEmbed == null) {\n if (embedded === true || embedded === \"true\") {\n normalizedEmbed = true;\n changed = true;\n } else if (embedded === false || embedded === \"false\") {\n normalizedEmbed = false;\n changed = true;\n }\n }\n if (\n embedded === true ||\n embedded === false ||\n embedded === \"true\" ||\n embedded === \"false\"\n ) {\n delete params.embed;\n changed = true;\n }\n\n let normalizedChrome = args.chrome;\n if (normalizedChrome == null && (chrome === \"full\" || chrome === \"minimal\")) {\n normalizedChrome = chrome;\n changed = true;\n }\n if (chrome === \"full\" || chrome === \"minimal\") {\n delete params.chrome;\n changed = true;\n }\n\n if (!changed) return args;\n return {\n ...args,\n params: Object.keys(params).length ? params : undefined,\n ...(normalizedEmbed == null ? {} : { embed: normalizedEmbed }),\n ...(normalizedChrome == null ? {} : { chrome: normalizedChrome }),\n };\n}\n\nconst localDevFrameSources = [\"http://localhost:*\", \"http://127.0.0.1:*\"];\n\nconst dispatchOpenAppCsp: ActionMcpAppCspBuilder = async (\n ctx,\n): Promise<ActionMcpAppCsp> => {\n const appOrigins = (await listGrantedDispatchMcpAppOrigins()).filter(\n (origin) => !ctx.requestOrigin || origin !== ctx.requestOrigin,\n );\n const routeSources = [\n MCP_APP_REQUEST_ORIGIN_CSP_SOURCE,\n ...appOrigins,\n ...localDevFrameSources,\n ];\n return {\n connectDomains: [\"https://esm.sh\", ...routeSources],\n resourceDomains: [\"https://esm.sh\", ...routeSources],\n frameDomains: routeSources,\n baseUriDomains: routeSources,\n };\n};\n\nconst openAppResource = embedApp({\n title: \"Open app\",\n description: \"Render the requested granted app route inline.\",\n iframeTitle: \"Dispatch MCP app\",\n openLabel: \"Open app\",\n});\n\nexport default defineAction({\n description:\n 'Build a deep link or embeddable app route/component route for an app available through Dispatch MCP. Use app \"dispatch\" for Dispatch extension/tool pages. No side effects; surface the returned Open link to the user.',\n schema: openAppSchema,\n http: { method: \"GET\" },\n readOnly: true,\n parallelSafe: true,\n run: async (args) => openGrantedDispatchMcpApp(normalizeOpenAppArgs(args)),\n link: ({ result }) => {\n if (!result || typeof result !== \"object\") return null;\n const r = result as { url?: string; app?: string; view?: string };\n if (!r.url) return null;\n return {\n url: r.url,\n label: `Open ${r.app ?? \"app\"}`,\n view: r.view,\n };\n },\n mcpApp: {\n resource: {\n ...openAppResource,\n csp: dispatchOpenAppCsp,\n },\n },\n});\n"]}
|
|
1
|
+
{"version":3,"file":"open_app.js","sourceRoot":"","sources":["../../src/actions/open_app.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n defineAction,\n embedApp,\n MCP_APP_REQUEST_ORIGIN_CSP_SOURCE,\n type ActionMcpAppCsp,\n type ActionMcpAppCspBuilder,\n} from \"@agent-native/core\";\nimport { z } from \"zod\";\nimport {\n listGrantedDispatchMcpAppOrigins,\n openGrantedDispatchMcpApp,\n} from \"../server/lib/mcp-gateway.js\";\n\nconst deepLinkParam = z.union([z.string(), z.number(), z.boolean()]);\nconst openAppSchema = z\n .object({\n app: z\n .string()\n .describe(\n 'Granted app id, e.g. mail or calendar. Use \"dispatch\" for Dispatch-owned pages such as /extensions.',\n ),\n view: z.string().optional().describe(\"Target view in the app, e.g. inbox.\"),\n path: z\n .string()\n .optional()\n .describe(\n 'Optional route within the target app, e.g. /adhoc/q2 or /chart?panel=... . Dispatch extension routes such as /extensions/<id>/<slug> belong to app \"dispatch\".',\n ),\n params: z\n .record(z.string(), deepLinkParam)\n .optional()\n .describe(\"Optional record-focus or filter params.\"),\n embed: z\n .boolean()\n .optional()\n .describe(\n \"Render the app or focused route/component inline in MCP Apps when supported.\",\n ),\n chrome: z\n .enum([\"full\", \"minimal\"])\n .optional()\n .describe(\"Embed chrome preference for compatible app routes.\"),\n })\n .refine((input) => input.view?.trim() || input.path?.trim(), {\n message: \"open_app requires either view or path\",\n path: [\"view\"],\n });\n\ntype OpenAppArgs = z.infer<typeof openAppSchema>;\n\nfunction normalizeOpenAppArgs(args: OpenAppArgs): OpenAppArgs {\n if (!args.params) return args;\n\n const params = { ...args.params };\n const embedded = params.embed;\n const chrome = params.chrome;\n let changed = false;\n\n let normalizedEmbed = args.embed;\n if (normalizedEmbed == null) {\n if (embedded === true || embedded === \"true\") {\n normalizedEmbed = true;\n changed = true;\n } else if (embedded === false || embedded === \"false\") {\n normalizedEmbed = false;\n changed = true;\n }\n }\n if (\n embedded === true ||\n embedded === false ||\n embedded === \"true\" ||\n embedded === \"false\"\n ) {\n delete params.embed;\n changed = true;\n }\n\n let normalizedChrome = args.chrome;\n if (normalizedChrome == null && (chrome === \"full\" || chrome === \"minimal\")) {\n normalizedChrome = chrome;\n changed = true;\n }\n if (chrome === \"full\" || chrome === \"minimal\") {\n delete params.chrome;\n changed = true;\n }\n\n if (!changed) return args;\n return {\n ...args,\n params: Object.keys(params).length ? params : undefined,\n ...(normalizedEmbed == null ? {} : { embed: normalizedEmbed }),\n ...(normalizedChrome == null ? {} : { chrome: normalizedChrome }),\n };\n}\n\nconst localDevFrameSources = [\"http://localhost:*\", \"http://127.0.0.1:*\"];\n\nconst dispatchOpenAppCsp: ActionMcpAppCspBuilder = async (\n ctx,\n): Promise<ActionMcpAppCsp> => {\n const appOrigins = (await listGrantedDispatchMcpAppOrigins()).filter(\n (origin) => !ctx.requestOrigin || origin !== ctx.requestOrigin,\n );\n const routeSources = [\n MCP_APP_REQUEST_ORIGIN_CSP_SOURCE,\n ...appOrigins,\n ...localDevFrameSources,\n ];\n return {\n connectDomains: [\"https://esm.sh\", ...routeSources],\n resourceDomains: [\"https://esm.sh\", ...routeSources],\n frameDomains: routeSources,\n baseUriDomains: routeSources,\n };\n};\n\nconst openAppResource = embedApp({\n title: \"Open app\",\n description: \"Render the requested granted app route inline.\",\n iframeTitle: \"Dispatch MCP app\",\n openLabel: \"Open app\",\n});\n\nexport default defineAction({\n description:\n 'Build a deep link or embeddable app route/component route for an app available through Dispatch MCP. Use app \"dispatch\" for Dispatch extension/tool pages. No side effects; surface the returned Open link to the user.',\n schema: openAppSchema,\n http: { method: \"GET\" },\n readOnly: true,\n parallelSafe: true,\n run: async (args) => openGrantedDispatchMcpApp(normalizeOpenAppArgs(args)),\n link: ({ result }) => {\n if (!result || typeof result !== \"object\") return null;\n const r = result as { url?: string; app?: string; view?: string };\n if (!r.url) return null;\n return {\n url: r.url,\n label: `Open ${r.app ?? \"app\"}`,\n view: r.view,\n };\n },\n mcpApp: {\n compactCatalog: true,\n resource: {\n ...openAppResource,\n csp: dispatchOpenAppCsp,\n },\n },\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/dispatch",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.17",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Dispatch — workspace control plane for agent-native apps. Vault, integrations, destinations, scheduled jobs, and cross-app delegation, shipped as a single drop-in package.",
|
|
6
6
|
"license": "MIT",
|